checker: expected_type fixes
							parent
							
								
									5fc057d8ac
								
							
						
					
					
						commit
						256a93e6e6
					
				|  | @ -241,6 +241,7 @@ pub fn (c mut Checker) call_expr(call_expr mut ast.CallExpr) table.Type { | |||
| 	} | ||||
| 	// println can print anything
 | ||||
| 	if fn_name == 'println' { | ||||
| 		c.expected_type = table.string_type | ||||
| 		call_expr.args[0].typ = c.expr(call_expr.args[0].expr) | ||||
| 		return f.return_type | ||||
| 	} | ||||
|  | @ -388,6 +389,7 @@ pub fn (c mut Checker) return_stmt(return_stmt mut ast.Return) { | |||
| } | ||||
| 
 | ||||
| pub fn (c mut Checker) assign_stmt(assign_stmt mut ast.AssignStmt) { | ||||
| 	c.expected_type = table.none_type // TODO a hack to make `x := if ... work`
 | ||||
| 	// multi return
 | ||||
| 	if assign_stmt.left.len > assign_stmt.right.len { | ||||
| 		right := c.expr(assign_stmt.right[0]) | ||||
|  | @ -576,6 +578,7 @@ fn (c mut Checker) stmt(node ast.Stmt) { | |||
| } | ||||
| 
 | ||||
| fn (c mut Checker) stmts(stmts []ast.Stmt) { | ||||
| 	c.expected_type = table.void_type | ||||
| 	for stmt in stmts { | ||||
| 		c.stmt(stmt) | ||||
| 	} | ||||
|  | @ -786,6 +789,7 @@ pub fn (c mut Checker) ident(ident mut ast.Ident) table.Type { | |||
| } | ||||
| 
 | ||||
| pub fn (c mut Checker) match_expr(node mut ast.MatchExpr) table.Type { | ||||
| 	node.is_expr = c.expected_type != table.void_type | ||||
| 	expr_type := c.expr(node.cond) | ||||
| 	if expr_type == 0 { | ||||
| 		c.error('match 0 expr type', node.pos) | ||||
|  | @ -845,9 +849,7 @@ pub fn (c mut Checker) if_expr(node mut ast.IfExpr) table.Type { | |||
| 		c.stmt(stmt) | ||||
| 	} | ||||
| 	if node.else_stmts.len > 0 { | ||||
| 		for stmt in node.else_stmts { | ||||
| 			c.stmt(stmt) | ||||
| 		} | ||||
| 		c.stmts(node.else_stmts) | ||||
| 	} | ||||
| 	if node.stmts.len > 0 { | ||||
| 		match node.stmts[node.stmts.len - 1] { | ||||
|  |  | |||
|  | @ -974,7 +974,7 @@ fn (g mut Gen) match_expr(node ast.MatchExpr) { | |||
| 		g.writeln('// match 0') | ||||
| 		return | ||||
| 	} | ||||
| 	is_expr := node.return_type != table.void_type | ||||
| 	is_expr := node.is_expr && node.return_type != table.void_type | ||||
| 	if is_expr { | ||||
| 		g.inside_ternary = true | ||||
| 		// g.write('/* EM ret type=${g.typ(node.return_type)} */')
 | ||||
|  | @ -1160,9 +1160,7 @@ fn (g mut Gen) if_expr(node ast.IfExpr) { | |||
| 			else { | ||||
| 				g.writeln('else { ') | ||||
| 			} | ||||
| 			for stmt in node.else_stmts { | ||||
| 				g.stmt(stmt) | ||||
| 			} | ||||
| 			g.stmts(node.else_stmts) | ||||
| 			g.writeln('}') | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue