diff options
Diffstat (limited to 'src/codegen/codegen.c')
| -rw-r--r-- | src/codegen/codegen.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/codegen/codegen.c b/src/codegen/codegen.c index 22cbc15..95e0ccd 100644 --- a/src/codegen/codegen.c +++ b/src/codegen/codegen.c @@ -603,7 +603,15 @@ void codegen_expression(ParserContext *ctx, ASTNode *node, FILE *out) emit_auto_type(ctx, node->member.target, node->token, out); fprintf(out, " _t = ("); codegen_expression(ctx, node->member.target, out); - fprintf(out, "); _t ? _t->%s : 0; })", node->member.field); + char *field = node->member.field; + if (field && field[0] >= '0' && field[0] <= '9') + { + fprintf(out, "); _t ? _t->v%s : 0; })", field); + } + else + { + fprintf(out, "); _t ? _t->%s : 0; })", field); + } } else { @@ -619,7 +627,15 @@ void codegen_expression(ParserContext *ctx, ASTNode *node, FILE *out) { free(lt); } - fprintf(out, "%s%s", actually_ptr ? "->" : ".", node->member.field); + char *field = node->member.field; + if (field && field[0] >= '0' && field[0] <= '9') + { + fprintf(out, "%sv%s", actually_ptr ? "->" : ".", field); + } + else + { + fprintf(out, "%s%s", actually_ptr ? "->" : ".", field); + } } break; case NODE_EXPR_INDEX: |
