diff options
author | Martin Odersky <odersky@gmail.com> | 2006-01-30 17:45:42 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2006-01-30 17:45:42 +0000 |
commit | 430648004416a3a04104fd49798d99db30e1fb4f (patch) | |
tree | 49a39203a49b1dd143cc960c62a4a93b9c8bf81e /src | |
parent | 7748d5fd7fe0d279c299f504e38aadcdf8116c01 (diff) | |
download | scala-430648004416a3a04104fd49798d99db30e1fb4f.tar.gz scala-430648004416a3a04104fd49798d99db30e1fb4f.tar.bz2 scala-430648004416a3a04104fd49798d99db30e1fb4f.zip |
Diffstat (limited to 'src')
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) {} |