std.zig.parser now parses null and bool literals
This commit is contained in:
parent
975dc5a390
commit
aabf7cf57e
@ -22,6 +22,8 @@ pub const Node = struct {
|
|||||||
StringLiteral,
|
StringLiteral,
|
||||||
MultilineStringLiteral,
|
MultilineStringLiteral,
|
||||||
CharLiteral,
|
CharLiteral,
|
||||||
|
BoolLiteral,
|
||||||
|
NullLiteral,
|
||||||
UndefinedLiteral,
|
UndefinedLiteral,
|
||||||
BuiltinCall,
|
BuiltinCall,
|
||||||
Call,
|
Call,
|
||||||
@ -44,6 +46,8 @@ pub const Node = struct {
|
|||||||
Id.StringLiteral => @fieldParentPtr(NodeStringLiteral, "base", base).iterate(index),
|
Id.StringLiteral => @fieldParentPtr(NodeStringLiteral, "base", base).iterate(index),
|
||||||
Id.MultilineStringLiteral => @fieldParentPtr(NodeMultilineStringLiteral, "base", base).iterate(index),
|
Id.MultilineStringLiteral => @fieldParentPtr(NodeMultilineStringLiteral, "base", base).iterate(index),
|
||||||
Id.CharLiteral => @fieldParentPtr(NodeCharLiteral, "base", base).iterate(index),
|
Id.CharLiteral => @fieldParentPtr(NodeCharLiteral, "base", base).iterate(index),
|
||||||
|
Id.BoolLiteral => @fieldParentPtr(NodeBoolLiteral, "base", base).iterate(index),
|
||||||
|
Id.NullLiteral => @fieldParentPtr(NodeNullLiteral, "base", base).iterate(index),
|
||||||
Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).iterate(index),
|
Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).iterate(index),
|
||||||
Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).iterate(index),
|
Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).iterate(index),
|
||||||
Id.Call => @fieldParentPtr(NodeCall, "base", base).iterate(index),
|
Id.Call => @fieldParentPtr(NodeCall, "base", base).iterate(index),
|
||||||
@ -67,6 +71,8 @@ pub const Node = struct {
|
|||||||
Id.StringLiteral => @fieldParentPtr(NodeStringLiteral, "base", base).firstToken(),
|
Id.StringLiteral => @fieldParentPtr(NodeStringLiteral, "base", base).firstToken(),
|
||||||
Id.MultilineStringLiteral => @fieldParentPtr(NodeMultilineStringLiteral, "base", base).firstToken(),
|
Id.MultilineStringLiteral => @fieldParentPtr(NodeMultilineStringLiteral, "base", base).firstToken(),
|
||||||
Id.CharLiteral => @fieldParentPtr(NodeCharLiteral, "base", base).firstToken(),
|
Id.CharLiteral => @fieldParentPtr(NodeCharLiteral, "base", base).firstToken(),
|
||||||
|
Id.BoolLiteral => @fieldParentPtr(NodeBoolLiteral, "base", base).firstToken(),
|
||||||
|
Id.NullLiteral => @fieldParentPtr(NodeNullLiteral, "base", base).firstToken(),
|
||||||
Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).firstToken(),
|
Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).firstToken(),
|
||||||
Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).firstToken(),
|
Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).firstToken(),
|
||||||
Id.Call => @fieldParentPtr(NodeCall, "base", base).firstToken(),
|
Id.Call => @fieldParentPtr(NodeCall, "base", base).firstToken(),
|
||||||
@ -90,6 +96,8 @@ pub const Node = struct {
|
|||||||
Id.StringLiteral => @fieldParentPtr(NodeStringLiteral, "base", base).lastToken(),
|
Id.StringLiteral => @fieldParentPtr(NodeStringLiteral, "base", base).lastToken(),
|
||||||
Id.MultilineStringLiteral => @fieldParentPtr(NodeMultilineStringLiteral, "base", base).lastToken(),
|
Id.MultilineStringLiteral => @fieldParentPtr(NodeMultilineStringLiteral, "base", base).lastToken(),
|
||||||
Id.CharLiteral => @fieldParentPtr(NodeCharLiteral, "base", base).lastToken(),
|
Id.CharLiteral => @fieldParentPtr(NodeCharLiteral, "base", base).lastToken(),
|
||||||
|
Id.BoolLiteral => @fieldParentPtr(NodeBoolLiteral, "base", base).lastToken(),
|
||||||
|
Id.NullLiteral => @fieldParentPtr(NodeNullLiteral, "base", base).lastToken(),
|
||||||
Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).lastToken(),
|
Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).lastToken(),
|
||||||
Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).lastToken(),
|
Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).lastToken(),
|
||||||
Id.Call => @fieldParentPtr(NodeCall, "base", base).lastToken(),
|
Id.Call => @fieldParentPtr(NodeCall, "base", base).lastToken(),
|
||||||
@ -629,6 +637,40 @@ pub const NodeCharLiteral = struct {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pub const NodeBoolLiteral = struct {
|
||||||
|
base: Node,
|
||||||
|
token: Token,
|
||||||
|
|
||||||
|
pub fn iterate(self: &NodeBoolLiteral, index: usize) ?&Node {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn firstToken(self: &NodeBoolLiteral) Token {
|
||||||
|
return self.token;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn lastToken(self: &NodeBoolLiteral) Token {
|
||||||
|
return self.token;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
pub const NodeNullLiteral = struct {
|
||||||
|
base: Node,
|
||||||
|
token: Token,
|
||||||
|
|
||||||
|
pub fn iterate(self: &NodeNullLiteral, index: usize) ?&Node {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn firstToken(self: &NodeNullLiteral) Token {
|
||||||
|
return self.token;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn lastToken(self: &NodeNullLiteral) Token {
|
||||||
|
return self.token;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
pub const NodeUndefinedLiteral = struct {
|
pub const NodeUndefinedLiteral = struct {
|
||||||
base: Node,
|
base: Node,
|
||||||
token: Token,
|
token: Token,
|
||||||
|
@ -427,6 +427,30 @@ pub const Parser = struct {
|
|||||||
try stack.append(State.AfterOperand);
|
try stack.append(State.AfterOperand);
|
||||||
continue;
|
continue;
|
||||||
},
|
},
|
||||||
|
Token.Id.Keyword_true, Token.Id.Keyword_false => {
|
||||||
|
const node = try arena.create(ast.NodeBoolLiteral);
|
||||||
|
*node = ast.NodeBoolLiteral {
|
||||||
|
.base = self.initNode(ast.Node.Id.BoolLiteral),
|
||||||
|
.token = token,
|
||||||
|
};
|
||||||
|
try stack.append(State {
|
||||||
|
.Operand = &node.base
|
||||||
|
});
|
||||||
|
try stack.append(State.AfterOperand);
|
||||||
|
continue;
|
||||||
|
},
|
||||||
|
Token.Id.Keyword_null => {
|
||||||
|
const node = try arena.create(ast.NodeNullLiteral);
|
||||||
|
*node = ast.NodeNullLiteral {
|
||||||
|
.base = self.initNode(ast.Node.Id.NullLiteral),
|
||||||
|
.token = token,
|
||||||
|
};
|
||||||
|
try stack.append(State {
|
||||||
|
.Operand = &node.base
|
||||||
|
});
|
||||||
|
try stack.append(State.AfterOperand);
|
||||||
|
continue;
|
||||||
|
},
|
||||||
Token.Id.Builtin => {
|
Token.Id.Builtin => {
|
||||||
const node = try arena.create(ast.NodeBuiltinCall);
|
const node = try arena.create(ast.NodeBuiltinCall);
|
||||||
*node = ast.NodeBuiltinCall {
|
*node = ast.NodeBuiltinCall {
|
||||||
@ -1467,6 +1491,14 @@ pub const Parser = struct {
|
|||||||
const char_literal = @fieldParentPtr(ast.NodeCharLiteral, "base", base);
|
const char_literal = @fieldParentPtr(ast.NodeCharLiteral, "base", base);
|
||||||
try stream.print("{}", self.tokenizer.getTokenSlice(char_literal.token));
|
try stream.print("{}", self.tokenizer.getTokenSlice(char_literal.token));
|
||||||
},
|
},
|
||||||
|
ast.Node.Id.BoolLiteral => {
|
||||||
|
const bool_literal = @fieldParentPtr(ast.NodeCharLiteral, "base", base);
|
||||||
|
try stream.print("{}", self.tokenizer.getTokenSlice(bool_literal.token));
|
||||||
|
},
|
||||||
|
ast.Node.Id.NullLiteral => {
|
||||||
|
const null_literal = @fieldParentPtr(ast.NodeNullLiteral, "base", base);
|
||||||
|
try stream.print("{}", self.tokenizer.getTokenSlice(null_literal.token));
|
||||||
|
},
|
||||||
ast.Node.Id.MultilineStringLiteral => {
|
ast.Node.Id.MultilineStringLiteral => {
|
||||||
const multiline_str_literal = @fieldParentPtr(ast.NodeMultilineStringLiteral, "base", base);
|
const multiline_str_literal = @fieldParentPtr(ast.NodeMultilineStringLiteral, "base", base);
|
||||||
try stream.print("\n");
|
try stream.print("\n");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user