Merge pull request #10803 from ziglang/decl-has-lib-name
stage2: store externs lib name as part of decl
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -622,7 +622,7 @@ pub const DeclGen = struct {
|
||||
_ = func_payload;
|
||||
@panic("TODO llvm backend genDecl function pointer");
|
||||
} else if (decl.val.castTag(.extern_fn)) |extern_fn| {
|
||||
_ = try dg.resolveLlvmFunction(extern_fn.data);
|
||||
_ = try dg.resolveLlvmFunction(extern_fn.data.owner_decl);
|
||||
} else {
|
||||
const target = dg.module.getTarget();
|
||||
const global = try dg.resolveGlobalDecl(decl);
|
||||
@@ -1410,7 +1410,7 @@ pub const DeclGen = struct {
|
||||
},
|
||||
.Fn => {
|
||||
const fn_decl = switch (tv.val.tag()) {
|
||||
.extern_fn => tv.val.castTag(.extern_fn).?.data,
|
||||
.extern_fn => tv.val.castTag(.extern_fn).?.data.owner_decl,
|
||||
.function => tv.val.castTag(.function).?.data.owner_decl,
|
||||
else => unreachable,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user