diff --git a/compiler/frontend/src/org/jetbrains/jet/checkers/CheckerTestUtil.java b/compiler/frontend/src/org/jetbrains/jet/checkers/CheckerTestUtil.java
index edff0f640a1..9360fb27083 100644
--- a/compiler/frontend/src/org/jetbrains/jet/checkers/CheckerTestUtil.java
+++ b/compiler/frontend/src/org/jetbrains/jet/checkers/CheckerTestUtil.java
@@ -198,7 +198,7 @@ public class CheckerTestUtil {
opened.pop();
}
- assert opened.isEmpty() : "Stack is not empty";
+ assert opened.isEmpty() : "Stack is not empty: " + opened;
}
else {
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/constants/CompileTimeConstantResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/constants/CompileTimeConstantResolver.java
index 7a1d4ffebde..779b35b9481 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/constants/CompileTimeConstantResolver.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/constants/CompileTimeConstantResolver.java
@@ -165,29 +165,60 @@ public class CompileTimeConstantResolver {
return error;
}
+ // Strip the quotes
if (text.charAt(0) != '\'' || text.charAt(text.length() - 1) != '\'') {
- return new ErrorValue("Incorret character constant");
+ return new ErrorValue("Incorrect character literal");
+ }
+ text = text.substring(1, text.length() - 1); // now there're no quotes
+
+ if (text.length() == 0) {
+ return new ErrorValue("Empty character literal");
}
- text = text.substring(1, text.length() - 1);
-
- if (text.length() == 0) {
- return new ErrorValue("Empty character literal");
- } else if (text.length() == 1) {
- if (text.charAt(0) == '\\') {
- return new ErrorValue("Illegal escape: " + text);
- } else {
+ if (text.charAt(0) != '\\') {
+ // No escape
+ if (text.length() == 1) {
return new CharValue(text.charAt(0));
}
- } else if (text.length() == 2 && text.charAt(0) == '\\') {
- Character escaped = translateEscape(text.charAt(1));
- if (escaped == null) {
- return new ErrorValue("Illegal escape: " + text);
- }
- return new CharValue(escaped);
- } else {
- return new ErrorValue("Too many characters in character literal");
+ return new ErrorValue("Too many characters in a character literal" + text);
}
+ return escapedStringToCharValue(text);
+ }
+
+ @NotNull
+ public static CompileTimeConstant> escapedStringToCharValue(@NotNull String text) {
+ assert text.length() > 0 && text.charAt(0) == '\\' : "Only escaped sequences must be passed to this routine: " + text;
+
+ // Escape
+ String escape = text.substring(1); // strip the slash
+ switch (escape.length()) {
+ case 0:
+ // bare slash
+ return illegalEscape(text);
+ case 1:
+ // one-char escape
+ Character escaped = translateEscape(escape.charAt(0));
+ if (escaped == null) {
+ return illegalEscape(text);
+ }
+ return new CharValue(escaped);
+ case 5:
+ // unicode escape
+ if (escape.charAt(0) == 'u') {
+ try {
+ Integer intValue = Integer.valueOf(escape.substring(1), 16);
+ return new CharValue((char) intValue.intValue());
+ } catch (NumberFormatException e) {
+ // Will be reported below
+ }
+ }
+ break;
+ }
+ return illegalEscape(text);
+ }
+
+ private static ErrorValue illegalEscape(String text) {
+ return new ErrorValue("Illegal escape: " + text);
}
@Nullable
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java
index f9ebc9d4a9c..9078280b43d 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java
@@ -840,18 +840,15 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
@Override
public void visitEscapeStringTemplateEntry(JetEscapeStringTemplateEntry entry) {
- // TODO : Check escape
String text = entry.getText();
- assert text.length() == 2 && text.charAt(0) == '\\';
- char escaped = text.charAt(1);
- Character character = CompileTimeConstantResolver.translateEscape(escaped);
- if (character == null) {
+ CompileTimeConstant> character = CompileTimeConstantResolver.escapedStringToCharValue(text);
+ if (character instanceof ErrorValue) {
context.trace.report(ILLEGAL_ESCAPE_SEQUENCE.on(entry));
value[0] = CompileTimeConstantResolver.OUT_OF_RANGE;
}
else {
- builder.append(character);
+ builder.append(((CharValue) character).getValue());
}
}
});
@@ -866,7 +863,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
public JetType visitAnnotatedExpression(JetAnnotatedExpression expression, ExpressionTypingContext data) {
return facade.getType(expression.getBaseExpression(), data);
}
-
+
@Override
public JetType visitJetElement(JetElement element, ExpressionTypingContext context) {
context.trace.report(UNSUPPORTED.on(element, getClass().getCanonicalName()));
diff --git a/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex b/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex
index 246c6d27e1e..8e6d524b28b 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex
+++ b/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex
@@ -92,7 +92,7 @@ HEX_SIGNIFICAND={HEX_INTEGER_LITERAL}|0[Xx]{HEX_DIGIT}*\.{HEX_DIGIT}+
CHARACTER_LITERAL="'"([^\\\'\n]|{ESCAPE_SEQUENCE})*("'"|\\)?
// TODO: introduce symbols (e.g. 'foo) as another way to write string literals
STRING_LITERAL=\"([^\\\"\n]|{ESCAPE_SEQUENCE})*(\"|\\)?
-ESCAPE_SEQUENCE=\\[^\n]
+ESCAPE_SEQUENCE=\\(u{HEX_DIGIT}{HEX_DIGIT}{HEX_DIGIT}{HEX_DIGIT}|[^\n])
// ANY_ESCAPE_SEQUENCE = \\[^]
THREE_QUO = (\"\"\")
diff --git a/compiler/frontend/src/org/jetbrains/jet/lexer/_JetLexer.java b/compiler/frontend/src/org/jetbrains/jet/lexer/_JetLexer.java
index 698d78e7c93..85d40f6a1a1 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 11/10/11 3:46 PM */
+/* The following code was generated by JFlex 1.4.3 on 11/12/11 11:48 AM */
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 11/10/11 3:46 PM from the specification file
- * /Users/yozh/devel/jb/jet/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex
+ * on 11/12/11 11:48 AM from the specification file
+ * /Users/abreslav/work/jet/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex
*/
class _JetLexer implements FlexLexer {
/** initial size of the lookahead buffer */
@@ -44,10 +44,10 @@ class _JetLexer implements FlexLexer {
"\1\10\1\67\1\65\1\23\1\72\1\73\1\13\1\62\1\76\1\21"+
"\1\17\1\12\1\14\11\1\1\74\1\75\1\63\1\60\1\64\1\61"+
"\1\11\1\2\1\16\2\2\1\20\1\2\11\4\1\22\3\4\1\54"+
- "\3\4\1\15\2\4\1\70\1\24\1\71\1\0\1\4\1\6\1\31"+
- "\1\44\1\36\1\56\1\33\1\52\1\4\1\47\1\41\1\45\1\51"+
- "\1\50\1\32\1\30\1\37\1\35\1\4\1\43\1\34\1\40\1\42"+
- "\1\55\1\46\1\15\1\53\1\4\1\26\1\66\1\27\54\0\1\4"+
+ "\3\4\1\15\2\4\1\70\1\24\1\71\1\0\1\4\1\6\1\32"+
+ "\1\44\1\37\1\56\1\34\1\52\1\4\1\47\1\42\1\45\1\51"+
+ "\1\50\1\33\1\31\1\40\1\36\1\4\1\43\1\35\1\41\1\26"+
+ "\1\55\1\46\1\15\1\53\1\4\1\27\1\66\1\30\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"+
@@ -129,18 +129,19 @@ class _JetLexer implements FlexLexer {
"\1\43\1\53\1\54\1\55\1\56\2\12\1\0\2\3"+
"\1\57\10\3\1\60\1\61\1\62\10\3\1\63\1\0"+
"\1\64\1\65\1\66\1\67\1\70\1\71\1\72\1\73"+
- "\1\74\1\75\1\76\1\0\1\77\1\100\1\0\1\101"+
+ "\1\74\1\75\1\76\1\0\1\77\2\100\1\0\1\101"+
"\1\43\1\3\2\0\1\50\1\102\4\0\1\103\2\3"+
- "\1\104\7\3\1\105\10\3\1\106\1\107\1\3\1\110"+
- "\1\111\1\112\1\113\1\114\1\115\1\0\1\40\1\44"+
- "\1\45\1\0\2\102\1\43\2\0\1\3\1\116\1\117"+
- "\5\3\1\120\1\121\1\3\1\122\2\3\1\123\2\3"+
- "\1\124\1\125\1\76\1\50\2\0\1\3\1\126\1\3"+
- "\1\127\1\3\1\130\1\131\1\3\1\132\1\133\1\134"+
- "\1\103\2\3\1\135\1\136\3\3\1\137\1\140";
+ "\1\104\7\3\1\105\7\3\1\106\1\3\1\107\1\3"+
+ "\1\110\1\111\1\112\1\113\1\114\1\115\2\0\1\40"+
+ "\1\44\1\45\1\0\2\102\1\43\2\0\1\116\1\3"+
+ "\1\117\4\3\1\120\1\3\1\121\1\3\1\122\2\3"+
+ "\1\123\2\3\1\124\1\125\1\76\1\0\1\50\2\0"+
+ "\1\3\1\126\1\3\1\127\1\3\1\130\1\131\1\3"+
+ "\1\132\1\133\1\134\1\0\1\103\2\3\1\135\1\136"+
+ "\3\3\1\137\1\140";
private static int [] zzUnpackAction() {
- int [] result = new int[217];
+ int [] result = new int[221];
int offset = 0;
offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
return result;
@@ -180,22 +181,22 @@ class _JetLexer implements FlexLexer {
"\0\u0180\0\u0180\0\u1200\0\u1240\0\u1280\0\u12c0\0\u1300\0\u1340"+
"\0\u1380\0\u13c0\0\u0180\0\u1400\0\u1440\0\u1480\0\u0100\0\u0100"+
"\0\u0100\0\u0100\0\u0100\0\u0100\0\u0100\0\u0100\0\u14c0\0\u1500"+
- "\0\u0100\0\u0100\0\u1540\0\u0100\0\u1580\0\u0100\0\u15c0\0\u1600"+
+ "\0\u0100\0\u0100\0\u1540\0\u1580\0\u0100\0\u15c0\0\u0100\0\u1600"+
"\0\u1640\0\u1680\0\u16c0\0\u1700\0\u1740\0\u1780\0\u17c0\0\u1800"+
- "\0\u1840\0\u0100\0\u1880\0\u18c0\0\u1900\0\u1940\0\u1980\0\u19c0"+
- "\0\u1a00\0\u0180\0\u1a40\0\u1a80\0\u1ac0\0\u1b00\0\u1b40\0\u1b80"+
- "\0\u1bc0\0\u1c00\0\u0180\0\u0180\0\u1c40\0\u0180\0\u0180\0\u1c80"+
- "\0\u1c80\0\u0100\0\u0100\0\u1cc0\0\u0100\0\u0100\0\u0100\0\u1d00"+
- "\0\u1d40\0\u0100\0\u1d80\0\u1580\0\u1dc0\0\u1e00\0\u0180\0\u0180"+
- "\0\u1e40\0\u1e80\0\u1ec0\0\u1f00\0\u1f40\0\u0180\0\u0180\0\u1f80"+
- "\0\u0180\0\u1fc0\0\u2000\0\u0180\0\u2040\0\u2080\0\u0180\0\u0100"+
- "\0\u0100\0\u0100\0\u20c0\0\u2100\0\u2140\0\u0180\0\u2180\0\u0180"+
- "\0\u21c0\0\u0180\0\u0180\0\u2200\0\u0180\0\u0180\0\u0180\0\u0100"+
- "\0\u2240\0\u2280\0\u0180\0\u0180\0\u22c0\0\u2300\0\u2340\0\u0180"+
- "\0\u0180";
+ "\0\u1840\0\u1880\0\u0100\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\u1b80"+
+ "\0\u1bc0\0\u1c00\0\u0180\0\u1c40\0\u0180\0\u1c80\0\u0180\0\u0180"+
+ "\0\u1cc0\0\u1cc0\0\u0100\0\u0100\0\u1d00\0\u1d40\0\u0100\0\u0100"+
+ "\0\u0100\0\u1d80\0\u1dc0\0\u0100\0\u1e00\0\u15c0\0\u1e40\0\u0180"+
+ "\0\u1e80\0\u0180\0\u1ec0\0\u1f00\0\u1f40\0\u1f80\0\u0180\0\u1fc0"+
+ "\0\u0180\0\u2000\0\u0180\0\u2040\0\u2080\0\u0180\0\u20c0\0\u2100"+
+ "\0\u0180\0\u0100\0\u0100\0\u2140\0\u0100\0\u2180\0\u21c0\0\u2200"+
+ "\0\u0180\0\u2240\0\u0180\0\u2280\0\u0180\0\u0180\0\u22c0\0\u0180"+
+ "\0\u0180\0\u0180\0\u2300\0\u0100\0\u2340\0\u2380\0\u0180\0\u0180"+
+ "\0\u23c0\0\u2400\0\u2440\0\u0180\0\u0180";
private static int [] zzUnpackRowMap() {
- int [] result = new int[217];
+ int [] result = new int[221];
int offset = 0;
offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
return result;
@@ -220,206 +221,235 @@ class _JetLexer implements FlexLexer {
private static final String ZZ_TRANS_PACKED_0 =
"\1\5\1\6\1\7\1\10\1\7\1\5\1\11\1\10"+
"\1\12\1\13\1\14\1\15\1\16\2\7\1\17\1\7"+
- "\1\20\1\7\1\21\1\5\1\22\1\23\1\24\1\25"+
- "\1\26\1\7\1\27\1\30\1\7\1\31\1\32\1\33"+
- "\1\34\1\7\1\35\1\36\1\7\1\37\3\7\1\40"+
+ "\1\20\1\7\1\21\1\5\1\22\1\7\1\23\1\24"+
+ "\1\25\1\26\1\7\1\27\1\30\1\7\1\31\1\32"+
+ "\1\33\1\34\1\35\1\36\1\7\1\37\3\7\1\40"+
"\1\7\1\41\1\42\1\43\1\44\1\45\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\7\65\1\66\1\67"+
"\13\65\1\70\1\71\52\65\2\0\1\72\1\0\1\72"+
"\1\0\1\73\6\0\2\72\1\0\1\72\1\0\1\72"+
- "\5\0\27\72\21\0\1\5\1\6\1\7\1\10\1\7"+
- "\1\5\1\11\1\10\1\12\1\13\1\14\1\15\1\16"+
- "\2\7\1\17\1\7\1\20\1\7\1\21\1\5\1\22"+
- "\1\74\1\75\1\25\1\26\1\7\1\27\1\30\1\7"+
- "\1\31\1\32\1\33\1\34\1\7\1\35\1\36\1\7"+
- "\1\37\3\7\1\40\1\7\1\41\1\42\1\43\1\44"+
- "\1\45\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"+
- "\101\0\1\6\12\0\1\6\2\0\1\76\1\77\12\0"+
- "\1\77\45\0\2\7\1\0\2\7\6\0\3\7\1\0"+
- "\1\7\1\0\1\7\5\0\27\7\24\0\1\10\3\0"+
- "\1\10\70\0\6\100\2\0\70\100\2\0\1\101\1\0"+
- "\1\101\1\0\1\102\6\0\2\101\1\0\1\101\1\0"+
- "\1\101\5\0\27\101\23\0\1\103\1\0\1\103\1\0"+
- "\1\104\2\0\1\105\3\0\2\103\1\0\1\103\1\0"+
- "\1\103\5\0\27\103\33\0\1\106\1\107\44\0\1\110"+
+ "\3\0\1\72\2\0\26\72\21\0\1\5\1\6\1\7"+
+ "\1\10\1\7\1\5\1\11\1\10\1\12\1\13\1\14"+
+ "\1\15\1\16\2\7\1\17\1\7\1\20\1\7\1\21"+
+ "\1\5\1\22\1\7\1\74\1\75\1\25\1\26\1\7"+
+ "\1\27\1\30\1\7\1\31\1\32\1\33\1\34\1\35"+
+ "\1\36\1\7\1\37\3\7\1\40\1\7\1\41\1\42"+
+ "\1\43\1\44\1\45\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\101\0\1\6\12\0\1\6\2\0\1\76"+
+ "\1\77\13\0\1\77\44\0\2\7\1\0\2\7\6\0"+
+ "\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
+ "\26\7\24\0\1\10\3\0\1\10\70\0\6\100\2\0"+
+ "\70\100\2\0\1\101\1\0\1\101\1\0\1\102\6\0"+
+ "\2\101\1\0\1\101\1\0\1\101\3\0\1\101\2\0"+
+ "\26\101\23\0\1\103\1\0\1\103\1\0\1\104\2\0"+
+ "\1\105\3\0\2\103\1\0\1\103\1\0\1\103\3\0"+
+ "\1\103\2\0\26\103\33\0\1\106\1\107\44\0\1\110"+
"\77\0\1\111\20\0\1\112\12\0\1\112\1\113\1\114"+
- "\1\76\1\77\12\0\1\77\10\0\1\114\34\0\1\115"+
+ "\1\76\1\77\13\0\1\77\7\0\1\114\34\0\1\115"+
"\12\0\1\115\2\0\1\116\101\0\1\117\36\0\1\120"+
"\3\0\1\121\13\0\7\21\1\0\13\21\1\122\1\123"+
"\53\21\25\0\1\124\53\0\2\7\1\0\2\7\6\0"+
- "\3\7\1\0\1\7\1\0\1\7\5\0\1\7\1\125"+
- "\10\7\1\126\14\7\22\0\2\7\1\0\2\7\6\0"+
- "\3\7\1\0\1\7\1\0\1\7\5\0\4\7\1\127"+
- "\22\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
- "\1\7\1\0\1\7\5\0\20\7\1\130\6\7\22\0"+
+ "\3\7\1\0\1\7\1\0\1\7\3\0\1\125\2\0"+
+ "\1\7\1\126\24\7\22\0\2\7\1\0\2\7\6\0"+
+ "\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
+ "\4\7\1\127\21\7\22\0\2\7\1\0\2\7\6\0"+
+ "\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
+ "\17\7\1\130\6\7\22\0\2\7\1\0\2\7\6\0"+
+ "\3\7\1\0\1\7\1\0\1\7\3\0\1\131\2\0"+
+ "\26\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
+ "\1\7\1\0\1\7\3\0\1\7\2\0\7\7\1\132"+
+ "\7\7\1\133\6\7\22\0\2\7\1\0\2\7\6\0"+
+ "\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
+ "\13\7\1\134\12\7\22\0\2\7\1\0\2\7\6\0"+
+ "\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
+ "\12\7\1\135\3\7\1\136\3\7\1\137\3\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
- "\1\7\5\0\12\7\1\131\14\7\22\0\2\7\1\0"+
- "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\5\0"+
- "\7\7\1\132\10\7\1\133\6\7\22\0\2\7\1\0"+
- "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\5\0"+
- "\14\7\1\134\12\7\22\0\2\7\1\0\2\7\6\0"+
- "\3\7\1\0\1\7\1\0\1\7\5\0\13\7\1\135"+
- "\3\7\1\136\3\7\1\137\3\7\22\0\2\7\1\0"+
- "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\5\0"+
- "\1\140\3\7\1\141\15\7\1\142\4\7\22\0\2\7"+
- "\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
- "\5\0\3\7\1\143\23\7\22\0\2\7\1\0\2\7"+
- "\6\0\3\7\1\0\1\7\1\0\1\7\5\0\13\7"+
+ "\1\7\3\0\1\7\2\0\1\140\3\7\1\141\14\7"+
+ "\1\142\4\7\22\0\2\7\1\0\2\7\6\0\3\7"+
+ "\1\0\1\7\1\0\1\7\3\0\1\7\2\0\3\7"+
+ "\1\143\22\7\22\0\2\7\1\0\2\7\6\0\3\7"+
+ "\1\0\1\7\1\0\1\7\3\0\1\7\2\0\12\7"+
"\1\144\13\7\22\0\2\7\1\0\2\7\6\0\3\7"+
- "\1\0\1\7\1\0\1\7\5\0\17\7\1\145\7\7"+
- "\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
- "\1\0\1\7\5\0\1\7\1\146\5\7\1\147\2\7"+
- "\1\150\14\7\22\0\2\7\1\0\2\7\6\0\3\7"+
- "\1\0\1\7\1\0\1\7\5\0\17\7\1\151\7\7"+
- "\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
- "\1\0\1\7\5\0\1\7\1\152\25\7\22\0\2\7"+
- "\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
- "\5\0\7\7\1\153\17\7\62\0\1\154\16\0\1\155"+
+ "\1\0\1\7\1\0\1\7\3\0\1\7\2\0\16\7"+
+ "\1\145\7\7\22\0\2\7\1\0\2\7\6\0\3\7"+
+ "\1\0\1\7\1\0\1\7\3\0\1\146\2\0\1\7"+
+ "\1\147\5\7\1\150\16\7\22\0\2\7\1\0\2\7"+
+ "\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
+ "\2\0\16\7\1\151\7\7\22\0\2\7\1\0\2\7"+
+ "\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
+ "\2\0\1\7\1\152\24\7\22\0\2\7\1\0\2\7"+
+ "\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
+ "\2\0\7\7\1\153\16\7\63\0\1\154\15\0\1\155"+
"\77\0\1\156\3\0\1\157\73\0\1\160\1\0\1\161"+
"\75\0\1\162\77\0\1\163\104\0\1\164\100\0\1\165"+
"\71\0\1\166\17\0\7\65\2\0\13\65\2\0\52\65"+
"\2\0\1\167\1\0\1\167\1\0\1\170\6\0\2\167"+
- "\1\0\1\167\1\0\1\167\3\0\1\171\1\0\27\167"+
- "\21\0\7\172\1\0\70\172\1\0\2\72\1\0\2\72"+
- "\6\0\3\72\1\0\1\72\1\0\1\72\5\0\27\72"+
- "\21\0\6\173\2\0\70\173\1\0\1\115\12\0\1\115"+
- "\2\0\1\174\61\0\1\175\12\0\1\175\4\0\1\175"+
- "\40\0\1\175\15\0\6\100\1\176\1\0\70\100\1\0"+
- "\2\101\1\0\2\101\6\0\3\101\1\0\1\101\1\0"+
- "\1\101\5\0\27\101\21\0\6\177\2\0\70\177\1\0"+
- "\2\103\1\0\2\103\6\0\3\103\1\0\1\103\1\0"+
- "\1\103\5\0\27\103\21\0\6\200\2\0\70\200\7\106"+
- "\1\0\70\106\13\201\1\202\64\201\1\0\1\112\12\0"+
- "\1\112\2\0\1\203\1\77\12\0\1\77\45\0\2\113"+
- "\11\0\1\113\1\0\1\113\1\204\1\113\1\0\1\205"+
- "\6\0\1\113\1\0\1\113\1\0\1\205\1\113\5\0"+
- "\1\113\5\0\1\113\3\0\1\113\22\0\1\114\12\0"+
- "\1\114\2\0\1\206\61\0\1\115\12\0\1\115\3\0"+
- "\1\77\12\0\1\77\44\0\7\21\1\0\70\21\25\0"+
- "\1\207\53\0\2\7\1\0\2\7\6\0\3\7\1\0"+
- "\1\7\1\0\1\7\5\0\2\7\1\210\24\7\22\0"+
- "\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
- "\1\7\5\0\20\7\1\211\6\7\22\0\2\7\1\0"+
- "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\5\0"+
- "\27\7\2\0\1\212\17\0\2\7\1\0\2\7\6\0"+
- "\3\7\1\0\1\7\1\0\1\7\5\0\4\7\1\213"+
- "\22\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
- "\1\7\1\0\1\7\5\0\5\7\1\214\21\7\22\0"+
- "\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
- "\1\7\5\0\1\215\26\7\22\0\2\7\1\0\2\7"+
- "\6\0\3\7\1\0\1\7\1\0\1\7\5\0\1\7"+
- "\1\216\25\7\22\0\2\7\1\0\2\7\6\0\3\7"+
- "\1\0\1\7\1\0\1\7\5\0\15\7\1\217\11\7"+
- "\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
- "\1\0\1\7\5\0\1\7\1\220\10\7\1\221\10\7"+
- "\1\222\3\7\22\0\2\7\1\0\2\7\6\0\3\7"+
- "\1\0\1\7\1\0\1\7\5\0\11\7\1\223\1\7"+
- "\1\224\13\7\22\0\2\7\1\0\2\7\6\0\3\7"+
- "\1\0\1\7\1\0\1\7\5\0\5\7\1\225\21\7"+
- "\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
- "\1\0\1\7\5\0\10\7\1\226\16\7\22\0\2\7"+
+ "\1\0\1\167\1\0\1\167\3\0\1\167\1\171\1\0"+
+ "\26\167\21\0\7\172\1\0\16\172\1\173\51\172\1\0"+
+ "\2\72\1\0\2\72\6\0\3\72\1\0\1\72\1\0"+
+ "\1\72\3\0\1\72\2\0\26\72\21\0\6\174\2\0"+
+ "\70\174\1\0\1\115\12\0\1\115\2\0\1\175\61\0"+
+ "\1\176\12\0\1\176\4\0\1\176\40\0\1\176\15\0"+
+ "\6\100\1\177\1\0\70\100\1\0\2\101\1\0\2\101"+
+ "\6\0\3\101\1\0\1\101\1\0\1\101\3\0\1\101"+
+ "\2\0\26\101\21\0\6\200\2\0\70\200\1\0\2\103"+
+ "\1\0\2\103\6\0\3\103\1\0\1\103\1\0\1\103"+
+ "\3\0\1\103\2\0\26\103\21\0\6\201\2\0\70\201"+
+ "\7\106\1\0\70\106\13\202\1\203\64\202\1\0\1\112"+
+ "\12\0\1\112\2\0\1\204\1\77\13\0\1\77\44\0"+
+ "\2\113\11\0\1\113\1\0\1\113\1\205\1\113\1\0"+
+ "\1\206\7\0\1\113\1\0\1\113\1\0\1\206\1\113"+
+ "\4\0\1\113\5\0\1\113\3\0\1\113\22\0\1\114"+
+ "\12\0\1\114\2\0\1\207\61\0\1\115\12\0\1\115"+
+ "\3\0\1\77\13\0\1\77\43\0\7\21\1\0\70\21"+
+ "\25\0\1\210\53\0\2\7\1\0\2\7\6\0\3\7"+
+ "\1\0\1\7\1\0\1\7\3\0\1\7\2\0\17\7"+
+ "\1\211\6\7\22\0\2\7\1\0\2\7\6\0\3\7"+
+ "\1\0\1\7\1\0\1\7\3\0\1\7\2\0\2\7"+
+ "\1\212\23\7\22\0\2\7\1\0\2\7\6\0\3\7"+
+ "\1\0\1\7\1\0\1\7\3\0\1\7\2\0\26\7"+
+ "\2\0\1\213\17\0\2\7\1\0\2\7\6\0\3\7"+
+ "\1\0\1\7\1\0\1\7\3\0\1\7\2\0\4\7"+
+ "\1\214\21\7\22\0\2\7\1\0\2\7\6\0\3\7"+
+ "\1\0\1\7\1\0\1\7\3\0\1\7\2\0\5\7"+
+ "\1\215\20\7\22\0\2\7\1\0\2\7\6\0\3\7"+
+ "\1\0\1\7\1\0\1\7\3\0\1\7\2\0\1\216"+
+ "\25\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
+ "\1\7\1\0\1\7\3\0\1\7\2\0\1\7\1\217"+
+ "\24\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
+ "\1\7\1\0\1\7\3\0\1\7\2\0\14\7\1\220"+
+ "\11\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
+ "\1\7\1\0\1\7\3\0\1\221\2\0\1\7\1\222"+
+ "\20\7\1\223\3\7\22\0\2\7\1\0\2\7\6\0"+
+ "\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
+ "\11\7\1\224\1\225\13\7\22\0\2\7\1\0\2\7"+
+ "\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
+ "\2\0\5\7\1\226\20\7\22\0\2\7\1\0\2\7"+
+ "\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
+ "\2\0\10\7\1\227\15\7\22\0\2\7\1\0\2\7"+
+ "\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
+ "\2\0\3\7\1\230\22\7\22\0\2\7\1\0\2\7"+
+ "\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
+ "\2\0\3\7\1\231\5\7\1\232\14\7\22\0\2\7"+
"\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
- "\5\0\3\7\1\227\23\7\22\0\2\7\1\0\2\7"+
- "\6\0\3\7\1\0\1\7\1\0\1\7\5\0\3\7"+
- "\1\230\5\7\1\231\15\7\22\0\2\7\1\0\2\7"+
- "\6\0\3\7\1\0\1\7\1\0\1\7\5\0\20\7"+
- "\1\232\6\7\22\0\2\7\1\0\2\7\6\0\3\7"+
- "\1\0\1\7\1\0\1\7\5\0\13\7\1\233\13\7"+
- "\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
- "\1\0\1\7\5\0\1\234\26\7\22\0\2\7\1\0"+
- "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\5\0"+
- "\11\7\1\235\15\7\22\0\2\7\1\0\2\7\6\0"+
- "\3\7\1\0\1\7\1\0\1\7\5\0\13\7\1\236"+
- "\4\7\1\237\6\7\51\0\1\240\3\0\1\241\123\0"+
- "\1\242\77\0\1\243\20\0\2\167\1\0\2\167\6\0"+
- "\3\167\1\0\1\167\1\0\1\167\5\0\27\167\21\0"+
- "\6\244\2\0\70\244\6\173\1\245\1\0\70\173\1\0"+
- "\1\175\12\0\1\175\63\0\6\177\1\246\1\0\70\177"+
- "\6\200\1\247\1\0\70\200\13\201\1\250\64\201\12\251"+
- "\1\252\1\202\64\251\1\0\1\115\12\0\1\115\64\0"+
- "\2\253\11\0\1\253\1\0\1\253\1\174\1\253\10\0"+
- "\1\253\1\0\1\253\2\0\1\253\5\0\1\253\5\0"+
- "\1\253\3\0\1\253\22\0\1\175\12\0\1\175\4\0"+
- "\1\254\40\0\1\254\34\0\1\174\60\0\25\207\1\255"+
- "\52\207\1\0\2\7\1\0\2\7\6\0\3\7\1\0"+
- "\1\7\1\0\1\7\5\0\3\7\1\256\23\7\22\0"+
+ "\3\0\1\7\2\0\1\233\25\7\22\0\2\7\1\0"+
+ "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
+ "\1\7\2\0\17\7\1\234\6\7\22\0\2\7\1\0"+
+ "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
+ "\1\7\2\0\12\7\1\235\13\7\22\0\2\7\1\0"+
+ "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
+ "\1\7\2\0\11\7\1\236\14\7\22\0\2\7\1\0"+
+ "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
+ "\1\7\2\0\12\7\1\237\4\7\1\240\6\7\52\0"+
+ "\1\241\3\0\1\242\122\0\1\243\77\0\1\244\20\0"+
+ "\2\167\1\0\2\167\6\0\3\167\1\0\1\167\1\0"+
+ "\1\167\3\0\1\167\2\0\26\167\21\0\6\245\2\0"+
+ "\70\245\1\0\2\246\11\0\1\246\1\0\1\246\1\0"+
+ "\1\246\11\0\1\246\1\0\1\246\2\0\1\246\4\0"+
+ "\1\246\5\0\1\246\3\0\1\246\21\0\6\174\1\247"+
+ "\1\0\70\174\1\0\1\176\12\0\1\176\63\0\6\200"+
+ "\1\250\1\0\70\200\6\201\1\251\1\0\70\201\13\202"+
+ "\1\252\64\202\12\253\1\254\1\203\64\253\1\0\1\115"+
+ "\12\0\1\115\64\0\2\255\11\0\1\255\1\0\1\255"+
+ "\1\175\1\255\11\0\1\255\1\0\1\255\2\0\1\255"+
+ "\4\0\1\255\5\0\1\255\3\0\1\255\22\0\1\176"+
+ "\12\0\1\176\4\0\1\256\40\0\1\256\34\0\1\175"+
+ "\60\0\25\210\1\257\52\210\1\0\2\7\1\0\2\7"+
+ "\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
+ "\2\0\17\7\1\260\6\7\22\0\2\7\1\0\2\7"+
+ "\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
+ "\2\0\3\7\1\261\22\7\22\0\2\7\1\0\2\7"+
+ "\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
+ "\2\0\3\7\1\262\22\7\22\0\2\7\1\0\2\7"+
+ "\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
+ "\2\0\3\7\1\263\22\7\22\0\2\7\1\0\2\7"+
+ "\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
+ "\2\0\10\7\1\264\15\7\22\0\2\7\1\0\2\7"+
+ "\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
+ "\2\0\4\7\1\265\21\7\22\0\2\7\1\0\2\7"+
+ "\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
+ "\2\0\3\7\1\266\22\7\22\0\2\7\1\0\2\7"+
+ "\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
+ "\2\0\3\7\1\267\22\7\22\0\2\7\1\0\2\7"+
+ "\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
+ "\2\0\11\7\1\270\14\7\22\0\2\7\1\0\2\7"+
+ "\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
+ "\2\0\4\7\1\271\21\7\22\0\2\7\1\0\2\7"+
+ "\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
+ "\2\0\7\7\1\272\16\7\22\0\2\7\1\0\2\7"+
+ "\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
+ "\2\0\3\7\1\273\22\7\22\0\2\7\1\0\2\7"+
+ "\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\274"+
+ "\2\0\26\7\22\0\2\7\1\0\2\7\6\0\3\7"+
+ "\1\0\1\7\1\0\1\7\3\0\1\7\2\0\1\7"+
+ "\1\275\24\7\22\0\2\7\1\0\2\7\6\0\3\7"+
+ "\1\0\1\7\1\0\1\7\3\0\1\7\2\0\1\276"+
+ "\25\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
+ "\1\7\1\0\1\7\3\0\1\7\2\0\17\7\1\277"+
+ "\6\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
+ "\1\7\1\0\1\7\3\0\1\7\2\0\4\7\1\300"+
+ "\21\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
+ "\1\7\1\0\1\7\3\0\1\7\2\0\4\7\1\301"+
+ "\21\7\22\0\2\302\1\0\2\302\6\0\3\302\1\0"+
+ "\1\302\1\0\1\302\3\0\1\302\2\0\26\302\21\0"+
+ "\6\245\1\303\1\0\70\245\1\0\2\304\11\0\1\304"+
+ "\1\0\1\304\1\0\1\304\11\0\1\304\1\0\1\304"+
+ "\2\0\1\304\4\0\1\304\5\0\1\304\3\0\1\304"+
+ "\21\0\12\202\1\305\1\252\64\202\13\253\1\306\64\253"+
+ "\1\0\2\255\11\0\1\255\1\0\1\255\1\0\1\255"+
+ "\1\0\1\206\7\0\1\255\1\0\1\255\1\0\1\206"+
+ "\1\255\4\0\1\255\5\0\1\255\3\0\1\255\21\0"+
+ "\25\210\1\307\52\210\1\0\2\7\1\0\2\7\6\0"+
+ "\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
+ "\4\7\1\310\21\7\22\0\2\7\1\0\2\7\6\0"+
+ "\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
+ "\12\7\1\311\13\7\22\0\2\7\1\0\2\7\6\0"+
+ "\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
+ "\11\7\1\312\14\7\22\0\2\7\1\0\2\7\6\0"+
+ "\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
+ "\4\7\1\313\21\7\22\0\2\7\1\0\2\7\6\0"+
+ "\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
+ "\6\7\1\314\17\7\22\0\2\7\1\0\2\7\6\0"+
+ "\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
+ "\10\7\1\315\15\7\22\0\2\7\1\0\2\7\6\0"+
+ "\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
+ "\15\7\1\316\10\7\22\0\2\7\1\0\2\7\6\0"+
+ "\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
+ "\12\7\1\317\13\7\22\0\2\7\1\0\2\7\6\0"+
+ "\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
+ "\20\7\1\320\5\7\22\0\2\7\1\0\2\7\6\0"+
+ "\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
+ "\3\7\1\321\22\7\22\0\2\7\1\0\2\7\6\0"+
+ "\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
+ "\3\7\1\322\22\7\22\0\2\323\11\0\1\323\1\0"+
+ "\1\323\1\0\1\323\11\0\1\323\1\0\1\323\2\0"+
+ "\1\323\4\0\1\323\5\0\1\323\3\0\1\323\21\0"+
+ "\12\253\1\254\1\306\64\253\25\210\1\324\52\210\1\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
- "\1\7\5\0\20\7\1\257\6\7\22\0\2\7\1\0"+
- "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\5\0"+
- "\3\7\1\260\23\7\22\0\2\7\1\0\2\7\6\0"+
- "\3\7\1\0\1\7\1\0\1\7\5\0\3\7\1\261"+
- "\23\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
- "\1\7\1\0\1\7\5\0\10\7\1\262\16\7\22\0"+
+ "\1\7\3\0\1\7\2\0\5\7\1\325\20\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
- "\1\7\5\0\4\7\1\263\22\7\22\0\2\7\1\0"+
- "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\5\0"+
- "\3\7\1\264\23\7\22\0\2\7\1\0\2\7\6\0"+
- "\3\7\1\0\1\7\1\0\1\7\5\0\11\7\1\265"+
- "\15\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
- "\1\7\1\0\1\7\5\0\3\7\1\266\23\7\22\0"+
- "\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
- "\1\7\5\0\4\7\1\267\22\7\22\0\2\7\1\0"+
- "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\5\0"+
- "\7\7\1\270\17\7\22\0\2\7\1\0\2\7\6\0"+
- "\3\7\1\0\1\7\1\0\1\7\5\0\3\7\1\271"+
- "\23\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
- "\1\7\1\0\1\7\5\0\12\7\1\272\14\7\22\0"+
- "\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
- "\1\7\5\0\1\7\1\273\25\7\22\0\2\7\1\0"+
- "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\5\0"+
- "\1\274\26\7\22\0\2\7\1\0\2\7\6\0\3\7"+
- "\1\0\1\7\1\0\1\7\5\0\20\7\1\275\6\7"+
- "\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
- "\1\0\1\7\5\0\4\7\1\276\22\7\22\0\2\7"+
+ "\1\7\3\0\1\7\2\0\1\326\25\7\22\0\2\7"+
"\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
- "\5\0\4\7\1\277\22\7\22\0\2\300\1\0\2\300"+
- "\6\0\3\300\1\0\1\300\1\0\1\300\5\0\27\300"+
- "\21\0\6\244\1\301\1\0\70\244\12\201\1\302\1\250"+
- "\64\201\13\251\1\303\64\251\1\0\2\253\11\0\1\253"+
- "\1\0\1\253\1\0\1\253\1\0\1\205\6\0\1\253"+
- "\1\0\1\253\1\0\1\205\1\253\5\0\1\253\5\0"+
- "\1\253\3\0\1\253\21\0\25\207\1\304\52\207\1\0"+
+ "\3\0\1\7\2\0\10\7\1\327\15\7\22\0\2\7"+
+ "\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
+ "\3\0\1\7\2\0\1\330\25\7\22\0\2\172\11\0"+
+ "\1\172\1\0\1\172\1\0\1\172\11\0\1\172\1\0"+
+ "\1\172\2\0\1\172\4\0\1\172\5\0\1\172\3\0"+
+ "\1\172\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
+ "\1\7\1\0\1\7\3\0\1\7\2\0\1\7\1\331"+
+ "\24\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
+ "\1\7\1\0\1\7\3\0\1\332\2\0\26\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
- "\1\7\5\0\4\7\1\305\22\7\22\0\2\7\1\0"+
- "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\5\0"+
- "\13\7\1\306\13\7\22\0\2\7\1\0\2\7\6\0"+
- "\3\7\1\0\1\7\1\0\1\7\5\0\11\7\1\307"+
- "\15\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
- "\1\7\1\0\1\7\5\0\4\7\1\310\22\7\22\0"+
+ "\1\7\3\0\1\7\2\0\6\7\1\333\17\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
- "\1\7\5\0\6\7\1\311\20\7\22\0\2\7\1\0"+
- "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\5\0"+
- "\10\7\1\312\16\7\22\0\2\7\1\0\2\7\6\0"+
- "\3\7\1\0\1\7\1\0\1\7\5\0\16\7\1\313"+
- "\10\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
- "\1\7\1\0\1\7\5\0\13\7\1\314\13\7\22\0"+
+ "\1\7\3\0\1\7\2\0\3\7\1\334\22\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
- "\1\7\5\0\21\7\1\315\5\7\22\0\2\7\1\0"+
- "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\5\0"+
- "\3\7\1\316\23\7\22\0\2\7\1\0\2\7\6\0"+
- "\3\7\1\0\1\7\1\0\1\7\5\0\3\7\1\317"+
- "\23\7\21\0\12\251\1\252\1\303\64\251\25\207\1\320"+
- "\52\207\1\0\2\7\1\0\2\7\6\0\3\7\1\0"+
- "\1\7\1\0\1\7\5\0\5\7\1\321\21\7\22\0"+
- "\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
- "\1\7\5\0\1\322\26\7\22\0\2\7\1\0\2\7"+
- "\6\0\3\7\1\0\1\7\1\0\1\7\5\0\10\7"+
- "\1\323\16\7\22\0\2\7\1\0\2\7\6\0\3\7"+
- "\1\0\1\7\1\0\1\7\5\0\1\324\26\7\22\0"+
- "\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
- "\1\7\5\0\1\7\1\325\25\7\22\0\2\7\1\0"+
- "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\5\0"+
- "\12\7\1\326\14\7\22\0\2\7\1\0\2\7\6\0"+
- "\3\7\1\0\1\7\1\0\1\7\5\0\6\7\1\327"+
- "\20\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
- "\1\7\1\0\1\7\5\0\3\7\1\330\23\7\22\0"+
- "\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
- "\1\7\5\0\3\7\1\331\23\7\21\0";
+ "\1\7\3\0\1\7\2\0\3\7\1\335\22\7\21\0";
private static int [] zzUnpackTrans() {
- int [] result = new int[9088];
+ int [] result = new int[9344];
int offset = 0;
offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
return result;
@@ -464,13 +494,14 @@ class _JetLexer implements FlexLexer {
"\1\1\1\11\1\1\1\0\1\11\1\1\1\0\2\11"+
"\1\0\1\1\1\0\1\1\1\0\1\1\1\0\1\11"+
"\2\1\2\11\4\1\5\11\1\1\1\0\27\1\1\0"+
- "\2\1\10\11\1\1\1\0\2\11\1\0\1\11\1\1"+
- "\1\11\2\0\2\1\4\0\3\1\1\11\27\1\2\11"+
- "\1\0\3\11\1\0\1\1\1\11\1\1\2\0\22\1"+
- "\3\11\2\0\13\1\1\11\11\1";
+ "\2\1\10\11\1\1\1\0\2\11\1\1\1\0\1\11"+
+ "\1\1\1\11\2\0\2\1\4\0\3\1\1\11\27\1"+
+ "\2\11\2\0\3\11\1\0\1\1\1\11\1\1\2\0"+
+ "\22\1\2\11\1\0\1\11\2\0\13\1\1\0\1\11"+
+ "\11\1";
private static int [] zzUnpackAttribute() {
- int [] result = new int[217];
+ int [] result = new int[221];
int offset = 0;
offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
return result;
@@ -809,7 +840,7 @@ class _JetLexer implements FlexLexer {
{ pushState(STRING); return JetTokens.OPEN_QUOTE;
}
case 98: break;
- case 70:
+ case 71:
{ return JetTokens.FOR_KEYWORD ;
}
case 99: break;
@@ -1106,7 +1137,7 @@ class _JetLexer implements FlexLexer {
{ return JetTokens.TYPE_KEYWORD ;
}
case 171: break;
- case 71:
+ case 70:
{ return JetTokens.FUN_KEYWORD ;
}
case 172: break;
diff --git a/compiler/testData/checkerWithErrorTypes/full/StringTemplates.jet b/compiler/testData/checkerWithErrorTypes/full/StringTemplates.jet
index 108ffe1d7dd..79b4e562f17 100644
--- a/compiler/testData/checkerWithErrorTypes/full/StringTemplates.jet
+++ b/compiler/testData/checkerWithErrorTypes/full/StringTemplates.jet
@@ -18,4 +18,5 @@ fun demo() {
"foo${bar + map { "foo" }}sdfsdf"
"foo${bar + map {
"foo$sdf${ buzz{}}" }}sdfsdf"
+ "a\u \u0 \u00 \u000 \u0000 \u0AaA \u0AAz.length( ) + \u0022b"
}
\ No newline at end of file
diff --git a/compiler/testData/checkerWithErrorTypes/quick/IncorrectCharacterLiterals.jet b/compiler/testData/checkerWithErrorTypes/quick/IncorrectCharacterLiterals.jet
index 5808615db0f..d30fa5f45f7 100644
--- a/compiler/testData/checkerWithErrorTypes/quick/IncorrectCharacterLiterals.jet
+++ b/compiler/testData/checkerWithErrorTypes/quick/IncorrectCharacterLiterals.jet
@@ -23,4 +23,16 @@ fun test() {
'\123'
'\ra'
'\000'
+ '\000'
+ '\u0000'
+ '\u000a'
+ '\u000A'
+ '\u'
+ '\u0'
+ '\u00'
+ '\u000'
+ '\u000z'
+ '\\u000'
+ '\'
}
+