aboutsummaryrefslogtreecommitdiff
path: root/include/cps/FunctionGen.h
diff options
context:
space:
mode:
author_ov4 <ov4@ov4.org>2026-10-17 09:13:32 +0000
committer_ov4 <ov4@ov4.org>2026-10-17 09:13:32 +0000
commite1f41ed9fafaf7eb4f2da6878a3fabcf2f7c021e (patch)
treec4cd67b10e8513bb6dfad58e3c3b55033745ed12 /include/cps/FunctionGen.h
parent59a2bb6acb975d820ab29be63a6f909d6e6ef40f (diff)
feat(driver): compile multiple source files with INCLUDE visibility
Reject builds without an entry program and duplicate cross-file definitions. Preserve source order for each unit's own constants and import visible exports. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'include/cps/FunctionGen.h')
-rw-r--r--include/cps/FunctionGen.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/include/cps/FunctionGen.h b/include/cps/FunctionGen.h
index 777ab7d..eb4a839 100644
--- a/include/cps/FunctionGen.h
+++ b/include/cps/FunctionGen.h
@@ -38,6 +38,7 @@ struct FuncSig {
std::string Name;
std::string ReturnTypeName;
std::vector<ParamSig> Params;
+ size_t OwnerUnit = 0;
};
class FunctionGen {
@@ -63,6 +64,8 @@ private:
void reportError(const char *Fmt, ...);
IdentifierMap<FuncSig> Signatures;
+ size_t CurrentUnit = 0;
+ std::function<bool(size_t)> Visible;
ArrayParamBinder BindArrayParam;
std::function<void(llvm::Value *, const std::string &, int)> RegisterCopy;
@@ -86,6 +89,8 @@ public:
RegisterCopy = std::move(Registrar);
}
+ void setCurrentUnit(size_t Unit) { CurrentUnit = Unit; }
+ void setVisibility(std::function<bool(size_t)> Predicate) { Visible = std::move(Predicate); }
const FuncSig *getSignature(const std::string &Name) const;
llvm::Function *emitPrototype(PrototypeAST *Proto);