|
@@ -121,7 +121,7 @@ parse_file :: proc(p: ^Parser, file: ^ast.File) -> bool {
|
|
}
|
|
}
|
|
|
|
|
|
p.file = file;
|
|
p.file = file;
|
|
- tokenizer.init(&p.tok, file.src, file.fullpath);
|
|
|
|
|
|
+ tokenizer.init(&p.tok, file.src, file.fullpath, p.err);
|
|
if p.tok.ch <= 0 {
|
|
if p.tok.ch <= 0 {
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
@@ -625,6 +625,8 @@ parse_if_stmt :: proc(p: ^Parser) -> ^ast.If_Stmt {
|
|
skip_possible_newline_for_literal(p);
|
|
skip_possible_newline_for_literal(p);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ else_tok := p.curr_tok.pos;
|
|
|
|
+
|
|
if allow_token(p, .Else) {
|
|
if allow_token(p, .Else) {
|
|
#partial switch p.curr_tok.kind {
|
|
#partial switch p.curr_tok.kind {
|
|
case .If:
|
|
case .If:
|
|
@@ -650,6 +652,7 @@ parse_if_stmt :: proc(p: ^Parser) -> ^ast.If_Stmt {
|
|
if_stmt.cond = cond;
|
|
if_stmt.cond = cond;
|
|
if_stmt.body = body;
|
|
if_stmt.body = body;
|
|
if_stmt.else_stmt = else_stmt;
|
|
if_stmt.else_stmt = else_stmt;
|
|
|
|
+ if_stmt.else_pos = else_tok;
|
|
return if_stmt;
|
|
return if_stmt;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -784,6 +787,7 @@ parse_case_clause :: proc(p: ^Parser, is_type_switch: bool) -> ^ast.Case_Clause
|
|
cc.list = list;
|
|
cc.list = list;
|
|
cc.terminator = terminator;
|
|
cc.terminator = terminator;
|
|
cc.body = stmts;
|
|
cc.body = stmts;
|
|
|
|
+ cc.case_pos = tok.pos;
|
|
return cc;
|
|
return cc;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -845,6 +849,7 @@ parse_switch_stmt :: proc(p: ^Parser) -> ^ast.Stmt {
|
|
ts := ast.new(ast.Type_Switch_Stmt, tok.pos, body.end);
|
|
ts := ast.new(ast.Type_Switch_Stmt, tok.pos, body.end);
|
|
ts.tag = tag;
|
|
ts.tag = tag;
|
|
ts.body = body;
|
|
ts.body = body;
|
|
|
|
+ ts.switch_pos = tok.pos;
|
|
return ts;
|
|
return ts;
|
|
} else {
|
|
} else {
|
|
cond := convert_stmt_to_expr(p, tag, "switch expression");
|
|
cond := convert_stmt_to_expr(p, tag, "switch expression");
|
|
@@ -852,6 +857,7 @@ parse_switch_stmt :: proc(p: ^Parser) -> ^ast.Stmt {
|
|
ts.init = init;
|
|
ts.init = init;
|
|
ts.cond = cond;
|
|
ts.cond = cond;
|
|
ts.body = body;
|
|
ts.body = body;
|
|
|
|
+ ts.switch_pos = tok.pos;
|
|
return ts;
|
|
return ts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -1155,7 +1161,7 @@ parse_stmt :: proc(p: ^Parser) -> ^ast.Stmt {
|
|
|
|
|
|
end := end_pos(tok);
|
|
end := end_pos(tok);
|
|
if len(results) > 0 {
|
|
if len(results) > 0 {
|
|
- end = results[len(results)-1].pos;
|
|
|
|
|
|
+ end = results[len(results)-1].end;
|
|
}
|
|
}
|
|
|
|
|
|
rs := ast.new(ast.Return_Stmt, tok.pos, end);
|
|
rs := ast.new(ast.Return_Stmt, tok.pos, end);
|