compiler: Fix type inference in slice expressions

This was a long-standing issue affecting both lists and
the new NumPy array implementation, just caused by the
generic inference passes not being run on the slice
subexpressions (and thus e.g. ints not being monomorphized).

GitHub: Fixes #1632.
This commit is contained in:
David Nadlinger 2021-03-14 18:46:28 +00:00 committed by Sebastien Bourdeauducq
parent 5dcd73107c
commit 8a892af244
2 changed files with 20 additions and 0 deletions

View File

@ -216,6 +216,7 @@ class Inferencer(algorithm.Visitor):
value.loc, None) value.loc, None)
def visit_SliceT(self, node): def visit_SliceT(self, node):
self.generic_visit(node)
if (node.lower, node.upper, node.step) == (None, None, None): if (node.lower, node.upper, node.step) == (None, None, None):
self._unify(node.type, builtins.TInt32(), self._unify(node.type, builtins.TInt32(),
node.loc, None) node.loc, None)

View File

@ -0,0 +1,19 @@
# RUN: %python -m artiq.compiler.testbench.embedding %s
from artiq.language.core import *
from artiq.language.types import *
import numpy as np
class A:
def __init__(self):
self.n = 2
@kernel
def run(self):
print([1, 2, 3][:self.n])
a = A()
@kernel
def entrypoint():
a.run()