diff --git a/idea/src/org/jetbrains/jet/JetNodeTypes.java b/idea/src/org/jetbrains/jet/JetNodeTypes.java index e467c62e6ba..9452461955e 100644 --- a/idea/src/org/jetbrains/jet/JetNodeTypes.java +++ b/idea/src/org/jetbrains/jet/JetNodeTypes.java @@ -64,6 +64,7 @@ public interface JetNodeTypes { JetNodeType SUPERTYE_QUALIFIER = new JetNodeType("SUPERTYE_QUALIFIER"); JetNodeType LONG_CONSTANT = new JetNodeType("LONG_CONSTANT"); JetNodeType TUPLE = new JetNodeType("TUPLE"); + JetNodeType ARROW_TUPLE = new JetNodeType("ARROW_TUPLE"); JetNodeType MAP_LITERAL_ENTRY = new JetNodeType("MAP_LITERAL_ENTRY"); JetNodeType MAP_LITERAL = new JetNodeType("MAP_LITERAL"); JetNodeType RANGE_LITERAL = new JetNodeType("RANGE_LITERAL"); diff --git a/idea/src/org/jetbrains/jet/lang/parsing/AbstractJetParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/AbstractJetParsing.java index dd2b01dd57b..2278761aefd 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/AbstractJetParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/AbstractJetParsing.java @@ -153,6 +153,7 @@ import static org.jetbrains.jet.lexer.JetTokens.*; if (at(token)) advance(); // token } + // TODO: Migrate to predicates protected void skipUntil(TokenSet tokenSet) { boolean stopAtEolOrSemi = tokenSet.contains(EOL_OR_SEMICOLON); while (!eof() && !tokenSet.contains(tt()) && !(stopAtEolOrSemi && at(EOL_OR_SEMICOLON))) { @@ -183,10 +184,7 @@ import static org.jetbrains.jet.lexer.JetTokens.*; while (!eof()) { if (pattern.processToken( myBuilder.getCurrentOffset(), - openAngleBrackets == 0 - && openBrackets == 0 - && openBraces == 0 - && openParentheses == 0)) { + pattern.isTopLevel(openAngleBrackets, openBrackets, openBraces, openParentheses))) { break; } if (at(LPAR)) { @@ -224,6 +222,8 @@ import static org.jetbrains.jet.lexer.JetTokens.*; * top-level occurrence of a token from the stopSet * * Returns -1 if no occurrence is found + * + * TODO: Migrate to predictaes */ protected int findLastBefore(TokenSet lookFor, TokenSet stopAt, boolean dontStopRightAfterOccurrence) { return matchTokenStreamPredicate(new LastBefore(new AtSet(lookFor), new AtSet(stopAt), dontStopRightAfterOccurrence)); diff --git a/idea/src/org/jetbrains/jet/lang/parsing/AbstractTokenStreamPattern.java b/idea/src/org/jetbrains/jet/lang/parsing/AbstractTokenStreamPattern.java index 25f039f8f62..03c7fb86010 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/AbstractTokenStreamPattern.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/AbstractTokenStreamPattern.java @@ -5,11 +5,16 @@ package org.jetbrains.jet.lang.parsing; */ public abstract class AbstractTokenStreamPattern implements TokenStreamPattern { - protected int lastOccurrence = -1; + protected int lastOccurrence = -1; - @Override - public int result() { - return lastOccurrence; - } + @Override + public int result() { + return lastOccurrence; } + @Override + public boolean isTopLevel(int openAngleBrackets, int openBrackets, int openBraces, int openParentheses) { + return openBraces == 0 && openBrackets == 0 && openParentheses == 0 && openAngleBrackets == 0; + } +} + diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java index 4fba0256880..f1765f0e9f7 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java @@ -21,10 +21,10 @@ public class JetExpressionParsing extends AbstractJetParsing { } @SuppressWarnings({"UnusedDeclaration"}) - private enum Priority { + private enum Precedence { MEMBER_ACCESS(DOT, HASH, SAFE_ACCESS) { @Override - public void parseHigherPriority(JetExpressionParsing parsing) { + public void parseHigherPrecedence(JetExpressionParsing parsing) { parsing.parseAtomicExpression(); } }, @@ -34,14 +34,14 @@ public class JetExpressionParsing extends AbstractJetParsing { PREFIX(MINUS, PLUS, MINUSMINUS, PLUSPLUS, EXCL) { // attributes @Override - public void parseHigherPriority(JetExpressionParsing parsing) { + public void parseHigherPrecedence(JetExpressionParsing parsing) { throw new IllegalStateException("Don't call this method"); } }, MULTIPLICATIVE(MUL, DIV, PERC) { @Override - public void parseHigherPriority(JetExpressionParsing parsing) { + public void parseHigherPrecedence(JetExpressionParsing parsing) { parsing.parsePrefixExpression(); } }, @@ -56,26 +56,27 @@ public class JetExpressionParsing extends AbstractJetParsing { CONJUNCTION(ANDAND), DISJUNCTION(OROR), MATCH(MATCH_KEYWORD), + // TODO: don't build a binary tree, build a tuple + ASSIGNMENT(EQ, PLUSEQ, MINUSEQ, MULTEQ, DIVEQ, PERCEQ), ARROW(JetTokens.ARROW), - ASSIGNMENT(EQ, PLUSEQ, MINUSEQ, MULTEQ, DIVEQ, PERCEQ) ; static { - Priority[] values = Priority.values(); - for (Priority priority : values) { - int ordinal = priority.ordinal(); - priority.higher = ordinal > 0 ? values[ordinal - 1] : null; + Precedence[] values = Precedence.values(); + for (Precedence precedence : values) { + int ordinal = precedence.ordinal(); + precedence.higher = ordinal > 0 ? values[ordinal - 1] : null; } } - private Priority higher; + private Precedence higher; private final TokenSet operations; - Priority(IElementType... operations ) { + Precedence(IElementType... operations) { this.operations = TokenSet.create(operations); } - public void parseHigherPriority(JetExpressionParsing parsing) { + public void parseHigherPrecedence(JetExpressionParsing parsing) { assert higher != null; parsing.parseBinaryExpression(higher); } @@ -107,18 +108,23 @@ public class JetExpressionParsing extends AbstractJetParsing { * ; */ public void parseExpression() { - parseBinaryExpression(Priority.ASSIGNMENT); + parseBinaryExpression(Precedence.ASSIGNMENT); } - private void parseBinaryExpression(Priority priority) { -// System.out.println(priority.name() + " at " + tt()); + /* + * expression (operation expression)* + * + * see the precedence table + */ + private void parseBinaryExpression(Precedence precedence) { +// System.out.println(precedence.name() + " at " + tt()); PsiBuilder.Marker expression = mark(); - priority.parseHigherPriority(this); + precedence.parseHigherPrecedence(this); - while (!myBuilder.eolInLastWhitespace() && atSet(priority.getOperations())) { + while (!myBuilder.eolInLastWhitespace() && atSet(precedence.getOperations())) { advance(); // operation - priority.parseHigherPriority(this); + precedence.parseHigherPrecedence(this); expression.done(BINARY_EXPRESSION); expression = expression.precede(); } @@ -126,6 +132,9 @@ public class JetExpressionParsing extends AbstractJetParsing { expression.drop(); } + /* + * operation? expression + */ private void parsePrefixExpression() { // System.out.println("pre at " + tt()); if (at(LBRACKET)) { @@ -135,7 +144,7 @@ public class JetExpressionParsing extends AbstractJetParsing { parsePostfixExpression(); attributes.done(ANNOTATED_EXPRESSION); } - } else if (atSet(Priority.PREFIX.getOperations())) { + } else if (atSet(Precedence.PREFIX.getOperations())) { PsiBuilder.Marker expression = mark(); advance(); // operation parsePostfixExpression(); @@ -145,17 +154,20 @@ public class JetExpressionParsing extends AbstractJetParsing { } } + /* + * expression operation? + */ private void parsePostfixExpression() { // System.out.println("post at " + tt()); PsiBuilder.Marker expression = mark(); - parseBinaryExpression(Priority.MEMBER_ACCESS); + parseBinaryExpression(Precedence.MEMBER_ACCESS); if (myBuilder.eolInLastWhitespace()) { expression.drop(); } else if (at(LBRACKET)) { parseArrayAccess(); expression.done(ARRAY_ACCESS_EXPRESSION); - } else if (atSet(Priority.POSTFIX.getOperations())) { + } else if (atSet(Precedence.POSTFIX.getOperations())) { advance(); // operation expression.done(POSTFIX_EXPRESSION); } else if (at(LPAR)) { @@ -171,7 +183,7 @@ public class JetExpressionParsing extends AbstractJetParsing { * : tupleLiteral // or parenthesized expression * : "this" ("<" type ">")? * : "typeof" "(" expression ")" - * : "new" constructorInvocation // TODO: Do we need "new"?, see factory methods + * : "new" constructorInvocation * : objectLiteral * : jump * : if @@ -347,7 +359,12 @@ public class JetExpressionParsing extends AbstractJetParsing { advance(); // LBRACE - int doubleArrowPos = matchTokenStreamPredicate(new FirstBefore(new At(DOUBLE_ARROW), new At(RBRACE))); + int doubleArrowPos = matchTokenStreamPredicate(new FirstBefore(new At(DOUBLE_ARROW), new At(RBRACE)) { + @Override + public boolean isTopLevel(int openAngleBrackets, int openBrackets, int openBraces, int openParentheses) { + return openBraces == 0; + } + }); if (doubleArrowPos >= 0) { boolean dontExpectParameters = false; @@ -460,7 +477,13 @@ public class JetExpressionParsing extends AbstractJetParsing { public void parseExpressions() { while (!eof() && !at(RBRACE)) { parseExpression(); - consumeIf(SEMICOLON); + if (at(SEMICOLON)) { + advance(); // SEMICOLON + } else if (at(RBRACE)) { + break; + } else if (!myBuilder.eolInLastWhitespace()) { + errorUntil("Unexpected tokens (use ';' to separate expressions on the same line", TokenSet.create(EOL_OR_SEMICOLON)); + } } } diff --git a/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderImpl.java b/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderImpl.java index 20fcd4361f6..aff01968388 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderImpl.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderImpl.java @@ -37,6 +37,6 @@ public class SemanticWhitespaceAwarePsiBuilderImpl extends PsiBuilderAdapter imp @Override public boolean eolInLastWhitespace() { - return myEOLInLastWhitespace; + return myEOLInLastWhitespace || eof(); } } diff --git a/idea/src/org/jetbrains/jet/lang/parsing/TokenStreamPattern.java b/idea/src/org/jetbrains/jet/lang/parsing/TokenStreamPattern.java index 9973567b1ec..8035cd652b6 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/TokenStreamPattern.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/TokenStreamPattern.java @@ -7,10 +7,8 @@ public interface TokenStreamPattern { /** * Called on each token * - * - * * @param offset - * @param topLevel indicates if no brackets (of types () [] {} <>) are currently unmatched + * @param topLevel see {@link #isTopLevel(int, int, int, int)} * @return true to stop */ boolean processToken(int offset, boolean topLevel); @@ -19,4 +17,10 @@ public interface TokenStreamPattern { * @return the position where the predicate has matched, -1 if no match was found */ int result(); + + /* + * Decides if the combination of open bracet counts makes a "top level position" + * Straightforward meaning would be: if all counts are zero, then it's a top level + */ + boolean isTopLevel(int openAngleBrackets, int openBrackets, int openBraces, int openParentheses); } diff --git a/idea/src/org/jetbrains/jet/lexer/_JetLexer.java b/idea/src/org/jetbrains/jet/lexer/_JetLexer.java index 093a2cd840c..7d0c5d37b0d 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 12/29/10 6:25 PM */ +/* The following code was generated by JFlex 1.4.3 on 12/29/10 10:19 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 12/29/10 6:25 PM from the specification file + * on 12/29/10 10:19 PM from the specification file * /home/user/work/jet/idea/src/org/jetbrains/jet/lexer/Jet.flex */ class _JetLexer implements FlexLexer { @@ -38,7 +38,7 @@ class _JetLexer implements FlexLexer { */ private static final String ZZ_CMAP_PACKED = "\11\5\1\3\1\10\1\0\1\3\1\0\16\5\4\0\1\3\1\55"+ - "\1\24\1\0\1\4\1\65\1\61\1\22\1\72\1\73\1\7\1\56"+ + "\1\24\1\76\1\4\1\65\1\61\1\22\1\72\1\73\1\7\1\56"+ "\1\75\1\20\1\16\1\6\1\11\11\1\1\64\1\74\1\57\1\54"+ "\1\60\1\63\1\0\1\2\1\13\1\2\1\15\1\17\1\15\5\4"+ "\1\14\3\4\1\21\7\4\1\12\2\4\1\66\1\23\1\67\1\0"+ @@ -142,23 +142,23 @@ class _JetLexer implements FlexLexer { "\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\2"+ "\1\7\1\10\1\11\1\12\16\3\1\13\1\14\1\15"+ "\1\16\1\17\2\1\1\20\1\21\1\22\1\23\1\24"+ - "\1\25\1\26\1\27\1\30\1\31\1\32\1\33\3\34"+ - "\1\35\1\36\1\37\1\40\1\0\2\2\1\34\1\41"+ - "\1\42\1\43\1\44\1\45\1\46\2\11\3\12\1\3"+ - "\1\47\13\3\1\50\3\3\1\51\1\52\1\53\6\3"+ - "\1\54\1\55\1\0\1\56\1\57\1\60\1\61\1\62"+ - "\1\63\1\64\1\65\1\66\1\67\1\70\1\34\1\36"+ - "\1\71\1\0\1\33\3\0\1\12\1\72\5\3\1\73"+ - "\3\3\1\74\1\75\3\3\1\76\3\3\1\77\1\3"+ - "\1\100\2\3\1\101\1\102\1\103\1\104\1\105\1\106"+ - "\1\0\2\71\1\0\1\34\2\0\2\3\1\107\6\3"+ - "\1\110\1\111\1\112\1\3\1\113\3\3\1\36\1\0"+ - "\1\34\1\0\3\3\1\114\1\3\1\115\3\3\1\116"+ - "\1\117\1\120\1\121\1\72\3\3\1\122\1\123\1\3"+ - "\1\124\6\3\1\125\2\3\1\126\1\127\1\130"; + "\1\25\1\26\1\27\1\30\1\31\1\32\1\33\1\34"+ + "\3\35\1\36\1\37\1\40\1\41\1\0\2\2\1\35"+ + "\1\42\1\43\1\44\1\45\1\46\1\47\2\11\3\12"+ + "\1\3\1\50\13\3\1\51\3\3\1\52\1\53\1\54"+ + "\6\3\1\55\1\56\1\0\1\57\1\60\1\61\1\62"+ + "\1\63\1\64\1\65\1\66\1\67\1\70\1\71\1\35"+ + "\1\37\1\72\1\0\1\34\3\0\1\12\1\73\5\3"+ + "\1\74\3\3\1\75\1\76\3\3\1\77\3\3\1\100"+ + "\1\3\1\101\2\3\1\102\1\103\1\104\1\105\1\106"+ + "\1\107\1\0\2\72\1\0\1\35\2\0\2\3\1\110"+ + "\6\3\1\111\1\112\1\113\1\3\1\114\3\3\1\37"+ + "\1\0\1\35\1\0\3\3\1\115\1\3\1\116\3\3"+ + "\1\117\1\120\1\121\1\122\1\73\3\3\1\123\1\124"+ + "\1\3\1\125\6\3\1\126\2\3\1\127\1\130\1\131"; private static int [] zzUnpackAction() { - int [] result = new int[207]; + int [] result = new int[208]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -183,35 +183,35 @@ class _JetLexer implements FlexLexer { private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\76\0\174\0\272\0\370\0\u0136\0\u0174\0\u01b2"+ - "\0\u01f0\0\u022e\0\u026c\0\u02aa\0\u02e8\0\u0326\0\u0364\0\u03a2"+ - "\0\u03e0\0\u041e\0\u045c\0\u049a\0\u04d8\0\u0516\0\u0554\0\u0592"+ - "\0\u05d0\0\u060e\0\u064c\0\u068a\0\u06c8\0\u0706\0\u0744\0\u0782"+ - "\0\u07c0\0\u07fe\0\76\0\u083c\0\76\0\76\0\76\0\76"+ - "\0\76\0\76\0\76\0\76\0\76\0\76\0\u087a\0\u08b8"+ - "\0\u08f6\0\u0934\0\76\0\76\0\u0972\0\u09b0\0\u09ee\0\u0a2c"+ - "\0\76\0\76\0\76\0\76\0\76\0\76\0\76\0\u0a6a"+ - "\0\u0aa8\0\u0ae6\0\u0b24\0\u0b62\0\272\0\u0ba0\0\u0bde\0\u0c1c"+ - "\0\u0c5a\0\u0c98\0\u0cd6\0\u0d14\0\u0d52\0\u0d90\0\u0dce\0\u0e0c"+ - "\0\272\0\u0e4a\0\u0e88\0\u0ec6\0\272\0\272\0\272\0\u0f04"+ - "\0\u0f42\0\u0f80\0\u0fbe\0\u0ffc\0\u103a\0\u1078\0\76\0\u10b6"+ - "\0\u10f4\0\76\0\76\0\76\0\76\0\76\0\76\0\76"+ - "\0\76\0\76\0\76\0\u1132\0\u1170\0\u11ae\0\u11ec\0\u11ec"+ - "\0\u122a\0\u1268\0\u12a6\0\76\0\u12e4\0\u1322\0\u1360\0\u139e"+ - "\0\u13dc\0\u141a\0\272\0\u1458\0\u1496\0\u14d4\0\272\0\272"+ - "\0\u1512\0\u1550\0\u158e\0\272\0\u15cc\0\u160a\0\u1648\0\272"+ - "\0\u1686\0\272\0\u16c4\0\u1702\0\272\0\272\0\76\0\76"+ - "\0\76\0\76\0\u1740\0\u177e\0\76\0\u17bc\0\u17fa\0\u1838"+ - "\0\u1876\0\u18b4\0\u18f2\0\272\0\u1930\0\u196e\0\u19ac\0\u19ea"+ - "\0\u1a28\0\u1a66\0\272\0\272\0\u1aa4\0\u1ae2\0\272\0\u1b20"+ - "\0\u1b5e\0\u1b9c\0\76\0\u1bda\0\u11ec\0\u1c18\0\u1c56\0\u1c94"+ - "\0\u1cd2\0\272\0\u1d10\0\272\0\u1d4e\0\u1d8c\0\u1dca\0\272"+ - "\0\272\0\272\0\272\0\76\0\u1e08\0\u1e46\0\u1e84\0\272"+ - "\0\272\0\u1ec2\0\272\0\u1f00\0\u1f3e\0\u1f7c\0\u1fba\0\u1ff8"+ - "\0\u2036\0\272\0\u2074\0\u20b2\0\272\0\272\0\272"; + "\0\0\0\77\0\176\0\275\0\374\0\u013b\0\u017a\0\u01b9"+ + "\0\u01f8\0\u0237\0\u0276\0\u02b5\0\u02f4\0\u0333\0\u0372\0\u03b1"+ + "\0\u03f0\0\u042f\0\u046e\0\u04ad\0\u04ec\0\u052b\0\u056a\0\u05a9"+ + "\0\u05e8\0\u0627\0\u0666\0\u06a5\0\u06e4\0\u0723\0\u0762\0\u07a1"+ + "\0\u07e0\0\u081f\0\77\0\u085e\0\77\0\77\0\77\0\77"+ + "\0\77\0\77\0\77\0\77\0\77\0\77\0\77\0\u089d"+ + "\0\u08dc\0\u091b\0\u095a\0\77\0\77\0\u0999\0\u09d8\0\u0a17"+ + "\0\u0a56\0\77\0\77\0\77\0\77\0\77\0\77\0\77"+ + "\0\u0a95\0\u0ad4\0\u0b13\0\u0b52\0\u0b91\0\275\0\u0bd0\0\u0c0f"+ + "\0\u0c4e\0\u0c8d\0\u0ccc\0\u0d0b\0\u0d4a\0\u0d89\0\u0dc8\0\u0e07"+ + "\0\u0e46\0\275\0\u0e85\0\u0ec4\0\u0f03\0\275\0\275\0\275"+ + "\0\u0f42\0\u0f81\0\u0fc0\0\u0fff\0\u103e\0\u107d\0\u10bc\0\77"+ + "\0\u10fb\0\u113a\0\77\0\77\0\77\0\77\0\77\0\77"+ + "\0\77\0\77\0\77\0\77\0\u1179\0\u11b8\0\u11f7\0\u1236"+ + "\0\u1236\0\u1275\0\u12b4\0\u12f3\0\77\0\u1332\0\u1371\0\u13b0"+ + "\0\u13ef\0\u142e\0\u146d\0\275\0\u14ac\0\u14eb\0\u152a\0\275"+ + "\0\275\0\u1569\0\u15a8\0\u15e7\0\275\0\u1626\0\u1665\0\u16a4"+ + "\0\275\0\u16e3\0\275\0\u1722\0\u1761\0\275\0\275\0\77"+ + "\0\77\0\77\0\77\0\u17a0\0\u17df\0\77\0\u181e\0\u185d"+ + "\0\u189c\0\u18db\0\u191a\0\u1959\0\275\0\u1998\0\u19d7\0\u1a16"+ + "\0\u1a55\0\u1a94\0\u1ad3\0\275\0\275\0\u1b12\0\u1b51\0\275"+ + "\0\u1b90\0\u1bcf\0\u1c0e\0\77\0\u1c4d\0\u1236\0\u1c8c\0\u1ccb"+ + "\0\u1d0a\0\u1d49\0\275\0\u1d88\0\275\0\u1dc7\0\u1e06\0\u1e45"+ + "\0\275\0\275\0\275\0\275\0\77\0\u1e84\0\u1ec3\0\u1f02"+ + "\0\275\0\275\0\u1f41\0\275\0\u1f80\0\u1fbf\0\u1ffe\0\u203d"+ + "\0\u207c\0\u20bb\0\275\0\u20fa\0\u2139\0\275\0\275\0\275"; private static int [] zzUnpackRowMap() { - int [] result = new int[207]; + int [] result = new int[208]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -240,208 +240,208 @@ class _JetLexer implements FlexLexer { "\1\22\1\23\1\24\1\4\1\25\1\26\2\4\1\27"+ "\1\30\1\4\1\31\3\4\1\32\1\33\1\34\1\35"+ "\1\36\1\37\1\40\1\41\1\42\1\43\1\44\1\45"+ - "\1\46\1\47\1\50\1\51\1\52\1\53\1\54\77\0"+ - "\1\3\7\0\1\3\2\0\1\55\1\56\1\57\1\60"+ - "\5\0\1\56\1\60\15\0\1\56\4\0\1\55\25\0"+ - "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\27\4\25\0\1\5\4\0\1\5\73\0"+ - "\1\61\1\62\44\0\1\63\75\0\1\64\22\0\1\65"+ - "\7\0\1\65\1\66\1\67\1\55\1\56\1\57\1\60"+ - "\5\0\1\56\1\60\10\0\1\66\4\0\1\56\1\67"+ - "\3\0\1\55\25\0\1\70\5\0\1\71\1\0\1\70"+ - "\4\0\1\72\44\0\1\73\32\0\1\74\33\0\1\75"+ - "\3\0\1\76\15\0\10\13\1\0\11\13\1\77\1\100"+ - "\52\13\10\101\1\0\12\101\1\102\1\103\51\101\1\0"+ - "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\1\4\1\104\1\4\1\105\23\4\23\0"+ - "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\12\4\1\106\11\4\1\107\2\4\23\0"+ - "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\3\4\1\110\20\4\1\111\2\4\23\0"+ - "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\15\4\1\112\2\4\1\113\6\4\23\0"+ - "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\11\4\1\114\15\4\23\0\2\4\1\0"+ - "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ - "\1\4\1\115\25\4\23\0\2\4\1\0\2\4\3\0"+ - "\5\4\1\0\1\4\1\0\1\4\3\0\1\4\1\116"+ - "\7\4\1\117\3\4\1\120\11\4\23\0\2\4\1\0"+ - "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ - "\6\4\1\121\20\4\23\0\2\4\1\0\2\4\3\0"+ - "\5\4\1\0\1\4\1\0\1\4\3\0\7\4\1\122"+ - "\6\4\1\123\4\4\1\124\3\4\23\0\2\4\1\0"+ - "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ - "\6\4\1\125\1\4\1\126\6\4\1\127\7\4\23\0"+ - "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\3\4\1\130\5\4\1\131\3\4\1\132"+ - "\11\4\23\0\2\4\1\0\2\4\3\0\5\4\1\0"+ - "\1\4\1\0\1\4\3\0\7\4\1\133\17\4\23\0"+ - "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\23\4\1\134\3\4\23\0\2\4\1\0"+ - "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ - "\11\4\1\135\15\4\76\0\1\136\3\0\1\137\56\0"+ - "\1\140\12\0\1\141\75\0\1\142\1\0\1\143\73\0"+ - "\1\144\75\0\1\145\102\0\1\146\76\0\1\147\31\0"+ - "\1\150\45\0\1\151\65\0\1\152\22\0\1\70\7\0"+ - "\1\70\3\0\1\56\1\153\1\60\5\0\1\56\1\60"+ - "\15\0\1\56\32\0\1\154\7\0\1\154\3\0\1\56"+ - "\2\0\1\154\4\0\1\56\16\0\1\56\11\0\1\154"+ - "\17\0\10\61\1\0\65\61\7\155\1\156\66\155\1\0"+ - "\1\65\7\0\1\65\3\0\1\56\1\70\1\60\5\0"+ - "\1\56\1\60\15\0\1\56\31\0\1\157\2\66\5\157"+ - "\1\0\1\66\1\157\1\66\1\160\1\66\1\161\1\66"+ - "\1\157\1\162\3\157\3\66\2\157\1\162\3\157\1\66"+ - "\5\157\2\66\3\157\1\160\24\157\1\0\1\67\7\0"+ - "\1\67\2\0\1\55\1\0\1\163\32\0\1\55\25\0"+ - "\1\70\7\0\1\70\3\0\1\56\1\0\1\60\5\0"+ - "\1\56\1\60\15\0\1\56\31\0\10\13\1\0\65\13"+ - "\10\101\1\0\12\101\1\102\1\164\61\101\1\0\65\101"+ - "\24\0\1\165\52\0\2\4\1\0\2\4\3\0\5\4"+ - "\1\0\1\4\1\0\1\4\3\0\2\4\1\166\24\4"+ - "\23\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ - "\1\0\1\4\3\0\13\4\1\167\13\4\23\0\2\4"+ + "\1\46\1\47\1\50\1\51\1\52\1\53\1\54\1\55"+ + "\100\0\1\3\7\0\1\3\2\0\1\56\1\57\1\60"+ + "\1\61\5\0\1\57\1\61\15\0\1\57\4\0\1\56"+ + "\26\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\27\4\26\0\1\5\4\0\1\5"+ + "\74\0\1\62\1\63\44\0\1\64\76\0\1\65\23\0"+ + "\1\66\7\0\1\66\1\67\1\70\1\56\1\57\1\60"+ + "\1\61\5\0\1\57\1\61\10\0\1\67\4\0\1\57"+ + "\1\70\3\0\1\56\26\0\1\71\5\0\1\72\1\0"+ + "\1\71\4\0\1\73\44\0\1\74\33\0\1\75\33\0"+ + "\1\76\3\0\1\77\16\0\10\13\1\0\11\13\1\100"+ + "\1\101\53\13\10\102\1\0\12\102\1\103\1\104\52\102"+ + "\1\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\1\4\1\105\1\4\1\106\23\4"+ + "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\12\4\1\107\11\4\1\110\2\4"+ + "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\3\4\1\111\20\4\1\112\2\4"+ + "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\15\4\1\113\2\4\1\114\6\4"+ + "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\11\4\1\115\15\4\24\0\2\4"+ "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ - "\3\0\6\4\1\170\20\4\23\0\2\4\1\0\2\4"+ - "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\10\4"+ - "\1\171\16\4\23\0\2\4\1\0\2\4\3\0\5\4"+ - "\1\0\1\4\1\0\1\4\3\0\11\4\1\172\15\4"+ - "\23\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ - "\1\0\1\4\3\0\13\4\1\173\13\4\23\0\2\4"+ + "\3\0\1\4\1\116\25\4\24\0\2\4\1\0\2\4"+ + "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\1\4"+ + "\1\117\7\4\1\120\3\4\1\121\11\4\24\0\2\4"+ "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ - "\3\0\21\4\1\174\5\4\23\0\2\4\1\0\2\4"+ + "\3\0\6\4\1\122\20\4\24\0\2\4\1\0\2\4"+ + "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\7\4"+ + "\1\123\6\4\1\124\4\4\1\125\3\4\24\0\2\4"+ + "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ + "\3\0\6\4\1\126\1\4\1\127\6\4\1\130\7\4"+ + "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\3\4\1\131\5\4\1\132\3\4"+ + "\1\133\11\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\7\4\1\134\17\4"+ + "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\23\4\1\135\3\4\24\0\2\4"+ + "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ + "\3\0\11\4\1\136\15\4\77\0\1\137\3\0\1\140"+ + "\57\0\1\141\12\0\1\142\76\0\1\143\1\0\1\144"+ + "\74\0\1\145\76\0\1\146\103\0\1\147\77\0\1\150"+ + "\32\0\1\151\45\0\1\152\66\0\1\153\23\0\1\71"+ + "\7\0\1\71\3\0\1\57\1\154\1\61\5\0\1\57"+ + "\1\61\15\0\1\57\33\0\1\155\7\0\1\155\3\0"+ + "\1\57\2\0\1\155\4\0\1\57\16\0\1\57\11\0"+ + "\1\155\20\0\10\62\1\0\66\62\7\156\1\157\67\156"+ + "\1\0\1\66\7\0\1\66\3\0\1\57\1\71\1\61"+ + "\5\0\1\57\1\61\15\0\1\57\32\0\1\160\2\67"+ + "\5\160\1\0\1\67\1\160\1\67\1\161\1\67\1\162"+ + "\1\67\1\160\1\163\3\160\3\67\2\160\1\163\3\160"+ + "\1\67\5\160\2\67\3\160\1\161\25\160\1\0\1\70"+ + "\7\0\1\70\2\0\1\56\1\0\1\164\32\0\1\56"+ + "\26\0\1\71\7\0\1\71\3\0\1\57\1\0\1\61"+ + "\5\0\1\57\1\61\15\0\1\57\32\0\10\13\1\0"+ + "\66\13\10\102\1\0\12\102\1\103\1\165\62\102\1\0"+ + "\66\102\24\0\1\166\53\0\2\4\1\0\2\4\3\0"+ + "\5\4\1\0\1\4\1\0\1\4\3\0\2\4\1\167"+ + "\24\4\24\0\2\4\1\0\2\4\3\0\5\4\1\0"+ + "\1\4\1\0\1\4\3\0\13\4\1\170\13\4\24\0"+ + "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ + "\1\4\3\0\6\4\1\171\20\4\24\0\2\4\1\0"+ + "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ + "\10\4\1\172\16\4\24\0\2\4\1\0\2\4\3\0"+ + "\5\4\1\0\1\4\1\0\1\4\3\0\11\4\1\173"+ + "\15\4\24\0\2\4\1\0\2\4\3\0\5\4\1\0"+ + "\1\4\1\0\1\4\3\0\13\4\1\174\13\4\24\0"+ + "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ + "\1\4\3\0\21\4\1\175\5\4\24\0\2\4\1\0"+ + "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ + "\13\4\1\176\13\4\24\0\2\4\1\0\2\4\3\0"+ + "\5\4\1\0\1\4\1\0\1\4\3\0\13\4\1\177"+ + "\3\4\1\200\7\4\24\0\2\4\1\0\2\4\3\0"+ + "\5\4\1\0\1\4\1\0\1\4\3\0\22\4\1\201"+ + "\4\4\24\0\2\4\1\0\2\4\3\0\5\4\1\0"+ + "\1\4\1\0\1\4\3\0\4\4\1\202\22\4\24\0"+ + "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ + "\1\4\3\0\24\4\1\203\2\4\24\0\2\4\1\0"+ + "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ + "\15\4\1\204\1\205\10\4\24\0\2\4\1\0\2\4"+ + "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\5\4"+ + "\1\206\21\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\7\4\1\207\4\4"+ + "\1\210\12\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\7\4\1\211\17\4"+ + "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\24\4\1\212\2\4\24\0\2\4"+ + "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ + "\3\0\10\4\1\213\16\4\24\0\2\4\1\0\2\4"+ + "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\1\4"+ + "\1\214\25\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\14\4\1\215\12\4"+ + "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\7\4\1\216\14\4\1\217\2\4"+ + "\77\0\1\220\55\0\1\221\1\0\1\222\115\0\1\223"+ + "\23\0\1\155\7\0\1\155\3\0\1\57\7\0\1\57"+ + "\16\0\1\57\32\0\7\156\1\224\67\156\6\225\1\226"+ + "\1\157\67\225\1\0\2\160\6\0\1\160\1\0\1\160"+ + "\1\0\1\160\1\0\1\160\1\0\1\227\3\0\3\160"+ + "\2\0\1\227\3\0\1\160\5\0\2\160\32\0\2\160"+ + "\6\0\1\160\1\0\1\160\1\0\1\160\1\154\1\160"+ + "\1\0\1\227\3\0\3\160\2\0\1\227\3\0\1\160"+ + "\5\0\2\160\32\0\1\230\1\160\6\0\1\230\1\0"+ + "\1\160\1\0\1\160\1\0\1\160\1\231\1\227\3\0"+ + "\3\160\2\0\1\227\3\0\1\160\5\0\2\160\10\0"+ + "\1\231\36\0\1\154\60\0\24\166\1\232\52\166\1\0"+ + "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ + "\1\4\3\0\3\4\1\233\23\4\24\0\2\4\1\0"+ + "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ + "\1\4\1\234\25\4\24\0\2\4\1\0\2\4\3\0"+ + "\5\4\1\0\1\4\1\0\1\4\3\0\1\4\1\235"+ + "\25\4\24\0\2\4\1\0\2\4\3\0\5\4\1\0"+ + "\1\4\1\0\1\4\3\0\13\4\1\236\13\4\24\0"+ + "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ + "\1\4\3\0\6\4\1\237\20\4\24\0\2\4\1\0"+ + "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ + "\1\4\1\240\25\4\24\0\2\4\1\0\2\4\3\0"+ + "\5\4\1\0\1\4\1\0\1\4\3\0\2\4\1\241"+ + "\24\4\24\0\2\4\1\0\2\4\3\0\5\4\1\0"+ + "\1\4\1\0\1\4\3\0\15\4\1\242\11\4\24\0"+ + "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ + "\1\4\3\0\1\4\1\243\25\4\24\0\2\4\1\0"+ + "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ + "\24\4\1\244\2\4\24\0\2\4\1\0\2\4\3\0"+ + "\5\4\1\0\1\4\1\0\1\4\3\0\1\4\1\245"+ + "\25\4\24\0\2\4\1\0\2\4\3\0\5\4\1\0"+ + "\1\4\1\0\1\4\3\0\1\4\1\246\25\4\24\0"+ + "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ + "\1\4\3\0\3\4\1\247\23\4\24\0\2\4\1\0"+ + "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ + "\6\4\1\250\20\4\24\0\2\4\1\0\2\4\3\0"+ + "\5\4\1\0\1\4\1\0\1\4\3\0\6\4\1\251"+ + "\20\4\24\0\2\4\1\0\2\4\3\0\5\4\1\0"+ + "\1\4\1\0\1\4\3\0\11\4\1\252\15\4\24\0"+ + "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ + "\1\4\3\0\24\4\1\253\2\4\23\0\6\156\1\254"+ + "\1\224\67\156\7\225\1\255\67\225\1\0\1\155\7\0"+ + "\1\155\6\0\1\231\35\0\1\231\21\0\1\230\1\160"+ + "\6\0\1\230\1\0\1\160\1\0\1\256\1\0\1\160"+ + "\1\0\1\227\3\0\1\256\2\160\2\0\1\227\3\0"+ + "\1\160\5\0\1\256\1\160\32\0\1\155\7\0\1\155"+ + "\65\0\24\166\1\257\52\166\1\0\2\4\1\0\2\4"+ + "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\4\4"+ + "\1\260\22\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\10\4\1\261\16\4"+ + "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\14\4\1\262\12\4\24\0\2\4"+ + "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ + "\3\0\6\4\1\263\20\4\24\0\2\4\1\0\2\4"+ + "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\2\4"+ + "\1\264\24\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\23\4\1\265\3\4"+ + "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\7\4\1\266\17\4\24\0\2\4"+ + "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ + "\3\0\6\4\1\267\20\4\24\0\2\4\1\0\2\4"+ + "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\3\4"+ + "\1\270\23\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\22\4\1\271\4\4"+ + "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\1\4\1\272\25\4\24\0\2\4"+ + "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ + "\3\0\25\4\1\273\1\4\24\0\2\4\1\0\2\4"+ + "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\1\4"+ + "\1\274\25\4\23\0\6\225\1\226\1\255\67\225\24\166"+ + "\1\275\52\166\1\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\5\4\1\276\21\4"+ + "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\6\4\1\277\20\4\24\0\2\4"+ + "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ + "\3\0\10\4\1\300\16\4\24\0\2\4\1\0\2\4"+ "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\13\4"+ - "\1\175\13\4\23\0\2\4\1\0\2\4\3\0\5\4"+ - "\1\0\1\4\1\0\1\4\3\0\13\4\1\176\3\4"+ - "\1\177\7\4\23\0\2\4\1\0\2\4\3\0\5\4"+ - "\1\0\1\4\1\0\1\4\3\0\22\4\1\200\4\4"+ - "\23\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ - "\1\0\1\4\3\0\4\4\1\201\22\4\23\0\2\4"+ + "\1\301\13\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\10\4\1\302\16\4"+ + "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\5\4\1\303\21\4\24\0\2\4"+ "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ - "\3\0\24\4\1\202\2\4\23\0\2\4\1\0\2\4"+ - "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\15\4"+ - "\1\203\1\204\10\4\23\0\2\4\1\0\2\4\3\0"+ - "\5\4\1\0\1\4\1\0\1\4\3\0\5\4\1\205"+ - "\21\4\23\0\2\4\1\0\2\4\3\0\5\4\1\0"+ - "\1\4\1\0\1\4\3\0\7\4\1\206\4\4\1\207"+ - "\12\4\23\0\2\4\1\0\2\4\3\0\5\4\1\0"+ - "\1\4\1\0\1\4\3\0\7\4\1\210\17\4\23\0"+ - "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\24\4\1\211\2\4\23\0\2\4\1\0"+ - "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ - "\10\4\1\212\16\4\23\0\2\4\1\0\2\4\3\0"+ - "\5\4\1\0\1\4\1\0\1\4\3\0\1\4\1\213"+ - "\25\4\23\0\2\4\1\0\2\4\3\0\5\4\1\0"+ - "\1\4\1\0\1\4\3\0\14\4\1\214\12\4\23\0"+ - "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\7\4\1\215\14\4\1\216\2\4\76\0"+ - "\1\217\54\0\1\220\1\0\1\221\114\0\1\222\22\0"+ - "\1\154\7\0\1\154\3\0\1\56\7\0\1\56\16\0"+ - "\1\56\31\0\7\155\1\223\66\155\6\224\1\225\1\156"+ - "\66\224\1\0\2\157\6\0\1\157\1\0\1\157\1\0"+ - "\1\157\1\0\1\157\1\0\1\226\3\0\3\157\2\0"+ - "\1\226\3\0\1\157\5\0\2\157\31\0\2\157\6\0"+ - "\1\157\1\0\1\157\1\0\1\157\1\153\1\157\1\0"+ - "\1\226\3\0\3\157\2\0\1\226\3\0\1\157\5\0"+ - "\2\157\31\0\1\227\1\157\6\0\1\227\1\0\1\157"+ - "\1\0\1\157\1\0\1\157\1\230\1\226\3\0\3\157"+ - "\2\0\1\226\3\0\1\157\5\0\2\157\10\0\1\230"+ - "\35\0\1\153\57\0\24\165\1\231\51\165\1\0\2\4"+ + "\3\0\17\4\1\304\7\4\24\0\2\4\1\0\2\4"+ + "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\3\4"+ + "\1\305\23\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\14\4\1\306\12\4"+ + "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\15\4\1\307\11\4\24\0\2\4"+ "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ - "\3\0\3\4\1\232\23\4\23\0\2\4\1\0\2\4"+ - "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\1\4"+ - "\1\233\25\4\23\0\2\4\1\0\2\4\3\0\5\4"+ - "\1\0\1\4\1\0\1\4\3\0\1\4\1\234\25\4"+ - "\23\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ - "\1\0\1\4\3\0\13\4\1\235\13\4\23\0\2\4"+ - "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ - "\3\0\6\4\1\236\20\4\23\0\2\4\1\0\2\4"+ - "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\1\4"+ - "\1\237\25\4\23\0\2\4\1\0\2\4\3\0\5\4"+ - "\1\0\1\4\1\0\1\4\3\0\2\4\1\240\24\4"+ - "\23\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ - "\1\0\1\4\3\0\15\4\1\241\11\4\23\0\2\4"+ - "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ - "\3\0\1\4\1\242\25\4\23\0\2\4\1\0\2\4"+ - "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\24\4"+ - "\1\243\2\4\23\0\2\4\1\0\2\4\3\0\5\4"+ - "\1\0\1\4\1\0\1\4\3\0\1\4\1\244\25\4"+ - "\23\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ - "\1\0\1\4\3\0\1\4\1\245\25\4\23\0\2\4"+ - "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ - "\3\0\3\4\1\246\23\4\23\0\2\4\1\0\2\4"+ + "\3\0\11\4\1\310\15\4\24\0\2\4\1\0\2\4"+ "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\6\4"+ - "\1\247\20\4\23\0\2\4\1\0\2\4\3\0\5\4"+ - "\1\0\1\4\1\0\1\4\3\0\6\4\1\250\20\4"+ - "\23\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ - "\1\0\1\4\3\0\11\4\1\251\15\4\23\0\2\4"+ + "\1\311\20\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\3\4\1\312\23\4"+ + "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\1\4\1\313\25\4\24\0\2\4"+ "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ - "\3\0\24\4\1\252\2\4\22\0\6\155\1\253\1\223"+ - "\66\155\7\224\1\254\66\224\1\0\1\154\7\0\1\154"+ - "\6\0\1\230\35\0\1\230\20\0\1\227\1\157\6\0"+ - "\1\227\1\0\1\157\1\0\1\255\1\0\1\157\1\0"+ - "\1\226\3\0\1\255\2\157\2\0\1\226\3\0\1\157"+ - "\5\0\1\255\1\157\31\0\1\154\7\0\1\154\64\0"+ - "\24\165\1\256\51\165\1\0\2\4\1\0\2\4\3\0"+ - "\5\4\1\0\1\4\1\0\1\4\3\0\4\4\1\257"+ - "\22\4\23\0\2\4\1\0\2\4\3\0\5\4\1\0"+ - "\1\4\1\0\1\4\3\0\10\4\1\260\16\4\23\0"+ - "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\14\4\1\261\12\4\23\0\2\4\1\0"+ - "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ - "\6\4\1\262\20\4\23\0\2\4\1\0\2\4\3\0"+ - "\5\4\1\0\1\4\1\0\1\4\3\0\2\4\1\263"+ - "\24\4\23\0\2\4\1\0\2\4\3\0\5\4\1\0"+ - "\1\4\1\0\1\4\3\0\23\4\1\264\3\4\23\0"+ - "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\7\4\1\265\17\4\23\0\2\4\1\0"+ - "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ - "\6\4\1\266\20\4\23\0\2\4\1\0\2\4\3\0"+ - "\5\4\1\0\1\4\1\0\1\4\3\0\3\4\1\267"+ - "\23\4\23\0\2\4\1\0\2\4\3\0\5\4\1\0"+ - "\1\4\1\0\1\4\3\0\22\4\1\270\4\4\23\0"+ - "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\1\4\1\271\25\4\23\0\2\4\1\0"+ - "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ - "\25\4\1\272\1\4\23\0\2\4\1\0\2\4\3\0"+ - "\5\4\1\0\1\4\1\0\1\4\3\0\1\4\1\273"+ - "\25\4\22\0\6\224\1\225\1\254\66\224\24\165\1\274"+ - "\51\165\1\0\2\4\1\0\2\4\3\0\5\4\1\0"+ - "\1\4\1\0\1\4\3\0\5\4\1\275\21\4\23\0"+ - "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\6\4\1\276\20\4\23\0\2\4\1\0"+ - "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ - "\10\4\1\277\16\4\23\0\2\4\1\0\2\4\3\0"+ - "\5\4\1\0\1\4\1\0\1\4\3\0\13\4\1\300"+ - "\13\4\23\0\2\4\1\0\2\4\3\0\5\4\1\0"+ - "\1\4\1\0\1\4\3\0\10\4\1\301\16\4\23\0"+ - "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\5\4\1\302\21\4\23\0\2\4\1\0"+ - "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ - "\17\4\1\303\7\4\23\0\2\4\1\0\2\4\3\0"+ - "\5\4\1\0\1\4\1\0\1\4\3\0\3\4\1\304"+ - "\23\4\23\0\2\4\1\0\2\4\3\0\5\4\1\0"+ - "\1\4\1\0\1\4\3\0\14\4\1\305\12\4\23\0"+ - "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\15\4\1\306\11\4\23\0\2\4\1\0"+ - "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ - "\11\4\1\307\15\4\23\0\2\4\1\0\2\4\3\0"+ - "\5\4\1\0\1\4\1\0\1\4\3\0\6\4\1\310"+ - "\20\4\23\0\2\4\1\0\2\4\3\0\5\4\1\0"+ - "\1\4\1\0\1\4\3\0\3\4\1\311\23\4\23\0"+ - "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\1\4\1\312\25\4\23\0\2\4\1\0"+ - "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ - "\2\4\1\313\24\4\23\0\2\4\1\0\2\4\3\0"+ - "\5\4\1\0\1\4\1\0\1\4\3\0\1\4\1\314"+ - "\25\4\23\0\2\4\1\0\2\4\3\0\5\4\1\0"+ - "\1\4\1\0\1\4\3\0\10\4\1\315\16\4\23\0"+ - "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\1\4\1\316\25\4\23\0\2\4\1\0"+ - "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ - "\7\4\1\317\17\4\22\0"; + "\3\0\2\4\1\314\24\4\24\0\2\4\1\0\2\4"+ + "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\1\4"+ + "\1\315\25\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\10\4\1\316\16\4"+ + "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\1\4\1\317\25\4\24\0\2\4"+ + "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ + "\3\0\7\4\1\320\17\4\23\0"; private static int [] zzUnpackTrans() { - int [] result = new int[8432]; + int [] result = new int[8568]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -482,14 +482,14 @@ class _JetLexer implements FlexLexer { private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\1\0\1\11\40\1\1\11\1\1\12\11\4\1\2\11"+ + "\1\0\1\11\40\1\1\11\1\1\13\11\4\1\2\11"+ "\1\0\3\1\7\11\37\1\1\11\1\0\1\1\12\11"+ "\3\1\1\0\1\1\3\0\1\11\32\1\4\11\1\0"+ "\1\1\1\11\1\0\1\1\2\0\21\1\1\11\1\0"+ "\1\1\1\0\15\1\1\11\23\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[207]; + int [] result = new int[208]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -797,355 +797,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 59: + case 91: break; + case 60: { return JetTokens.OUT_KEYWORD ; } - case 91: break; - case 83: + case 92: break; + case 84: { return JetTokens.RETURN_KEYWORD ; } - case 92: break; - case 72: + case 93: break; + case 73: { return JetTokens.NULL_KEYWORD ; } - case 93: break; + case 94: break; case 14: { return JetTokens.LT ; } - case 94: break; - case 39: + case 95: break; + case 40: { return JetTokens.DO_KEYWORD ; } - case 95: break; + case 96: break; case 13: { return JetTokens.PLUS ; } - case 96: break; - case 27: + case 97: break; + case 28: { return JetTokens.LONG_LITERAL; } - case 97: break; - case 58: + case 98: break; + case 59: { return JetTokens.RAW_STRING_LITERAL; } - case 98: break; - case 47: + case 99: break; + case 48: { return JetTokens.PLUSEQ ; } - case 99: break; - case 77: + case 100: break; + case 78: { return JetTokens.MATCH_KEYWORD ; } - case 100: break; + case 101: break; case 26: { return JetTokens.COMMA ; } - case 101: break; + case 102: break; case 15: { return JetTokens.GT ; } - case 102: break; + case 103: break; case 4: { return JetTokens.WHITE_SPACE; } - case 103: break; - case 84: + case 104: break; + case 85: { return JetTokens.TYPEOF_KEYWORD ; } - case 104: break; + case 105: break; case 24: { return JetTokens.RPAR ; } - case 105: break; - case 45: + case 106: break; + case 46: { return JetTokens.DOUBLE_ARROW; } - case 106: break; - case 73: + case 107: break; + case 74: { return JetTokens.TRUE_KEYWORD ; } - case 107: break; - case 51: + case 108: break; + case 52: { return JetTokens.ANDAND ; } - case 108: break; - case 57: - { return JetTokens.DOC_COMMENT; - } case 109: break; - case 28: - { return JetTokens.FLOAT_LITERAL; + case 58: + { return JetTokens.DOC_COMMENT; } case 110: break; case 29: - { return JetTokens.EOL_COMMENT; + { return JetTokens.FLOAT_LITERAL; } case 111: break; + case 30: + { return JetTokens.EOL_COMMENT; + } + case 112: break; case 17: { return JetTokens.COLON ; } - case 112: break; - case 49: + case 113: break; + case 50: { return JetTokens.LTEQ ; } - case 113: break; - case 38: + case 114: break; + case 39: { return JetTokens.ARROW ; } - case 114: break; + case 115: break; case 19: { return JetTokens.LBRACKET ; } - case 115: break; - case 56: + case 116: break; + case 57: { yypushback(2); return JetTokens.INTEGER_LITERAL; } - case 116: break; + case 117: break; case 9: { return JetTokens.CHARACTER_LITERAL; } - case 117: break; - case 65: + case 118: break; + case 66: { return JetTokens.VAR_KEYWORD ; } - case 118: break; - case 50: + case 119: break; + case 51: { return JetTokens.GTEQ ; } - case 119: break; + case 120: break; case 2: { return JetTokens.INTEGER_LITERAL; } - case 120: break; + case 121: break; case 22: { return JetTokens.RBRACE ; } - case 121: break; - case 76: + case 122: break; + case 77: { return JetTokens.CLASS_KEYWORD ; } - case 122: break; + case 123: break; case 12: { return JetTokens.EXCL ; } - case 123: break; - case 62: + case 124: break; + case 63: { return JetTokens.TRY_KEYWORD ; } - case 124: break; - case 46: + case 125: break; + case 47: { return JetTokens.EXCLEQ ; } - case 125: break; - case 37: + case 126: break; + case 38: { return JetTokens.MINUSEQ ; } - case 126: break; - case 78: + case 127: break; + case 79: { return JetTokens.THROW_KEYWORD ; } - case 127: break; - case 81: + case 128: break; + case 82: { return JetTokens.WHILE_KEYWORD ; } - case 128: break; - case 36: + case 129: break; + case 37: { return JetTokens.MINUSMINUS; } - case 129: break; - case 85: + case 130: break; + case 86: { return JetTokens.CONTINUE_KEYWORD ; } - case 130: break; - case 69: + case 131: break; + case 70: { return JetTokens.NOT_IN; } - case 131: break; + case 132: break; case 5: { return JetTokens.DIV ; } - case 132: break; - case 54: + case 133: break; + case 55: { return JetTokens.ELVIS ; } - case 133: break; + case 134: break; case 16: { return JetTokens.QUEST ; } - case 134: break; - case 52: + case 135: break; + case 53: { return JetTokens.OROR ; } - case 135: break; + case 136: break; case 18: { return JetTokens.PERC ; } - case 136: break; - case 70: + case 137: break; + case 71: { return JetTokens.EXCLEQEQEQ; } - case 137: break; - case 55: + case 138: break; + case 56: { return JetTokens.PERCEQ ; } - case 138: break; - case 34: + case 139: break; + case 35: { return JetTokens.RANGE ; } - case 139: break; + case 140: break; case 1: { return TokenType.BAD_CHARACTER; } - case 140: break; - case 53: - { return JetTokens.SAFE_ACCESS; - } case 141: break; - case 87: - { return JetTokens.NAMESPACE_KEYWORD ; + case 54: + { return JetTokens.SAFE_ACCESS; } case 142: break; case 88: - { return JetTokens.DECOMPOSER_KEYWORD ; + { return JetTokens.NAMESPACE_KEYWORD ; } case 143: break; - case 68: - { return JetTokens.NOT_IS; + case 89: + { return JetTokens.DECOMPOSER_KEYWORD ; } case 144: break; + case 69: + { return JetTokens.NOT_IS; + } + case 145: break; case 6: { return JetTokens.MUL ; } - case 145: break; + case 146: break; case 20: { return JetTokens.RBRACKET ; } - case 146: break; - case 48: + case 147: break; + case 49: { return JetTokens.PLUSPLUS ; } - case 147: break; - case 75: + case 148: break; + case 76: { return JetTokens.THIS_KEYWORD ; } - case 148: break; + case 149: break; case 7: { return JetTokens.DOT ; } - case 149: break; + case 150: break; case 25: { return JetTokens.SEMICOLON ; } - case 150: break; - case 43: + case 151: break; + case 44: { return JetTokens.IF_KEYWORD ; } - case 151: break; + case 152: break; case 11: { return JetTokens.EQ ; } - case 152: break; + case 153: break; case 23: { return JetTokens.LPAR ; } - case 153: break; + case 154: break; case 8: { return JetTokens.MINUS ; } - case 154: break; - case 79: + case 155: break; + case 80: { return JetTokens.FALSE_KEYWORD ; } - case 155: break; - case 74: + case 156: break; + case 75: { return JetTokens.TYPE_KEYWORD ; } - case 156: break; - case 60: + case 157: break; + case 61: { return JetTokens.REF_KEYWORD ; } - case 157: break; - case 64: + case 158: break; + case 65: { return JetTokens.FUN_KEYWORD ; } - case 158: break; - case 41: + case 159: break; + case 42: { return JetTokens.IS_KEYWORD ; } - case 159: break; - case 31: + case 160: break; + case 32: { return JetTokens.DIVEQ ; } - case 160: break; - case 86: + case 161: break; + case 87: { return JetTokens.EXTENSION_KEYWORD ; } - case 161: break; - case 40: - { return JetTokens.AS_KEYWORD ; - } case 162: break; - case 71: + case 72: { return JetTokens.ELSE_KEYWORD ; } case 163: break; - case 42: - { return JetTokens.IN_KEYWORD ; + case 41: + { return JetTokens.AS_KEYWORD ; } case 164: break; - case 44: - { return JetTokens.EQEQ ; + case 43: + { return JetTokens.IN_KEYWORD ; } case 165: break; - case 66: - { return JetTokens.VAL_KEYWORD ; + case 45: + { return JetTokens.EQEQ ; } case 166: break; case 67: - { return JetTokens.EQEQEQ ; + { return JetTokens.VAL_KEYWORD ; } case 167: break; - case 61: - { return JetTokens.NEW_KEYWORD ; + case 68: + { return JetTokens.EQEQEQ ; } case 168: break; - case 32: - { return JetTokens.MULTEQ ; + case 62: + { return JetTokens.NEW_KEYWORD ; } case 169: break; + case 33: + { return JetTokens.MULTEQ ; + } + case 170: break; case 10: { return JetTokens.STRING_LITERAL; } - case 170: break; + case 171: break; case 21: { return JetTokens.LBRACE ; } - case 171: break; - case 82: + case 172: break; + case 83: { return JetTokens.OBJECT_KEYWORD ; } - case 172: break; - case 80: + case 173: break; + case 81: { return JetTokens.BREAK_KEYWORD ; } - case 173: break; - case 30: + case 174: break; + case 31: { return JetTokens.BLOCK_COMMENT; } - case 174: break; - case 35: + case 175: break; + case 36: { return JetTokens.FILTER ; } - case 175: break; - case 33: + case 176: break; + case 27: + { return JetTokens.HASH ; + } + case 177: break; + case 34: { return JetTokens.MAP ; } - case 176: break; + case 178: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; diff --git a/idea/testData/psi/FunctionLiterals_ERR.txt b/idea/testData/psi/FunctionLiterals_ERR.txt index 922ef7aae78..3e7129149a4 100644 --- a/idea/testData/psi/FunctionLiterals_ERR.txt +++ b/idea/testData/psi/FunctionLiterals_ERR.txt @@ -42,16 +42,16 @@ JetFile: FunctionLiterals_ERR.jet PsiWhiteSpace('\n\n ') FUNCTION_LITERAL PsiElement(LBRACE)('{') - BODY - TUPLE - PsiElement(LPAR)('(') + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + VALUE_PARAMETER PsiElement(IDENTIFIER)('a') - PsiErrorElement:Expecting ')' - - PsiWhiteSpace(' ') - PsiErrorElement:Expecting an expression - PsiElement(DOUBLE_ARROW)('=>') - PsiWhiteSpace(' ') + PsiErrorElement:Expecting ') + + PsiWhiteSpace(' ') + PsiElement(DOUBLE_ARROW)('=>') + PsiWhiteSpace(' ') + BODY PsiElement(IDENTIFIER)('a') PsiElement(RBRACE)('}') PsiWhiteSpace('\n ')