r4967@macbookpro: aamine | 2009-05-26 12:21:40 +0900

* net/loveruby/cflat/compiler/Options.java: check unknown file types.
 * net/loveruby/cflat/compiler/SourceFile.java: new method #isKnownFileType.
 


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4255 1b9489fe-b721-0410-924e-b54b9192deb8
This commit is contained in:
Minero Aoki 2009-05-26 04:24:42 +00:00
parent e6b6f20d24
commit 7ce8034b0f
4 changed files with 56 additions and 13 deletions

View File

@ -1,3 +1,11 @@
Tue May 26 12:21:18 2009 Minero Aoki <aamine@loveruby.net>
* 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 <aamine@loveruby.net> Tue May 26 11:59:08 2009 Minero Aoki <aamine@loveruby.net>
* net/loveruby/cflat/compiler/Options.java: allow --verbose-asm * net/loveruby/cflat/compiler/Options.java: allow --verbose-asm

View File

@ -49,7 +49,7 @@ public class Compiler {
} }
catch (OptionParseError err) { catch (OptionParseError err) {
errorHandler.error(err.getMessage()); errorHandler.error(err.getMessage());
errorHandler.error("Try cbc --help for option usage"); errorHandler.error("Try \"cbc --help\" for usage");
System.exit(1); System.exit(1);
return null; // never reach return null; // never reach
} }

View File

@ -176,8 +176,8 @@ class Options {
} }
genOptions.setOptimizationLevel(type.equals("0") ? 0 : 1); genOptions.setOptimizationLevel(type.equals("0") ? 0 : 1);
} }
else if (arg.equals("--verbose-asm") else if (arg.equals("-fverbose-asm")
|| arg.equals("-fverbose-asm")) { || arg.equals("--verbose-asm")) {
genOptions.generateVerboseAsm(); genOptions.generateVerboseAsm();
} }
else if (arg.startsWith("-Wa,")) { else if (arg.startsWith("-Wa,")) {
@ -263,6 +263,11 @@ class Options {
if (sourceFiles.isEmpty()) { if (sourceFiles.isEmpty()) {
parseError("no input file"); parseError("no input file");
} }
for (SourceFile src : sourceFiles) {
if (! src.isKnownFileType()) {
parseError("unknown file type: " + src.path());
}
}
if (outputFileName != null if (outputFileName != null
&& sourceFiles.size() > 1 && sourceFiles.size() > 1
&& ! isLinkRequired()) { && ! isLinkRequired()) {
@ -334,6 +339,12 @@ class Options {
out.println(" --version Shows compiler version and quit."); out.println(" --version Shows compiler version and quit.");
out.println(" --help Prints this message and quit."); out.println(" --help Prints this message and quit.");
out.println(""); 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("Parser Options:");
out.println(" -I PATH Adds PATH as import file directory."); out.println(" -I PATH Adds PATH as import file directory.");
out.println(" --debug-parser Dumps parsing process."); out.println(" --debug-parser Dumps parsing process.");
@ -347,7 +358,7 @@ class Options {
out.println(" -fpic Equivalent to -fPIC."); out.println(" -fpic Equivalent to -fPIC.");
out.println(" -fPIE Generates PIE assembly."); out.println(" -fPIE Generates PIE assembly.");
out.println(" -fpie Equivalent to -fPIE."); 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("");
out.println("Assembler Options:"); out.println("Assembler Options:");
out.println(" -Wa,OPT Passes OPT to the assembler (as)."); out.println(" -Wa,OPT Passes OPT to the assembler (as).");

View File

@ -2,7 +2,23 @@ package net.loveruby.cflat.compiler;
import java.io.File; import java.io.File;
class SourceFile implements LdArg { 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; private String currentName;
SourceFile(String name) { SourceFile(String name) {
@ -30,36 +46,44 @@ class SourceFile implements LdArg {
this.currentName = name; this.currentName = name;
} }
boolean isKnownFileType() {
String ext = extName(originalName);
for (String e : KNOWN_EXTENSIONS) {
if (e.equals(ext)) return true;
}
return false;
}
boolean isCflatSource() { boolean isCflatSource() {
return extName(currentName).equals(".cb"); return extName(currentName).equals(EXT_CFLAT_SOURCE);
} }
boolean isAssemblySource() { boolean isAssemblySource() {
return extName(currentName).equals(".s"); return extName(currentName).equals(EXT_ASSEMBLY_SOURCE);
} }
boolean isObjectFile() { boolean isObjectFile() {
return extName(currentName).equals(".o"); return extName(currentName).equals(EXT_OBJECT_FILE);
} }
boolean isSharedLibrary() { boolean isSharedLibrary() {
return extName(currentName).equals(".so"); return extName(currentName).equals(EXT_SHARED_LIBRARY);
} }
boolean isStaticLibrary() { boolean isStaticLibrary() {
return extName(currentName).equals(".a"); return extName(currentName).equals(EXT_STATIC_LIBRARY);
} }
boolean isExecutable() { boolean isExecutable() {
return extName(currentName).equals(""); return extName(currentName).equals(EXT_EXECUTABLE_FILE);
} }
String asmFileName() { String asmFileName() {
return replaceExt(".s"); return replaceExt(EXT_ASSEMBLY_SOURCE);
} }
String objFileName() { String objFileName() {
return replaceExt(".o"); return replaceExt(EXT_OBJECT_FILE);
} }
String linkedFileName(String newExt) { String linkedFileName(String newExt) {