aboutsummaryrefslogtreecommitdiff
path: root/boot/symbol.cc
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2026-09-12 00:18:11 +0200
committerEugen Wissner <belka@caraus.de>2026-09-12 00:18:11 +0200
commiteb1d068beeaaa420b558595751295eec35ad0c3c (patch)
treea10aadd88ba358726573f7324ff6f9c489ebad77 /boot/symbol.cc
parentbd2b80d6ac582b9f0bcd96c86d4b79bfdb64eca1 (diff)
downloadelna-eb1d068beeaaa420b558595751295eec35ad0c3c.tar.gz
Support variadic extern procedures
Diffstat (limited to 'boot/symbol.cc')
-rw-r--r--boot/symbol.cc8
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)
{