authorgravatar for jhc@dismail.deJimmi Holst Christensen <jhc@dismail.de> 2018-03-31 22:10:49+02:00
committergravatar for jhc@dismail.deJimmi Holst Christensen <jhc@dismail.de> 2018-03-31 22:10:49+02:00
logaabf7cf57e62379d5f21aa013d0735c5427eace2
tree0edaa101053c2d3142ba6be9c46bffdb4c8c9782
parent975dc5a390490794df367b6a9869609a8b14d8f8

std.zig.parser now parses null and bool literals


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

std/zig/ast.zig+42
...@@ -22,6 +22,8 @@ pub const Node = struct {...@@ -22,6 +22,8 @@ pub const Node = struct {
22 StringLiteral,22 StringLiteral,
23 MultilineStringLiteral,23 MultilineStringLiteral,
24 CharLiteral,24 CharLiteral,
25 BoolLiteral,
26 NullLiteral,
25 UndefinedLiteral,27 UndefinedLiteral,
26 BuiltinCall,28 BuiltinCall,
27 Call,29 Call,
...@@ -44,6 +46,8 @@ pub const Node = struct {...@@ -44,6 +46,8 @@ pub const Node = struct {
44 Id.StringLiteral => @fieldParentPtr(NodeStringLiteral, "base", base).iterate(index),46 Id.StringLiteral => @fieldParentPtr(NodeStringLiteral, "base", base).iterate(index),
45 Id.MultilineStringLiteral => @fieldParentPtr(NodeMultilineStringLiteral, "base", base).iterate(index),47 Id.MultilineStringLiteral => @fieldParentPtr(NodeMultilineStringLiteral, "base", base).iterate(index),
46 Id.CharLiteral => @fieldParentPtr(NodeCharLiteral, "base", base).iterate(index),48 Id.CharLiteral => @fieldParentPtr(NodeCharLiteral, "base", base).iterate(index),
49 Id.BoolLiteral => @fieldParentPtr(NodeBoolLiteral, "base", base).iterate(index),
50 Id.NullLiteral => @fieldParentPtr(NodeNullLiteral, "base", base).iterate(index),
47 Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).iterate(index),51 Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).iterate(index),
48 Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).iterate(index),52 Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).iterate(index),
49 Id.Call => @fieldParentPtr(NodeCall, "base", base).iterate(index),53 Id.Call => @fieldParentPtr(NodeCall, "base", base).iterate(index),
...@@ -67,6 +71,8 @@ pub const Node = struct {...@@ -67,6 +71,8 @@ pub const Node = struct {
67 Id.StringLiteral => @fieldParentPtr(NodeStringLiteral, "base", base).firstToken(),71 Id.StringLiteral => @fieldParentPtr(NodeStringLiteral, "base", base).firstToken(),
68 Id.MultilineStringLiteral => @fieldParentPtr(NodeMultilineStringLiteral, "base", base).firstToken(),72 Id.MultilineStringLiteral => @fieldParentPtr(NodeMultilineStringLiteral, "base", base).firstToken(),
69 Id.CharLiteral => @fieldParentPtr(NodeCharLiteral, "base", base).firstToken(),73 Id.CharLiteral => @fieldParentPtr(NodeCharLiteral, "base", base).firstToken(),
74 Id.BoolLiteral => @fieldParentPtr(NodeBoolLiteral, "base", base).firstToken(),
75 Id.NullLiteral => @fieldParentPtr(NodeNullLiteral, "base", base).firstToken(),
70 Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).firstToken(),76 Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).firstToken(),
71 Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).firstToken(),77 Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).firstToken(),
72 Id.Call => @fieldParentPtr(NodeCall, "base", base).firstToken(),78 Id.Call => @fieldParentPtr(NodeCall, "base", base).firstToken(),
...@@ -90,6 +96,8 @@ pub const Node = struct {...@@ -90,6 +96,8 @@ pub const Node = struct {
90 Id.StringLiteral => @fieldParentPtr(NodeStringLiteral, "base", base).lastToken(),96 Id.StringLiteral => @fieldParentPtr(NodeStringLiteral, "base", base).lastToken(),
91 Id.MultilineStringLiteral => @fieldParentPtr(NodeMultilineStringLiteral, "base", base).lastToken(),97 Id.MultilineStringLiteral => @fieldParentPtr(NodeMultilineStringLiteral, "base", base).lastToken(),
92 Id.CharLiteral => @fieldParentPtr(NodeCharLiteral, "base", base).lastToken(),98 Id.CharLiteral => @fieldParentPtr(NodeCharLiteral, "base", base).lastToken(),
99 Id.BoolLiteral => @fieldParentPtr(NodeBoolLiteral, "base", base).lastToken(),
100 Id.NullLiteral => @fieldParentPtr(NodeNullLiteral, "base", base).lastToken(),
93 Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).lastToken(),101 Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).lastToken(),
94 Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).lastToken(),102 Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).lastToken(),
95 Id.Call => @fieldParentPtr(NodeCall, "base", base).lastToken(),103 Id.Call => @fieldParentPtr(NodeCall, "base", base).lastToken(),
...@@ -629,6 +637,40 @@ pub const NodeCharLiteral = struct {...@@ -629,6 +637,40 @@ pub const NodeCharLiteral = struct {
629 }637 }
630};638};
631639
640pub const NodeBoolLiteral = struct {
641 base: Node,
642 token: Token,
643
644 pub fn iterate(self: &NodeBoolLiteral, index: usize) ?&Node {
645 return null;
646 }
647
648 pub fn firstToken(self: &NodeBoolLiteral) Token {
649 return self.token;
650 }
651
652 pub fn lastToken(self: &NodeBoolLiteral) Token {
653 return self.token;
654 }
655};
656
657pub const NodeNullLiteral = struct {
658 base: Node,
659 token: Token,
660
661 pub fn iterate(self: &NodeNullLiteral, index: usize) ?&Node {
662 return null;
663 }
664
665 pub fn firstToken(self: &NodeNullLiteral) Token {
666 return self.token;
667 }
668
669 pub fn lastToken(self: &NodeNullLiteral) Token {
670 return self.token;
671 }
672};
673
632pub const NodeUndefinedLiteral = struct {674pub const NodeUndefinedLiteral = struct {
633 base: Node,675 base: Node,
634 token: Token,676 token: Token,
std/zig/parser.zig+32
...@@ -427,6 +427,30 @@ pub const Parser = struct {...@@ -427,6 +427,30 @@ pub const Parser = struct {
427 try stack.append(State.AfterOperand);427 try stack.append(State.AfterOperand);
428 continue;428 continue;
429 },429 },
430 Token.Id.Keyword_true, Token.Id.Keyword_false => {
431 const node = try arena.create(ast.NodeBoolLiteral);
432 *node = ast.NodeBoolLiteral {
433 .base = self.initNode(ast.Node.Id.BoolLiteral),
434 .token = token,
435 };
436 try stack.append(State {
437 .Operand = &node.base
438 });
439 try stack.append(State.AfterOperand);
440 continue;
441 },
442 Token.Id.Keyword_null => {
443 const node = try arena.create(ast.NodeNullLiteral);
444 *node = ast.NodeNullLiteral {
445 .base = self.initNode(ast.Node.Id.NullLiteral),
446 .token = token,
447 };
448 try stack.append(State {
449 .Operand = &node.base
450 });
451 try stack.append(State.AfterOperand);
452 continue;
453 },
430 Token.Id.Builtin => {454 Token.Id.Builtin => {
431 const node = try arena.create(ast.NodeBuiltinCall);455 const node = try arena.create(ast.NodeBuiltinCall);
432 *node = ast.NodeBuiltinCall {456 *node = ast.NodeBuiltinCall {
...@@ -1467,6 +1491,14 @@ pub const Parser = struct {...@@ -1467,6 +1491,14 @@ pub const Parser = struct {
1467 const char_literal = @fieldParentPtr(ast.NodeCharLiteral, "base", base);1491 const char_literal = @fieldParentPtr(ast.NodeCharLiteral, "base", base);
1468 try stream.print("{}", self.tokenizer.getTokenSlice(char_literal.token));1492 try stream.print("{}", self.tokenizer.getTokenSlice(char_literal.token));
1469 },1493 },
1494 ast.Node.Id.BoolLiteral => {
1495 const bool_literal = @fieldParentPtr(ast.NodeCharLiteral, "base", base);
1496 try stream.print("{}", self.tokenizer.getTokenSlice(bool_literal.token));
1497 },
1498 ast.Node.Id.NullLiteral => {
1499 const null_literal = @fieldParentPtr(ast.NodeNullLiteral, "base", base);
1500 try stream.print("{}", self.tokenizer.getTokenSlice(null_literal.token));
1501 },
1470 ast.Node.Id.MultilineStringLiteral => {1502 ast.Node.Id.MultilineStringLiteral => {
1471 const multiline_str_literal = @fieldParentPtr(ast.NodeMultilineStringLiteral, "base", base);1503 const multiline_str_literal = @fieldParentPtr(ast.NodeMultilineStringLiteral, "base", base);
1472 try stream.print("\n");1504 try stream.print("\n");