diff --git a/App/lib/Phase/BuildPipeline.vp b/App/lib/Phase/BuildPipeline.vp index b6197b4..f79a0f9 100644 --- a/App/lib/Phase/BuildPipeline.vp +++ b/App/lib/Phase/BuildPipeline.vp @@ -82,7 +82,9 @@ def _ir_sibling_path(ir_path: str, suffix: str) -> str: define SRC_BUF_SIZE = 1048576 # 2^20 = 1MB # .vpi 存根缓冲区大小(256KB,与 Phase1 一致) -PYI_BUF_SIZE: sizet = 262144 +# 编译期常量用 define:模块级同名全局(Phase1 已有 PYI_BUF_SIZE)会各发一份 +# 强定义符号,llvm-link 报 symbol multiply defined。 +define PYI_BUF_SIZE = 262144 # ============================================================ # _llc_frame_ptr_flag - llc extra flag for --traceback diff --git a/App/lib/Phase/Phase1/__init__.vp b/App/lib/Phase/Phase1/__init__.vp index d3eb948..50dc7b1 100644 --- a/App/lib/Phase/Phase1/__init__.vp +++ b/App/lib/Phase/Phase1/__init__.vp @@ -9,7 +9,9 @@ _mbuddy: memhub.MemBuddy* define SRC_BUF_SIZE = 1048576 # vpi 缓冲区大小(256KB) -PYI_BUF_SIZE: sizet = 262144 +# 编译期常量,用 define 而非模块级全局:模块级同名全局会在多个模块各发 +# 一份强定义符号(@PYI_BUF_SIZE),llvm-link 报 symbol multiply defined。 +define PYI_BUF_SIZE = 262144 # 拓扑排序相关常量 define MAX_CLASSES = 512 diff --git a/App/lib/core/Gen/Expr/ExprGenAttr.vp b/App/lib/core/Gen/Expr/ExprGenAttr.vp index 11a57d8..5eded81 100644 --- a/App/lib/core/Gen/Expr/ExprGenAttr.vp +++ b/App/lib/core/Gen/Expr/ExprGenAttr.vp @@ -536,8 +536,8 @@ novirtual class ExprGenAttr(ExprGenBase.ExprGenBase): # 此处返回 None,让上层嵌套属性访问路径处理 if string.strcmp(nm_ma.id, "t") == 0 and string.strcmp(at.attr, "ASM_DESCR") == 0: return None # ALL_CAPS 模块属性但非 CDefine:先检查模块是否定义了同名全局 - # 变量(如 Phase1.PYI_BUF_SIZE: sizet = 262144 是 i64 全局、 - # 非宏,语义同 C 的 extern size_t PYI_BUF_SIZE)→ 按跨模块全局 + # 变量(如 Phase2 的 PA_DEPS_MAX_STR: sizet = 1024 是 i64 全局、 + # 非宏,语义同 C 的 extern size_t)→ 按跨模块全局 # 引用加载。仅当全局变量也不存在时才 fail-fast(防 llc # "use of undefined value")。 if self.Gen.ExprGenCdef._is_cdefine_name_pattern(at.attr) != 0: diff --git a/App/lib/core/Gen/Expr/ExprGenName.vp b/App/lib/core/Gen/Expr/ExprGenName.vp index bc68219..a7449fe 100644 --- a/App/lib/core/Gen/Expr/ExprGenName.vp +++ b/App/lib/core/Gen/Expr/ExprGenName.vp @@ -110,8 +110,8 @@ novirtual class ExprGenName(ExprGenBase.ExprGenBase): return self.Gen.ExprGenCdef._const_int_for_cdefine(pool, cdef_val) # CDefine 查找失败:from-import 的模块级全局变量(如 - # from Phase1 import PYI_BUF_SIZE;PYI_BUF_SIZE: sizet = 262144 是 - # i64 全局、非宏,语义同 C 的 extern size_t PYI_BUF_SIZE)。from-import + # from Phase2 import PA_DEPS_MAX_STR;该名是 i64 全局、非宏, + # 语义同 C 的 extern size_t)。from-import # 确认名称确实来自某模块后,按后缀匹配查找该全局并加载。 if trans is not None and trans._from_imports is not None: fi_mod_raw: str = self.Gen.ImportsGen.lookup_from_import(trans._from_imports, nm_id, 0) diff --git a/project.vpj b/project.vpj index 7ba72a3..9a959c4 100644 --- a/project.vpj +++ b/project.vpj @@ -21,7 +21,6 @@ "-lpthread", "-lmingwex", "-lkernel32", - "-Wl,--allow-multiple-definition", "-Wl,--stack,0x1000000", "-Wl,--no-insert-timestamp", "-Wl,--export-all-symbols",