Remove VARIANT_ARG* macros
* Very old macros from the time Godot was created. * Limited arguments to 5 (then later changed to 8) in many places. * They were replaced by C++11 Variadic Templates. * Renamed methods that take argument pointers to have a "p" suffix. This was used in some places and not in others, so made it standard. * Also added a dereference check for Variant*. Helped catch a couple of bugs.
This commit is contained in:
parent
922348f4c0
commit
21637dfc25
59 changed files with 417 additions and 467 deletions
|
|
@ -64,14 +64,14 @@ void JavaClassWrapper::_bind_methods() {
|
|||
|
||||
#if !defined(ANDROID_ENABLED)
|
||||
|
||||
Variant JavaClass::call(const StringName &, const Variant **, int, Callable::CallError &) {
|
||||
Variant JavaClass::callp(const StringName &, const Variant **, int, Callable::CallError &) {
|
||||
return Variant();
|
||||
}
|
||||
|
||||
JavaClass::JavaClass() {
|
||||
}
|
||||
|
||||
Variant JavaObject::call(const StringName &, const Variant **, int, Callable::CallError &) {
|
||||
Variant JavaObject::callp(const StringName &, const Variant **, int, Callable::CallError &) {
|
||||
return Variant();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -179,7 +179,7 @@ class JavaClass : public RefCounted {
|
|||
#endif
|
||||
|
||||
public:
|
||||
virtual Variant call(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) override;
|
||||
virtual Variant callp(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) override;
|
||||
|
||||
JavaClass();
|
||||
};
|
||||
|
|
@ -195,7 +195,7 @@ class JavaObject : public RefCounted {
|
|||
#endif
|
||||
|
||||
public:
|
||||
virtual Variant call(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) override;
|
||||
virtual Variant callp(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) override;
|
||||
|
||||
#ifdef ANDROID_ENABLED
|
||||
JavaObject(const Ref<JavaClass> &p_base, jobject *p_instance);
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ class JNISingleton : public Object {
|
|||
#endif
|
||||
|
||||
public:
|
||||
virtual Variant call(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) override {
|
||||
virtual Variant callp(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) override {
|
||||
#ifdef ANDROID_ENABLED
|
||||
Map<StringName, MethodData>::Element *E = method_map.find(p_method);
|
||||
|
||||
|
|
@ -70,7 +70,7 @@ public:
|
|||
|
||||
if (call_error) {
|
||||
// The method is not in this map, defaulting to the regular instance calls.
|
||||
return Object::call(p_method, p_args, p_argcount, r_error);
|
||||
return Object::callp(p_method, p_args, p_argcount, r_error);
|
||||
}
|
||||
|
||||
ERR_FAIL_COND_V(!instance, Variant());
|
||||
|
|
@ -176,7 +176,7 @@ public:
|
|||
#else // ANDROID_ENABLED
|
||||
|
||||
// Defaulting to the regular instance calls.
|
||||
return Object::call(p_method, p_args, p_argcount, r_error);
|
||||
return Object::callp(p_method, p_args, p_argcount, r_error);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -485,14 +485,14 @@ bool JavaClass::_call_method(JavaObject *p_instance, const StringName &p_method,
|
|||
return success;
|
||||
}
|
||||
|
||||
Variant JavaClass::call(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) {
|
||||
Variant JavaClass::callp(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) {
|
||||
Variant ret;
|
||||
bool found = _call_method(nullptr, p_method, p_args, p_argcount, r_error, ret);
|
||||
if (found) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
return RefCounted::call(p_method, p_args, p_argcount, r_error);
|
||||
return RefCounted::callp(p_method, p_args, p_argcount, r_error);
|
||||
}
|
||||
|
||||
JavaClass::JavaClass() {
|
||||
|
|
@ -500,7 +500,7 @@ JavaClass::JavaClass() {
|
|||
|
||||
/////////////////////
|
||||
|
||||
Variant JavaObject::call(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) {
|
||||
Variant JavaObject::callp(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) {
|
||||
return Variant();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -446,7 +446,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_callobject(JNIEnv *en
|
|||
}
|
||||
|
||||
Callable::CallError err;
|
||||
obj->call(str_method, (const Variant **)vptr, count, err);
|
||||
obj->callp(str_method, (const Variant **)vptr, count, err);
|
||||
// something
|
||||
|
||||
env->PopLocalFrame(nullptr);
|
||||
|
|
@ -462,18 +462,20 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_calldeferred(JNIEnv *
|
|||
String str_method = jstring_to_string(method, env);
|
||||
|
||||
int count = env->GetArrayLength(params);
|
||||
Variant args[VARIANT_ARG_MAX];
|
||||
|
||||
for (int i = 0; i < MIN(count, VARIANT_ARG_MAX); i++) {
|
||||
Variant *args = (Variant *)alloca(sizeof(Variant) * count);
|
||||
const Variant **argptrs = (const Variant **)alloca(sizeof(Variant *) * count);
|
||||
|
||||
for (int i = 0; i < count; i++) {
|
||||
jobject obj = env->GetObjectArrayElement(params, i);
|
||||
if (obj) {
|
||||
args[i] = _jobject_to_variant(env, obj);
|
||||
}
|
||||
env->DeleteLocalRef(obj);
|
||||
argptrs[i] = &args[i];
|
||||
}
|
||||
|
||||
static_assert(VARIANT_ARG_MAX == 8, "This code needs to be updated if VARIANT_ARG_MAX != 8");
|
||||
obj->call_deferred(str_method, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
|
||||
MessageQueue::get_singleton()->push_callp(obj, str_method, (const Variant **)argptrs, count);
|
||||
// something
|
||||
env->PopLocalFrame(nullptr);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -114,10 +114,9 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_plugin_GodotPlugin_nativeEmitS
|
|||
String signal_name = jstring_to_string(j_signal_name, env);
|
||||
|
||||
int count = env->GetArrayLength(j_signal_params);
|
||||
ERR_FAIL_COND_MSG(count > VARIANT_ARG_MAX, "Maximum argument count exceeded!");
|
||||
|
||||
Variant variant_params[VARIANT_ARG_MAX];
|
||||
const Variant *args[VARIANT_ARG_MAX];
|
||||
Variant *variant_params = (Variant *)alloca(sizeof(Variant) * count);
|
||||
const Variant **args = (const Variant **)alloca(sizeof(Variant *) * count);
|
||||
|
||||
for (int i = 0; i < count; i++) {
|
||||
jobject j_param = env->GetObjectArrayElement(j_signal_params, i);
|
||||
|
|
@ -126,7 +125,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_plugin_GodotPlugin_nativeEmitS
|
|||
env->DeleteLocalRef(j_param);
|
||||
};
|
||||
|
||||
singleton->emit_signal(StringName(signal_name), args, count);
|
||||
singleton->emit_signalp(StringName(signal_name), args, count);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_godotengine_godot_plugin_GodotPlugin_nativeRegisterGDNativeLibraries(JNIEnv *env, jclass clazz, jobjectArray gdnlib_paths) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue