diff options
| author | Eugen Wissner <belka@caraus.de> | 2026-09-12 00:18:11 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2026-09-12 00:18:11 +0200 |
| commit | eb1d068beeaaa420b558595751295eec35ad0c3c (patch) | |
| tree | a10aadd88ba358726573f7324ff6f9c489ebad77 /boot/symbol.cc | |
| parent | bd2b80d6ac582b9f0bcd96c86d4b79bfdb64eca1 (diff) | |
| download | elna-eb1d068beeaaa420b558595751295eec35ad0c3c.tar.gz | |
Support variadic extern procedures
Diffstat (limited to 'boot/symbol.cc')
| -rw-r--r-- | boot/symbol.cc | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/boot/symbol.cc b/boot/symbol.cc index 0814217..466715b 100644 --- a/boot/symbol.cc +++ b/boot/symbol.cc @@ -117,7 +117,8 @@ namespace elna::boot auto right_procedure = resolved_that.get<procedure_type>(); return right_procedure != nullptr && left_procedure->return_type == right_procedure->return_type - && left_procedure->parameters == right_procedure->parameters; + && left_procedure->parameters == right_procedure->parameters + && left_procedure->variadic == right_procedure->variadic; } if (auto left_parameter = resolved_this.get<parameter_type>()) { @@ -190,6 +191,10 @@ namespace elna::boot { std::string result = "proc(" + join(payload->parameters) + ")"; + if (payload->variadic) + { + result += " #{varargs}"; + } if (payload->return_type.no_return) { result += " -> !"; @@ -578,6 +583,7 @@ namespace elna::boot } auto result = std::make_shared<procedure_type>(std::move(result_return)); + result->variadic = procedure->variadic; result->parameters.reserve(procedure->parameters.size()); for (const type& parameter_type : procedure->parameters) { |
