diff options
| Commit | 72d9bbcc3154142af79fb686d9dc7e4d1fa1badb (patch) | |
|---|---|---|
| Author | 2018-11-29 09:13:12 +0200 | |
| Committer | 2018-11-29 09:13:12 +0200 | |
| Files | 3cea4377cba9370f3f2248557f82831d617d89d1 /spasm/src/asm/assembler.cpp | |
| IPL-72d9bbcc3154142af79fb686d9dc7e4d1fa1badb.tar IPL-72d9bbcc3154142af79fb686d9dc7e4d1fa1badb.tar.gz IPL-72d9bbcc3154142af79fb686d9dc7e4d1fa1badb.zip | ||
| Parent | cdfd42d72030a031e5c5d810fcd53441902b5cff (diff) | |
Feature/strings (#75)
* The assembler supports string opcode
* disabled the string test until implmented
* strings can be printed
1 files changed, 23 insertions, 0 deletions
| -rw-r--r-- | spasm/src/asm/assembler.cpp | 23 |
diff --git a/spasm/src/asm/assembler.cpp b/spasm/src/asm/assembler.cpp index fadd747..1f69b1a 100644 --- a/spasm/src/asm/assembler.cpp +++ b/spasm/src/asm/assembler.cpp @@ -55,6 +55,23 @@ int get_arg_size(const Lexer::Token args[]) size = std::max(size, 3); break; } + case Lexer::Token::StringValue: + { + const auto length = args[i].value_str().size(); + if (length > 0xffffffff) + { + size = std::max(size, 3); + } + else if (length > 0xffff) + { + size = std::max(size, 2); + } + else if (length > 0xff) + { + size = std::max(size, 1); + } + break; + } default: break; } @@ -125,6 +142,12 @@ void Assembler::assemble() assert(args[1].type() == Lexer::Token::Ident); assemble_identifier(args[1]); } + else if (type == Lexer::Token::String) + { + assert(args[1].type() == Lexer::Token::StringValue); + const auto& s = args[1].value_str(); + _bytecode->push_string(s.data(), s.size(), arg_size); + } else { if (args[1].type() == Lexer::Token::Integer) |
