checker: add error when trying to take address of call expr
							parent
							
								
									4770036e23
								
							
						
					
					
						commit
						317d450723
					
				| 
						 | 
				
			
			@ -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 {}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue