Skip to content

Commit 95e41e7

Browse files
authored
Merge branch 'master' into clangfmt
2 parents c82857f + 3b31773 commit 95e41e7

File tree

4 files changed

+26
-3
lines changed

4 files changed

+26
-3
lines changed

ir/Function.cpp

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ llvm::raw_ostream &operator<<(llvm::raw_ostream &s, const Function &func) {
2020
if (func.isVariadic) {
2121
/* the C Iso require at least one argument in a variadic function, so
2222
* the comma is fine */
23-
s << ", varArgs: native.CVararg*";
23+
s << ", " << func.getVarargsParameterName() << ": native.CVararg*";
2424
}
2525
s << "): " << func.retType << " = native.extern\n";
2626
return s;
@@ -39,3 +39,21 @@ bool Function::usesType(const std::string &type) const {
3939
}
4040

4141
std::string Function::getName() const { return name; }
42+
43+
std::string Function::getVarargsParameterName() const {
44+
std::string parameterName = "varArgs";
45+
int i = 0;
46+
while (existParameterWithName(parameterName)) {
47+
parameterName = "varArgs" + std::to_string(i++);
48+
}
49+
return parameterName;
50+
}
51+
52+
bool Function::existParameterWithName(const std::string &parameterName) const {
53+
for (const auto &parameter : parameters) {
54+
if (parameter.getName() == parameterName) {
55+
return true;
56+
}
57+
}
58+
return false;
59+
}

ir/Function.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ class Function {
2424
std::string getName() const;
2525

2626
private:
27+
28+
std::string getVarargsParameterName() const;
29+
30+
bool existParameterWithName(const std::string &parameterName) const;
31+
2732
std::string name;
2833
std::vector<Parameter> parameters;
2934
std::string retType;

tests/samples/Function.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ int void_arg(void);
33
void one_arg(int a);
44
void *two_args(float a, int b);
55
void anonymous_args(float, int);
6-
double variadic_args(double a, void *b, ...);
6+
double variadic_args(double a, void *varArgs, ...);

tests/samples/Function.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ object Function {
1010
def one_arg(a: native.CInt): Unit = native.extern
1111
def two_args(a: native.CFloat, b: native.CInt): native.Ptr[Byte] = native.extern
1212
def anonymous_args(anonymous0: native.CFloat, anonymous1: native.CInt): Unit = native.extern
13-
def variadic_args(a: native.CDouble, b: native.Ptr[Byte], varArgs: native.CVararg*): native.CDouble = native.extern
13+
def variadic_args(a: native.CDouble, varArgs: native.Ptr[Byte], varArgs0: native.CVararg*): native.CDouble = native.extern
1414
}

0 commit comments

Comments
 (0)