Skip to content

Commit 12e0af7

Browse files
authored
make params an out parameter (dlang#21430)
1 parent 0a2a8dd commit 12e0af7

3 files changed

Lines changed: 30 additions & 16 deletions

File tree

compiler/src/dmd/globals.d

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -392,13 +392,10 @@ extern (C++) struct Global
392392
errorSinkNull = new ErrorSinkNull;
393393

394394
this.fileManager = new FileManager();
395+
395396
version (MARS)
396397
{
397398
compileEnv.vendor = "Digital Mars D";
398-
399-
// -color=auto is the default value
400-
import dmd.console : detectTerminal, detectColorPreference;
401-
params.v.color = detectTerminal() && detectColorPreference();
402399
}
403400
else version (IN_GCC)
404401
{
@@ -407,12 +404,10 @@ extern (C++) struct Global
407404
else version (IN_LLVM)
408405
{
409406
compileEnv.vendor = "LDC";
410-
411-
import dmd.console : detectTerminal;
412-
params.v.color = detectTerminal();
413407
}
408+
else
409+
static assert(0, "unknown vendor");
414410

415-
params.v.errorPrintMode = ErrorPrintMode.printErrorContext; // Enable error context globally by default
416411
compileEnv.versionNumber = parseVersionNumber(versionString());
417412

418413
/* Initialize date, time, and timestamp

compiler/src/dmd/main.d

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -164,11 +164,12 @@ private:
164164
* Params:
165165
* argc = Number of arguments passed via command line
166166
* argv = Array of string arguments passed via command line
167+
* params = set based on argc, argv
167168
*
168169
* Returns:
169170
* Application return code
170171
*/
171-
private int tryMain(size_t argc, const(char)** argv, ref Param params)
172+
private int tryMain(size_t argc, const(char)** argv, out Param params)
172173
{
173174
import dmd.common.charactertables;
174175
import dmd.sarif;
@@ -195,9 +196,9 @@ private int tryMain(size_t argc, const(char)** argv, ref Param params)
195196
if (parseCommandlineAndConfig(argc, argv, params, files))
196197
return EXIT_FAILURE;
197198

198-
global.compileEnv.previewIn = global.params.previewIn;
199-
global.compileEnv.transitionIn = global.params.v.vin;
200-
global.compileEnv.ddocOutput = global.params.ddoc.doOutput;
199+
global.compileEnv.previewIn = params.previewIn;
200+
global.compileEnv.transitionIn = params.v.vin;
201+
global.compileEnv.ddocOutput = params.ddoc.doOutput;
201202

202203
final switch(global.params.cIdentifierTable)
203204
{
@@ -880,7 +881,7 @@ private int tryMain(size_t argc, const(char)** argv, ref Param params)
880881
* files = files from argv
881882
* Returns: true on failure
882883
*/
883-
bool parseCommandlineAndConfig(size_t argc, const(char)** argv, ref Param params, ref Strings files)
884+
bool parseCommandlineAndConfig(size_t argc, const(char)** argv, out Param params, ref Strings files)
884885
{
885886
// Detect malformed input
886887
static bool badArgs()
@@ -903,7 +904,7 @@ bool parseCommandlineAndConfig(size_t argc, const(char)** argv, ref Param params
903904
error(Loc.initial, "cannot open response file '%s'", missingFile);
904905
//for (size_t i = 0; i < arguments.length; ++i) printf("arguments[%d] = '%s'\n", i, arguments[i]);
905906
// Set default values
906-
params.argv0 = arguments[0].toDString;
907+
auto argv0 = arguments[0].toDString;
907908

908909
version (Windows)
909910
enum iniName = "sc.ini";
@@ -922,7 +923,7 @@ bool parseCommandlineAndConfig(size_t argc, const(char)** argv, ref Param params
922923
}
923924
else
924925
{
925-
global.inifilename = findConfFile(params.argv0, iniName);
926+
global.inifilename = findConfFile(argv0, iniName);
926927
}
927928
// Read the configuration file
928929
OutBuffer inifileBuffer;

compiler/src/dmd/mars.d

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -489,11 +489,28 @@ extern(C) void flushMixins()
489489
* true if errors in command line
490490
*/
491491

492-
bool parseCommandLine(const ref Strings arguments, const size_t argc, ref Param params, ref Strings files,
492+
bool parseCommandLine(const ref Strings arguments, const size_t argc, out Param params, ref Strings files,
493493
ref Target target, ref DMDparams driverParams, ErrorSink eSink)
494494
{
495495
bool errors;
496496

497+
// set defaults for params
498+
params.v.errorPrintMode = ErrorPrintMode.printErrorContext;
499+
version (IN_GCC)
500+
{
501+
}
502+
else version (IN_LLVM)
503+
{
504+
import dmd.console : detectTerminal;
505+
params.v.color = detectTerminal();
506+
}
507+
else // MARS
508+
{
509+
// -color=auto is the default value
510+
import dmd.console : detectTerminal, detectColorPreference;
511+
params.v.color = detectTerminal() && detectColorPreference();
512+
}
513+
497514
void error(Args ...)(const(char)* format, Args args)
498515
{
499516
eSink.error(Loc.initial, format, args);
@@ -624,6 +641,7 @@ bool parseCommandLine(const ref Strings arguments, const size_t argc, ref Param
624641

625642
files.reserve(arguments.length - 1);
626643

644+
params.argv0 = toDString(arguments[0]);
627645
for (size_t i = 1; i < arguments.length; i++)
628646
{
629647
const(char)* p = arguments[i];

0 commit comments

Comments
 (0)