summaryrefslogtreecommitdiffstats
path: root/binding_generator/src/main.rs
diff options
context:
space:
mode:
authorKarroffel <therzog@mail.de>2017-04-06 02:32:24 +0200
committerKarroffel <therzog@mail.de>2017-04-06 02:32:24 +0200
commit5e3b01f0f136819b5628d4edec847eac2a4374a5 (patch)
tree8673ea914db1407a5f13cbee2ae6d1ae12b63b5d /binding_generator/src/main.rs
parent63c2b9d474784447d01cb4c90aabdfd3ab5e373c (diff)
downloadredot-cpp-5e3b01f0f136819b5628d4edec847eac2a4374a5.tar.gz
some NodePath fixes and better handling of Object type arguments
Diffstat (limited to 'binding_generator/src/main.rs')
-rw-r--r--binding_generator/src/main.rs23
1 files changed, 22 insertions, 1 deletions
diff --git a/binding_generator/src/main.rs b/binding_generator/src/main.rs
index cd62c7c..f9a53b5 100644
--- a/binding_generator/src/main.rs
+++ b/binding_generator/src/main.rs
@@ -33,6 +33,7 @@ struct GodotMethod {
is_noscript: bool,
is_const: bool,
is_virtual: bool,
+ has_varargs: bool,
is_from_script: bool,
arguments: Vec<GodotArgument>
}
@@ -295,6 +296,13 @@ fn generate_class_header(used_classes: &HashSet<&String>, class: &GodotClass) ->
}
}
+ if method.has_varargs {
+ if method.arguments.len() > 0 {
+ contents += ", ";
+ }
+ contents = contents + "const Array& __var_args = Array()";
+ }
+
contents = contents + ")" + if method.is_const && !class.singleton { " const" } else { "" } + ";\n";
// contents = contents + ")" + if method.is_const { " const" } else { "" } + ";\n";
}
@@ -416,6 +424,13 @@ fn generate_class_implementation(icalls: &mut HashSet<(String, Vec<String>)>, us
}
}
+ if method.has_varargs {
+ if method.arguments.len() > 0 {
+ contents += ", ";
+ }
+ contents = contents + "const Array& __var_args";
+ }
+
contents = contents + ")" + if method.is_const && !class.singleton { " const" } else { "" } + "\n{\n";
@@ -425,7 +440,7 @@ fn generate_class_implementation(icalls: &mut HashSet<(String, Vec<String>)>, us
contents = contents + "\t}\n\n";
}
- if method.is_virtual {
+ if method.is_virtual || method.has_varargs {
contents = contents + "\tArray __args;\n";
@@ -434,6 +449,12 @@ fn generate_class_implementation(icalls: &mut HashSet<(String, Vec<String>)>, us
contents = contents + "\t__args.append(" + escape_cpp(&arg.name) + ");\n";
}
+ if method.has_varargs {
+ contents = contents + "\tfor (int i = 0; i < __var_args.size(); i++) {\n";
+ contents = contents + "\t\t__args.append(__var_args[i]);\n";
+ contents = contents + "\t}\n";
+ }
+
contents = contents + "\t";
if method.return_type != "void" {