Website Summary Files Commits Branches @commit @diff @stats
path: root / spasm / src / asm / assembler.cpp
diff options
context:
space:
mode:
Commit72d9bbcc3154142af79fb686d9dc7e4d1fa1badb (patch)
Author
 dtrendafilov <trendafilov.dn@gmail.com>
2018-11-29 09:13:12 +0200
Committer
 GitHub <noreply@github.com>
2018-11-29 09:13:12 +0200
Files3cea4377cba9370f3f2248557f82831d617d89d1 /spasm/src/asm/assembler.cpp
IPL-72d9bbcc3154142af79fb686d9dc7e4d1fa1badb.tar
IPL-72d9bbcc3154142af79fb686d9dc7e4d1fa1badb.tar.gz
IPL-72d9bbcc3154142af79fb686d9dc7e4d1fa1badb.zip
Parentcdfd42d72030a031e5c5d810fcd53441902b5cff (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.cpp23
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)