From e5e14b99476c72c1aa1cc8cb36fa05f5aa830de4 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 15 Oct 2017 16:11:34 +0100 Subject: [PATCH] Remove name mangling for `foreign export` variables --- src/check_decl.cpp | 4 ++-- src/ir.cpp | 10 +++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/check_decl.cpp b/src/check_decl.cpp index f43d23c1c..4f3c5ae2d 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -514,7 +514,6 @@ void check_proc_decl(Checker *c, Entity *e, DeclInfo *d) { init_entity_foreign_library(c, e); - auto *fp = &c->info.foreigns; HashKey key = hash_string(name); Entity **found = map_get(fp, key); @@ -606,7 +605,8 @@ void check_var_decl(Checker *c, Entity *e, Entity **entities, isize entity_count error(e->token, "A foreign variable declaration cannot have a default value"); } init_entity_foreign_library(c, e); - + } + if (e->Variable.is_foreign || (e->flags & EntityFlag_ForeignExport) != 0) { String name = e->token.string; auto *fp = &c->info.foreigns; HashKey key = hash_string(name); diff --git a/src/ir.cpp b/src/ir.cpp index 4a6807586..1d5bd233f 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -8163,9 +8163,13 @@ void ir_gen_tree(irGen *s) { continue; } + + bool is_foreign = e->Variable.is_foreign; + bool is_export = (e->flags & EntityFlag_ForeignExport) != 0; + String name = e->token.string; String original_name = name; - if (!e->scope->is_global) { + if (!e->scope->is_global && !(is_foreign || is_export)) { name = ir_mangle_name(s, e->token.pos.file, e); } ir_add_entity_name(m, e, name); @@ -8173,8 +8177,8 @@ void ir_gen_tree(irGen *s) { irValue *g = ir_value_global(a, e, nullptr); g->Global.name = name; g->Global.is_thread_local = e->Variable.is_thread_local; - g->Global.is_export = (e->flags & EntityFlag_ForeignExport) != 0; - g->Global.is_foreign = e->Variable.is_foreign; + g->Global.is_foreign = is_foreign; + g->Global.is_export = is_export; irGlobalVariable var = {}; var.var = g;