From 30926012c746c86148915526bc982ae56fbe0553 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Sat, 12 Nov 2011 18:54:03 +0400 Subject: [PATCH] Support unicode escapes in chars and strings --- .../jet/checkers/CheckerTestUtil.java | 2 +- .../CompileTimeConstantResolver.java | 65 ++- .../BasicExpressionTypingVisitor.java | 11 +- .../src/org/jetbrains/jet/lexer/Jet.flex | 2 +- .../org/jetbrains/jet/lexer/_JetLexer.java | 455 ++++++++++-------- .../full/StringTemplates.jet | 1 + .../quick/IncorrectCharacterLiterals.jet | 12 + 7 files changed, 310 insertions(+), 238 deletions(-) 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' + '\' } +