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 {
2222 StringLiteral,
2323 MultilineStringLiteral,
2424 CharLiteral,
25 BoolLiteral,
26 NullLiteral,
2527 UndefinedLiteral,
2628 BuiltinCall,
2729 Call,
......@@ -44,6 +46,8 @@ pub const Node = struct {
4446 Id.StringLiteral => @fieldParentPtr(NodeStringLiteral, "base", base).iterate(index),
4547 Id.MultilineStringLiteral => @fieldParentPtr(NodeMultilineStringLiteral, "base", base).iterate(index),
4648 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),
4751 Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).iterate(index),
4852 Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).iterate(index),
4953 Id.Call => @fieldParentPtr(NodeCall, "base", base).iterate(index),
......@@ -67,6 +71,8 @@ pub const Node = struct {
6771 Id.StringLiteral => @fieldParentPtr(NodeStringLiteral, "base", base).firstToken(),
6872 Id.MultilineStringLiteral => @fieldParentPtr(NodeMultilineStringLiteral, "base", base).firstToken(),
6973 Id.CharLiteral => @fieldParentPtr(NodeCharLiteral, "base", base).firstToken(),
74 Id.BoolLiteral => @fieldParentPtr(NodeBoolLiteral, "base", base).firstToken(),
75 Id.NullLiteral => @fieldParentPtr(NodeNullLiteral, "base", base).firstToken(),
7076 Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).firstToken(),
7177 Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).firstToken(),
7278 Id.Call => @fieldParentPtr(NodeCall, "base", base).firstToken(),
......@@ -90,6 +96,8 @@ pub const Node = struct {
9096 Id.StringLiteral => @fieldParentPtr(NodeStringLiteral, "base", base).lastToken(),
9197 Id.MultilineStringLiteral => @fieldParentPtr(NodeMultilineStringLiteral, "base", base).lastToken(),
9298 Id.CharLiteral => @fieldParentPtr(NodeCharLiteral, "base", base).lastToken(),
99 Id.BoolLiteral => @fieldParentPtr(NodeBoolLiteral, "base", base).lastToken(),
100 Id.NullLiteral => @fieldParentPtr(NodeNullLiteral, "base", base).lastToken(),
93101 Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).lastToken(),
94102 Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).lastToken(),
95103 Id.Call => @fieldParentPtr(NodeCall, "base", base).lastToken(),
......@@ -629,6 +637,40 @@ pub const NodeCharLiteral = struct {
629637 }
630638};
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
632674pub const NodeUndefinedLiteral = struct {
633675 base: Node,
634676 token: Token,
std/zig/parser.zig+32
......@@ -427,6 +427,30 @@ pub const Parser = struct {
427427 try stack.append(State.AfterOperand);
428428 continue;
429429 },
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 },
430454 Token.Id.Builtin => {
431455 const node = try arena.create(ast.NodeBuiltinCall);
432456 *node = ast.NodeBuiltinCall {
......@@ -1467,6 +1491,14 @@ pub const Parser = struct {
14671491 const char_literal = @fieldParentPtr(ast.NodeCharLiteral, "base", base);
14681492 try stream.print("{}", self.tokenizer.getTokenSlice(char_literal.token));
14691493 },
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 },
14701502 ast.Node.Id.MultilineStringLiteral => {
14711503 const multiline_str_literal = @fieldParentPtr(ast.NodeMultilineStringLiteral, "base", base);
14721504 try stream.print("\n");