Skip to content

Commit 2a5f623

Browse files
committed
*** empty log message ***
1 parent e12958a commit 2a5f623

31 files changed

+1069
-231
lines changed

bin/test-nsc

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,19 @@
22
alias scala java -Xms16m -ea -classpath /home/linuxsoft/apps/java-1.4.2_08/jre/lib/rt.jar:$HOME/scala/objects/main/lib/scala:$HOME/scala/objects/main/lib/tools:/tmp/classes
33
alias scala-debug scala -Djava.compiler=NONE
44
alias nsc "scala scala.tools.nsc.Main -classpath "/tmp/newclasses:$HOME/scala/sources:$HOME/scala/newsources" -d /tmp/newclasses"
5-
nsc -verbose -prompt -nopredefs Predef.scala runtime/ScalaRunTime.scala -skip:tailcalls -skip:transmatch -check:term
6-
nsc -verbose -prompt *.scala -skip:tailcalls -skip:transmatch -check:term
7-
nsc -verbose -prompt collection/*.scala -skip:tailcalls -skip:transmatch -check:term
8-
nsc -verbose -prompt collection/mutable/*.scala -skip:tailcalls -skip:transmatch -check:term
9-
nsc -verbose -prompt collection/immutable/*.scala -skip:tailcalls -skip:transmatch -check:term
10-
nsc -verbose -prompt concurrent/*.scala -skip:tailcalls -skip:transmatch -check:term
11-
nsc -verbose -prompt io/*.scala -skip:tailcalls -skip:transmatch -check:term
12-
nsc -verbose -prompt mobile/*.scala -skip:tailcalls -skip:transmatch -check:term
13-
nsc -verbose -prompt runtime/*.scala runtime/*/*.scala -skip:tailcalls -skip:transmatch -check:term
14-
nsc -verbose -prompt text/*.scala -skip:tailcalls -skip:transmatch -check:term
15-
nsc -verbose -prompt testing/*.scala -skip:tailcalls -skip:transmatch -check:term
16-
nsc -verbose -prompt util/*/*.scala -skip:tailcalls -skip:transmatch -check:term
17-
nsc -verbose -prompt xml*.scala xml/*/*.scala -skip:tailcalls -skip:transmatch -check:term
5+
nsc -verbose -prompt -nopredefs Predef.scala runtime/ScalaRunTime.scala -check:term $*
6+
nsc -verbose -prompt *.scala -check:term $*
7+
nsc -verbose -prompt collection/*.scala -check:term $*
8+
nsc -verbose -prompt collection/mutable/*.scala -check:term $*
9+
nsc -verbose -prompt collection/immutable/*.scala -check:term $*
10+
nsc -verbose -prompt concurrent/*.scala -check:term $*
11+
nsc -verbose -prompt io/*.scala -check:term $*
12+
nsc -verbose -prompt mobile/*.scala -check:term $*
13+
nsc -verbose -prompt runtime/*.scala runtime/*/*.scala -check:term $*
14+
nsc -verbose -prompt text/*.scala -check:term $*
15+
nsc -verbose -prompt testing/*.scala -check:term $*
16+
nsc -verbose -prompt util/*/*.scala -check:term $*
17+
nsc -verbose -prompt xml*.scala xml/*/*.scala -check:term $*
1818
rm -r /tmp/newclasses/scala/tools/nsc
19-
nsc -verbose -prompt tools/nsc/*.scala -skip:tailcalls -skip:transmatch -check:term
19+
nsc -verbose -prompt tools/nsc/*.scala tools/nsc/matching/*.scala -check:term $*
2020

newsources/scala/Array.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010

1111
package scala;
1212

13-
final class Array[A](val length: Int) extends Cloneable with java.io.Serializable with Seq[A] {
13+
final class Array[A](_length: Int) extends Cloneable with java.io.Serializable with Seq[A] {
14+
def length: Int = throw new Error();
1415
def apply(i: Int): A = throw new Error();
1516
def update(i: Int, x: A): Unit = throw new Error();
1617
def elements: Iterator[A] = throw new Error();

sources/scala/Enumeration.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ abstract class Enumeration(initial: Int, names: String*) {
114114

115115
trait Value extends Ordered[Value] {
116116
def id: Int;
117-
def compareTo[S >: Value <% Ordered[S]](that: S): Int = that match {
117+
override def compareTo[S >: Value <% Ordered[S]](that: S): Int = that match {
118118
case that1: Value => id - that1.id
119119
case _ => -(that compareTo this)
120120
}

sources/scala/tools/nsc/Global.scala

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import scala.collection.mutable.{HashSet,HashMap}
1212

1313
import symtab._;
1414
import symtab.classfile.{PickleBuffer, Pickler};
15-
import util._;
15+
import util.ListBuffer;
1616
import ast._;
1717
import ast.parser._;
1818
import typechecker._;
@@ -132,6 +132,13 @@ class Global(val settings: Settings, val reporter: Reporter) extends SymbolTable
132132

133133
// Phases ------------------------------------------------------------
134134

135+
var globalPhase: Phase = NoPhase;
136+
137+
override def phase_=(p: Phase): unit = {
138+
assert(p.id <= globalPhase.id + 1);
139+
super.phase_=(p)
140+
}
141+
135142
abstract class GlobalPhase(prev: Phase) extends Phase(prev) {
136143
def run: unit = units foreach applyPhase;
137144
def apply(unit: CompilationUnit): unit;
@@ -170,6 +177,11 @@ class Global(val settings: Settings, val reporter: Reporter) extends SymbolTable
170177
object transMatcher extends TransMatcher {
171178
val global: Global.this.type = Global.this;
172179
}
180+
181+
object explicitOuter extends ExplicitOuter {
182+
val global: Global.this.type = Global.this;
183+
}
184+
173185
object erasure extends Erasure {
174186
val global: Global.this.type = Global.this;
175187
}
@@ -194,8 +206,10 @@ class Global(val settings: Settings, val reporter: Reporter) extends SymbolTable
194206
uncurry,
195207
tailCalls,
196208
transMatcher,
209+
explicitOuter,
197210
erasure,
198-
sampleTransform);
211+
if (settings.Xshowicode.value) genicode
212+
else sampleTransform);
199213

200214
val parserPhase = syntaxAnalyzer.newPhase(NoPhase);
201215
val firstPhase = parserPhase;
@@ -212,17 +226,20 @@ class Global(val settings: Settings, val reporter: Reporter) extends SymbolTable
212226
}
213227
}
214228

215-
// temporary: icode is turned on explicitely
216-
if (settings.Xshowicode.value)
217-
p = genicode.newPhase(p);
218-
219229
val terminalPhase = new GlobalPhase(p) {
220230
def name = "terminal";
221231
def apply(unit: CompilationUnit): unit = {}
222232
}
223233

224-
val namerPhase = parserPhase.next;
225-
val typerPhase = namerPhase.next;
234+
def phaseNamed(name: String): Phase = {
235+
var p: Phase = firstPhase;
236+
while (p.next != p && p.name != name) p = p.next;
237+
if (p.name != name) NoPhase else p
238+
}
239+
240+
val namerPhase = phaseNamed("namer");
241+
val typerPhase = phaseNamed("typer");
242+
val erasurePhase = phaseNamed("erasure");
226243

227244
val typer = new analyzer.Typer(analyzer.NoContext.make(EmptyTree, definitions.RootClass, new Scope())) {
228245
override def typed(tree: Tree, mode: int, pt: Type): Tree = {
@@ -252,8 +269,6 @@ class Global(val settings: Settings, val reporter: Reporter) extends SymbolTable
252269
/** A map from compiled top-level symbols to their picklers */
253270
val symData = new HashMap[Symbol, PickleBuffer];
254271

