aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-05-21 12:44:45 +0100
committergingerBill <bill@gingerbill.org>2021-05-21 12:44:45 +0100
commit159daba7590873ba76acef19beac88265eafb949 (patch)
tree05a57bbc9f6245a0e4b4eacaaf59e8883873ce48 /src
parentd7e85725e101cd2b57a0b5ea4f08c3ec1d2ec7c2 (diff)
Fix `ast_end_token`
Diffstat (limited to 'src')
-rw-r--r--src/parser_pos.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/parser_pos.cpp b/src/parser_pos.cpp
index c5ad89604..895818873 100644
--- a/src/parser_pos.cpp
+++ b/src/parser_pos.cpp
@@ -125,6 +125,8 @@ Token ast_end_token(Ast *node) {
GB_ASSERT(node != nullptr);
switch (node->kind) {
+ case Ast_Invalid:
+ return empty_token;
case Ast_Ident: return node->Ident.token;
case Ast_Implicit: return node->Implicit;
case Ast_Undef: return node->Undef;
@@ -140,7 +142,11 @@ Token ast_end_token(Ast *node) {
return node->CompoundLit.close;
case Ast_BadExpr: return node->BadExpr.end;
- case Ast_TagExpr: return ast_end_token(node->TagExpr.expr);
+ case Ast_TagExpr:
+ if (node->TagExpr.expr) {
+ return ast_end_token(node->TagExpr.expr);
+ }
+ return node->TagExpr.name;
case Ast_UnaryExpr: return ast_end_token(node->UnaryExpr.expr);
case Ast_BinaryExpr: return ast_end_token(node->BinaryExpr.right);
case Ast_ParenExpr: return node->ParenExpr.close;
@@ -150,7 +156,10 @@ Token ast_end_token(Ast *node) {
case Ast_SelectorCallExpr:
return ast_end_token(node->SelectorCallExpr.call);
case Ast_ImplicitSelectorExpr:
- return ast_end_token(node->SelectorExpr.selector);
+ if (node->ImplicitSelectorExpr.selector) {
+ return ast_end_token(node->ImplicitSelectorExpr.selector);
+ }
+ return node->ImplicitSelectorExpr.token;
case Ast_IndexExpr: return node->IndexExpr.close;
case Ast_SliceExpr: return node->SliceExpr.close;
case Ast_Ellipsis: