checker: add error when trying to take address of call expr

pull/8692/head
Joe Conigliaro 2021-02-12 10:39:02 +11:00
parent 4770036e23
commit 317d450723
No known key found for this signature in database
GPG Key ID: C12F7136C08206F1
1 changed files with 12 additions and 8 deletions

View File

@ -5127,21 +5127,25 @@ pub fn (mut c Checker) prefix_expr(mut node ast.PrefixExpr) table.Type {
node.right_type = right_type
// TODO: testing ref/deref strategy
if node.op == .amp && !right_type.is_ptr() {
match node.right {
ast.IntegerLiteral {
c.error('cannot take the address of an int literal', node.pos)
}
right_expr := node.right
match right_expr {
ast.BoolLiteral {
c.error('cannot take the address of a bool literal', node.pos)
}
ast.StringLiteral, ast.StringInterLiteral {
c.error('cannot take the address of a string literal', node.pos)
ast.CallExpr {
c.error('cannot take the address of $node.right', node.pos)
}
ast.CharLiteral {
c.error('cannot take the address of a char literal', node.pos)
}
ast.FloatLiteral {
c.error('cannot take the address of a float literal', node.pos)
}
ast.CharLiteral {
c.error('cannot take the address of a char literal', node.pos)
ast.IntegerLiteral {
c.error('cannot take the address of an int literal', node.pos)
}
ast.StringLiteral, ast.StringInterLiteral {
c.error('cannot take the address of a string literal', node.pos)
}
else {}
}