diff --git a/Core/GDCore/Extensions/Metadata/ValueTypeMetadata.cpp b/Core/GDCore/Extensions/Metadata/ValueTypeMetadata.cpp index e4ed08bccb..982ba90ba8 100644 --- a/Core/GDCore/Extensions/Metadata/ValueTypeMetadata.cpp +++ b/Core/GDCore/Extensions/Metadata/ValueTypeMetadata.cpp @@ -53,20 +53,23 @@ const gd::String &ValueTypeMetadata::GetExpressionPrimitiveValueType( const gd::String & ValueTypeMetadata::GetPrimitiveValueType(const gd::String ¶meterType) { - if (parameterType == "variable" || - gd::ValueTypeMetadata::IsTypeExpression("variable", parameterType)) { - return ValueTypeMetadata::variableType; + if (parameterType == "number" || + gd::ValueTypeMetadata::IsTypeValue("number", parameterType)) { + return ValueTypeMetadata::numberType; } - if (parameterType == "boolean" || parameterType == "yesorno" || - parameterType == "trueorfalse") { - return ValueTypeMetadata::booleanType; - } - // These 2 types are not strings from the code generator point of view, - // but it is for event-based extensions. - if (parameterType == "key" || parameterType == "mouse") { + if (parameterType == "string" || + gd::ValueTypeMetadata::IsTypeValue("string", parameterType)) { return ValueTypeMetadata::stringType; } - return GetExpressionPrimitiveValueType(parameterType); + if (parameterType == "variable" || + gd::ValueTypeMetadata::IsTypeValue("variable", parameterType)) { + return ValueTypeMetadata::variableType; + } + if (parameterType == "boolean" || + gd::ValueTypeMetadata::IsTypeValue("boolean", parameterType)) { + return ValueTypeMetadata::booleanType; + } + return parameterType; } const gd::String ValueTypeMetadata::numberValueType = "number"; diff --git a/Core/GDCore/Extensions/Metadata/ValueTypeMetadata.h b/Core/GDCore/Extensions/Metadata/ValueTypeMetadata.h index 0bfa868804..a81e846ff0 100644 --- a/Core/GDCore/Extensions/Metadata/ValueTypeMetadata.h +++ b/Core/GDCore/Extensions/Metadata/ValueTypeMetadata.h @@ -111,21 +111,21 @@ class GD_CORE_API ValueTypeMetadata { * given type. */ bool IsNumber() const { - return gd::ValueTypeMetadata::IsTypeExpression("number", name); + return gd::ValueTypeMetadata::IsTypeValue("number", name); } /** * \brief Return true if the type is a string. */ bool IsString() const { - return gd::ValueTypeMetadata::IsTypeExpression("string", name); + return gd::ValueTypeMetadata::IsTypeValue("string", name); } /** * \brief Return true if the type is a boolean. */ bool IsBoolean() const { - return gd::ValueTypeMetadata::IsTypeExpression("boolean", name); + return gd::ValueTypeMetadata::IsTypeValue("boolean", name); } /** @@ -135,7 +135,7 @@ class GD_CORE_API ValueTypeMetadata { * and ExpressionAutocompletion) and in the EventsCodeGenerator. */ bool IsVariable() const { - return gd::ValueTypeMetadata::IsTypeExpression("variable", name); + return gd::ValueTypeMetadata::GetPrimitiveValueType(name) == "variable"; } /** @@ -175,7 +175,9 @@ class GD_CORE_API ValueTypeMetadata { } /** - * \brief Return true if the type is an expression of the given type. + * \brief Return true if the type is an expression of the given type from the + * caller point of view. + * * \note If you are adding a new type of parameter, also add it in the IDE ( * see EventsFunctionParametersEditor, ParameterRenderingService * and ExpressionAutocompletion) and in the EventsCodeGenerator. @@ -186,6 +188,7 @@ class GD_CORE_API ValueTypeMetadata { return parameterType == "number" || parameterType == "expression" || parameterType == "camera" || parameterType == "forceMultiplier"; } else if (type == "string") { + // "key" and "mouse" are not mapped her, see GetPrimitiveValueType. return parameterType == "string" || parameterType == "layer" || parameterType == "color" || parameterType == "file" || parameterType == "stringWithSelector" || @@ -227,6 +230,26 @@ class GD_CORE_API ValueTypeMetadata { return false; } + /** + * \brief Return true if the type is a value of the given primitive type from + * the function events point of view + */ + static bool IsTypeValue(const gd::String &type, + const gd::String ¶meterType) { + if (gd::ValueTypeMetadata::IsTypeExpression(type, parameterType)) { + return true; + } + // These 2 parameter types are not strings from the outside of a function as + // the generator add quote around a text, but from the events inside of the + // function the parameter is a string. + // + // See EventsCodeGenerator::GenerateParameterCodes + if (type == "string") { + return parameterType == "key" || parameterType == "mouse"; + } + return false; + } + /** * \brief Return the expression type from the parameter type. * Declinations of "number" and "string" types (like "forceMultiplier" or diff --git a/Core/GDCore/IDE/Events/ExpressionTypeFinder.h b/Core/GDCore/IDE/Events/ExpressionTypeFinder.h index 4a03157e37..f826a8a246 100644 --- a/Core/GDCore/IDE/Events/ExpressionTypeFinder.h +++ b/Core/GDCore/IDE/Events/ExpressionTypeFinder.h @@ -72,7 +72,7 @@ class GD_CORE_API ExpressionTypeFinder : public ExpressionParser2NodeWorker { child(nullptr) {}; const gd::String &GetType() { - return gd::ParameterMetadata::GetExpressionValueType(type); + return gd::ValueTypeMetadata::GetExpressionPrimitiveValueType(type); }; void OnVisitSubExpressionNode(SubExpressionNode& node) override { diff --git a/Core/GDCore/IDE/Events/ExpressionValidator.h b/Core/GDCore/IDE/Events/ExpressionValidator.h index 1eddfc66c8..0e398699cb 100644 --- a/Core/GDCore/IDE/Events/ExpressionValidator.h +++ b/Core/GDCore/IDE/Events/ExpressionValidator.h @@ -42,7 +42,7 @@ class GD_CORE_API ExpressionValidator : public ExpressionParser2NodeWorker { const gd::String &extraInfo_ = "") : platform(platform_), projectScopedContainers(projectScopedContainers_), - parentType(StringToType(gd::ParameterMetadata::GetExpressionValueType(rootType_))), + parentType(StringToType(gd::ValueTypeMetadata::GetExpressionPrimitiveValueType(rootType_))), childType(Type::Unknown), forbidsUsageOfBracketsBecauseParentIsObject(false), currentParameterExtraInfo(&extraInfo_) {};