diff --git a/compiler/frontend/buildLexer.xml b/compiler/frontend/buildLexer.xml
index f39f99d46cd..f4baffab192 100644
--- a/compiler/frontend/buildLexer.xml
+++ b/compiler/frontend/buildLexer.xml
@@ -24,7 +24,10 @@
jvmargs="-Xmx512M"
fork="true"
failonerror="true">
+
+
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderImpl.java
index a77c7560376..f3a214e0afd 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderImpl.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderImpl.java
@@ -55,7 +55,8 @@ public class SemanticWhitespaceAwarePsiBuilderImpl extends PsiBuilderAdapter imp
if (previousToken == JetTokens.BLOCK_COMMENT
|| previousToken == JetTokens.DOC_COMMENT
- || previousToken == JetTokens.EOL_COMMENT) {
+ || previousToken == JetTokens.EOL_COMMENT
+ || previousToken == SHEBANG_COMMENT) {
continue;
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex b/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex
index 2b79ebc5822..310fce39033 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex
+++ b/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex
@@ -12,6 +12,8 @@ import org.jetbrains.jet.lexer.JetTokens;
%unicode
%class _JetLexer
%implements FlexLexer
+%column
+%line
%{
private static final class State {
@@ -31,6 +33,9 @@ import org.jetbrains.jet.lexer.JetTokens;
private final Stack states = new Stack();
private int lBraceCount;
+
+ private int yyline;
+ private int yycolumn;
private int commentStart;
private int commentDepth;
@@ -84,6 +89,7 @@ FIELD_IDENTIFIER = \${IDENTIFIER}
LABEL_IDENTIFIER = \@{IDENTIFIER}
EOL_COMMENT="/""/"[^\n]*
+SHEBANG_COMMENT="#!"[^\n]*
INTEGER_LITERAL={DECIMAL_INTEGER_LITERAL}|{HEX_INTEGER_LITERAL}|{BIN_INTEGER_LITERAL}
DECIMAL_INTEGER_LITERAL=(0|([1-9]({DIGIT})*))
@@ -212,6 +218,15 @@ LONG_TEMPLATE_ENTRY_END=\}
({WHITE_SPACE_CHAR})+ { return JetTokens.WHITE_SPACE; }
{EOL_COMMENT} { return JetTokens.EOL_COMMENT; }
+{SHEBANG_COMMENT} {
+ if (yyline == 0 && yycolumn == 0) {
+ return JetTokens.SHEBANG_COMMENT;
+ }
+ else {
+ yypushback(yylength() - 1);
+ return JetTokens.HASH;
+ }
+ }
{INTEGER_LITERAL}\.\. { yypushback(2); return JetTokens.INTEGER_LITERAL; }
{INTEGER_LITERAL} { return JetTokens.INTEGER_LITERAL; }
diff --git a/compiler/frontend/src/org/jetbrains/jet/lexer/JetTokens.java b/compiler/frontend/src/org/jetbrains/jet/lexer/JetTokens.java
index 368b102bf55..b5bdb031bdf 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lexer/JetTokens.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lexer/JetTokens.java
@@ -29,6 +29,7 @@ public interface JetTokens {
JetToken BLOCK_COMMENT = new JetToken("BLOCK_COMMENT");
JetToken DOC_COMMENT = new JetToken("DOC_COMMENT");
JetToken EOL_COMMENT = new JetToken("EOL_COMMENT");
+ JetToken SHEBANG_COMMENT = new JetToken("SHEBANG_COMMENT");
IElementType WHITE_SPACE = TokenType.WHITE_SPACE;
@@ -180,9 +181,9 @@ public interface JetTokens {
OPEN_KEYWORD, ANNOTATION_KEYWORD, OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD,
PROTECTED_KEYWORD, OUT_KEYWORD, IN_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, INLINE_KEYWORD, ERASED_KEYWORD
);
- TokenSet WHITE_SPACE_OR_COMMENT_BIT_SET = TokenSet.create(WHITE_SPACE, BLOCK_COMMENT, EOL_COMMENT, DOC_COMMENT);
+ TokenSet WHITE_SPACE_OR_COMMENT_BIT_SET = TokenSet.create(WHITE_SPACE, BLOCK_COMMENT, EOL_COMMENT, DOC_COMMENT, SHEBANG_COMMENT);
TokenSet WHITESPACES = TokenSet.create(TokenType.WHITE_SPACE);
- TokenSet COMMENTS = TokenSet.create(EOL_COMMENT, BLOCK_COMMENT, DOC_COMMENT);
+ TokenSet COMMENTS = TokenSet.create(EOL_COMMENT, BLOCK_COMMENT, DOC_COMMENT, SHEBANG_COMMENT);
TokenSet STRINGS = TokenSet.create(CHARACTER_LITERAL, REGULAR_STRING_PART);
TokenSet OPERATIONS = TokenSet.create(AS_KEYWORD, AS_SAFE, IS_KEYWORD, IN_KEYWORD, DOT, PLUSPLUS, MINUSMINUS, EXCLEXCL, MUL, PLUS,
diff --git a/compiler/frontend/src/org/jetbrains/jet/lexer/_JetLexer.java b/compiler/frontend/src/org/jetbrains/jet/lexer/_JetLexer.java
index 24111616741..d76319fd7ad 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lexer/_JetLexer.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lexer/_JetLexer.java
@@ -1,4 +1,4 @@
-/* The following code was generated by JFlex 1.4.3 on 3/23/12 10:24 AM */
+/* The following code was generated by JFlex 1.4.3 on 5/28/12 10:57 PM */
package org.jetbrains.jet.lexer;
@@ -13,8 +13,8 @@ import org.jetbrains.jet.lexer.JetTokens;
/**
* This class is a scanner generated by
* JFlex 1.4.3
- * on 3/23/12 10:24 AM from the specification file
- * /Users/abreslav/work/jet/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex
+ * on 5/28/12 10:57 PM from the specification file
+ * /Users/yozh/devel/jb/jet/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex
*/
class _JetLexer implements FlexLexer {
/** initial size of the lookahead buffer */
@@ -43,14 +43,14 @@ class _JetLexer implements FlexLexer {
* Translates characters to character classes
*/
private static final String ZZ_CMAP_PACKED =
- "\11\0\1\3\1\7\1\0\1\3\23\0\1\3\1\57\1\24\1\61"+
- "\1\10\1\70\1\66\1\22\1\73\1\74\1\34\1\65\1\77\1\20"+
- "\1\16\1\12\1\13\11\1\1\75\1\76\1\60\1\63\1\62\1\64"+
- "\1\11\1\2\1\15\2\2\1\17\1\2\11\4\1\21\3\4\1\54"+
- "\3\4\1\14\2\4\1\71\1\23\1\72\1\0\1\4\1\6\1\42"+
- "\1\46\1\35\1\56\1\40\1\52\1\44\1\31\1\32\1\47\1\43"+
- "\1\51\1\4\1\37\1\36\1\41\1\4\1\45\1\33\1\30\1\25"+
- "\1\55\1\50\1\14\1\53\1\4\1\26\1\67\1\27\54\0\1\4"+
+ "\11\0\1\3\1\7\1\0\1\3\23\0\1\3\1\14\1\26\1\13"+
+ "\1\10\1\70\1\66\1\24\1\73\1\74\1\36\1\65\1\77\1\22"+
+ "\1\20\1\12\1\15\11\1\1\75\1\76\1\61\1\63\1\62\1\64"+
+ "\1\11\1\2\1\17\2\2\1\21\1\2\11\4\1\23\3\4\1\56"+
+ "\3\4\1\16\2\4\1\71\1\25\1\72\1\0\1\4\1\6\1\44"+
+ "\1\50\1\37\1\60\1\42\1\54\1\46\1\33\1\34\1\51\1\45"+
+ "\1\53\1\4\1\41\1\40\1\43\1\4\1\47\1\35\1\32\1\27"+
+ "\1\57\1\52\1\16\1\55\1\4\1\30\1\67\1\31\54\0\1\4"+
"\12\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\213\0\1\4"+
"\13\0\1\4\1\0\3\4\1\0\1\4\1\0\24\4\1\0\54\4"+
@@ -123,28 +123,29 @@ class _JetLexer implements FlexLexer {
private static final String ZZ_ACTION_PACKED_0 =
"\6\0\1\1\1\2\1\3\1\4\2\1\1\5\1\6"+
- "\1\2\1\7\1\10\1\11\1\12\1\13\1\14\3\3"+
- "\1\15\15\3\1\16\1\17\1\20\1\21\1\22\1\23"+
+ "\1\7\1\10\1\2\1\11\1\12\1\13\1\14\1\15"+
+ "\1\16\3\3\1\17\15\3\1\20\1\21\1\22\1\23"+
"\1\24\2\1\1\25\1\26\1\27\1\30\1\31\1\32"+
"\1\33\1\34\1\35\1\36\1\35\1\0\1\37\2\35"+
"\1\40\1\0\1\40\3\41\1\42\1\43\1\0\1\44"+
"\1\0\1\45\1\0\1\46\1\0\1\47\1\50\1\51"+
- "\1\52\1\44\2\2\1\44\1\53\1\54\1\55\1\56"+
- "\2\11\1\0\3\3\1\57\1\60\1\61\1\3\1\62"+
- "\6\3\1\63\10\3\1\64\1\0\1\65\1\0\1\66"+
- "\1\0\1\67\1\70\1\71\1\72\1\73\1\74\1\75"+
- "\1\76\1\77\1\0\1\100\2\101\2\0\1\40\1\102"+
- "\1\103\1\104\1\44\1\3\2\0\1\105\4\0\1\106"+
- "\4\3\1\107\10\3\1\110\4\3\1\111\1\112\2\3"+
- "\1\113\1\114\1\115\1\116\1\117\1\120\1\121\1\122"+
- "\2\0\2\40\1\45\1\46\1\123\1\44\1\0\1\124"+
- "\1\3\1\125\1\3\1\126\4\3\1\127\1\130\4\3"+
- "\1\131\1\3\1\132\1\133\1\77\1\0\1\134\1\135"+
- "\1\136\1\137\1\3\1\140\3\3\1\141\1\142\1\143"+
- "\1\0\1\3\1\144\1\3\1\145\1\3\1\146\1\147";
+ "\1\52\1\53\1\0\1\54\1\44\2\2\1\44\1\55"+
+ "\1\56\1\57\1\60\2\13\1\0\3\3\1\61\1\62"+
+ "\1\63\1\3\1\64\6\3\1\65\10\3\1\66\1\0"+
+ "\1\67\1\0\1\70\1\71\1\72\1\73\1\74\1\75"+
+ "\1\76\1\77\1\100\1\0\1\101\2\102\2\0\1\40"+
+ "\1\103\1\104\1\105\1\44\1\3\2\0\1\106\1\107"+
+ "\1\110\1\111\4\0\1\112\4\3\1\113\10\3\1\114"+
+ "\4\3\1\115\1\116\2\3\1\117\1\120\1\121\1\122"+
+ "\1\123\2\0\2\40\1\45\1\46\1\124\1\125\1\44"+
+ "\1\0\1\126\1\3\1\127\1\3\1\130\4\3\1\131"+
+ "\1\132\4\3\1\133\1\3\1\134\1\100\1\0\1\135"+
+ "\1\136\1\137\1\140\1\3\1\141\3\3\1\142\1\143"+
+ "\1\144\1\0\1\3\1\145\1\3\1\146\1\3\1\147"+
+ "\1\150";
private static int [] zzUnpackAction() {
- int [] result = new int[230];
+ int [] result = new int[231];
int offset = 0;
offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
return result;
@@ -171,36 +172,36 @@ class _JetLexer implements FlexLexer {
private static final String ZZ_ROWMAP_PACKED_0 =
"\0\0\0\100\0\200\0\300\0\u0100\0\u0140\0\u0180\0\u01c0"+
"\0\u0200\0\u0240\0\u0280\0\u02c0\0\u0300\0\u0340\0\u0380\0\u03c0"+
- "\0\u0400\0\u0440\0\u0480\0\u0180\0\u0180\0\u04c0\0\u0500\0\u0540"+
+ "\0\u0400\0\u0440\0\u0480\0\u04c0\0\u0500\0\u0180\0\u0180\0\u0540"+
"\0\u0580\0\u05c0\0\u0600\0\u0640\0\u0680\0\u06c0\0\u0700\0\u0740"+
"\0\u0780\0\u07c0\0\u0800\0\u0840\0\u0880\0\u08c0\0\u0900\0\u0940"+
- "\0\u0180\0\u0980\0\u09c0\0\u0180\0\u0a00\0\u0a40\0\u0a80\0\u0ac0"+
- "\0\u0180\0\u0180\0\u0180\0\u0180\0\u0180\0\u0180\0\u0180\0\u0b00"+
- "\0\u0180\0\u0b40\0\u0b80\0\u0180\0\u0180\0\u0bc0\0\u0c00\0\u0c40"+
- "\0\u0c80\0\u0180\0\u0cc0\0\u0d00\0\u0180\0\u0180\0\u0d40\0\u0d80"+
- "\0\u0dc0\0\u0e00\0\u0e40\0\u0e80\0\u0ec0\0\u0180\0\u0f00\0\u0f40"+
- "\0\u0180\0\u0f80\0\u0fc0\0\u1000\0\u1040\0\u0180\0\u0180\0\u0180"+
- "\0\u0180\0\u0180\0\u1080\0\u10c0\0\u1100\0\u1140\0\u1180\0\u0200"+
- "\0\u0200\0\u0200\0\u11c0\0\u0180\0\u1200\0\u1240\0\u1280\0\u12c0"+
- "\0\u1300\0\u1340\0\u1380\0\u13c0\0\u1400\0\u1440\0\u1480\0\u14c0"+
- "\0\u1500\0\u1540\0\u1580\0\u0200\0\u15c0\0\u1600\0\u1640\0\u0180"+
- "\0\u1680\0\u0180\0\u0180\0\u16c0\0\u0180\0\u0180\0\u0180\0\u0180"+
- "\0\u0180\0\u1700\0\u1740\0\u0180\0\u0180\0\u1780\0\u17c0\0\u1800"+
- "\0\u1840\0\u0180\0\u0180\0\u0180\0\u1880\0\u0180\0\u18c0\0\u1900"+
- "\0\u1940\0\u1980\0\u19c0\0\u1a00\0\u1a40\0\u0180\0\u1a80\0\u1ac0"+
- "\0\u1b00\0\u1b40\0\u0200\0\u1b80\0\u1bc0\0\u1c00\0\u1c40\0\u1c80"+
- "\0\u1cc0\0\u1d00\0\u1d40\0\u0180\0\u1d80\0\u1dc0\0\u1e00\0\u1e40"+
- "\0\u0200\0\u0200\0\u1e80\0\u1ec0\0\u0200\0\u0200\0\u1f00\0\u1f00"+
- "\0\u0180\0\u0180\0\u0180\0\u0180\0\u1f40\0\u1f80\0\u0180\0\u1fc0"+
- "\0\u0180\0\u0180\0\u0180\0\u2000\0\u1880\0\u0200\0\u2040\0\u0200"+
- "\0\u2080\0\u0200\0\u20c0\0\u2100\0\u2140\0\u2180\0\u0200\0\u0200"+
- "\0\u21c0\0\u2200\0\u2240\0\u2280\0\u0200\0\u22c0\0\u0200\0\u0180"+
- "\0\u0180\0\u2300\0\u0c00\0\u0200\0\u0200\0\u0200\0\u2340\0\u0200"+
- "\0\u2380\0\u23c0\0\u2400\0\u0200\0\u0200\0\u0200\0\u2440\0\u2480"+
- "\0\u0200\0\u24c0\0\u0200\0\u2500\0\u0200\0\u0200";
+ "\0\u0980\0\u09c0\0\u0a00\0\u0180\0\u0a40\0\u0a80\0\u0ac0\0\u0b00"+
+ "\0\u0180\0\u0180\0\u0180\0\u0180\0\u0180\0\u0180\0\u0180\0\u0b40"+
+ "\0\u0180\0\u0b80\0\u0bc0\0\u0180\0\u0180\0\u0c00\0\u0c40\0\u0c80"+
+ "\0\u0cc0\0\u0180\0\u0d00\0\u0d40\0\u0180\0\u0180\0\u0d80\0\u0dc0"+
+ "\0\u0e00\0\u0e40\0\u0e80\0\u0ec0\0\u0f00\0\u0180\0\u0f40\0\u0f80"+
+ "\0\u0180\0\u0fc0\0\u1000\0\u1040\0\u1080\0\u10c0\0\u1100\0\u1140"+
+ "\0\u0180\0\u0180\0\u0180\0\u0180\0\u0180\0\u1180\0\u11c0\0\u1200"+
+ "\0\u1240\0\u1280\0\u0200\0\u0200\0\u0200\0\u12c0\0\u0180\0\u1300"+
+ "\0\u1340\0\u1380\0\u13c0\0\u1400\0\u1440\0\u1480\0\u14c0\0\u1500"+
+ "\0\u1540\0\u1580\0\u15c0\0\u1600\0\u1640\0\u1680\0\u0200\0\u16c0"+
+ "\0\u0180\0\u1700\0\u0180\0\u0180\0\u1740\0\u0180\0\u0180\0\u0180"+
+ "\0\u0180\0\u0180\0\u1780\0\u17c0\0\u0180\0\u0180\0\u1800\0\u1840"+
+ "\0\u1880\0\u18c0\0\u0180\0\u0180\0\u0180\0\u1900\0\u0180\0\u1940"+
+ "\0\u1980\0\u19c0\0\u1a00\0\u1a00\0\u0180\0\u1a40\0\u1a80\0\u1ac0"+
+ "\0\u1b00\0\u0180\0\u1b40\0\u1b80\0\u1bc0\0\u1c00\0\u0200\0\u1c40"+
+ "\0\u1c80\0\u1cc0\0\u1d00\0\u1d40\0\u1d80\0\u1dc0\0\u1e00\0\u0180"+
+ "\0\u1e40\0\u1e80\0\u1ec0\0\u1f00\0\u0200\0\u0200\0\u1f40\0\u1f80"+
+ "\0\u0200\0\u0200\0\u0180\0\u0180\0\u0180\0\u1fc0\0\u2000\0\u0180"+
+ "\0\u2040\0\u0180\0\u0180\0\u0180\0\u0180\0\u2080\0\u1900\0\u0200"+
+ "\0\u20c0\0\u0200\0\u2100\0\u0200\0\u2140\0\u2180\0\u21c0\0\u2200"+
+ "\0\u0200\0\u0200\0\u2240\0\u2280\0\u22c0\0\u2300\0\u0200\0\u2340"+
+ "\0\u0200\0\u0180\0\u2380\0\u0c40\0\u0200\0\u0200\0\u0200\0\u23c0"+
+ "\0\u0200\0\u2400\0\u2440\0\u2480\0\u0200\0\u0200\0\u0200\0\u24c0"+
+ "\0\u2500\0\u0200\0\u2540\0\u0200\0\u2580\0\u0200\0\u0200";
private static int [] zzUnpackRowMap() {
- int [] result = new int[230];
+ int [] result = new int[231];
int offset = 0;
offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
return result;
@@ -224,260 +225,261 @@ class _JetLexer implements FlexLexer {
private static final String ZZ_TRANS_PACKED_0 =
"\1\7\1\10\1\11\1\12\1\11\1\7\1\13\1\12"+
- "\1\14\1\15\1\16\1\17\2\11\1\20\1\11\1\21"+
- "\1\11\1\22\1\7\1\23\1\11\1\24\1\25\1\26"+
- "\1\11\1\27\1\30\1\31\1\32\1\33\1\34\1\35"+
- "\1\36\1\37\2\11\1\40\1\41\1\11\1\42\1\11"+
- "\1\43\1\11\1\44\1\45\1\46\1\47\1\50\1\51"+
+ "\1\14\1\15\1\16\1\17\1\20\1\21\2\11\1\22"+
+ "\1\11\1\23\1\11\1\24\1\7\1\25\1\11\1\26"+
+ "\1\27\1\30\1\11\1\31\1\32\1\33\1\34\1\35"+
+ "\1\36\1\37\1\40\1\41\2\11\1\42\1\43\1\11"+
+ "\1\44\1\11\1\45\1\11\1\46\1\47\1\50\1\51"+
"\1\52\1\53\1\54\1\55\1\56\1\57\1\60\1\61"+
"\1\62\1\63\1\64\1\65\1\66\1\67\7\70\1\71"+
- "\1\72\12\70\1\73\1\74\62\70\1\75\1\72\12\70"+
- "\1\75\1\76\53\70\2\0\1\77\1\0\1\77\1\0"+
- "\1\100\5\0\2\77\1\0\1\77\1\0\1\77\3\0"+
- "\1\77\2\0\1\101\3\77\1\0\22\77\21\0\12\102"+
- "\1\103\21\102\1\104\43\102\1\7\1\10\1\11\1\12"+
+ "\1\72\14\70\1\73\1\74\60\70\1\75\1\72\14\70"+
+ "\1\75\1\76\51\70\2\0\1\77\1\0\1\77\1\0"+
+ "\1\100\7\0\2\77\1\0\1\77\1\0\1\77\3\0"+
+ "\1\77\2\0\1\101\3\77\1\0\22\77\17\0\12\102"+
+ "\1\103\23\102\1\104\41\102\1\7\1\10\1\11\1\12"+
"\1\11\1\7\1\13\1\12\1\14\1\15\1\16\1\17"+
- "\2\11\1\20\1\11\1\21\1\11\1\22\1\7\1\23"+
- "\1\11\1\105\1\106\1\26\1\11\1\27\1\30\1\31"+
- "\1\32\1\33\1\34\1\35\1\36\1\37\2\11\1\40"+
- "\1\41\1\11\1\42\1\11\1\43\1\11\1\44\1\45"+
+ "\1\20\1\21\2\11\1\22\1\11\1\23\1\11\1\24"+
+ "\1\7\1\25\1\11\1\105\1\106\1\30\1\11\1\31"+
+ "\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41"+
+ "\2\11\1\42\1\43\1\11\1\44\1\11\1\45\1\11"+
"\1\46\1\47\1\50\1\51\1\52\1\53\1\54\1\55"+
"\1\56\1\57\1\60\1\61\1\62\1\63\1\64\1\65"+
- "\1\66\1\67\101\0\1\10\11\0\1\10\2\0\1\107"+
- "\1\110\20\0\1\110\40\0\2\11\1\0\2\11\5\0"+
+ "\1\66\1\67\101\0\1\10\13\0\1\10\2\0\1\107"+
+ "\1\110\20\0\1\110\36\0\2\11\1\0\2\11\7\0"+
"\3\11\1\0\1\11\1\0\1\11\3\0\1\11\2\0"+
- "\4\11\1\0\22\11\24\0\1\12\3\0\1\12\70\0"+
+ "\4\11\1\0\22\11\22\0\1\12\3\0\1\12\70\0"+
"\6\111\2\0\70\111\2\0\1\112\1\0\1\112\1\0"+
- "\1\113\5\0\2\112\1\0\1\112\1\0\1\112\3\0"+
- "\1\112\2\0\4\112\1\0\22\112\23\0\1\114\1\0"+
- "\1\114\1\0\1\115\2\0\1\116\2\0\2\114\1\0"+
+ "\1\113\7\0\2\112\1\0\1\112\1\0\1\112\3\0"+
+ "\1\112\2\0\4\112\1\0\22\112\21\0\1\114\1\0"+
+ "\1\114\1\0\1\115\2\0\1\116\4\0\2\114\1\0"+
"\1\114\1\0\1\114\3\0\1\114\2\0\4\114\1\0"+
- "\22\114\33\0\1\117\21\0\1\120\26\0\1\121\15\0"+
- "\1\122\11\0\1\122\1\123\1\124\1\107\1\110\20\0"+
- "\1\110\5\0\1\124\32\0\1\125\11\0\1\125\2\0"+
- "\1\126\101\0\1\127\41\0\1\130\1\131\14\0\7\22"+
- "\1\0\12\22\1\132\1\133\54\22\24\0\1\134\54\0"+
- "\2\11\1\0\2\11\5\0\3\11\1\0\1\11\1\0"+
- "\1\11\3\0\1\11\2\0\1\11\1\135\2\11\1\0"+
- "\10\11\1\136\5\11\1\137\3\11\22\0\2\11\1\0"+
- "\2\11\5\0\3\11\1\0\1\11\1\0\1\11\3\0"+
- "\1\11\2\0\3\11\1\140\1\0\2\11\1\141\12\11"+
- "\1\142\4\11\22\0\2\11\1\0\2\11\5\0\3\11"+
- "\1\0\1\11\1\0\1\11\3\0\1\143\2\0\4\11"+
- "\1\0\22\11\104\0\1\144\15\0\2\11\1\0\2\11"+
- "\5\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
- "\2\0\4\11\1\0\1\11\1\145\12\11\1\146\5\11"+
- "\22\0\2\11\1\0\2\11\5\0\3\11\1\0\1\11"+
- "\1\0\1\11\3\0\1\11\2\0\4\11\1\0\11\11"+
- "\1\147\10\11\22\0\2\11\1\0\2\11\5\0\3\11"+
- "\1\0\1\11\1\0\1\11\3\0\1\150\2\0\4\11"+
- "\1\0\22\11\22\0\2\11\1\0\2\11\5\0\3\11"+
- "\1\0\1\11\1\0\1\11\3\0\1\11\2\0\4\11"+
- "\1\0\14\11\1\151\5\11\22\0\2\11\1\0\2\11"+
- "\5\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
- "\2\0\4\11\1\0\5\11\1\152\14\11\22\0\2\11"+
- "\1\0\2\11\5\0\3\11\1\0\1\11\1\0\1\11"+
- "\3\0\1\11\2\0\3\11\1\153\1\0\22\11\22\0"+
- "\2\11\1\0\2\11\5\0\3\11\1\0\1\11\1\0"+
- "\1\11\3\0\1\11\2\0\4\11\1\0\3\11\1\154"+
- "\16\11\22\0\2\11\1\0\2\11\5\0\3\11\1\0"+
- "\1\11\1\0\1\11\3\0\1\11\2\0\4\11\1\0"+
- "\10\11\1\155\11\11\22\0\2\11\1\0\2\11\5\0"+
+ "\22\114\31\0\1\117\23\0\1\120\24\0\1\121\30\0"+
+ "\1\122\117\0\1\123\26\0\1\124\15\0\1\125\13\0"+
+ "\1\125\1\126\1\127\1\107\1\110\20\0\1\110\5\0"+
+ "\1\127\30\0\1\130\13\0\1\130\2\0\1\131\101\0"+
+ "\1\132\37\0\1\133\1\134\14\0\7\24\1\0\14\24"+
+ "\1\135\1\136\52\24\26\0\1\137\52\0\2\11\1\0"+
+ "\2\11\7\0\3\11\1\0\1\11\1\0\1\11\3\0"+
+ "\1\11\2\0\1\11\1\140\2\11\1\0\10\11\1\141"+
+ "\5\11\1\142\3\11\20\0\2\11\1\0\2\11\7\0"+
"\3\11\1\0\1\11\1\0\1\11\3\0\1\11\2\0"+
- "\1\11\1\156\2\11\1\0\22\11\22\0\2\11\1\0"+
- "\2\11\5\0\3\11\1\0\1\11\1\0\1\11\3\0"+
- "\1\157\2\0\4\11\1\0\1\11\1\160\3\11\1\161"+
- "\14\11\22\0\2\11\1\0\2\11\5\0\3\11\1\0"+
- "\1\11\1\0\1\11\3\0\1\11\2\0\1\11\1\162"+
- "\2\11\1\0\22\11\22\0\2\11\1\0\2\11\5\0"+
- "\3\11\1\0\1\11\1\0\1\11\3\0\1\11\2\0"+
- "\4\11\1\0\5\11\1\163\14\11\22\0\2\11\1\0"+
- "\2\11\5\0\3\11\1\0\1\11\1\0\1\11\3\0"+
- "\1\11\2\0\4\11\1\0\1\11\1\164\20\11\53\0"+
- "\1\165\30\0\1\166\75\0\1\167\1\0\1\170\75\0"+
- "\1\171\1\0\1\172\76\0\1\173\1\174\77\0\1\175"+
- "\1\0\1\176\100\0\1\177\100\0\1\200\73\0\1\201"+
- "\14\0\7\70\2\0\12\70\2\0\53\70\2\0\1\202"+
- "\1\0\1\202\1\0\1\203\5\0\2\202\1\0\1\202"+
- "\1\0\1\202\3\0\1\202\1\204\1\0\4\202\1\0"+
- "\22\202\21\0\7\205\1\0\15\205\1\206\52\205\24\0"+
- "\1\207\54\0\2\77\1\0\2\77\5\0\3\77\1\0"+
- "\1\77\1\0\1\77\3\0\1\77\2\0\4\77\1\0"+
- "\22\77\21\0\6\210\2\0\70\210\1\0\2\77\1\0"+
- "\2\77\5\0\3\77\1\0\1\77\1\0\1\77\3\0"+
- "\1\77\2\0\1\77\1\211\2\77\1\0\22\77\55\0"+
- "\1\212\55\0\1\213\66\0\1\125\11\0\1\125\2\0"+
- "\1\214\62\0\1\215\11\0\1\215\4\0\1\215\44\0"+
- "\1\215\12\0\6\111\1\216\1\0\70\111\1\0\2\112"+
- "\1\0\2\112\5\0\3\112\1\0\1\112\1\0\1\112"+
- "\3\0\1\112\2\0\4\112\1\0\22\112\21\0\6\217"+
- "\2\0\70\217\1\0\2\114\1\0\2\114\5\0\3\114"+
- "\1\0\1\114\1\0\1\114\3\0\1\114\2\0\4\114"+
- "\1\0\22\114\21\0\6\220\2\0\70\220\7\117\1\0"+
- "\70\117\34\0\1\221\44\0\1\122\11\0\1\122\2\0"+
- "\1\222\1\110\20\0\1\110\40\0\2\123\10\0\1\123"+
- "\1\0\1\123\1\223\1\123\1\0\1\224\13\0\1\123"+
- "\2\0\1\123\1\224\1\123\3\0\1\123\3\0\1\123"+
- "\3\0\1\123\22\0\1\124\11\0\1\124\2\0\1\225"+
- "\62\0\1\125\11\0\1\125\3\0\1\110\20\0\1\110"+
- "\37\0\7\22\1\0\70\22\24\0\1\226\54\0\2\11"+
- "\1\0\2\11\5\0\3\11\1\0\1\11\1\0\1\11"+
- "\3\0\1\11\2\0\2\11\1\227\1\11\1\0\10\11"+
- "\1\230\11\11\22\0\2\11\1\0\2\11\5\0\3\11"+
- "\1\0\1\11\1\0\1\11\3\0\1\231\2\0\4\11"+
- "\1\0\5\11\1\232\10\11\1\233\3\11\22\0\2\11"+
- "\1\0\2\11\5\0\3\11\1\0\1\11\1\0\1\11"+
- "\3\0\1\11\2\0\4\11\1\0\4\11\1\234\15\11"+
- "\22\0\2\11\1\0\2\11\5\0\3\11\1\0\1\11"+
- "\1\0\1\11\3\0\1\11\2\0\4\11\1\0\4\11"+
- "\1\235\15\11\22\0\2\11\1\0\2\11\5\0\3\11"+
+ "\3\11\1\143\1\0\2\11\1\144\12\11\1\145\4\11"+
+ "\20\0\2\11\1\0\2\11\7\0\3\11\1\0\1\11"+
+ "\1\0\1\11\3\0\1\146\2\0\4\11\1\0\22\11"+
+ "\102\0\1\147\15\0\2\11\1\0\2\11\7\0\3\11"+
"\1\0\1\11\1\0\1\11\3\0\1\11\2\0\4\11"+
- "\1\0\2\11\1\236\17\11\22\0\2\11\1\0\2\11"+
- "\5\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
- "\2\0\4\11\1\0\5\11\1\237\14\11\22\0\2\11"+
- "\1\0\2\11\5\0\3\11\1\0\1\11\1\0\1\11"+
- "\3\0\1\11\2\0\4\11\1\0\12\11\1\240\7\11"+
- "\22\0\2\11\1\0\2\11\5\0\3\11\1\0\1\11"+
+ "\1\0\1\11\1\150\12\11\1\151\5\11\20\0\2\11"+
+ "\1\0\2\11\7\0\3\11\1\0\1\11\1\0\1\11"+
+ "\3\0\1\11\2\0\4\11\1\0\11\11\1\152\10\11"+
+ "\20\0\2\11\1\0\2\11\7\0\3\11\1\0\1\11"+
+ "\1\0\1\11\3\0\1\153\2\0\4\11\1\0\22\11"+
+ "\20\0\2\11\1\0\2\11\7\0\3\11\1\0\1\11"+
"\1\0\1\11\3\0\1\11\2\0\4\11\1\0\14\11"+
- "\1\241\5\11\22\0\2\11\1\0\2\11\5\0\3\11"+
- "\1\0\1\11\1\0\1\11\3\0\1\11\2\0\3\11"+
- "\1\242\1\0\22\11\22\0\2\11\1\0\2\11\5\0"+
- "\3\11\1\0\1\11\1\0\1\11\3\0\1\11\2\0"+
- "\4\11\1\0\1\243\21\11\22\0\2\11\1\0\2\11"+
- "\5\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
- "\2\0\4\11\1\0\22\11\5\0\1\244\14\0\2\11"+
- "\1\0\2\11\5\0\3\11\1\0\1\11\1\0\1\11"+
- "\3\0\1\11\2\0\1\245\3\11\1\0\22\11\22\0"+
- "\2\11\1\0\2\11\5\0\3\11\1\0\1\11\1\0"+
- "\1\11\3\0\1\11\2\0\4\11\1\0\3\11\1\246"+
- "\16\11\22\0\2\11\1\0\2\11\5\0\3\11\1\0"+
- "\1\11\1\0\1\11\3\0\1\11\2\0\2\11\1\247"+
- "\1\11\1\0\3\11\1\250\16\11\22\0\2\11\1\0"+
- "\2\11\5\0\3\11\1\0\1\11\1\0\1\11\3\0"+
- "\1\11\2\0\4\11\1\0\2\11\1\251\17\11\22\0"+
- "\2\11\1\0\2\11\5\0\3\11\1\0\1\11\1\0"+
- "\1\11\3\0\1\11\2\0\4\11\1\0\10\11\1\252"+
- "\11\11\22\0\2\11\1\0\2\11\5\0\3\11\1\0"+
- "\1\11\1\0\1\11\3\0\1\11\2\0\4\11\1\0"+
- "\14\11\1\253\5\11\22\0\2\11\1\0\2\11\5\0"+
- "\3\11\1\0\1\11\1\0\1\11\3\0\1\11\2\0"+
- "\2\11\1\254\1\11\1\0\22\11\22\0\2\11\1\0"+
- "\2\11\5\0\3\11\1\0\1\11\1\0\1\11\3\0"+
- "\1\11\2\0\4\11\1\0\10\11\1\255\3\11\1\256"+
- "\5\11\54\0\1\257\3\0\1\260\123\0\1\261\74\0"+
- "\1\262\101\0\1\263\100\0\1\264\15\0\2\202\1\0"+
- "\2\202\5\0\3\202\1\0\1\202\1\0\1\202\3\0"+
- "\1\202\2\0\4\202\1\0\22\202\21\0\6\265\2\0"+
- "\70\265\1\0\2\266\10\0\1\266\1\0\1\266\1\0"+
- "\1\266\15\0\1\266\2\0\1\266\1\0\1\266\3\0"+
- "\1\266\3\0\1\266\3\0\1\266\45\0\1\74\53\0"+
- "\6\210\1\267\1\0\70\210\1\0\2\77\1\0\2\77"+
- "\5\0\3\77\1\0\1\77\1\0\1\77\3\0\1\77"+
- "\2\0\2\77\1\270\1\77\1\0\22\77\22\0\1\215"+
- "\11\0\1\215\64\0\6\217\1\271\1\0\70\217\6\220"+
- "\1\272\1\0\70\220\12\0\1\273\66\0\1\125\11\0"+
- "\1\125\65\0\2\274\10\0\1\274\1\0\1\274\1\214"+
- "\1\274\15\0\1\274\2\0\1\274\1\0\1\274\3\0"+
- "\1\274\3\0\1\274\3\0\1\274\22\0\1\215\11\0"+
- "\1\215\4\0\1\275\44\0\1\275\30\0\1\214\62\0"+
- "\2\11\1\0\2\11\5\0\3\11\1\0\1\11\1\0"+
- "\1\11\3\0\1\11\2\0\3\11\1\276\1\0\22\11"+
- "\22\0\2\11\1\0\2\11\5\0\3\11\1\0\1\11"+
- "\1\0\1\11\3\0\1\11\2\0\4\11\1\0\1\11"+
- "\1\277\20\11\22\0\2\11\1\0\2\11\5\0\3\11"+
+ "\1\154\5\11\20\0\2\11\1\0\2\11\7\0\3\11"+
"\1\0\1\11\1\0\1\11\3\0\1\11\2\0\4\11"+
- "\1\0\3\11\1\300\16\11\22\0\2\11\1\0\2\11"+
- "\5\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
- "\2\0\2\11\1\301\1\11\1\0\22\11\22\0\2\11"+
- "\1\0\2\11\5\0\3\11\1\0\1\11\1\0\1\11"+
- "\3\0\1\11\2\0\4\11\1\0\3\11\1\302\16\11"+
- "\22\0\2\11\1\0\2\11\5\0\3\11\1\0\1\11"+
- "\1\0\1\11\3\0\1\11\2\0\4\11\1\0\3\11"+
- "\1\303\16\11\22\0\2\11\1\0\2\11\5\0\3\11"+
- "\1\0\1\11\1\0\1\11\3\0\1\11\2\0\1\304"+
- "\3\11\1\0\22\11\22\0\2\11\1\0\2\11\5\0"+
- "\3\11\1\0\1\11\1\0\1\11\3\0\1\11\2\0"+
- "\3\11\1\305\1\0\22\11\22\0\2\11\1\0\2\11"+
- "\5\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
- "\2\0\4\11\1\0\3\11\1\306\16\11\22\0\2\11"+
- "\1\0\2\11\5\0\3\11\1\0\1\11\1\0\1\11"+
- "\3\0\1\11\2\0\4\11\1\0\14\11\1\307\5\11"+
- "\22\0\2\11\1\0\2\11\5\0\3\11\1\0\1\11"+
- "\1\0\1\11\3\0\1\11\2\0\4\11\1\0\3\11"+
- "\1\310\16\11\22\0\2\11\1\0\2\11\5\0\3\11"+
- "\1\0\1\11\1\0\1\11\3\0\1\11\2\0\4\11"+
- "\1\0\6\11\1\311\13\11\22\0\2\11\1\0\2\11"+
- "\5\0\3\11\1\0\1\11\1\0\1\11\3\0\1\312"+
- "\2\0\4\11\1\0\22\11\22\0\2\11\1\0\2\11"+
- "\5\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
- "\2\0\4\11\1\0\5\11\1\313\14\11\22\0\2\11"+
- "\1\0\2\11\5\0\3\11\1\0\1\11\1\0\1\11"+
- "\3\0\1\11\2\0\4\11\1\0\14\11\1\314\5\11"+
- "\22\0\2\11\1\0\2\11\5\0\3\11\1\0\1\11"+
- "\1\0\1\11\3\0\1\11\2\0\4\11\1\0\2\11"+
- "\1\315\17\11\22\0\2\11\1\0\2\11\5\0\3\11"+
- "\1\0\1\11\1\0\1\11\3\0\1\11\2\0\3\11"+
- "\1\316\1\0\22\11\22\0\2\11\1\0\2\11\5\0"+
- "\3\11\1\0\1\11\1\0\1\11\3\0\1\11\2\0"+
- "\3\11\1\317\1\0\22\11\22\0\2\320\1\0\2\320"+
- "\5\0\3\320\1\0\1\320\1\0\1\320\3\0\1\320"+
- "\2\0\4\320\1\0\22\320\21\0\6\265\1\321\1\0"+
- "\70\265\1\0\2\322\10\0\1\322\1\0\1\322\1\0"+
- "\1\322\15\0\1\322\2\0\1\322\1\0\1\322\3\0"+
- "\1\322\3\0\1\322\3\0\1\322\22\0\2\77\1\0"+
- "\2\77\5\0\3\77\1\0\1\77\1\0\1\77\3\0"+
- "\1\77\2\0\3\77\1\323\1\0\22\77\22\0\2\274"+
- "\10\0\1\274\1\0\1\274\1\0\1\274\1\0\1\224"+
- "\13\0\1\274\2\0\1\274\1\224\1\274\3\0\1\274"+
- "\3\0\1\274\3\0\1\274\22\0\2\11\1\0\2\11"+
- "\5\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
- "\2\0\4\11\1\0\13\11\1\324\6\11\22\0\2\11"+
- "\1\0\2\11\5\0\3\11\1\0\1\11\1\0\1\11"+
- "\3\0\1\11\2\0\1\325\3\11\1\0\22\11\22\0"+
- "\2\11\1\0\2\11\5\0\3\11\1\0\1\11\1\0"+
- "\1\11\3\0\1\11\2\0\4\11\1\0\10\11\1\326"+
- "\11\11\22\0\2\11\1\0\2\11\5\0\3\11\1\0"+
- "\1\11\1\0\1\11\3\0\1\11\2\0\2\11\1\327"+
- "\1\11\1\0\22\11\22\0\2\11\1\0\2\11\5\0"+
- "\3\11\1\0\1\11\1\0\1\11\3\0\1\11\2\0"+
- "\3\11\1\330\1\0\22\11\22\0\2\11\1\0\2\11"+
- "\5\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
- "\2\0\4\11\1\0\1\331\21\11\22\0\2\11\1\0"+
- "\2\11\5\0\3\11\1\0\1\11\1\0\1\11\3\0"+
- "\1\11\2\0\4\11\1\0\5\11\1\332\14\11\22\0"+
- "\2\11\1\0\2\11\5\0\3\11\1\0\1\11\1\0"+
- "\1\11\3\0\1\11\2\0\4\11\1\0\10\11\1\333"+
- "\11\11\22\0\2\11\1\0\2\11\5\0\3\11\1\0"+
+ "\1\0\5\11\1\155\14\11\20\0\2\11\1\0\2\11"+
+ "\7\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
+ "\2\0\3\11\1\156\1\0\22\11\20\0\2\11\1\0"+
+ "\2\11\7\0\3\11\1\0\1\11\1\0\1\11\3\0"+
+ "\1\11\2\0\4\11\1\0\3\11\1\157\16\11\20\0"+
+ "\2\11\1\0\2\11\7\0\3\11\1\0\1\11\1\0"+
+ "\1\11\3\0\1\11\2\0\4\11\1\0\10\11\1\160"+
+ "\11\11\20\0\2\11\1\0\2\11\7\0\3\11\1\0"+
+ "\1\11\1\0\1\11\3\0\1\11\2\0\1\11\1\161"+
+ "\2\11\1\0\22\11\20\0\2\11\1\0\2\11\7\0"+
+ "\3\11\1\0\1\11\1\0\1\11\3\0\1\162\2\0"+
+ "\4\11\1\0\1\11\1\163\3\11\1\164\14\11\20\0"+
+ "\2\11\1\0\2\11\7\0\3\11\1\0\1\11\1\0"+
+ "\1\11\3\0\1\11\2\0\1\11\1\165\2\11\1\0"+
+ "\22\11\20\0\2\11\1\0\2\11\7\0\3\11\1\0"+
"\1\11\1\0\1\11\3\0\1\11\2\0\4\11\1\0"+
- "\6\11\1\334\13\11\22\0\2\11\1\0\2\11\5\0"+
+ "\5\11\1\166\14\11\20\0\2\11\1\0\2\11\7\0"+
"\3\11\1\0\1\11\1\0\1\11\3\0\1\11\2\0"+
- "\4\11\1\0\3\11\1\335\16\11\22\0\2\11\1\0"+
- "\2\11\5\0\3\11\1\0\1\11\1\0\1\11\3\0"+
- "\1\11\2\0\4\11\1\0\3\11\1\336\16\11\22\0"+
- "\2\337\10\0\1\337\1\0\1\337\1\0\1\337\15\0"+
- "\1\337\2\0\1\337\1\0\1\337\3\0\1\337\3\0"+
- "\1\337\3\0\1\337\22\0\2\11\1\0\2\11\5\0"+
+ "\4\11\1\0\1\11\1\167\20\11\32\0\1\170\47\0"+
+ "\1\171\27\0\1\172\47\0\1\173\76\0\1\174\1\175"+
+ "\77\0\1\176\1\0\1\177\100\0\1\200\100\0\1\201"+
+ "\73\0\1\202\14\0\7\70\2\0\14\70\2\0\51\70"+
+ "\2\0\1\203\1\0\1\203\1\0\1\204\7\0\2\203"+
+ "\1\0\1\203\1\0\1\203\3\0\1\203\1\205\1\0"+
+ "\4\203\1\0\22\203\17\0\7\206\1\0\17\206\1\207"+
+ "\50\206\26\0\1\210\52\0\2\77\1\0\2\77\7\0"+
+ "\3\77\1\0\1\77\1\0\1\77\3\0\1\77\2\0"+
+ "\4\77\1\0\22\77\17\0\6\211\2\0\70\211\1\0"+
+ "\2\77\1\0\2\77\7\0\3\77\1\0\1\77\1\0"+
+ "\1\77\3\0\1\77\2\0\1\77\1\212\2\77\1\0"+
+ "\22\77\55\0\1\213\53\0\1\214\66\0\1\130\13\0"+
+ "\1\130\2\0\1\215\60\0\1\216\13\0\1\216\4\0"+
+ "\1\216\42\0\1\216\12\0\6\111\1\217\1\0\70\111"+
+ "\1\0\2\112\1\0\2\112\7\0\3\112\1\0\1\112"+
+ "\1\0\1\112\3\0\1\112\2\0\4\112\1\0\22\112"+
+ "\17\0\6\220\2\0\70\220\1\0\2\114\1\0\2\114"+
+ "\7\0\3\114\1\0\1\114\1\0\1\114\3\0\1\114"+
+ "\2\0\4\114\1\0\22\114\17\0\6\221\2\0\70\221"+
+ "\7\117\1\0\70\117\36\0\1\222\41\0\7\122\1\0"+
+ "\70\122\35\0\1\223\3\0\1\224\121\0\1\225\15\0"+
+ "\1\125\13\0\1\125\2\0\1\226\1\110\20\0\1\110"+
+ "\36\0\2\126\12\0\1\126\1\0\1\126\1\227\1\126"+
+ "\1\0\1\230\13\0\1\126\2\0\1\126\1\230\1\126"+
+ "\3\0\1\126\3\0\1\126\3\0\1\126\20\0\1\127"+
+ "\13\0\1\127\2\0\1\231\60\0\1\130\13\0\1\130"+
+ "\3\0\1\110\20\0\1\110\35\0\7\24\1\0\70\24"+
+ "\26\0\1\232\52\0\2\11\1\0\2\11\7\0\3\11"+
+ "\1\0\1\11\1\0\1\11\3\0\1\11\2\0\2\11"+
+ "\1\233\1\11\1\0\10\11\1\234\11\11\20\0\2\11"+
+ "\1\0\2\11\7\0\3\11\1\0\1\11\1\0\1\11"+
+ "\3\0\1\235\2\0\4\11\1\0\5\11\1\236\10\11"+
+ "\1\237\3\11\20\0\2\11\1\0\2\11\7\0\3\11"+
+ "\1\0\1\11\1\0\1\11\3\0\1\11\2\0\4\11"+
+ "\1\0\4\11\1\240\15\11\20\0\2\11\1\0\2\11"+
+ "\7\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
+ "\2\0\4\11\1\0\4\11\1\241\15\11\20\0\2\11"+
+ "\1\0\2\11\7\0\3\11\1\0\1\11\1\0\1\11"+
+ "\3\0\1\11\2\0\4\11\1\0\2\11\1\242\17\11"+
+ "\20\0\2\11\1\0\2\11\7\0\3\11\1\0\1\11"+
+ "\1\0\1\11\3\0\1\11\2\0\4\11\1\0\5\11"+
+ "\1\243\14\11\20\0\2\11\1\0\2\11\7\0\3\11"+
+ "\1\0\1\11\1\0\1\11\3\0\1\11\2\0\4\11"+
+ "\1\0\12\11\1\244\7\11\20\0\2\11\1\0\2\11"+
+ "\7\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
+ "\2\0\4\11\1\0\14\11\1\245\5\11\20\0\2\11"+
+ "\1\0\2\11\7\0\3\11\1\0\1\11\1\0\1\11"+
+ "\3\0\1\11\2\0\3\11\1\246\1\0\22\11\20\0"+
+ "\2\11\1\0\2\11\7\0\3\11\1\0\1\11\1\0"+
+ "\1\11\3\0\1\11\2\0\4\11\1\0\1\247\21\11"+
+ "\20\0\2\11\1\0\2\11\7\0\3\11\1\0\1\11"+
+ "\1\0\1\11\3\0\1\11\2\0\4\11\1\0\22\11"+
+ "\3\0\1\250\14\0\2\11\1\0\2\11\7\0\3\11"+
+ "\1\0\1\11\1\0\1\11\3\0\1\11\2\0\1\251"+
+ "\3\11\1\0\22\11\20\0\2\11\1\0\2\11\7\0"+
"\3\11\1\0\1\11\1\0\1\11\3\0\1\11\2\0"+
- "\4\11\1\0\2\11\1\340\17\11\22\0\2\11\1\0"+
- "\2\11\5\0\3\11\1\0\1\11\1\0\1\11\3\0"+
- "\1\11\2\0\1\341\3\11\1\0\22\11\22\0\2\11"+
- "\1\0\2\11\5\0\3\11\1\0\1\11\1\0\1\11"+
- "\3\0\1\11\2\0\4\11\1\0\7\11\1\342\12\11"+
- "\22\0\2\11\1\0\2\11\5\0\3\11\1\0\1\11"+
- "\1\0\1\11\3\0\1\11\2\0\4\11\1\0\2\11"+
- "\1\343\17\11\22\0\2\205\10\0\1\205\1\0\1\205"+
- "\1\0\1\205\15\0\1\205\2\0\1\205\1\0\1\205"+
- "\3\0\1\205\3\0\1\205\3\0\1\205\22\0\2\11"+
- "\1\0\2\11\5\0\3\11\1\0\1\11\1\0\1\11"+
- "\3\0\1\344\2\0\4\11\1\0\22\11\22\0\2\11"+
- "\1\0\2\11\5\0\3\11\1\0\1\11\1\0\1\11"+
- "\3\0\1\11\2\0\4\11\1\0\3\11\1\345\16\11"+
- "\22\0\2\11\1\0\2\11\5\0\3\11\1\0\1\11"+
+ "\4\11\1\0\3\11\1\252\16\11\20\0\2\11\1\0"+
+ "\2\11\7\0\3\11\1\0\1\11\1\0\1\11\3\0"+
+ "\1\11\2\0\2\11\1\253\1\11\1\0\3\11\1\254"+
+ "\16\11\20\0\2\11\1\0\2\11\7\0\3\11\1\0"+
+ "\1\11\1\0\1\11\3\0\1\11\2\0\4\11\1\0"+
+ "\2\11\1\255\17\11\20\0\2\11\1\0\2\11\7\0"+
+ "\3\11\1\0\1\11\1\0\1\11\3\0\1\11\2\0"+
+ "\4\11\1\0\10\11\1\256\11\11\20\0\2\11\1\0"+
+ "\2\11\7\0\3\11\1\0\1\11\1\0\1\11\3\0"+
+ "\1\11\2\0\4\11\1\0\14\11\1\257\5\11\20\0"+
+ "\2\11\1\0\2\11\7\0\3\11\1\0\1\11\1\0"+
+ "\1\11\3\0\1\11\2\0\2\11\1\260\1\11\1\0"+
+ "\22\11\20\0\2\11\1\0\2\11\7\0\3\11\1\0"+
+ "\1\11\1\0\1\11\3\0\1\11\2\0\4\11\1\0"+
+ "\10\11\1\261\3\11\1\262\5\11\100\0\1\263\100\0"+
+ "\1\264\100\0\1\265\15\0\2\203\1\0\2\203\7\0"+
+ "\3\203\1\0\1\203\1\0\1\203\3\0\1\203\2\0"+
+ "\4\203\1\0\22\203\17\0\6\266\2\0\70\266\1\0"+
+ "\2\267\12\0\1\267\1\0\1\267\1\0\1\267\15\0"+
+ "\1\267\2\0\1\267\1\0\1\267\3\0\1\267\3\0"+
+ "\1\267\3\0\1\267\45\0\1\74\51\0\6\211\1\270"+
+ "\1\0\70\211\1\0\2\77\1\0\2\77\7\0\3\77"+
+ "\1\0\1\77\1\0\1\77\3\0\1\77\2\0\2\77"+
+ "\1\271\1\77\1\0\22\77\20\0\1\216\13\0\1\216"+
+ "\62\0\6\220\1\272\1\0\70\220\6\221\1\273\1\0"+
+ "\70\221\12\0\1\274\66\0\2\275\1\0\2\275\7\0"+
+ "\3\275\1\0\1\275\1\0\1\275\3\0\1\275\2\0"+
+ "\4\275\1\0\22\275\20\0\1\130\13\0\1\130\63\0"+
+ "\2\276\12\0\1\276\1\0\1\276\1\215\1\276\15\0"+
+ "\1\276\2\0\1\276\1\0\1\276\3\0\1\276\3\0"+
+ "\1\276\3\0\1\276\20\0\1\216\13\0\1\216\4\0"+
+ "\1\277\42\0\1\277\32\0\1\215\60\0\2\11\1\0"+
+ "\2\11\7\0\3\11\1\0\1\11\1\0\1\11\3\0"+
+ "\1\11\2\0\3\11\1\300\1\0\22\11\20\0\2\11"+
+ "\1\0\2\11\7\0\3\11\1\0\1\11\1\0\1\11"+
+ "\3\0\1\11\2\0\4\11\1\0\1\11\1\301\20\11"+
+ "\20\0\2\11\1\0\2\11\7\0\3\11\1\0\1\11"+
"\1\0\1\11\3\0\1\11\2\0\4\11\1\0\3\11"+
- "\1\346\16\11\21\0";
+ "\1\302\16\11\20\0\2\11\1\0\2\11\7\0\3\11"+
+ "\1\0\1\11\1\0\1\11\3\0\1\11\2\0\2\11"+
+ "\1\303\1\11\1\0\22\11\20\0\2\11\1\0\2\11"+
+ "\7\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
+ "\2\0\4\11\1\0\3\11\1\304\16\11\20\0\2\11"+
+ "\1\0\2\11\7\0\3\11\1\0\1\11\1\0\1\11"+
+ "\3\0\1\11\2\0\4\11\1\0\3\11\1\305\16\11"+
+ "\20\0\2\11\1\0\2\11\7\0\3\11\1\0\1\11"+
+ "\1\0\1\11\3\0\1\11\2\0\1\306\3\11\1\0"+
+ "\22\11\20\0\2\11\1\0\2\11\7\0\3\11\1\0"+
+ "\1\11\1\0\1\11\3\0\1\11\2\0\3\11\1\307"+
+ "\1\0\22\11\20\0\2\11\1\0\2\11\7\0\3\11"+
+ "\1\0\1\11\1\0\1\11\3\0\1\11\2\0\4\11"+
+ "\1\0\3\11\1\310\16\11\20\0\2\11\1\0\2\11"+
+ "\7\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
+ "\2\0\4\11\1\0\14\11\1\311\5\11\20\0\2\11"+
+ "\1\0\2\11\7\0\3\11\1\0\1\11\1\0\1\11"+
+ "\3\0\1\11\2\0\4\11\1\0\3\11\1\312\16\11"+
+ "\20\0\2\11\1\0\2\11\7\0\3\11\1\0\1\11"+
+ "\1\0\1\11\3\0\1\11\2\0\4\11\1\0\6\11"+
+ "\1\313\13\11\20\0\2\11\1\0\2\11\7\0\3\11"+
+ "\1\0\1\11\1\0\1\11\3\0\1\314\2\0\4\11"+
+ "\1\0\22\11\20\0\2\11\1\0\2\11\7\0\3\11"+
+ "\1\0\1\11\1\0\1\11\3\0\1\11\2\0\4\11"+
+ "\1\0\5\11\1\315\14\11\20\0\2\11\1\0\2\11"+
+ "\7\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
+ "\2\0\4\11\1\0\14\11\1\316\5\11\20\0\2\11"+
+ "\1\0\2\11\7\0\3\11\1\0\1\11\1\0\1\11"+
+ "\3\0\1\11\2\0\4\11\1\0\2\11\1\317\17\11"+
+ "\20\0\2\11\1\0\2\11\7\0\3\11\1\0\1\11"+
+ "\1\0\1\11\3\0\1\11\2\0\3\11\1\320\1\0"+
+ "\22\11\20\0\2\11\1\0\2\11\7\0\3\11\1\0"+
+ "\1\11\1\0\1\11\3\0\1\11\2\0\3\11\1\321"+
+ "\1\0\22\11\17\0\6\266\1\322\1\0\70\266\1\0"+
+ "\2\323\12\0\1\323\1\0\1\323\1\0\1\323\15\0"+
+ "\1\323\2\0\1\323\1\0\1\323\3\0\1\323\3\0"+
+ "\1\323\3\0\1\323\20\0\2\77\1\0\2\77\7\0"+
+ "\3\77\1\0\1\77\1\0\1\77\3\0\1\77\2\0"+
+ "\3\77\1\324\1\0\22\77\20\0\2\276\12\0\1\276"+
+ "\1\0\1\276\1\0\1\276\1\0\1\230\13\0\1\276"+
+ "\2\0\1\276\1\230\1\276\3\0\1\276\3\0\1\276"+
+ "\3\0\1\276\20\0\2\11\1\0\2\11\7\0\3\11"+
+ "\1\0\1\11\1\0\1\11\3\0\1\11\2\0\4\11"+
+ "\1\0\13\11\1\325\6\11\20\0\2\11\1\0\2\11"+
+ "\7\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
+ "\2\0\1\326\3\11\1\0\22\11\20\0\2\11\1\0"+
+ "\2\11\7\0\3\11\1\0\1\11\1\0\1\11\3\0"+
+ "\1\11\2\0\4\11\1\0\10\11\1\327\11\11\20\0"+
+ "\2\11\1\0\2\11\7\0\3\11\1\0\1\11\1\0"+
+ "\1\11\3\0\1\11\2\0\2\11\1\330\1\11\1\0"+
+ "\22\11\20\0\2\11\1\0\2\11\7\0\3\11\1\0"+
+ "\1\11\1\0\1\11\3\0\1\11\2\0\3\11\1\331"+
+ "\1\0\22\11\20\0\2\11\1\0\2\11\7\0\3\11"+
+ "\1\0\1\11\1\0\1\11\3\0\1\11\2\0\4\11"+
+ "\1\0\1\332\21\11\20\0\2\11\1\0\2\11\7\0"+
+ "\3\11\1\0\1\11\1\0\1\11\3\0\1\11\2\0"+
+ "\4\11\1\0\5\11\1\333\14\11\20\0\2\11\1\0"+
+ "\2\11\7\0\3\11\1\0\1\11\1\0\1\11\3\0"+
+ "\1\11\2\0\4\11\1\0\10\11\1\334\11\11\20\0"+
+ "\2\11\1\0\2\11\7\0\3\11\1\0\1\11\1\0"+
+ "\1\11\3\0\1\11\2\0\4\11\1\0\6\11\1\335"+
+ "\13\11\20\0\2\11\1\0\2\11\7\0\3\11\1\0"+
+ "\1\11\1\0\1\11\3\0\1\11\2\0\4\11\1\0"+
+ "\3\11\1\336\16\11\20\0\2\11\1\0\2\11\7\0"+
+ "\3\11\1\0\1\11\1\0\1\11\3\0\1\11\2\0"+
+ "\4\11\1\0\3\11\1\337\16\11\20\0\2\340\12\0"+
+ "\1\340\1\0\1\340\1\0\1\340\15\0\1\340\2\0"+
+ "\1\340\1\0\1\340\3\0\1\340\3\0\1\340\3\0"+
+ "\1\340\20\0\2\11\1\0\2\11\7\0\3\11\1\0"+
+ "\1\11\1\0\1\11\3\0\1\11\2\0\4\11\1\0"+
+ "\2\11\1\341\17\11\20\0\2\11\1\0\2\11\7\0"+
+ "\3\11\1\0\1\11\1\0\1\11\3\0\1\11\2\0"+
+ "\1\342\3\11\1\0\22\11\20\0\2\11\1\0\2\11"+
+ "\7\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
+ "\2\0\4\11\1\0\7\11\1\343\12\11\20\0\2\11"+
+ "\1\0\2\11\7\0\3\11\1\0\1\11\1\0\1\11"+
+ "\3\0\1\11\2\0\4\11\1\0\2\11\1\344\17\11"+
+ "\20\0\2\206\12\0\1\206\1\0\1\206\1\0\1\206"+
+ "\15\0\1\206\2\0\1\206\1\0\1\206\3\0\1\206"+
+ "\3\0\1\206\3\0\1\206\20\0\2\11\1\0\2\11"+
+ "\7\0\3\11\1\0\1\11\1\0\1\11\3\0\1\345"+
+ "\2\0\4\11\1\0\22\11\20\0\2\11\1\0\2\11"+
+ "\7\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
+ "\2\0\4\11\1\0\3\11\1\346\16\11\20\0\2\11"+
+ "\1\0\2\11\7\0\3\11\1\0\1\11\1\0\1\11"+
+ "\3\0\1\11\2\0\4\11\1\0\3\11\1\347\16\11"+
+ "\17\0";
private static int [] zzUnpackTrans() {
- int [] result = new int[9536];
+ int [] result = new int[9664];
int offset = 0;
offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
return result;
@@ -518,19 +520,19 @@ class _JetLexer implements FlexLexer {
private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
private static final String ZZ_ATTRIBUTE_PACKED_0 =
- "\6\0\1\11\14\1\2\11\23\1\1\11\2\1\1\11"+
- "\4\1\7\11\1\1\1\11\1\1\1\0\2\11\2\1"+
- "\1\0\1\1\1\11\2\1\2\11\1\0\1\1\1\0"+
- "\1\1\1\0\1\1\1\0\1\11\2\1\1\11\4\1"+
- "\5\11\1\1\1\0\7\1\1\11\20\1\1\0\1\1"+
- "\1\0\1\11\1\0\2\11\1\1\5\11\1\1\1\0"+
- "\2\11\1\1\2\0\1\1\3\11\1\1\1\11\2\0"+
- "\1\1\4\0\1\11\15\1\1\11\14\1\4\11\2\0"+
- "\1\11\1\1\3\11\1\1\1\0\22\1\2\11\1\0"+
- "\14\1\1\0\7\1";
+ "\6\0\1\11\16\1\2\11\24\1\1\11\4\1\7\11"+
+ "\1\1\1\11\1\1\1\0\2\11\2\1\1\0\1\1"+
+ "\1\11\2\1\2\11\1\0\1\1\1\0\1\1\1\0"+
+ "\1\1\1\0\1\11\2\1\1\11\1\1\1\0\5\1"+
+ "\5\11\1\1\1\0\7\1\1\11\20\1\1\0\1\11"+
+ "\1\0\2\11\1\1\5\11\1\1\1\0\2\11\1\1"+
+ "\2\0\1\1\3\11\1\1\1\11\2\0\3\1\1\11"+
+ "\4\0\1\11\15\1\1\11\12\1\3\11\2\0\1\11"+
+ "\1\1\4\11\1\1\1\0\22\1\1\11\1\0\14\1"+
+ "\1\0\7\1";
private static int [] zzUnpackAttribute() {
- int [] result = new int[230];
+ int [] result = new int[231];
int offset = 0;
offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
return result;
@@ -606,6 +608,9 @@ class _JetLexer implements FlexLexer {
private final Stack states = new Stack();
private int lBraceCount;
+
+ private int yyline;
+ private int yycolumn;
private int commentStart;
private int commentDepth;
@@ -829,6 +834,57 @@ class _JetLexer implements FlexLexer {
while (true) {
zzMarkedPosL = zzMarkedPos;
+ boolean zzR = false;
+ for (zzCurrentPosL = zzStartRead; zzCurrentPosL < zzMarkedPosL;
+ zzCurrentPosL++) {
+ switch (zzBufferL.charAt(zzCurrentPosL)) {
+ case '\u000B':
+ case '\u000C':
+ case '\u0085':
+ case '\u2028':
+ case '\u2029':
+ yyline++;
+ yycolumn = 0;
+ zzR = false;
+ break;
+ case '\r':
+ yyline++;
+ yycolumn = 0;
+ zzR = true;
+ break;
+ case '\n':
+ if (zzR)
+ zzR = false;
+ else {
+ yyline++;
+ yycolumn = 0;
+ }
+ break;
+ default:
+ zzR = false;
+ yycolumn++;
+ }
+ }
+
+ if (zzR) {
+ // peek one character ahead if it is \n (if we have counted one line too much)
+ boolean zzPeek;
+ if (zzMarkedPosL < zzEndReadL)
+ zzPeek = zzBufferL.charAt(zzMarkedPosL) == '\n';
+ else if (zzAtEOF)
+ zzPeek = false;
+ else {
+ boolean eof = zzRefill();
+ zzEndReadL = zzEndRead;
+ zzMarkedPosL = zzMarkedPos;
+ zzBufferL = zzBuffer;
+ if (eof)
+ zzPeek = false;
+ else
+ zzPeek = zzBufferL.charAt(zzMarkedPosL) == '\n';
+ }
+ if (zzPeek) yyline--;
+ }
zzAction = -1;
zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
@@ -840,7 +896,7 @@ class _JetLexer implements FlexLexer {
while (true) {
if (zzCurrentPosL < zzEndReadL)
- zzInput = zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++]:zzBufferL.charAt(zzCurrentPosL++);
+ zzInput = zzBufferL.charAt(zzCurrentPosL++);
else if (zzAtEOF) {
zzInput = YYEOF;
break zzForAction;
@@ -860,7 +916,7 @@ class _JetLexer implements FlexLexer {
break zzForAction;
}
else {
- zzInput = zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++]:zzBufferL.charAt(zzCurrentPosL++);
+ zzInput = zzBufferL.charAt(zzCurrentPosL++);
}
}
int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
@@ -884,23 +940,23 @@ class _JetLexer implements FlexLexer {
case 3:
{ return JetTokens.IDENTIFIER;
}
- case 104: break;
- case 10:
+ case 105: break;
+ case 12:
{ pushState(STRING); return JetTokens.OPEN_QUOTE;
}
- case 105: break;
- case 74:
+ case 106: break;
+ case 78:
{ return JetTokens.FOR_KEYWORD ;
}
- case 106: break;
- case 101:
+ case 107: break;
+ case 102:
{ return JetTokens.RETURN_KEYWORD ;
}
- case 107: break;
- case 87:
+ case 108: break;
+ case 89:
{ return JetTokens.NULL_KEYWORD ;
}
- case 108: break;
+ case 109: break;
case 35:
{ if (lBraceCount == 0) {
popState();
@@ -909,160 +965,160 @@ class _JetLexer implements FlexLexer {
lBraceCount--;
return JetTokens.RBRACE;
}
- case 109: break;
- case 15:
+ case 110: break;
+ case 16:
{ return JetTokens.LT ;
}
- case 110: break;
- case 52:
+ case 111: break;
+ case 54:
{ return JetTokens.DO_KEYWORD ;
}
- case 111: break;
+ case 112: break;
case 20:
{ return JetTokens.PLUS ;
}
- case 112: break;
- case 58:
+ case 113: break;
+ case 59:
{ return JetTokens.PLUSEQ ;
}
- case 113: break;
- case 92:
+ case 114: break;
+ case 93:
{ popState(); return JetTokens.THIS_KEYWORD;
}
- case 114: break;
+ case 115: break;
case 28:
{ return JetTokens.COMMA ;
}
- case 115: break;
+ case 116: break;
case 17:
{ return JetTokens.GT ;
}
- case 116: break;
+ case 117: break;
case 4:
{ return JetTokens.WHITE_SPACE;
}
- case 117: break;
+ case 118: break;
case 25:
{ return JetTokens.RPAR ;
}
- case 118: break;
- case 56:
+ case 119: break;
+ case 57:
{ return JetTokens.DOUBLE_ARROW;
}
- case 119: break;
- case 85:
+ case 120: break;
+ case 87:
{ return JetTokens.TRUE_KEYWORD ;
}
- case 120: break;
- case 80:
+ case 121: break;
+ case 81:
{ return JetTokens.IDE_TEMPLATE_START ;
}
- case 121: break;
+ case 122: break;
case 37:
{ return JetTokens.FIELD_IDENTIFIER;
}
- case 122: break;
- case 60:
+ case 123: break;
+ case 61:
{ return JetTokens.ANDAND ;
}
- case 123: break;
- case 64:
+ case 124: break;
+ case 65:
{ pushState(LONG_TEMPLATE_ENTRY); return JetTokens.LONG_TEMPLATE_ENTRY_START;
}
- case 124: break;
+ case 125: break;
case 36:
{ return JetTokens.FLOAT_LITERAL;
}
- case 125: break;
+ case 126: break;
case 40:
{ return JetTokens.EOL_COMMENT;
}
- case 126: break;
- case 89:
+ case 127: break;
+ case 91:
{ return JetTokens.WHEN_KEYWORD ;
}
- case 127: break;
- case 70:
+ case 128: break;
+ case 74:
{ pushState(RAW_STRING); return JetTokens.OPEN_QUOTE;
}
- case 128: break;
+ case 129: break;
case 26:
{ return JetTokens.COLON ;
}
- case 129: break;
- case 54:
+ case 130: break;
+ case 55:
{ return JetTokens.LTEQ ;
}
- case 130: break;
- case 45:
+ case 131: break;
+ case 47:
{ return JetTokens.ARROW ;
}
- case 131: break;
+ case 132: break;
case 32:
{ popState(); return JetTokens.IDENTIFIER;
}
- case 132: break;
+ case 133: break;
case 22:
{ return JetTokens.LBRACKET ;
}
- case 133: break;
- case 68:
+ case 134: break;
+ case 69:
{ yypushback(2); return JetTokens.INTEGER_LITERAL;
}
- case 134: break;
- case 9:
+ case 135: break;
+ case 11:
{ return JetTokens.CHARACTER_LITERAL;
}
- case 135: break;
- case 75:
+ case 136: break;
+ case 79:
{ return JetTokens.VAR_KEYWORD ;
}
- case 136: break;
- case 55:
+ case 137: break;
+ case 56:
{ return JetTokens.GTEQ ;
}
- case 137: break;
+ case 138: break;
case 2:
{ return JetTokens.INTEGER_LITERAL;
}
- case 138: break;
- case 12:
+ case 139: break;
+ case 14:
{ return JetTokens.RBRACE ;
}
- case 139: break;
- case 96:
+ case 140: break;
+ case 97:
{ return JetTokens.CLASS_KEYWORD ;
}
- case 140: break;
- case 14:
- { return JetTokens.EXCL ;
- }
case 141: break;
- case 71:
+ case 75:
{ return JetTokens.TRY_KEYWORD ;
}
case 142: break;
- case 53:
- { return JetTokens.EXCLEQ ;
+ case 8:
+ { return JetTokens.EXCL ;
}
case 143: break;
- case 46:
- { return JetTokens.MINUSEQ ;
+ case 44:
+ { return JetTokens.EXCLEQ ;
}
case 144: break;
- case 102:
- { return JetTokens.PACKAGE_KEYWORD ;
+ case 48:
+ { return JetTokens.MINUSEQ ;
}
case 145: break;
- case 93:
- { return JetTokens.THROW_KEYWORD ;
+ case 103:
+ { return JetTokens.PACKAGE_KEYWORD ;
}
case 146: break;
- case 95:
- { return JetTokens.SUPER_KEYWORD ;
+ case 94:
+ { return JetTokens.THROW_KEYWORD ;
}
case 147: break;
- case 67:
+ case 96:
+ { return JetTokens.SUPER_KEYWORD ;
+ }
+ case 148: break;
+ case 68:
{ if (commentDepth > 0) {
commentDepth--;
}
@@ -1073,245 +1129,255 @@ class _JetLexer implements FlexLexer {
return commentStateToTokenType(state);
}
}
- case 148: break;
- case 98:
+ case 149: break;
+ case 99:
{ return JetTokens.WHILE_KEYWORD ;
}
- case 149: break;
- case 44:
+ case 150: break;
+ case 46:
{ return JetTokens.MINUSMINUS;
}
- case 150: break;
- case 103:
+ case 151: break;
+ case 104:
{ return JetTokens.CONTINUE_KEYWORD ;
}
- case 151: break;
- case 78:
+ case 152: break;
+ case 72:
{ return JetTokens.NOT_IN;
}
- case 152: break;
+ case 153: break;
case 39:
{ return JetTokens.ATAT ;
}
- case 153: break;
+ case 154: break;
case 6:
{ return JetTokens.DIV ;
}
- case 154: break;
- case 81:
+ case 155: break;
+ case 82:
{ return JetTokens.IDE_TEMPLATE_END ;
}
- case 155: break;
+ case 156: break;
case 38:
{ return JetTokens.LABEL_IDENTIFIER;
}
- case 156: break;
+ case 157: break;
case 29:
{ return JetTokens.REGULAR_STRING_PART;
}
- case 157: break;
+ case 158: break;
case 19:
{ return JetTokens.QUEST ;
}
- case 158: break;
- case 69:
+ case 159: break;
+ case 43:
+ { if (yyline == 0 && yycolumn == 0) {
+ return JetTokens.SHEBANG_COMMENT;
+ }
+ else {
+ yypushback(yylength() - 1);
+ return JetTokens.HASH;
+ }
+ }
+ case 160: break;
+ case 70:
{ pushState(DOC_COMMENT);
commentDepth = 0;
commentStart = getTokenStart();
}
- case 159: break;
- case 61:
+ case 161: break;
+ case 62:
{ return JetTokens.OROR ;
}
- case 160: break;
+ case 162: break;
case 21:
{ return JetTokens.PERC ;
}
- case 161: break;
- case 79:
+ case 163: break;
+ case 73:
{ return JetTokens.EXCLEQEQEQ;
}
- case 162: break;
- case 62:
+ case 164: break;
+ case 63:
{ return JetTokens.PERCEQ ;
}
- case 163: break;
- case 43:
+ case 165: break;
+ case 45:
{ return JetTokens.RANGE ;
}
- case 164: break;
+ case 166: break;
case 1:
{ return TokenType.BAD_CHARACTER;
}
- case 165: break;
- case 63:
+ case 167: break;
+ case 64:
{ pushState(SHORT_TEMPLATE_ENTRY);
yypushback(yylength() - 1);
return JetTokens.SHORT_TEMPLATE_ENTRY_START;
}
- case 166: break;
- case 77:
+ case 168: break;
+ case 71:
{ return JetTokens.NOT_IS;
}
- case 167: break;
- case 13:
+ case 169: break;
+ case 15:
{ return JetTokens.MUL ;
}
- case 168: break;
+ case 170: break;
case 23:
{ return JetTokens.RBRACKET ;
}
- case 169: break;
- case 59:
+ case 171: break;
+ case 60:
{ return JetTokens.PLUSPLUS ;
}
- case 170: break;
+ case 172: break;
case 41:
{ pushState(BLOCK_COMMENT);
commentDepth = 0;
commentStart = getTokenStart();
}
- case 171: break;
- case 84:
+ case 173: break;
+ case 86:
{ return JetTokens.THIS_KEYWORD ;
}
- case 172: break;
- case 7:
+ case 174: break;
+ case 9:
{ return JetTokens.DOT ;
}
- case 173: break;
+ case 175: break;
case 27:
{ return JetTokens.SEMICOLON ;
}
- case 174: break;
- case 49:
+ case 176: break;
+ case 51:
{ return JetTokens.IF_KEYWORD ;
}
- case 175: break;
- case 65:
+ case 177: break;
+ case 66:
{ return JetTokens.ESCAPE_SEQUENCE;
}
- case 176: break;
+ case 178: break;
case 31:
{ popState(); return JetTokens.CLOSING_QUOTE;
}
- case 177: break;
+ case 179: break;
case 18:
{ return JetTokens.EQ ;
}
- case 178: break;
+ case 180: break;
case 5:
{ return JetTokens.AT ;
}
- case 179: break;
- case 72:
+ case 181: break;
+ case 76:
{ return JetTokens.AS_SAFE;
}
- case 180: break;
+ case 182: break;
case 24:
{ return JetTokens.LPAR ;
}
- case 181: break;
- case 8:
+ case 183: break;
+ case 10:
{ return JetTokens.MINUS ;
}
- case 182: break;
- case 99:
+ case 184: break;
+ case 100:
{ return JetTokens.FALSE_KEYWORD ;
}
- case 183: break;
- case 86:
+ case 185: break;
+ case 88:
{ return JetTokens.TYPE_KEYWORD ;
}
- case 184: break;
- case 66:
+ case 186: break;
+ case 67:
{ commentDepth++;
}
- case 185: break;
- case 73:
+ case 187: break;
+ case 77:
{ return JetTokens.FUN_KEYWORD ;
}
- case 186: break;
- case 47:
+ case 188: break;
+ case 49:
{ return JetTokens.IS_KEYWORD ;
}
- case 187: break;
+ case 189: break;
case 30:
{ popState(); yypushback(1); return JetTokens.DANGLING_NEWLINE;
}
- case 188: break;
+ case 190: break;
case 34:
{ lBraceCount++; return JetTokens.LBRACE;
}
- case 189: break;
- case 91:
+ case 191: break;
+ case 85:
{ yypushback(3); return JetTokens.EXCL;
}
- case 190: break;
+ case 192: break;
case 42:
{ return JetTokens.DIVEQ ;
}
- case 191: break;
- case 88:
+ case 193: break;
+ case 90:
{ return JetTokens.ELSE_KEYWORD ;
}
- case 192: break;
- case 51:
+ case 194: break;
+ case 53:
{ return JetTokens.AS_KEYWORD ;
}
- case 193: break;
- case 48:
+ case 195: break;
+ case 50:
{ return JetTokens.IN_KEYWORD ;
}
- case 194: break;
- case 57:
+ case 196: break;
+ case 58:
{ return JetTokens.EQEQ ;
}
- case 195: break;
- case 82:
+ case 197: break;
+ case 83:
{ return JetTokens.EQEQEQ ;
}
- case 196: break;
- case 76:
+ case 198: break;
+ case 80:
{ return JetTokens.VAL_KEYWORD ;
}
- case 197: break;
- case 90:
+ case 199: break;
+ case 92:
{ return JetTokens.CAPITALIZED_THIS_KEYWORD ;
}
- case 198: break;
- case 50:
+ case 200: break;
+ case 52:
{ return JetTokens.MULTEQ ;
}
- case 199: break;
- case 11:
+ case 201: break;
+ case 13:
{ return JetTokens.LBRACE ;
}
- case 200: break;
- case 100:
+ case 202: break;
+ case 101:
{ return JetTokens.OBJECT_KEYWORD ;
}
- case 201: break;
- case 97:
+ case 203: break;
+ case 98:
{ return JetTokens.BREAK_KEYWORD ;
}
- case 202: break;
- case 83:
+ case 204: break;
+ case 84:
{ return JetTokens.BLOCK_COMMENT;
}
- case 203: break;
- case 94:
+ case 205: break;
+ case 95:
{ return JetTokens.TRAIT_KEYWORD ;
}
- case 204: break;
+ case 206: break;
case 33:
{
}
- case 205: break;
- case 16:
+ case 207: break;
+ case 7:
{ return JetTokens.HASH ;
}
- case 206: break;
+ case 208: break;
default:
if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
zzAtEOF = true;
@@ -1323,14 +1389,14 @@ class _JetLexer implements FlexLexer {
zzStartRead = commentStart;
return commentStateToTokenType(state);
}
- case 231: break;
+ case 232: break;
case DOC_COMMENT: {
int state = yystate();
popState();
zzStartRead = commentStart;
return commentStateToTokenType(state);
}
- case 232: break;
+ case 233: break;
default:
return null;
}
diff --git a/compiler/testData/psi/script/Shebang.ktscript b/compiler/testData/psi/script/Shebang.ktscript
new file mode 100644
index 00000000000..9d085c7eb72
--- /dev/null
+++ b/compiler/testData/psi/script/Shebang.ktscript
@@ -0,0 +1,3 @@
+#!/usr/bin/env kotlin
+
+println(args)
diff --git a/compiler/testData/psi/script/Shebang.txt b/compiler/testData/psi/script/Shebang.txt
new file mode 100644
index 00000000000..f24ec71f59d
--- /dev/null
+++ b/compiler/testData/psi/script/Shebang.txt
@@ -0,0 +1,14 @@
+JetFile: Shebang.ktscript
+ PsiComment(SHEBANG_COMMENT)('#!/usr/bin/env kotlin')
+ PsiWhiteSpace('\n\n')
+ SCRIPT
+ BLOCK
+ CALL_EXPRESSION
+ REFERENCE_EXPRESSION
+ PsiElement(IDENTIFIER)('println')
+ VALUE_ARGUMENT_LIST
+ PsiElement(LPAR)('(')
+ VALUE_ARGUMENT
+ REFERENCE_EXPRESSION
+ PsiElement(IDENTIFIER)('args')
+ PsiElement(RPAR)(')')
diff --git a/compiler/testData/psi/script/ShebangIncorrect.ktscript b/compiler/testData/psi/script/ShebangIncorrect.ktscript
new file mode 100644
index 00000000000..b2db2bab5ce
--- /dev/null
+++ b/compiler/testData/psi/script/ShebangIncorrect.ktscript
@@ -0,0 +1,3 @@
+println(1); #!/usr
+
+#!/hi
diff --git a/compiler/testData/psi/script/ShebangIncorrect.txt b/compiler/testData/psi/script/ShebangIncorrect.txt
new file mode 100644
index 00000000000..2b2106c5722
--- /dev/null
+++ b/compiler/testData/psi/script/ShebangIncorrect.txt
@@ -0,0 +1,35 @@
+JetFile: ShebangIncorrect.ktscript
+ SCRIPT
+ BLOCK
+ CALL_EXPRESSION
+ REFERENCE_EXPRESSION
+ PsiElement(IDENTIFIER)('println')
+ VALUE_ARGUMENT_LIST
+ PsiElement(LPAR)('(')
+ VALUE_ARGUMENT
+ INTEGER_CONSTANT
+ PsiElement(INTEGER_LITERAL)('1')
+ PsiElement(RPAR)(')')
+ PsiElement(SEMICOLON)(';')
+ PsiWhiteSpace(' ')
+ BINARY_EXPRESSION
+ TUPLE
+ PsiElement(HASH)('#')
+ PsiElement(EXCL)('!')
+ PsiErrorElement:Expecting an expression
+
+ OPERATION_REFERENCE
+ PsiElement(DIV)('/')
+ REFERENCE_EXPRESSION
+ PsiElement(IDENTIFIER)('usr')
+ PsiWhiteSpace('\n\n')
+ BINARY_EXPRESSION
+ TUPLE
+ PsiElement(HASH)('#')
+ PsiElement(EXCL)('!')
+ PsiErrorElement:Expecting an expression
+
+ OPERATION_REFERENCE
+ PsiElement(DIV)('/')
+ REFERENCE_EXPRESSION
+ PsiElement(IDENTIFIER)('hi')
diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/JetHighlighter.java b/idea/src/org/jetbrains/jet/plugin/highlighter/JetHighlighter.java
index fbd81220c7b..66393a4f6f9 100644
--- a/idea/src/org/jetbrains/jet/plugin/highlighter/JetHighlighter.java
+++ b/idea/src/org/jetbrains/jet/plugin/highlighter/JetHighlighter.java
@@ -82,6 +82,7 @@ public class JetHighlighter extends SyntaxHighlighterBase {
keys.put(JetTokens.CHARACTER_LITERAL, JetHighlightingColors.STRING);
keys.put(JetTokens.EOL_COMMENT, JetHighlightingColors.LINE_COMMENT);
+ keys.put(JetTokens.SHEBANG_COMMENT, JetHighlightingColors.LINE_COMMENT);
keys.put(JetTokens.BLOCK_COMMENT, JetHighlightingColors.BLOCK_COMMENT);
keys.put(JetTokens.DOC_COMMENT, JetHighlightingColors.DOC_COMMENT);