diff options
author | dec05eba <dec05eba@protonmail.com> | 2020-01-29 19:04:00 +0100 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2020-01-29 19:04:00 +0100 |
commit | 2ce9ebc39011831f9bd73511f696f1dd567ac0b9 (patch) | |
tree | 92f937d43ea7b2711879e0c00d23a1e3eade648d /src/parser.c | |
parent | 1ab8f5d8bd9a730f8d6b11335343835b19fc4c3e (diff) |
Allow passing variables to commands as args
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 { |