diff options
author | mihaylov <mihaylov@epfl.ch> | 2006-01-17 15:40:39 +0000 |
---|---|---|
committer | mihaylov <mihaylov@epfl.ch> | 2006-01-17 15:40:39 +0000 |
commit | d9ed34881086648aa67c9fe6d47f8fa8b2870123 (patch) | |
tree | 591f3e840a80205863e7f711d98ade8b19a36e60 /src/compiler | |
parent | 1ae15a9a30c89379cc919ef43faf9736f3ec2ffc (diff) | |
download | scala-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.scala | 20 |
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, |