| ... | @@ -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. |
| 48 | pub fn expr(mod: *Module, scope: *Scope, rl: ResultLoc, node: *ast.Node) InnerError!*zir.Inst { | 48 | pub 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. |
| 51 | | 63 | |
| 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 | } |
| 115 | | 169 | |