reticulated icon indicating copy to clipboard operation
reticulated copied to clipboard

monotonic: All method invocations on classes cause cast error

Open BenChung opened this issue 9 years ago • 0 comments

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.

BenChung avatar May 16 '16 03:05 BenChung