Esempio n. 1
0
class Scope(FooNode):
    name = Field(type=T.SimpleId)
    content = Field()

    env_spec = EnvSpec(
        add_to_env(New(T.env_assoc, key=Self.name.symbol, val=Self)),
        add_env())
Esempio n. 2
0
class Def(Stmt):
    id = Field()
    body = Field()

    env_spec = EnvSpec(add_to_env(Self.id.symbol, Self), add_env())

    faulty_prop = Property(Self._env_mappings_0)
Esempio n. 3
0
class Var(FooNode):
    name = Field()
    expr = Field()

    env_spec = EnvSpec(
        add_to_env(mappings=New(T.env_assoc, key=Self.name.symbol, val=Self)),
    )
Esempio n. 4
0
class Block(DefNode):
    params = Field(type=T.Params)
    name_field = Field(type=T.Name)
    vars = Field(type=T.BlockVar.list)

    name = Property(Self.name_field.symbol)

    @langkit_property(public=True)
    def rebind(from_block=T.Block.entity, to_block=T.Block.entity):
        rbdng = Var(Entity.info.rebindings.append_rebinding(
            from_block.params.children_env,
            to_block.children_env
        ))

        e_info = Var(New(T.entity_info,
                         md=Entity.info.md,
                         rebindings=rbdng,
                         from_rebound=False))

        return New(Block.entity, node=Self, info=e_info)

    env_spec = EnvSpec(
        add_to_env(mappings=New(T.env_assoc, key=Self.name, val=Self)),
        add_env()
    )
Esempio n. 5
0
class Var(DefNode):
    name = Field()
    value = Field()

    env_spec = EnvSpec(
        add_to_env(New(T.env_assoc, key=Self.name.symbol, val=Self)),
    )
Esempio n. 6
0
class Decl(FooNode):
    name = Field()
    refs = Field()

    env_spec = EnvSpec(
        add_to_env(New(T.env_assoc, key=Self.name.symbol, val=Self)),
        add_env())
Esempio n. 7
0
class Scope(DefNode):
    name = Field()
    defs = Field()

    env_spec = EnvSpec(
        add_to_env(New(T.env_assoc, key=Self.name.symbol, val=Self)),
        add_env(),
    )
Esempio n. 8
0
class Block(FooNode):
    name = Field()
    decls = Field()
    usings = Field()
    refs = Field()

    env_spec = EnvSpec(
        add_to_env(New(T.env_assoc, key=Self.name.sym, val=Self)), add_env())
Esempio n. 9
0
class Def(Stmt):
    id = Field()
    body = Field()

    name = Property(Self.id)
    env_spec = EnvSpec(add_env=True,
                       add_to_env=add_to_env(Self.id.symbol, Self))

    faulty_prop = Property(Self._env_value_1)
Esempio n. 10
0
class Example(FooNode):
    token_node = True

    env_spec = EnvSpec(
        add_env(),
        add_to_env(
            new_env_assoc(key="foo",
                          val=Self,
                          dest_env=Self.children_env.env_orphan)))
Esempio n. 11
0
class Block(FooNode):
    name = Field(type=Name)
    content = Field(type=Ref.list)

    env_spec = EnvSpec(
        add_env(),
        add_to_env(T.env_assoc.new(key=Self.name.symbol, val=Self),
                   dest_env=Self.node_env),
    )
Esempio n. 12
0
class Scope(Def):
    error = Field()
    name = Field()
    defs = Field()

    env_spec = EnvSpec(
        add_to_env(New(T.env_assoc, key=Self.name.symbol, val=Self)),
        add_env(),
        do(If(Self.error.as_bool, PropertyError(T.FooNode), No(T.FooNode))),
    )
Esempio n. 13
0
class ForeignDecl(FooNode):
    id = Field(type=T.Id)

    env_spec = EnvSpec(
        add_to_env(New(T.env_assoc, key=Self.id.simple_name.symbol, val=Self),
                   dest_env=Self.id.match(
                       lambda simple=T.SimpleId: simple.node_env,
                       lambda scoped=T.ScopedId: scoped.resolve(Self.node_env).
                       children_env,
                   )))
