Fix: Subscript all dynamic arrays
The type checker would only allow bytes.
This commit is contained in:
parent
38294497cb
commit
6f40276a9c
3
TODO.md
3
TODO.md
@ -23,7 +23,4 @@
|
|||||||
- Implemented Bounded: https://hackage.haskell.org/package/base-4.21.0.0/docs/Prelude.html#t:Bounded
|
- Implemented Bounded: https://hackage.haskell.org/package/base-4.21.0.0/docs/Prelude.html#t:Bounded
|
||||||
- Try to implement the min and max functions using select
|
- Try to implement the min and max functions using select
|
||||||
|
|
||||||
- Implement subscript for dynamic array
|
|
||||||
- Maybe finally rework it to be a typeclass?
|
|
||||||
|
|
||||||
- Read https://bytecodealliance.org/articles/multi-value-all-the-wasm
|
- Read https://bytecodealliance.org/articles/multi-value-all-the-wasm
|
||||||
|
|||||||
@ -636,14 +636,16 @@ class CanBeSubscriptedConstraint(ConstraintBase):
|
|||||||
|
|
||||||
|
|
||||||
self.generate_router = TypeApplicationRouter()
|
self.generate_router = TypeApplicationRouter()
|
||||||
self.generate_router.add_n(context.build.types['bytes'], self.__class__._generate_bytes)
|
self.generate_router.add(context.build.dynamic_array, self.__class__._generate_dynamic_array)
|
||||||
self.generate_router.add(context.build.static_array, self.__class__._generate_static_array)
|
self.generate_router.add(context.build.static_array, self.__class__._generate_static_array)
|
||||||
self.generate_router.add(context.build.tuple_, self.__class__._generate_tuple)
|
self.generate_router.add(context.build.tuple_, self.__class__._generate_tuple)
|
||||||
|
|
||||||
def _generate_bytes(self) -> CheckResult:
|
def _generate_dynamic_array(self, da_args: tuple[Type3]) -> CheckResult:
|
||||||
|
da_type, = da_args
|
||||||
|
|
||||||
return [
|
return [
|
||||||
SameTypeConstraint(self.context, self.context.build.types['u32'], self.index_type3, comment='([]) :: bytes -> u32 -> u8'),
|
SameTypeConstraint(self.context, self.context.build.types['u32'], self.index_type3, comment='([]) :: Subscriptable a => a b -> u32 -> b'),
|
||||||
SameTypeConstraint(self.context, self.context.build.types['u8'], self.ret_type3, comment='([]) :: bytes -> u32 -> u8'),
|
SameTypeConstraint(self.context, da_type, self.ret_type3, comment='([]) :: Subscriptable a => a b -> u32 -> b'),
|
||||||
]
|
]
|
||||||
|
|
||||||
def _generate_static_array(self, sa_args: tuple[Type3, IntType3]) -> CheckResult:
|
def _generate_static_array(self, sa_args: tuple[Type3, IntType3]) -> CheckResult:
|
||||||
|
|||||||
@ -7,15 +7,16 @@ from ..helpers import Suite
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.integration_test
|
@pytest.mark.integration_test
|
||||||
@pytest.mark.parametrize('type_, in_put, exp_result', [
|
@pytest.mark.parametrize('in_typ, in_put, out_typ, exp_result', [
|
||||||
('(u8, u8, )', (45, 46), 45, ),
|
('(u8, u8, )', (45, 46), 'u8', 45, ),
|
||||||
('u8[2]', (45, 46), 45, ),
|
('u16[2]', (45, 46), 'u16', 45, ),
|
||||||
('bytes', b'This is a test', 84)
|
('u32[...]', (45, 46), 'u32', 45, ),
|
||||||
|
('bytes', b'This is a test', 'u8', 84),
|
||||||
])
|
])
|
||||||
def test_subscript_0(type_, in_put, exp_result):
|
def test_subscript_0(in_typ, in_put, out_typ, exp_result):
|
||||||
code_py = f"""
|
code_py = f"""
|
||||||
@exported
|
@exported
|
||||||
def testEntry(f: {type_}) -> u8:
|
def testEntry(f: {in_typ}) -> {out_typ}:
|
||||||
return f[0]
|
return f[0]
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user