|
@@ -118,6 +118,25 @@ struct ClassAPI {
|
|
|
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
|
|
|
*/
|
|
@@ -201,12 +220,8 @@ List<ClassAPI> generate_c_api_classes() {
|
|
|
if (argument.name.find(":") != -1) {
|
|
|
type = argument.name.get_slice(":", 1);
|
|
|
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 {
|
|
|
- type = Variant::get_type_name(argument.type);
|
|
|
+ type = get_type_name(argument);
|
|
|
}
|
|
|
|
|
|
signal.argument_names.push_back(name);
|
|
@@ -240,12 +255,8 @@ List<ClassAPI> generate_c_api_classes() {
|
|
|
if (p->get().name.find(":") != -1) {
|
|
|
property_api.type = p->get().name.get_slice(":", 1);
|
|
|
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 {
|
|
|
- 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()) {
|
|
@@ -267,17 +278,11 @@ List<ClassAPI> generate_c_api_classes() {
|
|
|
//method name
|
|
|
method_api.method_name = m->get().name;
|
|
|
//method return type
|
|
|
- if (method_bind && method_bind->get_return_type() != StringName()) {
|
|
|
- method_api.return_type = method_bind->get_return_type();
|
|
|
- } else if (method_api.method_name.find(":") != -1) {
|
|
|
+ if (method_api.method_name.find(":") != -1) {
|
|
|
method_api.return_type = method_api.method_name.get_slice(":", 1);
|
|
|
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 {
|
|
|
- method_api.return_type = "void";
|
|
|
+ method_api.return_type = get_type_name(m->get().return_val);
|
|
|
}
|
|
|
|
|
|
method_api.argument_count = method_info.arguments.size();
|