Esempio n. 14
0
class AssignStmt(Stmt):
    l_value = Field(type=T.Expr.list)
    r_values = Field(type=T.PythonNode.list)

    env_spec = EnvSpec(
        add_to_env(Self.l_value.filtermap(
            lambda e: new_env_assoc(key=e.cast_or_raise(T.Id).sym, value=Self),
            lambda e: e.is_a(T.Id),
        ))
    )
Esempio n. 15
0
class Def(FooNode):
    name = Field(type=T.Name)
    ref = Field(type=T.Name)

    env_spec = EnvSpec(
        add_to_env(mappings=New(T.env_assoc, key=Self.name.sym, val=Self),
                   metadata=New(Metadata,
                                node=Self.ref.then(lambda r: r.resolve.node,
                                                   default_val=No(
                                                       T.FooNode)))))
Esempio n. 16
0
class Ref(FooNode):
    name = Field()

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

    @langkit_property(public=True)
    def resolve():
        return Self.node_env.get(Self.name.symbol).at(0)
Esempio n. 17
0
class VarDecl(FooNode):
    name = Field()
    value = Field()

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

    @langkit_property(public=True)
    def eval():
        return Self.value.eval
Esempio n. 18
0
class FunDecl(FooNode):
    name = Field(type=T.Identifier)
    args = Field(type=T.ArgSpec.list)

    env_spec = EnvSpec(
        add_to_env(
            T.env_assoc.new(
                key=Self.name.symbol,
                value=Self,
                dest_env=current_env(),
                metadata=No(T.Metadata),
            )))
Esempio n. 19
0
class ConsDecl(FooNode):
    name = Field(type=T.Identifier)
    cons_expr = Field(type=T.Expr)

    env_spec = EnvSpec(
        add_to_env(
            T.env_assoc.new(
                key=Self.name.symbol,
                value=Self,
                dest_env=current_env(),
                metadata=No(T.Metadata),
            )))
Esempio n. 20
0
class SelfDecl(FooNode):
    id = Field(type=T.Id)
    md_node = Field(type=T.Id)

    env_spec = EnvSpec(
        add_to_env(
            New(T.env_assoc,
                key=Self.id.simple_name.symbol,
                val=Self.id.resolve(Self.node_env)),
            metadata=New(
                T.Metadata,
                node=Self.md_node.then(lambda n: n.resolve(Self.node_env)))))
Esempio n. 21
0
class Decl(FooNode):
    has_plus = Field()
    name = Field()
    items = Field()

    env_spec = EnvSpec(
        add_to_env(mappings=New(T.env_assoc, key=Self.name.symbol, val=Self),
                   metadata=New(Metadata, b=Self.has_plus.as_bool)))

    @langkit_property(public=True, return_type=T.Ref.entity.array)
    def entity_items():
        return Self.as_entity.items.map(lambda i: i)
Esempio n. 22
0
class SingleParam(PythonNode):
    is_varargs = Field(type=T.VarArgsFlag)
    is_kwargs = Field(type=T.KwArgsFlag)
    name = Field(type=T.PythonNode)
    default_value = Field(type=T.Expr)

    env_spec = EnvSpec(
        add_to_env(
            Self.name.match(
                lambda i=T.Id: new_env_assoc(key=i.sym, val=Self).singleton,
                lambda l=T.Id.list: l.map(lambda i: new_env_assoc(key=i.sym,
                                                                  val=Self)),
                lambda _: No(T.env_assoc.array))))
Esempio n. 23
0
class Scope(FooNode):
    name = Field(type=T.Id)
    content = Field(type=T.FooNode.list)

    env_spec = EnvSpec(
        add_env(),
        handle_children(),
        add_to_env(
            Self.content.children.map(lambda r: new_env_assoc(
                key="Scope",
                val=Self,
                dest_env=r.match(lambda s=T.Scope: s.name.children_env,
                                 lambda _: r.children_env)))),
    )
