parser: allow deref assign without parens pt1
							parent
							
								
									6696e1a6e2
								
							
						
					
					
						commit
						9fff8733a0
					
				| 
						 | 
				
			
			@ -20,6 +20,7 @@ mut:
 | 
			
		|||
	tok               token.Token
 | 
			
		||||
	prev_tok          token.Token
 | 
			
		||||
	peek_tok          token.Token
 | 
			
		||||
	peek_tok2         token.Token
 | 
			
		||||
	table             &table.Table
 | 
			
		||||
	is_c              bool
 | 
			
		||||
	is_js             bool
 | 
			
		||||
| 
						 | 
				
			
			@ -179,11 +180,13 @@ pub fn (p &Parser) init_parse_fns() {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
pub fn (mut p Parser) read_first_token() {
 | 
			
		||||
	// need to call next() twice to get peek token and current token
 | 
			
		||||
	// need to call next() three times to get peek token 1 & 2 and current token
 | 
			
		||||
	p.next()
 | 
			
		||||
	p.next()
 | 
			
		||||
	p.next()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
pub fn (mut p Parser) open_scope() {
 | 
			
		||||
	p.scope = &ast.Scope{
 | 
			
		||||
		parent: p.scope
 | 
			
		||||
| 
						 | 
				
			
			@ -241,7 +244,8 @@ fn (mut p Parser) next_with_comment() {
 | 
			
		|||
fn (mut p Parser) next() {
 | 
			
		||||
	p.prev_tok = p.tok
 | 
			
		||||
	p.tok = p.peek_tok
 | 
			
		||||
	p.peek_tok = p.scanner.scan()
 | 
			
		||||
	p.peek_tok = p.peek_tok2
 | 
			
		||||
	p.peek_tok2 = p.scanner.scan()
 | 
			
		||||
	/*
 | 
			
		||||
	if p.tok.kind==.comment {
 | 
			
		||||
		p.comments << ast.Comment{text:p.tok.lit, line_nr:p.tok.line_nr}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -161,6 +161,11 @@ pub fn (mut p Parser) expr(precedence int) ast.Expr {
 | 
			
		|||
				pos: pos
 | 
			
		||||
			}
 | 
			
		||||
		} else if p.tok.kind.is_infix() {
 | 
			
		||||
			// return early for deref assign `*x = 2` goes to prefix expr
 | 
			
		||||
			if p.tok.kind == .mul && p.tok.line_nr != p.prev_tok.line_nr && p.peek_tok2.kind == .assign {
 | 
			
		||||
				return node
 | 
			
		||||
			}
 | 
			
		||||
			// continue on infix expr
 | 
			
		||||
			node = p.infix_expr(node)
 | 
			
		||||
		} else if p.tok.kind in [.inc, .dec] {
 | 
			
		||||
			// Postfix
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue