diff --git a/ChangeLog b/ChangeLog index 7cde69e..41408e6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Tue May 26 12:21:18 2009 Minero Aoki + + * net/loveruby/cflat/compiler/Options.java: check unknown file + types. + + * net/loveruby/cflat/compiler/SourceFile.java: new method + #isKnownFileType. + Tue May 26 11:59:08 2009 Minero Aoki * net/loveruby/cflat/compiler/Options.java: allow --verbose-asm diff --git a/net/loveruby/cflat/compiler/Compiler.java b/net/loveruby/cflat/compiler/Compiler.java index 81c4d9d..f1149ab 100644 --- a/net/loveruby/cflat/compiler/Compiler.java +++ b/net/loveruby/cflat/compiler/Compiler.java @@ -49,7 +49,7 @@ public class Compiler { } catch (OptionParseError err) { errorHandler.error(err.getMessage()); - errorHandler.error("Try cbc --help for option usage"); + errorHandler.error("Try \"cbc --help\" for usage"); System.exit(1); return null; // never reach } diff --git a/net/loveruby/cflat/compiler/Options.java b/net/loveruby/cflat/compiler/Options.java index 120638a..58cd3a9 100644 --- a/net/loveruby/cflat/compiler/Options.java +++ b/net/loveruby/cflat/compiler/Options.java @@ -176,8 +176,8 @@ class Options { } genOptions.setOptimizationLevel(type.equals("0") ? 0 : 1); } - else if (arg.equals("--verbose-asm") - || arg.equals("-fverbose-asm")) { + else if (arg.equals("-fverbose-asm") + || arg.equals("--verbose-asm")) { genOptions.generateVerboseAsm(); } else if (arg.startsWith("-Wa,")) { @@ -263,6 +263,11 @@ class Options { if (sourceFiles.isEmpty()) { parseError("no input file"); } + for (SourceFile src : sourceFiles) { + if (! src.isKnownFileType()) { + parseError("unknown file type: " + src.path()); + } + } if (outputFileName != null && sourceFiles.size() > 1 && ! isLinkRequired()) { @@ -334,6 +339,12 @@ class Options { out.println(" --version Shows compiler version and quit."); out.println(" --help Prints this message and quit."); out.println(""); + out.println("Optimization Options:"); + out.println(" -O Enables optimization."); + out.println(" -O1, -O2, -O3 Equivalent to -O."); + out.println(" -Os Equivalent to -O."); + out.println(" -O0 Disables optimization (default)."); + out.println(""); out.println("Parser Options:"); out.println(" -I PATH Adds PATH as import file directory."); out.println(" --debug-parser Dumps parsing process."); @@ -347,7 +358,7 @@ class Options { out.println(" -fpic Equivalent to -fPIC."); out.println(" -fPIE Generates PIE assembly."); out.println(" -fpie Equivalent to -fPIE."); - out.println(" --verbose-asm Generate assembly with verbose comments."); + out.println(" -fverbose-asm Generate assembly with verbose comments."); out.println(""); out.println("Assembler Options:"); out.println(" -Wa,OPT Passes OPT to the assembler (as)."); diff --git a/net/loveruby/cflat/compiler/SourceFile.java b/net/loveruby/cflat/compiler/SourceFile.java index f2bf835..c49fbb4 100644 --- a/net/loveruby/cflat/compiler/SourceFile.java +++ b/net/loveruby/cflat/compiler/SourceFile.java @@ -2,7 +2,23 @@ package net.loveruby.cflat.compiler; import java.io.File; class SourceFile implements LdArg { - private String originalName; + static final String EXT_CFLAT_SOURCE = ".cb"; + static final String EXT_ASSEMBLY_SOURCE = ".s"; + static final String EXT_OBJECT_FILE = ".o"; + static final String EXT_STATIC_LIBRARY = ".a"; + static final String EXT_SHARED_LIBRARY = ".so"; + static final String EXT_EXECUTABLE_FILE = ""; + + static final String[] KNOWN_EXTENSIONS = { + EXT_CFLAT_SOURCE, + EXT_ASSEMBLY_SOURCE, + EXT_OBJECT_FILE, + EXT_STATIC_LIBRARY, + EXT_SHARED_LIBRARY, + EXT_EXECUTABLE_FILE + }; + + private final String originalName; private String currentName; SourceFile(String name) { @@ -30,36 +46,44 @@ class SourceFile implements LdArg { this.currentName = name; } + boolean isKnownFileType() { + String ext = extName(originalName); + for (String e : KNOWN_EXTENSIONS) { + if (e.equals(ext)) return true; + } + return false; + } + boolean isCflatSource() { - return extName(currentName).equals(".cb"); + return extName(currentName).equals(EXT_CFLAT_SOURCE); } boolean isAssemblySource() { - return extName(currentName).equals(".s"); + return extName(currentName).equals(EXT_ASSEMBLY_SOURCE); } boolean isObjectFile() { - return extName(currentName).equals(".o"); + return extName(currentName).equals(EXT_OBJECT_FILE); } boolean isSharedLibrary() { - return extName(currentName).equals(".so"); + return extName(currentName).equals(EXT_SHARED_LIBRARY); } boolean isStaticLibrary() { - return extName(currentName).equals(".a"); + return extName(currentName).equals(EXT_STATIC_LIBRARY); } boolean isExecutable() { - return extName(currentName).equals(""); + return extName(currentName).equals(EXT_EXECUTABLE_FILE); } String asmFileName() { - return replaceExt(".s"); + return replaceExt(EXT_ASSEMBLY_SOURCE); } String objFileName() { - return replaceExt(".o"); + return replaceExt(EXT_OBJECT_FILE); } String linkedFileName(String newExt) {