some NodePath fixes and better handling of Object type arguments

This commit is contained in:
Karroffel
2017-04-06 02:32:24 +02:00
parent 63c2b9d474
commit 5e3b01f0f1
8 changed files with 93 additions and 13 deletions

View File

@@ -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" {