Add GDScript warning for standalone expression

This makes the error message clearer as it might be used to call
functions with side effects.
This commit is contained in:
George Marques 2020-01-09 08:30:14 -03:00
parent e7b7dc57fc
commit 7d4fc79eb3
No known key found for this signature in database
GPG Key ID: 046BD46A3201E43D
3 changed files with 10 additions and 1 deletions

View File

@ -2051,6 +2051,9 @@ String GDScriptWarning::get_message() const {
CHECK_SYMBOLS(2); CHECK_SYMBOLS(2);
return "The '" + symbols[0] + "' keyword is deprecated and will be removed in a future release, please replace its uses by '" + symbols[1] + "'."; return "The '" + symbols[0] + "' keyword is deprecated and will be removed in a future release, please replace its uses by '" + symbols[1] + "'.";
} break; } break;
case STANDALONE_TERNARY: {
return "Standalone ternary conditional operator: the return value is being discarded.";
}
case WARNING_MAX: break; // Can't happen, but silences warning case WARNING_MAX: break; // Can't happen, but silences warning
} }
ERR_FAIL_V_MSG(String(), "Invalid GDScript warning code: " + get_name_from_code(code) + "."); ERR_FAIL_V_MSG(String(), "Invalid GDScript warning code: " + get_name_from_code(code) + ".");
@ -2092,6 +2095,7 @@ String GDScriptWarning::get_name_from_code(Code p_code) {
"UNSAFE_CAST", "UNSAFE_CAST",
"UNSAFE_CALL_ARGUMENT", "UNSAFE_CALL_ARGUMENT",
"DEPRECATED_KEYWORD", "DEPRECATED_KEYWORD",
"STANDALONE_TERNARY",
NULL NULL
}; };

View File

@ -297,6 +297,7 @@ struct GDScriptWarning {
UNSAFE_CAST, // Cast used in an unknown type UNSAFE_CAST, // Cast used in an unknown type
UNSAFE_CALL_ARGUMENT, // Function call argument is of a supertype of the require argument UNSAFE_CALL_ARGUMENT, // Function call argument is of a supertype of the require argument
DEPRECATED_KEYWORD, // The keyword is deprecated and should be replaced DEPRECATED_KEYWORD, // The keyword is deprecated and should be replaced
STANDALONE_TERNARY, // Return value of ternary expression is discarded
WARNING_MAX, WARNING_MAX,
} code; } code;
Vector<String> symbols; Vector<String> symbols;

View File

@ -8274,7 +8274,11 @@ void GDScriptParser::_check_block_types(BlockNode *p_block) {
_mark_line_as_safe(op->line); _mark_line_as_safe(op->line);
_reduce_node_type(op); // Test for safety anyway _reduce_node_type(op); // Test for safety anyway
#ifdef DEBUG_ENABLED #ifdef DEBUG_ENABLED
_add_warning(GDScriptWarning::STANDALONE_EXPRESSION, statement->line); if (op->op == OperatorNode::OP_TERNARY_IF) {
_add_warning(GDScriptWarning::STANDALONE_TERNARY, statement->line);
} else {
_add_warning(GDScriptWarning::STANDALONE_EXPRESSION, statement->line);
}
#endif // DEBUG_ENABLED #endif // DEBUG_ENABLED
} }
} }