summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@epfl.ch>2010-04-12 15:12:56 +0000
committerLukas Rytz <lukas.rytz@epfl.ch>2010-04-12 15:12:56 +0000
commitb53884e8ad3ba290f17878be46ae24f8566a2e44 (patch)
tree9ac7673e9e36d26dbe5978df3167a78e6912a145 /src/compiler
parentec5a4e8f47db7dacad2cafd387d4bae7e8e486aa (diff)
downloadscala-b53884e8ad3ba290f17878be46ae24f8566a2e44.tar.gz
scala-b53884e8ad3ba290f17878be46ae24f8566a2e44.tar.bz2
scala-b53884e8ad3ba290f17878be46ae24f8566a2e44.zip
fixed LOAD_MODULE for companions of primitive t...
fixed LOAD_MODULE for companions of primitive types. fixes .net build. review by dragos.
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/scala/tools/nsc/backend/icode/GenICode.scala37
1 files changed, 21 insertions, 16 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/icode/GenICode.scala b/src/compiler/scala/tools/nsc/backend/icode/GenICode.scala
index a3b81862e6..b357dff25a 100644
--- a/src/compiler/scala/tools/nsc/backend/icode/GenICode.scala
+++ b/src/compiler/scala/tools/nsc/backend/icode/GenICode.scala
@@ -784,7 +784,7 @@ abstract class GenICode extends SubComponent {
if (settings.debug.value)
log("LOAD_MODULE from 'This': " + tree.symbol);
assert(!tree.symbol.isPackageClass, "Cannot use package as value: " + tree)
- ctx.bb.emit(LOAD_MODULE(tree.symbol), tree.pos)
+ genLoadModule(ctx, tree.symbol, tree.pos)
generatedType = REFERENCE(tree.symbol)
} else {
ctx.bb.emit(THIS(ctx.clazz.symbol), tree.pos)
@@ -803,21 +803,18 @@ abstract class GenICode extends SubComponent {
log("LOAD_MODULE from Select(<emptypackage>): " + tree.symbol);
}
assert(!tree.symbol.isPackageClass, "Cannot use package as value: " + tree)
- ctx.bb.emit(LOAD_MODULE(tree.symbol), tree.pos)
+ genLoadModule(ctx, tree.symbol, tree.pos)
ctx
case Select(qualifier, selector) =>
- var sym = tree.symbol
+ val sym = tree.symbol
generatedType = toTypeKind(sym.info)
if (sym.isModule) {
if (settings.debug.value)
- log("LOAD_MODULE from Select(qualifier, selector): " + sym);
+ log("LOAD_MODULE from Select(qualifier, selector): " + sym)
assert(!tree.symbol.isPackageClass, "Cannot use package as value: " + tree)
- if (definitions.primitiveCompanions(sym))
- ctx.bb.emit(LOAD_MODULE(definitions.getModule("scala.runtime." + sym.name)))
- else
- ctx.bb.emit(LOAD_MODULE(sym), tree.pos);
+ genLoadModule(ctx, sym, tree.pos)
ctx
} else if (sym.isStaticMember) {
ctx.bb.emit(LOAD_FIELD(sym, true), tree.pos)
@@ -829,21 +826,22 @@ abstract class GenICode extends SubComponent {
}
case Ident(name) =>
- if (!tree.symbol.isPackage) {
- if (tree.symbol.isModule) {
+ val sym = tree.symbol
+ if (!sym.isPackage) {
+ if (sym.isModule) {
if (settings.debug.value)
- log("LOAD_MODULE from Ident(name): " + tree.symbol);
- assert(!tree.symbol.isPackageClass, "Cannot use package as value: " + tree)
- ctx.bb.emit(LOAD_MODULE(tree.symbol), tree.pos)
- generatedType = toTypeKind(tree.symbol.info)
+ log("LOAD_MODULE from Ident(name): " + sym)
+ assert(!sym.isPackageClass, "Cannot use package as value: " + tree)
+ genLoadModule(ctx, sym, tree.pos)
+ generatedType = toTypeKind(sym.info)
} else {
try {
- val Some(l) = ctx.method.lookupLocal(tree.symbol)
+ val Some(l) = ctx.method.lookupLocal(sym)
ctx.bb.emit(LOAD_LOCAL(l), tree.pos)
generatedType = l.kind
} catch {
case ex: MatchError =>
- abort("symbol " + tree.symbol + " does not exist in " + ctx.method)
+ abort("symbol " + sym + " does not exist in " + ctx.method)
}
}
}
@@ -1037,6 +1035,13 @@ abstract class GenICode extends SubComponent {
ctx1
}
+ private def genLoadModule(ctx: Context, sym: Symbol, pos: Position) {
+ if (definitions.primitiveCompanions(sym))
+ ctx.bb.emit(LOAD_MODULE(definitions.getModule("scala.runtime." + sym.name)), pos)
+ else
+ ctx.bb.emit(LOAD_MODULE(sym), pos)
+ }
+
def genConversion(from: TypeKind, to: TypeKind, ctx: Context, cast: Boolean) = {
if (cast)
ctx.bb.emit(CALL_PRIMITIVE(Conversion(from, to)))