From 0bef86d8e8b7ea7ebb790ebcec7fedcb9a24f5a8 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Thu, 9 Mar 2006 17:50:10 +0000 Subject: performed some renamings in the compiler & library All -> Bottom AllRef -> Null mixin class -> trait --- .../scala/tools/nsc/CompilationUnits.scala | 2 +- src/compiler/scala/tools/nsc/EvalLoop.scala | 2 +- .../scala/tools/nsc/ast/TreePrinters.scala | 4 ++-- src/compiler/scala/tools/nsc/ast/Trees.scala | 10 ++++----- .../scala/tools/nsc/ast/parser/MarkupParsers.scala | 2 +- .../scala/tools/nsc/ast/parser/Parsers.scala | 26 +++++++++------------- .../scala/tools/nsc/ast/parser/Scanners.scala | 10 +++++++-- .../scala/tools/nsc/ast/parser/Tokens.scala | 1 - .../tools/nsc/backend/WorklistAlgorithm.scala | 2 +- .../tools/nsc/backend/icode/BasicBlocks.scala | 2 +- .../nsc/backend/icode/ExceptionHandlers.scala | 2 +- .../tools/nsc/backend/icode/Linearizers.scala | 2 +- .../scala/tools/nsc/backend/icode/Members.scala | 2 +- .../scala/tools/nsc/backend/icode/Opcodes.scala | 2 +- .../scala/tools/nsc/backend/icode/Primitives.scala | 2 +- .../scala/tools/nsc/backend/icode/TypeKinds.scala | 2 +- .../scala/tools/nsc/backend/icode/TypeStacks.scala | 2 +- src/compiler/scala/tools/nsc/doc/DocUtil.scala | 2 +- src/compiler/scala/tools/nsc/models/Models.scala | 6 ++--- .../scala/tools/nsc/models/SemanticTokens.scala | 4 ++-- .../scala/tools/nsc/symtab/Constants.scala | 2 +- .../scala/tools/nsc/symtab/Definitions.scala | 6 ++--- src/compiler/scala/tools/nsc/symtab/Flags.scala | 8 +++---- .../scala/tools/nsc/symtab/InfoTransformers.scala | 2 +- src/compiler/scala/tools/nsc/symtab/Scopes.scala | 2 +- src/compiler/scala/tools/nsc/symtab/StdNames.scala | 2 +- src/compiler/scala/tools/nsc/symtab/Symbols.scala | 14 +++++++----- src/compiler/scala/tools/nsc/symtab/Types.scala | 4 ++-- .../nsc/symtab/classfile/ClassfileParser.scala | 2 +- .../scala/tools/nsc/transform/AddInterfaces.scala | 2 +- .../scala/tools/nsc/transform/Erasure.scala | 2 +- .../scala/tools/nsc/transform/ExplicitOuter.scala | 12 +++++----- src/compiler/scala/tools/nsc/transform/Mixin.scala | 8 +++---- .../scala/tools/nsc/typechecker/Analyzer.scala | 2 +- .../scala/tools/nsc/typechecker/Codification.scala | 2 +- .../scala/tools/nsc/typechecker/Contexts.scala | 2 +- .../scala/tools/nsc/typechecker/EtaExpansion.scala | 2 +- .../scala/tools/nsc/typechecker/Infer.scala | 2 +- .../scala/tools/nsc/typechecker/Namers.scala | 8 +++---- .../scala/tools/nsc/typechecker/RefChecks.scala | 8 +++---- .../tools/nsc/typechecker/SuperAccessors.scala | 2 +- .../tools/nsc/typechecker/SyntheticMethods.scala | 2 +- .../scala/tools/nsc/typechecker/Typers.scala | 13 +++++------ .../scala/tools/nsc/typechecker/Variances.scala | 2 +- src/library/scala/Application.scala | 2 +- src/library/scala/BufferedIterator.scala | 4 ++-- src/library/scala/CaseClass.scala | 2 +- src/library/scala/CountedIterator.scala | 2 +- src/library/scala/Function0.scala | 2 +- src/library/scala/Function1.scala | 2 +- src/library/scala/Function2.scala | 2 +- src/library/scala/Function3.scala | 2 +- src/library/scala/Function4.scala | 2 +- src/library/scala/Function5.scala | 2 +- src/library/scala/Function6.scala | 2 +- src/library/scala/Function7.scala | 2 +- src/library/scala/Function8.scala | 2 +- src/library/scala/Function9.scala | 2 +- src/library/scala/Iterable.scala | 2 +- src/library/scala/IterableProxy.scala | 2 +- src/library/scala/Iterator.scala | 2 +- src/library/scala/List.scala | 4 ++-- src/library/scala/MatchError.scala | 3 ++- src/library/scala/None.scala | 20 ----------------- src/library/scala/Option.scala | 18 ++++++++++++++- src/library/scala/Ordered.scala | 2 +- src/library/scala/PartialFunction.scala | 2 +- src/library/scala/PartiallyOrdered.scala | 2 +- src/library/scala/Predef.scala | 9 +++++--- src/library/scala/Proxy.scala | 2 +- src/library/scala/ScalaObject.scala | 2 +- src/library/scala/SeqProxy.scala | 2 +- src/library/scala/Some.scala | 21 ----------------- src/library/scala/Stream.scala | 6 ++--- .../collection/mutable/DoubleLinkedList.scala | 2 +- .../collection/mutable/SingleLinkedList.scala | 2 +- src/library/scala/concurrent/MailBox.scala | 2 +- .../scala/dbc/datatype/CharacterString.scala | 8 +++---- src/library/scala/runtime/ScalaRunTime.scala | 2 +- 79 files changed, 160 insertions(+), 183 deletions(-) delete mode 100644 src/library/scala/None.scala delete mode 100644 src/library/scala/Some.scala (limited to 'src') diff --git a/src/compiler/scala/tools/nsc/CompilationUnits.scala b/src/compiler/scala/tools/nsc/CompilationUnits.scala index 30a4e77064..d22e3abfa5 100644 --- a/src/compiler/scala/tools/nsc/CompilationUnits.scala +++ b/src/compiler/scala/tools/nsc/CompilationUnits.scala @@ -10,7 +10,7 @@ import scala.tools.nsc.util.FreshNameCreator; import scala.tools.util.AbstractFile; import scala.collection.mutable.HashSet; -mixin class CompilationUnits requires Global { +trait CompilationUnits requires Global { class CompilationUnit(val source: SourceFile, val mixinOnly: boolean) { diff --git a/src/compiler/scala/tools/nsc/EvalLoop.scala b/src/compiler/scala/tools/nsc/EvalLoop.scala index fc6c30f27a..12e9fdeb18 100644 --- a/src/compiler/scala/tools/nsc/EvalLoop.scala +++ b/src/compiler/scala/tools/nsc/EvalLoop.scala @@ -1,6 +1,6 @@ package scala.tools.nsc; -mixin class EvalLoop { +trait EvalLoop { def prompt: String; diff --git a/src/compiler/scala/tools/nsc/ast/TreePrinters.scala b/src/compiler/scala/tools/nsc/ast/TreePrinters.scala index d0ccc76479..3477a84f03 100644 --- a/src/compiler/scala/tools/nsc/ast/TreePrinters.scala +++ b/src/compiler/scala/tools/nsc/ast/TreePrinters.scala @@ -118,9 +118,9 @@ abstract class TreePrinters { case ClassDef(mods, name, tparams, tp, impl) => printAttributes(tree.symbol.attributes); printModifiers(tree, mods); - print("class " + symName(tree, name)); + print((if (mods hasFlag TRAIT) "trait " else "class ") + symName(tree, name)); printTypeParams(tparams); - printOpt(": ", tp); print(" extends "); print(impl); + printOpt("requires ", tp); print(" extends "); print(impl); case PackageDef(packaged, stats) => print("package "); print(packaged); printColumn(stats, " {", ";", "}") diff --git a/src/compiler/scala/tools/nsc/ast/Trees.scala b/src/compiler/scala/tools/nsc/ast/Trees.scala index e95d41bdd6..763e53d606 100644 --- a/src/compiler/scala/tools/nsc/ast/Trees.scala +++ b/src/compiler/scala/tools/nsc/ast/Trees.scala @@ -12,7 +12,7 @@ import scala.tools.nsc.util.{Position,SourceFile}; import symtab.Flags._; -mixin class Trees requires Global { +trait Trees requires Global { //statistics var nodeCount = 0; @@ -27,7 +27,7 @@ mixin class Trees requires Global { def isCase = ((flags & CASE ) != 0); def isSealed = ((flags & SEALED) != 0); def isFinal = ((flags & FINAL ) != 0); - def isMixin = ((flags & MIXIN ) != 0); + def isTrait = ((flags & TRAIT ) != 0); def isPublic = !isPrivate && !isProtected; def hasFlag(flag: int) = (flags & flag) != 0; def | (flag: int): Modifiers = { @@ -90,7 +90,7 @@ mixin class Trees requires Global { } } - mixin class SymTree extends Tree { + trait SymTree extends Tree { override def hasSymbol = true; override var symbol: Symbol = NoSymbol; } @@ -100,11 +100,11 @@ mixin class Trees requires Global { override def isDef = true; } - mixin class TermTree extends Tree { + trait TermTree extends Tree { override def isTerm = true } - mixin class TypTree extends Tree { + trait TypTree extends Tree { override def isType = true } diff --git a/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala b/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala index a74d6d4ba1..252288f750 100644 --- a/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala @@ -11,7 +11,7 @@ import scala.tools.nsc.util.Position; import scala.xml.{Text,TextBuffer}; -mixin class MarkupParsers requires SyntaxAnalyzer { +trait MarkupParsers requires SyntaxAnalyzer { import global._ ; import posAssigner.atPos; diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala index c02d59ce86..fe2eebb66a 100644 --- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala @@ -38,7 +38,7 @@ import Tokens._; * (4) Wraps naked case definitions in a match as follows: * { cases } ==> (x => x.match {cases}), except when already argument to match */ -mixin class Parsers requires SyntaxAnalyzer { +trait Parsers requires SyntaxAnalyzer { import global._; import posAssigner.atPos; @@ -157,7 +157,7 @@ mixin class Parsers requires SyntaxAnalyzer { def isDefIntro: boolean = in.token match { case VAL | VAR | DEF | TYPE | OBJECT | - CASEOBJECT | CLASS | CASECLASS | MIXIN | TRAIT => true + CASEOBJECT | CLASS | CASECLASS | TRAIT => true case _ => false } @@ -324,8 +324,7 @@ mixin class Parsers requires SyntaxAnalyzer { in.nextToken(); name } else { - if (settings.migrate.value && - in.token == REQUIRES || in.token == IMPLICIT || in.token == MIXIN) + if (settings.migrate.value && in.token == REQUIRES || in.token == IMPLICIT) syntaxErrorMigrate(""+in+" is now a reserved word; cannot be used as identifier"); accept(IDENTIFIER); nme.ERROR @@ -852,7 +851,7 @@ mixin class Parsers requires SyntaxAnalyzer { if (settings.migrate.value) { if (in.token == MATCH) syntaxErrorMigrate("`match' must be preceded by a selector expression") - else if (in.token == REQUIRES || in.token == IMPLICIT || in.token == MIXIN) + else if (in.token == REQUIRES || in.token == IMPLICIT) syntaxErrorMigrate(""+in+" is now a reserved word; cannot be used as identifier"); } syntaxError("illegal start of simple expression", true); @@ -1101,7 +1100,7 @@ mixin class Parsers requires SyntaxAnalyzer { r case _ => if (settings.migrate.value && - in.token == REQUIRES || in.token == IMPLICIT || in.token == MIXIN) + in.token == REQUIRES || in.token == IMPLICIT) syntaxErrorMigrate(""+in+" is now a reserved word; cannot be used as identifier"); syntaxError("illegal start of simple pattern", true); errorPatternTree @@ -1575,15 +1574,11 @@ mixin class Parsers requires SyntaxAnalyzer { /** TmplDef ::= [case] class ClassDef * | [case] object ObjectDef - * | ([mixin class | trait]) MixinClassDef + * | trait MixinClassDef */ def tmplDef(mods: Modifiers): Tree = in.token match { case TRAIT => - classDef(mods | Flags.MIXIN | Flags.ABSTRACT); - case MIXIN => - in.nextToken(); - if (in.token != CLASS) accept(CLASS); - classDef(mods | Flags.MIXIN | Flags.ABSTRACT); + classDef(mods | Flags.TRAIT | Flags.ABSTRACT); case CLASS => classDef(mods); case CASECLASS => @@ -1609,7 +1604,7 @@ mixin class Parsers requires SyntaxAnalyzer { val vparamss = paramClauses(name, implicitViews.toList, mods.hasFlag(Flags.CASE)); val thistpe = requiresTypeOpt(); val template = classTemplate(mods, name, vparamss); - val mods1 = if (mods.hasFlag(Flags.MIXIN) && (template.body forall treeInfo.isInterfaceMember)) + val mods1 = if (mods.hasFlag(Flags.TRAIT) && (template.body forall treeInfo.isInterfaceMember)) mods | Flags.INTERFACE else mods; ClassDef(mods1, name, tparams, thistpe, template) @@ -1666,7 +1661,7 @@ mixin class Parsers requires SyntaxAnalyzer { var body = if (in.token == LBRACE) templateBody() else { acceptEmptyTemplateBody("`{' expected"); List() } - if (!mods.hasFlag(Flags.MIXIN)) Template(ps, vparamss, argss.toList, body) + if (!mods.hasFlag(Flags.TRAIT)) Template(ps, vparamss, argss.toList, body) else Template(ps, body) } @@ -1721,7 +1716,6 @@ mixin class Parsers requires SyntaxAnalyzer { } else if (in.token == CLASS || in.token == CASECLASS || in.token == TRAIT || - in.token == MIXIN || in.token == OBJECT || in.token == CASEOBJECT || in.token == LBRACKET || @@ -1800,7 +1794,7 @@ mixin class Parsers requires SyntaxAnalyzer { case _ => false } - if (attrs exists isMixinAttribute) Flags.MIXIN else 0 + if (attrs exists isMixinAttribute) Flags.TRAIT else 0 } def joinAttributes(attrs: List[Tree], defs: List[Tree]): List[Tree] = diff --git a/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala b/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala index 1266252ffd..a38153f28c 100644 --- a/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala @@ -10,7 +10,7 @@ import scala.tools.nsc.util.{Position, SourceFile} import SourceFile.{LF, FF, CR, SU} import scala.tools.nsc.util.CharArrayReader -mixin class Scanners requires SyntaxAnalyzer { +trait Scanners requires SyntaxAnalyzer { import global._ @@ -167,6 +167,13 @@ mixin class Scanners requires SyntaxAnalyzer { next.copyFrom(this) this.copyFrom(prev) } + } else if (token == IDENTIFIER && name == nme.MIXINkw) { //todo: remove eventually + prev.copyFrom(this); + fetchToken(); + if (token == CLASS) + unit.warning(pos, "`mixin' is no longer a reserved word; you should use `trait' instead of `mixin class'"); + next.copyFrom(this) + this.copyFrom(prev) } if (afterLineEnd() && inLastOfStat(lastToken) && inFirstOfStat(token) && @@ -786,7 +793,6 @@ mixin class Scanners requires SyntaxAnalyzer { enterKeyword(nme.IMPLICITkw, IMPLICIT) enterKeyword(nme.IMPORTkw, IMPORT) enterKeyword(nme.MATCHkw, MATCH) - enterKeyword(nme.MIXINkw, MIXIN) enterKeyword(nme.NEWkw, NEW) enterKeyword(nme.NULLkw, NULL) enterKeyword(nme.OBJECTkw, OBJECT) diff --git a/src/compiler/scala/tools/nsc/ast/parser/Tokens.scala b/src/compiler/scala/tools/nsc/ast/parser/Tokens.scala index 2f07497ede..b99ee08811 100644 --- a/src/compiler/scala/tools/nsc/ast/parser/Tokens.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/Tokens.scala @@ -67,7 +67,6 @@ object Tokens { final val RETURN = 57; final val MATCH = 58; final val REQUIRES = 59; - final val MIXIN = 60; /** special symbols */ final val COMMA = 61; diff --git a/src/compiler/scala/tools/nsc/backend/WorklistAlgorithm.scala b/src/compiler/scala/tools/nsc/backend/WorklistAlgorithm.scala index 3a13767900..d6b81a84fe 100644 --- a/src/compiler/scala/tools/nsc/backend/WorklistAlgorithm.scala +++ b/src/compiler/scala/tools/nsc/backend/WorklistAlgorithm.scala @@ -22,7 +22,7 @@ import scala.collection.mutable.MutableList; * * @see scala.tools.nsc.backend.icode.Linearizers */ -mixin class WorklistAlgorithm { +trait WorklistAlgorithm { type Elem; type WList <: MutableList[Elem]; diff --git a/src/compiler/scala/tools/nsc/backend/icode/BasicBlocks.scala b/src/compiler/scala/tools/nsc/backend/icode/BasicBlocks.scala index aa42da4273..0c9d6dc2c3 100644 --- a/src/compiler/scala/tools/nsc/backend/icode/BasicBlocks.scala +++ b/src/compiler/scala/tools/nsc/backend/icode/BasicBlocks.scala @@ -11,7 +11,7 @@ import scala.tools.nsc.ast._; import scala.collection.mutable.Map; import scala.tools.nsc.util.Position; -mixin class BasicBlocks requires ICodes { +trait BasicBlocks requires ICodes { import opcodes._; /** This class represents a basic block. Each diff --git a/src/compiler/scala/tools/nsc/backend/icode/ExceptionHandlers.scala b/src/compiler/scala/tools/nsc/backend/icode/ExceptionHandlers.scala index 1e80d0eac0..aa20ecb932 100644 --- a/src/compiler/scala/tools/nsc/backend/icode/ExceptionHandlers.scala +++ b/src/compiler/scala/tools/nsc/backend/icode/ExceptionHandlers.scala @@ -17,7 +17,7 @@ import scala.collection.mutable.HashSet; * all our handlers will catch `Throwable' and rely on proper ordering * in the generated code to preserve nesting. */ -mixin class ExceptionHandlers requires ICodes { +trait ExceptionHandlers requires ICodes { import global.{Symbol, NoSymbol}; class ExceptionHandler(val method: IMethod, label: String, val cls: Symbol) { diff --git a/src/compiler/scala/tools/nsc/backend/icode/Linearizers.scala b/src/compiler/scala/tools/nsc/backend/icode/Linearizers.scala index c0b6ada3c3..ff4a2d4a0a 100644 --- a/src/compiler/scala/tools/nsc/backend/icode/Linearizers.scala +++ b/src/compiler/scala/tools/nsc/backend/icode/Linearizers.scala @@ -10,7 +10,7 @@ package scala.tools.nsc.backend.icode; import scala.tools.nsc.ast._; import scala.collection.mutable.{Stack, HashSet}; -mixin class Linearizers requires ICodes { +trait Linearizers requires ICodes { import opcodes._; abstract class Linearizer { diff --git a/src/compiler/scala/tools/nsc/backend/icode/Members.scala b/src/compiler/scala/tools/nsc/backend/icode/Members.scala index 02af695f37..e9e6445185 100644 --- a/src/compiler/scala/tools/nsc/backend/icode/Members.scala +++ b/src/compiler/scala/tools/nsc/backend/icode/Members.scala @@ -13,7 +13,7 @@ import scala.{Symbol => scala_Symbol}; import scala.tools.nsc.symtab.Flags; -mixin class Members requires ICodes { +trait Members requires ICodes { import global._; /** diff --git a/src/compiler/scala/tools/nsc/backend/icode/Opcodes.scala b/src/compiler/scala/tools/nsc/backend/icode/Opcodes.scala index 57fa0ff327..912358762c 100644 --- a/src/compiler/scala/tools/nsc/backend/icode/Opcodes.scala +++ b/src/compiler/scala/tools/nsc/backend/icode/Opcodes.scala @@ -48,7 +48,7 @@ import scala.tools.nsc.util.Position; * erased types of Scala and references Symbols to refer named entities * in the source files. */ -mixin class Opcodes requires ICodes { +trait Opcodes requires ICodes { import global.{Symbol, NoSymbol, Type, Name, Constant}; /** This class represents an instruction of the intermediate code. diff --git a/src/compiler/scala/tools/nsc/backend/icode/Primitives.scala b/src/compiler/scala/tools/nsc/backend/icode/Primitives.scala index b134819853..c07b7b0829 100644 --- a/src/compiler/scala/tools/nsc/backend/icode/Primitives.scala +++ b/src/compiler/scala/tools/nsc/backend/icode/Primitives.scala @@ -9,7 +9,7 @@ package scala.tools.nsc.backend.icode; import java.io.PrintWriter; -mixin class Primitives requires ICodes { +trait Primitives requires ICodes { /** This class represents a primitive operation. */ class Primitive { diff --git a/src/compiler/scala/tools/nsc/backend/icode/TypeKinds.scala b/src/compiler/scala/tools/nsc/backend/icode/TypeKinds.scala index 362aeb9100..ce2895c8c7 100644 --- a/src/compiler/scala/tools/nsc/backend/icode/TypeKinds.scala +++ b/src/compiler/scala/tools/nsc/backend/icode/TypeKinds.scala @@ -25,7 +25,7 @@ package scala.tools.nsc.backend.icode; import scala.collection.mutable.{Map, HashMap}; -mixin class TypeKinds requires ICodes { +trait TypeKinds requires ICodes { import global._; /** This class represents a type kind. Type kinds diff --git a/src/compiler/scala/tools/nsc/backend/icode/TypeStacks.scala b/src/compiler/scala/tools/nsc/backend/icode/TypeStacks.scala index 6aa8507c57..69f1f34cb7 100644 --- a/src/compiler/scala/tools/nsc/backend/icode/TypeStacks.scala +++ b/src/compiler/scala/tools/nsc/backend/icode/TypeStacks.scala @@ -9,7 +9,7 @@ package scala.tools.nsc.backend.icode; import scala.tools.nsc.backend.icode.Primitives; -mixin class TypeStacks requires ICodes { +trait TypeStacks requires ICodes { import opcodes._; import global.{Symbol, Type, definitions}; diff --git a/src/compiler/scala/tools/nsc/doc/DocUtil.scala b/src/compiler/scala/tools/nsc/doc/DocUtil.scala index c88b1cac35..e7a0d6cf88 100644 --- a/src/compiler/scala/tools/nsc/doc/DocUtil.scala +++ b/src/compiler/scala/tools/nsc/doc/DocUtil.scala @@ -26,7 +26,7 @@ object DocUtil { nodes.concat(x) } - mixin class UrlContext { + trait UrlContext { def relative: String def aref(href0: String, target: String, text: String): NodeSeq = { diff --git a/src/compiler/scala/tools/nsc/models/Models.scala b/src/compiler/scala/tools/nsc/models/Models.scala index f89e2da145..65eb769d67 100644 --- a/src/compiler/scala/tools/nsc/models/Models.scala +++ b/src/compiler/scala/tools/nsc/models/Models.scala @@ -47,7 +47,7 @@ abstract class Models { if (mods . isCase ) modString = "case" :: modString; if (mods . isSealed ) modString = "sealed" :: modString; if (mods . isFinal ) modString = "final" :: modString; - if (mods . isMixin ) modString = "mixin" :: modString; + if (mods . isTrait ) modString = "mixin" :: modString; modString; } @@ -161,7 +161,7 @@ abstract class Models { def treex = tree.asInstanceOf[PackageDef]; } - mixin class Composite extends Model { + trait Composite extends Model { import scala.collection.mutable._; @@ -245,7 +245,7 @@ abstract class Models { } abstract class MemberComposite(parent0: Composite) extends MemberMod(parent0) with Composite; - mixin class HasClassObjects extends Composite { + trait HasClassObjects extends Composite { override def isMember(tree : Tree) : Boolean = (super.isMember(tree) || (tree.isInstanceOf[ImplDef])); } diff --git a/src/compiler/scala/tools/nsc/models/SemanticTokens.scala b/src/compiler/scala/tools/nsc/models/SemanticTokens.scala index ef8f60e6c8..c345226633 100644 --- a/src/compiler/scala/tools/nsc/models/SemanticTokens.scala +++ b/src/compiler/scala/tools/nsc/models/SemanticTokens.scala @@ -50,12 +50,12 @@ class SemanticTokens(val compiler: Global) { else pos; } - mixin class HasNext extends Token { + trait HasNext extends Token { var next0: HasPrev = _; def next = next0; } - mixin class HasPrev extends Token { + trait HasPrev extends Token { var prev0: HasNext = _; def prev = prev0; } diff --git a/src/compiler/scala/tools/nsc/symtab/Constants.scala b/src/compiler/scala/tools/nsc/symtab/Constants.scala index 48a0c0bdf0..263a02a46a 100644 --- a/src/compiler/scala/tools/nsc/symtab/Constants.scala +++ b/src/compiler/scala/tools/nsc/symtab/Constants.scala @@ -9,7 +9,7 @@ package scala.tools.nsc.symtab; import classfile.PickleFormat._; -mixin class Constants requires SymbolTable { +trait Constants requires SymbolTable { import definitions._; diff --git a/src/compiler/scala/tools/nsc/symtab/Definitions.scala b/src/compiler/scala/tools/nsc/symtab/Definitions.scala index 4d2c3466f9..81a9448ddd 100644 --- a/src/compiler/scala/tools/nsc/symtab/Definitions.scala +++ b/src/compiler/scala/tools/nsc/symtab/Definitions.scala @@ -9,7 +9,7 @@ import scala.tools.nsc.util.Position; import collection.mutable.HashMap; import Flags._; -mixin class Definitions requires SymbolTable { +trait Definitions requires SymbolTable { object definitions { def isDefinitionsInitialized = isInitialized; @@ -318,10 +318,10 @@ mixin class Definitions requires SymbolTable { AnyRefClass = newAlias(ScalaPackageClass, "AnyRef", ObjectClass.typeConstructor); AllRefClass = newClass(ScalaPackageClass, "AllRef", List(AnyRefClass.typeConstructor)) - .setFlag(ABSTRACT | MIXIN | FINAL); + .setFlag(ABSTRACT | TRAIT | FINAL); AllClass = newClass(ScalaPackageClass, "All", List(AnyClass.typeConstructor)) - .setFlag(ABSTRACT | MIXIN | FINAL); + .setFlag(ABSTRACT | TRAIT | FINAL); StringClass = getClass("java.lang.String"); ThrowableClass = getClass("java.lang.Throwable"); diff --git a/src/compiler/scala/tools/nsc/symtab/Flags.scala b/src/compiler/scala/tools/nsc/symtab/Flags.scala index 2c9bc04b69..d54a12159b 100644 --- a/src/compiler/scala/tools/nsc/symtab/Flags.scala +++ b/src/compiler/scala/tools/nsc/symtab/Flags.scala @@ -48,7 +48,7 @@ object Flags { final val STATIC = 0x00800000; // static field, method or class final val CASEACCESSOR = 0x01000000; // symbol is a case parameter (or its accessor) - final val MIXIN = 0x02000000; // symbol is a mixin class + final val TRAIT = 0x02000000; // symbol is a trait final val BRIDGE = 0x04000000; // function is a bridge method. Set by Erasure final val ACCESSOR = 0x08000000; // a value or variable accessor @@ -99,8 +99,8 @@ object Flags { final val TopLevelCreationFlags = MODULE | PACKAGE | FINAL | JAVA; - final val ExplicitFlags = // these modifiers can be set explicitly in source programs. - PRIVATE | PROTECTED | ABSTRACT | MIXIN | FINAL | SEALED | OVERRIDE | CASE | IMPLICIT | ABSOVERRIDE; + final val ExplicitFlags = // these modifiers can be set explicitly in source programs. + PRIVATE | PROTECTED | ABSTRACT | FINAL | SEALED | OVERRIDE | CASE | IMPLICIT | ABSOVERRIDE; final val PrintableFlags = // these modifiers appear in TreePrinter output. (ExplicitFlags | LOCAL | SYNTHETIC | STABLE | CASEACCESSOR | ACCESSOR | @@ -161,7 +161,7 @@ object Flags { case STATIC => "" case CASEACCESSOR => "" - case MIXIN => "mixin" + case TRAIT => "" case BRIDGE => "" case ACCESSOR => "" diff --git a/src/compiler/scala/tools/nsc/symtab/InfoTransformers.scala b/src/compiler/scala/tools/nsc/symtab/InfoTransformers.scala index 87f4ba7b12..bf01d4419a 100644 --- a/src/compiler/scala/tools/nsc/symtab/InfoTransformers.scala +++ b/src/compiler/scala/tools/nsc/symtab/InfoTransformers.scala @@ -5,7 +5,7 @@ // $Id$ package scala.tools.nsc.symtab; -mixin class InfoTransformers requires SymbolTable { +trait InfoTransformers requires SymbolTable { abstract class InfoTransformer { var prev: InfoTransformer = this; diff --git a/src/compiler/scala/tools/nsc/symtab/Scopes.scala b/src/compiler/scala/tools/nsc/symtab/Scopes.scala index 921d9f9cc0..a0f577c9a5 100644 --- a/src/compiler/scala/tools/nsc/symtab/Scopes.scala +++ b/src/compiler/scala/tools/nsc/symtab/Scopes.scala @@ -5,7 +5,7 @@ // $Id$ package scala.tools.nsc.symtab; -mixin class Scopes requires SymbolTable { +trait Scopes requires SymbolTable { class ScopeEntry(val sym: Symbol, val owner: Scope) { diff --git a/src/compiler/scala/tools/nsc/symtab/StdNames.scala b/src/compiler/scala/tools/nsc/symtab/StdNames.scala index 3bf7478a49..17f94dee33 100644 --- a/src/compiler/scala/tools/nsc/symtab/StdNames.scala +++ b/src/compiler/scala/tools/nsc/symtab/StdNames.scala @@ -7,7 +7,7 @@ package scala.tools.nsc.symtab; import scala.tools.nsc.util.NameTransformer; -mixin class StdNames requires SymbolTable { +trait StdNames requires SymbolTable { object nme { diff --git a/src/compiler/scala/tools/nsc/symtab/Symbols.scala b/src/compiler/scala/tools/nsc/symtab/Symbols.scala index ea85974721..a327a0e053 100644 --- a/src/compiler/scala/tools/nsc/symtab/Symbols.scala +++ b/src/compiler/scala/tools/nsc/symtab/Symbols.scala @@ -10,7 +10,7 @@ import scala.tools.util.AbstractFile; import scala.tools.nsc.util.{Position, SourceFile}; import Flags._; -mixin class Symbols requires SymbolTable { +trait Symbols requires SymbolTable { import definitions._; private var ids = 0; @@ -174,7 +174,7 @@ mixin class Symbols requires SymbolTable { final def isThisSym = isTerm && name == nme.this_; final def isThisSkolem = isTerm && deSkolemize != this; final def isError = hasFlag(IS_ERROR); - final def isMixin = isClass & hasFlag(MIXIN); + final def isTrait = isClass & hasFlag(TRAIT); final def isAliasType = isType && !isClass && !hasFlag(DEFERRED); final def isAbstractType = isType && !isClass && hasFlag(DEFERRED); final def isTypeParameterOrSkolem = isType && hasFlag(PARAM); @@ -202,11 +202,11 @@ mixin class Symbols requires SymbolTable { final def isImplClass: boolean = isClass && hasFlag(IMPLCLASS); final def needsImplClass: boolean = - isMixin && (!hasFlag(INTERFACE) || hasFlag(lateINTERFACE)) && !isImplClass; + isTrait && (!hasFlag(INTERFACE) || hasFlag(lateINTERFACE)) && !isImplClass; final def isImplOnly: boolean = ( hasFlag(PRIVATE) || - (owner.isImplClass || owner.isMixin) && + (owner.isImplClass || owner.isTrait) && (hasFlag(notPRIVATE | LIFTED) && !hasFlag(ACCESSOR | SUPERACCESSOR) || isConstructor) ); @@ -532,7 +532,7 @@ mixin class Symbols requires SymbolTable { /** The primary constructor of a class */ def primaryConstructor: Symbol = { - val c = info.decl(if (isMixin || isImplClass) nme.MIXIN_CONSTRUCTOR else nme.CONSTRUCTOR); + val c = info.decl(if (isTrait || isImplClass) nme.MIXIN_CONSTRUCTOR else nme.CONSTRUCTOR); if (c hasFlag OVERLOADED) c.alternatives.head else c } @@ -709,7 +709,8 @@ mixin class Symbols requires SymbolTable { /** String representation of symbol's definition key word */ final def keyString: String = - if (isMixin && hasFlag(JAVA)) "interface" + if (isTrait && hasFlag(JAVA)) "interface" + else if (isTrait) "trait" else if (isClass) "class" else if (isType && !hasFlag(PARAM)) "type" else if (isVariable) "var" @@ -726,6 +727,7 @@ mixin class Symbols requires SymbolTable { else if (isAnonymousClass) "