diff options
author | pommicket <pommicket@gmail.com> | 2022-02-12 23:44:48 -0500 |
---|---|---|
committer | pommicket <pommicket@gmail.com> | 2022-02-12 23:44:48 -0500 |
commit | 8c82a837786c59966410d53aaa128917f7d94c36 (patch) | |
tree | 5d32c7b27cd041928663618ac8eb254f3120c309 | |
parent | 29a92afcf2f57f61849faa560ccff388ce2e49af (diff) |
fix casting arguments to parameter type
-rw-r--r-- | 05/main.c | 3 | ||||
-rw-r--r-- | 05/parse.b | 4 |
2 files changed, 6 insertions, 1 deletions
@@ -12,6 +12,7 @@ long fibonacci(long x) { } int main(int argc, char **argv) { - return 1 || -0.1; + double x = 3.5; + return factorial(x); } @@ -2803,8 +2803,12 @@ function parse_expression :call_args_loop if *1p == SYMBOL_RPAREN goto call_args_loop_end n = token_next_semicolon_comma_rbracket(p) + *1out = EXPRESSION_CAST ; generate cast to proper argument type arg_type = out + 4 + out += 8 + b = out + 4 out = parse_expression(p, n, out) + *4arg_type = type_create_copy(*4b) b = types + param_type if *1b == 0 goto arg_is_varargs ; reached the end of arguments (so presumably this function has varargs) ; set argument type to parameter type. this is necessary because: |