Skip to content

Commit

Permalink
Fix #5255 (#5700)
Browse files Browse the repository at this point in the history
  • Loading branch information
OfekShilon committed Nov 4, 2023
1 parent c122979 commit e7d266a
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 18 deletions.
16 changes: 8 additions & 8 deletions lib/base-compiler.ts
Expand Up @@ -633,7 +633,7 @@ export class BaseCompiler implements ICompiler {
}

getGccDumpFileName(outputFilename: string) {
return outputFilename.replace(path.extname(outputFilename), '.dump');
return utils.changeExtension(outputFilename, '.dump');
}

getGccDumpOptions(gccDumpOptions, outputFilename: string) {
Expand Down Expand Up @@ -1402,27 +1402,27 @@ export class BaseCompiler implements ICompiler {
}

getRustMacroExpansionOutputFilename(inputFilename) {
return inputFilename.replace(path.extname(inputFilename), '.expanded.rs');
return utils.changeExtension(inputFilename, '.expanded.rs');
}

getRustHirOutputFilename(inputFilename) {
return inputFilename.replace(path.extname(inputFilename), '.hir');
return utils.changeExtension(inputFilename, '.hir');
}

getRustMirOutputFilename(outputFilename) {
return outputFilename.replace(path.extname(outputFilename), '.mir');
return utils.changeExtension(outputFilename, '.mir');
}

getHaskellCoreOutputFilename(inputFilename) {
return inputFilename.replace(path.extname(inputFilename), '.dump-simpl');
return utils.changeExtension(inputFilename, '.dump-simpl');
}

getHaskellStgOutputFilename(inputFilename) {
return inputFilename.replace(path.extname(inputFilename), '.dump-stg-final');
return utils.changeExtension(inputFilename, '.dump-stg-final');
}

getHaskellCmmOutputFilename(inputFilename) {
return inputFilename.replace(path.extname(inputFilename), '.dump-cmm');
return utils.changeExtension(inputFilename, '.dump-cmm');
}

// Currently called for getting macro expansion and HIR.
Expand Down Expand Up @@ -1495,7 +1495,7 @@ export class BaseCompiler implements ICompiler {

getIrOutputFilename(inputFilename: string, filters: ParseFiltersAndOutputOptions): string {
// filters are passed because rust needs to know whether a binary is being produced or not
return inputFilename.replace(path.extname(inputFilename), '.ll');
return utils.changeExtension(inputFilename, '.ll');
}

getOutputFilename(dirPath: string, outputFilebase: string, key?: any): string {
Expand Down
3 changes: 2 additions & 1 deletion lib/compilers/cl430.ts
Expand Up @@ -25,6 +25,7 @@
import type {PreliminaryCompilerInfo} from '../../types/compiler.interfaces.js';
import type {ParseFiltersAndOutputOptions} from '../../types/features/filters.interfaces.js';
import {BaseCompiler} from '../base-compiler.js';
import {changeExtension} from '../utils.js';

export class CL430Compiler extends BaseCompiler {
static get key() {
Expand Down Expand Up @@ -52,7 +53,7 @@ export class CL430Compiler extends BaseCompiler {
'--keep_asm',
'--asm_extension=.s',
'--output_file',
this.filename(outputFilename.replace('.s', '')),
this.filename(changeExtension(outputFilename, '')),
];
}
}
7 changes: 1 addition & 6 deletions lib/compilers/clang.ts
Expand Up @@ -77,12 +77,7 @@ export class ClangCompiler extends BaseCompiler {

async addTimeTraceToResult(result: CompilationResult, dirPath: string, outputFilename: string) {
let timeTraceJson = '';
const outputExt = path.extname(outputFilename);
if (outputExt) {
timeTraceJson = outputFilename.replace(outputExt, '.json');
} else {
timeTraceJson += '.json';
}
timeTraceJson = utils.changeExtension(outputFilename, '.json');
const jsonFilepath = path.join(dirPath, timeTraceJson);
if (await utils.fileExists(jsonFilepath)) {
this.addArtifactToResult(
Expand Down
2 changes: 1 addition & 1 deletion lib/compilers/spirv.ts
Expand Up @@ -185,7 +185,7 @@ export class SPIRVCompiler extends BaseCompiler {

const index = newOptions.indexOf(outputFile);
if (index !== -1) {
newOptions[index] = inputFilename.replace(path.extname(inputFilename), '.ll');
newOptions[index] = utils.changeExtension(inputFilename, '.ll');
}

return super.runCompiler(compiler, newOptions, inputFilename, execOptions);
Expand Down
4 changes: 2 additions & 2 deletions lib/compilers/typescript-native.ts
Expand Up @@ -29,7 +29,7 @@ import type {PreliminaryCompilerInfo} from '../../types/compiler.interfaces.js';
import type {ParseFiltersAndOutputOptions} from '../../types/features/filters.interfaces.js';
import {LLVMIrBackendOptions} from '../../types/compilation/ir.interfaces.js';
import {BaseCompiler} from '../base-compiler.js';
import {asSafeVer} from '../utils.js';
import {asSafeVer, changeExtension} from '../utils.js';

import {TypeScriptNativeParser} from './argument-parsers.js';
import {ExecutableExecutionOptions} from '../../types/execution/execution.interfaces.js';
Expand Down Expand Up @@ -89,7 +89,7 @@ export class TypeScriptNativeCompiler extends BaseCompiler {
const outputFilename = this.getOutputFilename(path.dirname(inputFilename), this.outputFilebase);
// As per #4054, if we are asked for binary mode, the output will be in the .s file, no .ll will be emited
if (!filters.binary) {
return outputFilename.replace('.s', '.ll');
return changeExtension(outputFilename, '.ll');
}
return outputFilename;
}
Expand Down
6 changes: 6 additions & 0 deletions lib/utils.ts
Expand Up @@ -74,6 +74,12 @@ export function maskRootdir(filepath: string): string {
}
}

export function changeExtension(filename: string, newExtension: string): string {
const lastDot = filename.lastIndexOf('.');
if (lastDot === -1) return filename + newExtension;
return filename.substring(0, lastDot) + newExtension;
}

const ansiColoursRe = /\x1B\[[\d;]*[Km]/g;

function _parseOutputLine(line: string, inputFilename?: string, pathPrefix?: string) {
Expand Down

0 comments on commit e7d266a

Please sign in to comment.