Browse Source

Do not make a function that returns Variant::NIL a void function. Fix #22791.

J08nY 6 years ago
parent
commit
6e8f0cfdc6
1 changed files with 7 additions and 1 deletions
  1. 7 1
      modules/gdscript/gdscript_parser.cpp

+ 7 - 1
modules/gdscript/gdscript_parser.cpp

@@ -6709,9 +6709,15 @@ GDScriptParser::DataType GDScriptParser::_reduce_function_call_type(const Operat
 					}
 					}
 				}
 				}
 
 
+				bool rets = false;
 				return_type.has_type = true;
 				return_type.has_type = true;
 				return_type.kind = DataType::BUILTIN;
 				return_type.kind = DataType::BUILTIN;
-				return_type.builtin_type = Variant::get_method_return_type(base_type.builtin_type, callee_name);
+				return_type.builtin_type = Variant::get_method_return_type(base_type.builtin_type, callee_name, &rets);
+				// If the method returns, but it might return any type, (Variant::NIL), pretend we don't know the type.
+				// At least make sure we know that it returns
+				if (rets && return_type.builtin_type == Variant::NIL) {
+					return_type.has_type = false;
+				}
 				break;
 				break;
 			}
 			}