summaryrefslogtreecommitdiff
path: root/05/parse.b
diff options
context:
space:
mode:
authorpommicket <pommicket@gmail.com>2022-02-14 22:43:25 -0500
committerpommicket <pommicket@gmail.com>2022-02-14 22:43:25 -0500
commitf7c3154b8a0108ddeecdbd5afc3ac2c99124aab6 (patch)
treeaffb47d70d6edb2f75cca5d800baed954fb8d1e1 /05/parse.b
parent0c5b34b8d082d980f0081ce818befdec46111b0b (diff)
strtoul, strtol
Diffstat (limited to '05/parse.b')
-rw-r--r--05/parse.b12
1 files changed, 10 insertions, 2 deletions
diff --git a/05/parse.b b/05/parse.b
index ec92853..9cc0f39 100644
--- a/05/parse.b
+++ b/05/parse.b
@@ -802,7 +802,9 @@ function parse_statement
:local_decl_initializer
token += 16
- if *1token == SYMBOL_LBRACE goto local_init_lbrace
+ if *1token == SYMBOL_LBRACE goto local_const_init
+ if *1token == TOKEN_STRING_LITERAL goto maybe_string_init
+ :not_string_init
n = token_next_semicolon_comma_rbracket(token)
out += 24
p = expressions_end
@@ -813,7 +815,13 @@ function parse_statement
type_decay_array_to_pointer_in_place(*4p) ; fix typing for `int[] x = {5,6}; int *y = x;`
token = n
goto local_decl_continue
- :local_init_lbrace
+ :maybe_string_init
+ ; check if we have char x[] = "hello"; or char *x = "hello"; (we'll use parse_constant_initializer for that)
+ p = token + 16
+ if *1p == SYMBOL_SEMICOLON goto local_const_init
+ if *1p == SYMBOL_COMMA goto local_const_init
+ goto not_string_init
+ :local_const_init
rwdata_end_addr += 7
rwdata_end_addr >= 3
rwdata_end_addr <= 3