class Decl(FooNode): name = Field(type=T.Identifier) expr_tree = Field(type=T.Expr) env_spec = EnvSpec(add_to_env_kv(key=Self.name.symbol, val=Self))
class Scope(Name.list): env_spec = EnvSpec(add_env())
class Var(FooNode): name = Field(type=T.Name) env_spec = EnvSpec(add_to_env_kv(Self.name.symbol, Self))
class Decl(FooNode): name = Field() env_spec = EnvSpec(add_to_env_kv(key=Self.name.symbol, val=Self))
class Decl(FooNode): name = Field() items = Field() env_spec = EnvSpec( add_to_env(mappings=New(T.env_assoc, key=Self.name.symbol, val=Self)))
class Def(FooNode): name = Field() body = Field() env_spec = EnvSpec(add_env(), add_to_env_kv(Self.name, Self))
class Block(Stmt): items = Field() env_spec = EnvSpec(add_env=True)
class Decl(BaseDecl): name = Field() env_spec = EnvSpec( add_to_env_kv(Self.name.symbol, Self), add_env() )
class DefNode(FooNode): name = AbstractProperty(T.Symbol, public=True) env_spec = EnvSpec(add_to_env(mappings=New(T.env_assoc, key=Self.name, val=Self)))
class StructA(Struct): env_spec = EnvSpec()
class RootNode(FooNode): env_spec = EnvSpec(add_env()) decls = Field()
class Name(FooNode): tok = Field() env_spec = EnvSpec( add_to_env(New(T.env_assoc, key=Self.tok.symbol, val=Self)), add_env())
class Var(DefNode): name = Field() value = Field() env_spec = EnvSpec(add_to_env_kv(key=Self.name.symbol, val=Self), )
class DefBlock(FooNode): id = Field(type=T.Identifier) env_spec = EnvSpec(add_env(names=[Self.id.symbol]))
class Params(Param.list): env_spec = EnvSpec(add_env())
class PackageBody(FooNode): name = Field(type=T.Name) decls = Field(type=T.DeclarativePart) @langkit_property(return_type=T.Name) def self_name(): return Self.name @langkit_property(return_type=T.LexicalEnv) def body_decl_scope(): """ Assuming this PackageBody is not in the top-level list, return the environment of its PackageDecl that it should reference. """ pkg_decl = Var(Self.lookup_decl_part) return If(pkg_decl.private_part.is_null, pkg_decl.children_env, pkg_decl.private_part.children_env) @langkit_property(return_type=T.PackageDecl) def lookup_decl_part(): """ Assuming this PackageBody is not in the top-level list, return the the corresponding package declaration. """ return (Self.parent.children_env.get_first( Self.name.base_name.to_symbol).cast(T.PackageDecl).node) env_spec = EnvSpec( # The initial environment for package bodies is the private part of the # corresponding package specs (or the public part if there is no # private part). set_initial_env( If( Self.is_toplevel, named_env( Self.suffixed_full_name( String('__privatepart')).to_symbol), direct_env(Self.parent.children_env), ), ), add_to_env_kv( '__nextpart', Self, If( Self.can_have_name, named_env( Self.suffixed_full_name( String('__privatepart')).to_symbol), direct_env(Self.body_decl_scope))), add_env(names=[Self.suffixed_full_name(String('__body')).to_symbol]), reference( Self.cast(FooNode).singleton, through=T.PackageBody.body_decl_scope, cond=Not(Self.is_toplevel), kind=RefKind.prioritary, ), ) @langkit_property(return_type=T.PackageDecl.entity, public=True) def decl_part(): """ Return the PackageDecl node corresponding to this PackageBody. """ env = Var(Self.parent.children_env) return Self.name.resolve(env).cast(T.PackageDecl)
class Example(FooNode): token_node = True env_spec = EnvSpec(add_env())
class TypeDecl(FooNode): name = Field(type=T.Identifier) env_spec = EnvSpec(add_to_env_kv(Self.name.symbol, Self))
class Def(Stmt): id = Field() body = Field() env_spec = EnvSpec(add_env=True, add_to_env=add_to_env(Self.id.symbol, Self))
class Example(FooNode): env_spec = EnvSpec(set_initial_env(Self.parent.parent.children_env))
class Dep(FooNode): name = Field() env_spec = EnvSpec(do(Self.name.referenced_unit))
class Name(FooNode): token_node = True env_spec = EnvSpec(add_to_env(New(T.env_assoc, key=Self.symbol, val=Self)), add_env())
class Using(FooNode): name = Field() env_spec = EnvSpec( reference(Self.name.cast(FooNode)._.singleton, through=Name.designated_env))
class ExampleNode(FooNode): env_spec = EnvSpec(add_env(), add_env())
class Name(FooNode): token_node = True env_spec = EnvSpec(add_to_env_kv(key=Self.symbol, val=Self), add_env())
class DefStmt(Stmt): env_spec = EnvSpec(add_env())
class Cat2(FooNode): decls = Field(type=T.Var.list) env_spec = EnvSpec(add_env())
class DefNode(FooNode): name = AbstractProperty(T.Symbol, public=True) env_spec = EnvSpec(add_to_env_kv(key=Self.name, val=Self))
class Decl(Item): name = Field(type=T.Identifier) env_spec = EnvSpec(add_to_env_kv(Self.name.symbol, Self))
class Var(FooNode): name = Field() value = Field() env_spec = EnvSpec( add_to_env(New(T.env_assoc, key=Self.name.symbol, val=Self)), )