diff options
Diffstat (limited to 'lib/compilers/argument-parsers.js')
-rw-r--r-- | lib/compilers/argument-parsers.js | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/lib/compilers/argument-parsers.js b/lib/compilers/argument-parsers.js index caa1e4166..235d6b94a 100644 --- a/lib/compilers/argument-parsers.js +++ b/lib/compilers/argument-parsers.js @@ -199,6 +199,51 @@ export class ClangParser extends BaseParser { } } +export class LDCParser extends BaseParser { + static setCompilerSettingsFromOptions(compiler, options) { + if (BaseParser.hasSupport(options, '--fsave-optimization-record')) { + compiler.compiler.optArg = '--fsave-optimization-record'; + compiler.compiler.supportsOptOutput = true; + } + + if ( + BaseParser.hasSupport(options, '--print-before-all') && + BaseParser.hasSupport(options, '--print-after-all') + ) { + compiler.compiler.supportsLLVMOptPipelineView = true; + compiler.compiler.llvmOptArg = ['--print-before-all', '--print-after-all']; + compiler.compiler.llvmOptModuleScopeArg = []; + compiler.compiler.llvmOptNoDiscardValueNamesArg = []; + if (BaseParser.hasSupport(options, '--print-module-scope')) { + compiler.compiler.llvmOptModuleScopeArg = ['--print-module-scope']; + } + if (BaseParser.hasSupport(options, '--fno-discard-value-names')) { + compiler.compiler.llvmOptNoDiscardValueNamesArg = ['--fno-discard-value-names']; + } + } + + if (BaseParser.hasSupport(options, '--enable-color')) { + compiler.compiler.options += ' --enable-color'; + } + } + + static async parse(compiler) { + const options = await LDCParser.getOptions(compiler, '--help-hidden'); + this.setCompilerSettingsFromOptions(compiler, options); + return compiler; + } + + static async getOptions(compiler, helpArg, populate = true) { + const optionFinder = /^\s*(--?[\d+,<=>[\]a-z|-]*)\s*(.*)/i; + const result = await compiler.execCompilerCached(compiler.compiler.exe, helpArg.split(' ')); + const options = result.code === 0 ? BaseParser.parseLines(result.stdout + result.stderr, optionFinder) : {}; + if (populate) { + compiler.possibleArguments.populateOptions(options); + } + return options; + } +} + export class ErlangParser extends BaseParser { static async parse(compiler) { await ErlangParser.getOptions(compiler, '-help'); |