class Scope(FooNode): name = Field(type=Identifier) content = Field() env_spec = EnvSpec(add_to_env_kv(key=Self.name.symbol, value=Self), add_env())
class Name(FooNode): token_node = True env_spec = EnvSpec(add_to_env_kv(key=Self.symbol, val=Self), add_env())
class Decl(FooNode): name = Field() items = Field() env_spec = EnvSpec(add_to_env_kv(key=Self.name.symbol, val=Self))
class Definition(FooNode): name = Field() env_spec = EnvSpec(add_to_env_kv(key=Self.name.symbol, val=Self))
class DefNode(FooNode): name = AbstractProperty(T.Symbol, public=True) env_spec = EnvSpec( add_to_env_kv(key=Self.name, val=Self) )
class TypeDecl(FooNode): name = Field(type=T.Identifier) env_spec = EnvSpec(add_to_env_kv(Self.name.symbol, Self))
class Var(DefNode): name = Field() value = Field() env_spec = EnvSpec(add_to_env_kv(key=Self.name.symbol, val=Self), )
class Decl(BaseDecl): name = Field() env_spec = EnvSpec(add_to_env_kv(Self.name.symbol, Self), add_env())
class Def(FooNode): name = Field() expr = Field() env_spec = EnvSpec(add_to_env_kv(key=Self.name.symbol, value=Self))
class Insert(FooNode): sym = Field(type=T.Id) node = Field(type=T.Id) env_spec = EnvSpec( add_to_env_kv(Self.sym.symbol, Self.unique_id(Self.node.symbol)))
class Program(FooNode): name = Field(type=T.Id) program_list = Field(T.Program.list) env_spec = EnvSpec(add_to_env_kv(Self.name.symbol, Self), add_env())
class Def(FooNode): name = Field() body = Field() env_spec = EnvSpec(add_env(), add_to_env_kv(Self.name, Self))
class Decl(Item): name = Field(type=T.Identifier) env_spec = EnvSpec(add_to_env_kv(Self.name.symbol, Self))
class Decl(FooNode): name = Field() refs = Field() env_spec = EnvSpec(add_to_env_kv(key=Self.name.symbol, value=Self), add_env())
class Decl(FooNode): id = Field(type=Identifier) env_spec = EnvSpec(add_to_env_kv(key=Self.id.symbol, value=Self))
class Var(FooNode): name = Field(type=T.Name) env_spec = EnvSpec(add_to_env_kv(Self.name.symbol, Self))
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 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)