Пример #1
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))
Пример #2
0
class Scope(Name.list):
    env_spec = EnvSpec(add_env())
Пример #3
0
class Var(FooNode):
    name = Field(type=T.Name)

    env_spec = EnvSpec(add_to_env_kv(Self.name.symbol, Self))
Пример #4
0
class Decl(FooNode):
    name = Field()

    env_spec = EnvSpec(add_to_env_kv(key=Self.name.symbol, val=Self))
Пример #5
0
class Decl(FooNode):
    name = Field()
    items = Field()

    env_spec = EnvSpec(
        add_to_env(mappings=New(T.env_assoc, key=Self.name.symbol, val=Self)))
Пример #6
0
class Def(FooNode):
    name = Field()
    body = Field()
    env_spec = EnvSpec(add_env(), add_to_env_kv(Self.name, Self))
Пример #7
0
class Block(Stmt):
    items = Field()

    env_spec = EnvSpec(add_env=True)
Пример #8
0
class Decl(BaseDecl):
    name = Field()
    env_spec = EnvSpec(
        add_to_env_kv(Self.name.symbol, Self),
        add_env()
    )
Пример #9
0
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)))
Пример #10
0
 class StructA(Struct):
     env_spec = EnvSpec()
Пример #11
0
class RootNode(FooNode):
    env_spec = EnvSpec(add_env())
    decls = Field()
Пример #12
0
class Name(FooNode):
    tok = Field()

    env_spec = EnvSpec(
        add_to_env(New(T.env_assoc, key=Self.tok.symbol, val=Self)), add_env())
Пример #13
0
class Var(DefNode):
    name = Field()
    value = Field()

    env_spec = EnvSpec(add_to_env_kv(key=Self.name.symbol, val=Self), )
Пример #14
0
class DefBlock(FooNode):
    id = Field(type=T.Identifier)

    env_spec = EnvSpec(add_env(names=[Self.id.symbol]))
Пример #15
0
class Params(Param.list):
    env_spec = EnvSpec(add_env())
Пример #16
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)
Пример #17
0
class Example(FooNode):
    token_node = True

    env_spec = EnvSpec(add_env())
Пример #18
0
class TypeDecl(FooNode):
    name = Field(type=T.Identifier)

    env_spec = EnvSpec(add_to_env_kv(Self.name.symbol, Self))
Пример #19
0
class Def(Stmt):
    id = Field()
    body = Field()

    env_spec = EnvSpec(add_env=True,
                       add_to_env=add_to_env(Self.id.symbol, Self))
Пример #20
0
class Example(FooNode):
    env_spec = EnvSpec(set_initial_env(Self.parent.parent.children_env))
Пример #21
0
class Dep(FooNode):
    name = Field()

    env_spec = EnvSpec(do(Self.name.referenced_unit))
Пример #22
0
class Name(FooNode):
    token_node = True

    env_spec = EnvSpec(add_to_env(New(T.env_assoc, key=Self.symbol, val=Self)),
                       add_env())
Пример #23
0
class Using(FooNode):
    name = Field()
    env_spec = EnvSpec(
        reference(Self.name.cast(FooNode)._.singleton,
                  through=Name.designated_env))
Пример #24
0
 class ExampleNode(FooNode):
     env_spec = EnvSpec(add_env(), add_env())
Пример #25
0
class Name(FooNode):
    token_node = True

    env_spec = EnvSpec(add_to_env_kv(key=Self.symbol, val=Self), add_env())
Пример #26
0
class DefStmt(Stmt):
    env_spec = EnvSpec(add_env())
Пример #27
0
class Cat2(FooNode):
    decls = Field(type=T.Var.list)

    env_spec = EnvSpec(add_env())
Пример #28
0
class DefNode(FooNode):
    name = AbstractProperty(T.Symbol, public=True)
    env_spec = EnvSpec(add_to_env_kv(key=Self.name, val=Self))
Пример #29
0
class Decl(Item):
    name = Field(type=T.Identifier)

    env_spec = EnvSpec(add_to_env_kv(Self.name.symbol, Self))
Пример #30
0
class Var(FooNode):
    name = Field()
    value = Field()

    env_spec = EnvSpec(
        add_to_env(New(T.env_assoc, key=Self.name.symbol, val=Self)), )