aboutsummaryrefslogtreecommitdiff
path: root/src/parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.c')
-rw-r--r--src/parser.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/parser.c b/src/parser.c
index a6f340f..347e0de 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -226,7 +226,17 @@ static TslParseResult tsl_parser_parse_command(TslParser *self, int *num_args) {
TslCommandToken command_token = tsl_tokenizer_next_command_arg(&self->tokenizer, &command_arg);
if(command_token == TSL_COMMAND_TOKEN_ARG) {
++*num_args;
- return_if_error(tsl_bytecode_add_ins4(get_function_bytecode(self), TSL_OPCODE_LOADCA, &command_arg));
+ if(command_arg.data[0] == '$') {
+ command_arg.data += 1;
+ command_arg.size -= 1;
+ if(command_arg.size == 0) {
+ fprintf(stderr, "Error: Expected variable name after '$'\n");
+ return TSL_PARSE_RESULT_ERR;
+ }
+ return_if_error(tsl_bytecode_add_ins4(get_function_bytecode(self), TSL_OPCODE_LOADV, &command_arg));
+ } else {
+ return_if_error(tsl_bytecode_add_ins4(get_function_bytecode(self), TSL_OPCODE_LOADS, &command_arg));
+ }
} else if(command_token == TSL_COMMAND_TOKEN_END) {
return TSL_PARSE_RESULT_OK;
} else {