reticulated
reticulated copied to clipboard
monotonic: All method invocations on classes cause cast error
The following program:
class Test:
def foo(self):
return 2
Test().foo()
Creates the following error:
Traceback (most recent call last):
File "retic.py", line 5, in <module>
retic.main()
File "[removed]\impl\reticulated\reticulated-master\retic\retic.py", line 155, in main
reticulate(program, prog_args=args.args.split(), flag_sets=args)
File "[removed]\impl\reticulated\reticulated-master\retic\retic.py", line 107, in reticulate
utils.handle_runtime_error(exit=True)
File "[removed]\impl\reticulated\reticulated-master\retic\retic.py", line 102, in reticulate
_exec(code, __main__.__dict__)
File "[removed]\impl\reticulated\reticulated-master\retic\exec3\__init__.py", line 2, in _exec
exec (obj, globs, locs)
File "test2.py", line 4, in <module>
Test().foo()
File "[removed]\impl\reticulated\reticulated-master\retic\monotonic.py", line 458, in retic_getattr_dynamic
else: return retic_check(getattr(val, attr), ty, 'Attribute in non-object value ill-typed', line=inspect.currentframe().f_back.f_lineno)
File "[removed]\impl\reticulated\reticulated-master\retic\monotonic.py", line 262, in new_getter
return retic_cast(getter(obj, attr), getter(obj, '__monotonics__')[attr], typing.Dyn, msg, line=line)
File "[removed]\impl\reticulated\reticulated-master\retic\monotonic.py", line 155, in retic_cast
return retic_cast(val, src, trg, msg, line=line)
File "[removed]\impl\reticulated\reticulated-master\retic\monotonic.py", line 164, in retic_cast
return retic_make_function_wrapper(val, src, trg, msg, line)
File "[removed]\impl\reticulated\reticulated-master\retic\monotonic.py", line 346, in retic_make_function_wrapper
base_val, base_src, join = retic_check_threesome(val, src, trg, msg, line)
File "[removed]\impl\reticulated\reticulated-master\retic\monotonic.py", line 336, in retic_check_threesome
retic_assert(join.top_free(), val, msg)
File "[removed]\impl\reticulated\reticulated-master\retic\monotonic.py", line 23, in retic_assert
raise exc(msg % val)
retic.monotonic.CastError:
test2.py:4:0: Constructed object value <bound method Test.foo of <__main__.Test object at 0x01B61730>> does not match type Object(Test, {'foo': Function([], Dyn)}), expected for instances of Class(Test, {'foo': Function(['self:Dyn'], Dyn)}, ). Consider changing the type or setting it to Dyn. (code BAD_OBJECT_INJECTION)
This appears to be a case of Monotonic trying to give the method object the type of the class it is bound to, though the error is slightly unclear.
This is running Python 3.5.1 on Windows 10x64.