255-
var globalPhase: Phase = NoPhase;
256-
257272
def compileSources(sources: List[SourceFile]): unit = {
258273
val startTime = System.currentTimeMillis();
259274
unitbuf.clear;

sources/scala/tools/nsc/Main.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ object Main {
5959
else
6060
compiler.compile(command.files);
6161
} catch {
62-
case ex @ FatalError(msg) =>
62+
case ex: FatalError => // todo: replace with ex @ FatalError(msg)
63+
val msg = ex.msg;
6364
if (command.settings.debug.value)
6465
ex.printStackTrace();
6566
reporter.error(null, "fatal error: " + msg);

sources/scala/tools/nsc/Phase.scala

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,16 @@
55
// $Id$
66
package scala.tools.nsc;
77

8+
import symtab.Flags;
9+
810
abstract class Phase(val prev: Phase) {
911
val id: int = if (prev == null) 0 else prev.id + 1;
1012

13+
def newFlags: long = 0l;
14+
private var fmask: long =
15+
if (prev == null) Flags.InitialFlags else prev.flagMask | newFlags;
16+
def flagMask: long = fmask;
17+
1118
private var nx: Phase = this;
1219
if (prev != null) prev.nx = this;
1320

@@ -16,7 +23,6 @@ abstract class Phase(val prev: Phase) {
1623
def name: String;
1724
def description: String = name;
1825
def erasedTypes: boolean = false;
19-
2026
def run: unit;
2127

2228
override def toString() = name;

sources/scala/tools/nsc/SubComponent.scala

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,22 @@ package scala.tools.nsc;
88
/** An nsc sub-component.
99
*/
1010
abstract class SubComponent {
11+
12+
/** The global environment; overridden by instantiation in Global. */
1113
val global: Global;
14+
15+
/** The name of the phase */
1216
val phaseName: String;
17+
18+
/** New flags defined by the phase which are not valid before */
19+
def phaseNewFlags: long = 0;
20+
21+
/** The phase factory */
1322
def newPhase(prev: Phase): Phase;
23+
24+
/** A standard phase template */
1425
abstract class StdPhase(prev: Phase) extends global.GlobalPhase(prev) {
1526
def name = phaseName;
27+
override def newFlags = phaseNewFlags;
1628
}
1729
}

sources/scala/tools/nsc/ast/TreeGen.scala

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,15 @@ abstract class TreeGen {
3333
}
3434
case TypeRef(pre, sym, args) =>
3535
assert(phase.erasedTypes);
36-
(if (sym.isModuleClass && !sym.isRoot)
37-
Select(mkQualifier(sym.owner.tpe), sym.sourceModule)
38-
else This(sym)) setType sym.tpe
36+
if (sym.isModuleClass && !sym.isRoot) {
37+
val qual = Select(mkQualifier(sym.owner.tpe), sym.sourceModule);
38+
qual.tpe match {
39+
case MethodType(List(), restpe) =>
40+
Apply(qual, List()) setType restpe
41+
case _ =>
42+
qual
43+
}
44+
} else This(sym)
3945
}
4046

4147
/** Builds a reference to given symbol with given stable prefix. */
@@ -65,19 +71,19 @@ abstract class TreeGen {
6571
def mkStableRef(sym: Symbol): Tree = stabilize(mkRef(sym));
6672

6773
def This(sym: Symbol): Tree =
68-
global.This(sym.name) setSymbol sym setType atPhase(phase.next)(sym.thisType);
74+
global.This(sym.name) setSymbol sym setType sym.thisType;
6975

7076
def Ident(sym: Symbol) = {
7177
assert(sym.isTerm);
7278
sym.setFlag(ACCESSED);
73-
global.Ident(sym.name) setSymbol sym setType atPhase(phase.next)(sym.tpe);
79+
global.Ident(sym.name) setSymbol sym setType sym.tpe;
7480
}
7581

7682
def Select(qual: Tree, sym: Symbol) = {
7783
assert(sym.isTerm);
7884
sym.setFlag(ACCESSED);
7985
val result = global.Select(qual, sym.name) setSymbol sym;
80-
if (qual.tpe != null) result setType atPhase(phase.next)(qual.tpe.memberType(sym));
86+
if (qual.tpe != null) result setType qual.tpe.memberType(sym);
8187
result
8288
}
8389

@@ -89,7 +95,6 @@ abstract class TreeGen {
8995
definitions.Any_isInstanceOfErased
9096
else
9197
definitions.Any_isInstanceOf;
92-
9398
Apply(
9499
TypeApply(
95100
Select(value, sym),

sources/scala/tools/nsc/ast/TreeInfo.scala

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,21 @@ abstract class TreeInfo {
3434
case _ => false
3535
}
3636

37+
/** Is tree legal as a member definition of an interface?
38+
*/
39+
def isInterfaceMember(tree: Tree): boolean = tree match {
40+
case EmptyTree => true
41+
case Import(_, _) => true
42+
case AbsTypeDef(_, _, _, _) => true
43+
case AliasTypeDef(_, _, _, _) => true
44+
case DefDef(mods, _, _, _, _, __) => (mods & DEFERRED) != 0
45+
case ValDef(mods, _, _, _) => (mods & DEFERRED) != 0
46+
case DocDef(_, definition) => isInterfaceMember(definition)
47+
case Attributed(_, definition) => isInterfaceMember(definition)
48+
case _ => false
49+
}
50+
51+
3752
/** Is tree a pure definition?
3853
*/
3954
def isPureDef(tree: Tree): boolean = tree match {
@@ -43,12 +58,14 @@ abstract class TreeInfo {
4358
| AbsTypeDef(_, _, _, _)
4459
| AliasTypeDef(_, _, _, _)
4560
| Import(_, _)
46-
| DefDef(_, nme.CONSTRUCTOR, _, _, _, _) =>
61+
| DefDef(_, _, _, _, _, _) =>
4762
true
4863
case ValDef(mods, _, _, rhs) =>
4964
(mods & MUTABLE) == 0 && isPureExpr(rhs)
5065
case DocDef(_, definition) =>
5166
isPureDef(definition)
67+
case Attributed(_, definition) =>
68+
isPureDef(definition)
5269
case _ =>
5370
false
5471
}

sources/scala/tools/nsc/ast/TreePrinters.scala

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,14 @@ abstract class TreePrinters {
7979
def printOpt(prefix: String, tree: Tree): unit =
8080
if (!tree.isEmpty) { print(prefix); print(tree) }
8181

82-
def printModifiers(flags: int): unit = {
82+
def printFlags(tree: Tree, flags: long): unit =
83+
printModifiers(
84+
if (tree.symbol == NoSymbol) flags
85+
else if (settings.debug.value) tree.symbol.flags
86+
else tree.symbol.flags & SourceFlags.asInstanceOf[long]);
87+
//todo: check codegen so that we can remove this
88+
89+
def printModifiers(flags: long): unit = {
8390
val mask = if (settings.debug.value) -1 else PrintableFlags;
8491
val s = flagsToString(flags & mask);
8592
if (s.length() != 0) print(s + " ")
@@ -94,19 +101,19 @@ abstract class TreePrinters {
94101
print("<empty>");
95102

96103
case ClassDef(mods, name, tparams, tp, impl) =>
97-
printModifiers(mods); print("class " + symName(tree, name));
104+
printFlags(tree, mods); print("class " + symName(tree, name));
98105
printTypeParams(tparams);
99106
printOpt(": ", tp); print(" extends "); print(impl);
100107

101108
case PackageDef(packaged, stats) =>
102109
print("package "); print(packaged); printColumn(stats, " {", ";", "}")
103110

104111
case ModuleDef(mods, name, impl) =>
105-
printModifiers(mods); print("object " + symName(tree, name));
112+
printFlags(tree, mods); print("object " + symName(tree, name));
106113
print(" extends "); print(impl);
107114

108115
case ValDef(mods, name, tp, rhs) =>
109-
printModifiers(mods);
116+
printFlags(tree, mods);
110117
print(if ((mods & MUTABLE) != 0) "var " else "val ");
111118
print(symName(tree, name));
112119
printOpt(": ", tp);
@@ -116,16 +123,16 @@ abstract class TreePrinters {
116123
}
117124

118125
case DefDef(mods, name, tparams, vparamss, tp, rhs) =>
119-
printModifiers(mods);
126+
printFlags(tree, mods);
120127
print("def " + symName(tree, name));
121128
printTypeParams(tparams); vparamss foreach printValueParams;
122129
printOpt(": ", tp); printOpt(" = ", rhs);
123130

124131
case AbsTypeDef(mods, name, lo, hi) =>
125-
printModifiers(mods); print("type "); printParam(tree);
132+
printFlags(tree, mods); print("type "); printParam(tree);
126133

127134
case AliasTypeDef(mods, name, tparams, rhs) =>
128-
printModifiers(mods); print("type " + symName(tree, name));
135+
printFlags(tree, mods); print("type " + symName(tree, name));
129136
printTypeParams(tparams); printOpt(" = ", rhs);
130137

131138
case LabelDef(name, params, rhs) =>
@@ -265,7 +272,7 @@ abstract class TreePrinters {
265272
case ClassDef(_, _, _, _, impl) => ClassDef(tree.symbol, impl)
266273
case ModuleDef(_, _, impl) => ModuleDef(tree.symbol, impl)
267274
case ValDef(_, _, _, rhs) => ValDef(tree.symbol, rhs)
268-
case DefDef(_, _, _, _, _, rhs) => DefDef(tree.symbol, vparamss => rhs)
275+
case DefDef(_, _, _, vparamss, _, rhs) => DefDef(tree.symbol, vparamss => rhs)
269276
case AbsTypeDef(_, _, _, _) => AbsTypeDef(tree.symbol)
270277
case AliasTypeDef(_, _, _, rhs) => AliasTypeDef(tree.symbol, rhs)
271278
case _ => tree

0 commit comments

Comments
 (0)