diff options
author | Martin Odersky <odersky@gmail.com> | 2005-05-11 13:26:06 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2005-05-11 13:26:06 +0000 |
commit | 88a54be387762d1fdf96a8a128c84e95e613873c (patch) | |
tree | bfa66bd637aa0d44e40631403a4b879ccb6e98d4 /sources/scala/tools/nsc/symtab/Definitions.scala | |
parent | cb6e13ecc4c8f011709d971519ac8aec57b7497a (diff) | |
download | scala-88a54be387762d1fdf96a8a128c84e95e613873c.tar.gz scala-88a54be387762d1fdf96a8a128c84e95e613873c.tar.bz2 scala-88a54be387762d1fdf96a8a128c84e95e613873c.zip |
*** empty log message ***
Diffstat (limited to 'sources/scala/tools/nsc/symtab/Definitions.scala')
-rwxr-xr-x | sources/scala/tools/nsc/symtab/Definitions.scala | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/sources/scala/tools/nsc/symtab/Definitions.scala b/sources/scala/tools/nsc/symtab/Definitions.scala index bc78fb2ad8..9b51dfe620 100755 --- a/sources/scala/tools/nsc/symtab/Definitions.scala +++ b/sources/scala/tools/nsc/symtab/Definitions.scala @@ -62,7 +62,10 @@ abstract class Definitions: SymbolTable { var NilModule: Symbol = _; var ConsClass: Symbol = _; var RepeatedParamClass: Symbol = _; + var ByNameParamClass: Symbol = _; + val MaxTupleArity = 9; + val MaxFunctionArity = 9; def TupleClass(i: int): Symbol = getClass("scala.Tuple" + i); def FunctionClass(i: int): Symbol = getClass("scala.Function" + i); @@ -128,6 +131,15 @@ abstract class Definitions: SymbolTable { clazz } + private def newCovariantPolyClass(owner: Symbol, name: Name, parent: Symbol => Type): Symbol = { + val clazz = newClass(owner, name, List()); + val tparam = newTypeParam(clazz, 0) setFlag COVARIANT; + clazz.setInfo( + PolyType( + List(tparam), + ClassInfoType(List(parent(tparam)), new Scope(), clazz))) + } + private def newAlias(owner: Symbol, name: Name, alias: Type): Symbol = { val tpsym = owner.newAliasType(Position.NOPOS, name.toTypeName); tpsym.setInfo(alias); @@ -212,16 +224,11 @@ abstract class Definitions: SymbolTable { MatchErrorModule = getModule("scala.MatchError"); NilModule = getModule("scala.Nil"); ConsClass = getClass("scala.$colon$colon"); - RepeatedParamClass = newClass(ScalaPackageClass, nme.REPEATED_PARAM_CLASS_NAME, List()); - { val tparam = newTypeParam(RepeatedParamClass, 0); - RepeatedParamClass.setInfo( - PolyType( - List(tparam), - ClassInfoType( - List(typeRef(SeqClass.typeConstructor.prefix, SeqClass, List(tparam.typeConstructor))), - new Scope(), - RepeatedParamClass))) - } + RepeatedParamClass = newCovariantPolyClass( + ScalaPackageClass, nme.REPEATED_PARAM_CLASS_NAME, + tparam => typeRef(SeqClass.typeConstructor.prefix, SeqClass, List(tparam.typeConstructor))); + ByNameParamClass = newCovariantPolyClass( + ScalaPackageClass, nme.BYNAME_PARAM_CLASS_NAME, tparam => AnyClass.typeConstructor); // members of class scala.Any Any_== = newMethod( |