diff options
| author | _ov4 <ov4@ov4.org> | 2026-10-17 09:13:32 +0000 |
|---|---|---|
| committer | _ov4 <ov4@ov4.org> | 2026-10-17 09:13:32 +0000 |
| commit | e1f41ed9fafaf7eb4f2da6878a3fabcf2f7c021e (patch) | |
| tree | c4cd67b10e8513bb6dfad58e3c3b55033745ed12 /include/cps/FunctionGen.h | |
| parent | 59a2bb6acb975d820ab29be63a6f909d6e6ef40f (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.h | 5 |
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); |
