Commit ddd2df9a authored by Tom Niget's avatar Tom Niget

Add special case for Optional type emission

parent e42b3b47
...@@ -9,7 +9,7 @@ from transpiler.phases.emit_cpp.consts import MAPPINGS ...@@ -9,7 +9,7 @@ from transpiler.phases.emit_cpp.consts import MAPPINGS
from transpiler.phases.typing import TypeVariable from transpiler.phases.typing import TypeVariable
from transpiler.phases.typing.exceptions import UnresolvedTypeVariableError from transpiler.phases.typing.exceptions import UnresolvedTypeVariableError
from transpiler.phases.typing.types import BaseType, TY_INT, TY_BOOL, TY_NONE, Promise, PromiseKind, TY_STR, UserType, \ from transpiler.phases.typing.types import BaseType, TY_INT, TY_BOOL, TY_NONE, Promise, PromiseKind, TY_STR, UserType, \
TypeType, TypeOperator, TY_FLOAT, FunctionType TypeType, TypeOperator, TY_FLOAT, FunctionType, UnionType
from transpiler.utils import UnsupportedNodeError, highlight from transpiler.utils import UnsupportedNodeError, highlight
...@@ -100,6 +100,10 @@ class NodeVisitor(UniversalVisitor): ...@@ -100,6 +100,10 @@ class NodeVisitor(UniversalVisitor):
elif isinstance(node, TypeVariable): elif isinstance(node, TypeVariable):
# yield f"TYPEVAR_{node.name}";return # yield f"TYPEVAR_{node.name}";return
raise UnresolvedTypeVariableError(node) raise UnresolvedTypeVariableError(node)
elif isinstance(node, UnionType) and (ty := node.is_optional()):
yield "std::optional<"
yield from self.visit(ty)
yield ">"
elif isinstance(node, TypeOperator): elif isinstance(node, TypeOperator):
yield "typon::Py" + node.name.title() yield "typon::Py" + node.name.title()
if node.args: if node.args:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment