feat(checker): add cast expression

This commit is contained in:
2026-05-29 22:04:03 +02:00
parent 0a3216e07d
commit 4a3363a3d6
5 changed files with 11 additions and 34 deletions

View File

@@ -3,6 +3,6 @@
midas.using("02_simple_types.midas")
distance: Meter = 123.45
time: Second = 6.7
distance: Meter = cast(Meter, 123.45)
time: Second = cast(Second, 6.7)
speed = distance / time

View File

@@ -291,6 +291,9 @@ class Checker(
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:
return self.ctx.get_type(node.base)

View File

@@ -114,3 +114,6 @@ class Resolver(p.Stmt.Visitor[None], p.Expr.Visitor[None]):
def visit_set_expr(self, expr: p.SetExpr) -> None:
self.resolve(expr.value)
self.resolve(expr.object)
def visit_cast_expr(self, expr: p.CastExpr) -> None:
self.resolve(expr.expr)

View File

@@ -3,6 +3,6 @@
midas.using("04_custom_types.midas")
distance: Meter = 123.45
time: Second = 6.7
distance: Meter = cast(Meter, 123.45)
time: Second = cast(Second, 6.7)
speed = distance / time

View File

@@ -1,32 +1,3 @@
{
"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'))"
}
]
"diagnostics": []
}