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>
* net/loveruby/cflat/compiler/Options.java: allow --verbose-asm

View File

@ -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
}

View File

@ -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).");

View File

@ -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) {