parser, checker: cleanup struct short syntax processing (#13416)
							parent
							
								
									0d1d259bb4
								
							
						
					
					
						commit
						f2eb50008d
					
				| 
						 | 
					@ -116,7 +116,7 @@ pub fn (mut c Checker) struct_decl(mut node ast.StructDecl) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn (mut c Checker) struct_init(mut node ast.StructInit) ast.Type {
 | 
					pub fn (mut c Checker) struct_init(mut node ast.StructInit) ast.Type {
 | 
				
			||||||
	if node.typ == ast.void_type {
 | 
						if node.typ == ast.void_type {
 | 
				
			||||||
		// Short syntax `({foo: bar})`
 | 
							// short syntax `foo(key:val, key2:val2)`
 | 
				
			||||||
		if c.expected_type == ast.void_type {
 | 
							if c.expected_type == ast.void_type {
 | 
				
			||||||
			c.error('unexpected short struct syntax', node.pos)
 | 
								c.error('unexpected short struct syntax', node.pos)
 | 
				
			||||||
			return ast.void_type
 | 
								return ast.void_type
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -126,7 +126,7 @@ pub fn (mut p Parser) call_args() []ast.CallArg {
 | 
				
			||||||
		mut expr := ast.empty_expr()
 | 
							mut expr := ast.empty_expr()
 | 
				
			||||||
		if p.tok.kind == .name && p.peek_tok.kind == .colon {
 | 
							if p.tok.kind == .name && p.peek_tok.kind == .colon {
 | 
				
			||||||
			// `foo(key:val, key2:val2)`
 | 
								// `foo(key:val, key2:val2)`
 | 
				
			||||||
			expr = p.struct_init(p.mod + '.' + p.tok.lit, true) // short_syntax:true
 | 
								expr = p.struct_init('void_type', true) // short_syntax:true
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			expr = p.expr(0)
 | 
								expr = p.expr(0)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -340,8 +340,6 @@ fn (mut p Parser) struct_init(typ_str string, short_syntax bool) ast.StructInit
 | 
				
			||||||
	p.struct_init_generic_types = []ast.Type{}
 | 
						p.struct_init_generic_types = []ast.Type{}
 | 
				
			||||||
	typ := if short_syntax { ast.void_type } else { p.parse_type() }
 | 
						typ := if short_syntax { ast.void_type } else { p.parse_type() }
 | 
				
			||||||
	p.expr_mod = ''
 | 
						p.expr_mod = ''
 | 
				
			||||||
	// sym := p.table.sym(typ)
 | 
					 | 
				
			||||||
	// p.warn('struct init typ=$sym.name')
 | 
					 | 
				
			||||||
	if !short_syntax {
 | 
						if !short_syntax {
 | 
				
			||||||
		p.check(.lcbr)
 | 
							p.check(.lcbr)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue