Skip to content

Commit

Permalink
std.zig.parser now supports all infix operators
Browse files Browse the repository at this point in the history
  • Loading branch information
Hejsil committed Mar 29, 2018
1 parent b80398b commit 530f795
Show file tree
Hide file tree
Showing 3 changed files with 535 additions and 62 deletions.
61 changes: 60 additions & 1 deletion std/zig/ast.zig
Expand Up @@ -20,6 +20,7 @@ pub const Node = struct {
IntegerLiteral,
FloatLiteral,
StringLiteral,
UndefinedLiteral,
BuiltinCall,
LineComment,
TestDecl,
Expand All @@ -38,6 +39,7 @@ pub const Node = struct {
Id.IntegerLiteral => @fieldParentPtr(NodeIntegerLiteral, "base", base).iterate(index),
Id.FloatLiteral => @fieldParentPtr(NodeFloatLiteral, "base", base).iterate(index),
Id.StringLiteral => @fieldParentPtr(NodeStringLiteral, "base", base).iterate(index),
Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).iterate(index),
Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).iterate(index),
Id.LineComment => @fieldParentPtr(NodeLineComment, "base", base).iterate(index),
Id.TestDecl => @fieldParentPtr(NodeTestDecl, "base", base).iterate(index),
Expand All @@ -57,6 +59,7 @@ pub const Node = struct {
Id.IntegerLiteral => @fieldParentPtr(NodeIntegerLiteral, "base", base).firstToken(),
Id.FloatLiteral => @fieldParentPtr(NodeFloatLiteral, "base", base).firstToken(),
Id.StringLiteral => @fieldParentPtr(NodeStringLiteral, "base", base).firstToken(),
Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).firstToken(),
Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).firstToken(),
Id.LineComment => @fieldParentPtr(NodeLineComment, "base", base).firstToken(),
Id.TestDecl => @fieldParentPtr(NodeTestDecl, "base", base).firstToken(),
Expand All @@ -76,6 +79,7 @@ pub const Node = struct {
Id.IntegerLiteral => @fieldParentPtr(NodeIntegerLiteral, "base", base).lastToken(),
Id.FloatLiteral => @fieldParentPtr(NodeFloatLiteral, "base", base).lastToken(),
Id.StringLiteral => @fieldParentPtr(NodeStringLiteral, "base", base).lastToken(),
Id.UndefinedLiteral => @fieldParentPtr(NodeUndefinedLiteral, "base", base).lastToken(),
Id.BuiltinCall => @fieldParentPtr(NodeBuiltinCall, "base", base).lastToken(),
Id.LineComment => @fieldParentPtr(NodeLineComment, "base", base).lastToken(),
Id.TestDecl => @fieldParentPtr(NodeTestDecl, "base", base).lastToken(),
Expand Down Expand Up @@ -309,9 +313,47 @@ pub const NodeInfixOp = struct {
rhs: &Node,

const InfixOp = enum {
EqualEqual,
Add,
AddWrap,
ArrayCat,
ArrayMult,
Assign,
AssignBitAnd,
AssignBitOr,
AssignBitShiftLeft,
AssignBitShiftRight,
AssignBitXor,
AssignDiv,
AssignMinus,
AssignMinusWrap,
AssignMod,
AssignPlus,
AssignPlusWrap,
AssignTimes,
AssignTimesWarp,
BangEqual,
BitAnd,
BitOr,
BitShiftLeft,
BitShiftRight,
BitXor,
BoolAnd,
BoolOr,
Div,
EqualEqual,
ErrorUnion,
GreaterOrEqual,
GreaterThan,
LessOrEqual,
LessThan,
MergeErrorSets,
Mod,
Mult,
MultWrap,
Period,
Sub,
SubWrap,
UnwrapMaybe,
};

pub fn iterate(self: &NodeInfixOp, index: usize) ?&Node {
Expand Down Expand Up @@ -464,6 +506,23 @@ pub const NodeStringLiteral = struct {
}
};

pub const NodeUndefinedLiteral = struct {
base: Node,
token: Token,

pub fn iterate(self: &NodeUndefinedLiteral, index: usize) ?&Node {
return null;
}

pub fn firstToken(self: &NodeUndefinedLiteral) Token {
return self.token;
}

pub fn lastToken(self: &NodeUndefinedLiteral) Token {
return self.token;
}
};

pub const NodeLineComment = struct {
base: Node,
lines: ArrayList(Token),
Expand Down

0 comments on commit 530f795

Please sign in to comment.