From 7194baed66c57484e5369ab023ee9a030a7478c5 Mon Sep 17 00:00:00 2001 From: Timon Kruiper Date: Tue, 23 Mar 2021 12:19:14 +0100 Subject: [PATCH] astgen: implement typeof --- src/astgen.zig | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/astgen.zig b/src/astgen.zig index 3a2225d72c..f289973754 100644 --- a/src/astgen.zig +++ b/src/astgen.zig @@ -3283,18 +3283,28 @@ fn typeOf( node: ast.Node.Index, params: []const ast.Node.Index, ) InnerError!zir.Inst.Ref { - if (true) @panic("TODO update for zir-memory-layout"); if (params.len < 1) { return mod.failTok(scope, builtin_token, "expected at least 1 argument, found 0", .{}); } + const gz = scope.getGenZir(); if (params.len == 1) { - return rvalue(mod, scope, rl, try addZIRUnOp(mod, scope, src, .typeof, try expr(mod, scope, .none, params[0]))); + return rvalue( + mod, + scope, + rl, + try gz.addUnTok(.typeof, try expr(mod, scope, .none, params[0]), node), + node, + ); } const arena = scope.arena(); var items = try arena.alloc(zir.Inst.Ref, params.len); for (params) |param, param_i| items[param_i] = try expr(mod, scope, .none, param); - return rvalue(mod, scope, rl, try addZIRInst(mod, scope, src, zir.Inst.TypeOfPeer, .{ .items = items }, .{})); + + const result = try gz.addPlNode(.typeof_peer, node, zir.Inst.MultiOp{ .operands_len = @intCast(u32, params.len) }); + try gz.zir_code.extra.appendSlice(gz.zir_code.gpa, items); + + return rvalue(mod, scope, rl, result, node); } fn builtinCall(