コード例 #1
0
ファイル: test.py プロジェクト: shintakezou/langkit
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())
コード例 #2
0
ファイル: test.py プロジェクト: shintakezou/langkit
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)
コード例 #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)),
    )
コード例 #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()
    )
コード例 #5
0
ファイル: test.py プロジェクト: shintakezou/langkit
class Var(DefNode):
    name = Field()
    value = Field()

    env_spec = EnvSpec(
        add_to_env(New(T.env_assoc, key=Self.name.symbol, val=Self)),
    )
コード例 #6
0
ファイル: test.py プロジェクト: briot/langkit
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())
コード例 #7
0
ファイル: test.py プロジェクト: shintakezou/langkit
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(),
    )
コード例 #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())
コード例 #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)
コード例 #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)))
コード例 #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),
    )
コード例 #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))),
    )
コード例 #13
0
ファイル: test.py プロジェクト: shintakezou/langkit
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,
                   )))
コード例 #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),
        ))
    )
コード例 #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)))))
コード例 #16
0
ファイル: test.py プロジェクト: briot/langkit
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)
コード例 #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
コード例 #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),
            )))
コード例 #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),
            )))
コード例 #20
0
ファイル: test.py プロジェクト: shintakezou/langkit
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)))))
コード例 #21
0
ファイル: test.py プロジェクト: GlancingMind/langkit
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)
コード例 #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))))
コード例 #23
0
ファイル: test.py プロジェクト: QuentinOchem/langkit
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)))),
    )
コード例 #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)
    )
コード例 #25
0
ファイル: test.py プロジェクト: shintakezou/langkit
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(),
    )
コード例 #26
0
ファイル: test.py プロジェクト: GlancingMind/langkit
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
コード例 #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(),
    )
コード例 #28
0
ファイル: test.py プロジェクト: briot/langkit
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())
コード例 #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)))
コード例 #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)))