v2: postfix_expr() checker
parent
4d6958381d
commit
c7f07cd0b6
|
@ -235,6 +235,7 @@ pub struct PostfixExpr {
|
||||||
pub:
|
pub:
|
||||||
op token.Kind
|
op token.Kind
|
||||||
expr Expr
|
expr Expr
|
||||||
|
pos token.Position
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct PrefixExpr {
|
pub struct PrefixExpr {
|
||||||
|
|
|
@ -242,7 +242,7 @@ pub fn (c &Checker) expr(node ast.Expr) table.Type {
|
||||||
}
|
}
|
||||||
// ast.FloatLiteral {}
|
// ast.FloatLiteral {}
|
||||||
ast.PostfixExpr {
|
ast.PostfixExpr {
|
||||||
return c.expr(it.expr)
|
return c.postfix_expr(it)
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
ast.UnaryExpr {
|
ast.UnaryExpr {
|
||||||
|
@ -309,6 +309,22 @@ pub fn (c &Checker) expr(node ast.Expr) table.Type {
|
||||||
return table.void_type
|
return table.void_type
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn (c &Checker) postfix_expr(node ast.PostfixExpr) table.Type {
|
||||||
|
/*
|
||||||
|
match node.expr {
|
||||||
|
ast.IdentVar {
|
||||||
|
println('postfix identvar')
|
||||||
|
}
|
||||||
|
else {}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
typ := c.expr(node.expr)
|
||||||
|
if typ.kind != .int {
|
||||||
|
c.error('invalid operation: $node.op.str() (non-numeric type `$typ.name`)', node.pos)
|
||||||
|
}
|
||||||
|
return typ
|
||||||
|
}
|
||||||
|
|
||||||
pub fn (c &Checker) index_expr(node ast.IndexExpr) table.Type {
|
pub fn (c &Checker) index_expr(node ast.IndexExpr) table.Type {
|
||||||
mut typ := c.expr(node.left)
|
mut typ := c.expr(node.left)
|
||||||
mut is_range := false // TODO is_range := node.index is ast.RangeExpr
|
mut is_range := false // TODO is_range := node.index is ast.RangeExpr
|
||||||
|
|
Loading…
Reference in New Issue