Esempio n. 24
0
class Def(FooNode):
    name = Field()
    imports = Field()
    vars = Field()
    expr = Field()

    env_spec = EnvSpec(
        add_to_env(mappings=New(T.env_assoc, key=Self.name.symbol, val=Self)),
        add_env(),
        reference(Self.imports.map(lambda i: i.cast(T.FooNode)),

                  # If PropertyDef rewriting omits the following references,
                  # env lookup will never reach DerivedRef.referenced_env, so
                  # resolution will sometimes fail to reach definition.
                  T.MiddleRef.referenced_env)
    )
Esempio n. 25
0
class Scope(FooNode):
    name = Field()
    deps = Field()
    defs = Field()

    @langkit_property()
    def initial_env():
        return Self.name.match(
            lambda p=T.Prefix: p.prefix.referenced_unit.root.children_env,
            lambda _: Self.children_env,
        )

    env_spec = EnvSpec(
        set_initial_env(Self.initial_env),
        add_to_env(New(T.env_assoc, key=Self.name.suffix_symbol, val=Self)),
        add_env(),
    )
Esempio n. 26
0
class Decl(FooNode):
    has_plus = Field()
    name = Field()
    items = Field()

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

    @langkit_property(public=True, return_type=T.BoolType)
    def test_env(other=T.FooNode.entity):
        return Self.children_env.env_orphan == other.children_env.env_orphan

    @langkit_property(public=True, return_type=T.BoolType)
    def test_struct(other=T.FooNode.entity):
        return Self.env_struct == other.env_struct

    @langkit_property(public=True, return_type=T.BoolType)
    def test_array(other=T.FooNode.entity):
        return Self.env_array == other.env_array
Esempio n. 27
0
class Scope(FooNode):
    name = Field()
    deps = Field()
    defs = Field()

    annotations = Annotations(ple_unit_root=True)

    @langkit_property()
    def initial_env():
        return Self.name.match(
            lambda p=T.Prefix: p.prefix.referenced_unit.root.cast_or_raise(
                T.Scope.list).filter(lambda scope: scope.name.symbols == p.
                                     prefix.symbols).at_or_raise(0).
            children_env,
            lambda _: Self.children_env,
        )

    env_spec = EnvSpec(
        set_initial_env(Self.initial_env),
        add_to_env(New(T.env_assoc, key=Self.name.suffix_symbol, val=Self)),
        add_env(),
    )
Esempio n. 28
0
class Block(Def):
    params = Field(type=T.Params)
    tok = Field(type=T.TokenType)
    vars = Field(type=T.BlockVar.list)

    name = Property(Self.tok.symbol)

    @langkit_property(public=True)
    def rebind(from_block=T.Block.entity, to_block=T.Block.entity):
        rbdng = Var(
            Entity.info.rebindings.append_rebinding(
                from_block.params.children_env, to_block.children_env))

        e_info = Var(New(T.entity_info, md=Entity.info.md, rebindings=rbdng))

        return New(Block.entity, el=Self, info=e_info)

    @langkit_property(public=True)
    def parent_rebindings():
        e_info = Var(
            New(T.entity_info,
                md=Entity.info.md,
                rebindings=Entity.info.rebindings.rebindings_parent))
        return New(Block.entity, el=Self, info=e_info)

    @langkit_property(public=True)
    def new():
        return (
            Entity.info.rebindings.rebindings_new_env.env_node.as_bare_entity)

    @langkit_property(public=True)
    def old():
        return (
            Entity.info.rebindings.rebindings_new_env.env_node.as_bare_entity)

    env_spec = EnvSpec(
        add_to_env(mappings=New(T.env_assoc, key=Self.name, val=Self)),
        add_env())
Esempio n. 29
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)))
Esempio n. 30
0
class Decl(FooNode):
    name = Field(type=T.Identifier)
    expr_tree = Field(type=T.Expr)

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