From 7ad066fc6f60620b9c742d6ecf823aae2eb73e02 Mon Sep 17 00:00:00 2001 From: Piotr Fusik Date: Wed, 16 Oct 2019 09:24:36 +0200 Subject: [PATCH] Remove the object file on error even if not written. Close #4. --- source/app.d | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/source/app.d b/source/app.d index 38175ca..ece6067 100644 --- a/source/app.d +++ b/source/app.d @@ -1080,24 +1080,22 @@ File openInputFile(string filename) { } } -File openOutputFile(char letter, string defaultExt) { - string filename = optionParameters[letter - 'a']; - if (filename is null) - filename = sourceFilename.setExtension(defaultExt); - if (letter == 'o') - objectFilename = filename; +File openOutputFile(string filename, string msg) { try { return File(filename, "wb"); } catch (Exception e) { throw new AssemblyError(e.msg); } + if (!getOption('q')) + writeln(msg); } void ensureListingFileOpen(char letter, string msg) { if (!listingStream.isOpen) { - listingStream = openOutputFile(letter, "lst"); - if (!getOption('q')) - write(msg); + string filename = optionParameters[letter - 'a']; + if (filename is null) + filename = sourceFilename.setExtension("lst"); + listingStream = openOutputFile(filename, msg); listingStream.writeln(TITLE); } } @@ -1124,7 +1122,7 @@ void listLine() { return; if (getOption('i') && includeLevel > 0) return; - ensureListingFileOpen('l', "Writing listing file...\n"); + ensureListingFileOpen('l', "Writing listing file..."); if (currentFilename != lastListedFilename) { listingStream.writeln("Source: ", currentFilename); lastListedFilename = currentFilename; @@ -1156,7 +1154,7 @@ void listCommentLine() { void listLabelTable() { if (optionParameters['t' - 'a'] !is null && listingStream.isOpen) listingStream.close(); - ensureListingFileOpen('t', "Writing label table...\n"); + ensureListingFileOpen('t', "Writing label table..."); listingStream.writeln("Label table:"); foreach (string name; sort(labelTable.keys)) { Label l = labelTable[name]; @@ -1182,11 +1180,8 @@ void objectByte(ubyte b) { } else { assert(pass2); if (!optionObject) return; - if (!objectStream.isOpen) { - objectStream = openOutputFile('o', "obx"); - if (!getOption('q')) - writeln("Writing object file..."); - } + if (!objectStream.isOpen) + objectStream = openOutputFile(objectFilename, "Writing object file..."); try { objectStream.write(cast(char) b); } catch (Exception e) { @@ -2955,6 +2950,9 @@ int main(string[] args) { `); return exitCode; } + objectFilename = optionParameters['o' - 'a']; + if (objectFilename is null) + objectFilename = sourceFilename.setExtension("obx"); try { assemblyPass(); pass2 = true; @@ -2964,10 +2962,8 @@ int main(string[] args) { } catch (AssemblyError e) { warning(e.msg, true); exitCode = 2; - if (objectStream.isOpen) { - objectStream.close(); - remove(objectFilename); - } + objectStream.close(); + remove(objectFilename); } listingStream.close(); objectStream.close();