Fix GDNative API generator after changes to MethodBind

This commit is contained in:
Ruslan Mustakov 2017-08-29 14:47:53 +07:00
parent bbb4ee90ce
commit 415f7da025
3 changed files with 25 additions and 20 deletions

View file

@ -1,7 +1,7 @@
def can_build(platform): def can_build(platform):
return False return True
def configure(env): def configure(env):

View file

@ -118,6 +118,25 @@ struct ClassAPI {
List<EnumAPI> enums; List<EnumAPI> enums;
}; };
static String get_type_name(const PropertyInfo &info) {
if (info.type == Variant::INT && (info.usage & PROPERTY_USAGE_CLASS_IS_ENUM)) {
return String("enum.") + String(info.class_name).replace(".", "::");
}
if (info.class_name != StringName()) {
return info.class_name;
}
if (info.hint == PROPERTY_HINT_RESOURCE_TYPE) {
return info.hint_string;
}
if (info.type == Variant::NIL && (info.usage & PROPERTY_USAGE_NIL_IS_VARIANT)) {
return "Variant";
}
if (info.type == Variant::NIL) {
return "void";
}
return Variant::get_type_name(info.type);
}
/* /*
* Reads the entire Godot API to a list * Reads the entire Godot API to a list
*/ */
@ -201,12 +220,8 @@ List<ClassAPI> generate_c_api_classes() {
if (argument.name.find(":") != -1) { if (argument.name.find(":") != -1) {
type = argument.name.get_slice(":", 1); type = argument.name.get_slice(":", 1);
name = argument.name.get_slice(":", 0); name = argument.name.get_slice(":", 0);
} else if (argument.hint == PROPERTY_HINT_RESOURCE_TYPE) {
type = argument.hint_string;
} else if (argument.type == Variant::NIL) {
type = "Variant";
} else { } else {
type = Variant::get_type_name(argument.type); type = get_type_name(argument);
} }
signal.argument_names.push_back(name); signal.argument_names.push_back(name);
@ -240,12 +255,8 @@ List<ClassAPI> generate_c_api_classes() {
if (p->get().name.find(":") != -1) { if (p->get().name.find(":") != -1) {
property_api.type = p->get().name.get_slice(":", 1); property_api.type = p->get().name.get_slice(":", 1);
property_api.name = p->get().name.get_slice(":", 0); property_api.name = p->get().name.get_slice(":", 0);
} else if (p->get().hint == PROPERTY_HINT_RESOURCE_TYPE) {
property_api.type = p->get().hint_string;
} else if (p->get().type == Variant::NIL) {
property_api.type = "Variant";
} else { } else {
property_api.type = Variant::get_type_name(p->get().type); property_api.type = get_type_name(p->get());
} }
if (!property_api.setter.empty() || !property_api.getter.empty()) { if (!property_api.setter.empty() || !property_api.getter.empty()) {
@ -267,17 +278,11 @@ List<ClassAPI> generate_c_api_classes() {
//method name //method name
method_api.method_name = m->get().name; method_api.method_name = m->get().name;
//method return type //method return type
if (method_bind && method_bind->get_return_type() != StringName()) { if (method_api.method_name.find(":") != -1) {
method_api.return_type = method_bind->get_return_type();
} else if (method_api.method_name.find(":") != -1) {
method_api.return_type = method_api.method_name.get_slice(":", 1); method_api.return_type = method_api.method_name.get_slice(":", 1);
method_api.method_name = method_api.method_name.get_slice(":", 0); method_api.method_name = method_api.method_name.get_slice(":", 0);
} else if (m->get().return_val.type != Variant::NIL) {
method_api.return_type = m->get().return_val.hint == PROPERTY_HINT_RESOURCE_TYPE ? m->get().return_val.hint_string : Variant::get_type_name(m->get().return_val.type);
} else if (m->get().return_val.name != "") {
method_api.return_type = m->get().return_val.name;
} else { } else {
method_api.return_type = "void"; method_api.return_type = get_type_name(m->get().return_val);
} }
method_api.argument_count = method_info.arguments.size(); method_api.argument_count = method_info.arguments.size();

View file

@ -1,7 +1,7 @@
def can_build(platform): def can_build(platform):
return False return True
def configure(env): def configure(env):