From faca8cb93fb09150e59108294c9321bf1e690dd7 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Mon, 17 Feb 2003 09:02:01 +0000 Subject: Syntax changes for tuples and sequences; symbols. --- sources/scalac/symtab/Definitions.java | 13 ++++++------- sources/scalac/symtab/Modifiers.java | 15 ++++++++------- sources/scalac/symtab/Symbol.java | 12 ++++++------ sources/scalac/symtab/Type.java | 28 +++++----------------------- 4 files changed, 25 insertions(+), 43 deletions(-) (limited to 'sources/scalac/symtab') diff --git a/sources/scalac/symtab/Definitions.java b/sources/scalac/symtab/Definitions.java index 6d67edac42..f9e5a6f0ec 100644 --- a/sources/scalac/symtab/Definitions.java +++ b/sources/scalac/symtab/Definitions.java @@ -125,6 +125,8 @@ public class Definitions { public final Symbol STRING_CLASS; public final Type STRING_TYPE; + public final Symbol SEQ_CLASS; + /** string concatenation pseudo-methods of classes scala.Any and * java.lang.String */ @@ -261,6 +263,8 @@ public class Definitions { STRING_TYPE = monoType(STRING_CLASS); SCALA.members().enter(STRING_CLASS); + SEQ_CLASS = getClass(Names.scala_Seq); + /* ANY_PLUS_STRING = new TermSymbol( Position.NOPOS, Names.PLUS, ANY_CLASS, Modifiers.FINAL); @@ -410,12 +414,7 @@ public class Definitions { argtps1); } - public Type tupleType(Type[] args) { - assert args.length > 0; - Type[] args1 = new Type[args.length]; - for (int i = 0; i < args.length; i++) - args1[i] = Type.covarType(args[i]); - return Type.appliedType( - getType(Name.fromString("scala.Tuple" + args.length)), args1); + public Type seqType(Type argtpe) { + return Type.appliedType(getType(Names.scala_Seq), new Type[]{argtpe}); } } diff --git a/sources/scalac/symtab/Modifiers.java b/sources/scalac/symtab/Modifiers.java index 3fc119419e..38f5a042d6 100644 --- a/sources/scalac/symtab/Modifiers.java +++ b/sources/scalac/symtab/Modifiers.java @@ -22,13 +22,14 @@ public interface Modifiers { int ABSTRACTCLASS = 0x00000080; // abstract class int DEF = 0x00000100; // a def parameter - int SYNTHETIC = 0x00000200; - int DEPRECATED = 0x00000400; - int JAVA = 0x00000800; // symbol was defined by a Java class - - int MODUL = 0x00001000; // symbol is module or class implementing a module - int MUTABLE = 0x00002000; // symbol is a mutable variable. - int PARAM = 0x00004000; // symbol is a (type) parameter to a method + int REPEATED = 0x00000200; // a repeated parameter + int SYNTHETIC = 0x00000400; + int DEPRECATED = 0x00000800; + + int JAVA = 0x00001000; // symbol was defined by a Java class + int MODUL = 0x00002000; // symbol is module or class implementing a module + int MUTABLE = 0x00004000; // symbol is a mutable variable. + int PARAM = 0x00008000; // symbol is a (type) parameter to a method int INITIALIZED = 0x00010000; // symbol's definition is complete int LOCKED = 0x00020000; // temporary flag to catch cyclic dependencies diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java index f13192848b..4b31aeef9c 100644 --- a/sources/scalac/symtab/Symbol.java +++ b/sources/scalac/symtab/Symbol.java @@ -269,7 +269,7 @@ public abstract class Symbol implements Modifiers, Kinds { /** Is this symbol the primary constructor of a type? */ public final boolean isPrimaryConstructor() { - return isConstructor() && this == constructorClass().constructor(); + return isConstructor() && this == primaryConstructorClass().constructor(); } public boolean isGenerated() { @@ -332,7 +332,7 @@ public abstract class Symbol implements Modifiers, Kinds { */ public Symbol classOwner() { Symbol owner = owner(); - Symbol clazz = owner.constructorClass(); + Symbol clazz = owner.primaryConstructorClass(); if (clazz.constructor() == owner) return clazz; else return owner; } @@ -353,10 +353,10 @@ public abstract class Symbol implements Modifiers, Kinds { return sym; } - /* If this is a constructor, return the class it constructs. + /* If this is a primary constructor, return the class it constructs. * Otherwise return the symbol itself. */ - public Symbol constructorClass() { + public Symbol primaryConstructorClass() { return this; } @@ -874,8 +874,8 @@ public class TermSymbol extends Symbol { return other; } - public Symbol constructorClass() { - return isConstructor() ? clazz : this; + public Symbol primaryConstructorClass() { + return isConstructor() && clazz != null ? clazz : this; } public Symbol moduleClass() { diff --git a/sources/scalac/symtab/Type.java b/sources/scalac/symtab/Type.java index e9d2e93864..54f690f7bb 100644 --- a/sources/scalac/symtab/Type.java +++ b/sources/scalac/symtab/Type.java @@ -428,33 +428,18 @@ public class Type implements Modifiers, Kinds, TypeTags { } } - /** Is this type of the form scala.Tuple_N[+T_0, ..., +T_N-1]? - */ - public boolean isTupleType() { - switch (this) { - case TypeRef(Type pre, Symbol sym, Type[] args): - if (sym.owner() == Global.instance.definitions.SCALA_CLASS && - sym.name.startsWith(Names.Tuple)) { - for (int i = 0; i < args.length; i++) - if (!args[i].isCovarType()) return false; - return true; - } - } - return false; - } - /** Is this type of the form scala.FunctionN[T_1, ..., T_n, +T]? */ public boolean isFunctionType() { switch (this) { case TypeRef(Type pre, Symbol sym, Type[] args): - if (sym.fullName().startsWith(Names.Function)) + if (sym.fullName().startsWith(Names.Function)) { for (int i = 0; i < args.length - 1; i++) if (args[i].isCovarType()) return false; - return args.length > 0 && args[args.length - 1].isCovarType(); - default: - return false; + return args.length > 0 && args[args.length - 1].isCovarType(); + } } + return false; } // Members and Lookup ------------------------------------------------------- @@ -814,7 +799,7 @@ public class Type implements Modifiers, Kinds, TypeTags { if (pre == NoType || clazz.kind != CLASS) return this; Symbol sym = symbol(); - Symbol ownclass = sym.owner().constructorClass(); + Symbol ownclass = sym.owner().primaryConstructorClass(); if (ownclass.isSubClass(clazz) && pre.symbol().isSubClass(ownclass)) { switch (pre.baseType(ownclass)) { @@ -2018,9 +2003,6 @@ public class Type implements Modifiers, Kinds, TypeTags { case TypeRef(Type pre, Symbol sym, Type[] args): if (sym.isRoot()) return ""; if (!Global.instance.debug) { - if (isTupleType()) - return ArrayApply.toString( - dropVarianceMap.map(args), "[", ",", "]"); if (isFunctionType()) { Type[] params = new Type[args.length - 1]; System.arraycopy(args, 0, params, 0, params.length); -- cgit v1.2.3