2
0
Эх сурвалжийг харах

Merge pull request #52877 from Calinou/add-print-verbose

Add `print_verbose()` built-in function to print in verbose mode only
Rémi Verschelde 4 жил өмнө
parent
commit
61ce8b206e

+ 23 - 20
core/variant/variant_utility.cpp

@@ -487,10 +487,6 @@ struct VariantUtilityFunctions {
 	}
 
 	static inline void print(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) {
-		if (p_arg_count < 1) {
-			r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
-			r_error.argument = 1;
-		}
 		String str;
 		for (int i = 0; i < p_arg_count; i++) {
 			String os = p_args[i]->operator String();
@@ -506,11 +502,29 @@ struct VariantUtilityFunctions {
 		r_error.error = Callable::CallError::CALL_OK;
 	}
 
-	static inline void printerr(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) {
-		if (p_arg_count < 1) {
-			r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
-			r_error.argument = 1;
+	static inline void print_verbose(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) {
+		if (OS::get_singleton()->is_stdout_verbose()) {
+			String str;
+			for (int i = 0; i < p_arg_count; i++) {
+				String os = p_args[i]->operator String();
+
+				if (i == 0) {
+					str = os;
+				} else {
+					str += os;
+				}
+			}
+
+			// No need to use `print_verbose()` as this call already only happens
+			// when verbose mode is enabled. This avoids performing string argument concatenation
+			// when not needed.
+			print_line(str);
 		}
+
+		r_error.error = Callable::CallError::CALL_OK;
+	}
+
+	static inline void printerr(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) {
 		String str;
 		for (int i = 0; i < p_arg_count; i++) {
 			String os = p_args[i]->operator String();
@@ -527,10 +541,6 @@ struct VariantUtilityFunctions {
 	}
 
 	static inline void printt(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) {
-		if (p_arg_count < 1) {
-			r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
-			r_error.argument = 1;
-		}
 		String str;
 		for (int i = 0; i < p_arg_count; i++) {
 			if (i) {
@@ -544,10 +554,6 @@ struct VariantUtilityFunctions {
 	}
 
 	static inline void prints(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) {
-		if (p_arg_count < 1) {
-			r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
-			r_error.argument = 1;
-		}
 		String str;
 		for (int i = 0; i < p_arg_count; i++) {
 			if (i) {
@@ -561,10 +567,6 @@ struct VariantUtilityFunctions {
 	}
 
 	static inline void printraw(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) {
-		if (p_arg_count < 1) {
-			r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
-			r_error.argument = 1;
-		}
 		String str;
 		for (int i = 0; i < p_arg_count; i++) {
 			String os = p_args[i]->operator String();
@@ -1246,6 +1248,7 @@ void Variant::_register_variant_utility_functions() {
 	FUNCBINDVARARGV(printt, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL);
 	FUNCBINDVARARGV(prints, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL);
 	FUNCBINDVARARGV(printraw, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL);
+	FUNCBINDVARARGV(print_verbose, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL);
 	FUNCBINDVARARGV(push_error, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL);
 	FUNCBINDVARARGV(push_warning, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL);
 

+ 5 - 0
doc/classes/@GlobalScope.xml

@@ -556,6 +556,11 @@
 				[b]Note:[/b] Consider using [method push_error] and [method push_warning] to print error and warning messages instead of [method print]. This distinguishes them from print messages used for debugging purposes, while also displaying a stack trace when an error or warning is printed.
 			</description>
 		</method>
+		<method name="print_verbose" qualifiers="vararg">
+			<description>
+				If verbose mode is enabled ([method OS.is_stdout_verbose] returning [code]true[/code]), converts one or more arguments of any type to string in the best way possible and prints them to the console.
+			</description>
+		</method>
 		<method name="printerr" qualifiers="vararg">
 			<description>
 				Prints one or more arguments to strings in the best way possible to standard error line.

+ 1 - 1
doc/classes/OS.xml

@@ -342,7 +342,7 @@
 		<method name="is_stdout_verbose" qualifiers="const">
 			<return type="bool" />
 			<description>
-				Returns [code]true[/code] if the engine was executed with [code]-v[/code] (verbose stdout).
+				Returns [code]true[/code] if the engine was executed with the [code]--verbose[/code] or [code]-v[/code] command line argument, or if [member ProjectSettings.debug/settings/stdout/verbose_stdout] is [code]true[/code]. See also [method @GlobalScope.print_verbose].
 			</description>
 		</method>
 		<method name="is_userfs_persistent" qualifiers="const">

+ 1 - 1
doc/classes/ProjectSettings.xml

@@ -432,7 +432,7 @@
 		<member name="debug/settings/stdout/print_gpu_profile" type="bool" setter="" getter="" default="false">
 		</member>
 		<member name="debug/settings/stdout/verbose_stdout" type="bool" setter="" getter="" default="false">
-			Print more information to standard output when running. It displays information such as memory leaks, which scenes and resources are being loaded, etc.
+			Print more information to standard output when running. It displays information such as memory leaks, which scenes and resources are being loaded, etc. This can also be enabled using the [code]--verbose[/code] or [code]-v[/code] command line argument, even on an exported project. See also [method OS.is_stdout_verbose] and [method @GlobalScope.print_verbose].
 		</member>
 		<member name="debug/settings/visual_script/max_call_stack" type="int" setter="" getter="" default="1024">
 			Maximum call stack in visual scripting, to avoid infinite recursion.

+ 11 - 9
modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml

@@ -179,32 +179,34 @@
 		<constant name="TEXT_PRINTRAW" value="55" enum="BuiltinFunc">
 			Print the given string to the standard output, without adding a newline.
 		</constant>
-		<constant name="VAR_TO_STR" value="56" enum="BuiltinFunc">
+		<constant name="TEXT_PRINT_VERBOSE" value="56" enum="BuiltinFunc">
+		</constant>
+		<constant name="VAR_TO_STR" value="57" enum="BuiltinFunc">
 			Serialize a [Variant] to a string.
 		</constant>
-		<constant name="STR_TO_VAR" value="57" enum="BuiltinFunc">
+		<constant name="STR_TO_VAR" value="58" enum="BuiltinFunc">
 			Deserialize a [Variant] from a string serialized using [constant VAR_TO_STR].
 		</constant>
-		<constant name="VAR_TO_BYTES" value="58" enum="BuiltinFunc">
+		<constant name="VAR_TO_BYTES" value="59" enum="BuiltinFunc">
 			Serialize a [Variant] to a [PackedByteArray].
 		</constant>
-		<constant name="BYTES_TO_VAR" value="59" enum="BuiltinFunc">
+		<constant name="BYTES_TO_VAR" value="60" enum="BuiltinFunc">
 			Deserialize a [Variant] from a [PackedByteArray] serialized using [constant VAR_TO_BYTES].
 		</constant>
-		<constant name="MATH_SMOOTHSTEP" value="60" enum="BuiltinFunc">
+		<constant name="MATH_SMOOTHSTEP" value="61" enum="BuiltinFunc">
 			Return a number smoothly interpolated between the first two inputs, based on the third input. Similar to [constant MATH_LERP], but interpolates faster at the beginning and slower at the end. Using Hermite interpolation formula:
 			[codeblock]
 			var t = clamp((weight - from) / (to - from), 0.0, 1.0)
 			return t * t * (3.0 - 2.0 * t)
 			[/codeblock]
 		</constant>
-		<constant name="MATH_POSMOD" value="61" enum="BuiltinFunc">
+		<constant name="MATH_POSMOD" value="62" enum="BuiltinFunc">
 		</constant>
-		<constant name="MATH_LERP_ANGLE" value="62" enum="BuiltinFunc">
+		<constant name="MATH_LERP_ANGLE" value="63" enum="BuiltinFunc">
 		</constant>
-		<constant name="TEXT_ORD" value="63" enum="BuiltinFunc">
+		<constant name="TEXT_ORD" value="64" enum="BuiltinFunc">
 		</constant>
-		<constant name="FUNC_MAX" value="64" enum="BuiltinFunc">
+		<constant name="FUNC_MAX" value="65" enum="BuiltinFunc">
 			Represents the size of the [enum BuiltinFunc] enum.
 		</constant>
 	</constants>

+ 14 - 1
modules/visual_script/visual_script_builtin_funcs.cpp

@@ -94,6 +94,7 @@ const char *VisualScriptBuiltinFunc::func_name[VisualScriptBuiltinFunc::FUNC_MAX
 	"print",
 	"printerr",
 	"printraw",
+	"print_verbose",
 	"var2str",
 	"str2var",
 	"var2bytes",
@@ -129,6 +130,7 @@ bool VisualScriptBuiltinFunc::has_input_sequence_port() const {
 		case TEXT_PRINT:
 		case TEXT_PRINTERR:
 		case TEXT_PRINTRAW:
+		case TEXT_PRINT_VERBOSE:
 		case MATH_SEED:
 			return true;
 		default:
@@ -177,6 +179,7 @@ int VisualScriptBuiltinFunc::get_func_argument_count(BuiltinFunc p_func) {
 		case TEXT_PRINT:
 		case TEXT_PRINTERR:
 		case TEXT_PRINTRAW:
+		case TEXT_PRINT_VERBOSE:
 		case VAR_TO_STR:
 		case STR_TO_VAR:
 		case TYPE_EXISTS:
@@ -223,6 +226,7 @@ int VisualScriptBuiltinFunc::get_output_value_port_count() const {
 		case TEXT_PRINT:
 		case TEXT_PRINTERR:
 		case TEXT_PRINTRAW:
+		case TEXT_PRINT_VERBOSE:
 		case MATH_SEED:
 			return 0;
 		case MATH_RANDSEED:
@@ -424,7 +428,8 @@ PropertyInfo VisualScriptBuiltinFunc::get_input_value_port_info(int p_idx) const
 		case TEXT_STR:
 		case TEXT_PRINT:
 		case TEXT_PRINTERR:
-		case TEXT_PRINTRAW: {
+		case TEXT_PRINTRAW:
+		case TEXT_PRINT_VERBOSE: {
 			return PropertyInfo(Variant::NIL, "value");
 		} break;
 		case STR_TO_VAR: {
@@ -572,6 +577,8 @@ PropertyInfo VisualScriptBuiltinFunc::get_output_value_port_info(int p_idx) cons
 		} break;
 		case TEXT_PRINTRAW: {
 		} break;
+		case TEXT_PRINT_VERBOSE: {
+		} break;
 		case VAR_TO_STR: {
 			t = Variant::STRING;
 		} break;
@@ -1020,6 +1027,10 @@ void VisualScriptBuiltinFunc::exec_func(BuiltinFunc p_func, const Variant **p_in
 			OS::get_singleton()->print("%s", str.utf8().get_data());
 
 		} break;
+		case VisualScriptBuiltinFunc::TEXT_PRINT_VERBOSE: {
+			String str = *p_inputs[0];
+			print_verbose(str);
+		} break;
 		case VisualScriptBuiltinFunc::VAR_TO_STR: {
 			String vars;
 			VariantWriter::write_to_string(*p_inputs[0], vars);
@@ -1208,6 +1219,7 @@ void VisualScriptBuiltinFunc::_bind_methods() {
 	BIND_ENUM_CONSTANT(TEXT_PRINT);
 	BIND_ENUM_CONSTANT(TEXT_PRINTERR);
 	BIND_ENUM_CONSTANT(TEXT_PRINTRAW);
+	BIND_ENUM_CONSTANT(TEXT_PRINT_VERBOSE);
 	BIND_ENUM_CONSTANT(VAR_TO_STR);
 	BIND_ENUM_CONSTANT(STR_TO_VAR);
 	BIND_ENUM_CONSTANT(VAR_TO_BYTES);
@@ -1300,6 +1312,7 @@ void register_visual_script_builtin_func_node() {
 	VisualScriptLanguage::singleton->add_register_func("functions/built_in/print", create_builtin_func_node<VisualScriptBuiltinFunc::TEXT_PRINT>);
 	VisualScriptLanguage::singleton->add_register_func("functions/built_in/printerr", create_builtin_func_node<VisualScriptBuiltinFunc::TEXT_PRINTERR>);
 	VisualScriptLanguage::singleton->add_register_func("functions/built_in/printraw", create_builtin_func_node<VisualScriptBuiltinFunc::TEXT_PRINTRAW>);
+	VisualScriptLanguage::singleton->add_register_func("functions/built_in/print_verbose", create_builtin_func_node<VisualScriptBuiltinFunc::TEXT_PRINT_VERBOSE>);
 	VisualScriptLanguage::singleton->add_register_func("functions/built_in/var2str", create_builtin_func_node<VisualScriptBuiltinFunc::VAR_TO_STR>);
 	VisualScriptLanguage::singleton->add_register_func("functions/built_in/str2var", create_builtin_func_node<VisualScriptBuiltinFunc::STR_TO_VAR>);
 	VisualScriptLanguage::singleton->add_register_func("functions/built_in/var2bytes", create_builtin_func_node<VisualScriptBuiltinFunc::VAR_TO_BYTES>);

+ 1 - 0
modules/visual_script/visual_script_builtin_funcs.h

@@ -94,6 +94,7 @@ public:
 		TEXT_PRINT,
 		TEXT_PRINTERR,
 		TEXT_PRINTRAW,
+		TEXT_PRINT_VERBOSE,
 		VAR_TO_STR,
 		STR_TO_VAR,
 		VAR_TO_BYTES,