mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2025-01-09 13:43:22 +00:00
1384 lines
46 KiB
Java
1384 lines
46 KiB
Java
package com.google.gson.stream;
|
|
|
|
import com.google.gson.internal.JsonReaderInternalAccess;
|
|
import com.google.gson.internal.bind.JsonTreeReader;
|
|
import java.io.Closeable;
|
|
import java.io.EOFException;
|
|
import java.io.IOException;
|
|
import java.io.Reader;
|
|
import java.util.Arrays;
|
|
import kotlin.text.Typography;
|
|
|
|
/* loaded from: classes3.dex */
|
|
public class JsonReader implements Closeable {
|
|
private static final long MIN_INCOMPLETE_INTEGER = -922337203685477580L;
|
|
private static final int NUMBER_CHAR_DECIMAL = 3;
|
|
private static final int NUMBER_CHAR_DIGIT = 2;
|
|
private static final int NUMBER_CHAR_EXP_DIGIT = 7;
|
|
private static final int NUMBER_CHAR_EXP_E = 5;
|
|
private static final int NUMBER_CHAR_EXP_SIGN = 6;
|
|
private static final int NUMBER_CHAR_FRACTION_DIGIT = 4;
|
|
private static final int NUMBER_CHAR_NONE = 0;
|
|
private static final int NUMBER_CHAR_SIGN = 1;
|
|
private static final int PEEKED_BEGIN_ARRAY = 3;
|
|
private static final int PEEKED_BEGIN_OBJECT = 1;
|
|
private static final int PEEKED_BUFFERED = 11;
|
|
private static final int PEEKED_DOUBLE_QUOTED = 9;
|
|
private static final int PEEKED_DOUBLE_QUOTED_NAME = 13;
|
|
private static final int PEEKED_END_ARRAY = 4;
|
|
private static final int PEEKED_END_OBJECT = 2;
|
|
private static final int PEEKED_EOF = 17;
|
|
private static final int PEEKED_FALSE = 6;
|
|
private static final int PEEKED_LONG = 15;
|
|
private static final int PEEKED_NONE = 0;
|
|
private static final int PEEKED_NULL = 7;
|
|
private static final int PEEKED_NUMBER = 16;
|
|
private static final int PEEKED_SINGLE_QUOTED = 8;
|
|
private static final int PEEKED_SINGLE_QUOTED_NAME = 12;
|
|
private static final int PEEKED_TRUE = 5;
|
|
private static final int PEEKED_UNQUOTED = 10;
|
|
private static final int PEEKED_UNQUOTED_NAME = 14;
|
|
private final Reader in;
|
|
private int[] pathIndices;
|
|
private String[] pathNames;
|
|
private long peekedLong;
|
|
private int peekedNumberLength;
|
|
private String peekedString;
|
|
private int[] stack;
|
|
private boolean lenient = false;
|
|
private final char[] buffer = new char[1024];
|
|
private int pos = 0;
|
|
private int limit = 0;
|
|
private int lineNumber = 0;
|
|
private int lineStart = 0;
|
|
int peeked = 0;
|
|
private int stackSize = 1;
|
|
|
|
public final boolean isLenient() {
|
|
return this.lenient;
|
|
}
|
|
|
|
public final void setLenient(boolean z) {
|
|
this.lenient = z;
|
|
}
|
|
|
|
public JsonReader(Reader reader) {
|
|
int[] iArr = new int[32];
|
|
this.stack = iArr;
|
|
iArr[0] = 6;
|
|
this.pathNames = new String[32];
|
|
this.pathIndices = new int[32];
|
|
if (reader == null) {
|
|
throw new NullPointerException("in == null");
|
|
}
|
|
this.in = reader;
|
|
}
|
|
|
|
public void beginArray() throws IOException {
|
|
int i = this.peeked;
|
|
if (i == 0) {
|
|
i = doPeek();
|
|
}
|
|
if (i == 3) {
|
|
push(1);
|
|
this.pathIndices[this.stackSize - 1] = 0;
|
|
this.peeked = 0;
|
|
return;
|
|
}
|
|
throw new IllegalStateException("Expected BEGIN_ARRAY but was " + peek() + locationString());
|
|
}
|
|
|
|
public void endArray() throws IOException {
|
|
int i = this.peeked;
|
|
if (i == 0) {
|
|
i = doPeek();
|
|
}
|
|
if (i == 4) {
|
|
int i2 = this.stackSize;
|
|
this.stackSize = i2 - 1;
|
|
int[] iArr = this.pathIndices;
|
|
int i3 = i2 - 2;
|
|
iArr[i3] = iArr[i3] + 1;
|
|
this.peeked = 0;
|
|
return;
|
|
}
|
|
throw new IllegalStateException("Expected END_ARRAY but was " + peek() + locationString());
|
|
}
|
|
|
|
public void beginObject() throws IOException {
|
|
int i = this.peeked;
|
|
if (i == 0) {
|
|
i = doPeek();
|
|
}
|
|
if (i == 1) {
|
|
push(3);
|
|
this.peeked = 0;
|
|
return;
|
|
}
|
|
throw new IllegalStateException("Expected BEGIN_OBJECT but was " + peek() + locationString());
|
|
}
|
|
|
|
public void endObject() throws IOException {
|
|
int i = this.peeked;
|
|
if (i == 0) {
|
|
i = doPeek();
|
|
}
|
|
if (i == 2) {
|
|
int i2 = this.stackSize;
|
|
int i3 = i2 - 1;
|
|
this.stackSize = i3;
|
|
this.pathNames[i3] = null;
|
|
int[] iArr = this.pathIndices;
|
|
int i4 = i2 - 2;
|
|
iArr[i4] = iArr[i4] + 1;
|
|
this.peeked = 0;
|
|
return;
|
|
}
|
|
throw new IllegalStateException("Expected END_OBJECT but was " + peek() + locationString());
|
|
}
|
|
|
|
public boolean hasNext() throws IOException {
|
|
int i = this.peeked;
|
|
if (i == 0) {
|
|
i = doPeek();
|
|
}
|
|
return (i == 2 || i == 4) ? false : true;
|
|
}
|
|
|
|
public JsonToken peek() throws IOException {
|
|
int i = this.peeked;
|
|
if (i == 0) {
|
|
i = doPeek();
|
|
}
|
|
switch (i) {
|
|
case 1:
|
|
return JsonToken.BEGIN_OBJECT;
|
|
case 2:
|
|
return JsonToken.END_OBJECT;
|
|
case 3:
|
|
return JsonToken.BEGIN_ARRAY;
|
|
case 4:
|
|
return JsonToken.END_ARRAY;
|
|
case 5:
|
|
case 6:
|
|
return JsonToken.BOOLEAN;
|
|
case 7:
|
|
return JsonToken.NULL;
|
|
case 8:
|
|
case 9:
|
|
case 10:
|
|
case 11:
|
|
return JsonToken.STRING;
|
|
case 12:
|
|
case 13:
|
|
case 14:
|
|
return JsonToken.NAME;
|
|
case 15:
|
|
case 16:
|
|
return JsonToken.NUMBER;
|
|
case 17:
|
|
return JsonToken.END_DOCUMENT;
|
|
default:
|
|
throw new AssertionError();
|
|
}
|
|
}
|
|
|
|
int doPeek() throws IOException {
|
|
int nextNonWhitespace;
|
|
int[] iArr = this.stack;
|
|
int i = this.stackSize;
|
|
int i2 = iArr[i - 1];
|
|
if (i2 == 1) {
|
|
iArr[i - 1] = 2;
|
|
} else if (i2 == 2) {
|
|
int nextNonWhitespace2 = nextNonWhitespace(true);
|
|
if (nextNonWhitespace2 != 44) {
|
|
if (nextNonWhitespace2 != 59) {
|
|
if (nextNonWhitespace2 != 93) {
|
|
throw syntaxError("Unterminated array");
|
|
}
|
|
this.peeked = 4;
|
|
return 4;
|
|
}
|
|
checkLenient();
|
|
}
|
|
} else {
|
|
if (i2 == 3 || i2 == 5) {
|
|
iArr[i - 1] = 4;
|
|
if (i2 == 5 && (nextNonWhitespace = nextNonWhitespace(true)) != 44) {
|
|
if (nextNonWhitespace != 59) {
|
|
if (nextNonWhitespace != 125) {
|
|
throw syntaxError("Unterminated object");
|
|
}
|
|
this.peeked = 2;
|
|
return 2;
|
|
}
|
|
checkLenient();
|
|
}
|
|
int nextNonWhitespace3 = nextNonWhitespace(true);
|
|
if (nextNonWhitespace3 == 34) {
|
|
this.peeked = 13;
|
|
return 13;
|
|
}
|
|
if (nextNonWhitespace3 == 39) {
|
|
checkLenient();
|
|
this.peeked = 12;
|
|
return 12;
|
|
}
|
|
if (nextNonWhitespace3 == 125) {
|
|
if (i2 == 5) {
|
|
throw syntaxError("Expected name");
|
|
}
|
|
this.peeked = 2;
|
|
return 2;
|
|
}
|
|
checkLenient();
|
|
this.pos--;
|
|
if (!isLiteral((char) nextNonWhitespace3)) {
|
|
throw syntaxError("Expected name");
|
|
}
|
|
this.peeked = 14;
|
|
return 14;
|
|
}
|
|
if (i2 == 4) {
|
|
iArr[i - 1] = 5;
|
|
int nextNonWhitespace4 = nextNonWhitespace(true);
|
|
if (nextNonWhitespace4 != 58) {
|
|
if (nextNonWhitespace4 == 61) {
|
|
checkLenient();
|
|
if (this.pos < this.limit || fillBuffer(1)) {
|
|
char[] cArr = this.buffer;
|
|
int i3 = this.pos;
|
|
if (cArr[i3] == '>') {
|
|
this.pos = i3 + 1;
|
|
}
|
|
}
|
|
} else {
|
|
throw syntaxError("Expected ':'");
|
|
}
|
|
}
|
|
} else if (i2 == 6) {
|
|
if (this.lenient) {
|
|
consumeNonExecutePrefix();
|
|
}
|
|
this.stack[this.stackSize - 1] = 7;
|
|
} else if (i2 == 7) {
|
|
if (nextNonWhitespace(false) == -1) {
|
|
this.peeked = 17;
|
|
return 17;
|
|
}
|
|
checkLenient();
|
|
this.pos--;
|
|
} else if (i2 == 8) {
|
|
throw new IllegalStateException("JsonReader is closed");
|
|
}
|
|
}
|
|
int nextNonWhitespace5 = nextNonWhitespace(true);
|
|
if (nextNonWhitespace5 == 34) {
|
|
this.peeked = 9;
|
|
return 9;
|
|
}
|
|
if (nextNonWhitespace5 == 39) {
|
|
checkLenient();
|
|
this.peeked = 8;
|
|
return 8;
|
|
}
|
|
if (nextNonWhitespace5 != 44 && nextNonWhitespace5 != 59) {
|
|
if (nextNonWhitespace5 == 91) {
|
|
this.peeked = 3;
|
|
return 3;
|
|
}
|
|
if (nextNonWhitespace5 != 93) {
|
|
if (nextNonWhitespace5 == 123) {
|
|
this.peeked = 1;
|
|
return 1;
|
|
}
|
|
this.pos--;
|
|
int peekKeyword = peekKeyword();
|
|
if (peekKeyword != 0) {
|
|
return peekKeyword;
|
|
}
|
|
int peekNumber = peekNumber();
|
|
if (peekNumber != 0) {
|
|
return peekNumber;
|
|
}
|
|
if (!isLiteral(this.buffer[this.pos])) {
|
|
throw syntaxError("Expected value");
|
|
}
|
|
checkLenient();
|
|
this.peeked = 10;
|
|
return 10;
|
|
}
|
|
if (i2 == 1) {
|
|
this.peeked = 4;
|
|
return 4;
|
|
}
|
|
}
|
|
if (i2 == 1 || i2 == 2) {
|
|
checkLenient();
|
|
this.pos--;
|
|
this.peeked = 7;
|
|
return 7;
|
|
}
|
|
throw syntaxError("Unexpected value");
|
|
}
|
|
|
|
private int peekKeyword() throws IOException {
|
|
String str;
|
|
String str2;
|
|
int i;
|
|
char c = this.buffer[this.pos];
|
|
if (c == 't' || c == 'T') {
|
|
str = "true";
|
|
str2 = "TRUE";
|
|
i = 5;
|
|
} else if (c == 'f' || c == 'F') {
|
|
str = "false";
|
|
str2 = "FALSE";
|
|
i = 6;
|
|
} else {
|
|
if (c != 'n' && c != 'N') {
|
|
return 0;
|
|
}
|
|
str = "null";
|
|
str2 = "NULL";
|
|
i = 7;
|
|
}
|
|
int length = str.length();
|
|
for (int i2 = 1; i2 < length; i2++) {
|
|
if (this.pos + i2 >= this.limit && !fillBuffer(i2 + 1)) {
|
|
return 0;
|
|
}
|
|
char c2 = this.buffer[this.pos + i2];
|
|
if (c2 != str.charAt(i2) && c2 != str2.charAt(i2)) {
|
|
return 0;
|
|
}
|
|
}
|
|
if ((this.pos + length < this.limit || fillBuffer(length + 1)) && isLiteral(this.buffer[this.pos + length])) {
|
|
return 0;
|
|
}
|
|
this.pos += length;
|
|
this.peeked = i;
|
|
return i;
|
|
}
|
|
|
|
/* JADX WARN: Code restructure failed: missing block: B:10:0x0093, code lost:
|
|
|
|
if (r9 != 2) goto L68;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:11:0x0095, code lost:
|
|
|
|
if (r10 == false) goto L68;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:13:0x009b, code lost:
|
|
|
|
if (r11 != Long.MIN_VALUE) goto L60;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:14:0x009d, code lost:
|
|
|
|
if (r13 == false) goto L68;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:16:0x00a3, code lost:
|
|
|
|
if (r11 != 0) goto L63;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:17:0x00a5, code lost:
|
|
|
|
if (r13 != false) goto L68;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:18:0x00a7, code lost:
|
|
|
|
if (r13 == false) goto L65;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:19:0x00aa, code lost:
|
|
|
|
r11 = -r11;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:20:0x00ab, code lost:
|
|
|
|
r18.peekedLong = r11;
|
|
r18.pos += r8;
|
|
r18.peeked = 15;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:21:0x00b6, code lost:
|
|
|
|
return 15;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:23:0x00b7, code lost:
|
|
|
|
if (r9 == 2) goto L76;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:25:0x00ba, code lost:
|
|
|
|
if (r9 == 4) goto L76;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:27:0x00bd, code lost:
|
|
|
|
if (r9 != 7) goto L74;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:28:0x00c0, code lost:
|
|
|
|
return 0;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:29:0x00c2, code lost:
|
|
|
|
r18.peekedNumberLength = r8;
|
|
r18.peeked = 16;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:30:0x00c8, code lost:
|
|
|
|
return 16;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:75:0x0091, code lost:
|
|
|
|
if (isLiteral(r14) != false) goto L78;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:76:0x00c9, code lost:
|
|
|
|
return 0;
|
|
*/
|
|
/*
|
|
Code decompiled incorrectly, please refer to instructions dump.
|
|
To view partially-correct add '--show-bad-code' argument
|
|
*/
|
|
private int peekNumber() throws java.io.IOException {
|
|
/*
|
|
Method dump skipped, instructions count: 247
|
|
To view this dump add '--comments-level debug' option
|
|
*/
|
|
throw new UnsupportedOperationException("Method not decompiled: com.google.gson.stream.JsonReader.peekNumber():int");
|
|
}
|
|
|
|
private boolean isLiteral(char c) throws IOException {
|
|
if (c == '\t' || c == '\n' || c == '\f' || c == '\r' || c == ' ') {
|
|
return false;
|
|
}
|
|
if (c != '#') {
|
|
if (c == ',') {
|
|
return false;
|
|
}
|
|
if (c != '/' && c != '=') {
|
|
if (c == '{' || c == '}' || c == ':') {
|
|
return false;
|
|
}
|
|
if (c != ';') {
|
|
switch (c) {
|
|
case '[':
|
|
case ']':
|
|
return false;
|
|
case '\\':
|
|
break;
|
|
default:
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
checkLenient();
|
|
return false;
|
|
}
|
|
|
|
public String nextName() throws IOException {
|
|
String nextQuotedValue;
|
|
int i = this.peeked;
|
|
if (i == 0) {
|
|
i = doPeek();
|
|
}
|
|
if (i == 14) {
|
|
nextQuotedValue = nextUnquotedValue();
|
|
} else if (i == 12) {
|
|
nextQuotedValue = nextQuotedValue('\'');
|
|
} else if (i == 13) {
|
|
nextQuotedValue = nextQuotedValue(Typography.quote);
|
|
} else {
|
|
throw new IllegalStateException("Expected a name but was " + peek() + locationString());
|
|
}
|
|
this.peeked = 0;
|
|
this.pathNames[this.stackSize - 1] = nextQuotedValue;
|
|
return nextQuotedValue;
|
|
}
|
|
|
|
public String nextString() throws IOException {
|
|
String str;
|
|
int i = this.peeked;
|
|
if (i == 0) {
|
|
i = doPeek();
|
|
}
|
|
if (i == 10) {
|
|
str = nextUnquotedValue();
|
|
} else if (i == 8) {
|
|
str = nextQuotedValue('\'');
|
|
} else if (i == 9) {
|
|
str = nextQuotedValue(Typography.quote);
|
|
} else if (i == 11) {
|
|
str = this.peekedString;
|
|
this.peekedString = null;
|
|
} else if (i == 15) {
|
|
str = Long.toString(this.peekedLong);
|
|
} else if (i == 16) {
|
|
str = new String(this.buffer, this.pos, this.peekedNumberLength);
|
|
this.pos += this.peekedNumberLength;
|
|
} else {
|
|
throw new IllegalStateException("Expected a string but was " + peek() + locationString());
|
|
}
|
|
this.peeked = 0;
|
|
int[] iArr = this.pathIndices;
|
|
int i2 = this.stackSize - 1;
|
|
iArr[i2] = iArr[i2] + 1;
|
|
return str;
|
|
}
|
|
|
|
public boolean nextBoolean() throws IOException {
|
|
int i = this.peeked;
|
|
if (i == 0) {
|
|
i = doPeek();
|
|
}
|
|
if (i == 5) {
|
|
this.peeked = 0;
|
|
int[] iArr = this.pathIndices;
|
|
int i2 = this.stackSize - 1;
|
|
iArr[i2] = iArr[i2] + 1;
|
|
return true;
|
|
}
|
|
if (i == 6) {
|
|
this.peeked = 0;
|
|
int[] iArr2 = this.pathIndices;
|
|
int i3 = this.stackSize - 1;
|
|
iArr2[i3] = iArr2[i3] + 1;
|
|
return false;
|
|
}
|
|
throw new IllegalStateException("Expected a boolean but was " + peek() + locationString());
|
|
}
|
|
|
|
public void nextNull() throws IOException {
|
|
int i = this.peeked;
|
|
if (i == 0) {
|
|
i = doPeek();
|
|
}
|
|
if (i == 7) {
|
|
this.peeked = 0;
|
|
int[] iArr = this.pathIndices;
|
|
int i2 = this.stackSize - 1;
|
|
iArr[i2] = iArr[i2] + 1;
|
|
return;
|
|
}
|
|
throw new IllegalStateException("Expected null but was " + peek() + locationString());
|
|
}
|
|
|
|
public double nextDouble() throws IOException {
|
|
int i = this.peeked;
|
|
if (i == 0) {
|
|
i = doPeek();
|
|
}
|
|
if (i == 15) {
|
|
this.peeked = 0;
|
|
int[] iArr = this.pathIndices;
|
|
int i2 = this.stackSize - 1;
|
|
iArr[i2] = iArr[i2] + 1;
|
|
return this.peekedLong;
|
|
}
|
|
if (i == 16) {
|
|
this.peekedString = new String(this.buffer, this.pos, this.peekedNumberLength);
|
|
this.pos += this.peekedNumberLength;
|
|
} else if (i == 8 || i == 9) {
|
|
this.peekedString = nextQuotedValue(i == 8 ? '\'' : Typography.quote);
|
|
} else if (i == 10) {
|
|
this.peekedString = nextUnquotedValue();
|
|
} else if (i != 11) {
|
|
throw new IllegalStateException("Expected a double but was " + peek() + locationString());
|
|
}
|
|
this.peeked = 11;
|
|
double parseDouble = Double.parseDouble(this.peekedString);
|
|
if (!this.lenient && (Double.isNaN(parseDouble) || Double.isInfinite(parseDouble))) {
|
|
throw new MalformedJsonException("JSON forbids NaN and infinities: " + parseDouble + locationString());
|
|
}
|
|
this.peekedString = null;
|
|
this.peeked = 0;
|
|
int[] iArr2 = this.pathIndices;
|
|
int i3 = this.stackSize - 1;
|
|
iArr2[i3] = iArr2[i3] + 1;
|
|
return parseDouble;
|
|
}
|
|
|
|
public long nextLong() throws IOException {
|
|
int i = this.peeked;
|
|
if (i == 0) {
|
|
i = doPeek();
|
|
}
|
|
if (i == 15) {
|
|
this.peeked = 0;
|
|
int[] iArr = this.pathIndices;
|
|
int i2 = this.stackSize - 1;
|
|
iArr[i2] = iArr[i2] + 1;
|
|
return this.peekedLong;
|
|
}
|
|
if (i == 16) {
|
|
this.peekedString = new String(this.buffer, this.pos, this.peekedNumberLength);
|
|
this.pos += this.peekedNumberLength;
|
|
} else if (i == 8 || i == 9 || i == 10) {
|
|
if (i == 10) {
|
|
this.peekedString = nextUnquotedValue();
|
|
} else {
|
|
this.peekedString = nextQuotedValue(i == 8 ? '\'' : Typography.quote);
|
|
}
|
|
try {
|
|
long parseLong = Long.parseLong(this.peekedString);
|
|
this.peeked = 0;
|
|
int[] iArr2 = this.pathIndices;
|
|
int i3 = this.stackSize - 1;
|
|
iArr2[i3] = iArr2[i3] + 1;
|
|
return parseLong;
|
|
} catch (NumberFormatException unused) {
|
|
}
|
|
} else {
|
|
throw new IllegalStateException("Expected a long but was " + peek() + locationString());
|
|
}
|
|
this.peeked = 11;
|
|
double parseDouble = Double.parseDouble(this.peekedString);
|
|
long j = (long) parseDouble;
|
|
if (j != parseDouble) {
|
|
throw new NumberFormatException("Expected a long but was " + this.peekedString + locationString());
|
|
}
|
|
this.peekedString = null;
|
|
this.peeked = 0;
|
|
int[] iArr3 = this.pathIndices;
|
|
int i4 = this.stackSize - 1;
|
|
iArr3[i4] = iArr3[i4] + 1;
|
|
return j;
|
|
}
|
|
|
|
/* JADX WARN: Code restructure failed: missing block: B:32:0x005a, code lost:
|
|
|
|
if (r1 != null) goto L27;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:33:0x005c, code lost:
|
|
|
|
r1 = new java.lang.StringBuilder(java.lang.Math.max((r2 - r3) * 2, 16));
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:34:0x006a, code lost:
|
|
|
|
r1.append(r0, r3, r2 - r3);
|
|
r9.pos = r2;
|
|
*/
|
|
/*
|
|
Code decompiled incorrectly, please refer to instructions dump.
|
|
To view partially-correct add '--show-bad-code' argument
|
|
*/
|
|
private java.lang.String nextQuotedValue(char r10) throws java.io.IOException {
|
|
/*
|
|
r9 = this;
|
|
char[] r0 = r9.buffer
|
|
r1 = 0
|
|
L3:
|
|
int r2 = r9.pos
|
|
int r3 = r9.limit
|
|
L7:
|
|
r4 = r3
|
|
r3 = r2
|
|
L9:
|
|
r5 = 16
|
|
r6 = 1
|
|
if (r2 >= r4) goto L5a
|
|
int r7 = r2 + 1
|
|
char r2 = r0[r2]
|
|
if (r2 != r10) goto L28
|
|
r9.pos = r7
|
|
int r7 = r7 - r3
|
|
int r7 = r7 - r6
|
|
if (r1 != 0) goto L20
|
|
java.lang.String r9 = new java.lang.String
|
|
r9.<init>(r0, r3, r7)
|
|
return r9
|
|
L20:
|
|
r1.append(r0, r3, r7)
|
|
java.lang.String r9 = r1.toString()
|
|
return r9
|
|
L28:
|
|
r8 = 92
|
|
if (r2 != r8) goto L4d
|
|
r9.pos = r7
|
|
int r7 = r7 - r3
|
|
int r2 = r7 + (-1)
|
|
if (r1 != 0) goto L3e
|
|
int r7 = r7 * 2
|
|
java.lang.StringBuilder r1 = new java.lang.StringBuilder
|
|
int r4 = java.lang.Math.max(r7, r5)
|
|
r1.<init>(r4)
|
|
L3e:
|
|
r1.append(r0, r3, r2)
|
|
char r2 = r9.readEscapeCharacter()
|
|
r1.append(r2)
|
|
int r2 = r9.pos
|
|
int r3 = r9.limit
|
|
goto L7
|
|
L4d:
|
|
r5 = 10
|
|
if (r2 != r5) goto L58
|
|
int r2 = r9.lineNumber
|
|
int r2 = r2 + r6
|
|
r9.lineNumber = r2
|
|
r9.lineStart = r7
|
|
L58:
|
|
r2 = r7
|
|
goto L9
|
|
L5a:
|
|
if (r1 != 0) goto L6a
|
|
int r1 = r2 - r3
|
|
int r1 = r1 * 2
|
|
java.lang.StringBuilder r4 = new java.lang.StringBuilder
|
|
int r1 = java.lang.Math.max(r1, r5)
|
|
r4.<init>(r1)
|
|
r1 = r4
|
|
L6a:
|
|
int r4 = r2 - r3
|
|
r1.append(r0, r3, r4)
|
|
r9.pos = r2
|
|
boolean r2 = r9.fillBuffer(r6)
|
|
if (r2 == 0) goto L78
|
|
goto L3
|
|
L78:
|
|
java.lang.String r10 = "Unterminated string"
|
|
java.io.IOException r9 = r9.syntaxError(r10)
|
|
throw r9
|
|
*/
|
|
throw new UnsupportedOperationException("Method not decompiled: com.google.gson.stream.JsonReader.nextQuotedValue(char):java.lang.String");
|
|
}
|
|
|
|
/* JADX WARN: Code restructure failed: missing block: B:58:0x004a, code lost:
|
|
|
|
checkLenient();
|
|
*/
|
|
/* JADX WARN: Failed to find 'out' block for switch in B:54:0x0044. Please report as an issue. */
|
|
/* JADX WARN: Removed duplicated region for block: B:13:0x0080 */
|
|
/* JADX WARN: Removed duplicated region for block: B:17:0x008a */
|
|
/*
|
|
Code decompiled incorrectly, please refer to instructions dump.
|
|
To view partially-correct add '--show-bad-code' argument
|
|
*/
|
|
private java.lang.String nextUnquotedValue() throws java.io.IOException {
|
|
/*
|
|
r6 = this;
|
|
r0 = 0
|
|
r1 = 0
|
|
L2:
|
|
r2 = r1
|
|
L3:
|
|
int r3 = r6.pos
|
|
int r4 = r3 + r2
|
|
int r5 = r6.limit
|
|
if (r4 >= r5) goto L4e
|
|
char[] r4 = r6.buffer
|
|
int r3 = r3 + r2
|
|
char r3 = r4[r3]
|
|
r4 = 9
|
|
if (r3 == r4) goto L5c
|
|
r4 = 10
|
|
if (r3 == r4) goto L5c
|
|
r4 = 12
|
|
if (r3 == r4) goto L5c
|
|
r4 = 13
|
|
if (r3 == r4) goto L5c
|
|
r4 = 32
|
|
if (r3 == r4) goto L5c
|
|
r4 = 35
|
|
if (r3 == r4) goto L4a
|
|
r4 = 44
|
|
if (r3 == r4) goto L5c
|
|
r4 = 47
|
|
if (r3 == r4) goto L4a
|
|
r4 = 61
|
|
if (r3 == r4) goto L4a
|
|
r4 = 123(0x7b, float:1.72E-43)
|
|
if (r3 == r4) goto L5c
|
|
r4 = 125(0x7d, float:1.75E-43)
|
|
if (r3 == r4) goto L5c
|
|
r4 = 58
|
|
if (r3 == r4) goto L5c
|
|
r4 = 59
|
|
if (r3 == r4) goto L4a
|
|
switch(r3) {
|
|
case 91: goto L5c;
|
|
case 92: goto L4a;
|
|
case 93: goto L5c;
|
|
default: goto L47;
|
|
}
|
|
L47:
|
|
int r2 = r2 + 1
|
|
goto L3
|
|
L4a:
|
|
r6.checkLenient()
|
|
goto L5c
|
|
L4e:
|
|
char[] r3 = r6.buffer
|
|
int r3 = r3.length
|
|
if (r2 >= r3) goto L5e
|
|
int r3 = r2 + 1
|
|
boolean r3 = r6.fillBuffer(r3)
|
|
if (r3 == 0) goto L5c
|
|
goto L3
|
|
L5c:
|
|
r1 = r2
|
|
goto L7e
|
|
L5e:
|
|
if (r0 != 0) goto L6b
|
|
java.lang.StringBuilder r0 = new java.lang.StringBuilder
|
|
r3 = 16
|
|
int r3 = java.lang.Math.max(r2, r3)
|
|
r0.<init>(r3)
|
|
L6b:
|
|
char[] r3 = r6.buffer
|
|
int r4 = r6.pos
|
|
r0.append(r3, r4, r2)
|
|
int r3 = r6.pos
|
|
int r3 = r3 + r2
|
|
r6.pos = r3
|
|
r2 = 1
|
|
boolean r2 = r6.fillBuffer(r2)
|
|
if (r2 != 0) goto L2
|
|
L7e:
|
|
if (r0 != 0) goto L8a
|
|
java.lang.String r0 = new java.lang.String
|
|
char[] r2 = r6.buffer
|
|
int r3 = r6.pos
|
|
r0.<init>(r2, r3, r1)
|
|
goto L96
|
|
L8a:
|
|
char[] r2 = r6.buffer
|
|
int r3 = r6.pos
|
|
java.lang.StringBuilder r0 = r0.append(r2, r3, r1)
|
|
java.lang.String r0 = r0.toString()
|
|
L96:
|
|
int r2 = r6.pos
|
|
int r2 = r2 + r1
|
|
r6.pos = r2
|
|
return r0
|
|
*/
|
|
throw new UnsupportedOperationException("Method not decompiled: com.google.gson.stream.JsonReader.nextUnquotedValue():java.lang.String");
|
|
}
|
|
|
|
private void skipQuotedValue(char c) throws IOException {
|
|
char[] cArr = this.buffer;
|
|
do {
|
|
int i = this.pos;
|
|
int i2 = this.limit;
|
|
while (i < i2) {
|
|
int i3 = i + 1;
|
|
char c2 = cArr[i];
|
|
if (c2 == c) {
|
|
this.pos = i3;
|
|
return;
|
|
}
|
|
if (c2 == '\\') {
|
|
this.pos = i3;
|
|
readEscapeCharacter();
|
|
i = this.pos;
|
|
i2 = this.limit;
|
|
} else {
|
|
if (c2 == '\n') {
|
|
this.lineNumber++;
|
|
this.lineStart = i3;
|
|
}
|
|
i = i3;
|
|
}
|
|
}
|
|
this.pos = i;
|
|
} while (fillBuffer(1));
|
|
throw syntaxError("Unterminated string");
|
|
}
|
|
|
|
/* JADX ERROR: JadxRuntimeException in pass: RegionMakerVisitor
|
|
jadx.core.utils.exceptions.JadxRuntimeException: Failed to find switch 'out' block (already processed)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.calcSwitchOut(RegionMaker.java:923)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.processSwitch(RegionMaker.java:797)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.traverse(RegionMaker.java:157)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.makeRegion(RegionMaker.java:91)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.processIf(RegionMaker.java:735)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.traverse(RegionMaker.java:152)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.makeRegion(RegionMaker.java:91)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.processIf(RegionMaker.java:735)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.traverse(RegionMaker.java:152)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.makeRegion(RegionMaker.java:91)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.processIf(RegionMaker.java:735)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.traverse(RegionMaker.java:152)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.makeRegion(RegionMaker.java:91)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.processIf(RegionMaker.java:740)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.traverse(RegionMaker.java:152)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.makeRegion(RegionMaker.java:91)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.processIf(RegionMaker.java:740)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.traverse(RegionMaker.java:152)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.makeRegion(RegionMaker.java:91)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.processIf(RegionMaker.java:735)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.traverse(RegionMaker.java:152)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.makeRegion(RegionMaker.java:91)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.processIf(RegionMaker.java:735)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.traverse(RegionMaker.java:152)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.makeRegion(RegionMaker.java:91)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.makeEndlessLoop(RegionMaker.java:411)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.processLoop(RegionMaker.java:201)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.traverse(RegionMaker.java:135)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.makeRegion(RegionMaker.java:91)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.processLoop(RegionMaker.java:242)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.traverse(RegionMaker.java:135)
|
|
at jadx.core.dex.visitors.regions.RegionMaker.makeRegion(RegionMaker.java:91)
|
|
at jadx.core.dex.visitors.regions.RegionMakerVisitor.visit(RegionMakerVisitor.java:52)
|
|
*/
|
|
private void skipUnquotedValue() throws java.io.IOException {
|
|
/*
|
|
r4 = this;
|
|
L0:
|
|
r0 = 0
|
|
L1:
|
|
int r1 = r4.pos
|
|
int r2 = r1 + r0
|
|
int r3 = r4.limit
|
|
if (r2 >= r3) goto L51
|
|
char[] r2 = r4.buffer
|
|
int r1 = r1 + r0
|
|
char r1 = r2[r1]
|
|
r2 = 9
|
|
if (r1 == r2) goto L4b
|
|
r2 = 10
|
|
if (r1 == r2) goto L4b
|
|
r2 = 12
|
|
if (r1 == r2) goto L4b
|
|
r2 = 13
|
|
if (r1 == r2) goto L4b
|
|
r2 = 32
|
|
if (r1 == r2) goto L4b
|
|
r2 = 35
|
|
if (r1 == r2) goto L48
|
|
r2 = 44
|
|
if (r1 == r2) goto L4b
|
|
r2 = 47
|
|
if (r1 == r2) goto L48
|
|
r2 = 61
|
|
if (r1 == r2) goto L48
|
|
r2 = 123(0x7b, float:1.72E-43)
|
|
if (r1 == r2) goto L4b
|
|
r2 = 125(0x7d, float:1.75E-43)
|
|
if (r1 == r2) goto L4b
|
|
r2 = 58
|
|
if (r1 == r2) goto L4b
|
|
r2 = 59
|
|
if (r1 == r2) goto L48
|
|
switch(r1) {
|
|
case 91: goto L4b;
|
|
case 92: goto L48;
|
|
case 93: goto L4b;
|
|
default: goto L45;
|
|
}
|
|
L45:
|
|
int r0 = r0 + 1
|
|
goto L1
|
|
L48:
|
|
r4.checkLenient()
|
|
L4b:
|
|
int r1 = r4.pos
|
|
int r1 = r1 + r0
|
|
r4.pos = r1
|
|
return
|
|
L51:
|
|
int r1 = r1 + r0
|
|
r4.pos = r1
|
|
r0 = 1
|
|
boolean r0 = r4.fillBuffer(r0)
|
|
if (r0 != 0) goto L0
|
|
return
|
|
*/
|
|
throw new UnsupportedOperationException("Method not decompiled: com.google.gson.stream.JsonReader.skipUnquotedValue():void");
|
|
}
|
|
|
|
public int nextInt() throws IOException {
|
|
int i = this.peeked;
|
|
if (i == 0) {
|
|
i = doPeek();
|
|
}
|
|
if (i == 15) {
|
|
long j = this.peekedLong;
|
|
int i2 = (int) j;
|
|
if (j != i2) {
|
|
throw new NumberFormatException("Expected an int but was " + this.peekedLong + locationString());
|
|
}
|
|
this.peeked = 0;
|
|
int[] iArr = this.pathIndices;
|
|
int i3 = this.stackSize - 1;
|
|
iArr[i3] = iArr[i3] + 1;
|
|
return i2;
|
|
}
|
|
if (i == 16) {
|
|
this.peekedString = new String(this.buffer, this.pos, this.peekedNumberLength);
|
|
this.pos += this.peekedNumberLength;
|
|
} else if (i == 8 || i == 9 || i == 10) {
|
|
if (i == 10) {
|
|
this.peekedString = nextUnquotedValue();
|
|
} else {
|
|
this.peekedString = nextQuotedValue(i == 8 ? '\'' : Typography.quote);
|
|
}
|
|
try {
|
|
int parseInt = Integer.parseInt(this.peekedString);
|
|
this.peeked = 0;
|
|
int[] iArr2 = this.pathIndices;
|
|
int i4 = this.stackSize - 1;
|
|
iArr2[i4] = iArr2[i4] + 1;
|
|
return parseInt;
|
|
} catch (NumberFormatException unused) {
|
|
}
|
|
} else {
|
|
throw new IllegalStateException("Expected an int but was " + peek() + locationString());
|
|
}
|
|
this.peeked = 11;
|
|
double parseDouble = Double.parseDouble(this.peekedString);
|
|
int i5 = (int) parseDouble;
|
|
if (i5 != parseDouble) {
|
|
throw new NumberFormatException("Expected an int but was " + this.peekedString + locationString());
|
|
}
|
|
this.peekedString = null;
|
|
this.peeked = 0;
|
|
int[] iArr3 = this.pathIndices;
|
|
int i6 = this.stackSize - 1;
|
|
iArr3[i6] = iArr3[i6] + 1;
|
|
return i5;
|
|
}
|
|
|
|
@Override // java.io.Closeable, java.lang.AutoCloseable
|
|
public void close() throws IOException {
|
|
this.peeked = 0;
|
|
this.stack[0] = 8;
|
|
this.stackSize = 1;
|
|
this.in.close();
|
|
}
|
|
|
|
public void skipValue() throws IOException {
|
|
int i = 0;
|
|
do {
|
|
int i2 = this.peeked;
|
|
if (i2 == 0) {
|
|
i2 = doPeek();
|
|
}
|
|
if (i2 == 3) {
|
|
push(1);
|
|
} else if (i2 == 1) {
|
|
push(3);
|
|
} else {
|
|
if (i2 == 4) {
|
|
this.stackSize--;
|
|
} else if (i2 == 2) {
|
|
this.stackSize--;
|
|
} else {
|
|
if (i2 == 14 || i2 == 10) {
|
|
skipUnquotedValue();
|
|
} else if (i2 == 8 || i2 == 12) {
|
|
skipQuotedValue('\'');
|
|
} else if (i2 == 9 || i2 == 13) {
|
|
skipQuotedValue(Typography.quote);
|
|
} else if (i2 == 16) {
|
|
this.pos += this.peekedNumberLength;
|
|
}
|
|
this.peeked = 0;
|
|
}
|
|
i--;
|
|
this.peeked = 0;
|
|
}
|
|
i++;
|
|
this.peeked = 0;
|
|
} while (i != 0);
|
|
int[] iArr = this.pathIndices;
|
|
int i3 = this.stackSize;
|
|
int i4 = i3 - 1;
|
|
iArr[i4] = iArr[i4] + 1;
|
|
this.pathNames[i3 - 1] = "null";
|
|
}
|
|
|
|
private void push(int i) {
|
|
int i2 = this.stackSize;
|
|
int[] iArr = this.stack;
|
|
if (i2 == iArr.length) {
|
|
int i3 = i2 * 2;
|
|
this.stack = Arrays.copyOf(iArr, i3);
|
|
this.pathIndices = Arrays.copyOf(this.pathIndices, i3);
|
|
this.pathNames = (String[]) Arrays.copyOf(this.pathNames, i3);
|
|
}
|
|
int[] iArr2 = this.stack;
|
|
int i4 = this.stackSize;
|
|
this.stackSize = i4 + 1;
|
|
iArr2[i4] = i;
|
|
}
|
|
|
|
private boolean fillBuffer(int i) throws IOException {
|
|
int i2;
|
|
int i3;
|
|
char[] cArr = this.buffer;
|
|
int i4 = this.lineStart;
|
|
int i5 = this.pos;
|
|
this.lineStart = i4 - i5;
|
|
int i6 = this.limit;
|
|
if (i6 != i5) {
|
|
int i7 = i6 - i5;
|
|
this.limit = i7;
|
|
System.arraycopy(cArr, i5, cArr, 0, i7);
|
|
} else {
|
|
this.limit = 0;
|
|
}
|
|
this.pos = 0;
|
|
do {
|
|
Reader reader = this.in;
|
|
int i8 = this.limit;
|
|
int read = reader.read(cArr, i8, cArr.length - i8);
|
|
if (read == -1) {
|
|
return false;
|
|
}
|
|
i2 = this.limit + read;
|
|
this.limit = i2;
|
|
if (this.lineNumber == 0 && (i3 = this.lineStart) == 0 && i2 > 0 && cArr[0] == 65279) {
|
|
this.pos++;
|
|
this.lineStart = i3 + 1;
|
|
i++;
|
|
}
|
|
} while (i2 < i);
|
|
return true;
|
|
}
|
|
|
|
private int nextNonWhitespace(boolean z) throws IOException {
|
|
char[] cArr = this.buffer;
|
|
int i = this.pos;
|
|
int i2 = this.limit;
|
|
while (true) {
|
|
if (i == i2) {
|
|
this.pos = i;
|
|
if (!fillBuffer(1)) {
|
|
if (z) {
|
|
throw new EOFException("End of input" + locationString());
|
|
}
|
|
return -1;
|
|
}
|
|
i = this.pos;
|
|
i2 = this.limit;
|
|
}
|
|
int i3 = i + 1;
|
|
char c = cArr[i];
|
|
if (c == '\n') {
|
|
this.lineNumber++;
|
|
this.lineStart = i3;
|
|
} else if (c != ' ' && c != '\r' && c != '\t') {
|
|
if (c == '/') {
|
|
this.pos = i3;
|
|
if (i3 == i2) {
|
|
this.pos = i;
|
|
boolean fillBuffer = fillBuffer(2);
|
|
this.pos++;
|
|
if (!fillBuffer) {
|
|
return c;
|
|
}
|
|
}
|
|
checkLenient();
|
|
int i4 = this.pos;
|
|
char c2 = cArr[i4];
|
|
if (c2 == '*') {
|
|
this.pos = i4 + 1;
|
|
if (!skipTo("*/")) {
|
|
throw syntaxError("Unterminated comment");
|
|
}
|
|
i = this.pos + 2;
|
|
i2 = this.limit;
|
|
} else {
|
|
if (c2 != '/') {
|
|
return c;
|
|
}
|
|
this.pos = i4 + 1;
|
|
skipToEndOfLine();
|
|
i = this.pos;
|
|
i2 = this.limit;
|
|
}
|
|
} else {
|
|
if (c != '#') {
|
|
this.pos = i3;
|
|
return c;
|
|
}
|
|
this.pos = i3;
|
|
checkLenient();
|
|
skipToEndOfLine();
|
|
i = this.pos;
|
|
i2 = this.limit;
|
|
}
|
|
}
|
|
i = i3;
|
|
}
|
|
}
|
|
|
|
private void checkLenient() throws IOException {
|
|
if (!this.lenient) {
|
|
throw syntaxError("Use JsonReader.setLenient(true) to accept malformed JSON");
|
|
}
|
|
}
|
|
|
|
private void skipToEndOfLine() throws IOException {
|
|
char c;
|
|
do {
|
|
if (this.pos >= this.limit && !fillBuffer(1)) {
|
|
return;
|
|
}
|
|
char[] cArr = this.buffer;
|
|
int i = this.pos;
|
|
int i2 = i + 1;
|
|
this.pos = i2;
|
|
c = cArr[i];
|
|
if (c == '\n') {
|
|
this.lineNumber++;
|
|
this.lineStart = i2;
|
|
return;
|
|
}
|
|
} while (c != '\r');
|
|
}
|
|
|
|
private boolean skipTo(String str) throws IOException {
|
|
int length = str.length();
|
|
while (true) {
|
|
if (this.pos + length > this.limit && !fillBuffer(length)) {
|
|
return false;
|
|
}
|
|
char[] cArr = this.buffer;
|
|
int i = this.pos;
|
|
if (cArr[i] != '\n') {
|
|
for (int i2 = 0; i2 < length; i2++) {
|
|
if (this.buffer[this.pos + i2] != str.charAt(i2)) {
|
|
break;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
this.lineNumber++;
|
|
this.lineStart = i + 1;
|
|
this.pos++;
|
|
}
|
|
}
|
|
|
|
public String toString() {
|
|
return getClass().getSimpleName() + locationString();
|
|
}
|
|
|
|
String locationString() {
|
|
return " at line " + (this.lineNumber + 1) + " column " + ((this.pos - this.lineStart) + 1) + " path " + getPath();
|
|
}
|
|
|
|
public String getPath() {
|
|
StringBuilder sb = new StringBuilder("$");
|
|
int i = this.stackSize;
|
|
for (int i2 = 0; i2 < i; i2++) {
|
|
int i3 = this.stack[i2];
|
|
if (i3 == 1 || i3 == 2) {
|
|
sb.append('[').append(this.pathIndices[i2]).append(']');
|
|
} else if (i3 == 3 || i3 == 4 || i3 == 5) {
|
|
sb.append('.');
|
|
String str = this.pathNames[i2];
|
|
if (str != null) {
|
|
sb.append(str);
|
|
}
|
|
}
|
|
}
|
|
return sb.toString();
|
|
}
|
|
|
|
private char readEscapeCharacter() throws IOException {
|
|
int i;
|
|
if (this.pos == this.limit && !fillBuffer(1)) {
|
|
throw syntaxError("Unterminated escape sequence");
|
|
}
|
|
char[] cArr = this.buffer;
|
|
int i2 = this.pos;
|
|
int i3 = i2 + 1;
|
|
this.pos = i3;
|
|
char c = cArr[i2];
|
|
if (c == '\n') {
|
|
this.lineNumber++;
|
|
this.lineStart = i3;
|
|
} else if (c != '\"' && c != '\'' && c != '/' && c != '\\') {
|
|
if (c == 'b') {
|
|
return '\b';
|
|
}
|
|
if (c == 'f') {
|
|
return '\f';
|
|
}
|
|
if (c == 'n') {
|
|
return '\n';
|
|
}
|
|
if (c == 'r') {
|
|
return '\r';
|
|
}
|
|
if (c == 't') {
|
|
return '\t';
|
|
}
|
|
if (c == 'u') {
|
|
if (i2 + 5 > this.limit && !fillBuffer(4)) {
|
|
throw syntaxError("Unterminated escape sequence");
|
|
}
|
|
int i4 = this.pos;
|
|
int i5 = i4 + 4;
|
|
char c2 = 0;
|
|
while (i4 < i5) {
|
|
char c3 = this.buffer[i4];
|
|
char c4 = (char) (c2 << 4);
|
|
if (c3 >= '0' && c3 <= '9') {
|
|
i = c3 - '0';
|
|
} else if (c3 >= 'a' && c3 <= 'f') {
|
|
i = c3 - 'W';
|
|
} else {
|
|
if (c3 < 'A' || c3 > 'F') {
|
|
throw new NumberFormatException("\\u".concat(new String(this.buffer, this.pos, 4)));
|
|
}
|
|
i = c3 - '7';
|
|
}
|
|
c2 = (char) (c4 + i);
|
|
i4++;
|
|
}
|
|
this.pos += 4;
|
|
return c2;
|
|
}
|
|
throw syntaxError("Invalid escape sequence");
|
|
}
|
|
return c;
|
|
}
|
|
|
|
private IOException syntaxError(String str) throws IOException {
|
|
throw new MalformedJsonException(str + locationString());
|
|
}
|
|
|
|
private void consumeNonExecutePrefix() throws IOException {
|
|
nextNonWhitespace(true);
|
|
int i = this.pos;
|
|
int i2 = i - 1;
|
|
this.pos = i2;
|
|
if (i + 4 <= this.limit || fillBuffer(5)) {
|
|
char[] cArr = this.buffer;
|
|
if (cArr[i2] == ')' && cArr[i] == ']' && cArr[i + 1] == '}' && cArr[i + 2] == '\'' && cArr[i + 3] == '\n') {
|
|
this.pos += 5;
|
|
}
|
|
}
|
|
}
|
|
|
|
static {
|
|
JsonReaderInternalAccess.INSTANCE = new JsonReaderInternalAccess() { // from class: com.google.gson.stream.JsonReader.1
|
|
@Override // com.google.gson.internal.JsonReaderInternalAccess
|
|
public void promoteNameToValue(JsonReader jsonReader) throws IOException {
|
|
if (jsonReader instanceof JsonTreeReader) {
|
|
((JsonTreeReader) jsonReader).promoteNameToValue();
|
|
return;
|
|
}
|
|
int i = jsonReader.peeked;
|
|
if (i == 0) {
|
|
i = jsonReader.doPeek();
|
|
}
|
|
if (i == 13) {
|
|
jsonReader.peeked = 9;
|
|
} else if (i == 12) {
|
|
jsonReader.peeked = 8;
|
|
} else {
|
|
if (i == 14) {
|
|
jsonReader.peeked = 10;
|
|
return;
|
|
}
|
|
throw new IllegalStateException("Expected a name but was " + jsonReader.peek() + jsonReader.locationString());
|
|
}
|
|
}
|
|
};
|
|
}
|
|
}
|