mirror of
https://github.com/erg-lang/erg.git
synced 2025-08-04 02:39:20 +00:00
feat: function downcasting
FIXME: This downcast is unsound, function inputs, output should be checked at runtime
This commit is contained in:
parent
2ddff1512f
commit
767d51d48b
6 changed files with 75 additions and 10 deletions
|
@ -5,6 +5,7 @@ from _erg_type import _isinstance
|
|||
from _erg_type import UnionType
|
||||
|
||||
from collections import namedtuple
|
||||
from typing import Callable
|
||||
|
||||
# (elem in y) == contains_operator(y, elem)
|
||||
def contains_operator(y, elem) -> bool:
|
||||
|
@ -62,5 +63,8 @@ def contains_operator(y, elem) -> bool:
|
|||
elif _isinstance(elem, list):
|
||||
from _erg_array import Array
|
||||
return contains_operator(y, Array(elem))
|
||||
elif _isinstance(elem, Callable):
|
||||
# TODO:
|
||||
return _isinstance(y, Callable)
|
||||
else:
|
||||
return elem in y
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
from typing import Callable
|
||||
|
||||
try:
|
||||
from typing import Union
|
||||
except ImportError:
|
||||
|
@ -43,7 +45,8 @@ def _isinstance(obj, classinfo) -> bool:
|
|||
return any(_isinstance(obj, t) for t in classinfo.__args__)
|
||||
else:
|
||||
return isinstance(obj, classinfo.__origin__)
|
||||
elif is_type(classinfo):
|
||||
return isinstance(obj, classinfo)
|
||||
else:
|
||||
return False
|
||||
try:
|
||||
return isinstance(obj, classinfo)
|
||||
except:
|
||||
return False
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue