summaryrefslogtreecommitdiff
path: root/sources/scala/tools/nsc/typechecker/RefChecks.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2005-06-09 18:45:48 +0000
committerMartin Odersky <odersky@gmail.com>2005-06-09 18:45:48 +0000
commit4ae459ef755dccc8230a884bf6f462c4dadc96b8 (patch)
tree3d27d19a37680d452c4b52b84e809174a86fba5f /sources/scala/tools/nsc/typechecker/RefChecks.scala
parentd7499538cc0da7beb331a4550b7a6e85cd132876 (diff)
downloadscala-4ae459ef755dccc8230a884bf6f462c4dadc96b8.tar.gz
scala-4ae459ef755dccc8230a884bf6f462c4dadc96b8.tar.bz2
scala-4ae459ef755dccc8230a884bf6f462c4dadc96b8.zip
Repository : /home/cvslamp/repositories/scala
Module : scala Working dir: ~/scala/ In directory .: Unknown META-INF Unknown Test.symbl Unknown VERSION-1.1.0-b1 Unknown collection Unknown expr.exe.stackdump Unknown importing Unknown iq.symbl Unknown java.io.Writer Unknown make Unknown rm Unknown scalac.symtab.Symbol Unknown testcast Unknown x Unknown xmake Unknown y Unknown z In directory bin: Unknown bin/dtd2scala.lnk Unknown bin/scala-debug.lnk Unknown bin/scala-info.lnk Unknown bin/scala.lnkMa Unknown bin/scalac-debug.lnk Unknown bin/scalac.lnk Unknown bin/scaladoc-debug.lnk Unknown bin/scaladoc.lnk Unknown bin/scalaint-debug.lnk Unknown bin/scalaint.lnk Unknown bin/scalap.lnk Unknown bin/scalarun-debug.lnk Unknown bin/scalarun.lnk Unknown bin/scalatest.lnk In directory config: In directory config/list: Modified config/list/nsc.lst In directory doc: Unknown doc/announcement.txt In directory doc/papers: Message: cvs update: cannot open directory /home/cvslamp/repositories/scala/scala/doc/papers: No such file or directory Message: cvs update: skipping directory doc/papers In directory doc/reference: Unknown doc/reference/R1.tex Unknown doc/reference/ScalaReference.tex.1 Unknown doc/reference/ScalaReference.tex.new Unknown doc/reference/ScalaVersion.tex Unknown doc/reference/lecture.tex Unknown doc/reference/math.sty Unknown doc/reference/modefs.sty Unknown doc/reference/prooftree.sty Unknown doc/reference/sbe-talk.tex Unknown doc/reference/scaladefs.sty Unknown doc/reference/scaladefs.tex Unknown doc/reference/scaladoc.sty Unknown doc/reference/tweaklist.sty Unknown doc/reference/vquote.sty Unknown doc/reference/x In directory doc/reports: Message: cvs update: cannot open directory /home/cvslamp/repositories/scala/scala/doc/reports: No such file or directory Message: cvs update: skipping directory doc/reports In directory doc/talks: Message: cvs update: cannot open directory /home/cvslamp/repositories/scala/scala/doc/talks: No such file or directory Message: cvs update: skipping directory doc/talks In directory sources: Unknown sources/new Unknown sources/scala.zip Unknown sources/scalac.own Unknown sources/ziDeLBjS In directory sources/examples: Unknown sources/examples/BibTree.scala Unknown sources/examples/BibTree1.scala Unknown sources/examples/BinTree.scala Unknown sources/examples/concurrent Unknown sources/examples/epl Unknown sources/examples/epl.zip Unknown sources/examples/examples Unknown sources/examples/fs Unknown sources/examples/graphs.scala Unknown sources/examples/implicit Unknown sources/examples/interpreters.scala Unknown sources/examples/parsers2a.scala Unknown sources/examples/parsers3.scala Unknown sources/examples/pubsub.scala Unknown sources/examples/pubsub.scala.notyet Unknown sources/examples/pubsub1.scala Unknown sources/examples/shapes.scala Unknown sources/examples/stacks.scala Unknown sources/examples/teletrans.scala Unknown sources/examples/teletrans1.scala Unknown sources/examples/xpath.scala Unknown sources/examples/xpath1.scala In directory sources/examples/expressions: Unknown sources/examples/expressions/abstract-data-1.scala Unknown sources/examples/expressions/abstract-data-2.scala Unknown sources/examples/expressions/abstract-data-mixin-1.scala Unknown sources/examples/expressions/abstract-data-mixin-bad.scala Unknown sources/examples/expressions/abstract-data-mixin-neg.scala Unknown sources/examples/expressions/abstract-data-mixin.scala Unknown sources/examples/expressions/abstract-data.scala Unknown sources/examples/expressions/abstract-operation-1.scala Unknown sources/examples/expressions/abstract-operation-2.scala Unknown sources/examples/expressions/abstract-operation-mixin.scala Unknown sources/examples/expressions/abstract-operation.scala Unknown sources/examples/expressions/expressions-constr-abstypes.scala Unknown sources/examples/expressions/expressions-oo.scala Unknown sources/examples/expressions/expressions-visitors.scala Unknown sources/examples/expressions/expressions-visitos.scala Unknown sources/examples/expressions/generic-data.scala Unknown sources/examples/expressions/generic-operation-factory.scala Unknown sources/examples/expressions/generic-operation-simple.scala Unknown sources/examples/expressions/generic-operation.scala Unknown sources/examples/expressions/scala Unknown sources/examples/expressions/test Unknown sources/examples/expressions/x In directory sources/scala: Unknown sources/scala/$colon$colon.scala.disabled Unknown sources/scala/.latest-compiler Unknown sources/scala/Array.java.notyet Unknown sources/scala/ArrayIterator.java.notyet Modified sources/scala/CaseClass.scala Modified sources/scala/List.scala Unknown sources/scala/NoValue Unknown sources/scala/ScalaObject.scala Unknown sources/scala/bootclasses Unknown sources/scala/cls Unknown sources/scala/new Unknown sources/scala/newclasses Unknown sources/scala/nsc-build Unknown sources/scala/nsc-build.bat Unknown sources/scala/nscnew Unknown sources/scala/nscnew.bat Unknown sources/scala/nx Unknown sources/scala/old Unknown sources/scala/ox Unknown sources/scala/predef Unknown sources/scala/scala.Ordered![a!])scala.Ordered![scala.List![a!]] Unknown sources/scala/test.scala Unknown sources/scala/x In directory sources/scala/runtime: Unknown sources/scala/runtime/CaseOps.scala In directory sources/scala/tools: Unknown sources/scala/tools/nsc.zip Unknown sources/scala/tools/nsc1 Unknown sources/scala/tools/nscnew In directory sources/scala/tools/nsc: Modified sources/scala/tools/nsc/Global.scala Modified sources/scala/tools/nsc/Phase.scala Added sources/scala/tools/nsc/SubComponent.scala Unknown sources/scala/tools/nsc/typechecker.new In directory sources/scala/tools/nsc/ast: Modified sources/scala/tools/nsc/ast/TreeGen.scala Modified sources/scala/tools/nsc/ast/Trees.scala In directory sources/scala/tools/nsc/ast/parser: Modified sources/scala/tools/nsc/ast/parser/Parsers.scala Modified sources/scala/tools/nsc/ast/parser/Scanners.scala Added sources/scala/tools/nsc/ast/parser/SyntaxAnalyzer.scala Modified sources/scala/tools/nsc/ast/parser/Tokens.scala Modified sources/scala/tools/nsc/ast/parser/TreeBuilder.scala In directory sources/scala/tools/nsc/matching: Modified sources/scala/tools/nsc/matching/PatternUtil.scala In directory sources/scala/tools/nsc/symtab: Modified sources/scala/tools/nsc/symtab/Definitions.scala Modified sources/scala/tools/nsc/symtab/Flags.scala Modified sources/scala/tools/nsc/symtab/Names.scala Modified sources/scala/tools/nsc/symtab/Scopes.scala Modified sources/scala/tools/nsc/symtab/StdNames.scala Modified sources/scala/tools/nsc/symtab/SymbolTable.scala Modified sources/scala/tools/nsc/symtab/Symbols.scala Modified sources/scala/tools/nsc/symtab/Types.scala In directory sources/scala/tools/nsc/symtab/classfile: Modified sources/scala/tools/nsc/symtab/classfile/ClassfileConstants.scala Modified sources/scala/tools/nsc/symtab/classfile/PickleFormat.scala Modified sources/scala/tools/nsc/symtab/classfile/Pickler.scala In directory sources/scala/tools/nsc/transform: Modified sources/scala/tools/nsc/transform/SampleTransform.scala Modified sources/scala/tools/nsc/transform/Transform.scala Removed sources/scala/tools/nsc/transform/TypesAsValues.scala In directory sources/scala/tools/nsc/typechecker: Modified sources/scala/tools/nsc/typechecker/Analyzer.scala Modified sources/scala/tools/nsc/typechecker/Contexts.scala Modified sources/scala/tools/nsc/typechecker/Infer.scala Modified sources/scala/tools/nsc/typechecker/Namers.scala Added sources/scala/tools/nsc/typechecker/RefChecks.scala Modified sources/scala/tools/nsc/typechecker/TreeCheckers.scala Modified sources/scala/tools/nsc/typechecker/Typers.scala In directory sources/scala/xml: In directory sources/scala/xml/parsing: Modified sources/scala/xml/parsing/MarkupHandler.scala Modified sources/scala/xml/parsing/MarkupParser.scala In directory sources/scalac: In directory sources/scalac/symtab: In directory sources/scalac/symtab/classfile: Unknown sources/scalac/symtab/classfile/PackageParser.java.1 In directory test: Unknown test/absobs.scala Unknown test/attr.scala Unknown test/bug363.scala Unknown test/mixin.scala Unknown test/nsc Unknown test/nsc.scala Unknown test/nsc1.scala Unknown test/nsc2.scala Unknown test/sabin.scala Unknown test/sabin2.scala Unknown test/selftypes.scala Unknown test/single.scala Unknown test/testmatch.scala In directory test/files: Unknown test/files/bug320.scala In directory test/files/neg: Unknown test/files/neg/bug356.check Unknown test/files/neg/bug356.scala Unknown test/files/neg/bug363.check Unknown test/files/neg/bug363.scala Unknown test/files/neg/bug369.check Unknown test/files/neg/bug369.scala Unknown test/files/neg/bug370.check Unknown test/files/neg/bug370.scala Unknown test/files/neg/bug373.check Unknown test/files/neg/bug373.scala Unknown test/files/neg/bug375.check Unknown test/files/neg/bug375.scala Unknown test/files/neg/escapes.scala Unknown test/files/neg/test In directory test/files/pos: Unknown test/files/pos/A.symbl Unknown test/files/pos/B.symbl Unknown test/files/pos/C.symbl Unknown test/files/pos/D.symbl Unknown test/files/pos/O.symbl Unknown test/files/pos/S.symbl Unknown test/files/pos/T.symbl Unknown test/files/pos/arrays2.symbl Unknown test/files/pos/bug348plus.scala Unknown test/files/pos/lists.symbl Unknown test/files/pos/main.symbl Unknown test/files/pos/test.symbl In directory test/new: Message: cvs update: cannot open directory /home/cvslamp/repositories/scala/scala/test/new: No such file or directory Message: cvs update: skipping directory test/new In directory test/pos: Unknown test/pos/valparams.scala Unknown test/pos/vincent.scala In directory website: Message: cvs update: cannot open directory /home/cvslamp/repositories/scala/scala/website: No such file or directory Message: cvs update: skipping directory website --------------------- End --------------------- -- last cmd: cvs -f update -d -P --
Diffstat (limited to 'sources/scala/tools/nsc/typechecker/RefChecks.scala')
-rwxr-xr-xsources/scala/tools/nsc/typechecker/RefChecks.scala93
1 files changed, 11 insertions, 82 deletions
diff --git a/sources/scala/tools/nsc/typechecker/RefChecks.scala b/sources/scala/tools/nsc/typechecker/RefChecks.scala
index f7e5b3e32d..344e606b3e 100755
--- a/sources/scala/tools/nsc/typechecker/RefChecks.scala
+++ b/sources/scala/tools/nsc/typechecker/RefChecks.scala
@@ -31,7 +31,6 @@ import transform.Transform;
* unless they are defined in the class or a baseclass
* different from java.lang.Object
* - Calls to case factory methods are replaced by new's.
- * - Function nodes are eliminated.
*/
abstract class RefChecks extends Transform {
@@ -280,7 +279,7 @@ abstract class RefChecks extends Transform {
case NoType => ;
case NoPrefix => ;
case ThisType(_) => ;
- case ConstantType(_, _) => ;
+ case ConstantType(_) => ;
case SingleType(pre, sym) =>
validateVariance(pre, variance)
case TypeRef(pre, sym, args) =>
@@ -389,12 +388,12 @@ abstract class RefChecks extends Transform {
val caseFields = clazz.caseFieldAccessors map gen.mkRef;
typed(
DefDef(method, vparamss =>
- if (caseFields.isEmpty) Literal(null)
+ if (caseFields.isEmpty) Literal(Constant(null))
else {
var i = caseFields.length;
- var cases = List(CaseDef(Ident(nme.WILDCARD), EmptyTree, Literal(null)));
+ var cases = List(CaseDef(Ident(nme.WILDCARD), EmptyTree, Literal(Constant(null))));
for (val field <- caseFields.reverse) {
- i = i - 1; cases = CaseDef(Literal(i), EmptyTree, field) :: cases
+ i = i - 1; cases = CaseDef(Literal(Constant(i)), EmptyTree, field) :: cases
}
Match(Ident(vparamss.head.head), cases)
}))
@@ -402,26 +401,26 @@ abstract class RefChecks extends Transform {
def caseArityMethod: Tree = {
val method = syntheticMethod(nme.caseArity, FINAL, PolyType(List(), IntClass.tpe));
- typed(DefDef(method, vparamss => Literal(clazz.caseFieldAccessors.length)))
+ typed(DefDef(method, vparamss => Literal(Constant(clazz.caseFieldAccessors.length))))
}
def caseNameMethod: Tree = {
val method = syntheticMethod(nme.caseName, FINAL, PolyType(List(), StringClass.tpe));
- typed(DefDef(method, vparamss => Literal(clazz.name.decode)))
+ typed(DefDef(method, vparamss => Literal(Constant(clazz.name.decode))))
}
def moduleToStringMethod: Tree = {
val method = syntheticMethod(nme.toString_, FINAL, MethodType(List(), StringClass.tpe));
- typed(DefDef(method, vparamss => Literal(clazz.name.decode)))
+ typed(DefDef(method, vparamss => Literal(Constant(clazz.name.decode))))
}
def tagMethod: Tree = {
val method = syntheticMethod(nme.tag, FINAL, MethodType(List(), IntClass.tpe));
- typed(DefDef(method, vparamss => Literal(clazz.tag)))
+ typed(DefDef(method, vparamss => Literal(Constant(clazz.tag))))
}
def forwardingMethod(name: Name): Tree = {
- val target = getMember(CaseOpsModule, "_" + name);
+ val target = getMember(ScalaRunTimeModule, "_" + name);
val method = syntheticMethod(
name, 0, MethodType(target.tpe.paramTypes.tail, target.tpe.resultType));
typed(DefDef(method, vparamss =>
@@ -487,7 +486,7 @@ abstract class RefChecks extends Transform {
mvar setFlag (PRIVATE | LOCAL | SYNTHETIC);
sym.owner.info.decls.enter(mvar);
}
- val vdef = typed(ValDef(mvar, if (sym.isLocal) Literal(null) else EmptyTree));
+ val vdef = typed(ValDef(mvar, if (sym.isLocal) Literal(Constant(null)) else EmptyTree));
// def m: T = { if (m$ == null) m$ = new m$class; m$ }
sym.setFlag(METHOD | STABLE);
@@ -497,7 +496,7 @@ abstract class RefChecks extends Transform {
Block(
List(
If(
- Apply(Select(Ident(mvar), nme.EQ), List(Literal(null))),
+ Apply(Select(Ident(mvar), nme.EQ), List(Literal(Constant(null)))),
Assign(Ident(mvar), New(TypeTree(moduleType), List(List()))),
EmptyTree)),
Ident(mvar))));
@@ -570,76 +569,6 @@ abstract class RefChecks extends Transform {
case TypeApply(fn, args) =>
checkBounds(fn.tpe.typeParams, args map (.tpe));
- case Function(vparams, body) =>
- /* Transform a function node (x_1,...,x_n) => body of type FunctionN[T_1, .., T_N, R] to
- *
- * class $anon() extends Object() with FunctionN[T_1, .., T_N, R] with ScalaObject {
- * def apply(x_1: T_1, ..., x_N: T_n): R = body
- * }
- * new $anon()
- *
- * transform a function node (x => body) of type PartialFunction[T, R] where
- * body = x match { case P_i if G_i => E_i }_i=1..n
- * to:
- *
- * class $anon() extends Object() with PartialFunction[T, R] with ScalaObject {
- * def apply(x: T): R = body;
- * def isDefinedAt(x: T): boolean = x match {
- * case P_1 if G_1 => true
- * ...
- * case P_n if G_n => true
- * case _ => false
- * }
- * }
- * new $anon()
- *
- * However, if one of the patterns P_i if G_i is a default pattern, generate instead
- *
- * def isDefinedAt(x: T): boolean = true
- */
- result = {
- val anonClass =
- currentOwner.newAnonymousFunctionClass(tree.pos) setFlag (FINAL | SYNTHETIC);
- anonClass setInfo ClassInfoType(
- List(ObjectClass.tpe, tree.tpe, ScalaObjectClass.tpe), new Scope(), anonClass);
- val targs = tree.tpe.typeArgs;
- val applyMethod = anonClass.newMethod(tree.pos, nme.apply)
- setFlag FINAL setInfo MethodType(targs.init, targs.last);
- anonClass.info.decls enter applyMethod;
- for (val vparam <- vparams)
- vparam.symbol.owner = applyMethod;
- var members = List(
- DefDef(FINAL, nme.apply, List(), List(vparams), TypeTree(targs.last), body)
- setSymbol applyMethod);
- if (tree.tpe.symbol == PartialFunctionClass) {
- val isDefinedAtMethod = anonClass.newMethod(tree.pos, nme.isDefinedAt)
- setFlag FINAL setInfo MethodType(targs.init, BooleanClass.tpe);
- anonClass.info.decls enter isDefinedAtMethod;
- def idbody(idparam: Symbol) = body match {
- case Match(_, cases) =>
- val substParam = new TreeSymSubstituter(List(vparams.head.symbol), List(idparam));
- def transformCase(cdef: CaseDef): CaseDef =
- CaseDef(substParam(cdef.pat), substParam(cdef.guard), Literal(true));
- def isDefaultCase(cdef: CaseDef) = cdef match {
- case CaseDef(Ident(nme.WILDCARD), EmptyTree, _) => true
- case CaseDef(Bind(_, Ident(nme.WILDCARD)), EmptyTree, _) => true
- case _ => false
- }
- if (cases exists isDefaultCase) Literal(true)
- else Match(
- Ident(idparam),
- (cases map transformCase) :::
- List(CaseDef(Ident(nme.WILDCARD), EmptyTree, Literal(false))))
- }
- members = DefDef(isDefinedAtMethod, vparamss => idbody(vparamss.head.head)) :: members;
- }
- typed(
- atPos(tree.pos)(
- Block(
- List(ClassDef(anonClass, List(List()), List(List()), members)),
- New(TypeTree(anonClass.tpe), List(List())))))
- }
-
case New(tpt) =>
enterReference(tree.pos, tpt.tpe.symbol);