|
@@ -152,6 +152,44 @@ String GDScriptFunction::_get_call_error(const Callable::CallError &p_err, const
|
|
return err_text;
|
|
return err_text;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void (*type_init_function_table[])(Variant *) = {
|
|
|
|
+ nullptr, // NIL (shouldn't be called).
|
|
|
|
+ &VariantInitializer<bool>::init, // BOOL.
|
|
|
|
+ &VariantInitializer<int64_t>::init, // INT.
|
|
|
|
+ &VariantInitializer<double>::init, // FLOAT.
|
|
|
|
+ &VariantInitializer<String>::init, // STRING.
|
|
|
|
+ &VariantInitializer<Vector2>::init, // VECTOR2.
|
|
|
|
+ &VariantInitializer<Vector2i>::init, // VECTOR2I.
|
|
|
|
+ &VariantInitializer<Rect2>::init, // RECT2.
|
|
|
|
+ &VariantInitializer<Rect2i>::init, // RECT2I.
|
|
|
|
+ &VariantInitializer<Vector3>::init, // VECTOR3.
|
|
|
|
+ &VariantInitializer<Vector3i>::init, // VECTOR3I.
|
|
|
|
+ &VariantInitializer<Transform2D>::init, // TRANSFORM2D.
|
|
|
|
+ &VariantInitializer<Plane>::init, // PLANE.
|
|
|
|
+ &VariantInitializer<Quat>::init, // QUAT.
|
|
|
|
+ &VariantInitializer<AABB>::init, // AABB.
|
|
|
|
+ &VariantInitializer<Basis>::init, // BASIS.
|
|
|
|
+ &VariantInitializer<Transform>::init, // TRANSFORM.
|
|
|
|
+ &VariantInitializer<Color>::init, // COLOR.
|
|
|
|
+ &VariantInitializer<StringName>::init, // STRING_NAME.
|
|
|
|
+ &VariantInitializer<NodePath>::init, // NODE_PATH.
|
|
|
|
+ &VariantInitializer<RID>::init, // RID.
|
|
|
|
+ &VariantTypeAdjust<Object *>::adjust, // OBJECT.
|
|
|
|
+ &VariantInitializer<Callable>::init, // CALLABLE.
|
|
|
|
+ &VariantInitializer<Signal>::init, // SIGNAL.
|
|
|
|
+ &VariantInitializer<Dictionary>::init, // DICTIONARY.
|
|
|
|
+ &VariantInitializer<Array>::init, // ARRAY.
|
|
|
|
+ &VariantInitializer<PackedByteArray>::init, // PACKED_BYTE_ARRAY.
|
|
|
|
+ &VariantInitializer<PackedInt32Array>::init, // PACKED_INT32_ARRAY.
|
|
|
|
+ &VariantInitializer<PackedInt64Array>::init, // PACKED_INT64_ARRAY.
|
|
|
|
+ &VariantInitializer<PackedFloat32Array>::init, // PACKED_FLOAT32_ARRAY.
|
|
|
|
+ &VariantInitializer<PackedFloat64Array>::init, // PACKED_FLOAT64_ARRAY.
|
|
|
|
+ &VariantInitializer<PackedStringArray>::init, // PACKED_STRING_ARRAY.
|
|
|
|
+ &VariantInitializer<PackedVector2Array>::init, // PACKED_VECTOR2_ARRAY.
|
|
|
|
+ &VariantInitializer<PackedVector3Array>::init, // PACKED_VECTOR3_ARRAY.
|
|
|
|
+ &VariantInitializer<PackedColorArray>::init, // PACKED_COLOR_ARRAY.
|
|
|
|
+};
|
|
|
|
+
|
|
#if defined(__GNUC__)
|
|
#if defined(__GNUC__)
|
|
#define OPCODES_TABLE \
|
|
#define OPCODES_TABLE \
|
|
static const void *switch_table_ops[] = { \
|
|
static const void *switch_table_ops[] = { \
|
|
@@ -491,6 +529,10 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
|
|
|
|
|
|
memnew_placement(&stack[ADDR_STACK_CLASS], Variant(script));
|
|
memnew_placement(&stack[ADDR_STACK_CLASS], Variant(script));
|
|
|
|
|
|
|
|
+ for (const Map<int, Variant::Type>::Element *E = temporary_slots.front(); E; E = E->next()) {
|
|
|
|
+ type_init_function_table[E->get()](&stack[E->key()]);
|
|
|
|
+ }
|
|
|
|
+
|
|
String err_text;
|
|
String err_text;
|
|
|
|
|
|
#ifdef DEBUG_ENABLED
|
|
#ifdef DEBUG_ENABLED
|