diff options
author | Martin Odersky <odersky@gmail.com> | 2003-08-04 15:36:09 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2003-08-04 15:36:09 +0000 |
commit | 5cbecc3b89757f6996c199e73518b8387d4a5a6a (patch) | |
tree | 83d6522f8172b62e0bced4c4c312c16939d69f6f /sources/scalac | |
parent | f014b416aa6099f9031f60f1ccdb19a9ced74382 (diff) | |
download | scala-5cbecc3b89757f6996c199e73518b8387d4a5a6a.tar.gz scala-5cbecc3b89757f6996c199e73518b8387d4a5a6a.tar.bz2 scala-5cbecc3b89757f6996c199e73518b8387d4a5a6a.zip |
*** empty log message ***
Diffstat (limited to 'sources/scalac')
-rw-r--r-- | sources/scalac/ast/parser/Parser.java | 4 | ||||
-rw-r--r-- | sources/scalac/ast/parser/Scanner.java | 4 | ||||
-rw-r--r-- | sources/scalac/ast/parser/Tokens.java | 20 | ||||
-rw-r--r-- | sources/scalac/symtab/Definitions.java | 4 | ||||
-rw-r--r-- | sources/scalac/typechecker/Analyzer.java | 17 | ||||
-rw-r--r-- | sources/scalac/util/Names.java | 4 |
6 files changed, 30 insertions, 23 deletions
diff --git a/sources/scalac/ast/parser/Parser.java b/sources/scalac/ast/parser/Parser.java index afb5d8abbe..fc544b50d4 100644 --- a/sources/scalac/ast/parser/Parser.java +++ b/sources/scalac/ast/parser/Parser.java @@ -867,10 +867,6 @@ public class Parser implements Tokens { int pos = s.skipToken(); Tree tp = type1(); t = make.Typed(pos, t, tp); - } else if (s.token == AS || s.token == IS) { - Name op = (s.token == AS) ? Names.as : Names.is; - int pos = s.skipToken(); - t = make.TypeApply(pos, make.Select(pos, t, op), new Tree[]{type1()}); } if (s.token == ARROW) { t = make.Function(s.skipToken(), convertToParams(t), expr()); diff --git a/sources/scalac/ast/parser/Scanner.java b/sources/scalac/ast/parser/Scanner.java index 4b070006bc..7ae8840697 100644 --- a/sources/scalac/ast/parser/Scanner.java +++ b/sources/scalac/ast/parser/Scanner.java @@ -129,7 +129,7 @@ public class Scanner extends TokenData { case COMMA: case SEMI: case DOT: case COLON: case EQUALS: case ARROW: case LARROW: case SUBTYPE: case SUPERTYPE: - case HASH: case AT: case AS: case IS: + case HASH: case AT: case RPAREN: case RBRACKET: case RBRACE: break; default: @@ -810,7 +810,6 @@ public class Scanner extends TokenData { protected void initKeywords() { enterKeyword("abstract", ABSTRACT); - enterKeyword("as", AS); enterKeyword("case", CASE); enterKeyword("class", CLASS); enterKeyword("catch", CATCH); @@ -824,7 +823,6 @@ public class Scanner extends TokenData { enterKeyword("for", FOR); enterKeyword("if", IF); enterKeyword("import", IMPORT); - enterKeyword("is", IS); enterKeyword("new", NEW); enterKeyword("null", NULL); enterKeyword("object", OBJECT); diff --git a/sources/scalac/ast/parser/Tokens.java b/sources/scalac/ast/parser/Tokens.java index 9da23bc7e3..3153d4a78d 100644 --- a/sources/scalac/ast/parser/Tokens.java +++ b/sources/scalac/ast/parser/Tokens.java @@ -55,18 +55,16 @@ public interface Tokens { IMPORT = 46, PACKAGE = 47, - AS = 48, - IS = 49, - YIELD = 50, - DO = 51, - TRAIT = 52, - SEALED = 53, + YIELD = 48, + DO = 49, + TRAIT = 50, + SEALED = 51, /* THROW = 54, */ - TRY = 55, - CATCH = 56, - FINALLY = 57, - WHILE = 58, - RETURN = 59, + TRY = 53, + CATCH = 54, + FINALLY = 55, + WHILE = 56, + RETURN = 57, /* special symbols */ COMMA = 61, diff --git a/sources/scalac/symtab/Definitions.java b/sources/scalac/symtab/Definitions.java index 648e253380..9e269348c6 100644 --- a/sources/scalac/symtab/Definitions.java +++ b/sources/scalac/symtab/Definitions.java @@ -318,13 +318,13 @@ public class Definitions { ANY_CLASS.members().enter(MATCH); AS = new TermSymbol( - Position.NOPOS, Names.as, ANY_CLASS, Modifiers.FINAL); + Position.NOPOS, Names.asInstanceOf, ANY_CLASS, Modifiers.FINAL); Symbol tvar = newTypeParameter(AS, ANY_TYPE); AS.setInfo(Type.PolyType(new Symbol[]{tvar}, tvar.type())); ANY_CLASS.members().enter(AS); IS = new TermSymbol( - Position.NOPOS, Names.is, ANY_CLASS, Modifiers.FINAL); + Position.NOPOS, Names.isInstanceOf, ANY_CLASS, Modifiers.FINAL); IS.setInfo(Type.PolyType(new Symbol[]{newTypeParameter(IS, ANY_TYPE)}, BOOLEAN_TYPE)); ANY_CLASS.members().enter(IS); diff --git a/sources/scalac/typechecker/Analyzer.java b/sources/scalac/typechecker/Analyzer.java index f9b0935074..8c334efa8c 100644 --- a/sources/scalac/typechecker/Analyzer.java +++ b/sources/scalac/typechecker/Analyzer.java @@ -1269,7 +1269,22 @@ public class Analyzer extends Transformer implements Modifiers, Kinds { // this works as for superclass constructor calls the expected // type `pt' is always AnyType (see transformConstrInvocations). } - if (!(owntype instanceof Type.PolyType || owntype.isSubType(pt))) { + if (!(owntype instanceof Type.PolyType || + owntype.isSubType(pt))) { + switch (tree) { + case Literal(Object value): + if (value instanceof Integer) { + int n = ((Integer) value).intValue(); + if (pt.symbol() == definitions.BYTE_CLASS && + -128 <= n && n <= 127 || + pt.symbol() == definitions.SHORT_CLASS && + -32768 <= n && n <= 32767 || + pt.symbol() == definitions.CHAR_CLASS && + 0 <= n && n <= 65535) { + return tree.setType(pt); + } + } + } typeError(tree.pos, owntype, pt); Type.explainTypes(owntype, pt); tree.type = Type.ErrorType; diff --git a/sources/scalac/util/Names.java b/sources/scalac/util/Names.java index 8d1ae3964c..c059218230 100644 --- a/sources/scalac/util/Names.java +++ b/sources/scalac/util/Names.java @@ -72,7 +72,7 @@ public class Names { public static final Name Unit = Name.fromString("Unit"); public static final Name While = Name.fromString("While"); public static final Name apply = Name.fromString("apply"); - public static final Name as = Name.fromString("as"); + public static final Name asInstanceOf = Name.fromString("asInstanceOf"); public static final Name box = Name.fromString("box"); public static final Name elem = Name.fromString("elem"); public static final Name elements = Name.fromString("elements"); @@ -83,7 +83,7 @@ public class Names { public static final Name getClass = Name.fromString("getClass"); public static final Name hashCode = Name.fromString("hashCode"); public static final Name hasNext = Name.fromString("hasNext"); - public static final Name is = Name.fromString("is"); + public static final Name isInstanceOf = Name.fromString("isInstanceOf"); public static final Name isDefinedAt = Name.fromString("isDefinedAt"); public static final Name java = Name.fromString("java"); public static final Name java_lang = Name.fromString("java.lang"); |