authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-08-14 19:49:10-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-08-14 22:50:00-04:00
logf356cba704e8e45832ac363b5bf205a63f39257a
treeebb76976e2985d280d8da74d6d4005b1205e649e
parentb49d3672f3fc722925a6dad4070f7faa92dd1878

stage2: populate some of the astgen switch possibilities

Idea here is simply to entice people to contribute astgen code :)

2 files changed, 63 insertions(+), 9 deletions(-)

lib/std/zig/ast.zig+8-8
...@@ -530,15 +530,15 @@ pub const Node = struct {...@@ -530,15 +530,15 @@ pub const Node = struct {
530530
531 // Misc531 // Misc
532 DocComment,532 DocComment,
533 SwitchCase,533 SwitchCase, // TODO make this not a child of AST Node
534 SwitchElse,534 SwitchElse, // TODO make this not a child of AST Node
535 Else,535 Else, // TODO make this not a child of AST Node
536 Payload,536 Payload, // TODO make this not a child of AST Node
537 PointerPayload,537 PointerPayload, // TODO make this not a child of AST Node
538 PointerIndexPayload,538 PointerIndexPayload, // TODO make this not a child of AST Node
539 ContainerField,539 ContainerField,
540 ErrorTag,540 ErrorTag, // TODO make this not a child of AST Node
541 FieldInitializer,541 FieldInitializer, // TODO make this not a child of AST Node
542542
543 pub fn Type(tag: Tag) type {543 pub fn Type(tag: Tag) type {
544 return switch (tag) {544 return switch (tag) {
src-self-hosted/astgen.zig+55-1
...@@ -47,7 +47,19 @@ pub fn typeExpr(mod: *Module, scope: *Scope, type_node: *ast.Node) InnerError!*z...@@ -47,7 +47,19 @@ pub fn typeExpr(mod: *Module, scope: *Scope, type_node: *ast.Node) InnerError!*z
47/// Turn Zig AST into untyped ZIR istructions.47/// Turn Zig AST into untyped ZIR istructions.
48pub fn expr(mod: *Module, scope: *Scope, rl: ResultLoc, node: *ast.Node) InnerError!*zir.Inst {48pub fn expr(mod: *Module, scope: *Scope, rl: ResultLoc, node: *ast.Node) InnerError!*zir.Inst {
49 switch (node.tag) {49 switch (node.tag) {
50 .Root => unreachable, // Top-level declaration.
51 .Use => unreachable, // Top-level declaration.
52 .TestDecl => unreachable, // Top-level declaration.
53 .DocComment => unreachable, // Top-level declaration.
50 .VarDecl => unreachable, // Handled in `blockExpr`.54 .VarDecl => unreachable, // Handled in `blockExpr`.
55 .SwitchCase => unreachable, // Handled in `switchExpr`.
56 .SwitchElse => unreachable, // Handled in `switchExpr`.
57 .Else => unreachable, // Handled explicitly the control flow expression functions.
58 .Payload => unreachable, // Handled explicitly.
59 .PointerPayload => unreachable, // Handled explicitly.
60 .PointerIndexPayload => unreachable, // Handled explicitly.
61 .ErrorTag => unreachable, // Handled explicitly.
62 .FieldInitializer => unreachable, // Handled explicitly.
5163
52 .Assign => return rlWrapVoid(mod, scope, rl, node, try assign(mod, scope, node.castTag(.Assign).?)),64 .Assign => return rlWrapVoid(mod, scope, rl, node, try assign(mod, scope, node.castTag(.Assign).?)),
53 .AssignBitAnd => return rlWrapVoid(mod, scope, rl, node, try assignOp(mod, scope, node.castTag(.AssignBitAnd).?, .bitand)),65 .AssignBitAnd => return rlWrapVoid(mod, scope, rl, node, try assignOp(mod, scope, node.castTag(.AssignBitAnd).?, .bitand)),
...@@ -109,7 +121,49 @@ pub fn expr(mod: *Module, scope: *Scope, rl: ResultLoc, node: *ast.Node) InnerEr...@@ -109,7 +121,49 @@ pub fn expr(mod: *Module, scope: *Scope, rl: ResultLoc, node: *ast.Node) InnerEr
109 .UnwrapOptional => return unwrapOptional(mod, scope, rl, node.castTag(.UnwrapOptional).?),121 .UnwrapOptional => return unwrapOptional(mod, scope, rl, node.castTag(.UnwrapOptional).?),
110 .Block => return rlWrapVoid(mod, scope, rl, node, try blockExpr(mod, scope, node.castTag(.Block).?)),122 .Block => return rlWrapVoid(mod, scope, rl, node, try blockExpr(mod, scope, node.castTag(.Block).?)),
111 .LabeledBlock => return labeledBlockExpr(mod, scope, rl, node.castTag(.LabeledBlock).?),123 .LabeledBlock => return labeledBlockExpr(mod, scope, rl, node.castTag(.LabeledBlock).?),
112 else => return mod.failNode(scope, node, "TODO implement astgen.Expr for {}", .{@tagName(node.tag)}),124 .Defer => return mod.failNode(scope, node, "TODO implement astgen.expr for .Defer", .{}),
125 .Catch => return mod.failNode(scope, node, "TODO implement astgen.expr for .Catch", .{}),
126 .BoolAnd => return mod.failNode(scope, node, "TODO implement astgen.expr for .BoolAnd", .{}),
127 .BoolOr => return mod.failNode(scope, node, "TODO implement astgen.expr for .BoolOr", .{}),
128 .ErrorUnion => return mod.failNode(scope, node, "TODO implement astgen.expr for .ErrorUnion", .{}),
129 .MergeErrorSets => return mod.failNode(scope, node, "TODO implement astgen.expr for .MergeErrorSets", .{}),
130 .Range => return mod.failNode(scope, node, "TODO implement astgen.expr for .Range", .{}),
131 .OrElse => return mod.failNode(scope, node, "TODO implement astgen.expr for .OrElse", .{}),
132 .AddressOf => return mod.failNode(scope, node, "TODO implement astgen.expr for .AddressOf", .{}),
133 .Await => return mod.failNode(scope, node, "TODO implement astgen.expr for .Await", .{}),
134 .BitNot => return mod.failNode(scope, node, "TODO implement astgen.expr for .BitNot", .{}),
135 .Negation => return mod.failNode(scope, node, "TODO implement astgen.expr for .Negation", .{}),
136 .NegationWrap => return mod.failNode(scope, node, "TODO implement astgen.expr for .NegationWrap", .{}),
137 .Resume => return mod.failNode(scope, node, "TODO implement astgen.expr for .Resume", .{}),
138 .Try => return mod.failNode(scope, node, "TODO implement astgen.expr for .Try", .{}),
139 .ArrayType => return mod.failNode(scope, node, "TODO implement astgen.expr for .ArrayType", .{}),
140 .ArrayTypeSentinel => return mod.failNode(scope, node, "TODO implement astgen.expr for .ArrayTypeSentinel", .{}),
141 .PtrType => return mod.failNode(scope, node, "TODO implement astgen.expr for .PtrType", .{}),
142 .SliceType => return mod.failNode(scope, node, "TODO implement astgen.expr for .SliceType", .{}),
143 .Slice => return mod.failNode(scope, node, "TODO implement astgen.expr for .Slice", .{}),
144 .ArrayAccess => return mod.failNode(scope, node, "TODO implement astgen.expr for .ArrayAccess", .{}),
145 .ArrayInitializer => return mod.failNode(scope, node, "TODO implement astgen.expr for .ArrayInitializer", .{}),
146 .ArrayInitializerDot => return mod.failNode(scope, node, "TODO implement astgen.expr for .ArrayInitializerDot", .{}),
147 .StructInitializer => return mod.failNode(scope, node, "TODO implement astgen.expr for .StructInitializer", .{}),
148 .StructInitializerDot => return mod.failNode(scope, node, "TODO implement astgen.expr for .StructInitializerDot", .{}),
149 .Switch => return mod.failNode(scope, node, "TODO implement astgen.expr for .Switch", .{}),
150 .For => return mod.failNode(scope, node, "TODO implement astgen.expr for .For", .{}),
151 .Suspend => return mod.failNode(scope, node, "TODO implement astgen.expr for .Suspend", .{}),
152 .Continue => return mod.failNode(scope, node, "TODO implement astgen.expr for .Continue", .{}),
153 .Break => return mod.failNode(scope, node, "TODO implement astgen.expr for .Break", .{}),
154 .AnyType => return mod.failNode(scope, node, "TODO implement astgen.expr for .AnyType", .{}),
155 .ErrorType => return mod.failNode(scope, node, "TODO implement astgen.expr for .ErrorType", .{}),
156 .FnProto => return mod.failNode(scope, node, "TODO implement astgen.expr for .FnProto", .{}),
157 .AnyFrameType => return mod.failNode(scope, node, "TODO implement astgen.expr for .AnyFrameType", .{}),
158 .EnumLiteral => return mod.failNode(scope, node, "TODO implement astgen.expr for .EnumLiteral", .{}),
159 .MultilineStringLiteral => return mod.failNode(scope, node, "TODO implement astgen.expr for .MultilineStringLiteral", .{}),
160 .CharLiteral => return mod.failNode(scope, node, "TODO implement astgen.expr for .CharLiteral", .{}),
161 .GroupedExpression => return mod.failNode(scope, node, "TODO implement astgen.expr for .GroupedExpression", .{}),
162 .ErrorSetDecl => return mod.failNode(scope, node, "TODO implement astgen.expr for .ErrorSetDecl", .{}),
163 .ContainerDecl => return mod.failNode(scope, node, "TODO implement astgen.expr for .ContainerDecl", .{}),
164 .Comptime => return mod.failNode(scope, node, "TODO implement astgen.expr for .Comptime", .{}),
165 .Nosuspend => return mod.failNode(scope, node, "TODO implement astgen.expr for .Nosuspend", .{}),
166 .ContainerField => return mod.failNode(scope, node, "TODO implement astgen.expr for .ContainerField", .{}),
113 }167 }
114}168}
115169