Website Summary Files Commits Branches @commit @diff @stats
path: root / spasm / src / asm / assembler.cpp
diff options
context:
space:
mode:
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)