|  | 
| 52 | 52 |  *	"width" | 
| 53 | 53 |  *	"digits" | 
| 54 | 54 |  *	"echo" | 
|  | 55 | + *	"quiet" | 
| 55 | 56 |  *	"verbose" | 
| 56 | 57 |  *	"keep.source" | 
| 57 | 58 |  *	"keep.source.pkgs" | 
| @@ -308,9 +309,9 @@ attribute_hidden void InitOptions(void) | 
| 308 | 309 | 
 | 
| 309 | 310 |     /* options set here should be included into mandatory[] in do_options */ | 
| 310 | 311 | #ifdef HAVE_RL_COMPLETION_MATCHES | 
| 311 |  | -    PROTECT(v = val = allocList(30)); | 
|  | 312 | +    PROTECT(v = val = allocList(31)); | 
| 312 | 313 | #else | 
| 313 |  | -    PROTECT(v = val = allocList(29)); | 
|  | 314 | +    PROTECT(v = val = allocList(30)); | 
| 314 | 315 | #endif | 
| 315 | 316 | 
 | 
| 316 | 317 |     SET_TAG(v, install("prompt")); | 
| @@ -341,6 +342,10 @@ attribute_hidden void InitOptions(void) | 
| 341 | 342 |     SETCAR(v, ScalarLogical(!R_NoEcho)); | 
| 342 | 343 |     v = CDR(v); | 
| 343 | 344 | 
 | 
|  | 345 | +    SET_TAG(v, install("quiet")); | 
|  | 346 | +    SETCAR(v, ScalarLogical(R_Quiet)); | 
|  | 347 | +    v = CDR(v); | 
|  | 348 | + | 
| 344 | 349 |     SET_TAG(v, install("verbose")); | 
| 345 | 350 |     SETCAR(v, ScalarLogical(R_Verbose)); | 
| 346 | 351 |     v = CDR(v); | 
| @@ -587,7 +592,7 @@ attribute_hidden SEXP do_options(SEXP call, SEXP op, SEXP args, SEXP rho) | 
| 587 | 592 | 		   at startup, because otherwise one could not reliably restore | 
| 588 | 593 | 		   previously saved options (see also PR#18372).*/ | 
| 589 | 594 | 		const char *mandatory[] = {"prompt", "continue", "expressions", | 
| 590 |  | -		  "width", "deparse.cutoff", "digits", "echo", "verbose", | 
|  | 595 | +		  "width", "deparse.cutoff", "digits", "echo", "quiet", "verbose", | 
| 591 | 596 | 		  "check.bounds", "keep.source", "keep.source.pkgs", | 
| 592 | 597 | 		  "keep.parse.data", "keep.parse.data.pkgs", "warning.length", | 
| 593 | 598 | 		  "nwarnings", "OutDec", "CBoundsCheck", | 
| @@ -891,10 +896,21 @@ attribute_hidden SEXP do_options(SEXP call, SEXP op, SEXP args, SEXP rho) | 
| 891 | 896 | 		SET_VECTOR_ELT(value, i, | 
| 892 | 897 | 			       SetOption(tag, ScalarLogical(strings_as_fact))); | 
| 893 | 898 | 	    } | 
|  | 899 | +	    else if (streql(CHAR(namei), "quiet")) { | 
|  | 900 | +		if (TYPEOF(argi) != LGLSXP || LENGTH(argi) != 1) | 
|  | 901 | +		    error(_("invalid value for '%s'"), CHAR(namei)); | 
|  | 902 | +		Rboolean k = asRbool(argi, call); | 
|  | 903 | +		if(k && R_Verbose) | 
|  | 904 | +		    error(_("cannot set both options 'quiet' and 'verbose' to TRUE")); | 
|  | 905 | +		R_Quiet = k; | 
|  | 906 | +		SET_VECTOR_ELT(value, i, SetOption(tag, ScalarLogical(k))); | 
|  | 907 | +	    } | 
| 894 | 908 | 	    else if (streql(CHAR(namei), "verbose")) { | 
| 895 | 909 | 		if (TYPEOF(argi) != LGLSXP || LENGTH(argi) != 1) | 
| 896 | 910 | 		    error(_("invalid value for '%s'"), CHAR(namei)); | 
| 897 | 911 | 		Rboolean k = asRbool(argi, call); | 
|  | 912 | +		if(k && R_Quiet) | 
|  | 913 | +		    error(_("cannot set both options 'quiet' and 'verbose' to TRUE")); | 
| 898 | 914 | 		R_Verbose = k; | 
| 899 | 915 | 		SET_VECTOR_ELT(value, i, SetOption(tag, ScalarLogical(k))); | 
| 900 | 916 | 	    } | 
|  | 
0 commit comments