aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/javassist/compiler/Javac.java
diff options
context:
space:
mode:
authorchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>2003-11-27 05:33:16 +0000
committerchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>2003-11-27 05:33:16 +0000
commitcdca9771599b4c3337aaf42cf7460a27dc1719d5 (patch)
tree9617dfa2aa53d78c6bd2d3cf4428137d355faa76 /src/main/javassist/compiler/Javac.java
parentced4ae1f0e2130b36cb51faf6345d5b8e036585e (diff)
downloadjavassist-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.java50
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);