diff --git a/retic/runtime.py b/retic/runtime.py index 6992b5f..829b6f1 100644 --- a/retic/runtime.py +++ b/retic/runtime.py @@ -109,7 +109,7 @@ def check_type_string(val): return val if isinstance(val, str) else rse() def check_type_function(val): - return val if callable(val) else rse() + return val if callable(val) or isinstance(val, classmethod) else rse() def check_type_list(val): return val if (isinstance(val, list)) else rse() diff --git a/retic/typefinder.py b/retic/typefinder.py index c0b7541..1b4f75a 100644 --- a/retic/typefinder.py +++ b/retic/typefinder.py @@ -98,6 +98,8 @@ def visitFunctionDef(self, n, vty, aliases, misc): elif isinstance(dec, ast.Name) and dec.id == 'returns': separate = True septo = typeparse(dec.args[0], aliases) + elif isinstance(dec, ast.Name) and dec.id == 'staticmethod': + return {Var(n.name, n): Dyn} else: continue if separate: diff --git a/tests/func2.py b/tests/func2.py index 562f958..53bb39d 100644 --- a/tests/func2.py +++ b/tests/func2.py @@ -4,4 +4,4 @@ def o(a:Function([int], int)): def p(x): x(10) -p(10) +p(o)