From 85f0c037086abf0f4687fc7e6303e98bcb714798 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Fri, 8 Apr 2011 15:52:13 +0400 Subject: [PATCH] Safe casts supported --- grammar/src/expressions.grm | 2 +- .../jetbrains/jet/lang/JetHighlighter.java | 1 + .../lang/parsing/JetExpressionParsing.java | 2 +- .../jet/lang/types/JetTypeInferrer.java | 8 +- idea/src/org/jetbrains/jet/lexer/Jet.flex | 1 + .../org/jetbrains/jet/lexer/JetTokens.java | 14 +- .../org/jetbrains/jet/lexer/_JetLexer.java | 497 +++++++++--------- idea/testData/checker/Casts.jet | 16 + idea/testData/psi/Precedence.jet | 6 + idea/testData/psi/Precedence.txt | 181 +++++++ 10 files changed, 474 insertions(+), 254 deletions(-) create mode 100644 idea/testData/checker/Casts.jet diff --git a/grammar/src/expressions.grm b/grammar/src/expressions.grm index eda191c7db3..78021744d51 100644 --- a/grammar/src/expressions.grm +++ b/grammar/src/expressions.grm @@ -139,7 +139,7 @@ inOperation ; typeOperation - : "as" : ":" + : "as" : "as?" : ":" ; isOPeration diff --git a/idea/src/org/jetbrains/jet/lang/JetHighlighter.java b/idea/src/org/jetbrains/jet/lang/JetHighlighter.java index d33bd68f546..0d860195c99 100644 --- a/idea/src/org/jetbrains/jet/lang/JetHighlighter.java +++ b/idea/src/org/jetbrains/jet/lang/JetHighlighter.java @@ -80,6 +80,7 @@ public class JetHighlighter extends SyntaxHighlighterBase { fillMap(keys1, JetTokens.KEYWORDS, JET_KEYWORD); + keys1.put(JetTokens.AS_SAFE, JET_KEYWORD); keys1.put(JetTokens.LABEL_IDENTIFIER, JET_LABEL_IDENTIFIER); keys1.put(JetTokens.ATAT, JET_LABEL_IDENTIFIER); keys1.put(JetTokens.FIELD_IDENTIFIER, JET_FIELD_IDENTIFIER); diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java index a00cc44bb9a..4669b212ea0 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java @@ -99,7 +99,7 @@ public class JetExpressionParsing extends AbstractJetParsing { } }, - COLON_AS(COLON, AS_KEYWORD) { + COLON_AS(COLON, AS_KEYWORD, AS_SAFE) { @Override public JetNodeType parseRightHandSide(IElementType operation, JetExpressionParsing parser) { parser.myJetParsing.parseTypeRef(); diff --git a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java index 8f555f7170b..905e7ece0ef 100644 --- a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java +++ b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java @@ -587,14 +587,20 @@ public class JetTypeInferrer { if (actualType != null && !semanticServices.getTypeChecker().isSubtypeOf(actualType, targetType)) { semanticServices.getErrorHandler().typeMismatch(expression.getLeft(), targetType, actualType); } + result = targetType; } else if (operationType == JetTokens.AS_KEYWORD) { // TODO : Check for cast impossibility + result = targetType; + } + else if (operationType == JetTokens.AS_SAFE) { + // TODO : Check for cast impossibility + + result = TypeUtils.makeNullable(targetType); } else { semanticServices.getErrorHandler().genericError(expression.getOperationSign().getNode(), "Unsupported binary operation"); } - result = targetType; } } diff --git a/idea/src/org/jetbrains/jet/lexer/Jet.flex b/idea/src/org/jetbrains/jet/lexer/Jet.flex index ddfbc115d5b..cbfb33109cd 100644 --- a/idea/src/org/jetbrains/jet/lexer/Jet.flex +++ b/idea/src/org/jetbrains/jet/lexer/Jet.flex @@ -129,6 +129,7 @@ RAW_STRING_LITERAL = {THREE_QUO} {QUO_STRING_CHAR}* {THREE_QUO}? "!==" { return JetTokens.EXCLEQEQEQ; } "!in" { return JetTokens.NOT_IN; } "!is" { return JetTokens.NOT_IS; } + "as?" { return JetTokens.AS_SAFE; } "++" { return JetTokens.PLUSPLUS ; } "--" { return JetTokens.MINUSMINUS; } "<=" { return JetTokens.LTEQ ; } diff --git a/idea/src/org/jetbrains/jet/lexer/JetTokens.java b/idea/src/org/jetbrains/jet/lexer/JetTokens.java index 0e22d68e309..7ec18826e4d 100644 --- a/idea/src/org/jetbrains/jet/lexer/JetTokens.java +++ b/idea/src/org/jetbrains/jet/lexer/JetTokens.java @@ -55,10 +55,12 @@ public interface JetTokens { JetKeywordToken CAPITALIZED_THIS_KEYWORD = JetKeywordToken.keyword("This"); + JetToken AS_SAFE = new JetToken("as?"); + JetToken IDENTIFIER = new JetToken("IDENTIFIER"); JetToken LABEL_IDENTIFIER = new JetToken("LABEL_IDENTIFIER"); - JetToken FIELD_IDENTIFIER = new JetToken("FIELD_IDENTIFIER"); + JetToken FIELD_IDENTIFIER = new JetToken("FIELD_IDENTIFIER"); JetToken LBRACKET = new JetToken("LBRACKET"); JetToken RBRACKET = new JetToken("RBRACKET"); JetToken LBRACE = new JetToken("LBRACE"); @@ -88,7 +90,7 @@ public interface JetTokens { JetToken OROR = new JetToken("OROR"); JetToken SAFE_ACCESS = new JetToken("SAFE_ACCESS"); JetToken ELVIS = new JetToken("ELVIS"); -// JetToken MAP = new JetToken("MAP"); + // JetToken MAP = new JetToken("MAP"); // JetToken FILTER = new JetToken("FILTER"); JetToken QUEST = new JetToken("QUEST"); JetToken COLON = new JetToken("COLON"); @@ -105,12 +107,12 @@ public interface JetTokens { JetToken HASH = new JetToken("HASH"); JetToken AT = new JetToken("AT"); JetToken ATAT = new JetToken("ATAT"); + TokenSet LABELS = TokenSet.create(AT, ATAT, LABEL_IDENTIFIER); JetToken COMMA = new JetToken("COMMA"); JetToken EOL_OR_SEMICOLON = new JetToken("EOL_OR_SEMICOLON"); - JetKeywordToken WRAPS_KEYWORD = JetKeywordToken.softKeyword("wraps"); JetKeywordToken IMPORT_KEYWORD = JetKeywordToken.softKeyword("import"); JetKeywordToken WHERE_KEYWORD = JetKeywordToken.softKeyword("where"); @@ -129,6 +131,7 @@ public interface JetTokens { JetKeywordToken PROTECTED_KEYWORD = JetKeywordToken.softKeyword("protected"); JetKeywordToken CATCH_KEYWORD = JetKeywordToken.softKeyword("catch"); JetKeywordToken OUT_KEYWORD = JetKeywordToken.softKeyword("out"); + JetKeywordToken FINALLY_KEYWORD = JetKeywordToken.softKeyword("finally"); // TODO: support this as an annotation on arguments. Then, they it probably can not be a soft keyword @@ -152,13 +155,12 @@ public interface JetTokens { OPEN_KEYWORD, ATTRIBUTE_KEYWORD, OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD, REF_KEYWORD, OUT_KEYWORD, IN_KEYWORD ); - TokenSet WHITE_SPACE_OR_COMMENT_BIT_SET = TokenSet.create(WHITE_SPACE, BLOCK_COMMENT, EOL_COMMENT, DOC_COMMENT); TokenSet WHITESPACES = TokenSet.create(TokenType.WHITE_SPACE); TokenSet COMMENTS = TokenSet.create(EOL_COMMENT, BLOCK_COMMENT, DOC_COMMENT); - TokenSet STRINGS = TokenSet.create(CHARACTER_LITERAL, STRING_LITERAL, RAW_STRING_LITERAL); - TokenSet OPERATIONS = TokenSet.create(AS_KEYWORD, IS_KEYWORD, IN_KEYWORD, DOT, PLUSPLUS, MINUSMINUS, MUL, PLUS, + TokenSet STRINGS = TokenSet.create(CHARACTER_LITERAL, STRING_LITERAL, RAW_STRING_LITERAL); + TokenSet OPERATIONS = TokenSet.create(AS_KEYWORD, AS_SAFE, IS_KEYWORD, IN_KEYWORD, DOT, PLUSPLUS, MINUSMINUS, MUL, PLUS, MINUS, EXCL, DIV, PERC, LT, GT, LTEQ, GTEQ, EQEQEQ, ARROW, EXCLEQEQEQ, EQEQ, EXCLEQ, ANDAND, OROR, SAFE_ACCESS, ELVIS, // MAP, FILTER, diff --git a/idea/src/org/jetbrains/jet/lexer/_JetLexer.java b/idea/src/org/jetbrains/jet/lexer/_JetLexer.java index 058f8b15a56..0a081672c29 100644 --- a/idea/src/org/jetbrains/jet/lexer/_JetLexer.java +++ b/idea/src/org/jetbrains/jet/lexer/_JetLexer.java @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.4.3 on 4/7/11 5:16 PM */ +/* The following code was generated by JFlex 1.4.3 on 4/8/11 3:38 PM */ /* It's an automatically generated code. Do not modify it. */ package org.jetbrains.jet.lexer; @@ -13,7 +13,7 @@ import org.jetbrains.jet.lexer.JetTokens; /** * This class is a scanner generated by * JFlex 1.4.3 - * on 4/7/11 5:16 PM from the specification file + * on 4/8/11 3:38 PM from the specification file * /Users/abreslav/work/jet/idea/src/org/jetbrains/jet/lexer/Jet.flex */ class _JetLexer implements FlexLexer { @@ -38,14 +38,14 @@ class _JetLexer implements FlexLexer { */ private static final String ZZ_CMAP_PACKED = "\11\5\1\3\1\13\1\0\1\3\1\0\16\5\4\0\1\3\1\57"+ - "\1\25\1\100\1\7\1\67\1\63\1\23\1\74\1\75\1\12\1\60"+ - "\1\77\1\21\1\17\1\11\1\14\11\1\1\66\1\76\1\61\1\56"+ - "\1\62\1\65\1\10\1\2\1\16\2\2\1\20\1\2\5\4\1\4"+ + "\1\25\1\100\1\7\1\67\1\64\1\23\1\74\1\75\1\12\1\61"+ + "\1\77\1\21\1\17\1\11\1\14\11\1\1\66\1\76\1\62\1\56"+ + "\1\63\1\60\1\10\1\2\1\16\2\2\1\20\1\2\5\4\1\4"+ "\3\4\1\22\3\4\1\53\3\4\1\15\2\4\1\70\1\24\1\71"+ "\1\0\1\4\1\6\1\27\1\45\1\34\1\55\1\31\1\44\1\4"+ "\1\50\1\37\1\46\1\52\1\51\1\30\1\26\1\40\1\33\1\4"+ "\1\42\1\32\1\36\1\41\1\54\1\47\1\35\1\43\1\4\1\72"+ - "\1\64\1\73\1\0\41\5\2\0\4\4\4\0\1\4\2\0\1\5"+ + "\1\65\1\73\1\0\41\5\2\0\4\4\4\0\1\4\2\0\1\5"+ "\7\0\1\4\4\0\1\4\5\0\27\4\1\0\37\4\1\0\u013f\4"+ "\31\0\162\4\4\0\14\4\16\0\5\4\11\0\1\4\21\0\130\5"+ "\5\0\23\5\12\0\1\4\13\0\1\4\1\0\3\4\1\0\1\4"+ @@ -141,7 +141,7 @@ class _JetLexer implements FlexLexer { private static final String ZZ_ACTION_PACKED_0 = "\1\0\1\1\1\2\1\3\1\4\1\1\1\3\1\5"+ "\1\6\1\7\1\2\1\10\1\11\1\12\1\13\16\3"+ - "\1\14\1\15\1\16\1\17\1\20\2\1\1\21\1\22"+ + "\1\14\1\15\1\16\1\17\1\20\1\21\2\1\1\22"+ "\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\32"+ "\1\33\1\34\1\0\1\35\1\0\1\36\1\0\1\37"+ "\1\0\1\40\1\41\1\42\1\43\1\44\1\35\2\2"+ @@ -149,16 +149,17 @@ class _JetLexer implements FlexLexer { "\1\51\7\3\1\52\1\53\1\54\11\3\1\55\1\56"+ "\1\57\1\0\1\60\1\61\1\62\1\63\1\64\1\65"+ "\1\66\1\67\1\70\1\71\1\72\1\35\1\3\2\0"+ - "\1\42\1\73\4\0\1\13\1\74\1\3\1\75\6\3"+ - "\1\76\6\3\1\77\1\100\4\3\1\101\1\102\1\103"+ - "\1\104\1\105\1\106\1\36\1\37\1\0\2\73\1\35"+ - "\2\0\1\3\1\107\1\3\1\110\2\3\1\111\1\112"+ - "\1\113\5\3\1\114\1\3\1\115\1\42\2\0\3\3"+ - "\1\116\1\3\1\117\2\3\1\120\1\121\1\122\1\74"+ - "\3\3\1\123\1\124\1\125\5\3\1\126\1\127\1\130"; + "\1\42\1\73\4\0\1\13\1\74\1\3\1\75\1\3"+ + "\1\76\5\3\1\77\6\3\1\100\1\101\4\3\1\102"+ + "\1\103\1\104\1\105\1\106\1\107\1\36\1\37\1\0"+ + "\2\73\1\35\2\0\1\3\1\110\1\3\1\111\2\3"+ + "\1\112\1\113\1\114\5\3\1\115\1\3\1\116\1\42"+ + "\2\0\3\3\1\117\1\3\1\120\2\3\1\121\1\122"+ + "\1\123\1\74\3\3\1\124\1\125\1\126\5\3\1\127"+ + "\1\130\1\131"; private static int [] zzUnpackAction() { - int [] result = new int[204]; + int [] result = new int[205]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -192,26 +193,26 @@ class _JetLexer implements FlexLexer { "\0\u09a6\0\u09e7\0\u0a28\0\u0a69\0\u0aaa\0\u0aeb\0\u0b2c\0\101"+ "\0\u0b6d\0\u0bae\0\101\0\101\0\u0bef\0\u0c30\0\u0c71\0\u0cb2"+ "\0\101\0\101\0\101\0\101\0\101\0\u0cf3\0\u0d34\0\u0d75"+ - "\0\u0db6\0\u0df7\0\u0e38\0\u0e79\0\303\0\u0eba\0\u0efb\0\u0f3c"+ - "\0\u0f7d\0\u0fbe\0\u0fff\0\u1040\0\303\0\303\0\303\0\u1081"+ - "\0\u10c2\0\u1103\0\u1144\0\u1185\0\u11c6\0\u1207\0\u1248\0\u1289"+ - "\0\303\0\u12ca\0\101\0\u130b\0\u134c\0\101\0\101\0\101"+ - "\0\101\0\101\0\101\0\101\0\101\0\101\0\101\0\u138d"+ - "\0\101\0\u13ce\0\u140f\0\u1450\0\u1491\0\u14d2\0\u1513\0\u1554"+ - "\0\u1595\0\101\0\u15d6\0\u1617\0\303\0\u1658\0\u1699\0\u16da"+ - "\0\u171b\0\u175c\0\u179d\0\303\0\u17de\0\u181f\0\u1860\0\u18a1"+ - "\0\u18e2\0\u1923\0\303\0\303\0\u1964\0\u19a5\0\u19e6\0\u1a27"+ - "\0\303\0\303\0\101\0\101\0\101\0\101\0\101\0\101"+ - "\0\u1a68\0\u1aa9\0\101\0\u1aea\0\u138d\0\u1b2b\0\u1b6c\0\303"+ - "\0\u1bad\0\303\0\u1bee\0\u1c2f\0\303\0\u1c70\0\303\0\u1cb1"+ - "\0\u1cf2\0\u1d33\0\u1d74\0\u1db5\0\303\0\u1df6\0\303\0\101"+ - "\0\u1e37\0\u1e78\0\u1eb9\0\u1efa\0\u1f3b\0\303\0\u1f7c\0\303"+ - "\0\u1fbd\0\u1ffe\0\303\0\303\0\303\0\101\0\u203f\0\u2080"+ - "\0\u20c1\0\303\0\303\0\303\0\u2102\0\u2143\0\u2184\0\u21c5"+ - "\0\u2206\0\303\0\303\0\303"; + "\0\u0db6\0\u0df7\0\u0e38\0\u0e79\0\u0eba\0\u0efb\0\u0f3c\0\u0f7d"+ + "\0\u0fbe\0\u0fff\0\u1040\0\u1081\0\303\0\303\0\303\0\u10c2"+ + "\0\u1103\0\u1144\0\u1185\0\u11c6\0\u1207\0\u1248\0\u1289\0\u12ca"+ + "\0\303\0\u130b\0\101\0\u134c\0\u138d\0\101\0\101\0\101"+ + "\0\101\0\101\0\101\0\101\0\101\0\101\0\101\0\u13ce"+ + "\0\101\0\u140f\0\u1450\0\u1491\0\u14d2\0\u1513\0\u1554\0\u1595"+ + "\0\u15d6\0\101\0\u1617\0\u1658\0\303\0\u1699\0\101\0\u16da"+ + "\0\u171b\0\u175c\0\u179d\0\u17de\0\303\0\u181f\0\u1860\0\u18a1"+ + "\0\u18e2\0\u1923\0\u1964\0\303\0\303\0\u19a5\0\u19e6\0\u1a27"+ + "\0\u1a68\0\303\0\303\0\101\0\101\0\101\0\101\0\101"+ + "\0\101\0\u1aa9\0\u1aea\0\101\0\u1b2b\0\u13ce\0\u1b6c\0\u1bad"+ + "\0\303\0\u1bee\0\303\0\u1c2f\0\u1c70\0\303\0\u1cb1\0\303"+ + "\0\u1cf2\0\u1d33\0\u1d74\0\u1db5\0\u1df6\0\303\0\u1e37\0\303"+ + "\0\101\0\u1e78\0\u1eb9\0\u1efa\0\u1f3b\0\u1f7c\0\303\0\u1fbd"+ + "\0\303\0\u1ffe\0\u203f\0\303\0\303\0\303\0\101\0\u2080"+ + "\0\u20c1\0\u2102\0\303\0\303\0\303\0\u2143\0\u2184\0\u21c5"+ + "\0\u2206\0\u2247\0\303\0\303\0\303"; private static int [] zzUnpackRowMap() { - int [] result = new int[204]; + int [] result = new int[205]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -254,8 +255,8 @@ class _JetLexer implements FlexLexer { "\1\71\1\72\43\0\1\73\100\0\1\74\23\0\1\75"+ "\12\0\1\75\1\76\1\77\1\61\1\62\10\0\1\62"+ "\3\0\1\76\7\0\1\77\34\0\1\100\12\0\1\100"+ - "\2\0\1\101\102\0\1\102\34\0\1\103\3\0\1\104"+ - "\16\0\13\16\1\0\7\16\1\105\1\106\54\16\13\107"+ + "\2\0\1\101\102\0\1\102\34\0\1\103\4\0\1\104"+ + "\15\0\13\16\1\0\7\16\1\105\1\106\54\16\13\107"+ "\1\0\10\107\1\110\1\111\53\107\1\0\2\4\1\0"+ "\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+ "\1\4\3\0\1\4\1\112\1\4\1\113\7\4\1\114"+ @@ -287,11 +288,11 @@ class _JetLexer implements FlexLexer { "\1\0\1\4\3\0\1\4\1\140\26\4\24\0\2\4"+ "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ "\1\0\1\4\3\0\12\4\1\141\15\4\101\0\1\142"+ - "\3\0\1\143\55\0\1\144\16\0\1\145\100\0\1\146"+ - "\1\0\1\147\76\0\1\150\100\0\1\151\105\0\1\152"+ - "\101\0\1\153\33\0\1\154\46\0\1\155\70\0\1\156"+ + "\4\0\1\143\54\0\1\144\16\0\1\145\41\0\1\146"+ + "\46\0\1\147\70\0\1\150\2\0\1\151\75\0\1\152"+ + "\100\0\1\153\106\0\1\154\101\0\1\155\71\0\1\156"+ "\23\0\1\100\12\0\1\100\2\0\1\157\62\0\1\160"+ - "\12\0\1\160\4\0\1\160\36\0\1\160\21\0\2\63"+ + "\12\0\1\160\4\0\1\160\37\0\1\160\20\0\2\63"+ "\1\0\2\63\1\161\1\63\4\0\3\63\1\0\1\63"+ "\1\0\1\63\3\0\30\63\24\0\2\64\1\0\2\64"+ "\1\0\1\64\4\0\3\64\1\0\1\64\1\0\1\64"+ @@ -316,140 +317,142 @@ class _JetLexer implements FlexLexer { "\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+ "\1\4\3\0\23\4\1\176\4\4\24\0\2\4\1\0"+ "\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+ - "\1\4\3\0\10\4\1\177\17\4\24\0\2\4\1\0"+ + "\1\4\3\0\30\4\2\0\1\177\21\0\2\4\1\0"+ "\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+ - "\1\4\3\0\4\4\1\200\23\4\24\0\2\4\1\0"+ + "\1\4\3\0\10\4\1\200\17\4\24\0\2\4\1\0"+ "\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+ - "\1\4\3\0\1\201\27\4\24\0\2\4\1\0\2\4"+ + "\1\4\3\0\4\4\1\201\23\4\24\0\2\4\1\0"+ + "\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+ + "\1\4\3\0\1\202\27\4\24\0\2\4\1\0\2\4"+ "\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+ - "\3\0\1\4\1\202\26\4\24\0\2\4\1\0\2\4"+ + "\3\0\1\4\1\203\26\4\24\0\2\4\1\0\2\4"+ "\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+ - "\3\0\13\4\1\203\1\4\1\204\12\4\24\0\2\4"+ + "\3\0\13\4\1\204\1\4\1\205\12\4\24\0\2\4"+ "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ - "\1\0\1\4\3\0\5\4\1\205\22\4\24\0\2\4"+ + "\1\0\1\4\3\0\5\4\1\206\22\4\24\0\2\4"+ "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ - "\1\0\1\4\3\0\11\4\1\206\2\4\1\207\13\4"+ + "\1\0\1\4\3\0\11\4\1\207\2\4\1\210\13\4"+ "\24\0\2\4\1\0\2\4\1\0\1\4\4\0\3\4"+ - "\1\0\1\4\1\0\1\4\3\0\20\4\1\210\7\4"+ + "\1\0\1\4\1\0\1\4\3\0\20\4\1\211\7\4"+ "\24\0\2\4\1\0\2\4\1\0\1\4\4\0\3\4"+ - "\1\0\1\4\1\0\1\4\3\0\10\4\1\211\17\4"+ + "\1\0\1\4\1\0\1\4\3\0\10\4\1\212\17\4"+ "\24\0\2\4\1\0\2\4\1\0\1\4\4\0\3\4"+ - "\1\0\1\4\1\0\1\4\3\0\23\4\1\212\4\4"+ + "\1\0\1\4\1\0\1\4\3\0\23\4\1\213\4\4"+ "\24\0\2\4\1\0\2\4\1\0\1\4\4\0\3\4"+ - "\1\0\1\4\1\0\1\4\3\0\14\4\1\213\13\4"+ + "\1\0\1\4\1\0\1\4\3\0\14\4\1\214\13\4"+ "\24\0\2\4\1\0\2\4\1\0\1\4\4\0\3\4"+ - "\1\0\1\4\1\0\1\4\3\0\1\214\27\4\24\0"+ + "\1\0\1\4\1\0\1\4\3\0\1\215\27\4\24\0"+ "\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+ - "\1\4\1\0\1\4\3\0\3\4\1\215\24\4\24\0"+ + "\1\4\1\0\1\4\3\0\3\4\1\216\24\4\24\0"+ "\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+ - "\1\4\1\0\1\4\3\0\3\4\1\216\5\4\1\217"+ + "\1\4\1\0\1\4\3\0\3\4\1\217\5\4\1\220"+ "\16\4\24\0\2\4\1\0\2\4\1\0\1\4\4\0"+ - "\3\4\1\0\1\4\1\0\1\4\3\0\11\4\1\220"+ + "\3\4\1\0\1\4\1\0\1\4\3\0\11\4\1\221"+ "\16\4\24\0\2\4\1\0\2\4\1\0\1\4\4\0"+ - "\3\4\1\0\1\4\1\0\1\4\3\0\14\4\1\221"+ - "\6\4\1\222\4\4\101\0\1\223\50\0\1\224\3\0"+ - "\1\225\124\0\1\226\23\0\1\160\12\0\1\160\65\0"+ - "\2\162\1\0\2\162\1\227\1\162\4\0\3\162\1\0"+ + "\3\4\1\0\1\4\1\0\1\4\3\0\14\4\1\222"+ + "\6\4\1\223\4\4\101\0\1\224\50\0\1\225\3\0"+ + "\1\226\124\0\1\227\23\0\1\160\12\0\1\160\65\0"+ + "\2\162\1\0\2\162\1\230\1\162\4\0\3\162\1\0"+ "\1\162\1\0\1\162\3\0\30\162\24\0\2\163\1\0"+ - "\2\163\1\230\1\163\4\0\3\163\1\0\1\163\1\0"+ - "\1\163\3\0\30\163\23\0\12\164\1\231\66\164\11\232"+ - "\1\233\1\165\66\232\1\0\1\100\12\0\1\100\65\0"+ - "\2\234\11\0\1\234\1\0\1\234\1\157\1\234\6\0"+ - "\1\234\1\0\1\234\2\0\1\234\7\0\2\234\7\0"+ - "\1\234\24\0\1\160\12\0\1\160\4\0\1\235\36\0"+ - "\1\235\37\0\1\157\61\0\25\173\1\236\53\173\1\0"+ + "\2\163\1\231\1\163\4\0\3\163\1\0\1\163\1\0"+ + "\1\163\3\0\30\163\23\0\12\164\1\232\66\164\11\233"+ + "\1\234\1\165\66\233\1\0\1\100\12\0\1\100\65\0"+ + "\2\235\11\0\1\235\1\0\1\235\1\157\1\235\6\0"+ + "\1\235\1\0\1\235\2\0\1\235\7\0\2\235\7\0"+ + "\1\235\24\0\1\160\12\0\1\160\4\0\1\236\37\0"+ + "\1\236\36\0\1\157\61\0\25\173\1\237\53\173\1\0"+ "\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+ - "\1\4\1\0\1\4\3\0\3\4\1\237\24\4\24\0"+ + "\1\4\1\0\1\4\3\0\3\4\1\240\24\4\24\0"+ "\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+ - "\1\4\1\0\1\4\3\0\23\4\1\240\4\4\24\0"+ - "\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+ - "\1\4\1\0\1\4\3\0\3\4\1\241\24\4\24\0"+ + "\1\4\1\0\1\4\3\0\23\4\1\241\4\4\24\0"+ "\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+ "\1\4\1\0\1\4\3\0\3\4\1\242\24\4\24\0"+ "\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+ - "\1\4\1\0\1\4\3\0\10\4\1\243\17\4\24\0"+ + "\1\4\1\0\1\4\3\0\3\4\1\243\24\4\24\0"+ "\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+ - "\1\4\1\0\1\4\3\0\4\4\1\244\23\4\24\0"+ + "\1\4\1\0\1\4\3\0\10\4\1\244\17\4\24\0"+ "\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+ - "\1\4\1\0\1\4\3\0\3\4\1\245\24\4\24\0"+ + "\1\4\1\0\1\4\3\0\4\4\1\245\23\4\24\0"+ "\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+ "\1\4\1\0\1\4\3\0\3\4\1\246\24\4\24\0"+ "\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+ - "\1\4\1\0\1\4\3\0\4\4\1\247\23\4\24\0"+ + "\1\4\1\0\1\4\3\0\3\4\1\247\24\4\24\0"+ "\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+ - "\1\4\1\0\1\4\3\0\12\4\1\250\15\4\24\0"+ + "\1\4\1\0\1\4\3\0\4\4\1\250\23\4\24\0"+ "\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+ - "\1\4\1\0\1\4\3\0\3\4\1\251\24\4\24\0"+ + "\1\4\1\0\1\4\3\0\12\4\1\251\15\4\24\0"+ "\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+ - "\1\4\1\0\1\4\3\0\13\4\1\252\14\4\24\0"+ + "\1\4\1\0\1\4\3\0\3\4\1\252\24\4\24\0"+ "\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+ - "\1\4\1\0\1\4\3\0\4\4\1\253\23\4\24\0"+ + "\1\4\1\0\1\4\3\0\13\4\1\253\14\4\24\0"+ "\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+ - "\1\4\1\0\1\4\3\0\1\4\1\254\26\4\24\0"+ + "\1\4\1\0\1\4\3\0\4\4\1\254\23\4\24\0"+ "\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+ - "\1\4\1\0\1\4\3\0\1\255\27\4\24\0\2\4"+ - "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ - "\1\0\1\4\3\0\23\4\1\256\4\4\24\0\2\4"+ - "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ - "\1\0\1\4\3\0\4\4\1\257\23\4\23\0\11\164"+ - "\1\260\1\231\66\164\12\232\1\261\66\232\1\0\2\234"+ - "\11\0\1\234\1\0\1\234\1\0\1\234\1\0\1\170"+ - "\4\0\1\234\1\0\1\234\1\0\1\170\1\234\7\0"+ - "\2\234\7\0\1\234\23\0\25\173\1\262\53\173\1\0"+ + "\1\4\1\0\1\4\3\0\1\4\1\255\26\4\24\0"+ "\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+ - "\1\4\1\0\1\4\3\0\4\4\1\263\23\4\24\0"+ + "\1\4\1\0\1\4\3\0\1\256\27\4\24\0\2\4"+ + "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ + "\1\0\1\4\3\0\23\4\1\257\4\4\24\0\2\4"+ + "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ + "\1\0\1\4\3\0\4\4\1\260\23\4\23\0\11\164"+ + "\1\261\1\232\66\164\12\233\1\262\66\233\1\0\2\235"+ + "\11\0\1\235\1\0\1\235\1\0\1\235\1\0\1\170"+ + "\4\0\1\235\1\0\1\235\1\0\1\170\1\235\7\0"+ + "\2\235\7\0\1\235\23\0\25\173\1\263\53\173\1\0"+ "\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+ - "\1\4\1\0\1\4\3\0\1\264\27\4\24\0\2\4"+ + "\1\4\1\0\1\4\3\0\4\4\1\264\23\4\24\0"+ + "\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+ + "\1\4\1\0\1\4\3\0\1\265\27\4\24\0\2\4"+ "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ - "\1\0\1\4\3\0\11\4\1\265\16\4\24\0\2\4"+ + "\1\0\1\4\3\0\11\4\1\266\16\4\24\0\2\4"+ "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ - "\1\0\1\4\3\0\4\4\1\266\23\4\24\0\2\4"+ + "\1\0\1\4\3\0\4\4\1\267\23\4\24\0\2\4"+ "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ - "\1\0\1\4\3\0\12\4\1\267\15\4\24\0\2\4"+ + "\1\0\1\4\3\0\12\4\1\270\15\4\24\0\2\4"+ "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ - "\1\0\1\4\3\0\21\4\1\270\6\4\24\0\2\4"+ + "\1\0\1\4\3\0\21\4\1\271\6\4\24\0\2\4"+ "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ - "\1\0\1\4\3\0\6\4\1\271\21\4\24\0\2\4"+ + "\1\0\1\4\3\0\6\4\1\272\21\4\24\0\2\4"+ "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ - "\1\0\1\4\3\0\14\4\1\272\13\4\24\0\2\4"+ + "\1\0\1\4\3\0\14\4\1\273\13\4\24\0\2\4"+ "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ - "\1\0\1\4\3\0\3\4\1\273\24\4\24\0\2\4"+ + "\1\0\1\4\3\0\3\4\1\274\24\4\24\0\2\4"+ "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ - "\1\0\1\4\3\0\24\4\1\274\3\4\24\0\2\4"+ + "\1\0\1\4\3\0\24\4\1\275\3\4\24\0\2\4"+ "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ - "\1\0\1\4\3\0\3\4\1\275\24\4\23\0\11\232"+ - "\1\233\1\261\66\232\25\173\1\276\53\173\1\0\2\4"+ + "\1\0\1\4\3\0\3\4\1\276\24\4\23\0\11\233"+ + "\1\234\1\262\66\233\25\173\1\277\53\173\1\0\2\4"+ "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ - "\1\0\1\4\3\0\5\4\1\277\22\4\24\0\2\4"+ + "\1\0\1\4\3\0\5\4\1\300\22\4\24\0\2\4"+ "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ - "\1\0\1\4\3\0\4\4\1\300\23\4\24\0\2\4"+ + "\1\0\1\4\3\0\4\4\1\301\23\4\24\0\2\4"+ "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ - "\1\0\1\4\3\0\1\301\27\4\24\0\2\4\1\0"+ + "\1\0\1\4\3\0\1\302\27\4\24\0\2\4\1\0"+ "\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+ - "\1\4\3\0\16\4\1\302\11\4\24\0\2\4\1\0"+ + "\1\4\3\0\16\4\1\303\11\4\24\0\2\4\1\0"+ "\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+ - "\1\4\3\0\10\4\1\303\17\4\24\0\2\4\1\0"+ + "\1\4\3\0\10\4\1\304\17\4\24\0\2\4\1\0"+ "\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+ - "\1\4\3\0\1\304\27\4\24\0\2\4\1\0\2\4"+ + "\1\4\3\0\1\305\27\4\24\0\2\4\1\0\2\4"+ "\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+ - "\3\0\1\4\1\305\26\4\24\0\2\4\1\0\2\4"+ + "\3\0\1\4\1\306\26\4\24\0\2\4\1\0\2\4"+ "\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+ - "\3\0\11\4\1\306\16\4\24\0\2\4\1\0\2\4"+ + "\3\0\11\4\1\307\16\4\24\0\2\4\1\0\2\4"+ "\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+ - "\3\0\13\4\1\307\14\4\24\0\2\4\1\0\2\4"+ + "\3\0\13\4\1\310\14\4\24\0\2\4\1\0\2\4"+ "\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+ - "\3\0\6\4\1\310\21\4\24\0\2\4\1\0\2\4"+ + "\3\0\6\4\1\311\21\4\24\0\2\4\1\0\2\4"+ "\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+ - "\3\0\12\4\1\311\15\4\24\0\2\4\1\0\2\4"+ - "\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+ - "\3\0\3\4\1\312\24\4\24\0\2\4\1\0\2\4"+ + "\3\0\12\4\1\312\15\4\24\0\2\4\1\0\2\4"+ "\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+ "\3\0\3\4\1\313\24\4\24\0\2\4\1\0\2\4"+ "\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+ - "\3\0\1\314\27\4\23\0"; + "\3\0\3\4\1\314\24\4\24\0\2\4\1\0\2\4"+ + "\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+ + "\3\0\1\315\27\4\23\0"; private static int [] zzUnpackTrans() { - int [] result = new int[8775]; + int [] result = new int[8840]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -493,12 +496,12 @@ class _JetLexer implements FlexLexer { "\1\0\1\11\43\1\1\11\1\1\11\11\1\0\1\1"+ "\1\0\1\1\1\0\1\1\1\0\1\11\2\1\2\11"+ "\4\1\5\11\35\1\1\11\1\0\1\1\12\11\1\1"+ - "\1\11\2\0\2\1\4\0\1\11\30\1\6\11\1\0"+ - "\1\1\1\11\1\1\2\0\21\1\1\11\2\0\13\1"+ - "\1\11\16\1"; + "\1\11\2\0\2\1\4\0\1\11\4\1\1\11\24\1"+ + "\6\11\1\0\1\1\1\11\1\1\2\0\21\1\1\11"+ + "\2\0\13\1\1\11\16\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[204]; + int [] result = new int[205]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -806,355 +809,359 @@ class _JetLexer implements FlexLexer { case 3: { return JetTokens.IDENTIFIER; } - case 89: break; - case 63: + case 90: break; + case 64: { return JetTokens.FOR_KEYWORD ; } - case 90: break; - case 85: + case 91: break; + case 86: { return JetTokens.RETURN_KEYWORD ; } - case 91: break; - case 71: + case 92: break; + case 72: { return JetTokens.NULL_KEYWORD ; } - case 92: break; - case 15: + case 93: break; + case 16: { return JetTokens.LT ; } - case 93: break; + case 94: break; case 45: { return JetTokens.DO_KEYWORD ; } - case 94: break; - case 14: + case 95: break; + case 15: { return JetTokens.PLUS ; } - case 95: break; + case 96: break; case 60: { return JetTokens.RAW_STRING_LITERAL; } - case 96: break; - case 49: + case 97: break; + case 51: { return JetTokens.PLUSEQ ; } - case 97: break; + case 98: break; case 27: { return JetTokens.COMMA ; } - case 98: break; - case 16: + case 99: break; + case 17: { return JetTokens.GT ; } - case 99: break; + case 100: break; case 4: { return JetTokens.WHITE_SPACE; } - case 100: break; - case 83: + case 101: break; + case 84: { return JetTokens.TYPEOF_KEYWORD ; } - case 101: break; + case 102: break; case 25: { return JetTokens.RPAR ; } - case 102: break; + case 103: break; case 47: { return JetTokens.DOUBLE_ARROW; } - case 103: break; - case 73: + case 104: break; + case 74: { return JetTokens.TRUE_KEYWORD ; } - case 104: break; + case 105: break; case 30: { return JetTokens.FIELD_IDENTIFIER; } - case 105: break; - case 53: + case 106: break; + case 55: { return JetTokens.ANDAND ; } - case 106: break; + case 107: break; case 59: { return JetTokens.DOC_COMMENT; } - case 107: break; + case 108: break; case 29: { return JetTokens.FLOAT_LITERAL; } - case 108: break; + case 109: break; case 33: { return JetTokens.EOL_COMMENT; } - case 109: break; - case 76: + case 110: break; + case 77: { return JetTokens.WHEN_KEYWORD ; } - case 110: break; + case 111: break; case 18: { return JetTokens.COLON ; } - case 111: break; - case 51: + case 112: break; + case 53: { return JetTokens.LTEQ ; } - case 112: break; + case 113: break; case 40: { return JetTokens.ARROW ; } - case 113: break; + case 114: break; case 20: { return JetTokens.LBRACKET ; } - case 114: break; + case 115: break; case 58: { yypushback(2); return JetTokens.INTEGER_LITERAL; } - case 115: break; + case 116: break; case 10: { return JetTokens.CHARACTER_LITERAL; } - case 116: break; - case 65: + case 117: break; + case 66: { return JetTokens.VAR_KEYWORD ; } - case 117: break; - case 52: + case 118: break; + case 54: { return JetTokens.GTEQ ; } - case 118: break; + case 119: break; case 2: { return JetTokens.INTEGER_LITERAL; } - case 119: break; + case 120: break; case 23: { return JetTokens.RBRACE ; } - case 120: break; - case 78: + case 121: break; + case 79: { return JetTokens.CLASS_KEYWORD ; } - case 121: break; + case 122: break; case 13: { return JetTokens.EXCL ; } - case 122: break; - case 62: + case 123: break; + case 63: { return JetTokens.TRY_KEYWORD ; } - case 123: break; + case 124: break; case 48: { return JetTokens.EXCLEQ ; } - case 124: break; + case 125: break; case 39: { return JetTokens.MINUSEQ ; } - case 125: break; - case 79: + case 126: break; + case 80: { return JetTokens.THROW_KEYWORD ; } - case 126: break; - case 82: + case 127: break; + case 83: { return JetTokens.WHILE_KEYWORD ; } - case 127: break; + case 128: break; case 38: { return JetTokens.MINUSMINUS; } - case 128: break; - case 86: + case 129: break; + case 87: { return JetTokens.CONTINUE_KEYWORD ; } - case 129: break; + case 130: break; case 32: { return JetTokens.ATAT ; } - case 130: break; - case 68: + case 131: break; + case 69: { return JetTokens.NOT_IN; } - case 131: break; + case 132: break; case 6: { return JetTokens.DIV ; } - case 132: break; - case 56: + case 133: break; + case 50: { return JetTokens.ELVIS ; } - case 133: break; + case 134: break; case 31: { return JetTokens.LABEL_IDENTIFIER; } - case 134: break; - case 17: + case 135: break; + case 14: { return JetTokens.QUEST ; } - case 135: break; - case 54: + case 136: break; + case 56: { return JetTokens.OROR ; } - case 136: break; + case 137: break; case 19: { return JetTokens.PERC ; } - case 137: break; - case 70: + case 138: break; + case 71: { return JetTokens.EXCLEQEQEQ; } - case 138: break; + case 139: break; case 57: { return JetTokens.PERCEQ ; } - case 139: break; + case 140: break; case 37: { return JetTokens.RANGE ; } - case 140: break; + case 141: break; case 1: { return TokenType.BAD_CHARACTER; } - case 141: break; - case 55: + case 142: break; + case 49: { return JetTokens.SAFE_ACCESS; } - case 142: break; - case 87: + case 143: break; + case 88: { return JetTokens.NAMESPACE_KEYWORD ; } - case 143: break; - case 69: + case 144: break; + case 70: { return JetTokens.NOT_IS; } - case 144: break; + case 145: break; case 7: { return JetTokens.MUL ; } - case 145: break; + case 146: break; case 21: { return JetTokens.RBRACKET ; } - case 146: break; - case 50: + case 147: break; + case 52: { return JetTokens.PLUSPLUS ; } - case 147: break; - case 75: + case 148: break; + case 76: { return JetTokens.THIS_KEYWORD ; } - case 148: break; + case 149: break; case 8: { return JetTokens.DOT ; } - case 149: break; + case 150: break; case 26: { return JetTokens.SEMICOLON ; } - case 150: break; + case 151: break; case 44: { return JetTokens.IF_KEYWORD ; } - case 151: break; + case 152: break; case 12: { return JetTokens.EQ ; } - case 152: break; + case 153: break; case 5: { return JetTokens.AT ; } - case 153: break; + case 154: break; + case 62: + { return JetTokens.AS_SAFE; + } + case 155: break; case 24: { return JetTokens.LPAR ; } - case 154: break; + case 156: break; case 9: { return JetTokens.MINUS ; } - case 155: break; - case 80: + case 157: break; + case 81: { return JetTokens.FALSE_KEYWORD ; } - case 156: break; - case 74: + case 158: break; + case 75: { return JetTokens.TYPE_KEYWORD ; } - case 157: break; - case 64: + case 159: break; + case 65: { return JetTokens.FUN_KEYWORD ; } - case 158: break; + case 160: break; case 43: { return JetTokens.IS_KEYWORD ; } - case 159: break; + case 161: break; case 35: { return JetTokens.DIVEQ ; } - case 160: break; - case 88: + case 162: break; + case 89: { return JetTokens.EXTENSION_KEYWORD ; } - case 161: break; - case 72: + case 163: break; + case 73: { return JetTokens.ELSE_KEYWORD ; } - case 162: break; + case 164: break; case 41: { return JetTokens.AS_KEYWORD ; } - case 163: break; + case 165: break; case 42: { return JetTokens.IN_KEYWORD ; } - case 164: break; + case 166: break; case 46: { return JetTokens.EQEQ ; } - case 165: break; - case 66: + case 167: break; + case 67: { return JetTokens.VAL_KEYWORD ; } - case 166: break; - case 67: + case 168: break; + case 68: { return JetTokens.EQEQEQ ; } - case 167: break; - case 77: + case 169: break; + case 78: { return JetTokens.CAPITALIZED_THIS_KEYWORD ; } - case 168: break; + case 170: break; case 61: { return JetTokens.NEW_KEYWORD ; } - case 169: break; + case 171: break; case 36: { return JetTokens.MULTEQ ; } - case 170: break; + case 172: break; case 11: { return JetTokens.STRING_LITERAL; } - case 171: break; + case 173: break; case 22: { return JetTokens.LBRACE ; } - case 172: break; - case 84: + case 174: break; + case 85: { return JetTokens.OBJECT_KEYWORD ; } - case 173: break; - case 81: + case 175: break; + case 82: { return JetTokens.BREAK_KEYWORD ; } - case 174: break; + case 176: break; case 34: { return JetTokens.BLOCK_COMMENT; } - case 175: break; + case 177: break; case 28: { return JetTokens.HASH ; } - case 176: break; + case 178: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; diff --git a/idea/testData/checker/Casts.jet b/idea/testData/checker/Casts.jet new file mode 100644 index 00000000000..c447acde213 --- /dev/null +++ b/idea/testData/checker/Casts.jet @@ -0,0 +1,16 @@ +fun test() : Unit { + var x : Int? = 0 + var y : Int = 0 + + x : Int? + y : Int + x as Int : Int + y as Int : Int + x as Int? : Int? + y as Int? : Int? + x as? Int : Int? + y as? Int : Int? + x as? Int? : Int? + y as? Int? : Int? + () +} \ No newline at end of file diff --git a/idea/testData/psi/Precedence.jet b/idea/testData/psi/Precedence.jet index 0b659af1ce4..20a32974123 100644 --- a/idea/testData/psi/Precedence.jet +++ b/idea/testData/psi/Precedence.jet @@ -38,12 +38,18 @@ fun foo() { t as Any? t as Any.Any.Any t as {() : T} + t as? Any? + t as? Any.Any.Any + t as? {() : T} t : Any * 1 t : Any? * 1 t as Any? * 1 t as Any.Any.Any * 1 t as {() : T} * 1 + t as? Any? * 1 + t as? Any.Any.Any * 1 + t as? {() : T} * 1 ++t : Any + 1 a.b : Any + 1 diff --git a/idea/testData/psi/Precedence.txt b/idea/testData/psi/Precedence.txt index 7829c0ece66..a3a6423fc6a 100644 --- a/idea/testData/psi/Precedence.txt +++ b/idea/testData/psi/Precedence.txt @@ -803,6 +803,86 @@ JetFile: Precedence.jet REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('T') PsiElement(RBRACE)('}') + PsiWhiteSpace('\n ') + BINARY_WITH_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('t') + PsiWhiteSpace(' ') + OPERATION_REFERENCE + PsiElement(as?)('as?') + PsiWhiteSpace(' ') + TYPE_REFERENCE + NULLABLE_TYPE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('Any') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_PROJECTION + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('T') + PsiElement(GT)('>') + PsiElement(QUEST)('?') + PsiWhiteSpace('\n ') + BINARY_WITH_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('t') + PsiWhiteSpace(' ') + OPERATION_REFERENCE + PsiElement(as?)('as?') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + USER_TYPE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('Any') + PsiElement(DOT)('.') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('Any') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_PROJECTION + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('T') + PsiElement(GT)('>') + PsiElement(DOT)('.') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('Any') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_PROJECTION + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('T') + PsiElement(GT)('>') + PsiWhiteSpace('\n ') + BINARY_WITH_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('t') + PsiWhiteSpace(' ') + OPERATION_REFERENCE + PsiElement(as?)('as?') + PsiWhiteSpace(' ') + TYPE_REFERENCE + FUNCTION_TYPE + PsiElement(LBRACE)('{') + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('T') + PsiElement(RBRACE)('}') PsiWhiteSpace('\n\n ') BINARY_EXPRESSION BINARY_WITH_TYPE @@ -944,6 +1024,107 @@ JetFile: Precedence.jet PsiWhiteSpace(' ') INTEGER_CONSTANT PsiElement(INTEGER_LITERAL)('1') + PsiWhiteSpace('\n ') + BINARY_EXPRESSION + BINARY_WITH_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('t') + PsiWhiteSpace(' ') + OPERATION_REFERENCE + PsiElement(as?)('as?') + PsiWhiteSpace(' ') + TYPE_REFERENCE + NULLABLE_TYPE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('Any') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_PROJECTION + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('T') + PsiElement(GT)('>') + PsiElement(QUEST)('?') + PsiWhiteSpace(' ') + OPERATION_REFERENCE + PsiElement(MUL)('*') + PsiWhiteSpace(' ') + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('1') + PsiWhiteSpace('\n ') + BINARY_EXPRESSION + BINARY_WITH_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('t') + PsiWhiteSpace(' ') + OPERATION_REFERENCE + PsiElement(as?)('as?') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + USER_TYPE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('Any') + PsiElement(DOT)('.') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('Any') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_PROJECTION + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('T') + PsiElement(GT)('>') + PsiElement(DOT)('.') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('Any') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_PROJECTION + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('T') + PsiElement(GT)('>') + PsiWhiteSpace(' ') + OPERATION_REFERENCE + PsiElement(MUL)('*') + PsiWhiteSpace(' ') + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('1') + PsiWhiteSpace('\n ') + BINARY_EXPRESSION + BINARY_WITH_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('t') + PsiWhiteSpace(' ') + OPERATION_REFERENCE + PsiElement(as?)('as?') + PsiWhiteSpace(' ') + TYPE_REFERENCE + FUNCTION_TYPE + PsiElement(LBRACE)('{') + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('T') + PsiElement(RBRACE)('}') + PsiWhiteSpace(' ') + OPERATION_REFERENCE + PsiElement(MUL)('*') + PsiWhiteSpace(' ') + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('1') PsiWhiteSpace('\n\n ') BINARY_EXPRESSION BINARY_WITH_TYPE