@@ -660,7 +660,7 @@ internal E_Expr *
660660e_push_expr (Arena * arena , E_ExprKind kind , void * location )
661661{
662662 E_Expr * e = push_array (arena , E_Expr , 1 );
663- e -> first = e -> last = e -> next = e -> ref = e -> first_tag = e -> last_tag = & e_expr_nil ;
663+ e -> first = e -> last = e -> next = e -> prev = e -> ref = e -> first_tag = e -> last_tag = & e_expr_nil ;
664664 e -> location = location ;
665665 e -> kind = kind ;
666666 return e ;
@@ -1110,14 +1110,14 @@ e_parse_type_from_text_tokens(Arena *arena, String8 text, E_TokenArray *tokens)
11101110 }
11111111
11121112 // rjf: construct leaf type
1113- parse .first_expr = parse .last_expr = e_push_expr (arena , E_ExprKind_TypeIdent , token_string .str );
1114- parse .first_expr -> type_key = type_key ;
1113+ parse .exprs . first = parse .exprs . last = e_push_expr (arena , E_ExprKind_TypeIdent , token_string .str );
1114+ parse .exprs . first -> type_key = type_key ;
11151115 }
11161116 }
11171117 }
11181118
11191119 //- rjf: parse extensions
1120- if (parse .first_expr != & e_expr_nil )
1120+ if (parse .exprs . first != & e_expr_nil )
11211121 {
11221122 for (;;)
11231123 {
@@ -1130,9 +1130,9 @@ e_parse_type_from_text_tokens(Arena *arena, String8 text, E_TokenArray *tokens)
11301130 if (str8_match (token_string , str8_lit ("*" ), 0 ))
11311131 {
11321132 token_it += 1 ;
1133- E_Expr * ptee = parse .first_expr ;
1134- parse .first_expr = parse .last_expr = e_push_expr (arena , E_ExprKind_Ptr , token_string .str );
1135- e_expr_push_child (parse .first_expr , ptee );
1133+ E_Expr * ptee = parse .exprs . first ;
1134+ parse .exprs . first = parse .exprs . last = e_push_expr (arena , E_ExprKind_Ptr , token_string .str );
1135+ e_expr_push_child (parse .exprs . first , ptee );
11361136 }
11371137 else
11381138 {
@@ -1246,7 +1246,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
12461246 // rjf: parse type expr
12471247 E_TokenArray type_parse_tokens = e_token_array_make_first_opl (it , it_opl );
12481248 E_Parse type_parse = e_parse_type_from_text_tokens (arena , text , & type_parse_tokens );
1249- E_Expr * type = type_parse .last_expr ;
1249+ E_Expr * type = type_parse .exprs . last ;
12501250 e_msg_list_concat_in_place (& result .msgs , & type_parse .msgs );
12511251 it = type_parse .last_token ;
12521252 location = token_string .str ;
@@ -1329,7 +1329,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
13291329 E_TokenArray nested_parse_tokens = e_token_array_make_first_opl (it , it_opl );
13301330 E_Parse nested_parse = e_parse_expr_from_text_tokens__prec (arena , text , & nested_parse_tokens , e_max_precedence , 1 );
13311331 e_msg_list_concat_in_place (& result .msgs , & nested_parse .msgs );
1332- atom = nested_parse .last_expr ;
1332+ atom = nested_parse .exprs . last ;
13331333 it = nested_parse .last_token ;
13341334
13351335 // rjf: expect )
@@ -1357,11 +1357,11 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
13571357 E_TokenArray nested_parse_tokens = e_token_array_make_first_opl (it , it_opl );
13581358 E_Parse nested_parse = e_parse_expr_from_text_tokens__prec (arena , text , & nested_parse_tokens , e_max_precedence , 1 );
13591359 e_msg_list_concat_in_place (& result .msgs , & nested_parse .msgs );
1360- atom = nested_parse .last_expr ;
1360+ atom = nested_parse .exprs . last ;
13611361 it = nested_parse .last_token ;
13621362
13631363 // rjf: build cast-to-U64*, and dereference operators
1364- if (nested_parse .last_expr == & e_expr_nil )
1364+ if (nested_parse .exprs . last == & e_expr_nil )
13651365 {
13661366 e_msgf (arena , & result .msgs , E_MsgKind_MalformedInput , token_string .str , "Expected expression following `[`." );
13671367 }
@@ -1737,7 +1737,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
17371737 {
17381738 E_TokenArray type_parse_tokens = e_token_array_make_first_opl (it - 1 , it_opl );
17391739 E_Parse type_parse = e_parse_type_from_text_tokens (arena , text , & type_parse_tokens );
1740- E_Expr * type = type_parse .last_expr ;
1740+ E_Expr * type = type_parse .exprs . last ;
17411741 e_msg_list_concat_in_place (& result .msgs , & type_parse .msgs );
17421742 it = type_parse .last_token ;
17431743 atom = type ;
@@ -2015,10 +2015,10 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
20152015 it = idx_expr_parse .last_token ;
20162016
20172017 // rjf: valid indexing expression => produce index expr
2018- if (idx_expr_parse .last_expr != & e_expr_nil )
2018+ if (idx_expr_parse .exprs . last != & e_expr_nil )
20192019 {
20202020 E_Expr * array_expr = atom ;
2021- E_Expr * index_expr = idx_expr_parse .last_expr ;
2021+ E_Expr * index_expr = idx_expr_parse .exprs . last ;
20222022 atom = e_push_expr (arena , E_ExprKind_ArrayIndex , token_string .str );
20232023 e_expr_push_child (atom , array_expr );
20242024 e_expr_push_child (atom , index_expr );
@@ -2055,11 +2055,11 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
20552055 E_Parse args_parse = e_parse_expr_from_text_tokens__prec (arena , text , & args_parse_tokens , e_max_precedence , max_U64 );
20562056 e_msg_list_concat_in_place (& result .msgs , & args_parse .msgs );
20572057 it = args_parse .last_token ;
2058- if (args_parse .first_expr != & e_expr_nil )
2058+ if (args_parse .exprs . first != & e_expr_nil )
20592059 {
2060- call_expr -> last -> next = args_parse .first_expr ;
2061- args_parse .first_expr -> prev = call_expr -> last ;
2062- call_expr -> last = args_parse .last_expr ;
2060+ call_expr -> last -> next = args_parse .exprs . first ;
2061+ args_parse .exprs . first -> prev = call_expr -> last ;
2062+ call_expr -> last = args_parse .exprs . last ;
20632063 }
20642064 atom = call_expr ;
20652065
@@ -2153,7 +2153,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
21532153 E_TokenArray rhs_expr_parse_tokens = e_token_array_make_first_opl (it + 1 , it_opl );
21542154 E_Parse rhs_expr_parse = e_parse_expr_from_text_tokens__prec (arena , text , & rhs_expr_parse_tokens , binary_precedence - 1 , 1 );
21552155 e_msg_list_concat_in_place (& result .msgs , & rhs_expr_parse .msgs );
2156- E_Expr * rhs = rhs_expr_parse .last_expr ;
2156+ E_Expr * rhs = rhs_expr_parse .exprs . last ;
21572157 it = rhs_expr_parse .last_token ;
21582158 if (rhs == & e_expr_nil )
21592159 {
@@ -2179,9 +2179,9 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
21792179 E_TokenArray middle_expr_tokens = e_token_array_make_first_opl (it , it_opl );
21802180 E_Parse middle_expr_parse = e_parse_expr_from_text_tokens__prec (arena , text , & middle_expr_tokens , e_max_precedence , 1 );
21812181 it = middle_expr_parse .last_token ;
2182- E_Expr * middle_expr = middle_expr_parse .last_expr ;
2182+ E_Expr * middle_expr = middle_expr_parse .exprs . last ;
21832183 e_msg_list_concat_in_place (& result .msgs , & middle_expr_parse .msgs );
2184- if (middle_expr_parse .last_expr == & e_expr_nil )
2184+ if (middle_expr_parse .exprs . last == & e_expr_nil )
21852185 {
21862186 e_msgf (arena , & result .msgs , E_MsgKind_MalformedInput , token_string .str , "Expected expression after `?`." );
21872187 }
@@ -2213,20 +2213,20 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
22132213 {
22142214 it = rhs_expr_parse .last_token ;
22152215 e_msg_list_concat_in_place (& result .msgs , & rhs_expr_parse .msgs );
2216- if (rhs_expr_parse .last_expr == & e_expr_nil )
2216+ if (rhs_expr_parse .exprs . last == & e_expr_nil )
22172217 {
22182218 e_msgf (arena , & result .msgs , E_MsgKind_MalformedInput , colon_token_string .str , "Expected expression after `:`." );
22192219 }
22202220 }
22212221
22222222 // rjf: build ternary
22232223 if (atom != & e_expr_nil &&
2224- middle_expr_parse .last_expr != & e_expr_nil &&
2225- rhs_expr_parse .last_expr != & e_expr_nil )
2224+ middle_expr_parse .exprs . last != & e_expr_nil &&
2225+ rhs_expr_parse .exprs . last != & e_expr_nil )
22262226 {
22272227 E_Expr * lhs = atom ;
2228- E_Expr * mhs = middle_expr_parse .last_expr ;
2229- E_Expr * rhs = rhs_expr_parse .last_expr ;
2228+ E_Expr * mhs = middle_expr_parse .exprs . last ;
2229+ E_Expr * rhs = rhs_expr_parse .exprs . last ;
22302230 atom = e_push_expr (arena , E_ExprKind_Ternary , token_string .str );
22312231 e_expr_push_child (atom , lhs );
22322232 e_expr_push_child (atom , mhs );
@@ -2244,7 +2244,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
22442244 E_Parse tags_parse = e_parse_expr_from_text_tokens__prec (arena , text , & tags_tokens , e_max_precedence , max_U64 );
22452245 e_msg_list_concat_in_place (& result .msgs , & tags_parse .msgs );
22462246 it = tags_parse .last_token ;
2247- for (E_Expr * tag = tags_parse .first_expr , * next = & e_expr_nil ; tag != & e_expr_nil ; tag = next )
2247+ for (E_Expr * tag = tags_parse .exprs . first , * next = & e_expr_nil ; tag != & e_expr_nil ; tag = next )
22482248 {
22492249 next = tag -> next ;
22502250 e_expr_push_tag (atom , tag );
@@ -2262,7 +2262,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
22622262 //- rjf: store parsed atom to expression chain - if we didn't get an expression, break
22632263 if (atom != & e_expr_nil )
22642264 {
2265- DLLPushBack_NPZ (& e_expr_nil , result .first_expr , result .last_expr , atom , next , prev );
2265+ DLLPushBack_NPZ (& e_expr_nil , result .exprs . first , result .exprs . last , atom , next , prev );
22662266 chain_count += 1 ;
22672267 }
22682268 else
@@ -2287,14 +2287,14 @@ e_parse_expr_from_text_tokens(Arena *arena, String8 text, E_TokenArray *tokens)
22872287 return parse ;
22882288}
22892289
2290- internal E_Expr *
2290+ internal E_Parse
22912291e_parse_expr_from_text (Arena * arena , String8 text )
22922292{
22932293 Temp scratch = scratch_begin (& arena , 1 );
22942294 E_TokenArray tokens = e_token_array_from_text (scratch .arena , text );
22952295 E_Parse parse = e_parse_expr_from_text_tokens (arena , text , & tokens );
22962296 scratch_end (scratch );
2297- return parse . last_expr ;
2297+ return parse ;
22982298}
22992299
23002300internal E_Parse
0 commit comments