QUERY · ISSUE
Minor Viper Flaw: Misleading error message
Accessing an undefined variable in Python and Micropython:
def quot(a:int, b:int) -> int:
return c//b
results in NameError: name 'c' isn't defined during execution.
Above function with @micropython.viper results in ViperTypeError: return expected 'int' but got 'object'during compilation.
Just now I realize that viper has to assume that c is some global python object. Which means the error message is correct. But it is misleading.
An addition like name 'c' isn't defined while compiling would be helpful imho.
CANDIDATE · ISSUE
Type Inference issue when using struct in viper
bug
MY_TYPE = {
"var": 0 | uctypes.UINT32
}
storage = bytearray(uctypes.sizeof(MY_TYPE))
@micropython.viper
def bugreport():
data = uctypes.struct(ptr32(storage), MY_TYPE)
data.var += int(1)
bugreport()
For some reason data.var is an object even though it's type is clearly defined from the struct. the following error occurs:
ViperTypeError: can\'t do binary op between \'object\' and \'int\'