summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2006-01-30 17:45:42 +0000
committerMartin Odersky <odersky@gmail.com>2006-01-30 17:45:42 +0000
commit430648004416a3a04104fd49798d99db30e1fb4f (patch)
tree49a39203a49b1dd143cc960c62a4a93b9c8bf81e /src
parent7748d5fd7fe0d279c299f504e38aadcdf8116c01 (diff)
downloadscala-430648004416a3a04104fd49798d99db30e1fb4f.tar.gz
scala-430648004416a3a04104fd49798d99db30e1fb4f.tar.bz2
scala-430648004416a3a04104fd49798d99db30e1fb4f.zip
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/Parsers.scala2
-rw-r--r--src/compiler/scala/tools/nsc/symtab/SymbolLoaders.scala11
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Symbols.scala2
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala10
-rw-r--r--src/library/scala/collection/mutable/ListBuffer.scala22
-rw-r--r--src/library/scala/reflect/TypedCode.scala4
6 files changed, 37 insertions, 14 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
index bd9fa9be18..5f74667dc4 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
@@ -1617,7 +1617,7 @@ mixin class Parsers requires SyntaxAnalyzer {
if (in.token == LPAREN && settings.migrate.value)
syntaxErrorMigrate("mixin classes may not have parameters");
if (!(in.token == SEMI || in.token == NEWLINE ||
- in.token == COMMA || in.token == RBRACE))
+ in.token == COMMA || in.token == RBRACE || in.token == EOF))
syntaxError(msg, true);
}
val parents = new ListBuffer[Tree];
diff --git a/src/compiler/scala/tools/nsc/symtab/SymbolLoaders.scala b/src/compiler/scala/tools/nsc/symtab/SymbolLoaders.scala
index b0f0b251e0..ee98853107 100644
--- a/src/compiler/scala/tools/nsc/symtab/SymbolLoaders.scala
+++ b/src/compiler/scala/tools/nsc/symtab/SymbolLoaders.scala
@@ -63,6 +63,7 @@ abstract class SymbolLoaders {
} else error(source + " does not define " + root)
} catch {
case ex: IOException =>
+ ok = false;
if (settings.debug.value) ex.printStackTrace();
val msg = ex.getMessage();
error(
@@ -76,11 +77,11 @@ abstract class SymbolLoaders {
private def initRoot(root: Symbol): unit = {
if (root.rawInfo == this) {
- root.setInfo(if (ok) NoType else ErrorType);
- if (root.isModule)
- root.moduleClass.setInfo(if (ok) NoType else ErrorType)
- }
- if (root.isClass && !root.isModuleClass) root.rawInfo.load(root)
+ def markAbsent(sym: Symbol) =
+ if (sym != NoSymbol) sym.setInfo(if (ok) NoType else ErrorType);
+ markAbsent(root);
+ markAbsent(root.moduleClass)
+ } else if (root.isClass && !root.isModuleClass) root.rawInfo.load(root)
}
}
diff --git a/src/compiler/scala/tools/nsc/symtab/Symbols.scala b/src/compiler/scala/tools/nsc/symtab/Symbols.scala
index 7650d881d4..4fd9c762ed 100644
--- a/src/compiler/scala/tools/nsc/symtab/Symbols.scala
+++ b/src/compiler/scala/tools/nsc/symtab/Symbols.scala
@@ -832,7 +832,7 @@ mixin class Symbols requires SymbolTable {
def setAlias(alias: Symbol): TermSymbol = {
assert(alias != NoSymbol, this);
- assert(hasFlag(SUPERACCESSOR | PARAMACCESSOR | MIXEDIN));
+ assert(hasFlag(SUPERACCESSOR | PARAMACCESSOR | MIXEDIN), this);
referenced = alias;
this
}
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index b91c0c17b7..2a1502aa66 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -116,7 +116,8 @@ mixin class Typers requires Analyzer {
case ValDef(_, _, tpt, _) if (tpt.tpe == null) =>
"recursive "+sym+" needs type"
case DefDef(_, _, _, _, tpt, _) if (tpt.tpe == null) =>
- "recursive "+sym+" needs result type"
+ (if (sym.owner.isClass && sym.owner.info.member(sym.name).hasFlag(OVERLOADED)) "overloaded "
+ else "recursive ")+sym+" needs result type"
case _ =>
ex.getMessage()
}
@@ -705,7 +706,7 @@ mixin class Typers requires Analyzer {
superClazz.info.nonPrivateMember(alias.name) != alias)
alias = NoSymbol
if (alias != NoSymbol) {
- var ownAcc = clazz.info.decl(name)
+ var ownAcc = clazz.info.decl(name).suchThat(.hasFlag(PARAMACCESSOR))
if (ownAcc hasFlag ACCESSOR) ownAcc = ownAcc.accessed
if (settings.debug.value) log(""+ownAcc+" has alias "+alias + alias.locationString);//debug
ownAcc.asInstanceOf[TermSymbol].setAlias(alias)
@@ -1037,11 +1038,12 @@ mixin class Typers requires Analyzer {
while (defSym == NoSymbol && cx != NoContext) {
pre = cx.enclClass.prefix
defEntry = cx.scope.lookupEntry(name)
- if (defEntry != null) {
+ if (defEntry != null && defEntry.sym.tpe != NoType) {
defSym = defEntry.sym
} else {
cx = cx.enclClass
- defSym = pre.member(name) filter (sym => context.isAccessible(sym, pre, false))
+ defSym = pre.member(name) filter (
+ sym => sym.tpe != NoType && context.isAccessible(sym, pre, false))
if (defSym == NoSymbol) cx = cx.outer
}
}
diff --git a/src/library/scala/collection/mutable/ListBuffer.scala b/src/library/scala/collection/mutable/ListBuffer.scala
index e5c7dfbf4f..909370d115 100644
--- a/src/library/scala/collection/mutable/ListBuffer.scala
+++ b/src/library/scala/collection/mutable/ListBuffer.scala
@@ -51,6 +51,28 @@ final class ListBuffer[A] extends Buffer[A] {
}
}
+ /** Remove a single element from the buffer and return
+ * the identity of the buffer. Same as ``this -= x; this''
+ *
+ * @param x the element to remove.
+ */
+ def - (x: A): Buffer[A] = { this -= x; this }
+
+ /** Remove a single element from this buffer.
+ *
+ * @param x the element to remove.
+ */
+ def -= (x: A): unit = {
+ if (exported) copy()
+ if (start.isEmpty) {}
+ else if (start.head == x) start = start.tail
+ else {
+ var cursor = start
+ while (!cursor.tail.isEmpty && cursor.tail.head != x) { cursor = cursor.tail }
+ if (!cursor.tail.isEmpty) cursor.asInstanceOf[scala.::[A]].tl = cursor.tail.tail
+ }
+ }
+
/** Converts this buffer to a list
*/
override def toList: List[A] = {
diff --git a/src/library/scala/reflect/TypedCode.scala b/src/library/scala/reflect/TypedCode.scala
index 38ce0512c7..9f20a9edd0 100644
--- a/src/library/scala/reflect/TypedCode.scala
+++ b/src/library/scala/reflect/TypedCode.scala
@@ -8,6 +8,4 @@
\* */
package scala.reflect;
-class TypedCode[T](val code: Code) {
-}
-
+class TypedCode[T](val code: Code) {}