summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2003-12-19 18:57:21 +0000
committerpaltherr <paltherr@epfl.ch>2003-12-19 18:57:21 +0000
commitf22dc6124da3463c0264bf5f2d2cc9a950928e64 (patch)
treed9a89bb10c7ae27aa50d5a43cf6716a454257f1f
parent77eea4abf2d2870623493dabc7f7abf6b6ddbb9f (diff)
downloadscala-f22dc6124da3463c0264bf5f2d2cc9a950928e64.tar.gz
scala-f22dc6124da3463c0264bf5f2d2cc9a950928e64.tar.bz2
scala-f22dc6124da3463c0264bf5f2d2cc9a950928e64.zip
- Added method isUnaccessedConstant
- Added removal of unaccessed constants from class scopes
-rw-r--r--sources/scalac/transformer/UnCurry.java15
-rw-r--r--sources/scalac/transformer/UnCurryPhase.java23
2 files changed, 27 insertions, 11 deletions
diff --git a/sources/scalac/transformer/UnCurry.java b/sources/scalac/transformer/UnCurry.java
index 833ca96eda..f806d74045 100644
--- a/sources/scalac/transformer/UnCurry.java
+++ b/sources/scalac/transformer/UnCurry.java
@@ -125,23 +125,16 @@ public class UnCurry extends OwnerTransformer
case DefDef(_, _, AbsTypeDef[] tparams, ValDef[][] vparams, Tree tpe, Tree rhs):
Symbol sym = tree.symbol();
- if ((sym.flags & ACCESSED) == 0) {
- switch (sym.type()) {
- case PolyType(Symbol[] tparams1, ConstantType(_, _)):
- if (tparams1.length == 0) return gen.mkUnitLit(tree.pos);
- }
- }
+ if (descr.isUnaccessedConstant(sym))
+ return gen.mkUnitLit(tree.pos);
Tree rhs1 = transform(rhs, sym);
return copy.DefDef(
tree, sym, tparams, uncurry(transform(vparams, sym)), tpe, rhs1);
case ValDef(_, _, Tree tpe, Tree rhs):
Symbol sym = tree.symbol();
- if ((sym.flags & ACCESSED) == 0) {
- switch (sym.type()) {
- case ConstantType(_, _): return gen.mkUnitLit(tree.pos);
- }
- }
+ if (descr.isUnaccessedConstant(sym))
+ return gen.mkUnitLit(tree.pos);
if (sym.isDefParameter()) {
Type newtype = global.definitions.FUNCTION_TYPE(Type.EMPTY_ARRAY, tpe.type);
Tree tpe1 = gen.mkType(tpe.pos, newtype);
diff --git a/sources/scalac/transformer/UnCurryPhase.java b/sources/scalac/transformer/UnCurryPhase.java
index 3309bce67b..22d29294ba 100644
--- a/sources/scalac/transformer/UnCurryPhase.java
+++ b/sources/scalac/transformer/UnCurryPhase.java
@@ -69,11 +69,34 @@ public class UnCurryPhase extends Phase implements Modifiers {
}.map(tp);
case ConstantType(Type base, _):
return base;
+ case CompoundType(Type[] parents, Scope scope):
+ Symbol symbol = tp.symbol();
+ if (!symbol.isClass() || symbol.isCompoundSym()) return tp;
+ Scope clone = new Scope();
+ for (Scope.SymbolIterator i = scope.iterator(true); i.hasNext();) {
+ Symbol member = i.next();
+ if (!isUnaccessedConstant(member))
+ clone.enterOrOverload(member);
+ }
+ return Type.compoundType(parents, clone, symbol);
default:
return tp;
}
}
+ boolean isUnaccessedConstant(Symbol symbol) {
+ if (!symbol.isTerm()) return false;
+ if ((symbol.flags & ACCESSED) != 0) return false;
+ switch (symbol.type()) {
+ case PolyType(Symbol[] params, ConstantType(_, _)):
+ return params.length == 0;
+ case ConstantType(_, _):
+ return true;
+ default:
+ return false;
+ }
+ }
+
public Checker[] postCheckers(Global global) {
return new Checker[] {
new CheckSymbols(global),