diff options
Diffstat (limited to 'src/parser.c')
-rw-r--r-- | src/parser.c | 12 |
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 { |