From 442febd2ae594848ad2d0c5c5d4d517822601769 Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Mon, 4 May 2015 00:53:33 -0300 Subject: added return keyword, fixes #1797 --- core/variant.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'core/variant.cpp') diff --git a/core/variant.cpp b/core/variant.cpp index fe6a6b3e4f..5e2ab962a6 100644 --- a/core/variant.cpp +++ b/core/variant.cpp @@ -532,7 +532,7 @@ bool Variant::is_zero() const { } break; case QUAT: { - *reinterpret_cast(_data._mem)==Quat(); + return *reinterpret_cast(_data._mem)==Quat(); } break; case MATRIX3: { -- cgit v1.2.3 From 6f8bd899311d459b9e391b4acf72ccfa5cc1d806 Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Mon, 4 May 2015 11:17:11 -0300 Subject: -invalidated string -> int automatic conversion, fixes #1788 --- core/variant.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'core/variant.cpp') diff --git a/core/variant.cpp b/core/variant.cpp index 5e2ab962a6..c06afb2984 100644 --- a/core/variant.cpp +++ b/core/variant.cpp @@ -214,7 +214,7 @@ bool Variant::can_convert(Variant::Type p_type_from,Variant::Type p_type_to) { static const Type valid[]={ INT, REAL, - STRING, + //STRING, NIL, }; @@ -225,7 +225,7 @@ bool Variant::can_convert(Variant::Type p_type_from,Variant::Type p_type_to) { static const Type valid[]={ BOOL, REAL, - STRING, + //STRING, NIL, }; @@ -237,7 +237,7 @@ bool Variant::can_convert(Variant::Type p_type_from,Variant::Type p_type_to) { static const Type valid[]={ BOOL, INT, - STRING, + //STRING, NIL, }; -- cgit v1.2.3 From 2d396fb71070f282b6858cb77efac1c948b6b4a9 Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Mon, 4 May 2015 18:30:57 -0300 Subject: -More strict argument type-checking, will make many bugs visible, fixes #1809 -added NOTIFICATION_INSTANCED --- core/variant.cpp | 260 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 255 insertions(+), 5 deletions(-) (limited to 'core/variant.cpp') diff --git a/core/variant.cpp b/core/variant.cpp index c06afb2984..f49b202a5b 100644 --- a/core/variant.cpp +++ b/core/variant.cpp @@ -214,7 +214,7 @@ bool Variant::can_convert(Variant::Type p_type_from,Variant::Type p_type_to) { static const Type valid[]={ INT, REAL, - //STRING, + STRING, NIL, }; @@ -225,7 +225,7 @@ bool Variant::can_convert(Variant::Type p_type_from,Variant::Type p_type_to) { static const Type valid[]={ BOOL, REAL, - //STRING, + STRING, NIL, }; @@ -237,7 +237,7 @@ bool Variant::can_convert(Variant::Type p_type_from,Variant::Type p_type_to) { static const Type valid[]={ BOOL, INT, - //STRING, + STRING, NIL, }; @@ -258,12 +258,12 @@ bool Variant::can_convert(Variant::Type p_type_from,Variant::Type p_type_to) { case MATRIX32: { - static const Type invalid[]={ + static const Type valid[]={ TRANSFORM, NIL }; - invalid_types=invalid; + valid_types=valid; } break; case QUAT: { @@ -299,6 +299,256 @@ bool Variant::can_convert(Variant::Type p_type_from,Variant::Type p_type_to) { } break; + case COLOR: { + + static const Type valid[] = { + //STRING, + //INT, + NIL, + }; + + valid_types = valid; + + } break; + + case _RID: { + + static const Type valid[]={ + OBJECT, + NIL + }; + + valid_types=valid; + } break; + case OBJECT: { + + static const Type valid[]={ + NIL + }; + + valid_types=valid; + } break; + case NODE_PATH: { + + static const Type valid[]={ + STRING, + NIL + }; + + valid_types=valid; + } break; + case ARRAY: { + + + static const Type valid[]={ + RAW_ARRAY, + INT_ARRAY, + STRING_ARRAY, + REAL_ARRAY, + COLOR_ARRAY, + VECTOR2_ARRAY, + VECTOR3_ARRAY, + NIL + }; + + valid_types=valid; + } break; + // arrays + case RAW_ARRAY: { + + static const Type valid[]={ + ARRAY, + NIL + }; + + valid_types=valid; + } break; + case INT_ARRAY: { + + static const Type valid[]={ + ARRAY, + NIL + }; + valid_types=valid; + } break; + case REAL_ARRAY: { + + static const Type valid[]={ + ARRAY, + NIL + }; + + valid_types=valid; + } break; + case STRING_ARRAY: { + + static const Type valid[]={ + ARRAY, + NIL + }; + valid_types=valid; + } break; + case VECTOR2_ARRAY: { + + static const Type valid[]={ + ARRAY, + NIL + }; + valid_types=valid; + + } break; + case VECTOR3_ARRAY: { + + static const Type valid[]={ + ARRAY, + NIL + }; + valid_types=valid; + + } break; + case COLOR_ARRAY: { + + static const Type valid[]={ + ARRAY, + NIL + }; + + valid_types=valid; + + } break; + default: {} + } + + + if (valid_types) { + + int i=0; + while(valid_types[i]!=NIL) { + + if (p_type_from==valid_types[i]) + return true; + i++; + } + } else if (invalid_types) { + + + int i=0; + while(invalid_types[i]!=NIL) { + + if (p_type_from==invalid_types[i]) + return false; + i++; + } + } + + return false; + +} + +bool Variant::can_convert_strict(Variant::Type p_type_from,Variant::Type p_type_to) { + + if (p_type_from==p_type_to) + return true; + if (p_type_to==NIL && p_type_from!=NIL) //nil can convert to anything + return true; + + if (p_type_from == NIL) { + return (p_type_to == OBJECT); + }; + + const Type *valid_types=NULL; + const Type *invalid_types=NULL; + + switch(p_type_to) { + case BOOL: { + + static const Type valid[]={ + //INT, + //REAL, + //STRING, + NIL, + }; + + valid_types=valid; + } break; + case INT: { + + static const Type valid[]={ + //BOOL, + REAL, + //STRING, + NIL, + }; + + valid_types=valid; + + } break; + case REAL: { + + static const Type valid[]={ + //BOOL, + INT, + //STRING, + NIL, + }; + + valid_types=valid; + + } break; + case STRING: { + + + static const Type valid[]={ + NODE_PATH, + NIL + }; + + valid_types=valid; + } break; + case MATRIX32: { + + + static const Type valid[]={ + TRANSFORM, + NIL + }; + + valid_types=valid; + } break; + case QUAT: { + + static const Type valid[]={ + MATRIX3, + NIL + }; + + valid_types=valid; + + } break; + case MATRIX3: { + + static const Type valid[]={ + QUAT, + NIL + }; + + valid_types=valid; + + + } break; + case TRANSFORM: { + + static const Type valid[]={ + MATRIX32, + QUAT, + MATRIX3, + NIL + }; + + valid_types=valid; + + } break; + case COLOR: { static const Type valid[] = { -- cgit v1.2.3 From bc3c14a76b988a50e65328a932316c2e630a7ae6 Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Tue, 5 May 2015 09:53:37 -0300 Subject: Made type-checking for arguments less trict between bool, int real. Fixes #1816 --- core/variant.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'core/variant.cpp') diff --git a/core/variant.cpp b/core/variant.cpp index f49b202a5b..d7817ac268 100644 --- a/core/variant.cpp +++ b/core/variant.cpp @@ -463,8 +463,8 @@ bool Variant::can_convert_strict(Variant::Type p_type_from,Variant::Type p_type_ case BOOL: { static const Type valid[]={ - //INT, - //REAL, + INT, + REAL, //STRING, NIL, }; @@ -474,7 +474,7 @@ bool Variant::can_convert_strict(Variant::Type p_type_from,Variant::Type p_type_ case INT: { static const Type valid[]={ - //BOOL, + BOOL, REAL, //STRING, NIL, @@ -486,7 +486,7 @@ bool Variant::can_convert_strict(Variant::Type p_type_from,Variant::Type p_type_ case REAL: { static const Type valid[]={ - //BOOL, + BOOL, INT, //STRING, NIL, -- cgit v1.2.3