aboutsummaryrefslogtreecommitdiff
path: root/lib/compilers/argument-parsers.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/compilers/argument-parsers.js')
-rw-r--r--lib/compilers/argument-parsers.js45
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');