2018-02-07 12:04:02 +01:00
|
|
|
"""
|
|
|
|
|
Check that "==" and "!=" operators for Entity in the Python API behave as
|
|
|
|
|
expected.
|
|
|
|
|
"""
|
|
|
|
|
|
2018-04-10 19:06:11 +02:00
|
|
|
from langkit.dsl import ASTNode, Field, abstract, has_abstract_list
|
2019-04-23 12:48:52 +02:00
|
|
|
from langkit.envs import EnvSpec, add_env, add_to_env_kv
|
2018-02-07 12:04:02 +01:00
|
|
|
from langkit.expressions import (AbstractProperty, Entity, New, Property, Self,
|
|
|
|
|
T, Var, langkit_property)
|
|
|
|
|
|
|
|
|
|
from utils import build_and_run
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FooNode(ASTNode):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Name(FooNode):
|
|
|
|
|
token_node = True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@abstract
|
2018-07-16 18:06:27 +02:00
|
|
|
class DefNode(FooNode):
|
2018-09-06 13:07:40 +02:00
|
|
|
name = AbstractProperty(T.Symbol, public=True)
|
2019-04-23 12:48:52 +02:00
|
|
|
env_spec = EnvSpec(
|
|
|
|
|
add_to_env_kv(key=Self.name, val=Self)
|
|
|
|
|
)
|
2018-02-07 12:04:02 +01:00
|
|
|
|
|
|
|
|
|
2018-07-16 18:06:27 +02:00
|
|
|
class Block(DefNode):
|
2018-02-07 12:04:02 +01:00
|
|
|
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,
|
2018-09-18 17:44:20 +02:00
|
|
|
rebindings=rbdng,
|
|
|
|
|
from_rebound=False))
|
2018-02-07 12:04:02 +01:00
|
|
|
|
2018-08-01 18:21:28 +02:00
|
|
|
return New(Block.entity, node=Self, info=e_info)
|
2018-02-07 12:04:02 +01:00
|
|
|
|
|
|
|
|
env_spec = EnvSpec(
|
2019-04-23 12:48:52 +02:00
|
|
|
add_to_env_kv(key=Self.name, val=Self),
|
2018-02-07 12:04:02 +01:00
|
|
|
add_env()
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
2018-04-10 19:06:11 +02:00
|
|
|
@has_abstract_list
|
2018-07-16 18:06:27 +02:00
|
|
|
class Param(DefNode):
|
2018-02-07 12:04:02 +01:00
|
|
|
name_field = Field(type=T.Name)
|
|
|
|
|
name = Property(Self.name_field.symbol)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Params(Param.list):
|
|
|
|
|
env_spec = EnvSpec(add_env())
|
|
|
|
|
|
|
|
|
|
|
2018-07-16 18:06:27 +02:00
|
|
|
class BlockVar(DefNode):
|
2018-02-07 12:04:02 +01:00
|
|
|
name_field = Field(type=T.Name)
|
|
|
|
|
name = Property(Self.name_field.symbol)
|
|
|
|
|
|
|
|
|
|
|
2020-02-25 13:08:33 +01:00
|
|
|
build_and_run(lkt_file='expected_concrete_syntax.lkt', py_script='main.py')
|
2018-02-07 12:04:02 +01:00
|
|
|
print('Done')
|