diff options
author | Karroffel <therzog@mail.de> | 2017-04-06 02:32:24 +0200 |
---|---|---|
committer | Karroffel <therzog@mail.de> | 2017-04-06 02:32:24 +0200 |
commit | 5e3b01f0f136819b5628d4edec847eac2a4374a5 (patch) | |
tree | 8673ea914db1407a5f13cbee2ae6d1ae12b63b5d /binding_generator/src/main.rs | |
parent | 63c2b9d474784447d01cb4c90aabdfd3ab5e373c (diff) | |
download | redot-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.rs | 23 |
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" { |