diff options
| -rw-r--r-- | modules/gdscript/gdscript_analyzer.cpp | 8 | ||||
| -rw-r--r-- | modules/gdscript/gdscript_analyzer.h | 2 | ||||
| -rw-r--r-- | modules/gdscript/gdscript_parser.cpp | 1 | 
3 files changed, 6 insertions, 5 deletions
diff --git a/modules/gdscript/gdscript_analyzer.cpp b/modules/gdscript/gdscript_analyzer.cpp index 8a07d509a1..9bb736d7e6 100644 --- a/modules/gdscript/gdscript_analyzer.cpp +++ b/modules/gdscript/gdscript_analyzer.cpp @@ -1957,7 +1957,7 @@ void GDScriptAnalyzer::reduce_expression(GDScriptParser::ExpressionNode *p_expre  			reduce_subscript(static_cast<GDScriptParser::SubscriptNode *>(p_expression));  			break;  		case GDScriptParser::Node::TERNARY_OPERATOR: -			reduce_ternary_op(static_cast<GDScriptParser::TernaryOpNode *>(p_expression)); +			reduce_ternary_op(static_cast<GDScriptParser::TernaryOpNode *>(p_expression), p_is_root);  			break;  		case GDScriptParser::Node::UNARY_OPERATOR:  			reduce_unary_op(static_cast<GDScriptParser::UnaryOpNode *>(p_expression)); @@ -3656,10 +3656,10 @@ void GDScriptAnalyzer::reduce_subscript(GDScriptParser::SubscriptNode *p_subscri  	p_subscript->set_datatype(result_type);  } -void GDScriptAnalyzer::reduce_ternary_op(GDScriptParser::TernaryOpNode *p_ternary_op) { +void GDScriptAnalyzer::reduce_ternary_op(GDScriptParser::TernaryOpNode *p_ternary_op, bool p_is_root) {  	reduce_expression(p_ternary_op->condition); -	reduce_expression(p_ternary_op->true_expr); -	reduce_expression(p_ternary_op->false_expr); +	reduce_expression(p_ternary_op->true_expr, p_is_root); +	reduce_expression(p_ternary_op->false_expr, p_is_root);  	GDScriptParser::DataType result; diff --git a/modules/gdscript/gdscript_analyzer.h b/modules/gdscript/gdscript_analyzer.h index a7f8e3b556..3b8ed70e62 100644 --- a/modules/gdscript/gdscript_analyzer.h +++ b/modules/gdscript/gdscript_analyzer.h @@ -99,7 +99,7 @@ class GDScriptAnalyzer {  	void reduce_preload(GDScriptParser::PreloadNode *p_preload);  	void reduce_self(GDScriptParser::SelfNode *p_self);  	void reduce_subscript(GDScriptParser::SubscriptNode *p_subscript); -	void reduce_ternary_op(GDScriptParser::TernaryOpNode *p_ternary_op); +	void reduce_ternary_op(GDScriptParser::TernaryOpNode *p_ternary_op, bool p_is_root = false);  	void reduce_unary_op(GDScriptParser::UnaryOpNode *p_unary_op);  	void const_fold_array(GDScriptParser::ArrayNode *p_array); diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index 6107bb37c8..4fbaf0d803 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -1750,6 +1750,7 @@ GDScriptParser::Node *GDScriptParser::parse_statement() {  					case Node::CALL:  					case Node::ASSIGNMENT:  					case Node::AWAIT: +					case Node::TERNARY_OPERATOR:  						// Fine.  						break;  					case Node::LAMBDA:  |