summaryrefslogtreecommitdiff
path: root/sources/scalac/transformer/UnCurryPhase.java
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 /sources/scalac/transformer/UnCurryPhase.java
parent77eea4abf2d2870623493dabc7f7abf6b6ddbb9f (diff)
downloadscala-f22dc6124da3463c0264bf5f2d2cc9a950928e64.tar.gz
scala-f22dc6124da3463c0264bf5f2d2cc9a950928e64.tar.bz2
scala-f22dc6124da3463c0264bf5f2d2cc9a950928e64.zip
- Added method isUnaccessedConstant
- Added removal of unaccessed constants from class scopes
Diffstat (limited to 'sources/scalac/transformer/UnCurryPhase.java')
-rw-r--r--sources/scalac/transformer/UnCurryPhase.java23
1 files changed, 23 insertions, 0 deletions
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),