Skip to content

Commit

Permalink
ability_def and enum_block
Browse files Browse the repository at this point in the history
  • Loading branch information
chathura-1224 committed Jan 31, 2025
1 parent 14b8eb7 commit 63d8ec8
Showing 1 changed file with 15 additions and 13 deletions.
28 changes: 15 additions & 13 deletions jac/jaclang/compiler/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -631,7 +631,9 @@ def inherited_archs(self, kid: list[ast.AstNode]) -> ast.SubNodeList[ast.Expr]:
inherited_archs: LT (atomic_chain COMMA)* atomic_chain GT
| COLON (atomic_chain COMMA)* atomic_chain COLON
"""
valid_inh = [i for i in kid if isinstance(i, ast.Expr)]
valid_inh = []
while self.match(ast.Expr) is not None:
valid_inh.append(self.consume(ast.Expr))
return ast.SubNodeList[ast.Expr](
items=valid_inh,
delim=Tok.COMMA,
Expand All @@ -643,7 +645,7 @@ def sub_name(self, kid: list[ast.AstNode]) -> ast.SubTag[ast.Name]:
sub_name: COLON NAME
"""
self.consume(ast.Token)
self.node_idx = 1
if name := self.match(ast.Name):
return ast.SubTag[ast.Name](
tag=name,
Expand Down Expand Up @@ -674,8 +676,8 @@ def special_ref(self, kid: list[ast.AstNode]) -> ast.SpecialVarRef:
| KW_SELF
| KW_HERE
"""
if isinstance(kid[0], ast.Name):
return ast.SpecialVarRef(var=kid[0])
if special_var_ref := self.consume(ast.Name):
return ast.SpecialVarRef(var=special_var_ref)
else:
raise self.ice()

Expand Down Expand Up @@ -751,8 +753,8 @@ def enum_block(
enum_block: LBRACE ((enum_stmt COMMA)* enum_stmt COMMA?)? RBRACE
"""
ret = ast.SubNodeList[ast.EnumBlockStmt](items=[], delim=Tok.COMMA, kid=kid)
ret.items = [i for i in kid if isinstance(i, ast.EnumBlockStmt)]
ret = ast.SubNodeList[ast.EnumBlockStmt](items=[], delim=Tok.COMMA, kid=self.nodes)
ret.items = [i for i in self.nodes if isinstance(i, ast.EnumBlockStmt)]
return ret

def enum_stmt(self, kid: list[ast.AstNode]) -> ast.EnumBlockStmt:
Expand Down Expand Up @@ -899,15 +901,15 @@ def ability_def(self, kid: list[ast.AstNode]) -> ast.AbilityDef:
ability_def: arch_to_abil_chain (func_decl | event_clause) code_block
"""
if (
isinstance(kid[0], ast.ArchRefChain)
and isinstance(kid[1], (ast.FuncSignature, ast.EventSignature))
and isinstance(kid[2], ast.SubNodeList)
(ability_def_target := self.match(ast.ArchRefChain))
and (ability_def_sign := self.match(ast.FuncSignature) or self.match(ast.EventSignature))
and (ability_def_body := self.match(ast.SubNodeList))
):
return ast.AbilityDef(
target=kid[0],
signature=kid[1],
body=kid[2],
kid=kid,
target=ability_def_target,
signature=ability_def_sign,
body=ability_def_body,
kid=self.nodes,
)
else:
raise self.ice()
Expand Down

0 comments on commit 63d8ec8

Please sign in to comment.