aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/c.zig
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2022-02-05 17:41:03 +0100
committerJakub Konka <kubkon@jakubkonka.com>2022-02-06 08:42:14 +0100
commit556f0ce5bfb962764bb68d9d9c16765cf9e1b9ba (patch)
treee3ddbc2240c99a089906a10c4c40dcc83a883f17 /src/codegen/c.zig
parent04f379dd414184a42412f4497b0573d7612d6730 (diff)
downloadzig-556f0ce5bfb962764bb68d9d9c16765cf9e1b9ba.tar.gz
zig-556f0ce5bfb962764bb68d9d9c16765cf9e1b9ba.zip
stage2: add new Decl subtype, ExternFn
`ExternFn` will contain a maybe-lib-name if it was defined with the `extern` keyword like so ```zig extern "c" fn write(usize, usize, usize) usize; ``` `lib_name` will live as long as `ExternFn` decl does.
Diffstat (limited to 'src/codegen/c.zig')
-rw-r--r--src/codegen/c.zig8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/codegen/c.zig b/src/codegen/c.zig
index 299581cd48..44b904f031 100644
--- a/src/codegen/c.zig
+++ b/src/codegen/c.zig
@@ -542,8 +542,8 @@ pub const DeclGen = struct {
try dg.renderDeclName(func.owner_decl, writer);
},
.extern_fn => {
- const decl = val.castTag(.extern_fn).?.data;
- try dg.renderDeclName(decl, writer);
+ const extern_fn = val.castTag(.extern_fn).?.data;
+ try dg.renderDeclName(extern_fn.owner_decl, writer);
},
.int_u64, .one => {
try writer.writeAll("((");
@@ -681,7 +681,7 @@ pub const DeclGen = struct {
return dg.renderDeclValue(writer, ty, val, decl);
},
.extern_fn => {
- const decl = val.castTag(.extern_fn).?.data;
+ const decl = val.castTag(.extern_fn).?.data.owner_decl;
return dg.renderDeclValue(writer, ty, val, decl);
},
else => unreachable,
@@ -2442,7 +2442,7 @@ fn airCall(f: *Function, inst: Air.Inst.Index) !CValue {
const fn_decl = fn_decl: {
const callee_val = f.air.value(pl_op.operand) orelse break :known;
break :fn_decl switch (callee_val.tag()) {
- .extern_fn => callee_val.castTag(.extern_fn).?.data,
+ .extern_fn => callee_val.castTag(.extern_fn).?.data.owner_decl,
.function => callee_val.castTag(.function).?.data.owner_decl,
.decl_ref => callee_val.castTag(.decl_ref).?.data,
else => break :known,