summaryrefslogtreecommitdiff
path: root/sources/scalac/typechecker
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2003-11-07 12:11:21 +0000
committerMartin Odersky <odersky@gmail.com>2003-11-07 12:11:21 +0000
commit4bab79034d0056fb9982cbf31491880f961f8b53 (patch)
tree8cfdc73de23393c12c83098e57fcef34839afeb1 /sources/scalac/typechecker
parentfc7e1bce49d8fd89b25b70277237ed41fb24965d (diff)
downloadscala-4bab79034d0056fb9982cbf31491880f961f8b53.tar.gz
scala-4bab79034d0056fb9982cbf31491880f961f8b53.tar.bz2
scala-4bab79034d0056fb9982cbf31491880f961f8b53.zip
*** empty log message ***
Diffstat (limited to 'sources/scalac/typechecker')
-rw-r--r--sources/scalac/typechecker/Analyzer.java26
1 files changed, 15 insertions, 11 deletions
diff --git a/sources/scalac/typechecker/Analyzer.java b/sources/scalac/typechecker/Analyzer.java
index d4c0674a2e..64181df003 100644
--- a/sources/scalac/typechecker/Analyzer.java
+++ b/sources/scalac/typechecker/Analyzer.java
@@ -1400,15 +1400,19 @@ public class Analyzer extends Transformer implements Modifiers, Kinds {
break;
}
if ((mode & EXPRmode) != 0) {
- Symbol coerceMeth = tree.type.lookup(Names.coerce);
- if (coerceMeth != Symbol.NONE) {
- Type coerceType = checkAccessible(
- tree.pos, coerceMeth, tree.type.memberType(coerceMeth),
- tree);
- tree = make.Select(tree.pos, tree, Names.coerce)
- .setSymbol(coerceMeth)
- .setType(coerceType);
- return adapt(tree, mode, pt);
+ if (pt.symbol() == definitions.UNIT_CLASS) {
+ return gen.Block(new Tree[]{tree, gen.mkUnitLit(tree.pos)});
+ } else {
+ Symbol coerceMeth = tree.type.lookup(Names.coerce);
+ if (coerceMeth != Symbol.NONE) {
+ Type coerceType = checkAccessible(
+ tree.pos, coerceMeth, tree.type.memberType(coerceMeth),
+ tree);
+ tree = make.Select(tree.pos, tree, Names.coerce)
+ .setSymbol(coerceMeth)
+ .setType(coerceType);
+ return adapt(tree, mode, pt);
+ }
}
}
if ((mode & CONSTRmode) == 0) {
@@ -2068,7 +2072,7 @@ public class Analyzer extends Transformer implements Modifiers, Kinds {
pattype, definitions.BOOLEAN_TYPE());
Tree applyVisitor = transformVisitor(tree, pattype, restype);
if (!infer.isFullyDefined(restype))
- restype = applyVisitor.type;
+ restype = applyVisitor.type.deconst();
if (definitions.PARTIALFUNCTION_CLASS.isExternal())
// need to load tree for mixins
new SourceCompleter(global).complete(
@@ -2234,7 +2238,7 @@ public class Analyzer extends Transformer implements Modifiers, Kinds {
enterParams(vparams);
Tree.ValDef[] vparams1 = transform(vparams);
Tree body1 = transform(body, EXPRmode, restype);
- if (!infer.isFullyDefined(restype)) restype = body1.type;
+ if (!infer.isFullyDefined(restype)) restype = body1.type.deconst();
popContext();
return gen.mkFunction(
tree.pos, vparams1, body1, restype, context.owner);