feat(checker): add cast expression
This commit is contained in:
@@ -3,6 +3,6 @@
|
|||||||
|
|
||||||
midas.using("02_simple_types.midas")
|
midas.using("02_simple_types.midas")
|
||||||
|
|
||||||
distance: Meter = 123.45
|
distance: Meter = cast(Meter, 123.45)
|
||||||
time: Second = 6.7
|
time: Second = cast(Second, 6.7)
|
||||||
speed = distance / time
|
speed = distance / time
|
||||||
|
|||||||
@@ -291,6 +291,9 @@ class Checker(
|
|||||||
|
|
||||||
def visit_set_expr(self, expr: p.SetExpr) -> Type: ...
|
def visit_set_expr(self, expr: p.SetExpr) -> Type: ...
|
||||||
|
|
||||||
|
def visit_cast_expr(self, expr: p.CastExpr) -> Type:
|
||||||
|
return expr.type.accept(self)
|
||||||
|
|
||||||
def visit_base_type(self, node: p.BaseType) -> Type:
|
def visit_base_type(self, node: p.BaseType) -> Type:
|
||||||
return self.ctx.get_type(node.base)
|
return self.ctx.get_type(node.base)
|
||||||
|
|
||||||
|
|||||||
@@ -114,3 +114,6 @@ class Resolver(p.Stmt.Visitor[None], p.Expr.Visitor[None]):
|
|||||||
def visit_set_expr(self, expr: p.SetExpr) -> None:
|
def visit_set_expr(self, expr: p.SetExpr) -> None:
|
||||||
self.resolve(expr.value)
|
self.resolve(expr.value)
|
||||||
self.resolve(expr.object)
|
self.resolve(expr.object)
|
||||||
|
|
||||||
|
def visit_cast_expr(self, expr: p.CastExpr) -> None:
|
||||||
|
self.resolve(expr.expr)
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
|
|
||||||
midas.using("04_custom_types.midas")
|
midas.using("04_custom_types.midas")
|
||||||
|
|
||||||
distance: Meter = 123.45
|
distance: Meter = cast(Meter, 123.45)
|
||||||
time: Second = 6.7
|
time: Second = cast(Second, 6.7)
|
||||||
speed = distance / time
|
speed = distance / time
|
||||||
|
|||||||
@@ -1,32 +1,3 @@
|
|||||||
{
|
{
|
||||||
"diagnostics": [
|
"diagnostics": []
|
||||||
{
|
|
||||||
"type": "Error",
|
|
||||||
"location": {
|
|
||||||
"start": [
|
|
||||||
6,
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"end": [
|
|
||||||
6,
|
|
||||||
24
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"message": "Cannot assign BaseType(name='float') to distance of type SimpleType(name='Meter', base=BaseType(name='float'))"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "Error",
|
|
||||||
"location": {
|
|
||||||
"start": [
|
|
||||||
7,
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"end": [
|
|
||||||
7,
|
|
||||||
18
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"message": "Cannot assign BaseType(name='float') to time of type SimpleType(name='Second', base=BaseType(name='float'))"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user