aboutsummaryrefslogtreecommitdiff
path: root/modules/gdnative/api_generator.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--modules/gdnative/api_generator.cpp (renamed from modules/dlscript/api_generator.cpp)54
1 files changed, 51 insertions, 3 deletions
diff --git a/modules/dlscript/api_generator.cpp b/modules/gdnative/api_generator.cpp
index 56e0e4560..d5f22ee7a 100644
--- a/modules/dlscript/api_generator.cpp
+++ b/modules/gdnative/api_generator.cpp
@@ -1,9 +1,39 @@
+/*************************************************************************/
+/* api_generator.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* http://www.godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
#include "api_generator.h"
#ifdef TOOLS_ENABLED
#include "class_db.h"
#include "core/global_config.h"
+#include "core/global_constants.h"
#include "os/file_access.h"
// helper stuff
@@ -73,8 +103,7 @@ struct ClassAPI {
bool is_instanciable;
// @Unclear
bool is_creatable;
- // @Unclear
- bool memory_own;
+ bool is_reference;
List<MethodAPI> methods;
List<PropertyAPI> properties;
@@ -92,6 +121,23 @@ List<ClassAPI> generate_c_api_classes() {
List<StringName> classes;
ClassDB::get_class_list(&classes);
+ // Register global constants as a fake GlobalConstants singleton class
+ {
+ ClassAPI global_constants_api;
+ global_constants_api.class_name = L"GlobalConstants";
+ global_constants_api.api_type = ClassDB::API_CORE;
+ global_constants_api.is_singleton = true;
+ global_constants_api.is_instanciable = false;
+ const int constants_count = GlobalConstants::get_global_constant_count();
+ for (int i = 0; i < constants_count; ++i) {
+ ConstantAPI constant_api;
+ constant_api.constant_name = GlobalConstants::get_global_constant_name(i);
+ constant_api.constant_value = GlobalConstants::get_global_constant_value(i);
+ global_constants_api.constants.push_back(constant_api);
+ }
+ api.push_back(global_constants_api);
+ }
+
for (List<StringName>::Element *e = classes.front(); e != NULL; e = e->next()) {
StringName class_name = e->get();
@@ -114,7 +160,7 @@ List<ClassAPI> generate_c_api_classes() {
ClassDB::get_inheriters_from_class("Reference", &inheriters);
is_reference = !!inheriters.find(class_name);
// @Unclear
- class_api.memory_own = !class_api.is_singleton && is_reference;
+ class_api.is_reference = !class_api.is_singleton && is_reference;
}
// constants
@@ -301,6 +347,7 @@ static List<String> generate_c_api_json(const List<ClassAPI> &p_api) {
source.push_back(String("\t\t\"api_type\": \"") + (api.api_type == ClassDB::API_CORE ? "core" : (api.api_type == ClassDB::API_EDITOR ? "tools" : "none")) + "\",\n");
source.push_back(String("\t\t\"singleton\": ") + (api.is_singleton ? "true" : "false") + ",\n");
source.push_back(String("\t\t\"instanciable\": ") + (api.is_instanciable ? "true" : "false") + ",\n");
+ source.push_back(String("\t\t\"is_reference\": ") + (api.is_reference ? "true" : "false") + ",\n");
// @Unclear
// source.push_back(String("\t\t\"createable\": ") + (api.is_creatable ? "true" : "false") + ",\n");
@@ -355,6 +402,7 @@ static List<String> generate_c_api_json(const List<ClassAPI> &p_api) {
source.push_back("\t\t\t\t\t{\n");
source.push_back("\t\t\t\t\t\t\"name\": \"" + e->get().argument_names[i] + "\",\n");
source.push_back("\t\t\t\t\t\t\"type\": \"" + e->get().argument_types[i] + "\",\n");
+ source.push_back(String("\t\t\t\t\t\t\"has_default_value\": ") + (e->get().default_arguments.has(i) ? "true" : "false") + ",\n");
source.push_back("\t\t\t\t\t\t\"default_value\": \"" + (e->get().default_arguments.has(i) ? (String)e->get().default_arguments[i] : "") + "\"\n");
source.push_back(String("\t\t\t\t\t}") + ((i < e->get().argument_names.size() - 1) ? "," : "") + "\n");
}