summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
authormihaylov <mihaylov@epfl.ch>2006-01-17 15:40:39 +0000
committermihaylov <mihaylov@epfl.ch>2006-01-17 15:40:39 +0000
commitd9ed34881086648aa67c9fe6d47f8fa8b2870123 (patch)
tree591f3e840a80205863e7f711d98ade8b19a36e60 /src/compiler
parent1ae15a9a30c89379cc919ef43faf9736f3ec2ffc (diff)
downloadscala-d9ed34881086648aa67c9fe6d47f8fa8b2870123.tar.gz
scala-d9ed34881086648aa67c9fe6d47f8fa8b2870123.tar.bz2
scala-d9ed34881086648aa67c9fe6d47f8fa8b2870123.zip
Generate static methods for inherited methods o...
Generate static methods for inherited methods of objects; solves the problem of inherited main method (bug contrib #107)
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
index 50a86fdf27..b01d39071d 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
@@ -284,12 +284,20 @@ abstract class GenJVM extends SubComponent {
"java.lang.Object",
JClass.NO_INTERFACES,
clasz.cunit.source.toString());
- for (val m <- clasz.methods; !(m.symbol.hasFlag(Flags.PRIVATE)) && !m.symbol.isClassConstructor && !isStaticSymbol(m.symbol) ) {
- val mirrorMethod = mirrorClass.addNewMethod(ACC_PUBLIC | ACC_FINAL | ACC_STATIC,
- javaName(m.symbol),
- javaType(toTypeKind(m.symbol.tpe.resultType)),
- javaTypes(m.params map (.kind)),
- javaNames(m.params map (.sym)));
+ for (val m <- clasz.symbol.tpe.nonPrivateMembers;
+ m.owner != definitions.ObjectClass && !m.hasFlag(Flags.PROTECTED) &&
+ m.isMethod && !m.isConstructor && !isStaticSymbol(m) )
+ {
+ val paramJavaTypes = m.tpe.paramTypes map (t => toTypeKind(t));
+ val paramNames: Array[String] = new Array[String](paramJavaTypes.length);
+ for (val i <- Iterator.range(0, paramJavaTypes.length))
+ paramNames(i) = "x_" + i;
+ val mirrorMethod = mirrorClass
+ .addNewMethod(ACC_PUBLIC | ACC_FINAL | ACC_STATIC,
+ javaName(m),
+ javaType(toTypeKind(m.tpe.resultType)),
+ javaTypes(paramJavaTypes),
+ paramNames);
val mirrorCode = mirrorMethod.getCode().asInstanceOf[JExtendedCode];
mirrorCode.emitGETSTATIC(moduleName,
MODULE_INSTANCE_NAME,