summaryrefslogtreecommitdiff
path: root/sources/scalac
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2003-08-04 15:36:09 +0000
committerMartin Odersky <odersky@gmail.com>2003-08-04 15:36:09 +0000
commit5cbecc3b89757f6996c199e73518b8387d4a5a6a (patch)
tree83d6522f8172b62e0bced4c4c312c16939d69f6f /sources/scalac
parentf014b416aa6099f9031f60f1ccdb19a9ced74382 (diff)
downloadscala-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.java4
-rw-r--r--sources/scalac/ast/parser/Scanner.java4
-rw-r--r--sources/scalac/ast/parser/Tokens.java20
-rw-r--r--sources/scalac/symtab/Definitions.java4
-rw-r--r--sources/scalac/typechecker/Analyzer.java17
-rw-r--r--sources/scalac/util/Names.java4
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");