Example #1
0
class Scope(FooNode):
    name = Field(type=Identifier)
    content = Field()

    env_spec = EnvSpec(add_to_env_kv(key=Self.name.symbol, value=Self),
                       add_env())
Example #2
0
class Name(FooNode):
    token_node = True

    env_spec = EnvSpec(add_to_env_kv(key=Self.symbol, val=Self), add_env())
Example #3
0
class Decl(FooNode):
    name = Field()
    items = Field()

    env_spec = EnvSpec(add_to_env_kv(key=Self.name.symbol, val=Self))
Example #4
0
class Definition(FooNode):
    name = Field()

    env_spec = EnvSpec(add_to_env_kv(key=Self.name.symbol, val=Self))
Example #5
0
class DefNode(FooNode):
    name = AbstractProperty(T.Symbol, public=True)
    env_spec = EnvSpec(
        add_to_env_kv(key=Self.name, val=Self)
    )
Example #6
0
class TypeDecl(FooNode):
    name = Field(type=T.Identifier)

    env_spec = EnvSpec(add_to_env_kv(Self.name.symbol, Self))
Example #7
0
class Var(DefNode):
    name = Field()
    value = Field()

    env_spec = EnvSpec(add_to_env_kv(key=Self.name.symbol, val=Self), )
Example #8
0
class Decl(BaseDecl):
    name = Field()
    env_spec = EnvSpec(add_to_env_kv(Self.name.symbol, Self), add_env())
Example #9
0
class Def(FooNode):
    name = Field()
    expr = Field()

    env_spec = EnvSpec(add_to_env_kv(key=Self.name.symbol, value=Self))
Example #10
0
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)))
Example #11
0
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())
Example #12
0
class Def(FooNode):
    name = Field()
    body = Field()
    env_spec = EnvSpec(add_env(), add_to_env_kv(Self.name, Self))
Example #13
0
class Decl(Item):
    name = Field(type=T.Identifier)

    env_spec = EnvSpec(add_to_env_kv(Self.name.symbol, Self))
Example #14
0
class Decl(FooNode):
    name = Field()
    refs = Field()

    env_spec = EnvSpec(add_to_env_kv(key=Self.name.symbol, value=Self),
                       add_env())
Example #15
0
class Decl(FooNode):
    id = Field(type=Identifier)

    env_spec = EnvSpec(add_to_env_kv(key=Self.id.symbol, value=Self))
Example #16
0
class Var(FooNode):
    name = Field(type=T.Name)

    env_spec = EnvSpec(add_to_env_kv(Self.name.symbol, Self))
Example #17
0
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))
Example #18
0
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)