mirror of https://github.com/aamine/cbc
* net/loveruby/cflat/compiler/Compiler.java: call JumpResolver at last.
* net/loveruby/cflat/compiler/TypeChecker.java: TypeChecker has required ReturnNode.function, provide "current function" by myself. git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4131 1b9489fe-b721-0410-924e-b54b9192deb8
This commit is contained in:
parent
043859df0b
commit
33dcef983b
|
|
@ -1,3 +1,12 @@
|
|||
Mon Apr 6 07:04:30 2009 Minero Aoki <aamine@loveruby.net>
|
||||
|
||||
* net/loveruby/cflat/compiler/Compiler.java: call JumpResolver at
|
||||
last.
|
||||
|
||||
* net/loveruby/cflat/compiler/TypeChecker.java: TypeChecker has
|
||||
required ReturnNode.function, provide "current function" by
|
||||
myself.
|
||||
|
||||
Sat Apr 4 23:47:02 2009 Minero Aoki <aamine@loveruby.net>
|
||||
|
||||
* net/loveruby/cflat/ast/ASTVisitor.java: #visit returns a node
|
||||
|
|
|
|||
|
|
@ -113,6 +113,7 @@ public class Compiler {
|
|||
ast.dump();
|
||||
return;
|
||||
}
|
||||
new JumpResolver(errorHandler).resolve(ast);
|
||||
String asm = generateAssembly(ast, opts);
|
||||
if (opts.mode() == CompilerMode.DumpAsm) {
|
||||
System.out.println(asm);
|
||||
|
|
@ -171,7 +172,6 @@ public class Compiler {
|
|||
|
||||
protected void semanticAnalysis(AST ast, Options opts)
|
||||
throws SemanticException {
|
||||
new JumpResolver(errorHandler).resolve(ast);
|
||||
new LocalResolver(errorHandler).resolve(ast);
|
||||
new TypeResolver(errorHandler).resolve(ast);
|
||||
ast.typeTable().semanticCheck(errorHandler);
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import java.util.*;
|
|||
class TypeChecker implements ASTVisitor {
|
||||
protected TypeTable typeTable;
|
||||
protected ErrorHandler errorHandler;
|
||||
private DefinedFunction currentFunction;
|
||||
|
||||
// #@@range/ctor{
|
||||
public TypeChecker(ErrorHandler errorHandler) {
|
||||
|
|
@ -30,6 +31,7 @@ class TypeChecker implements ASTVisitor {
|
|||
// #@@}
|
||||
|
||||
public DefinedFunction visit(DefinedFunction f) {
|
||||
currentFunction = f;
|
||||
checkReturnType(f);
|
||||
checkParamTypes(f);
|
||||
checkStmt(f.body());
|
||||
|
|
@ -183,7 +185,7 @@ class TypeChecker implements ASTVisitor {
|
|||
if (node.expr() != null) {
|
||||
node.setExpr(checkExpr(node.expr()));
|
||||
}
|
||||
if (node.function().isVoid()) {
|
||||
if (currentFunction.isVoid()) {
|
||||
if (node.expr() != null) {
|
||||
error(node, "returning value from void function");
|
||||
}
|
||||
|
|
@ -197,7 +199,7 @@ class TypeChecker implements ASTVisitor {
|
|||
error(node, "returning void");
|
||||
return null;
|
||||
}
|
||||
node.setExpr(implicitCast(node.function().returnType(),
|
||||
node.setExpr(implicitCast(currentFunction.returnType(),
|
||||
node.expr()));
|
||||
}
|
||||
return null;
|
||||
|
|
|
|||
Loading…
Reference in New Issue