authorgravatar for jhc@dismail.deJimmi Holst Christensen <jhc@dismail.de> 2018-03-31 22:48:12+02:00
committergravatar for jhc@dismail.deJimmi Holst Christensen <jhc@dismail.de> 2018-03-31 22:48:12+02:00
logdf09c01f7f141a384010d17ab23db3b36316f5b6
tree0905c2b50a3b17853c5b63e351f73a604e47d37f
parentaabf7cf57e62379d5f21aa013d0735c5427eace2

std.zig.parser now parses error, this and unreachable


2 files changed, 111 insertions(+), 0 deletions(-)

std/zig/ast.zig+63
...@@ -25,6 +25,9 @@ pub const Node = struct {...@@ -25,6 +25,9 @@ pub const Node = struct {
25 BoolLiteral,25 BoolLiteral,
26 NullLiteral,26 NullLiteral,
27 UndefinedLiteral,27 UndefinedLiteral,
28 ThisLiteral,
29 Unreachable,
30 ErrorType,
28 BuiltinCall,31 BuiltinCall,
29 Call,32 Call,
30 LineComment,33 LineComment,
...@@ -49,6 +52,9 @@ pub const Node = struct {...@@ -49,6 +52,9 @@ pub const Node = struct {
49 Id.BoolLiteral => @fieldParentPtr(NodeBoolLiteral, "base", base).iterate(index),52 Id.BoolLiteral => @fieldParentPtr(NodeBoolLiteral, "base", base).iterate(index),
50 Id.NullLiteral => @fieldParentPtr(NodeNullLiteral, "base", base).iterate(index),53 Id.NullLiteral => @fieldParentPtr(NodeNullLiteral, "base", base).iterate(index),
51 Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).iterate(index),54 Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).iterate(index),
55 Id.ThisLiteral => @fieldParentPtr(NodeThisLiteral, "base", base).iterate(index),
56 Id.Unreachable => @fieldParentPtr(NodeUnreachable, "base", base).iterate(index),
57 Id.ErrorType => @fieldParentPtr(NodeErrorType, "base", base).iterate(index),
52 Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).iterate(index),58 Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).iterate(index),
53 Id.Call => @fieldParentPtr(NodeCall, "base", base).iterate(index),59 Id.Call => @fieldParentPtr(NodeCall, "base", base).iterate(index),
54 Id.LineComment => @fieldParentPtr(NodeLineComment, "base", base).iterate(index),60 Id.LineComment => @fieldParentPtr(NodeLineComment, "base", base).iterate(index),
...@@ -74,6 +80,9 @@ pub const Node = struct {...@@ -74,6 +80,9 @@ pub const Node = struct {
74 Id.BoolLiteral => @fieldParentPtr(NodeBoolLiteral, "base", base).firstToken(),80 Id.BoolLiteral => @fieldParentPtr(NodeBoolLiteral, "base", base).firstToken(),
75 Id.NullLiteral => @fieldParentPtr(NodeNullLiteral, "base", base).firstToken(),81 Id.NullLiteral => @fieldParentPtr(NodeNullLiteral, "base", base).firstToken(),
76 Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).firstToken(),82 Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).firstToken(),
83 Id.Unreachable => @fieldParentPtr(NodeUnreachable, "base", base).firstToken(),
84 Id.ThisLiteral => @fieldParentPtr(NodeThisLiteral, "base", base).firstToken(),
85 Id.ErrorType => @fieldParentPtr(NodeErrorType, "base", base).firstToken(),
77 Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).firstToken(),86 Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).firstToken(),
78 Id.Call => @fieldParentPtr(NodeCall, "base", base).firstToken(),87 Id.Call => @fieldParentPtr(NodeCall, "base", base).firstToken(),
79 Id.LineComment => @fieldParentPtr(NodeLineComment, "base", base).firstToken(),88 Id.LineComment => @fieldParentPtr(NodeLineComment, "base", base).firstToken(),
...@@ -99,6 +108,9 @@ pub const Node = struct {...@@ -99,6 +108,9 @@ pub const Node = struct {
99 Id.BoolLiteral => @fieldParentPtr(NodeBoolLiteral, "base", base).lastToken(),108 Id.BoolLiteral => @fieldParentPtr(NodeBoolLiteral, "base", base).lastToken(),
100 Id.NullLiteral => @fieldParentPtr(NodeNullLiteral, "base", base).lastToken(),109 Id.NullLiteral => @fieldParentPtr(NodeNullLiteral, "base", base).lastToken(),
101 Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).lastToken(),110 Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).lastToken(),
111 Id.ThisLiteral => @fieldParentPtr(NodeThisLiteral, "base", base).lastToken(),
112 Id.Unreachable => @fieldParentPtr(NodeUnreachable, "base", base).lastToken(),
113 Id.ErrorType => @fieldParentPtr(NodeErrorType, "base", base).lastToken(),
102 Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).lastToken(),114 Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).lastToken(),
103 Id.Call => @fieldParentPtr(NodeCall, "base", base).lastToken(),115 Id.Call => @fieldParentPtr(NodeCall, "base", base).lastToken(),
104 Id.LineComment => @fieldParentPtr(NodeLineComment, "base", base).lastToken(),116 Id.LineComment => @fieldParentPtr(NodeLineComment, "base", base).lastToken(),
...@@ -688,6 +700,57 @@ pub const NodeUndefinedLiteral = struct {...@@ -688,6 +700,57 @@ pub const NodeUndefinedLiteral = struct {
688 }700 }
689};701};
690702
703pub const NodeThisLiteral = struct {
704 base: Node,
705 token: Token,
706
707 pub fn iterate(self: &NodeThisLiteral, index: usize) ?&Node {
708 return null;
709 }
710
711 pub fn firstToken(self: &NodeThisLiteral) Token {
712 return self.token;
713 }
714
715 pub fn lastToken(self: &NodeThisLiteral) Token {
716 return self.token;
717 }
718};
719
720pub const NodeUnreachable = struct {
721 base: Node,
722 token: Token,
723
724 pub fn iterate(self: &NodeUnreachable, index: usize) ?&Node {
725 return null;
726 }
727
728 pub fn firstToken(self: &NodeUnreachable) Token {
729 return self.token;
730 }
731
732 pub fn lastToken(self: &NodeUnreachable) Token {
733 return self.token;
734 }
735};
736
737pub const NodeErrorType = struct {
738 base: Node,
739 token: Token,
740
741 pub fn iterate(self: &NodeErrorType, index: usize) ?&Node {
742 return null;
743 }
744
745 pub fn firstToken(self: &NodeErrorType) Token {
746 return self.token;
747 }
748
749 pub fn lastToken(self: &NodeErrorType) Token {
750 return self.token;
751 }
752};
753
691pub const NodeLineComment = struct {754pub const NodeLineComment = struct {
692 base: Node,755 base: Node,
693 lines: ArrayList(Token),756 lines: ArrayList(Token),
std/zig/parser.zig+48
...@@ -451,6 +451,42 @@ pub const Parser = struct {...@@ -451,6 +451,42 @@ pub const Parser = struct {
451 try stack.append(State.AfterOperand);451 try stack.append(State.AfterOperand);
452 continue;452 continue;
453 },453 },
454 Token.Id.Keyword_this => {
455 const node = try arena.create(ast.NodeThisLiteral);
456 *node = ast.NodeThisLiteral {
457 .base = self.initNode(ast.Node.Id.ThisLiteral),
458 .token = token,
459 };
460 try stack.append(State {
461 .Operand = &node.base
462 });
463 try stack.append(State.AfterOperand);
464 continue;
465 },
466 Token.Id.Keyword_unreachable => {
467 const node = try arena.create(ast.NodeUnreachable);
468 *node = ast.NodeUnreachable {
469 .base = self.initNode(ast.Node.Id.Unreachable),
470 .token = token,
471 };
472 try stack.append(State {
473 .Operand = &node.base
474 });
475 try stack.append(State.AfterOperand);
476 continue;
477 },
478 Token.Id.Keyword_error => {
479 const node = try arena.create(ast.NodeErrorType);
480 *node = ast.NodeErrorType {
481 .base = self.initNode(ast.Node.Id.ErrorType),
482 .token = token,
483 };
484 try stack.append(State {
485 .Operand = &node.base
486 });
487 try stack.append(State.AfterOperand);
488 continue;
489 },
454 Token.Id.Builtin => {490 Token.Id.Builtin => {
455 const node = try arena.create(ast.NodeBuiltinCall);491 const node = try arena.create(ast.NodeBuiltinCall);
456 *node = ast.NodeBuiltinCall {492 *node = ast.NodeBuiltinCall {
...@@ -1499,6 +1535,18 @@ pub const Parser = struct {...@@ -1499,6 +1535,18 @@ pub const Parser = struct {
1499 const null_literal = @fieldParentPtr(ast.NodeNullLiteral, "base", base);1535 const null_literal = @fieldParentPtr(ast.NodeNullLiteral, "base", base);
1500 try stream.print("{}", self.tokenizer.getTokenSlice(null_literal.token));1536 try stream.print("{}", self.tokenizer.getTokenSlice(null_literal.token));
1501 },1537 },
1538 ast.Node.Id.ThisLiteral => {
1539 const this_literal = @fieldParentPtr(ast.NodeThisLiteral, "base", base);
1540 try stream.print("{}", self.tokenizer.getTokenSlice(this_literal.token));
1541 },
1542 ast.Node.Id.Unreachable => {
1543 const unreachable_node = @fieldParentPtr(ast.NodeUnreachable, "base", base);
1544 try stream.print("{}", self.tokenizer.getTokenSlice(unreachable_node.token));
1545 },
1546 ast.Node.Id.ErrorType => {
1547 const error_type = @fieldParentPtr(ast.NodeErrorType, "base", base);
1548 try stream.print("{}", self.tokenizer.getTokenSlice(error_type.token));
1549 },
1502 ast.Node.Id.MultilineStringLiteral => {1550 ast.Node.Id.MultilineStringLiteral => {
1503 const multiline_str_literal = @fieldParentPtr(ast.NodeMultilineStringLiteral, "base", base);1551 const multiline_str_literal = @fieldParentPtr(ast.NodeMultilineStringLiteral, "base", base);
1504 try stream.print("\n");1552 try stream.print("\n");