diff options
author | chiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3> | 2003-11-27 05:33:16 +0000 |
---|---|---|
committer | chiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3> | 2003-11-27 05:33:16 +0000 |
commit | cdca9771599b4c3337aaf42cf7460a27dc1719d5 (patch) | |
tree | 9617dfa2aa53d78c6bd2d3cf4428137d355faa76 /src/main/javassist/compiler/Javac.java | |
parent | ced4ae1f0e2130b36cb51faf6345d5b8e036585e (diff) | |
download | javassist-cdca9771599b4c3337aaf42cf7460a27dc1719d5.tar.gz javassist-cdca9771599b4c3337aaf42cf7460a27dc1719d5.zip |
I implemented a type checker for better code generation.
git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@55 30ef5769-5b8d-40dd-aea6-55b5d6557bb3
Diffstat (limited to 'src/main/javassist/compiler/Javac.java')
-rw-r--r-- | src/main/javassist/compiler/Javac.java | 50 |
1 files changed, 39 insertions, 11 deletions
diff --git a/src/main/javassist/compiler/Javac.java b/src/main/javassist/compiler/Javac.java index 44c3ff11..2436b4bf 100644 --- a/src/main/javassist/compiler/Javac.java +++ b/src/main/javassist/compiler/Javac.java @@ -117,9 +117,9 @@ public class Javac { { CtFieldWithInit f; Declarator d = fd.getDeclarator(); - f = new CtFieldWithInit(gen.lookupClass(d), d.getVariable().get(), - gen.getThisClass()); - f.setModifiers(MemberCodeGen.getModifiers(fd.getModifiers())); + f = new CtFieldWithInit(gen.resolver.lookupClass(d), + d.getVariable().get(), gen.getThisClass()); + f.setModifiers(MemberResolver.getModifiers(fd.getModifiers())); if (fd.getInit() != null) f.setInit(fd.getInit()); @@ -129,7 +129,7 @@ public class Javac { private CtMember compileMethod(Parser p, MethodDecl md) throws CompileError { - int mod = MemberCodeGen.getModifiers(md.getModifiers()); + int mod = MemberResolver.getModifiers(md.getModifiers()); CtClass[] plist = gen.makeParamList(md); CtClass[] tlist = gen.makeThrowsList(md); recordParams(plist, Modifier.isStatic(mod)); @@ -147,7 +147,7 @@ public class Javac { } else { Declarator r = md.getReturn(); - CtClass rtype = gen.lookupClass(r); + CtClass rtype = gen.resolver.lookupClass(r); recordReturnType(rtype, false); CtMethod method = new CtMethod(rtype, r.getVariable().get(), plist, gen.getThisClass()); @@ -344,10 +344,22 @@ public class Javac { if (texpr != null) expr = Expr.make('.', texpr, expr); - expr = Expr.make(TokenId.CALL, expr, args); - expr.accept(gen); + expr = CallExpr.makeCall(expr, args); + gen.compileExpr(expr); gen.addNullIfVoid(); } + + public void setReturnType(JvstTypeChecker check, ASTList args) + throws CompileError + { + ASTree expr = new Member(m); + if (texpr != null) + expr = Expr.make('.', texpr, expr); + + expr = CallExpr.makeCall(expr, args); + expr.accept(check); + check.addNullIfVoid(); + } }; gen.setProceedHandler(h, proceedName); @@ -374,10 +386,20 @@ public class Javac { { Expr expr = Expr.make(TokenId.MEMBER, new Symbol(c), new Member(m)); - expr = Expr.make(TokenId.CALL, expr, args); - expr.accept(gen); + expr = CallExpr.makeCall(expr, args); + gen.compileExpr(expr); gen.addNullIfVoid(); } + + public void setReturnType(JvstTypeChecker check, ASTList args) + throws CompileError + { + Expr expr = Expr.make(TokenId.MEMBER, + new Symbol(c), new Member(m)); + expr = CallExpr.makeCall(expr, args); + expr.accept(check); + check.addNullIfVoid(); + } }; gen.setProceedHandler(h, proceedName); @@ -408,9 +430,15 @@ public class Javac { public void doit(JvstCodeGen gen, Bytecode b, ASTList args) throws CompileError { - gen.compileInvokeSpecial(texpr, - cname, method, desc, args); + gen.compileInvokeSpecial(texpr, cname, method, desc, args); } + + public void setReturnType(JvstTypeChecker c, ASTList args) + throws CompileError + { + c.compileInvokeSpecial(texpr, cname, method, desc, args); + } + }; gen.setProceedHandler(h, proceedName); |