diff options
author | Ben Gruver <bgruv@google.com> | 2019-04-12 11:30:40 -0700 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2019-04-12 11:30:40 -0700 |
commit | b45eb8f09a2f77cb8a522b04b481d69304c55117 (patch) | |
tree | 1cd9dc7a2d99f5a056ded95b4dceed7035c2571a | |
parent | 22f98607fe36e57e17485821998a70b5886c0de6 (diff) | |
parent | f74980150b06748e4658c089635875ef8a86d768 (diff) | |
download | smali-b45eb8f09a2f77cb8a522b04b481d69304c55117.tar.gz |
Merge changes Ib7b71b78,I62fd4d40 am: 9d354e41cfandroid-r-preview-4android-r-preview-3android-r-preview-2android-r-preview-1android-mainline-10.0.0_r8android-mainline-10.0.0_r6ndk-sysroot-r21android10-mainline-resolv-releaseandroid10-mainline-networking-release
am: f74980150b
Change-Id: Ia8f2a17046237e807485fb964cb571d86d22ade5
180 files changed, 16128 insertions, 10073 deletions
diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/EncodedValueAdaptor.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/EncodedValueAdaptor.java index bce1ff7a..880c7607 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/EncodedValueAdaptor.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/EncodedValueAdaptor.java @@ -30,6 +30,7 @@ package org.jf.baksmali.Adaptors.EncodedValue; import org.jf.baksmali.Adaptors.ReferenceFormatter; import org.jf.baksmali.Renderers.*; +import org.jf.dexlib2.ReferenceType; import org.jf.dexlib2.ValueType; import org.jf.dexlib2.iface.value.*; import org.jf.dexlib2.util.ReferenceUtil; @@ -107,6 +108,17 @@ public abstract class EncodedValueAdaptor { return; case ValueType.TYPE: writer.write(((TypeEncodedValue)encodedValue).getValue()); + return; + case ValueType.METHOD_TYPE: + ReferenceFormatter.writeReference(writer, ReferenceType.METHOD_PROTO, + ((MethodTypeEncodedValue)encodedValue).getValue()); + return; + case ValueType.METHOD_HANDLE: + ReferenceFormatter.writeReference(writer, ReferenceType.METHOD_HANDLE, + ((MethodHandleEncodedValue)encodedValue).getValue()); + return; + default: + throw new IllegalArgumentException("Unknown encoded value type: " + encodedValue.getValueType()); } } } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/InstructionMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/InstructionMethodItem.java index b69995df..d5b0bf34 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/InstructionMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/InstructionMethodItem.java @@ -31,6 +31,7 @@ package org.jf.baksmali.Adaptors.Format; import org.jf.baksmali.Adaptors.MethodDefinition; import org.jf.baksmali.Adaptors.MethodDefinition.InvalidSwitchPayload; import org.jf.baksmali.Adaptors.MethodItem; +import org.jf.baksmali.Adaptors.ReferenceFormatter; import org.jf.baksmali.Renderers.LongRenderer; import org.jf.baksmali.BaksmaliOptions; import org.jf.dexlib2.Opcode; @@ -41,6 +42,7 @@ import org.jf.dexlib2.iface.instruction.*; import org.jf.dexlib2.iface.instruction.formats.Instruction20bc; import org.jf.dexlib2.iface.instruction.formats.Instruction31t; import org.jf.dexlib2.iface.instruction.formats.UnknownInstruction; +import org.jf.dexlib2.iface.reference.CallSiteReference; import org.jf.dexlib2.iface.reference.Reference; import org.jf.dexlib2.util.ReferenceUtil; import org.jf.util.ExceptionWithContext; @@ -87,12 +89,16 @@ public class InstructionMethodItem<T extends Instruction> extends MethodItem { return String.format("%s@%d", ReferenceType.toString(type), ex.getInvalidIndex()); } + private interface Writable { + void writeTo(IndentingWriter writer) throws IOException; + } + @Override public boolean writeTo(IndentingWriter writer) throws IOException { Opcode opcode = instruction.getOpcode(); String verificationErrorName = null; - String referenceString = null; - String referenceString2 = null; + Writable referenceWritable = null; + Writable referenceWritable2 = null; boolean commentOutInstruction = false; @@ -109,25 +115,34 @@ public class InstructionMethodItem<T extends Instruction> extends MethodItem { if (instruction instanceof ReferenceInstruction) { ReferenceInstruction referenceInstruction = (ReferenceInstruction)instruction; - String classContext = null; + final String classContext; if (methodDef.classDef.options.implicitReferences) { classContext = methodDef.method.getDefiningClass(); + } else { + classContext = null; } try { Reference reference = referenceInstruction.getReference(); - referenceString = ReferenceUtil.getReferenceString(reference, classContext); - assert referenceString != null; + if (reference instanceof CallSiteReference) { + referenceWritable = indentingWriter -> { + ReferenceFormatter.writeCallSiteReference(indentingWriter, (CallSiteReference)reference); + }; + } else { + referenceWritable = indentingWriter -> { + indentingWriter.write(ReferenceUtil.getReferenceString(reference, classContext)); + }; + } } catch (InvalidItemIndex ex) { commentOutInstruction = true; - referenceString = writeInvalidItemIndex(ex, referenceInstruction.getReferenceType(), + String referenceString = writeInvalidItemIndex(ex, referenceInstruction.getReferenceType(), writer); + referenceWritable = indentingWriter -> writer.write(referenceString); } catch (ReferenceType.InvalidReferenceTypeException ex) { writer.write("#invalid reference type: "); writer.printSignedIntAsDec(ex.getReferenceType()); commentOutInstruction = true; - - referenceString = "invalid_reference"; + referenceWritable = indentingWriter -> writer.write("invalid_reference"); } if (instruction instanceof DualReferenceInstruction) { @@ -135,17 +150,19 @@ public class InstructionMethodItem<T extends Instruction> extends MethodItem { (DualReferenceInstruction) instruction; try { Reference reference2 = dualReferenceInstruction.getReference2(); - referenceString2 = ReferenceUtil.getReferenceString(reference2, classContext); + referenceWritable2 = indentingWriter -> { + indentingWriter.write(ReferenceUtil.getReferenceString(reference2, classContext)); + }; } catch (InvalidItemIndex ex) { commentOutInstruction = true; - referenceString2 = writeInvalidItemIndex(ex, + String referenceString = writeInvalidItemIndex(ex, dualReferenceInstruction.getReferenceType2(), writer); + referenceWritable2 = indentingWriter -> indentingWriter.write(referenceString); } catch (ReferenceType.InvalidReferenceTypeException ex) { writer.write("#invalid reference type: "); writer.printSignedIntAsDec(ex.getReferenceType()); commentOutInstruction = true; - - referenceString2 = "invalid_reference"; + referenceWritable2 = indentingWriter -> indentingWriter.write("invalid reference"); } } } @@ -235,7 +252,7 @@ public class InstructionMethodItem<T extends Instruction> extends MethodItem { writer.write(' '); writer.write(verificationErrorName); writer.write(", "); - writer.write(referenceString); + referenceWritable.writeTo(writer); break; case Format20t: case Format30t: @@ -249,7 +266,7 @@ public class InstructionMethodItem<T extends Instruction> extends MethodItem { writer.write(' '); writeFirstRegister(writer); writer.write(", "); - writer.write(referenceString); + referenceWritable.writeTo(writer); break; case Format21ih: case Format21lh: @@ -293,7 +310,7 @@ public class InstructionMethodItem<T extends Instruction> extends MethodItem { writer.write(", "); writeSecondRegister(writer); writer.write(", "); - writer.write(referenceString); + referenceWritable.writeTo(writer); break; case Format22cs: writeOpcode(writer); @@ -335,7 +352,7 @@ public class InstructionMethodItem<T extends Instruction> extends MethodItem { writer.write(' '); writeInvokeRegisters(writer); writer.write(", "); - writer.write(referenceString); + referenceWritable.writeTo(writer); break; case Format35mi: writeOpcode(writer); @@ -356,7 +373,7 @@ public class InstructionMethodItem<T extends Instruction> extends MethodItem { writer.write(' '); writeInvokeRangeRegisters(writer); writer.write(", "); - writer.write(referenceString); + referenceWritable.writeTo(writer); break; case Format3rmi: writeOpcode(writer); @@ -377,18 +394,18 @@ public class InstructionMethodItem<T extends Instruction> extends MethodItem { writer.write(' '); writeInvokeRegisters(writer); writer.write(", "); - writer.write(referenceString); + referenceWritable.writeTo(writer); writer.write(", "); - writer.write(referenceString2); + referenceWritable2.writeTo(writer); break; case Format4rcc: writeOpcode(writer); writer.write(' '); writeInvokeRangeRegisters(writer); writer.write(", "); - writer.write(referenceString); + referenceWritable.writeTo(writer); writer.write(", "); - writer.write(referenceString2); + referenceWritable2.writeTo(writer); break; default: assert false; diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/ReferenceFormatter.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/ReferenceFormatter.java index 91d142a8..bfb71e82 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/ReferenceFormatter.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/ReferenceFormatter.java @@ -28,8 +28,11 @@ package org.jf.baksmali.Adaptors; +import org.jf.baksmali.Adaptors.EncodedValue.EncodedValueAdaptor; +import org.jf.dexlib2.MethodHandleType; import org.jf.dexlib2.ReferenceType; import org.jf.dexlib2.iface.reference.*; +import org.jf.dexlib2.iface.value.EncodedValue; import org.jf.dexlib2.util.ReferenceUtil; import org.jf.util.IndentingWriter; import org.jf.util.StringUtils; @@ -43,6 +46,26 @@ public class ReferenceFormatter { writer.write('"'); } + public static void writeCallSiteReference(IndentingWriter writer, CallSiteReference callSite) throws IOException { + writer.write(callSite.getName()); + writer.write('('); + writer.write('"'); + StringUtils.writeEscapedString(writer, callSite.getMethodName()); + writer.write("\", "); + writeReference(writer, ReferenceType.METHOD_PROTO, callSite.getMethodProto()); + + for (EncodedValue encodedValue : callSite.getExtraArguments()) { + writer.write(", "); + EncodedValueAdaptor.writeTo(writer, encodedValue, null); + } + writer.write(")@"); + MethodHandleReference methodHandle = callSite.getMethodHandle(); + if (methodHandle.getMethodHandleType() != MethodHandleType.INVOKE_STATIC) { + throw new IllegalArgumentException("The linker method handle for a call site must be of type invoke-static"); + } + writeReference(writer, ReferenceType.METHOD, callSite.getMethodHandle().getMemberReference()); + } + public static void writeReference(IndentingWriter writer, int referenceType, Reference reference) throws IOException { switch (referenceType) { @@ -58,6 +81,17 @@ public class ReferenceFormatter { case ReferenceType.FIELD: ReferenceUtil.writeFieldDescriptor(writer, (FieldReference)reference); return; + case ReferenceType.METHOD_PROTO: + ReferenceUtil.writeMethodProtoDescriptor(writer, (MethodProtoReference)reference); + return; + case ReferenceType.METHOD_HANDLE: + ReferenceUtil.writeMethodHandle(writer, (MethodHandleReference)reference); + return; + case ReferenceType.CALL_SITE: + // We can't use ReferenceUtil.writeCallSite here, because it doesn't write encoded values out in the + // exact format we need here. + writeCallSiteReference(writer, (CallSiteReference)reference); + return; default: throw new IllegalStateException("Unknown reference type"); } diff --git a/baksmali/src/main/java/org/jf/baksmali/DexInputCommand.java b/baksmali/src/main/java/org/jf/baksmali/DexInputCommand.java index c7660cbe..13502634 100644 --- a/baksmali/src/main/java/org/jf/baksmali/DexInputCommand.java +++ b/baksmali/src/main/java/org/jf/baksmali/DexInputCommand.java @@ -55,7 +55,7 @@ public abstract class DexInputCommand extends Command { @Parameter(names = {"-a", "--api"}, description = "The numeric api level of the file being disassembled.") @ExtendedParameter(argumentNames = "api") - public int apiLevel = 15; + public int apiLevel = -1; @Parameter(description = "A dex/apk/oat/odex file. For apk or oat files that contain multiple dex " + "files, you can specify the specific entry to use as if the apk/oat file was a directory. " + @@ -125,6 +125,11 @@ public abstract class DexInputCommand extends Command { dexEntry = input.substring(file.getPath().length() + 1); } + Opcodes opcodes = null; + if (apiLevel != -1) { + opcodes = Opcodes.forApi(apiLevel); + } + if (!Strings.isNullOrEmpty(dexEntry)) { boolean exactMatch = false; if (dexEntry.length() > 2 && dexEntry.charAt(0) == '"' && dexEntry.charAt(dexEntry.length() - 1) == '"') { @@ -135,13 +140,13 @@ public abstract class DexInputCommand extends Command { inputEntry = dexEntry; try { - dexFile = DexFileFactory.loadDexEntry(file, dexEntry, exactMatch, Opcodes.forApi(apiLevel)); + dexFile = DexFileFactory.loadDexEntry(file, dexEntry, exactMatch, opcodes); } catch (IOException ex) { throw new RuntimeException(ex); } } else { try { - dexFile = DexFileFactory.loadDexFile(file, Opcodes.forApi(apiLevel)); + dexFile = DexFileFactory.loadDexFile(file, opcodes); } catch (IOException ex) { throw new RuntimeException(ex); } diff --git a/baksmali/src/main/java/org/jf/baksmali/DisassembleCommand.java b/baksmali/src/main/java/org/jf/baksmali/DisassembleCommand.java index eb670df4..258c5e81 100644 --- a/baksmali/src/main/java/org/jf/baksmali/DisassembleCommand.java +++ b/baksmali/src/main/java/org/jf/baksmali/DisassembleCommand.java @@ -39,6 +39,7 @@ import com.beust.jcommander.validators.PositiveInteger; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.jf.dexlib2.util.SyntheticAccessorResolver; +import org.jf.util.ConsoleUtil; import org.jf.util.StringWrapper; import org.jf.util.jcommander.ExtendedParameter; import org.jf.util.jcommander.ExtendedParameters; @@ -163,7 +164,8 @@ public class DisassembleCommand extends DexInputCommand { if (showDeodexWarning() && dexFile.hasOdexOpcodes()) { StringWrapper.printWrappedString(System.err, "Warning: You are disassembling an odex/oat file without deodexing it. You won't be able to " + - "re-assemble the results unless you deodex it. See \"baksmali help deodex\""); + "re-assemble the results unless you deodex it. See \"baksmali help deodex\"", + ConsoleUtil.getConsoleWidth()); } File outputDirectoryFile = new File(outputDir); diff --git a/baksmali/src/main/java/org/jf/baksmali/DumpCommand.java b/baksmali/src/main/java/org/jf/baksmali/DumpCommand.java index 433be125..95b5d832 100644 --- a/baksmali/src/main/java/org/jf/baksmali/DumpCommand.java +++ b/baksmali/src/main/java/org/jf/baksmali/DumpCommand.java @@ -94,13 +94,17 @@ public class DumpCommand extends DexInputCommand { throws IOException { Writer writer = new BufferedWriter(new OutputStreamWriter(output)); - int consoleWidth = ConsoleUtil.getConsoleWidth(); - if (consoleWidth <= 0) { - consoleWidth = 120; - } + try { + int consoleWidth = ConsoleUtil.getConsoleWidth(); + if (consoleWidth <= 0) { + consoleWidth = 120; + } - RawDexFile rawDexFile = new RawDexFile(dexFile.getOpcodes(), dexFile); - DexAnnotator annotator = new DexAnnotator(rawDexFile, consoleWidth); - annotator.writeAnnotations(writer); + RawDexFile rawDexFile = new RawDexFile(dexFile.getOpcodes(), dexFile); + DexAnnotator annotator = new DexAnnotator(rawDexFile, consoleWidth); + annotator.writeAnnotations(writer); + } finally { + writer.close(); + } } } diff --git a/baksmali/src/test/java/org/jf/baksmali/AnalysisTest.java b/baksmali/src/test/java/org/jf/baksmali/AnalysisTest.java index a68038dc..80a54b70 100644 --- a/baksmali/src/test/java/org/jf/baksmali/AnalysisTest.java +++ b/baksmali/src/test/java/org/jf/baksmali/AnalysisTest.java @@ -42,7 +42,6 @@ import org.jf.dexlib2.analysis.ClassProvider; import org.jf.dexlib2.iface.ClassDef; import org.jf.dexlib2.iface.DexFile; import org.jf.util.IndentingWriter; -import org.jf.util.TextUtils; import org.junit.Test; import javax.annotation.Nonnull; @@ -122,8 +121,8 @@ public class AnalysisTest { className.substring(1, className.length() - 1)); String smaliContents = readResource(smaliPath); - Assert.assertEquals(TextUtils.normalizeWhitespace(smaliContents), - TextUtils.normalizeWhitespace((stringWriter.toString()))); + Assert.assertEquals(BaksmaliTestUtils.normalizeWhitespace(smaliContents), + BaksmaliTestUtils.normalizeWhitespace((stringWriter.toString()))); } } diff --git a/baksmali/src/test/java/org/jf/baksmali/BaksmaliTestUtils.java b/baksmali/src/test/java/org/jf/baksmali/BaksmaliTestUtils.java index 4dd2ad93..e6406fba 100644 --- a/baksmali/src/test/java/org/jf/baksmali/BaksmaliTestUtils.java +++ b/baksmali/src/test/java/org/jf/baksmali/BaksmaliTestUtils.java @@ -33,20 +33,24 @@ package org.jf.baksmali; import com.google.common.io.ByteStreams; import junit.framework.Assert; - import org.antlr.runtime.RecognitionException; import org.jf.baksmali.Adaptors.ClassDefinition; import org.jf.dexlib2.iface.ClassDef; import org.jf.smali.SmaliTestUtils; import org.jf.util.IndentingWriter; -import org.jf.util.TextUtils; +import org.junit.Test; import javax.annotation.Nonnull; import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class BaksmaliTestUtils { + + private static String newline = System.getProperty("line.separator"); + public static void assertSmaliCompiledEquals(String source, String expected, BaksmaliOptions options, boolean stripComments) throws IOException, RecognitionException { @@ -74,9 +78,9 @@ public class BaksmaliTestUtils { @Nonnull public static String normalizeSmali(@Nonnull String smaliText, boolean stripComments) { if (stripComments) { - smaliText = TextUtils.stripComments(smaliText); + smaliText = stripComments(smaliText); } - return TextUtils.normalizeWhitespace(smaliText); + return normalizeWhitespace(smaliText); } @Nonnull @@ -113,6 +117,61 @@ public class BaksmaliTestUtils { return new String(readResourceBytesFully(fileName), encoding); } - // Static helpers class; do not instantiate. - private BaksmaliTestUtils() { throw new AssertionError(); } + @Nonnull + public static String normalizeNewlines(@Nonnull String source) { + return normalizeNewlines(source, newline); + } + + @Nonnull + public static String normalizeNewlines(@Nonnull String source, String newlineValue) { + return source.replace("\r", "").replace("\n", newlineValue); + } + + @Nonnull + public static String normalizeWhitespace(@Nonnull String source) { + // Go to native system new lines so that ^/$ work correctly + source = normalizeNewlines(source); + + // Remove all suffix/prefix whitespace + Pattern pattern = Pattern.compile("((^[ \t]+)|([ \t]+$))", Pattern.MULTILINE); + Matcher matcher = pattern.matcher(source); + source = matcher.replaceAll(""); + + // Remove all empty lines + Pattern pattern2 = Pattern.compile("^\r?\n?", Pattern.MULTILINE); + Matcher matcher2 = pattern2.matcher(source); + source = matcher2.replaceAll(""); + + // Remove a trailing new line, if present + Pattern pattern3 = Pattern.compile("\r?\n?$"); + Matcher matcher3 = pattern3.matcher(source); + source = matcher3.replaceAll(""); + + // Go back to unix-style \n newlines + source = normalizeNewlines(source, "\n"); + return source; + } + + @Nonnull + public static String stripComments(@Nonnull String source) { + Pattern pattern = Pattern.compile("#(.*)"); + Matcher matcher = pattern.matcher(source); + return matcher.replaceAll(""); + } + + @Test + public void testStripComments() { + Assert.assertEquals("", stripComments("#world")); + Assert.assertEquals("hello", stripComments("hello#world")); + Assert.assertEquals("multi\nline", stripComments("multi#hello world\nline#world")); + } + + @Test + public void testNormalizeWhitespace() { + Assert.assertEquals("", normalizeWhitespace(" ")); + Assert.assertEquals("hello", normalizeWhitespace("hello ")); + Assert.assertEquals("hello", normalizeWhitespace(" hello")); + Assert.assertEquals("hello", normalizeWhitespace(" hello ")); + Assert.assertEquals("hello\nworld", normalizeWhitespace("hello \n \n world")); + } } diff --git a/baksmali/src/test/java/org/jf/baksmali/InstructionRoundtripTest.java b/baksmali/src/test/java/org/jf/baksmali/InstructionRoundtripTest.java new file mode 100644 index 00000000..780631ba --- /dev/null +++ b/baksmali/src/test/java/org/jf/baksmali/InstructionRoundtripTest.java @@ -0,0 +1,50 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.baksmali; + +import org.junit.Test; + +public class InstructionRoundtripTest extends IdenticalRoundtripTest { + @Test + public void testConstMethodHandle() { + BaksmaliOptions options = new BaksmaliOptions(); + options.apiLevel = 28; + runTest("ConstMethodHandle", options); + } + + @Test + public void testConstMethodType() { + BaksmaliOptions options = new BaksmaliOptions(); + options.apiLevel = 28; + runTest("ConstMethodType", options); + } +} diff --git a/baksmali/src/test/java/org/jf/baksmali/InvokeCustomTest.java b/baksmali/src/test/java/org/jf/baksmali/InvokeCustomTest.java new file mode 100644 index 00000000..35f1482a --- /dev/null +++ b/baksmali/src/test/java/org/jf/baksmali/InvokeCustomTest.java @@ -0,0 +1,43 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.baksmali; + +import org.junit.Test; + +public class InvokeCustomTest extends IdenticalRoundtripTest { + @Test + public void testInvokeCustom() { + BaksmaliOptions options = new BaksmaliOptions(); + options.apiLevel = 26; + runTest("InvokeCustom", options); + } +} diff --git a/baksmali/src/test/resources/InstructionRoundtripTest/ConstMethodHandle.smali b/baksmali/src/test/resources/InstructionRoundtripTest/ConstMethodHandle.smali new file mode 100644 index 00000000..2d871843 --- /dev/null +++ b/baksmali/src/test/resources/InstructionRoundtripTest/ConstMethodHandle.smali @@ -0,0 +1,30 @@ +.class LConstMethodHandle; +.super Ljava/lang/Object; + + +# static fields +.field public static staticField:Ljava/lang/Object; + + +# instance fields +.field public instanceField:Ljava/lang/Object; + + +# direct methods +.method public static constMethodHandle()V + .registers 15 + + const-method-handle v0, invoke-static@Ljava/lang/Integer;->toString(I)Ljava/lang/String; + + const-method-handle v0, invoke-instance@Ljava/lang/Integer;->toString()Ljava/lang/String; + + const-method-handle v0, static-put@LConstMethodHandle;->instanceField:Ljava/lang/Object; + + const-method-handle v0, static-put@LConstMethodHandle;->instanceField:Ljava/lang/Object; + + const-method-handle v0, static-put@LConstMethodHandle;->staticField:Ljava/lang/Object; + + const-method-handle v0, static-put@LConstMethodHandle;->staticField:Ljava/lang/Object; + + return-void +.end method diff --git a/baksmali/src/test/resources/InstructionRoundtripTest/ConstMethodType.smali b/baksmali/src/test/resources/InstructionRoundtripTest/ConstMethodType.smali new file mode 100644 index 00000000..17f28898 --- /dev/null +++ b/baksmali/src/test/resources/InstructionRoundtripTest/ConstMethodType.smali @@ -0,0 +1,24 @@ +.class LConstMethodType; +.super Ljava/lang/Object; + + +# static fields +.field public static staticField:Ljava/lang/Object; + + +# instance fields +.field public instanceField:Ljava/lang/Object; + + +# direct methods +.method public static constMethodHandle()V + .registers 15 + + const-method-type v0, ()V + + const-method-type v0, (II)I + + const-method-type v0, (Ljava/lang/String;)Ljava/lang/String; + + return-void +.end method diff --git a/baksmali/src/test/resources/InvokeCustomTest/InvokeCustom.smali b/baksmali/src/test/resources/InvokeCustomTest/InvokeCustom.smali new file mode 100644 index 00000000..6cf954be --- /dev/null +++ b/baksmali/src/test/resources/InvokeCustomTest/InvokeCustom.smali @@ -0,0 +1,38 @@ +.class LInvokeCustom; +.super Ljava/lang/Object; + + +# direct methods +.method public static invokeCustom([Ljava/lang/String;)V + .registers 15 + + new-instance v0, LCustom; + + invoke-direct {v0}, LCustom;-><init>()V + + const-string v1, "Arg to doSomething" + + invoke-custom {v0, v1}, call_site_1("doSomething", (LCustom;Ljava/lang/String;)Ljava/lang/String;, "just testing")@LBootstrapLinker;->normalLink(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;)Ljava/lang/invoke/CallSite; + + move-result-object v2 + + sget-object v3, Ljava/lang/System;->out:Ljava/io/PrintStream; + + const-string v4, "got back - " + + invoke-virtual {v3, v4}, Ljava/io/PrintStream;->print(Ljava/lang/String;)V + + invoke-virtual {v3, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V + + invoke-custom {v0, v1}, call_site_0("doSomething", (LCustom;Ljava/lang/String;)Ljava/lang/String;, "just testing")@LBootstrapLinker;->backwardsLink(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;)Ljava/lang/invoke/CallSite; + + move-result-object v2 + + sget-object v3, Ljava/lang/System;->out:Ljava/io/PrintStream; + + const-string v4, "got back - " + + invoke-virtual {v3, v4}, Ljava/io/PrintStream;->print(Ljava/lang/String;)V + + invoke-virtual {v3, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V +.end method diff --git a/build.gradle b/build.gradle index 360e3db0..3678076f 100644 --- a/build.gradle +++ b/build.gradle @@ -31,7 +31,7 @@ apply plugin: 'idea' -version = '2.2.2' +version = '2.2.7' def jcommanderVersion = '' if (!('release' in gradle.startParameter.taskNames)) { @@ -57,11 +57,6 @@ if (!('release' in gradle.startParameter.taskNames)) { version += "-${versionSuffix}" } else { jcommanderVersion = 'com.beust:jcommander:1.64' - - if (System.env.JDK6_HOME == null && !JavaVersion.current().isJava6()) { - throw new InvalidUserDataException("bzzzzzzzt. Release builds must be performed with java 6. " + - "Either run gradle with java 6, or define the JDK6_HOME environment variable.") - } } // Note: please don't use this. This is strictly for the official releases @@ -69,7 +64,7 @@ if (!('release' in gradle.startParameter.taskNames)) { task release() { } -task(install) << { +task(install).doLast { println "Installing version: ${version}" } @@ -88,19 +83,6 @@ subprojects { } } - if (System.env.JDK6_HOME != null) { - sourceCompatibility = 1.6 - targetCompatibility = 1.6 - - tasks.withType(JavaCompile) { - doFirst { - options.fork = true - options.bootClasspath = "$System.env.JDK6_HOME/jre/lib/rt.jar" - options.bootClasspath += "$File.pathSeparator$System.env.JDK6_HOME/jre/lib/jsse.jar" - } - } - } - version = parent.version ext { @@ -204,6 +186,6 @@ buildscript { } task wrapper(type: Wrapper) { - gradleVersion = '3.5' + gradleVersion = '4.6' distributionType = Wrapper.DistributionType.ALL } diff --git a/dexlib2/Android.bp b/dexlib2/Android.bp index 6d3769bb..c5b0ebdb 100644 --- a/dexlib2/Android.bp +++ b/dexlib2/Android.bp @@ -27,7 +27,6 @@ java_library_host { "guava", "jcommander", "jsr305", - "smali-util", ], } @@ -46,6 +45,5 @@ java_library_host { "commons-cli-1.2", "jcommander", "jsr305", - "smali-util", ], } diff --git a/dexlib2/OatVersions.txt b/dexlib2/OatVersions.txt index 329c4f04..654a37a9 100644 --- a/dexlib2/OatVersions.txt +++ b/dexlib2/OatVersions.txt @@ -88,3 +88,29 @@ bfb80d25eaeb7a604d5dd25a370e3869e96a33ab - 114 f44d36c8423f81cbb5e9f55d8813e26ffa1a7f3b - 115 (115 again. heck if I know what's going on) cbcedbf9382bc773713cd3552ed96f417bf1daeb - 116 051071718085ce807a2e7c55278a8d723e238e86 - 116 +1595815c2a914a78df7dfb6f0082f47d4e82bb36 - 117 +f4f2daafb38c9c07ea74044a0fb89a2a19288b7a - 118 +6bc7774426cc0b6bbab5566fa62b3c509455e583 - 119 +88d329a698ba186aeb1f1ef8794355512ada84a9 - 120 +612ff540cd3329935351f05923358cf29b9c9b44 - 121 +c83dd7bfde2171c879efb92a31a363505385ffb9 - 122 +eee1c0ec2b08a6be642b329dc2fe885391127da3 - 123 +f977691961b5a49a074a535fcb29a5ad4a318974 - 124 +2665bc8159698429f20a08f814e63c434910d608 - 124 +88abba2b0cb0151d89e16da3e64025878dc2f142 - 125 +99cdddaf8e5bc6b31d0eb375755ec4071a9fb527 - 125 +c137cb03a90b9fd5a7d0ec7dd9b250db82ca88ef - 126 +0eb882bfc5d260e8014c26adfda11602065aa5d8 - 127 + - The oat_dex_files_offset field is added to the OatHeader class in art/runtime/oat.h. + - The method_bss_mapping field is added to the OatDexFile class in art/runtime/oat_file.h. +7b0648aa7cb4b7a58e73bf353e031dfe4553d9d7 - 128 +0cb172874481f736c6b7c491dd621166cc25561b - 129 +a308a327884920cbb1e3e62964c4b5a01c29af8c - 130 (changed kMultiDexSeparator from ':' to '!') +4147fcc43c2ee019a06e55384985e3eaf82dcb8c - 131 +75c5ed6e75f70002db5fa7c609137c04dd2bdf40 - 131 + - The dex_layout_sections field is added to OatDexFile class in art/runtime/oat_file.h. + - They did some kind of rebase or something so this commit is not in the master branch anymore. + - Only indication is that they cherry picked some things from this commit for oat 132. +120aa286ab6adf3e76a31bc61fb4e583e5158d71 - 132 + - The commit containing cherry picked changes from commit 75c5ed6e. + - No other noteable changes to the Oat format. diff --git a/dexlib2/build.gradle b/dexlib2/build.gradle index 422d2c31..b8fe7894 100644 --- a/dexlib2/build.gradle +++ b/dexlib2/build.gradle @@ -46,7 +46,6 @@ configurations { } dependencies { - compile project(':util') compile depends.findbugs compile depends.guava diff --git a/dexlib2/src/main/java/org/jf/dexlib2/DexFileFactory.java b/dexlib2/src/main/java/org/jf/dexlib2/DexFileFactory.java index 1caaf9f8..2775d18d 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/DexFileFactory.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/DexFileFactory.java @@ -58,7 +58,7 @@ import java.util.List; public final class DexFileFactory { @Nonnull - public static DexBackedDexFile loadDexFile(@Nonnull String path, @Nonnull Opcodes opcodes) throws IOException { + public static DexBackedDexFile loadDexFile(@Nonnull String path, @Nullable Opcodes opcodes) throws IOException { return loadDexFile(new File(path), opcodes); } @@ -79,7 +79,7 @@ public final class DexFileFactory { * in a zip file is not a valid dex file */ @Nonnull - public static DexBackedDexFile loadDexFile(@Nonnull File file, @Nonnull Opcodes opcodes) throws IOException { + public static DexBackedDexFile loadDexFile(@Nonnull File file, @Nullable Opcodes opcodes) throws IOException { if (!file.exists()) { throw new DexFileNotFoundException("%s does not exist", file.getName()); } @@ -176,7 +176,7 @@ public final class DexFileFactory { * @throws MultipleMatchingDexEntriesException If multiple entries match the given dexEntry */ public static DexBackedDexFile loadDexEntry(@Nonnull File file, @Nonnull String dexEntry, - boolean exactMatch, @Nonnull Opcodes opcodes) throws IOException { + boolean exactMatch, @Nullable Opcodes opcodes) throws IOException { if (!file.exists()) { throw new DexFileNotFoundException("Container file %s does not exist", file.getName()); } @@ -230,7 +230,7 @@ public final class DexFileFactory { * @throws UnsupportedFileTypeException If the given file is not a valid dex/zip/odex/oat file */ public static MultiDexContainer<? extends DexBackedDexFile> loadDexContainer( - @Nonnull File file, @Nonnull final Opcodes opcodes) throws IOException { + @Nonnull File file, @Nullable final Opcodes opcodes) throws IOException { if (!file.exists()) { throw new DexFileNotFoundException("%s does not exist", file.getName()); } @@ -456,10 +456,6 @@ public final class DexFileFactory { } return null; } - - @Nonnull @Override public Opcodes getOpcodes() { - return dexFile.getOpcodes(); - } } public static class FilenameVdexProvider implements VdexProvider { diff --git a/dexlib2/src/main/java/org/jf/dexlib2/MethodHandleType.java b/dexlib2/src/main/java/org/jf/dexlib2/MethodHandleType.java new file mode 100644 index 00000000..11ee010a --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/MethodHandleType.java @@ -0,0 +1,96 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2; + +import com.google.common.collect.BiMap; +import com.google.common.collect.ImmutableBiMap; +import org.jf.util.ExceptionWithContext; + +import javax.annotation.Nonnull; + +public class MethodHandleType { + public static final int STATIC_PUT = 0; + public static final int STATIC_GET = 1; + public static final int INSTANCE_PUT = 2; + public static final int INSTANCE_GET = 3; + public static final int INVOKE_STATIC = 4; + public static final int INVOKE_INSTANCE = 5; + public static final int INVOKE_CONSTRUCTOR = 6; + public static final int INVOKE_DIRECT = 7; + public static final int INVOKE_INTERFACE = 8; + + private static final BiMap<Integer, String> methodHandleTypeNames = new ImmutableBiMap.Builder<Integer, String>() + .put(STATIC_PUT, "static-put") + .put(STATIC_GET, "static-get") + .put(INSTANCE_PUT, "instance-put") + .put(INSTANCE_GET, "instance-get") + .put(INVOKE_STATIC, "invoke-static") + .put(INVOKE_INSTANCE, "invoke-instance") + .put(INVOKE_CONSTRUCTOR, "invoke-constructor") + .put(INVOKE_DIRECT, "invoke-direct") + .put(INVOKE_INTERFACE, "invoke-interface") + .build(); + + @Nonnull public static String toString(int methodHandleType) { + String val = methodHandleTypeNames.get(methodHandleType); + if (val == null) { + throw new InvalidMethodHandleTypeException(methodHandleType); + } + return val; + } + + public static int getMethodHandleType(String methodHandleType) { + Integer ret = methodHandleTypeNames.inverse().get(methodHandleType); + if (ret == null) { + throw new ExceptionWithContext("Invalid method handle type: %s", methodHandleType); + } + return ret; + } + + public static class InvalidMethodHandleTypeException extends ExceptionWithContext { + private final int methodHandleType; + + public InvalidMethodHandleTypeException(int methodHandleType) { + super("Invalid method handle type: %d", methodHandleType); + this.methodHandleType = methodHandleType; + } + + public InvalidMethodHandleTypeException(int methodHandleType, String message, Object... formatArgs) { + super(message, formatArgs); + this.methodHandleType = methodHandleType; + } + + public int getMethodHandleType() { + return methodHandleType; + } + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/Opcode.java b/dexlib2/src/main/java/org/jf/dexlib2/Opcode.java index 60dffa2f..5d0eeaed 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/Opcode.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/Opcode.java @@ -299,14 +299,20 @@ public enum Opcode IPUT_OBJECT_VOLATILE(firstApi(0xfc, 9), "iput-object-volatile", ReferenceType.FIELD, Format.Format22c, Opcode.ODEX_ONLY | Opcode.VOLATILE_FIELD_ACCESSOR | Opcode.CAN_THROW | Opcode.CAN_CONTINUE), SGET_OBJECT_VOLATILE(firstApi(0xfd, 9), "sget-object-volatile", ReferenceType.FIELD, Format.Format21c, Opcode.ODEX_ONLY | Opcode.VOLATILE_FIELD_ACCESSOR | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.STATIC_FIELD_ACCESSOR), - SPUT_OBJECT_VOLATILE(firstApi(0xfe, 9), "sput-object-volatile", ReferenceType.FIELD, Format.Format21c, Opcode.ODEX_ONLY | Opcode.VOLATILE_FIELD_ACCESSOR | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.STATIC_FIELD_ACCESSOR), + SPUT_OBJECT_VOLATILE(betweenApi(0xfe, 9, 19), "sput-object-volatile", ReferenceType.FIELD, Format.Format21c, Opcode.ODEX_ONLY | Opcode.VOLATILE_FIELD_ACCESSOR | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.STATIC_FIELD_ACCESSOR), PACKED_SWITCH_PAYLOAD(0x100, "packed-switch-payload", ReferenceType.NONE, Format.PackedSwitchPayload, 0), SPARSE_SWITCH_PAYLOAD(0x200, "sparse-switch-payload", ReferenceType.NONE, Format.SparseSwitchPayload, 0), ARRAY_PAYLOAD(0x300, "array-payload", ReferenceType.NONE, Format.ArrayPayload, 0), INVOKE_POLYMORPHIC(firstArtVersion(0xfa, 87), "invoke-polymorphic", ReferenceType.METHOD, ReferenceType.METHOD_PROTO, Format.Format45cc, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT), - INVOKE_POLYMORPHIC_RANGE(firstArtVersion(0xfb, 87), "invoke-polymorphic/range", ReferenceType.METHOD, ReferenceType.METHOD_PROTO, Format.Format4rcc, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT); + INVOKE_POLYMORPHIC_RANGE(firstArtVersion(0xfb, 87), "invoke-polymorphic/range", ReferenceType.METHOD, ReferenceType.METHOD_PROTO, Format.Format4rcc, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT), + + INVOKE_CUSTOM(firstArtVersion(0xfc, 111), "invoke-custom", ReferenceType.CALL_SITE, Format.Format35c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT), + INVOKE_CUSTOM_RANGE(firstArtVersion(0xfd, 111), "invoke-custom/range", ReferenceType.CALL_SITE, Format.Format3rc, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT), + + CONST_METHOD_HANDLE(firstArtVersion(0xfe, 134), "const-method-handle", ReferenceType.METHOD_HANDLE, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER), + CONST_METHOD_TYPE(firstArtVersion(0xff, 134), "const-method-type", ReferenceType.METHOD_PROTO, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER); //if the instruction can throw an exception public static final int CAN_THROW = 0x1; @@ -392,10 +398,14 @@ public enum Opcode } private static List<VersionConstraint> lastApi(int opcodeValue, int api) { - Range range; return Lists.newArrayList(new VersionConstraint(Range.atMost(api), Range.openClosed(0, 0), opcodeValue)); } + private static List<VersionConstraint> betweenApi(int opcodeValue, int minApi, int maxApi) { + return Lists.newArrayList(new VersionConstraint(Range.closed(minApi, maxApi), Range.openClosed(0, 0), + opcodeValue)); + } + private static List<VersionConstraint> firstArtVersion(int opcodeValue, int artVersion) { return Lists.newArrayList(new VersionConstraint(Range.openClosed(0, 0), Range.atLeast(artVersion), opcodeValue)); } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/Opcodes.java b/dexlib2/src/main/java/org/jf/dexlib2/Opcodes.java index 5f8106d2..8f24e02f 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/Opcodes.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/Opcodes.java @@ -50,7 +50,7 @@ public class Opcodes { */ public final int api; public final int artVersion; - @Nonnull private final Opcode[] opcodesByValue = new Opcode[255]; + @Nonnull private final Opcode[] opcodesByValue = new Opcode[256]; @Nonnull private final EnumMap<Opcode, Short> opcodeValues; @Nonnull private final HashMap<String, Opcode> opcodesByName; @@ -64,6 +64,15 @@ public class Opcodes { return new Opcodes(NO_VERSION, artVersion); } + @Nonnull + public static Opcodes forDexVersion(int dexVersion) { + int api = VersionMap.mapDexVersionToApi(dexVersion); + if (api == NO_VERSION) { + throw new RuntimeException("Unsupported dex version " + dexVersion); + } + return new Opcodes(api, NO_VERSION); + } + /** * @return a default Opcodes instance for when the exact Opcodes to use doesn't matter or isn't known */ @@ -74,14 +83,12 @@ public class Opcodes { } private Opcodes(int api, int artVersion) { - - if (api >= 21) { - this.api = api; + this.api = api; this.artVersion = mapApiToArtVersion(api); } else if (artVersion >= 0 && artVersion < 39) { this.api = mapArtVersionToApi(artVersion); - this.artVersion = artVersion; + this.artVersion = artVersion; } else { this.api = api; this.artVersion = artVersion; diff --git a/dexlib2/src/main/java/org/jf/dexlib2/ReferenceType.java b/dexlib2/src/main/java/org/jf/dexlib2/ReferenceType.java index fa8b9687..03594759 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/ReferenceType.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/ReferenceType.java @@ -40,7 +40,9 @@ public final class ReferenceType { public static final int FIELD = 2; public static final int METHOD = 3; public static final int METHOD_PROTO = 4; - public static final int NONE = 5; + public static final int CALL_SITE = 5; + public static final int METHOD_HANDLE = 6; + public static final int NONE = 7; public static String toString(int referenceType) { switch (referenceType) { @@ -54,6 +56,10 @@ public final class ReferenceType { return "method"; case METHOD_PROTO: return "method_proto"; + case CALL_SITE: + return "call_site"; + case METHOD_HANDLE: + return "method_handle"; default: throw new InvalidReferenceTypeException(referenceType); } @@ -70,6 +76,10 @@ public final class ReferenceType { return METHOD; } else if (reference instanceof MethodProtoReference) { return METHOD_PROTO; + } else if (reference instanceof CallSiteReference) { + return CALL_SITE; + } else if (reference instanceof MethodHandleReference) { + return METHOD_HANDLE; } else { throw new IllegalStateException("Invalid reference"); } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/ValueType.java b/dexlib2/src/main/java/org/jf/dexlib2/ValueType.java index 08710a6b..ecb967bf 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/ValueType.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/ValueType.java @@ -39,6 +39,8 @@ public final class ValueType { public static final int LONG = 0x06; public static final int FLOAT = 0x10; public static final int DOUBLE = 0x11; + public static final int METHOD_TYPE = 0x15; + public static final int METHOD_HANDLE = 0x16; public static final int STRING = 0x17; public static final int TYPE = 0x18; public static final int FIELD = 0x19; @@ -50,4 +52,47 @@ public final class ValueType { public static final int BOOLEAN = 0x1f; private ValueType() {} + + public static String getValueTypeName(int valueType) { + switch (valueType) { + case BYTE: + return "byte"; + case SHORT: + return "short"; + case CHAR: + return "char"; + case INT: + return "int"; + case LONG: + return "long"; + case FLOAT: + return "float"; + case DOUBLE: + return "double"; + case METHOD_TYPE: + return "method_type"; + case METHOD_HANDLE: + return "method_handle"; + case STRING: + return "string"; + case TYPE: + return "type"; + case FIELD: + return "field"; + case METHOD: + return "method"; + case ENUM: + return "enum"; + case ARRAY: + return "array"; + case ANNOTATION: + return "annotation"; + case NULL: + return "null"; + case BOOLEAN: + return "boolean"; + default: + throw new IllegalArgumentException("Unknown encoded value type: " + valueType); + } + } } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/VersionMap.java b/dexlib2/src/main/java/org/jf/dexlib2/VersionMap.java index b3581876..791fffae 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/VersionMap.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/VersionMap.java @@ -34,11 +34,43 @@ package org.jf.dexlib2; public class VersionMap { public static final int NO_VERSION = -1; + public static int mapDexVersionToApi(int dexVersion) { + switch (dexVersion) { + case 35: + return 23; + case 37: + return 25; + case 38: + return 27; + case 39: + return 28; + default: + return NO_VERSION; + } + } + + public static int mapApiToDexVersion(int api) { + if (api <= 23) { + return 35; + } + if (api <= 25) { + return 37; + } + if (api <= 27) { + return 38; + } + return 39; + } + public static int mapArtVersionToApi(int artVersion) { - // NOTE: Art version 87 and api level 26 do not correspond to any - // particular android release and represent the current (as of - // October 2016) state of aosp/master. - if (artVersion >= 87) { + // 144 is the current version in the master branch of AOSP as of 2018-05-22 + if (artVersion >= 144) { + return 28; + } + if (artVersion >= 131) { + return 27; + } + if (artVersion >= 124) { return 26; } if (artVersion >= 79) { @@ -57,6 +89,10 @@ public class VersionMap { } public static int mapApiToArtVersion(int api) { + if (api < 19) { + return NO_VERSION; + } + switch (api) { case 19: case 20: @@ -70,14 +106,13 @@ public class VersionMap { case 24: case 25: return 79; + case 26: + return 124; + case 27: + return 131; + default: + // 144 is the current version in the master branch of AOSP as of 2018-05-22 + return 144; } - - // NOTE: Art version 87 and api level 26 do not correspond to any - // particular android release and represent the current (as of - // October 2016) state of aosp/master. - if (api > 25) { - return 87; - } - return NO_VERSION; } } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassPathResolver.java b/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassPathResolver.java index 10daa566..3d5895bc 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassPathResolver.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassPathResolver.java @@ -31,14 +31,10 @@ package org.jf.dexlib2.analysis; -import com.beust.jcommander.internal.Sets; import com.google.common.base.Joiner; import com.google.common.base.Splitter; import com.google.common.collect.Lists; -import org.jf.dexlib2.DexFileFactory; import org.jf.dexlib2.DexFileFactory.UnsupportedFileTypeException; -import org.jf.dexlib2.Opcodes; -import org.jf.dexlib2.dexbacked.DexBackedDexFile; import org.jf.dexlib2.dexbacked.DexBackedOdexFile; import org.jf.dexlib2.dexbacked.OatFile; import org.jf.dexlib2.dexbacked.OatFile.OatDexFile; @@ -51,14 +47,11 @@ import javax.annotation.Nullable; import java.io.File; import java.io.IOException; import java.util.List; -import java.util.Set; public class ClassPathResolver { private final Iterable<String> classPathDirs; - private final Opcodes opcodes; - private final Set<File> loadedFiles = Sets.newHashSet(); - private final List<ClassProvider> classProviders = Lists.newArrayList(); + private final PathEntryLoader pathEntryLoader; /** * Constructs a new ClassPathResolver using a specified list of bootclasspath entries @@ -109,21 +102,21 @@ public class ClassPathResolver { @Nonnull List<String> extraClassPathEntries, @Nonnull DexFile dexFile, boolean unused) throws IOException { this.classPathDirs = bootClassPathDirs; - opcodes = dexFile.getOpcodes(); + this.pathEntryLoader = new PathEntryLoader(dexFile.getOpcodes()); if (bootClassPathEntries == null) { - bootClassPathEntries = getDefaultBootClassPath(dexFile, opcodes.api); + bootClassPathEntries = getDefaultBootClassPath(dexFile, dexFile.getOpcodes().api); } for (String entry : bootClassPathEntries) { try { loadLocalOrDeviceBootClassPathEntry(entry); - } catch (NoDexException ex) { + } catch (PathEntryLoader.NoDexException ex) { if (entry.endsWith(".jar")) { String odexEntry = entry.substring(0, entry.length() - 4) + ".odex"; try { loadLocalOrDeviceBootClassPathEntry(odexEntry); - } catch (NoDexException ex2) { + } catch (PathEntryLoader.NoDexException ex2) { throw new ResolveException("Neither %s nor %s contain a dex file", entry, odexEntry); } catch (NotFoundException ex2) { throw new ResolveException(ex); @@ -136,7 +129,7 @@ public class ClassPathResolver { String jarEntry = entry.substring(0, entry.length() - 5) + ".jar"; try { loadLocalOrDeviceBootClassPathEntry(jarEntry); - } catch (NoDexException ex2) { + } catch (PathEntryLoader.NoDexException ex2) { throw new ResolveException("Neither %s nor %s contain a dex file", entry, jarEntry); } catch (NotFoundException ex2) { throw new ResolveException(ex); @@ -152,7 +145,7 @@ public class ClassPathResolver { // bootClassPathDirs try { loadLocalClassPathEntry(entry); - } catch (NoDexException ex) { + } catch (PathEntryLoader.NoDexException ex) { throw new ResolveException(ex); } } @@ -160,23 +153,23 @@ public class ClassPathResolver { if (dexFile instanceof MultiDexContainer.MultiDexFile) { MultiDexContainer<? extends MultiDexFile> container = ((MultiDexFile)dexFile).getContainer(); for (String entry: container.getDexEntryNames()) { - classProviders.add(new DexClassProvider(container.getEntry(entry))); + pathEntryLoader.getClassProviders().add(new DexClassProvider(container.getEntry(entry))); } } else { - classProviders.add(new DexClassProvider(dexFile)); + pathEntryLoader.getClassProviders().add(new DexClassProvider(dexFile)); } } @Nonnull public List<ClassProvider> getResolvedClassProviders() { - return classProviders; + return pathEntryLoader.getResolvedClassProviders(); } - private boolean loadLocalClassPathEntry(@Nonnull String entry) throws NoDexException, IOException { + private boolean loadLocalClassPathEntry(@Nonnull String entry) throws PathEntryLoader.NoDexException, IOException { File entryFile = new File(entry); if (entryFile.exists() && entryFile.isFile()) { try { - loadEntry(entryFile, true); + pathEntryLoader.loadEntry(entryFile, true); return true; } catch (UnsupportedFileTypeException ex) { throw new ResolveException(ex, "Couldn't load classpath entry %s", entry); @@ -186,7 +179,7 @@ public class ClassPathResolver { } private void loadLocalOrDeviceBootClassPathEntry(@Nonnull String entry) - throws IOException, NoDexException, NotFoundException { + throws IOException, PathEntryLoader.NoDexException, NotFoundException { // first, see if the entry is a valid local path if (loadLocalClassPathEntry(entry)) { return; @@ -207,7 +200,7 @@ public class ClassPathResolver { String partialPath = pathJoiner.join(pathComponents.subList(i, pathComponents.size())); File entryFile = new File(directoryFile, partialPath); if (entryFile.exists() && entryFile.isFile()) { - loadEntry(entryFile, true); + pathEntryLoader.loadEntry(entryFile, true); return; } } @@ -216,86 +209,16 @@ public class ClassPathResolver { throw new NotFoundException("Could not find classpath entry %s", entry); } - private void loadEntry(@Nonnull File entryFile, boolean loadOatDependencies) - throws IOException, NoDexException { - if (loadedFiles.contains(entryFile)) { - return; - } - - MultiDexContainer<? extends DexBackedDexFile> container; - try { - container = DexFileFactory.loadDexContainer(entryFile, opcodes); - } catch (UnsupportedFileTypeException ex) { - throw new ResolveException(ex); - } - - List<String> entryNames = container.getDexEntryNames(); - - if (entryNames.size() == 0) { - throw new NoDexException("%s contains no dex file", entryFile); - } - - loadedFiles.add(entryFile); - - for (String entryName: entryNames) { - classProviders.add(new DexClassProvider(container.getEntry(entryName))); - } - - if (loadOatDependencies && container instanceof OatFile) { - List<String> oatDependencies = ((OatFile)container).getBootClassPath(); - if (!oatDependencies.isEmpty()) { - try { - loadOatDependencies(entryFile.getParentFile(), oatDependencies); - } catch (NotFoundException ex) { - throw new ResolveException(ex, "Error while loading oat file %s", entryFile); - } catch (NoDexException ex) { - throw new ResolveException(ex, "Error while loading dependencies for oat file %s", entryFile); - } - } - } - } - @Nonnull private static List<String> splitDevicePath(@Nonnull String path) { return Lists.newArrayList(Splitter.on('/').split(path)); } - private void loadOatDependencies(@Nonnull File directory, @Nonnull List<String> oatDependencies) - throws IOException, NoDexException, NotFoundException { - // We assume that all oat dependencies are located in the same directory as the oat file - for (String oatDependency: oatDependencies) { - String oatDependencyName = getFilenameForOatDependency(oatDependency); - File file = new File(directory, oatDependencyName); - if (!file.exists()) { - throw new NotFoundException("Cannot find dependency %s in %s", oatDependencyName, directory); - } - - loadEntry(file, false); - } - } - - @Nonnull - private String getFilenameForOatDependency(String oatDependency) { - int index = oatDependency.lastIndexOf('/'); - - String dependencyLeaf = oatDependency.substring(index+1); - if (dependencyLeaf.endsWith(".art")) { - return dependencyLeaf.substring(0, dependencyLeaf.length() - 4) + ".oat"; - } - return dependencyLeaf; - } - - private static class NotFoundException extends Exception { + static class NotFoundException extends Exception { public NotFoundException(String message, Object... formatArgs) { super(String.format(message, formatArgs)); } } - - private static class NoDexException extends Exception { - public NoDexException(String message, Object... formatArgs) { - super(String.format(message, formatArgs)); - } - } /** * An error that occurred while resolving the classpath @@ -320,17 +243,8 @@ public class ClassPathResolver { @Nonnull private static List<String> getDefaultBootClassPath(@Nonnull DexFile dexFile, int apiLevel) { if (dexFile instanceof OatFile.OatDexFile) { - List<String> bcp = ((OatDexFile)dexFile).getContainer().getBootClassPath(); - if (!bcp.isEmpty()) { - for (int i=0; i<bcp.size(); i++) { - String entry = bcp.get(i); - if (entry.endsWith(".art")) { - bcp.set(i, entry.substring(0, entry.length() - 4) + ".oat"); - } - } - return bcp; - } - return Lists.newArrayList("boot.oat"); + return bootClassPathForOat((OatDexFile) dexFile); + } if (dexFile instanceof DexBackedOdexFile) { @@ -462,4 +376,23 @@ public class ClassPathResolver { "/system/framework/org.apache.http.legacy.boot.jar"); } } + + private static List<String> bootClassPathForOat(@Nonnull OatDexFile dexFile) { + List<String> bcp = dexFile.getContainer().getBootClassPath(); + if(bcp.isEmpty()) { + return Lists.newArrayList("boot.oat"); + } else { + return replaceElementsSuffix(bcp, ".art", ".oat"); + } + } + + private static List<String> replaceElementsSuffix(List<String> bcp, String originalSuffix, String newSuffix) { + for (int i=0; i<bcp.size(); i++) { + String entry = bcp.get(i); + if (entry.endsWith(originalSuffix)) { + bcp.set(i, entry.substring(0, entry.length() - originalSuffix.length()) + newSuffix); + } + } + return bcp; + } } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassProto.java b/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassProto.java index 44cc5e24..636e5b84 100755 --- a/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassProto.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassProto.java @@ -44,7 +44,7 @@ import org.jf.dexlib2.iface.*; import org.jf.dexlib2.iface.reference.FieldReference; import org.jf.dexlib2.iface.reference.MethodReference; import org.jf.dexlib2.util.MethodUtil; -import org.jf.util.AlignmentUtils; +import org.jf.dexlib2.util.AlignmentUtils; import org.jf.util.ExceptionWithContext; import org.jf.util.SparseArray; @@ -529,8 +529,8 @@ public class ClassProto implements TypeProto { ClassProto superclass = null; if (superclassType != null) { superclass = (ClassProto) classPath.getClass(superclassType); - startFieldOffset = superclass.getNextFieldOffset(); - } + startFieldOffset = superclass.getNextFieldOffset(); + } int fieldIndexMod; if ((startFieldOffset % 8) == 0) { @@ -617,12 +617,12 @@ public class ClassProto implements TypeProto { //add padding to align the wide fields, if needed if (fieldTypes[i] == WIDE && !gotDouble) { - if (fieldOffset % 8 != 0) { - assert fieldOffset % 8 == 4; - fieldOffset += 4; - } - gotDouble = true; + if (fieldOffset % 8 != 0) { + assert fieldOffset % 8 == 4; + fieldOffset += 4; } + gotDouble = true; + } instanceFields.append(fieldOffset, field); if (fieldTypes[i] == WIDE) { @@ -979,14 +979,14 @@ public class ClassProto implements TypeProto { for (int j=0; j<vtable.size(); j++) { Method candidate = vtable.get(j); if (MethodUtil.methodSignaturesMatch(candidate, interfaceMethod)) { - if (!classPath.shouldCheckPackagePrivateAccess() || + if (!classPath.shouldCheckPackagePrivateAccess() || AnalyzedMethodUtil.canAccess(ClassProto.this, candidate, true, false, false)) { if (interfaceMethodOverrides(interfaceMethod, candidate)) { vtable.set(j, interfaceMethod); + } + } } } - } - } if (vtableIndex >= 0) { if (!isOverridableByDefaultMethod(vtable.get(vtableIndex))) { diff --git a/dexlib2/src/main/java/org/jf/dexlib2/analysis/PathEntryLoader.java b/dexlib2/src/main/java/org/jf/dexlib2/analysis/PathEntryLoader.java new file mode 100644 index 00000000..fd654de5 --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/analysis/PathEntryLoader.java @@ -0,0 +1,109 @@ +package org.jf.dexlib2.analysis; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import org.jf.dexlib2.DexFileFactory; +import org.jf.dexlib2.Opcodes; +import org.jf.dexlib2.dexbacked.DexBackedDexFile; +import org.jf.dexlib2.dexbacked.OatFile; +import org.jf.dexlib2.iface.MultiDexContainer; + +import javax.annotation.Nonnull; +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.Set; + +public class PathEntryLoader { + Opcodes opcodes; + + public Opcodes getOpcodes() { + return opcodes; + } + + final Set<File> loadedFiles = Sets.newHashSet(); + final List<ClassProvider> classProviders = Lists.newArrayList(); + + public List<ClassProvider> getClassProviders() { + return classProviders; + } + + public PathEntryLoader(Opcodes opcodes) { + this.opcodes = opcodes; + } + + @Nonnull + public List<ClassProvider> getResolvedClassProviders() { + return classProviders; + } + + public void loadEntry(@Nonnull File entryFile, boolean loadOatDependencies) + throws IOException, NoDexException { + if (loadedFiles.contains(entryFile)) { + return; + } + + MultiDexContainer<? extends DexBackedDexFile> container; + try { + container = DexFileFactory.loadDexContainer(entryFile, opcodes); + } catch (DexFileFactory.UnsupportedFileTypeException ex) { + throw new ClassPathResolver.ResolveException(ex); + } + + List<String> entryNames = container.getDexEntryNames(); + + if (entryNames.isEmpty()) { + throw new NoDexException("%s contains no dex file", entryFile); + } + + loadedFiles.add(entryFile); + + for (String entryName : entryNames) { + classProviders.add(new DexClassProvider(container.getEntry(entryName))); + } + + if (loadOatDependencies && container instanceof OatFile) { + List<String> oatDependencies = ((OatFile) container).getBootClassPath(); + if (!oatDependencies.isEmpty()) { + try { + loadOatDependencies(entryFile.getParentFile(), oatDependencies); + } catch (ClassPathResolver.NotFoundException ex) { + throw new ClassPathResolver.ResolveException(ex, "Error while loading oat file %s", entryFile); + } catch (NoDexException ex) { + throw new ClassPathResolver.ResolveException(ex, "Error while loading dependencies for oat file %s", entryFile); + } + } + } + } + + private void loadOatDependencies(@Nonnull File directory, @Nonnull List<String> oatDependencies) + throws IOException, NoDexException, ClassPathResolver.NotFoundException { + // We assume that all oat dependencies are located in the same directory as the oat file + for (String oatDependency : oatDependencies) { + String oatDependencyName = getFilenameForOatDependency(oatDependency); + File file = new File(directory, oatDependencyName); + if (!file.exists()) { + throw new ClassPathResolver.NotFoundException("Cannot find dependency %s in %s", oatDependencyName, directory); + } + + loadEntry(file, false); + } + } + + @Nonnull + private String getFilenameForOatDependency(String oatDependency) { + int index = oatDependency.lastIndexOf('/'); + + String dependencyLeaf = oatDependency.substring(index + 1); + if (dependencyLeaf.endsWith(".art")) { + return dependencyLeaf.substring(0, dependencyLeaf.length() - 4) + ".oat"; + } + return dependencyLeaf; + } + + static class NoDexException extends Exception { + public NoDexException(String message, Object... formatArgs) { + super(String.format(message, formatArgs)); + } + } +}
\ No newline at end of file diff --git a/dexlib2/src/main/java/org/jf/dexlib2/base/reference/BaseCallSiteReference.java b/dexlib2/src/main/java/org/jf/dexlib2/base/reference/BaseCallSiteReference.java new file mode 100644 index 00000000..700454c2 --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/base/reference/BaseCallSiteReference.java @@ -0,0 +1,58 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.base.reference; + +import org.jf.dexlib2.iface.reference.CallSiteReference; + +public abstract class BaseCallSiteReference implements CallSiteReference { + @Override + public int hashCode() { + int hashCode = getName().hashCode(); + hashCode = hashCode*31 + getMethodHandle().hashCode(); + hashCode = hashCode*31 + getMethodName().hashCode(); + hashCode = hashCode*31 + getMethodProto().hashCode(); + hashCode = hashCode*31 + getExtraArguments().hashCode(); + return hashCode; + } + + @Override + public boolean equals(Object o) { + if (o != null && o instanceof CallSiteReference) { + CallSiteReference other = (CallSiteReference) o; + return getMethodHandle().equals(other.getMethodHandle()) && + getMethodName().equals(other.getMethodName()) && + getMethodProto().equals(other.getMethodProto()) && + getExtraArguments().equals(other.getExtraArguments()); + } + return false; + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/base/reference/BaseMethodHandleReference.java b/dexlib2/src/main/java/org/jf/dexlib2/base/reference/BaseMethodHandleReference.java new file mode 100644 index 00000000..8d3b4e7c --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/base/reference/BaseMethodHandleReference.java @@ -0,0 +1,80 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.base.reference; + +import com.google.common.primitives.Ints; +import org.jf.dexlib2.iface.reference.FieldReference; +import org.jf.dexlib2.iface.reference.MethodHandleReference; +import org.jf.dexlib2.iface.reference.MethodReference; +import org.jf.dexlib2.iface.reference.Reference; + +import javax.annotation.Nonnull; + +public abstract class BaseMethodHandleReference implements MethodHandleReference { + @Override + public int hashCode() { + int hashCode = getMethodHandleType(); + hashCode = hashCode*31 + getMemberReference().hashCode(); + return hashCode; + } + + @Override + public boolean equals(Object o) { + if (o != null && o instanceof MethodHandleReference) { + MethodHandleReference other = (MethodHandleReference) o; + return getMethodHandleType() == other.getMethodHandleType() && + getMemberReference().equals(other.getMemberReference()); + } + return false; + } + + @Override + public int compareTo(@Nonnull MethodHandleReference o) { + int res = Ints.compare(getMethodHandleType(), o.getMethodHandleType()); + if (res != 0) return res; + + Reference reference = getMemberReference(); + if (reference instanceof FieldReference) { + // "This should never happen", but if it does, we'll arbitrarily say a field reference compares less than + // a method reference + if (!(o.getMemberReference() instanceof FieldReference)) { + return -1; + } + return ((FieldReference) reference).compareTo((FieldReference) o.getMemberReference()); + } else { + if (!(o.getMemberReference() instanceof MethodReference)) { + return 1; + } + return ((MethodReference) reference).compareTo((MethodReference) o.getMemberReference()); + } + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/base/value/BaseMethodHandleEncodedValue.java b/dexlib2/src/main/java/org/jf/dexlib2/base/value/BaseMethodHandleEncodedValue.java new file mode 100644 index 00000000..f3bbbb9a --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/base/value/BaseMethodHandleEncodedValue.java @@ -0,0 +1,66 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.base.value; + +import com.google.common.primitives.Ints; +import org.jf.dexlib2.ValueType; +import org.jf.dexlib2.iface.value.EncodedValue; +import org.jf.dexlib2.iface.value.MethodHandleEncodedValue; + +import javax.annotation.Nonnull; + +public abstract class BaseMethodHandleEncodedValue implements MethodHandleEncodedValue { + @Override + public int hashCode() { + return getValue().hashCode(); + } + + @Override + public boolean equals(Object o) { + if (o instanceof MethodHandleEncodedValue) { + return getValue().equals(((MethodHandleEncodedValue) o).getValue()); + } + return false; + } + + @Override + public int compareTo(@Nonnull EncodedValue o) { + int res = Ints.compare(getValueType(), o.getValueType()); + if (res != 0) return res; + return getValue().compareTo(((MethodHandleEncodedValue) o).getValue()); + } + + @Override + public int getValueType() { + return ValueType.METHOD_HANDLE; + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/base/value/BaseMethodTypeEncodedValue.java b/dexlib2/src/main/java/org/jf/dexlib2/base/value/BaseMethodTypeEncodedValue.java new file mode 100644 index 00000000..6ded330f --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/base/value/BaseMethodTypeEncodedValue.java @@ -0,0 +1,66 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.base.value; + +import com.google.common.primitives.Ints; +import org.jf.dexlib2.ValueType; +import org.jf.dexlib2.iface.value.EncodedValue; +import org.jf.dexlib2.iface.value.MethodTypeEncodedValue; + +import javax.annotation.Nonnull; + +public abstract class BaseMethodTypeEncodedValue implements MethodTypeEncodedValue { + @Override + public int hashCode() { + return getValue().hashCode(); + } + + @Override + public boolean equals(Object o) { + if (o instanceof MethodTypeEncodedValue) { + return getValue().equals(((MethodTypeEncodedValue) o).getValue()); + } + return false; + } + + @Override + public int compareTo(@Nonnull EncodedValue o) { + int res = Ints.compare(getValueType(), o.getValueType()); + if (res != 0) return res; + return getValue().compareTo(((MethodTypeEncodedValue) o).getValue()); + } + + @Override + public int getValueType() { + return ValueType.METHOD_TYPE; + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/builder/BuilderDebugItem.java b/dexlib2/src/main/java/org/jf/dexlib2/builder/BuilderDebugItem.java index 0969a9db..41effa1f 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/builder/BuilderDebugItem.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/builder/BuilderDebugItem.java @@ -33,10 +33,7 @@ package org.jf.dexlib2.builder; import org.jf.dexlib2.iface.debug.DebugItem; -import javax.annotation.Nullable; - -public abstract class BuilderDebugItem implements DebugItem { - @Nullable MethodLocation location; +public abstract class BuilderDebugItem extends ItemWithLocation implements DebugItem { public BuilderDebugItem() { } @@ -48,5 +45,4 @@ public abstract class BuilderDebugItem implements DebugItem { } return location.getCodeAddress(); } - } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/builder/ItemWithLocation.java b/dexlib2/src/main/java/org/jf/dexlib2/builder/ItemWithLocation.java new file mode 100644 index 00000000..f6515528 --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/builder/ItemWithLocation.java @@ -0,0 +1,16 @@ +package org.jf.dexlib2.builder; + +import javax.annotation.Nullable; + +public abstract class ItemWithLocation { + @Nullable + MethodLocation location; + + public boolean isPlaced() { + return location != null; + } + + public void setLocation(MethodLocation methodLocation) { + location = methodLocation; + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/builder/Label.java b/dexlib2/src/main/java/org/jf/dexlib2/builder/Label.java index ef19f91c..35c3f562 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/builder/Label.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/builder/Label.java @@ -32,11 +32,8 @@ package org.jf.dexlib2.builder; import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -public class Label { - @Nullable MethodLocation location; +public class Label extends ItemWithLocation { Label() { } @@ -55,8 +52,4 @@ public class Label { } return location; } - - public boolean isPlaced() { - return location != null; - } } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/builder/LocatedDebugItems.java b/dexlib2/src/main/java/org/jf/dexlib2/builder/LocatedDebugItems.java new file mode 100644 index 00000000..77291ac8 --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/builder/LocatedDebugItems.java @@ -0,0 +1,10 @@ +package org.jf.dexlib2.builder; + +public class LocatedDebugItems extends LocatedItems<BuilderDebugItem> { + + @Override + protected String getAddLocatedItemError() { + return "Cannot add a debug item that has already been added to a method." + + "You must remove it from its current location first."; + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/builder/LocatedItems.java b/dexlib2/src/main/java/org/jf/dexlib2/builder/LocatedItems.java new file mode 100644 index 00000000..89f0ac11 --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/builder/LocatedItems.java @@ -0,0 +1,96 @@ +package org.jf.dexlib2.builder; + +import com.google.common.collect.ImmutableList; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.*; + +public abstract class LocatedItems<T extends ItemWithLocation> { + // We end up creating and keeping around a *lot* of MethodLocation objects + // when building a new dex file, so it's worth the trouble of lazily creating + // the labels and debugItems lists only when they are needed + @Nullable + private List<T> items = null; + + @Nonnull + private List<T> getItems() { + if (items == null) { + return ImmutableList.of(); + } + return items; + } + + public Set<T> getModifiableItems(MethodLocation newItemsLocation) { + return new AbstractSet<T>() { + @Nonnull + @Override + public Iterator<T> iterator() { + final Iterator<T> it = getItems().iterator(); + + return new Iterator<T>() { + private @Nullable + T currentItem = null; + + @Override + public boolean hasNext() { + return it.hasNext(); + } + + @Override + public T next() { + currentItem = it.next(); + return currentItem; + } + + @Override + public void remove() { + if (currentItem != null) { + currentItem.setLocation(null); + } + it.remove(); + } + }; + } + + @Override + public int size() { + return getItems().size(); + } + + @Override + public boolean add(@Nonnull T item) { + if (item.isPlaced()) { + throw new IllegalArgumentException(getAddLocatedItemError()); + } + item.setLocation(newItemsLocation); + addItem(item); + return true; + } + }; + } + + private void addItem(@Nonnull T item) { + if (items == null) { + items = new ArrayList<>(1); + } + items.add(item); + } + + protected abstract String getAddLocatedItemError(); + + public void mergeItemsIntoNext(@Nonnull MethodLocation nextLocation, LocatedItems<T> otherLocatedItems) { + if (otherLocatedItems == this) { + return; + } + if (items != null) { + for (T item : items) { + item.setLocation(nextLocation); + } + List<T> mergedItems = items; + mergedItems.addAll(otherLocatedItems.getItems()); + otherLocatedItems.items = mergedItems; + items = null; + } + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/builder/LocatedLabels.java b/dexlib2/src/main/java/org/jf/dexlib2/builder/LocatedLabels.java new file mode 100644 index 00000000..d14ce7bc --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/builder/LocatedLabels.java @@ -0,0 +1,9 @@ +package org.jf.dexlib2.builder; + +public class LocatedLabels extends LocatedItems<Label> { + @Override + protected String getAddLocatedItemError() { + return "Cannot add a label that is already placed." + + "You must remove it from its current location first."; + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/builder/MethodLocation.java b/dexlib2/src/main/java/org/jf/dexlib2/builder/MethodLocation.java index 5a707e92..da746e13 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/builder/MethodLocation.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/builder/MethodLocation.java @@ -31,7 +31,6 @@ package org.jf.dexlib2.builder; -import com.google.common.collect.ImmutableList; import org.jf.dexlib2.builder.debug.*; import org.jf.dexlib2.iface.instruction.Instruction; import org.jf.dexlib2.iface.reference.StringReference; @@ -46,16 +45,12 @@ public class MethodLocation { int codeAddress; int index; - // We end up creating and keeping around a *lot* of MethodLocation objects - // when building a new dex file, so it's worth the trouble of lazily creating - // the labels and debugItems lists only when they are needed - - @Nullable - private List<Label> labels = null; - @Nullable - private List<BuilderDebugItem> debugItems = null; + private final LocatedItems<Label> labels; + private final LocatedItems<BuilderDebugItem> debugItems; MethodLocation(@Nullable BuilderInstruction instruction, int codeAddress, int index) { + this.debugItems = new LocatedDebugItems(); + this.labels = new LocatedLabels(); this.instruction = instruction; this.codeAddress = codeAddress; this.index = index; @@ -74,146 +69,26 @@ public class MethodLocation { return index; } - @Nonnull - private List<Label> getLabels(boolean mutable) { - if (labels == null) { - if (mutable) { - labels = new ArrayList<Label>(1); - return labels; - } - return ImmutableList.of(); - } - return labels; - } - - @Nonnull - private List<BuilderDebugItem> getDebugItems(boolean mutable) { - if (debugItems == null) { - if (mutable) { - debugItems = new ArrayList<BuilderDebugItem>(1); - return debugItems; - } - return ImmutableList.of(); - } - return debugItems; - } - - void mergeInto(@Nonnull MethodLocation other) { - if (this.labels != null || other.labels != null) { - List<Label> otherLabels = other.getLabels(true); - for (Label label: this.getLabels(false)) { - label.location = other; - otherLabels.add(label); - } - this.labels = null; - } - - if (this.debugItems != null || other.labels != null) { - // We need to keep the debug items in the same order. We add the other debug items to this list, then reassign - // the list. - List<BuilderDebugItem> debugItems = getDebugItems(true); - for (BuilderDebugItem debugItem: debugItems) { - debugItem.location = other; - } - debugItems.addAll(other.getDebugItems(false)); - other.debugItems = debugItems; - this.debugItems = null; - } + void mergeInto(@Nonnull MethodLocation nextLocation) { + labels.mergeItemsIntoNext(nextLocation, nextLocation.labels); + debugItems.mergeItemsIntoNext(nextLocation, nextLocation.debugItems); } @Nonnull public Set<Label> getLabels() { - return new AbstractSet<Label>() { - @Nonnull - @Override public Iterator<Label> iterator() { - final Iterator<Label> it = getLabels(false).iterator(); - - return new Iterator<Label>() { - private @Nullable Label currentLabel = null; - - @Override public boolean hasNext() { - return it.hasNext(); - } - - @Override public Label next() { - currentLabel = it.next(); - return currentLabel; - } - - @Override public void remove() { - if (currentLabel != null) { - currentLabel.location = null; - } - it.remove(); - } - }; - } - - @Override public int size() { - return getLabels(false).size(); - } - - @Override public boolean add(@Nonnull Label label) { - if (label.isPlaced()) { - throw new IllegalArgumentException("Cannot add a label that is already placed. You must remove " + - "it from its current location first."); - } - label.location = MethodLocation.this; - getLabels(true).add(label); - return true; - } - }; + return labels.getModifiableItems(MethodLocation.this); } @Nonnull public Label addNewLabel() { - Label label = new Label(this); - getLabels(true).add(label); - return label; + Label newLabel = new Label(); + getLabels().add(newLabel); + return newLabel; } @Nonnull public Set<BuilderDebugItem> getDebugItems() { - return new AbstractSet<BuilderDebugItem>() { - @Nonnull - @Override public Iterator<BuilderDebugItem> iterator() { - final Iterator<BuilderDebugItem> it = getDebugItems(false).iterator(); - - return new Iterator<BuilderDebugItem>() { - private @Nullable BuilderDebugItem currentDebugItem = null; - - @Override public boolean hasNext() { - return it.hasNext(); - } - - @Override public BuilderDebugItem next() { - currentDebugItem = it.next(); - return currentDebugItem; - } - - @Override public void remove() { - if (currentDebugItem != null) { - currentDebugItem.location = null; - } - it.remove(); - } - }; - } - - @Override public int size() { - return getDebugItems(false).size(); - } - - @Override public boolean add(@Nonnull BuilderDebugItem debugItem) { - if (debugItem.location != null) { - throw new IllegalArgumentException("Cannot add a debug item that has already been added to a " + - "method. You must remove it from its current location first."); - } - debugItem.location = MethodLocation.this; - getDebugItems(true).add(debugItem); - return true; - } - }; + return debugItems.getModifiableItems(MethodLocation.this); } public void addLineNumber(int lineNumber) { diff --git a/dexlib2/src/main/java/org/jf/dexlib2/builder/MutableMethodImplementation.java b/dexlib2/src/main/java/org/jf/dexlib2/builder/MutableMethodImplementation.java index a77ae253..3e4925ea 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/builder/MutableMethodImplementation.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/builder/MutableMethodImplementation.java @@ -473,6 +473,9 @@ public class MutableMethodImplementation implements MethodImplementation { private int mapCodeAddressToIndex(@Nonnull int[] codeAddressToIndex, int codeAddress) { int index; do { + if (codeAddress >= codeAddressToIndex.length) { + codeAddress = codeAddressToIndex.length - 1; + } index = codeAddressToIndex[codeAddress]; if (index < 0) { codeAddress--; diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedClassDef.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedClassDef.java index 9159fc6b..6b415fb1 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedClassDef.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedClassDef.java @@ -38,8 +38,7 @@ import org.jf.dexlib2.base.reference.BaseTypeReference; import org.jf.dexlib2.dexbacked.raw.ClassDefItem; import org.jf.dexlib2.dexbacked.raw.TypeIdItem; import org.jf.dexlib2.dexbacked.util.AnnotationsDirectory; -import org.jf.dexlib2.dexbacked.util.FixedSizeSet; -import org.jf.dexlib2.dexbacked.util.StaticInitialValueIterator; +import org.jf.dexlib2.dexbacked.util.EncodedArrayItemIterator; import org.jf.dexlib2.dexbacked.util.VariableSizeLookaheadIterator; import org.jf.dexlib2.iface.ClassDef; import org.jf.dexlib2.iface.reference.FieldReference; @@ -163,8 +162,8 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef { public Iterator<DexBackedField> iterator() { final AnnotationsDirectory.AnnotationIterator annotationIterator = annotationsDirectory.getFieldAnnotationIterator(); - final StaticInitialValueIterator staticInitialValueIterator = - StaticInitialValueIterator.newOrEmpty(dexFile, staticInitialValuesOffset); + final EncodedArrayItemIterator staticInitialValueIterator = + EncodedArrayItemIterator.newOrEmpty(dexFile, staticInitialValuesOffset); return new VariableSizeLookaheadIterator<DexBackedField>(dexFile, fieldsStartOffset) { private int count; diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedDexFile.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedDexFile.java index fe260c5f..664428b9 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedDexFile.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedDexFile.java @@ -39,6 +39,7 @@ import org.jf.dexlib2.dexbacked.reference.DexBackedFieldReference; import org.jf.dexlib2.dexbacked.reference.DexBackedMethodReference; import org.jf.dexlib2.dexbacked.reference.DexBackedStringReference; import org.jf.dexlib2.dexbacked.reference.DexBackedTypeReference; +import org.jf.dexlib2.dexbacked.util.FixedSizeList; import org.jf.dexlib2.dexbacked.util.FixedSizeSet; import org.jf.dexlib2.iface.DexFile; import org.jf.dexlib2.iface.reference.Reference; @@ -68,14 +69,22 @@ public class DexBackedDexFile extends BaseDexBuffer implements DexFile { private final int methodStartOffset; private final int classCount; private final int classStartOffset; + private final int mapOffset; - protected DexBackedDexFile(@Nonnull Opcodes opcodes, @Nonnull byte[] buf, int offset, boolean verifyMagic) { + protected DexBackedDexFile(@Nullable Opcodes opcodes, @Nonnull byte[] buf, int offset, boolean verifyMagic) { super(buf, offset); - this.opcodes = opcodes; - + int dexVersion; if (verifyMagic) { - DexUtil.verifyDexHeader(buf, offset); + dexVersion = DexUtil.verifyDexHeader(buf, offset); + } else { + dexVersion = HeaderItem.getVersion(buf, offset); + } + + if (opcodes == null) { + this.opcodes = Opcodes.forDexVersion(dexVersion); + } else { + this.opcodes = opcodes; } stringCount = readSmallUint(HeaderItem.STRING_COUNT_OFFSET); @@ -90,22 +99,23 @@ public class DexBackedDexFile extends BaseDexBuffer implements DexFile { methodStartOffset = readSmallUint(HeaderItem.METHOD_START_OFFSET); classCount = readSmallUint(HeaderItem.CLASS_COUNT_OFFSET); classStartOffset = readSmallUint(HeaderItem.CLASS_START_OFFSET); + mapOffset = readSmallUint(HeaderItem.MAP_OFFSET); } - public DexBackedDexFile(@Nonnull Opcodes opcodes, @Nonnull BaseDexBuffer buf) { + public DexBackedDexFile(@Nullable Opcodes opcodes, @Nonnull BaseDexBuffer buf) { this(opcodes, buf.buf, buf.baseOffset); } - public DexBackedDexFile(@Nonnull Opcodes opcodes, @Nonnull byte[] buf, int offset) { + public DexBackedDexFile(@Nullable Opcodes opcodes, @Nonnull byte[] buf, int offset) { this(opcodes, buf, offset, false); } - public DexBackedDexFile(@Nonnull Opcodes opcodes, @Nonnull byte[] buf) { + public DexBackedDexFile(@Nullable Opcodes opcodes, @Nonnull byte[] buf) { this(opcodes, buf, 0, true); } @Nonnull - public static DexBackedDexFile fromInputStream(@Nonnull Opcodes opcodes, @Nonnull InputStream is) + public static DexBackedDexFile fromInputStream(@Nullable Opcodes opcodes, @Nonnull InputStream is) throws IOException { DexUtil.verifyDexHeader(is); @@ -186,6 +196,22 @@ public class DexBackedDexFile extends BaseDexBuffer implements DexFile { return classStartOffset + classIndex*ClassDefItem.ITEM_SIZE; } + public int getCallSiteIdItemOffset(int callSiteIndex) { + MapItem mapItem = getMapItemForSection(ItemType.CALL_SITE_ID_ITEM); + if (mapItem == null || callSiteIndex >= mapItem.getItemCount()) { + throw new InvalidItemIndex(callSiteIndex, "Call site index out of bounds: %d", callSiteIndex); + } + return mapItem.getOffset() + callSiteIndex * CallSiteIdItem.ITEM_SIZE; + } + + public int getMethodHandleItemOffset(int methodHandleIndex) { + MapItem mapItem = getMapItemForSection(ItemType.METHOD_HANDLE_ITEM); + if (mapItem == null || methodHandleIndex >= mapItem.getItemCount()) { + throw new InvalidItemIndex(methodHandleIndex , "Method handle index out of bounds: %d", methodHandleIndex); + } + return mapItem.getOffset() + methodHandleIndex * MethodHandleItem.ITEM_SIZE; + } + public int getClassCount() { return classCount; } @@ -210,6 +236,22 @@ public class DexBackedDexFile extends BaseDexBuffer implements DexFile { return methodCount; } + public int getCallSiteCount() { + MapItem mapItem = getMapItemForSection(ItemType.CALL_SITE_ID_ITEM); + if (mapItem == null) { + return 0; + } + return mapItem.getItemCount(); + } + + public int getMethodHandleCount() { + MapItem mapItem = getMapItemForSection(ItemType.METHOD_HANDLE_ITEM); + if (mapItem == null) { + return 0; + } + return mapItem.getItemCount(); + } + @Nonnull public String getString(int stringIndex) { int stringOffset = getStringIdItemOffset(stringIndex); @@ -323,6 +365,32 @@ public class DexBackedDexFile extends BaseDexBuffer implements DexFile { return new DexReader(this, offset); } + public List<MapItem> getMapItems() { + final int mapSize = readSmallUint(mapOffset); + + return new FixedSizeList<MapItem>() { + @Override + public MapItem readItem(int index) { + int mapItemOffset = mapOffset + 4 + index * MapItem.ITEM_SIZE; + return new MapItem(DexBackedDexFile.this, mapItemOffset); + } + + @Override public int size() { + return mapSize; + } + }; + } + + @Nullable + public MapItem getMapItemForSection(int itemType) { + for (MapItem mapItem: getMapItems()) { + if (mapItem.getType() == itemType) { + return mapItem; + } + } + return null; + } + public static class NotADexFile extends RuntimeException { public NotADexFile() { } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedField.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedField.java index 653cdbd3..50dd6d20 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedField.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedField.java @@ -35,7 +35,7 @@ import org.jf.dexlib2.base.reference.BaseFieldReference; import org.jf.dexlib2.dexbacked.raw.FieldIdItem; import org.jf.dexlib2.dexbacked.reference.DexBackedFieldReference; import org.jf.dexlib2.dexbacked.util.AnnotationsDirectory; -import org.jf.dexlib2.dexbacked.util.StaticInitialValueIterator; +import org.jf.dexlib2.dexbacked.util.EncodedArrayItemIterator; import org.jf.dexlib2.dexbacked.value.DexBackedEncodedValue; import org.jf.dexlib2.iface.ClassDef; import org.jf.dexlib2.iface.Field; @@ -62,7 +62,7 @@ public class DexBackedField extends BaseFieldReference implements Field { public DexBackedField(@Nonnull DexReader reader, @Nonnull DexBackedClassDef classDef, int previousFieldIndex, - @Nonnull StaticInitialValueIterator staticInitialValueIterator, + @Nonnull EncodedArrayItemIterator staticInitialValueIterator, @Nonnull AnnotationsDirectory.AnnotationIterator annotationIterator) { this.dexFile = reader.dexBuf; this.classDef = classDef; diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedMethodImplementation.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedMethodImplementation.java index cfe16aa6..f30e3a44 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedMethodImplementation.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedMethodImplementation.java @@ -41,7 +41,7 @@ import org.jf.dexlib2.dexbacked.util.VariableSizeLookaheadIterator; import org.jf.dexlib2.iface.MethodImplementation; import org.jf.dexlib2.iface.debug.DebugItem; import org.jf.dexlib2.iface.instruction.Instruction; -import org.jf.util.AlignmentUtils; +import org.jf.dexlib2.util.AlignmentUtils; import org.jf.util.ExceptionWithContext; import javax.annotation.Nonnull; diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/OatFile.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/OatFile.java index aaf942ea..26d4c14a 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/OatFile.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/OatFile.java @@ -177,10 +177,6 @@ public class OatFile extends BaseDexBuffer implements MultiDexContainer<OatDexFi return Arrays.asList(bcp.split(":")); } - @Nonnull @Override public Opcodes getOpcodes() { - return opcodes; - } - @Nonnull public List<OatDexFile> getDexFiles() { return new AbstractForwardSequentialList<OatDexFile>() { @@ -249,9 +245,15 @@ public class OatFile extends BaseDexBuffer implements MultiDexContainer<OatDexFi private class OatHeader { private final int headerOffset; + private final int keyValueStoreOffset; public OatHeader(int offset) { this.headerOffset = offset; + if (getVersion() >= 127) { + this.keyValueStoreOffset = 19 * 4; + } else { + this.keyValueStoreOffset = 18 * 4; + } } public boolean isValid() { @@ -282,7 +284,7 @@ public class OatFile extends BaseDexBuffer implements MultiDexContainer<OatDexFi if (getVersion() < MIN_OAT_VERSION) { throw new IllegalStateException("Unsupported oat version"); } - int fieldOffset = 17 * 4; + int fieldOffset = keyValueStoreOffset - 4; return readSmallUint(headerOffset + fieldOffset); } @@ -290,14 +292,14 @@ public class OatFile extends BaseDexBuffer implements MultiDexContainer<OatDexFi if (getVersion() < MIN_OAT_VERSION) { throw new IllegalStateException("Unsupported oat version"); } - return 18*4 + getKeyValueStoreSize(); + return keyValueStoreOffset + getKeyValueStoreSize(); } @Nullable public String getKeyValue(@Nonnull String key) { int size = getKeyValueStoreSize(); - int offset = headerOffset + 18 * 4; + int offset = headerOffset + keyValueStoreOffset; int endOffset = offset + size; while (offset < endOffset) { @@ -328,7 +330,11 @@ public class OatFile extends BaseDexBuffer implements MultiDexContainer<OatDexFi } public int getDexListStart() { - return headerOffset + getHeaderSize(); + if (getVersion() >= 127) { + return headerOffset + readSmallUint(headerOffset + (6 * 4)); + } else { + return headerOffset + getHeaderSize(); + } } } @@ -602,6 +608,12 @@ public class OatFile extends BaseDexBuffer implements MultiDexContainer<OatDexFi if (getOatVersion() >= 73) { offset += 4; // lookup table offset } + if (getOatVersion() >= 131) { + offset += 4; // dex sections layout offset + } + if (getOatVersion() >= 127) { + offset += 4; // method bss mapping offset + } if (getOatVersion() < 75) { // prior to 75, the class offsets are included here directly int classCount = readSmallUint(dexOffset + HeaderItem.CLASS_COUNT_OFFSET); diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/ZipDexContainer.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/ZipDexContainer.java index 50052c20..5bd30dd8 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/ZipDexContainer.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/ZipDexContainer.java @@ -58,23 +58,18 @@ import java.util.zip.ZipFile; public class ZipDexContainer implements MultiDexContainer<ZipDexFile> { private final File zipFilePath; - private final Opcodes opcodes; + @Nullable private final Opcodes opcodes; /** * Constructs a new ZipDexContainer for the given zip file * * @param zipFilePath The path to the zip file - * @param opcodes The Opcodes instance to use when loading dex files from this container */ - public ZipDexContainer(@Nonnull File zipFilePath, @Nonnull Opcodes opcodes) { + public ZipDexContainer(@Nonnull File zipFilePath, @Nullable Opcodes opcodes) { this.zipFilePath = zipFilePath; this.opcodes = opcodes; } - @Nonnull @Override public Opcodes getOpcodes() { - return opcodes; - } - /** * Gets a list of the names of dex files in this zip file. * @@ -147,7 +142,7 @@ public class ZipDexContainer implements MultiDexContainer<ZipDexFile> { private final String entryName; - protected ZipDexFile(@Nonnull Opcodes opcodes, @Nonnull byte[] buf, @Nonnull String entryName) { + protected ZipDexFile(@Nullable Opcodes opcodes, @Nonnull byte[] buf, @Nonnull String entryName) { super(opcodes, buf, 0); this.entryName = entryName; } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/instruction/DexBackedInstruction45cc.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/instruction/DexBackedInstruction45cc.java index bbdc229f..2cb023f1 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/instruction/DexBackedInstruction45cc.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/instruction/DexBackedInstruction45cc.java @@ -91,7 +91,7 @@ public class DexBackedInstruction45cc extends DexBackedInstruction implements In @Override public Reference getReference2() { return DexBackedReference.makeReference(dexFile, opcode.referenceType2, - dexFile.readUshort(instructionStart + 3)); + dexFile.readUshort(instructionStart + 6)); } @Override diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/instruction/DexBackedInstruction4rcc.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/instruction/DexBackedInstruction4rcc.java index 629e753b..f1cae641 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/instruction/DexBackedInstruction4rcc.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/instruction/DexBackedInstruction4rcc.java @@ -70,7 +70,7 @@ public class DexBackedInstruction4rcc extends DexBackedInstruction implements In @Override public Reference getReference2() { return DexBackedReference.makeReference(dexFile, opcode.referenceType2, - dexFile.readUshort(instructionStart + 3)); + dexFile.readUshort(instructionStart + 6)); } @Override diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/CallSiteIdItem.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/CallSiteIdItem.java new file mode 100644 index 00000000..784fe0fc --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/CallSiteIdItem.java @@ -0,0 +1,72 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.dexbacked.raw; + +import org.jf.dexlib2.dexbacked.DexReader; +import org.jf.dexlib2.dexbacked.raw.util.DexAnnotator; +import org.jf.dexlib2.dexbacked.value.DexBackedArrayEncodedValue; +import org.jf.dexlib2.util.AnnotatedBytes; +import org.jf.dexlib2.util.EncodedValueUtils; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.io.IOException; +import java.io.StringWriter; + +public class CallSiteIdItem { + public static final int ITEM_SIZE = 4; + + @Nonnull + public static SectionAnnotator makeAnnotator(@Nonnull DexAnnotator annotator, @Nonnull MapItem mapItem) { + return new SectionAnnotator(annotator, mapItem) { + @Nonnull @Override public String getItemName() { + return "call_site_id_item"; + } + + @Override + protected void annotateItem(@Nonnull AnnotatedBytes out, int itemIndex, @Nullable String itemIdentity) { + int callSiteOffset = dexFile.readSmallUint(out.getCursor()); + + StringWriter writer = new StringWriter(); + try { + EncodedValueUtils.writeEncodedValue(writer, + new DexBackedArrayEncodedValue(new DexReader(dexFile, callSiteOffset))); + } catch (IOException ex) { + // Shouldn't get an IOException from a StringWriter.. + throw new RuntimeException(ex); + } + + out.annotate(4, "call_site_id_item[0x%x] = %s", callSiteOffset, writer.toString()); + } + }; + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/EncodedValue.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/EncodedValue.java index 29851c41..e484251f 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/EncodedValue.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/EncodedValue.java @@ -31,11 +31,15 @@ package org.jf.dexlib2.dexbacked.raw; +import org.jf.dexlib2.ValueType; import org.jf.dexlib2.dexbacked.DexReader; +import org.jf.dexlib2.dexbacked.value.DexBackedEncodedValue; import org.jf.dexlib2.util.AnnotatedBytes; -import org.jf.util.ExceptionWithContext; +import org.jf.dexlib2.util.EncodedValueUtils; import javax.annotation.Nonnull; +import java.io.IOException; +import java.io.StringWriter; public class EncodedValue { public static void annotateEncodedValue(@Nonnull AnnotatedBytes out, @Nonnull DexReader reader) { @@ -45,84 +49,42 @@ public class EncodedValue { int valueType = valueArgType & 0x1f; switch (valueType) { - case 0x00: - out.annotate(1, "valueArg = %d, valueType = 0x%x: byte", valueArg, valueType); - int intValue = reader.readByte(); - out.annotate(1, "value = 0x%x", intValue); - break; - case 0x02: - out.annotate(1, "valueArg = %d, valueType = 0x%x: short", valueArg, valueType); - intValue = reader.readSizedInt(valueArg+1); - out.annotate(valueArg + 1, "value = 0x%x", intValue); - break; - case 0x03: - out.annotate(1, "valueArg = %d, valueType = 0x%x: char", valueArg, valueType); - intValue = reader.readSizedSmallUint(valueArg+1); - out.annotate(valueArg+1, "value = 0x%x", intValue); - break; - case 0x04: - out.annotate(1, "valueArg = %d, valueType = 0x%x: int", valueArg, valueType); - intValue = reader.readSizedInt(valueArg+1); - out.annotate(valueArg+1, "value = 0x%x", intValue); - break; - case 0x06: - out.annotate(1, "valueArg = %d, valueType = 0x%x: long", valueArg, valueType); - long longValue = reader.readSizedLong(valueArg+1); - out.annotate(valueArg+1, "value = 0x%x", longValue); - break; - case 0x10: - out.annotate(1, "valueArg = %d, valueType = 0x%x: float", valueArg, valueType); - float floatValue = Float.intBitsToFloat(reader.readSizedRightExtendedInt(valueArg + 1)); - out.annotate(valueArg+1, "value = %f", floatValue); - break; - case 0x11: - out.annotate(1, "valueArg = %d, valueType = 0x%x: double", valueArg, valueType); - double doubleValue = Double.longBitsToDouble(reader.readSizedRightExtendedLong(valueArg + 1)); - out.annotate(valueArg+1, "value = %f", doubleValue); - break; - case 0x17: - out.annotate(1, "valueArg = %d, valueType = 0x%x: string", valueArg, valueType); - int stringIndex = reader.readSizedSmallUint(valueArg + 1); - out.annotate(valueArg+1, "value = %s", - StringIdItem.getReferenceAnnotation(reader.dexBuf, stringIndex, true)); - break; - case 0x18: - out.annotate(1, "valueArg = %d, valueType = 0x%x: type", valueArg, valueType); - int typeIndex = reader.readSizedSmallUint(valueArg+1); - out.annotate(valueArg+1, "value = %s", TypeIdItem.getReferenceAnnotation(reader.dexBuf, typeIndex)); - break; - case 0x19: - out.annotate(1, "valueArg = %d, valueType = 0x%x: field", valueArg, valueType); - int fieldIndex = reader.readSizedSmallUint(valueArg+1); - out.annotate(valueArg+1, "value = %s", FieldIdItem.getReferenceAnnotation(reader.dexBuf, fieldIndex)); - break; - case 0x1a: - out.annotate(1, "valueArg = %d, valueType = 0x%x: method", valueArg, valueType); - int methodIndex = reader.readSizedSmallUint(valueArg+1); - out.annotate(valueArg+1, "value = %s", MethodIdItem.getReferenceAnnotation(reader.dexBuf, methodIndex)); - break; - case 0x1b: - out.annotate(1, "valueArg = %d, valueType = 0x%x: enum", valueArg, valueType); - fieldIndex = reader.readSizedSmallUint(valueArg+1); - out.annotate(valueArg+1, "value = %s", FieldIdItem.getReferenceAnnotation(reader.dexBuf, fieldIndex)); - break; - case 0x1c: + case ValueType.BYTE: + case ValueType.SHORT: + case ValueType.CHAR: + case ValueType.INT: + case ValueType.LONG: + case ValueType.FLOAT: + case ValueType.DOUBLE: + case ValueType.METHOD_TYPE: + case ValueType.METHOD_HANDLE: + case ValueType.STRING: + case ValueType.TYPE: + case ValueType.FIELD: + case ValueType.METHOD: + case ValueType.ENUM: + out.annotate(1, "valueArg = %d, valueType = 0x%x: %s", valueArg, valueType, + ValueType.getValueTypeName(valueType)); + reader.setOffset(reader.getOffset() - 1); + out.annotate(valueArg + 1, "value = %s", asString(reader)); + break; + case ValueType.ARRAY: out.annotate(1, "valueArg = %d, valueType = 0x%x: array", valueArg, valueType); annotateEncodedArray(out, reader); break; - case 0x1d: + case ValueType.ANNOTATION: out.annotate(1, "valueArg = %d, valueType = 0x%x: annotation", valueArg, valueType); annotateEncodedAnnotation(out, reader); break; - case 0x1e: + case ValueType.NULL: out.annotate(1, "valueArg = %d, valueType = 0x%x: null", valueArg, valueType); break; - case 0x1f: + case ValueType.BOOLEAN: out.annotate(1, "valueArg = %d, valueType = 0x%x: boolean, value=%s", valueArg, valueType, valueArg==1); break; default: - throw new ExceptionWithContext("Invalid encoded value type 0x%x at offset 0x%x", valueType, - out.getCursor()); + throw new IllegalArgumentException(String.format("Invalid encoded value type 0x%x at offset 0x%x", valueType, + reader.getOffset())); } } @@ -164,4 +126,72 @@ public class EncodedValue { out.deindent(); } } + + public static String asString(@Nonnull DexReader reader) { + int valueArgType = reader.readUbyte(); + + int valueArg = valueArgType >>> 5; + int valueType = valueArgType & 0x1f; + + switch (valueType) { + case ValueType.BYTE: + int intValue = reader.readByte(); + return String.format("0x%x", intValue); + case ValueType.SHORT: + intValue = reader.readSizedInt(valueArg+1); + return String.format("0x%x", intValue); + case ValueType.CHAR: + intValue = reader.readSizedSmallUint(valueArg+1); + return String.format("0x%x", intValue); + case ValueType.INT: + intValue = reader.readSizedInt(valueArg+1); + return String.format("0x%x", intValue); + case ValueType.LONG: + long longValue = reader.readSizedLong(valueArg+1); + return String.format("0x%x", longValue); + case ValueType.FLOAT: + float floatValue = Float.intBitsToFloat(reader.readSizedRightExtendedInt(valueArg + 1)); + return String.format("%f", floatValue); + case ValueType.DOUBLE: + double doubleValue = Double.longBitsToDouble(reader.readSizedRightExtendedLong(valueArg + 1)); + return String.format("%f", doubleValue); + case ValueType.METHOD_TYPE: + int protoIndex = reader.readSizedSmallUint(valueArg + 1); + return ProtoIdItem.getReferenceAnnotation(reader.dexBuf, protoIndex); + case ValueType.STRING: + int stringIndex = reader.readSizedSmallUint(valueArg + 1); + return StringIdItem.getReferenceAnnotation(reader.dexBuf, stringIndex, true); + case ValueType.TYPE: + int typeIndex = reader.readSizedSmallUint(valueArg+1); + return TypeIdItem.getReferenceAnnotation(reader.dexBuf, typeIndex); + case ValueType.FIELD: + int fieldIndex = reader.readSizedSmallUint(valueArg+1); + return FieldIdItem.getReferenceAnnotation(reader.dexBuf, fieldIndex); + case ValueType.METHOD: + int methodIndex = reader.readSizedSmallUint(valueArg+1); + return MethodIdItem.getReferenceAnnotation(reader.dexBuf, methodIndex); + case ValueType.ENUM: + fieldIndex = reader.readSizedSmallUint(valueArg+1); + return FieldIdItem.getReferenceAnnotation(reader.dexBuf, fieldIndex); + case ValueType.ARRAY: + case ValueType.ANNOTATION: + case ValueType.METHOD_HANDLE: + StringWriter writer = new StringWriter(); + reader.setOffset(reader.getOffset() - 1); + try { + EncodedValueUtils.writeEncodedValue(writer, DexBackedEncodedValue.readFrom(reader)); + } catch (IOException ex) { + // Shouldn't happen with a StringWriter... + throw new RuntimeException(ex); + } + return writer.toString(); + case ValueType.NULL: + return "null"; + case ValueType.BOOLEAN: + return Boolean.toString(valueArg == 1); + default: + throw new IllegalArgumentException(String.format("Invalid encoded value type 0x%x at offset 0x%x", + valueType, reader.getOffset())); + } + } } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/HeaderItem.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/HeaderItem.java index e8db9698..619357aa 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/HeaderItem.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/HeaderItem.java @@ -31,6 +31,7 @@ package org.jf.dexlib2.dexbacked.raw; +import org.jf.dexlib2.VersionMap; import org.jf.dexlib2.dexbacked.BaseDexBuffer; import org.jf.dexlib2.dexbacked.raw.util.DexAnnotator; import org.jf.dexlib2.util.AnnotatedBytes; @@ -43,7 +44,6 @@ public class HeaderItem { public static final int ITEM_SIZE = 0x70; private static final byte[] MAGIC_VALUE = new byte[] { 0x64, 0x65, 0x78, 0x0a, 0x00, 0x00, 0x00, 0x00 }; - private static final int[] SUPPORTED_DEX_VERSIONS = new int[] { 35, 37, 38 }; public static final int LITTLE_ENDIAN_TAG = 0x12345678; public static final int BIG_ENDIAN_TAG = 0x78563412; @@ -229,16 +229,7 @@ public class HeaderItem { * @return The dex file magic number */ public static byte[] getMagicForApi(int api) { - if (api < 24) { - // Prior to Android N we only support dex version 035. - return getMagicForDexVersion(35); - } else if (api < 26) { - // On android N and later we support dex version 037. - return getMagicForDexVersion(37); - } else { - // On android O and later we support dex version 038. - return getMagicForDexVersion(38); - } + return getMagicForDexVersion(VersionMap.mapApiToDexVersion(api)); } public static byte[] getMagicForDexVersion(int dexVersion) { @@ -272,8 +263,8 @@ public class HeaderItem { for (int i=0; i<4; i++) { if (buf[offset + i] != MAGIC_VALUE[i]) { return false; - } } + } for (int i=4; i<7; i++) { if (buf[offset + i] < '0' || buf[offset + i] > '9') { @@ -282,7 +273,7 @@ public class HeaderItem { } if (buf[offset + 7] != MAGIC_VALUE[7]) { return false; - } + } return true; } @@ -311,12 +302,7 @@ public class HeaderItem { } public static boolean isSupportedDexVersion(int version) { - for (int i=0; i<SUPPORTED_DEX_VERSIONS.length; i++) { - if (SUPPORTED_DEX_VERSIONS[i] == version) { - return true; - } - } - return false; + return VersionMap.mapDexVersionToApi(version) != VersionMap.NO_VERSION; } public static int getEndian(byte[] buf, int offset) { diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/ItemType.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/ItemType.java index c7c8ed3a..99564a3e 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/ItemType.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/ItemType.java @@ -41,6 +41,8 @@ public class ItemType { public static final int FIELD_ID_ITEM = 0x0004; public static final int METHOD_ID_ITEM = 0x0005; public static final int CLASS_DEF_ITEM = 0x0006; + public static final int CALL_SITE_ID_ITEM = 0x0007; + public static final int METHOD_HANDLE_ITEM = 0x0008; public static final int MAP_LIST = 0x1000; public static final int TYPE_LIST = 0x1001; public static final int ANNOTATION_SET_REF_LIST = 0x1002; @@ -63,6 +65,8 @@ public class ItemType { case FIELD_ID_ITEM: return "field_id_item"; case METHOD_ID_ITEM: return "method_id_item"; case CLASS_DEF_ITEM: return "class_def_item"; + case CALL_SITE_ID_ITEM: return "call_site_id_item"; + case METHOD_HANDLE_ITEM: return "method_handle_item"; case MAP_LIST: return "map_list"; case TYPE_LIST: return "type_list"; case ANNOTATION_SET_REF_LIST: return "annotation_set_ref_list"; diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/MethodHandleItem.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/MethodHandleItem.java new file mode 100644 index 00000000..eced8e25 --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/MethodHandleItem.java @@ -0,0 +1,89 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.dexbacked.raw; + +import org.jf.dexlib2.MethodHandleType; +import org.jf.dexlib2.dexbacked.raw.util.DexAnnotator; +import org.jf.dexlib2.util.AnnotatedBytes; +import org.jf.util.ExceptionWithContext; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +public class MethodHandleItem { + public static final int ITEM_SIZE = 8; + + public static final int METHOD_HANDLE_TYPE_OFFSET = 0; + public static final int MEMBER_ID_OFFSET = 4; + + @Nonnull + public static SectionAnnotator makeAnnotator(@Nonnull DexAnnotator annotator, @Nonnull MapItem mapItem) { + return new SectionAnnotator(annotator, mapItem) { + @Nonnull @Override public String getItemName() { + return "method_handle_item"; + } + + @Override + protected void annotateItem(@Nonnull AnnotatedBytes out, int itemIndex, @Nullable String itemIdentity) { + int methodHandleType = dexFile.readUshort(out.getCursor()); + out.annotate(2, "type = %s", MethodHandleType.toString(methodHandleType)); + out.annotate(2, "unused"); + + int fieldOrMethodId = dexFile.readUshort(out.getCursor()); + String fieldOrMethodDescriptor; + switch (methodHandleType) { + case MethodHandleType.STATIC_PUT: + case MethodHandleType.STATIC_GET: + case MethodHandleType.INSTANCE_PUT: + case MethodHandleType.INSTANCE_GET: + fieldOrMethodDescriptor = FieldIdItem.getReferenceAnnotation(dexFile, fieldOrMethodId); + break; + case MethodHandleType.INVOKE_STATIC: + case MethodHandleType.INVOKE_INSTANCE: + case MethodHandleType.INVOKE_CONSTRUCTOR: + case MethodHandleType.INVOKE_DIRECT: + case MethodHandleType.INVOKE_INTERFACE: + fieldOrMethodDescriptor = MethodIdItem.getReferenceAnnotation(dexFile, fieldOrMethodId); + break; + default: + throw new ExceptionWithContext("Invalid method handle type: %d", methodHandleType); + } + + out.annotate(2, "field_or_method_id = %s", fieldOrMethodDescriptor); + out.annotate(2, "unused"); + } + }; + } + + + +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/RawDexFile.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/RawDexFile.java index 204a29d8..33570635 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/RawDexFile.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/RawDexFile.java @@ -34,15 +34,12 @@ package org.jf.dexlib2.dexbacked.raw; import org.jf.dexlib2.Opcodes; import org.jf.dexlib2.dexbacked.BaseDexBuffer; import org.jf.dexlib2.dexbacked.DexBackedDexFile; -import org.jf.dexlib2.dexbacked.util.FixedSizeList; import org.jf.dexlib2.util.AnnotatedBytes; import javax.annotation.Nonnull; -import javax.annotation.Nullable; import java.io.IOException; import java.io.Writer; import java.util.Arrays; -import java.util.List; public class RawDexFile extends DexBackedDexFile { @Nonnull public final HeaderItem headerItem; @@ -62,37 +59,6 @@ public class RawDexFile extends DexBackedDexFile { return Arrays.copyOfRange(getBuf(), getBaseOffset() + start, getBaseOffset() + start + length); } - public int getMapOffset() { - return headerItem.getMapOffset(); - } - - @Nullable - public MapItem getMapItemForSection(int itemType) { - for (MapItem mapItem: getMapItems()) { - if (mapItem.getType() == itemType) { - return mapItem; - } - } - return null; - } - - public List<MapItem> getMapItems() { - final int mapOffset = getMapOffset(); - final int mapSize = readSmallUint(mapOffset); - - return new FixedSizeList<MapItem>() { - @Override - public MapItem readItem(int index) { - int mapItemOffset = mapOffset + 4 + index * MapItem.ITEM_SIZE; - return new MapItem(RawDexFile.this, mapItemOffset); - } - - @Override public int size() { - return mapSize; - } - }; - } - public void writeAnnotations(@Nonnull Writer out, @Nonnull AnnotatedBytes annotatedBytes) throws IOException { // TODO: need to pass in the offset annotatedBytes.writeAnnotations(out, getBuf()); diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/SectionAnnotator.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/SectionAnnotator.java index 5378845b..e8da146c 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/SectionAnnotator.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/SectionAnnotator.java @@ -34,7 +34,7 @@ package org.jf.dexlib2.dexbacked.raw; import com.google.common.collect.Maps; import org.jf.dexlib2.dexbacked.raw.util.DexAnnotator; import org.jf.dexlib2.util.AnnotatedBytes; -import org.jf.util.AlignmentUtils; +import org.jf.dexlib2.util.AlignmentUtils; import javax.annotation.Nonnull; import javax.annotation.Nullable; diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/util/DexAnnotator.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/util/DexAnnotator.java index c2e0c9ca..9ce22262 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/util/DexAnnotator.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/util/DexAnnotator.java @@ -61,6 +61,8 @@ public class DexAnnotator extends AnnotatedBytes { ItemType.PROTO_ID_ITEM, ItemType.FIELD_ID_ITEM, ItemType.METHOD_ID_ITEM, + ItemType.CALL_SITE_ID_ITEM, + ItemType.METHOD_HANDLE_ITEM, // these need to be ordered like this, so the item identities can be propagated ItemType.CLASS_DEF_ITEM, @@ -143,6 +145,12 @@ public class DexAnnotator extends AnnotatedBytes { case ItemType.ANNOTATION_DIRECTORY_ITEM: annotators.put(mapItem.getType(), AnnotationDirectoryItem.makeAnnotator(this, mapItem)); break; + case ItemType.CALL_SITE_ID_ITEM: + annotators.put(mapItem.getType(), CallSiteIdItem.makeAnnotator(this, mapItem)); + break; + case ItemType.METHOD_HANDLE_ITEM: + annotators.put(mapItem.getType(), MethodHandleItem.makeAnnotator(this, mapItem)); + break; default: throw new RuntimeException(String.format("Unrecognized item type: 0x%x", mapItem.getType())); } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/reference/DexBackedCallSiteReference.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/reference/DexBackedCallSiteReference.java new file mode 100644 index 00000000..9e825d69 --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/reference/DexBackedCallSiteReference.java @@ -0,0 +1,160 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.dexbacked.reference; + +import com.google.common.collect.Lists; +import org.jf.dexlib2.ValueType; +import org.jf.dexlib2.base.reference.BaseCallSiteReference; +import org.jf.dexlib2.dexbacked.DexBackedDexFile; +import org.jf.dexlib2.dexbacked.util.EncodedArrayItemIterator; +import org.jf.dexlib2.iface.reference.MethodHandleReference; +import org.jf.dexlib2.iface.reference.MethodProtoReference; +import org.jf.dexlib2.iface.value.EncodedValue; +import org.jf.dexlib2.iface.value.MethodHandleEncodedValue; +import org.jf.dexlib2.iface.value.MethodTypeEncodedValue; +import org.jf.dexlib2.iface.value.StringEncodedValue; +import org.jf.util.ExceptionWithContext; + +import javax.annotation.Nonnull; +import java.util.List; + +public class DexBackedCallSiteReference extends BaseCallSiteReference { + @Nonnull public final DexBackedDexFile dexFile; + public final int callSiteIndex; + public final int callSiteIdOffset; + private int callSiteOffset = -1; + + public DexBackedCallSiteReference(DexBackedDexFile dexFile, int callSiteIndex) { + this.dexFile = dexFile; + this.callSiteIndex = callSiteIndex; + this.callSiteIdOffset = dexFile.getCallSiteIdItemOffset(callSiteIndex); + } + + @Nonnull + @Override + public String getName() { + return String.format("call_site_%d", callSiteIndex); + } + + @Nonnull + @Override + public MethodHandleReference getMethodHandle() { + EncodedArrayItemIterator iter = getCallSiteIterator(); + if (iter.getItemCount() < 3) { + throw new ExceptionWithContext("Invalid call site item: must contain at least 3 entries."); + } + + EncodedValue encodedValue = getCallSiteIterator().getNextOrNull(); + assert encodedValue != null; + if (encodedValue.getValueType() != ValueType.METHOD_HANDLE) { + throw new ExceptionWithContext( + "Invalid encoded value type (%d) for the first item in call site %d", + encodedValue.getValueType(), callSiteIndex); + } + return ((MethodHandleEncodedValue) encodedValue).getValue(); + } + + @Nonnull + @Override + public String getMethodName() { + EncodedArrayItemIterator iter = getCallSiteIterator(); + if (iter.getItemCount() < 3) { + throw new ExceptionWithContext("Invalid call site item: must contain at least 3 entries."); + } + + iter.skipNext(); + EncodedValue encodedValue = iter.getNextOrNull(); + assert encodedValue != null; + if (encodedValue.getValueType() != ValueType.STRING) { + throw new ExceptionWithContext( + "Invalid encoded value type (%d) for the second item in call site %d", + encodedValue.getValueType(), callSiteIndex); + } + return ((StringEncodedValue) encodedValue).getValue(); + } + + @Nonnull + @Override + public MethodProtoReference getMethodProto() { + EncodedArrayItemIterator iter = getCallSiteIterator(); + if (iter.getItemCount() < 3) { + throw new ExceptionWithContext("Invalid call site item: must contain at least 3 entries."); + } + + iter.skipNext(); + iter.skipNext(); + EncodedValue encodedValue = iter.getNextOrNull(); + assert encodedValue != null; + if (encodedValue.getValueType() != ValueType.METHOD_TYPE) { + throw new ExceptionWithContext( + "Invalid encoded value type (%d) for the second item in call site %d", + encodedValue.getValueType(), callSiteIndex); + } + return ((MethodTypeEncodedValue) encodedValue).getValue(); + } + + @Nonnull + @Override + public List<? extends EncodedValue> getExtraArguments() { + List<EncodedValue> values = Lists.newArrayList(); + + EncodedArrayItemIterator iter = getCallSiteIterator(); + if (iter.getItemCount() < 3) { + throw new ExceptionWithContext("Invalid call site item: must contain at least 3 entries."); + } + if (iter.getItemCount() == 3) { + return values; + } + + iter.skipNext(); + iter.skipNext(); + iter.skipNext(); + + EncodedValue item = iter.getNextOrNull(); + while (item != null) { + values.add(item); + item = iter.getNextOrNull(); + } + return values; + } + + private EncodedArrayItemIterator getCallSiteIterator() { + return EncodedArrayItemIterator.newOrEmpty(dexFile, getCallSiteOffset()); + } + + private int getCallSiteOffset() { + if (callSiteOffset < 0) { + callSiteOffset = dexFile.readSmallUint(callSiteIdOffset); + } + return callSiteOffset; + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/reference/DexBackedMethodHandleReference.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/reference/DexBackedMethodHandleReference.java new file mode 100644 index 00000000..11bb33bb --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/reference/DexBackedMethodHandleReference.java @@ -0,0 +1,79 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.dexbacked.reference; + +import org.jf.dexlib2.MethodHandleType; +import org.jf.dexlib2.base.reference.BaseMethodHandleReference; +import org.jf.dexlib2.dexbacked.DexBackedDexFile; +import org.jf.dexlib2.dexbacked.raw.MethodHandleItem; +import org.jf.dexlib2.iface.reference.Reference; +import org.jf.util.ExceptionWithContext; + +import javax.annotation.Nonnull; + +public class DexBackedMethodHandleReference extends BaseMethodHandleReference { + @Nonnull public final DexBackedDexFile dexFile; + public final int methodHandleIndex; + public final int methodHandleOffset; + + public DexBackedMethodHandleReference(DexBackedDexFile dexFile, int methodHandleIndex) { + this.dexFile = dexFile; + this.methodHandleIndex = methodHandleIndex; + this.methodHandleOffset = dexFile.getMethodHandleItemOffset(methodHandleIndex); + } + + @Override + public int getMethodHandleType() { + return dexFile.readUshort(methodHandleOffset + MethodHandleItem.METHOD_HANDLE_TYPE_OFFSET); + } + + @Nonnull + @Override + public Reference getMemberReference() { + int memberIndex = dexFile.readUshort(methodHandleOffset + MethodHandleItem.MEMBER_ID_OFFSET); + switch (getMethodHandleType()) { + case MethodHandleType.STATIC_PUT: + case MethodHandleType.STATIC_GET: + case MethodHandleType.INSTANCE_PUT: + case MethodHandleType.INSTANCE_GET: + return new DexBackedFieldReference(dexFile, memberIndex); + case MethodHandleType.INVOKE_STATIC: + case MethodHandleType.INVOKE_INSTANCE: + case MethodHandleType.INVOKE_CONSTRUCTOR: + case MethodHandleType.INVOKE_DIRECT: + case MethodHandleType.INVOKE_INTERFACE: + return new DexBackedMethodReference(dexFile, memberIndex); + default: + throw new ExceptionWithContext("Invalid method handle type: %d", getMethodHandleType()); + } + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/reference/DexBackedMethodReference.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/reference/DexBackedMethodReference.java index f2b0b597..bee08f8c 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/reference/DexBackedMethodReference.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/reference/DexBackedMethodReference.java @@ -102,15 +102,11 @@ public class DexBackedMethodReference extends BaseMethodReference { /** * Calculate and return the private size of a method reference. * - * Calculated as: class_idx + proto_idx + name_idx + prototype size + * Calculated as: class_idx + proto_idx + name_idx * * @return size in bytes */ public int getSize() { - int size = MethodIdItem.ITEM_SIZE; //ushort + ushort + uint for indices - DexBackedMethodProtoReference protoRef = new DexBackedMethodProtoReference(dexFile, - dexFile.readUshort(methodIdItemOffset + MethodIdItem.PROTO_OFFSET)); - size += protoRef.getSize(); - return size; + return MethodIdItem.ITEM_SIZE; //ushort + ushort + uint for indices } } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/reference/DexBackedReference.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/reference/DexBackedReference.java index 99d66ecd..9da2830a 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/reference/DexBackedReference.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/reference/DexBackedReference.java @@ -51,6 +51,10 @@ public abstract class DexBackedReference { return new DexBackedFieldReference(dexFile, referenceIndex); case ReferenceType.METHOD_PROTO: return new DexBackedMethodProtoReference(dexFile, referenceIndex); + case ReferenceType.METHOD_HANDLE: + return new DexBackedMethodHandleReference(dexFile, referenceIndex); + case ReferenceType.CALL_SITE: + return new DexBackedCallSiteReference(dexFile, referenceIndex); default: throw new ExceptionWithContext("Invalid reference type: %d", referenceType); } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/util/StaticInitialValueIterator.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/util/EncodedArrayItemIterator.java index f17b938a..ac18b6d9 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/util/StaticInitialValueIterator.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/util/EncodedArrayItemIterator.java @@ -39,31 +39,33 @@ import org.jf.dexlib2.iface.value.EncodedValue; import javax.annotation.Nonnull; import javax.annotation.Nullable; -public abstract class StaticInitialValueIterator { - public static final StaticInitialValueIterator EMPTY = new StaticInitialValueIterator() { +public abstract class EncodedArrayItemIterator { + public static final EncodedArrayItemIterator EMPTY = new EncodedArrayItemIterator() { @Nullable @Override public EncodedValue getNextOrNull() { return null; } @Override public void skipNext() {} @Override public int getReaderOffset() { return 0; } + @Override public int getItemCount() { return 0; } }; @Nullable public abstract EncodedValue getNextOrNull(); public abstract void skipNext(); public abstract int getReaderOffset(); + public abstract int getItemCount(); @Nonnull - public static StaticInitialValueIterator newOrEmpty(@Nonnull DexBackedDexFile dexFile, int offset) { + public static EncodedArrayItemIterator newOrEmpty(@Nonnull DexBackedDexFile dexFile, int offset) { if (offset == 0) { return EMPTY; } - return new StaticInitialValueIteratorImpl(dexFile, offset); + return new EncodedArrayItemIteratorImpl(dexFile, offset); } - private static class StaticInitialValueIteratorImpl extends StaticInitialValueIterator { + private static class EncodedArrayItemIteratorImpl extends EncodedArrayItemIterator { @Nonnull private final DexReader reader; private final int size; private int index = 0; - public StaticInitialValueIteratorImpl(@Nonnull DexBackedDexFile dexFile, int offset) { + public EncodedArrayItemIteratorImpl(@Nonnull DexBackedDexFile dexFile, int offset) { this.reader = dexFile.readerAt(offset); this.size = reader.readSmallUleb128(); } @@ -77,6 +79,7 @@ public abstract class StaticInitialValueIterator { return null; } + @Override public void skipNext() { if (index < size) { index++; @@ -84,8 +87,14 @@ public abstract class StaticInitialValueIterator { } } + @Override public int getReaderOffset() { return reader.getOffset(); } + + @Override + public int getItemCount() { + return size; + } } } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/value/DexBackedEncodedValue.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/value/DexBackedEncodedValue.java index 1e89781b..1f2b3e0f 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/value/DexBackedEncodedValue.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/value/DexBackedEncodedValue.java @@ -101,6 +101,12 @@ public abstract class DexBackedEncodedValue { case ValueType.BOOLEAN: Preconditions.checkValueArg(valueArg, 1); return ImmutableBooleanEncodedValue.forBoolean(valueArg == 1); + case ValueType.METHOD_HANDLE: + Preconditions.checkValueArg(valueArg, 3); + return new DexBackedMethodHandleEncodedValue(reader, valueArg); + case ValueType.METHOD_TYPE: + Preconditions.checkValueArg(valueArg, 3); + return new DexBackedMethodTypeEncodedValue(reader, valueArg); default: throw new ExceptionWithContext("Invalid encoded_value type: 0x%x", valueType); } @@ -131,6 +137,8 @@ public abstract class DexBackedEncodedValue { case ValueType.FIELD: case ValueType.METHOD: case ValueType.ENUM: + case ValueType.METHOD_HANDLE: + case ValueType.METHOD_TYPE: int valueArg = b >>> 5; reader.moveRelative(valueArg+1); break; diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/value/DexBackedMethodEncodedValue.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/value/DexBackedMethodEncodedValue.java index a0941ce3..0dafdce0 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/value/DexBackedMethodEncodedValue.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/value/DexBackedMethodEncodedValue.java @@ -41,14 +41,14 @@ import javax.annotation.Nonnull; public class DexBackedMethodEncodedValue extends BaseMethodEncodedValue { @Nonnull public final DexBackedDexFile dexFile; - private final int MethodIndex; + private final int methodIndex; public DexBackedMethodEncodedValue(@Nonnull DexReader reader, int valueArg) { this.dexFile = reader.dexBuf; - MethodIndex = reader.readSizedSmallUint(valueArg + 1); + methodIndex = reader.readSizedSmallUint(valueArg + 1); } @Nonnull @Override public MethodReference getValue() { - return new DexBackedMethodReference(dexFile, MethodIndex); + return new DexBackedMethodReference(dexFile, methodIndex); } } diff --git a/util/src/test/java/org/jf/util/TextUtilsTest.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/value/DexBackedMethodHandleEncodedValue.java index ef14e03a..32740d11 100644 --- a/util/src/test/java/org/jf/util/TextUtilsTest.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/value/DexBackedMethodHandleEncodedValue.java @@ -1,5 +1,5 @@ /* - * Copyright 2015, Google Inc. + * Copyright 2018, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -29,25 +29,28 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package org.jf.util; +package org.jf.dexlib2.dexbacked.value; -import org.junit.Assert; -import org.junit.Test; +import org.jf.dexlib2.base.value.BaseMethodHandleEncodedValue; +import org.jf.dexlib2.dexbacked.DexBackedDexFile; +import org.jf.dexlib2.dexbacked.DexReader; +import org.jf.dexlib2.dexbacked.reference.DexBackedMethodHandleReference; +import org.jf.dexlib2.iface.reference.MethodHandleReference; -public class TextUtilsTest { - @Test - public void testStripComments() { - Assert.assertEquals("", TextUtils.stripComments("#world")); - Assert.assertEquals("hello", TextUtils.stripComments("hello#world")); - Assert.assertEquals("multi\nline", TextUtils.stripComments("multi#hello world\nline#world")); +import javax.annotation.Nonnull; + +public class DexBackedMethodHandleEncodedValue extends BaseMethodHandleEncodedValue { + @Nonnull public final DexBackedDexFile dexFile; + private final int methodHandleIndex; + + public DexBackedMethodHandleEncodedValue(@Nonnull DexReader reader, int valueArg) { + this.dexFile = reader.dexBuf; + this.methodHandleIndex = reader.readSizedSmallUint(valueArg + 1); } - @Test - public void testNormalizeWhitespace() { - Assert.assertEquals("", TextUtils.normalizeWhitespace(" ")); - Assert.assertEquals("hello", TextUtils.normalizeWhitespace("hello ")); - Assert.assertEquals("hello", TextUtils.normalizeWhitespace(" hello")); - Assert.assertEquals("hello", TextUtils.normalizeWhitespace(" hello ")); - Assert.assertEquals("hello\nworld", TextUtils.normalizeWhitespace("hello \n \n world")); + @Nonnull + @Override + public MethodHandleReference getValue() { + return new DexBackedMethodHandleReference(dexFile, methodHandleIndex); } -}
\ No newline at end of file +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/value/DexBackedMethodTypeEncodedValue.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/value/DexBackedMethodTypeEncodedValue.java new file mode 100644 index 00000000..c9d170bd --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/value/DexBackedMethodTypeEncodedValue.java @@ -0,0 +1,56 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.dexbacked.value; + +import org.jf.dexlib2.base.value.BaseMethodTypeEncodedValue; +import org.jf.dexlib2.dexbacked.DexBackedDexFile; +import org.jf.dexlib2.dexbacked.DexReader; +import org.jf.dexlib2.dexbacked.reference.DexBackedMethodProtoReference; +import org.jf.dexlib2.iface.reference.MethodProtoReference; + +import javax.annotation.Nonnull; + +public class DexBackedMethodTypeEncodedValue extends BaseMethodTypeEncodedValue { + @Nonnull public final DexBackedDexFile dexFile; + private final int methodProtoIndex; + + public DexBackedMethodTypeEncodedValue(@Nonnull DexReader reader, int valueArg) { + this.dexFile = reader.dexBuf; + this.methodProtoIndex = reader.readSizedSmallUint(valueArg + 1); + } + + @Nonnull + @Override + public MethodProtoReference getValue() { + return new DexBackedMethodProtoReference(dexFile, methodProtoIndex); + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/iface/MultiDexContainer.java b/dexlib2/src/main/java/org/jf/dexlib2/iface/MultiDexContainer.java index 6c4e769a..251ecdef 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/iface/MultiDexContainer.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/iface/MultiDexContainer.java @@ -31,8 +31,6 @@ package org.jf.dexlib2.iface; -import org.jf.dexlib2.Opcodes; - import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.io.IOException; @@ -56,11 +54,6 @@ public interface MultiDexContainer<T extends DexFile> { @Nullable T getEntry(@Nonnull String entryName) throws IOException; /** - * @return the Opcodes instance associated with this MultiDexContainer - */ - @Nonnull Opcodes getOpcodes(); - - /** * This class represents a dex file that is contained in a MultiDexContainer */ interface MultiDexFile extends DexFile { diff --git a/dexlib2/src/main/java/org/jf/dexlib2/iface/reference/CallSiteReference.java b/dexlib2/src/main/java/org/jf/dexlib2/iface/reference/CallSiteReference.java new file mode 100644 index 00000000..d3444afd --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/iface/reference/CallSiteReference.java @@ -0,0 +1,109 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.iface.reference; + +import org.jf.dexlib2.iface.value.EncodedValue; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.List; + +/** + * This class represents a reference to a call site + */ +public interface CallSiteReference extends Reference { + + /** + * Gets a name for this call site. + * + * This is an arbitrary synthetic string that serves to differentiate call sites that would otherwise be identical. + * + * It can be any arbitrary string, with the only requirement being that 2 different, but otherwise identical call + * sites in the same dex file must not share the same name. Multiple non-identical call sites may use the same name + * however. + * + * @return The name for this call site. + */ + @Nonnull String getName(); + + /** + * Gets a reference to a method handle for the bootstrap linker method + * + * @return A MethodHandleReference to the bootstrap linker method + */ + @Nonnull MethodHandleReference getMethodHandle(); + + /** + * @return A method name that the bootstrap linker should resolve. + */ + @Nonnull String getMethodName(); + + /** + * @return A MethodProtoReference corresponding to the prototype of the method that the bootstrap linker should + * resolve + */ + @Nonnull MethodProtoReference getMethodProto(); + + /** + * @return A list of extra arguments to pass to the bootstrap linker + */ + @Nonnull List<? extends EncodedValue> getExtraArguments(); + + /** + * Returns a hashcode for this CallSiteReference. + * + * This hashCode is defined to be the following: + * + * <pre> + * {@code + * int hashCode = getName().hashCode(); + * hashCode = hashCode*31 + getMethodHandle().hashCode(); + * hashCode = hashCode*31 + getMethodName().hashCode(); + * hashCode = hashCode*31 + getMethodProto().hashCode(); + * hashCode = hashCode*31 + getExtraArguments().hashCode(); + * }</pre> + * + * @return The hash code value for this MethodReference + */ + @Override int hashCode(); + + /** + * Compares this CallSiteReference to another CallSiteReference for equality. + * + * This CallSiteReference is equal to another CallSiteReference if all of its fields are equal. That is, if + * the return values of getMethodHandle(), getMethodName(), getMethodProto() and getExtraArguments() are all equal. + * + * @param o The object to be compared for equality with this CallSiteReference + * @return true if the specified object is equal to this CallSiteReference + */ + @Override boolean equals(@Nullable Object o); +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/iface/reference/MethodHandleReference.java b/dexlib2/src/main/java/org/jf/dexlib2/iface/reference/MethodHandleReference.java new file mode 100644 index 00000000..f9e0f1ee --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/iface/reference/MethodHandleReference.java @@ -0,0 +1,91 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.iface.reference; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +/** + * This class represents a reference to a method handle + */ +public interface MethodHandleReference extends Reference, Comparable<MethodHandleReference> { + /** + * Gets the method handle type. + * + * @return One of the MethodHandleType values + */ + int getMethodHandleType(); + + /** + * Gets the member that is being referenced by this method handle. + * + * @return A MethodReference or FieldReference, depending on the method handle type + */ + @Nonnull Reference getMemberReference(); + + /** + * Returns a hashcode for this MethodHandleReference. + * + * This hashCode is defined to be the following: + * + * <pre> + * {@code + * int hashCode = getMethodHandleType(); + * hashCode = hashCode*31 + getMemberReference().hashCode(); + * }</pre> + * + * @return The hash code value for this MethodHandleReference + */ + @Override int hashCode(); + + /** + * Compares this MethodHandleReference to another MethodHandleReference for equality. + * + * This MethodHandleReference is equal to another MethodHandleReference if all of its fields are equal. That is, if + * the return values of getMethodHandleType() and getMemberReference() are all equal. + * + * @param o The object to be compared for equality with this MethodHandleReference + * @return true if the specified object is equal to this MethodHandleReference + */ + @Override boolean equals(@Nullable Object o); + + /** + * Compare this MethodHandleReference to another MethodHandleReference. + * + * The comparison is based on the comparison of the return values of getMethodHandleType() and getMemberReference() + * in that order. + * + * @param o The MethodHandleReference to compare with this MethodHandleReference + * @return An integer representing the result of the comparison + */ + @Override int compareTo(@Nonnull MethodHandleReference o); +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/iface/reference/MethodProtoReference.java b/dexlib2/src/main/java/org/jf/dexlib2/iface/reference/MethodProtoReference.java index e150c214..4adee37d 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/iface/reference/MethodProtoReference.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/iface/reference/MethodProtoReference.java @@ -69,9 +69,9 @@ public interface MethodProtoReference extends Reference, Comparable<MethodProtoR @Override int hashCode(); /** - * Compares this MethodTypeReference to another MethodProtoReference for equality. + * Compares this MethodProtoReference to another MethodProtoReference for equality. * - * This MethodTypeReference is equal to another MethodProtoReference if all of it's "fields" are equal. That is, if + * This MethodProtoReference is equal to another MethodProtoReference if all of it's "fields" are equal. That is, if * the return values of getReturnType() and getParameterTypes() are all equal. * * Equality for getParameters() should be tested by comparing the string representation of each element. I.e. @@ -83,7 +83,7 @@ public interface MethodProtoReference extends Reference, Comparable<MethodProtoR @Override boolean equals(@Nullable Object o); /** - * Compare this MethodTypeReference to another MethodProtoReference. + * Compare this MethodProtoReference to another MethodProtoReference. * * The comparison is based on the comparison of the return values of getReturnType() and getParameters(), * in that order. getParameters() should be compared using the semantics of diff --git a/dexlib2/src/main/java/org/jf/dexlib2/iface/value/MethodHandleEncodedValue.java b/dexlib2/src/main/java/org/jf/dexlib2/iface/value/MethodHandleEncodedValue.java new file mode 100644 index 00000000..d62a9d3f --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/iface/value/MethodHandleEncodedValue.java @@ -0,0 +1,85 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.iface.value; + +import org.jf.dexlib2.iface.reference.MethodHandleReference; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +/** + * This class represents an encoded method type value. + */ +public interface MethodHandleEncodedValue extends EncodedValue { + /** + * Gets the method handle value. + * + * @return the method handle value as a MethodHandleReference + */ + @Nonnull MethodHandleReference getValue(); + + /** + * Returns a hashcode for this MethodHandleEncodedValue. + * + * This hashCode is defined to be the following: + * + * <pre> + * {@code + * int hashCode = getValue.hashCode(); + * }</pre> + * + * @return The hash code value for this MethodHandleEncodedValue + */ + @Override int hashCode(); + + /** + * Compares this MethodHandleEncodedValue to another MethodHandleEncodedValue for equality. + * + * This MethodHandleEncodedValue is equal to another MethodHandleEncodedValue if the values returned by getValue() + * are equal. + * + * @param o The object to be compared for equality with this MethodHandleEncodedValue + * @return true if the specified object is equal to this MethodHandleEncodedValue + */ + @Override boolean equals(@Nullable Object o); + + /** + * Compare this MethodHandleEncodedValue to another EncodedValue. + * + * The comparison is first done on the return values of getValueType(). If the other value is another + * MethodHandleEncodedValue, the return values of getValue() are compared. + * + * @param o The EncodedValue to compare with this MethodHandleEncodedValue + * @return An integer representing the result of the comparison + */ + @Override int compareTo(@Nonnull EncodedValue o); +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/iface/value/MethodTypeEncodedValue.java b/dexlib2/src/main/java/org/jf/dexlib2/iface/value/MethodTypeEncodedValue.java new file mode 100644 index 00000000..bf64618c --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/iface/value/MethodTypeEncodedValue.java @@ -0,0 +1,85 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.iface.value; + +import org.jf.dexlib2.iface.reference.MethodProtoReference; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +/** + * This class represents an encoded method type value. + */ +public interface MethodTypeEncodedValue extends EncodedValue { + /** + * Gets the method type value. + * + * @return the method type value as a MethodProtoReference + */ + @Nonnull MethodProtoReference getValue(); + + /** + * Returns a hashcode for this MethodTypeEncodedValue. + * + * This hashCode is defined to be the following: + * + * <pre> + * {@code + * int hashCode = getValue.hashCode(); + * }</pre> + * + * @return The hash code value for this MethodTypeEncodedValue + */ + @Override int hashCode(); + + /** + * Compares this MethodTypeEncodedValue to another MethodTypeEncodedValue for equality. + * + * This MethodTypeEncodedValue is equal to another MethodTypeEncodedValue if the values returned by getValue() + * are equal. + * + * @param o The object to be compared for equality with this MethodTypeEncodedValue + * @return true if the specified object is equal to this MethodTypeEncodedValue + */ + @Override boolean equals(@Nullable Object o); + + /** + * Compare this MethodTypeEncodedValue to another EncodedValue. + * + * The comparison is first done on the return values of getValueType(). If the other value is another + * MethodTypeEncodedValue, the return values of getValue() are compared. + * + * @param o The EncodedValue to compare with this MethodTypeEncodedValue + * @return An integer representing the result of the comparison + */ + @Override int compareTo(@Nonnull EncodedValue o); +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/immutable/reference/ImmutableCallSiteReference.java b/dexlib2/src/main/java/org/jf/dexlib2/immutable/reference/ImmutableCallSiteReference.java new file mode 100644 index 00000000..8b3c17f4 --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/immutable/reference/ImmutableCallSiteReference.java @@ -0,0 +1,92 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.immutable.reference; + +import com.google.common.collect.ImmutableList; +import org.jf.dexlib2.base.reference.BaseCallSiteReference; +import org.jf.dexlib2.iface.reference.CallSiteReference; +import org.jf.dexlib2.iface.reference.MethodHandleReference; +import org.jf.dexlib2.iface.reference.MethodProtoReference; +import org.jf.dexlib2.iface.value.EncodedValue; +import org.jf.dexlib2.immutable.value.ImmutableEncodedValue; +import org.jf.dexlib2.immutable.value.ImmutableEncodedValueFactory; +import org.jf.util.ImmutableUtils; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.List; + +public class ImmutableCallSiteReference extends BaseCallSiteReference implements ImmutableReference { + @Nonnull protected final String name; + @Nonnull protected final ImmutableMethodHandleReference methodHandle; + @Nonnull protected final String methodName; + @Nonnull protected final ImmutableMethodProtoReference methodProto; + @Nonnull protected final ImmutableList<? extends ImmutableEncodedValue> extraArguments; + + public ImmutableCallSiteReference(@Nonnull String name, @Nonnull MethodHandleReference methodHandle, + @Nonnull String methodName, @Nonnull MethodProtoReference methodProto, + @Nonnull Iterable<? extends EncodedValue> extraArguments) { + this.name = name; + this.methodHandle = ImmutableMethodHandleReference.of(methodHandle); + this.methodName = methodName; + this.methodProto = ImmutableMethodProtoReference.of(methodProto); + this.extraArguments = ImmutableEncodedValueFactory.immutableListOf(extraArguments); + } + + public ImmutableCallSiteReference(@Nonnull String name, @Nonnull ImmutableMethodHandleReference methodHandle, + @Nonnull String methodName, @Nonnull ImmutableMethodProtoReference methodProto, + @Nullable ImmutableList<? extends ImmutableEncodedValue> extraArguments) { + this.name = name; + this.methodHandle = methodHandle; + this.methodName = methodName; + this.methodProto = methodProto; + this.extraArguments = ImmutableUtils.nullToEmptyList(extraArguments); + } + + @Nonnull + public static ImmutableCallSiteReference of(@Nonnull CallSiteReference callSiteReference) { + if (callSiteReference instanceof ImmutableCallSiteReference) { + return (ImmutableCallSiteReference) callSiteReference; + } + return new ImmutableCallSiteReference(callSiteReference.getName(), + ImmutableMethodHandleReference.of(callSiteReference.getMethodHandle()), + callSiteReference.getMethodName(), + ImmutableMethodProtoReference.of(callSiteReference.getMethodProto()), + ImmutableEncodedValueFactory.immutableListOf(callSiteReference.getExtraArguments())); + } + + @Nonnull @Override public String getName() { return name; } + @Nonnull @Override public MethodHandleReference getMethodHandle() { return methodHandle; } + @Nonnull @Override public String getMethodName() { return methodName; } + @Nonnull @Override public MethodProtoReference getMethodProto() { return methodProto; } + @Nonnull @Override public List<? extends EncodedValue> getExtraArguments() { return extraArguments; } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/immutable/reference/ImmutableMethodHandleReference.java b/dexlib2/src/main/java/org/jf/dexlib2/immutable/reference/ImmutableMethodHandleReference.java new file mode 100644 index 00000000..c35b071a --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/immutable/reference/ImmutableMethodHandleReference.java @@ -0,0 +1,90 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.immutable.reference; + +import org.jf.dexlib2.MethodHandleType; +import org.jf.dexlib2.base.reference.BaseMethodHandleReference; +import org.jf.dexlib2.iface.reference.FieldReference; +import org.jf.dexlib2.iface.reference.MethodHandleReference; +import org.jf.dexlib2.iface.reference.MethodReference; +import org.jf.dexlib2.iface.reference.Reference; +import org.jf.util.ExceptionWithContext; + +import javax.annotation.Nonnull; + +public class ImmutableMethodHandleReference extends BaseMethodHandleReference implements ImmutableReference { + protected final int methodHandleType; + @Nonnull protected final ImmutableReference memberReference; + + public ImmutableMethodHandleReference(int methodHandleType, @Nonnull ImmutableReference memberReference) { + this.methodHandleType = methodHandleType; + this.memberReference = memberReference; + } + + public ImmutableMethodHandleReference(int methodHandleType, @Nonnull Reference memberReference) { + this.methodHandleType = methodHandleType; + this.memberReference = ImmutableReferenceFactory.of(memberReference); + } + + @Nonnull + public static ImmutableMethodHandleReference of(@Nonnull MethodHandleReference methodHandleReference) { + if (methodHandleReference instanceof ImmutableMethodHandleReference) { + return (ImmutableMethodHandleReference) methodHandleReference; + } + int methodHandleType = methodHandleReference.getMethodHandleType(); + ImmutableReference memberReference; + + switch (methodHandleType) { + case MethodHandleType.STATIC_PUT: + case MethodHandleType.STATIC_GET: + case MethodHandleType.INSTANCE_PUT: + case MethodHandleType.INSTANCE_GET: + memberReference = ImmutableFieldReference.of( + (FieldReference) methodHandleReference.getMemberReference()); + break; + case MethodHandleType.INVOKE_STATIC: + case MethodHandleType.INVOKE_INSTANCE: + case MethodHandleType.INVOKE_CONSTRUCTOR: + case MethodHandleType.INVOKE_DIRECT: + case MethodHandleType.INVOKE_INTERFACE: + memberReference = ImmutableMethodReference.of( + (MethodReference) methodHandleReference.getMemberReference()); + break; + default: + throw new ExceptionWithContext("Invalid method handle type: %d", methodHandleType); + } + return new ImmutableMethodHandleReference(methodHandleType, memberReference); + } + + @Override public int getMethodHandleType() { return methodHandleType; } + @Nonnull @Override public Reference getMemberReference() { return memberReference; } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/immutable/reference/ImmutableMethodProtoReference.java b/dexlib2/src/main/java/org/jf/dexlib2/immutable/reference/ImmutableMethodProtoReference.java index 8c2afe59..d1c62e14 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/immutable/reference/ImmutableMethodProtoReference.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/immutable/reference/ImmutableMethodProtoReference.java @@ -35,16 +35,22 @@ import com.google.common.collect.ImmutableList; import org.jf.dexlib2.base.reference.BaseMethodProtoReference; import org.jf.dexlib2.iface.reference.MethodProtoReference; import org.jf.dexlib2.immutable.util.CharSequenceConverter; - -import java.util.List; +import org.jf.util.ImmutableUtils; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import java.util.List; public class ImmutableMethodProtoReference extends BaseMethodProtoReference implements ImmutableReference { @Nonnull protected final ImmutableList<String> parameters; @Nonnull protected final String returnType; + public ImmutableMethodProtoReference(@Nullable ImmutableList<String> parameters, + @Nonnull String returnType) { + this.parameters = ImmutableUtils.nullToEmptyList(parameters); + this.returnType = returnType; + } + public ImmutableMethodProtoReference(@Nullable Iterable<? extends CharSequence> parameters, @Nonnull String returnType) { this.parameters = CharSequenceConverter.immutableStringList(parameters); diff --git a/dexlib2/src/main/java/org/jf/dexlib2/immutable/reference/ImmutableReferenceFactory.java b/dexlib2/src/main/java/org/jf/dexlib2/immutable/reference/ImmutableReferenceFactory.java index d0007479..c611844c 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/immutable/reference/ImmutableReferenceFactory.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/immutable/reference/ImmutableReferenceFactory.java @@ -55,6 +55,12 @@ public class ImmutableReferenceFactory { if (reference instanceof MethodProtoReference) { return ImmutableMethodProtoReference.of((MethodProtoReference) reference); } + if (reference instanceof CallSiteReference) { + return ImmutableCallSiteReference.of((CallSiteReference) reference); + } + if (reference instanceof MethodHandleReference) { + return ImmutableMethodHandleReference.of((MethodHandleReference) reference); + } throw new ExceptionWithContext("Invalid reference type"); } @@ -71,6 +77,10 @@ public class ImmutableReferenceFactory { return ImmutableMethodReference.of((MethodReference)reference); case ReferenceType.METHOD_PROTO: return ImmutableMethodProtoReference.of((MethodProtoReference)reference); + case ReferenceType.CALL_SITE: + return ImmutableCallSiteReference.of((CallSiteReference) reference); + case ReferenceType.METHOD_HANDLE: + return ImmutableMethodHandleReference.of((MethodHandleReference) reference); } throw new ExceptionWithContext("Invalid reference type: %d", referenceType); } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableEncodedValueFactory.java b/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableEncodedValueFactory.java index db5c84ab..f22e8c58 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableEncodedValueFactory.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableEncodedValueFactory.java @@ -77,6 +77,10 @@ public class ImmutableEncodedValueFactory { return ImmutableNullEncodedValue.INSTANCE; case ValueType.BOOLEAN: return ImmutableBooleanEncodedValue.of((BooleanEncodedValue)encodedValue); + case ValueType.METHOD_HANDLE: + return ImmutableMethodHandleEncodedValue.of((MethodHandleEncodedValue) encodedValue); + case ValueType.METHOD_TYPE: + return ImmutableMethodTypeEncodedValue.of((MethodTypeEncodedValue) encodedValue); default: Preconditions.checkArgument(false); return null; diff --git a/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableEnumEncodedValue.java b/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableEnumEncodedValue.java index 2607f8a0..a67ff317 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableEnumEncodedValue.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableEnumEncodedValue.java @@ -32,15 +32,15 @@ package org.jf.dexlib2.immutable.value; import org.jf.dexlib2.base.value.BaseEnumEncodedValue; -import org.jf.dexlib2.iface.reference.FieldReference; import org.jf.dexlib2.iface.value.EnumEncodedValue; +import org.jf.dexlib2.immutable.reference.ImmutableFieldReference; import javax.annotation.Nonnull; public class ImmutableEnumEncodedValue extends BaseEnumEncodedValue implements ImmutableEncodedValue { - @Nonnull protected final FieldReference value; + @Nonnull protected final ImmutableFieldReference value; - public ImmutableEnumEncodedValue(@Nonnull FieldReference value) { + public ImmutableEnumEncodedValue(@Nonnull ImmutableFieldReference value) { this.value = value; } @@ -48,8 +48,8 @@ public class ImmutableEnumEncodedValue extends BaseEnumEncodedValue implements I if (enumEncodedValue instanceof ImmutableEnumEncodedValue) { return (ImmutableEnumEncodedValue)enumEncodedValue; } - return new ImmutableEnumEncodedValue(enumEncodedValue.getValue()); + return new ImmutableEnumEncodedValue(ImmutableFieldReference.of(enumEncodedValue.getValue())); } - @Nonnull @Override public FieldReference getValue() { return value; } + @Nonnull @Override public ImmutableFieldReference getValue() { return value; } } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableFieldEncodedValue.java b/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableFieldEncodedValue.java index 691b6cfe..60dea872 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableFieldEncodedValue.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableFieldEncodedValue.java @@ -32,15 +32,15 @@ package org.jf.dexlib2.immutable.value; import org.jf.dexlib2.base.value.BaseFieldEncodedValue; -import org.jf.dexlib2.iface.reference.FieldReference; import org.jf.dexlib2.iface.value.FieldEncodedValue; +import org.jf.dexlib2.immutable.reference.ImmutableFieldReference; import javax.annotation.Nonnull; public class ImmutableFieldEncodedValue extends BaseFieldEncodedValue implements ImmutableEncodedValue { - @Nonnull protected final FieldReference value; + @Nonnull protected final ImmutableFieldReference value; - public ImmutableFieldEncodedValue(@Nonnull FieldReference value) { + public ImmutableFieldEncodedValue(@Nonnull ImmutableFieldReference value) { this.value = value; } @@ -48,8 +48,8 @@ public class ImmutableFieldEncodedValue extends BaseFieldEncodedValue implements if (fieldEncodedValue instanceof ImmutableFieldEncodedValue) { return (ImmutableFieldEncodedValue)fieldEncodedValue; } - return new ImmutableFieldEncodedValue(fieldEncodedValue.getValue()); + return new ImmutableFieldEncodedValue(ImmutableFieldReference.of(fieldEncodedValue.getValue())); } - @Nonnull @Override public FieldReference getValue() { return value; } + @Nonnull @Override public ImmutableFieldReference getValue() { return value; } } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableMethodEncodedValue.java b/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableMethodEncodedValue.java index 05b45809..99c108fc 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableMethodEncodedValue.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableMethodEncodedValue.java @@ -32,15 +32,15 @@ package org.jf.dexlib2.immutable.value; import org.jf.dexlib2.base.value.BaseMethodEncodedValue; -import org.jf.dexlib2.iface.reference.MethodReference; import org.jf.dexlib2.iface.value.MethodEncodedValue; +import org.jf.dexlib2.immutable.reference.ImmutableMethodReference; import javax.annotation.Nonnull; public class ImmutableMethodEncodedValue extends BaseMethodEncodedValue implements ImmutableEncodedValue { - @Nonnull protected final MethodReference value; + @Nonnull protected final ImmutableMethodReference value; - public ImmutableMethodEncodedValue(@Nonnull MethodReference value) { + public ImmutableMethodEncodedValue(@Nonnull ImmutableMethodReference value) { this.value = value; } @@ -48,8 +48,8 @@ public class ImmutableMethodEncodedValue extends BaseMethodEncodedValue implemen if (methodEncodedValue instanceof ImmutableMethodEncodedValue) { return (ImmutableMethodEncodedValue)methodEncodedValue; } - return new ImmutableMethodEncodedValue(methodEncodedValue.getValue()); + return new ImmutableMethodEncodedValue(ImmutableMethodReference.of(methodEncodedValue.getValue())); } - @Nonnull @Override public MethodReference getValue() { return value; } + @Nonnull @Override public ImmutableMethodReference getValue() { return value; } } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableMethodHandleEncodedValue.java b/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableMethodHandleEncodedValue.java new file mode 100644 index 00000000..cc893ea7 --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableMethodHandleEncodedValue.java @@ -0,0 +1,57 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.immutable.value; + +import org.jf.dexlib2.base.value.BaseMethodHandleEncodedValue; +import org.jf.dexlib2.iface.value.MethodHandleEncodedValue; +import org.jf.dexlib2.immutable.reference.ImmutableMethodHandleReference; + +import javax.annotation.Nonnull; + +public class ImmutableMethodHandleEncodedValue extends BaseMethodHandleEncodedValue implements ImmutableEncodedValue { + @Nonnull protected final ImmutableMethodHandleReference methodHandleReference; + + public ImmutableMethodHandleEncodedValue(@Nonnull ImmutableMethodHandleReference methodHandleReference) { + this.methodHandleReference = methodHandleReference; + } + + @Nonnull + public static ImmutableMethodHandleEncodedValue of(@Nonnull MethodHandleEncodedValue methodHandleEncodedValue) { + if (methodHandleEncodedValue instanceof ImmutableMethodHandleEncodedValue) { + return (ImmutableMethodHandleEncodedValue) methodHandleEncodedValue; + } + return new ImmutableMethodHandleEncodedValue( + ImmutableMethodHandleReference.of(methodHandleEncodedValue.getValue())); + } + + @Nonnull @Override public ImmutableMethodHandleReference getValue() { return methodHandleReference; } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableMethodTypeEncodedValue.java b/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableMethodTypeEncodedValue.java new file mode 100644 index 00000000..3aa13a10 --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/immutable/value/ImmutableMethodTypeEncodedValue.java @@ -0,0 +1,57 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.immutable.value; + +import org.jf.dexlib2.base.value.BaseMethodTypeEncodedValue; +import org.jf.dexlib2.iface.value.MethodTypeEncodedValue; +import org.jf.dexlib2.immutable.reference.ImmutableMethodProtoReference; + +import javax.annotation.Nonnull; + +public class ImmutableMethodTypeEncodedValue extends BaseMethodTypeEncodedValue implements ImmutableEncodedValue { + @Nonnull protected final ImmutableMethodProtoReference methodProtoReference; + + public ImmutableMethodTypeEncodedValue(@Nonnull ImmutableMethodProtoReference methodProtoReference) { + this.methodProtoReference = methodProtoReference; + } + + @Nonnull + public static ImmutableMethodTypeEncodedValue of(@Nonnull MethodTypeEncodedValue methodTypeEncodedValue) { + if (methodTypeEncodedValue instanceof ImmutableMethodTypeEncodedValue) { + return (ImmutableMethodTypeEncodedValue) methodTypeEncodedValue; + } + return new ImmutableMethodTypeEncodedValue( + ImmutableMethodProtoReference.of(methodTypeEncodedValue.getValue())); + } + + @Nonnull @Override public ImmutableMethodProtoReference getValue() { return methodProtoReference; } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/util/AlignmentUtils.java b/dexlib2/src/main/java/org/jf/dexlib2/util/AlignmentUtils.java new file mode 100644 index 00000000..1648372a --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/util/AlignmentUtils.java @@ -0,0 +1,44 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.util; + +public abstract class AlignmentUtils { + public static int alignOffset(int offset, int alignment) { + int mask = alignment - 1; + assert (alignment >= 0) && ((mask & alignment) == 0); + return (offset + mask) & ~mask; + } + + public static boolean isAligned(int offset, int alignment) { + return (offset % alignment) == 0; + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/util/DexUtil.java b/dexlib2/src/main/java/org/jf/dexlib2/util/DexUtil.java index 389edfd7..aaa455ca 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/util/DexUtil.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/util/DexUtil.java @@ -50,11 +50,12 @@ public class DexUtil { * The inputStream must support mark(), and will be reset to initial position upon exiting the method * * @param inputStream An input stream that is positioned at a dex header + * @return The dex version * @throws NotADexFile If the file is not a dex file * @throws InvalidFile If the header appears to be a dex file, but is not valid for some reason * @throws UnsupportedFile If the dex header is valid, but uses unsupported functionality */ - public static void verifyDexHeader(@Nonnull InputStream inputStream) throws IOException { + public static int verifyDexHeader(@Nonnull InputStream inputStream) throws IOException { if (!inputStream.markSupported()) { throw new IllegalArgumentException("InputStream must support mark"); } @@ -68,7 +69,7 @@ public class DexUtil { inputStream.reset(); } - verifyDexHeader(partialHeader, 0); + return verifyDexHeader(partialHeader, 0); } /** @@ -76,11 +77,12 @@ public class DexUtil { * * @param buf A byte array containing at least the first 44 bytes of a dex file * @param offset The offset within the array to the dex header + * @return The dex version * @throws NotADexFile If the file is not a dex file * @throws InvalidFile If the header appears to be a dex file, but is not valid for some reason * @throws UnsupportedFile If the dex header is valid, but uses unsupported functionality */ - public static void verifyDexHeader(@Nonnull byte[] buf, int offset) { + public static int verifyDexHeader(@Nonnull byte[] buf, int offset) { int dexVersion = HeaderItem.getVersion(buf, offset); if (dexVersion == -1) { StringBuilder sb = new StringBuilder("Not a valid dex magic value:"); @@ -102,6 +104,8 @@ public class DexUtil { if (endian != HeaderItem.LITTLE_ENDIAN_TAG) { throw new InvalidFile(String.format("Invalid endian tag: 0x%x", endian)); } + + return dexVersion; } /** diff --git a/dexlib2/src/main/java/org/jf/dexlib2/util/EncodedValueUtils.java b/dexlib2/src/main/java/org/jf/dexlib2/util/EncodedValueUtils.java index e8c66258..a09bbca2 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/util/EncodedValueUtils.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/util/EncodedValueUtils.java @@ -32,7 +32,13 @@ package org.jf.dexlib2.util; import org.jf.dexlib2.ValueType; +import org.jf.dexlib2.iface.AnnotationElement; import org.jf.dexlib2.iface.value.*; +import org.jf.util.StringUtils; + +import java.io.IOException; +import java.io.Writer; +import java.util.Set; public final class EncodedValueUtils { public static boolean isDefaultValue(EncodedValue encodedValue) { @@ -59,5 +65,99 @@ public final class EncodedValueUtils { return false; } + public static void writeEncodedValue(Writer writer, EncodedValue encodedValue) throws IOException { + switch (encodedValue.getValueType()) { + case ValueType.BOOLEAN: + writer.write(Boolean.toString(((BooleanEncodedValue) encodedValue).getValue())); + break; + case ValueType.BYTE: + writer.write(Byte.toString(((ByteEncodedValue)encodedValue).getValue())); + break; + case ValueType.CHAR: + writer.write(Integer.toString(((CharEncodedValue)encodedValue).getValue())); + break; + case ValueType.SHORT: + writer.write(Short.toString(((ShortEncodedValue)encodedValue).getValue())); + break; + case ValueType.INT: + writer.write(Integer.toString(((IntEncodedValue)encodedValue).getValue())); + break; + case ValueType.LONG: + writer.write(Long.toString(((LongEncodedValue)encodedValue).getValue())); + break; + case ValueType.FLOAT: + writer.write(Float.toString(((FloatEncodedValue)encodedValue).getValue())); + break; + case ValueType.DOUBLE: + writer.write(Double.toString(((DoubleEncodedValue)encodedValue).getValue())); + break; + case ValueType.ANNOTATION: + writeAnnotation(writer, (AnnotationEncodedValue)encodedValue); + break; + case ValueType.ARRAY: + writeArray(writer, (ArrayEncodedValue)encodedValue); + break; + case ValueType.STRING: + writer.write('"'); + StringUtils.writeEscapedString(writer, ((StringEncodedValue)encodedValue).getValue()); + writer.write('"'); + break; + case ValueType.FIELD: + ReferenceUtil.writeFieldDescriptor(writer, ((FieldEncodedValue)encodedValue).getValue()); + break; + case ValueType.ENUM: + ReferenceUtil.writeFieldDescriptor(writer, ((EnumEncodedValue)encodedValue).getValue()); + break; + case ValueType.METHOD: + ReferenceUtil.writeMethodDescriptor(writer, ((MethodEncodedValue)encodedValue).getValue()); + break; + case ValueType.TYPE: + writer.write(((TypeEncodedValue)encodedValue).getValue()); + break; + case ValueType.METHOD_TYPE: + ReferenceUtil.writeMethodProtoDescriptor(writer, ((MethodTypeEncodedValue)encodedValue).getValue()); + break; + case ValueType.METHOD_HANDLE: + ReferenceUtil.writeMethodHandle(writer, ((MethodHandleEncodedValue)encodedValue).getValue()); + break; + case ValueType.NULL: + writer.write("null"); + break; + default: + throw new IllegalArgumentException("Unknown encoded value type"); + } + } + + private static void writeAnnotation(Writer writer, AnnotationEncodedValue annotation) throws IOException { + writer.write("Annotation["); + writer.write(annotation.getType()); + + Set<? extends AnnotationElement> elements = annotation.getElements(); + for (AnnotationElement element: elements) { + writer.write(", "); + writer.write(element.getName()); + writer.write('='); + writeEncodedValue(writer, element.getValue()); + } + + writer.write(']'); + } + + private static void writeArray(Writer writer, ArrayEncodedValue array) throws IOException { + writer.write("Array["); + + boolean first = true; + for (EncodedValue element: array.getValue()) { + if (first) { + first = false; + } else { + writer.write(", "); + } + writeEncodedValue(writer, element); + } + + writer.write(']'); + } + private EncodedValueUtils() {} } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/util/ReferenceUtil.java b/dexlib2/src/main/java/org/jf/dexlib2/util/ReferenceUtil.java index 4e46a0e9..86d35368 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/util/ReferenceUtil.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/util/ReferenceUtil.java @@ -31,12 +31,15 @@ package org.jf.dexlib2.util; +import org.jf.dexlib2.MethodHandleType; import org.jf.dexlib2.iface.reference.*; +import org.jf.dexlib2.iface.value.EncodedValue; import org.jf.util.StringUtils; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.io.IOException; +import java.io.StringWriter; import java.io.Writer; public final class ReferenceUtil { @@ -61,14 +64,24 @@ public final class ReferenceUtil { } public static String getMethodProtoDescriptor(MethodProtoReference methodProtoReference) { - StringBuilder sb = new StringBuilder(); - sb.append('('); + StringWriter stringWriter = new StringWriter(); + try { + writeMethodProtoDescriptor(stringWriter, methodProtoReference); + } catch (IOException ex) { + // IOException shouldn't happen for a StringWriter... + throw new RuntimeException(ex); + } + return stringWriter.toString(); + } + + public static void writeMethodProtoDescriptor(Writer writer, MethodProtoReference methodProtoReference) + throws IOException { + writer.write('('); for (CharSequence paramType : methodProtoReference.getParameterTypes()) { - sb.append(paramType); + writer.write(paramType.toString()); } - sb.append(')'); - sb.append(methodProtoReference.getReturnType()); - return sb.toString(); + writer.write(')'); + writer.write(methodProtoReference.getReturnType()); } public static void writeMethodDescriptor(Writer writer, MethodReference methodReference) throws IOException { @@ -129,6 +142,62 @@ public final class ReferenceUtil { writer.write(fieldReference.getType()); } + public static String getMethodHandleString(MethodHandleReference methodHandleReference) { + StringWriter stringWriter = new StringWriter(); + try { + writeMethodHandle(stringWriter, methodHandleReference); + } catch (IOException ex) { + // IOException shouldn't happen for a StringWriter... + throw new RuntimeException(ex); + } + return stringWriter.toString(); + } + + public static void writeMethodHandle(Writer writer, MethodHandleReference methodHandleReference) + throws IOException { + writer.write(MethodHandleType.toString(methodHandleReference.getMethodHandleType())); + writer.write('@'); + + Reference memberReference = methodHandleReference.getMemberReference(); + if (memberReference instanceof MethodReference) { + writeMethodDescriptor(writer, (MethodReference)memberReference); + } else { + writeFieldDescriptor(writer, (FieldReference)memberReference); + } + } + + public static String getCallSiteString(CallSiteReference callSiteReference) { + StringWriter stringWriter = new StringWriter(); + try { + writeCallSite(stringWriter, callSiteReference); + } catch (IOException ex) { + // IOException shouldn't happen for a StringWriter... + throw new RuntimeException(ex); + } + return stringWriter.toString(); + } + + public static void writeCallSite(Writer writer, CallSiteReference callSiteReference) throws IOException { + writer.write(callSiteReference.getName()); + writer.write('('); + writer.write('"'); + StringUtils.writeEscapedString(writer, callSiteReference.getMethodName()); + writer.write('"'); + writer.write(", "); + writeMethodProtoDescriptor(writer, callSiteReference.getMethodProto()); + + for (EncodedValue encodedValue : callSiteReference.getExtraArguments()) { + writer.write(", "); + EncodedValueUtils.writeEncodedValue(writer, encodedValue); + } + writer.write(")@"); + MethodHandleReference methodHandle = callSiteReference.getMethodHandle(); + if (methodHandle.getMethodHandleType() != MethodHandleType.INVOKE_STATIC) { + throw new IllegalArgumentException("The linker method handle for a call site must be of type invoke-static"); + } + writeMethodDescriptor(writer, (MethodReference)callSiteReference.getMethodHandle().getMemberReference()); + } + @Nullable public static String getReferenceString(@Nonnull Reference reference) { return getReferenceString(reference, null); @@ -156,6 +225,14 @@ public final class ReferenceUtil { MethodProtoReference methodProtoReference = (MethodProtoReference)reference; return getMethodProtoDescriptor(methodProtoReference); } + if (reference instanceof MethodHandleReference) { + MethodHandleReference methodHandleReference = (MethodHandleReference)reference; + return getMethodHandleString(methodHandleReference); + } + if (reference instanceof CallSiteReference) { + CallSiteReference callSiteReference = (CallSiteReference)reference; + return getCallSiteString(callSiteReference); + } return null; } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/CallSiteSection.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/CallSiteSection.java new file mode 100644 index 00000000..0860de4a --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/CallSiteSection.java @@ -0,0 +1,39 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.writer; + +import org.jf.dexlib2.iface.reference.CallSiteReference; + +public interface CallSiteSection<CallSiteKey extends CallSiteReference, EncodedArrayKey> + extends IndexSection<CallSiteKey> { + EncodedArrayKey getEncodedCallSite(CallSiteKey callSiteReference); +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/ClassSection.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/ClassSection.java index d28dd444..b272bd60 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/writer/ClassSection.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/ClassSection.java @@ -45,7 +45,7 @@ import java.util.List; import java.util.Map; public interface ClassSection<StringKey extends CharSequence, TypeKey extends CharSequence, TypeListKey, ClassKey, - FieldKey, MethodKey, AnnotationSetKey, EncodedValue> extends IndexSection<ClassKey> { + FieldKey, MethodKey, AnnotationSetKey, EncodedArrayKey> extends IndexSection<ClassKey> { @Nonnull Collection<? extends ClassKey> getSortedClasses(); @Nullable Map.Entry<? extends ClassKey, Integer> getClassEntryByType(@Nullable TypeKey key); @@ -55,7 +55,7 @@ public interface ClassSection<StringKey extends CharSequence, TypeKey extends Ch @Nullable TypeKey getSuperclass(@Nonnull ClassKey key); @Nullable TypeListKey getInterfaces(@Nonnull ClassKey key); @Nullable StringKey getSourceFile(@Nonnull ClassKey key); - @Nullable Collection<? extends EncodedValue> getStaticInitializers(@Nonnull ClassKey key); + @Nullable EncodedArrayKey getStaticInitializers(@Nonnull ClassKey key); @Nonnull Collection<? extends FieldKey> getSortedStaticFields(@Nonnull ClassKey key); @Nonnull Collection<? extends FieldKey> getSortedInstanceFields(@Nonnull ClassKey key); @@ -81,9 +81,6 @@ public interface ClassSection<StringKey extends CharSequence, TypeKey extends Ch @Nullable TypeKey getExceptionType(@Nonnull ExceptionHandler handler); @Nonnull MutableMethodImplementation makeMutableMethodImplementation(@Nonnull MethodKey key); - void setEncodedArrayOffset(@Nonnull ClassKey key, int offset); - int getEncodedArrayOffset(@Nonnull ClassKey key); - void setAnnotationDirectoryOffset(@Nonnull ClassKey key, int offset); int getAnnotationDirectoryOffset(@Nonnull ClassKey key); diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/DexWriter.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/DexWriter.java index 3020f326..46d60620 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/writer/DexWriter.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/DexWriter.java @@ -35,10 +35,8 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Ordering; -import org.jf.dexlib2.AccessFlags; -import org.jf.dexlib2.Opcode; -import org.jf.dexlib2.Opcodes; -import org.jf.dexlib2.ReferenceType; +import com.google.common.primitives.Ints; +import org.jf.dexlib2.*; import org.jf.dexlib2.base.BaseAnnotation; import org.jf.dexlib2.base.BaseAnnotationElement; import org.jf.dexlib2.builder.MutableMethodImplementation; @@ -63,7 +61,6 @@ import org.jf.dexlib2.writer.io.DeferredOutputStreamFactory; import org.jf.dexlib2.writer.io.DexDataStore; import org.jf.dexlib2.writer.io.MemoryDeferredOutputStream; import org.jf.dexlib2.writer.util.TryListBuilder; -import org.jf.util.CollectionUtils; import org.jf.util.ExceptionWithContext; import javax.annotation.Nonnull; @@ -85,9 +82,12 @@ public abstract class DexWriter< TypeRef extends TypeReference, ProtoRefKey extends MethodProtoReference, FieldRefKey extends FieldReference, MethodRefKey extends MethodReference, ClassKey extends Comparable<? super ClassKey>, + CallSiteKey extends CallSiteReference, + MethodHandleKey extends MethodHandleReference, AnnotationKey extends Annotation, AnnotationSetKey, TypeListKey, FieldKey, MethodKey, + EncodedArrayKey, EncodedValue, AnnotationElement extends org.jf.dexlib2.iface.AnnotationElement, StringSectionType extends StringSection<StringKey, StringRef>, @@ -96,14 +96,19 @@ public abstract class DexWriter< FieldSectionType extends FieldSection<StringKey, TypeKey, FieldRefKey, FieldKey>, MethodSectionType extends MethodSection<StringKey, TypeKey, ProtoRefKey, MethodRefKey, MethodKey>, ClassSectionType extends ClassSection<StringKey, TypeKey, TypeListKey, ClassKey, FieldKey, MethodKey, - AnnotationSetKey, EncodedValue>, + AnnotationSetKey, EncodedArrayKey>, + CallSiteSectionType extends CallSiteSection<CallSiteKey, EncodedArrayKey>, + MethodHandleSectionType extends MethodHandleSection<MethodHandleKey, FieldRefKey, MethodRefKey>, TypeListSectionType extends TypeListSection<TypeKey, TypeListKey>, AnnotationSectionType extends AnnotationSection<StringKey, TypeKey, AnnotationKey, AnnotationElement, EncodedValue>, - AnnotationSetSectionType extends AnnotationSetSection<AnnotationKey, AnnotationSetKey>> { + AnnotationSetSectionType extends AnnotationSetSection<AnnotationKey, AnnotationSetKey>, + EncodedArraySectionType extends EncodedArraySection<EncodedArrayKey, EncodedValue>> { public static final int NO_INDEX = -1; public static final int NO_OFFSET = 0; + public static final int MAX_POOL_SIZE = (1 << 16); + protected final Opcodes opcodes; protected int stringIndexSectionOffset = NO_OFFSET; @@ -112,6 +117,8 @@ public abstract class DexWriter< protected int fieldSectionOffset = NO_OFFSET; protected int methodSectionOffset = NO_OFFSET; protected int classIndexSectionOffset = NO_OFFSET; + protected int callSiteSectionOffset = NO_OFFSET; + protected int methodHandleSectionOffset = NO_OFFSET; protected int stringDataSectionOffset = NO_OFFSET; protected int classDataSectionOffset = NO_OFFSET; @@ -125,23 +132,31 @@ public abstract class DexWriter< protected int codeSectionOffset = NO_OFFSET; protected int mapSectionOffset = NO_OFFSET; - protected int numEncodedArrayItems = 0; protected int numAnnotationSetRefItems = 0; protected int numAnnotationDirectoryItems = 0; protected int numDebugInfoItems = 0; protected int numCodeItemItems = 0; protected int numClassDataItems = 0; + // The sections defined here must be kept in sync with these section arrays: + // - DexWriter.overflowableSections + // - DexPool.sections + public final StringSectionType stringSection; public final TypeSectionType typeSection; public final ProtoSectionType protoSection; public final FieldSectionType fieldSection; public final MethodSectionType methodSection; public final ClassSectionType classSection; - + public final CallSiteSectionType callSiteSection; + public final MethodHandleSectionType methodHandleSection; + public final TypeListSectionType typeListSection; public final AnnotationSectionType annotationSection; public final AnnotationSetSectionType annotationSetSection; + public final EncodedArraySectionType encodedArraySection; + + private final IndexSection<?>[] overflowableSections; protected DexWriter(Opcodes opcodes) { this.opcodes = opcodes; @@ -153,9 +168,23 @@ public abstract class DexWriter< this.fieldSection = sectionProvider.getFieldSection(); this.methodSection = sectionProvider.getMethodSection(); this.classSection = sectionProvider.getClassSection(); + this.callSiteSection = sectionProvider.getCallSiteSection(); + this.methodHandleSection = sectionProvider.getMethodHandleSection(); this.typeListSection = sectionProvider.getTypeListSection(); this.annotationSection = sectionProvider.getAnnotationSection(); this.annotationSetSection = sectionProvider.getAnnotationSetSection(); + this.encodedArraySection = sectionProvider.getEncodedArraySection(); + + overflowableSections = new IndexSection<?>[] { + //stringSection, // supports jumbo indexes + typeSection, + protoSection, + fieldSection, + methodSection, + //classSection, // redundant check: cannot be larger than typeSection + callSiteSection, + methodHandleSection, + }; } @Nonnull protected abstract SectionProvider getSectionProvider(); @@ -163,6 +192,16 @@ public abstract class DexWriter< protected abstract void writeEncodedValue(@Nonnull InternalEncodedValueWriter writer, @Nonnull EncodedValue encodedValue) throws IOException; + private Comparator<Map.Entry<? extends CallSiteKey, Integer>> callSiteComparator = + new Comparator<Entry<? extends CallSiteKey, Integer>>() { + @Override + public int compare(Entry<? extends CallSiteKey, Integer> o1, Entry<? extends CallSiteKey, Integer> o2) { + int offset1 = encodedArraySection.getItemOffset(callSiteSection.getEncodedCallSite(o1.getKey())); + int offset2 = encodedArraySection.getItemOffset(callSiteSection.getEncodedCallSite(o2.getKey())); + return Ints.compare(offset1, offset2); + } + }; + private static Comparator<Map.Entry> toStringKeyComparator = new Comparator<Map.Entry>() { @Override public int compare(Entry o1, Entry o2) { @@ -179,9 +218,10 @@ public abstract class DexWriter< } protected class InternalEncodedValueWriter extends EncodedValueWriter<StringKey, TypeKey, FieldRefKey, MethodRefKey, - AnnotationElement, EncodedValue> { + AnnotationElement, ProtoRefKey, MethodHandleKey, EncodedValue> { private InternalEncodedValueWriter(@Nonnull DexDataWriter writer) { - super(writer, stringSection, typeSection, fieldSection, methodSection, annotationSection); + super(writer, stringSection, typeSection, fieldSection, methodSection, protoSection, methodHandleSection, + annotationSection); } @Override protected void writeEncodedValue(@Nonnull EncodedValue encodedValue) throws IOException { @@ -196,7 +236,9 @@ public abstract class DexWriter< protoSection.getItemCount() * ProtoIdItem.ITEM_SIZE + fieldSection.getItemCount() * FieldIdItem.ITEM_SIZE + methodSection.getItemCount() * MethodIdItem.ITEM_SIZE + - classSection.getItemCount() * ClassDefItem.ITEM_SIZE; + classSection.getItemCount() * ClassDefItem.ITEM_SIZE + + callSiteSection.getItemCount() * CallSiteIdItem.ITEM_SIZE + + methodHandleSection.getItemCount() * MethodHandleItem.ITEM_SIZE; } @Nonnull @@ -227,19 +269,28 @@ public abstract class DexWriter< } /** - * Checks whether any of the size-sensitive constant pools have overflowed. - * - * This checks whether the type, method, field pools are larger than 64k entries. + * Checks whether any of the size-sensitive constant pools have overflowed and have more than 64Ki entries. * * Note that even if this returns true, it may still be possible to successfully write the dex file, if the - * overflowed items are not referenced anywhere that uses a 16-bit index + * overflowed items are not referenced anywhere that uses a 16-bit index. * * @return true if any of the size-sensitive constant pools have overflowed */ public boolean hasOverflowed() { - return methodSection.getItemCount() > (1 << 16) || - typeSection.getItemCount() > (1 << 16) || - fieldSection.getItemCount() > (1 << 16); + return hasOverflowed(MAX_POOL_SIZE); + } + + /** + * Checks whether any of the size-sensitive constant pools have more than the supplied maximum number of entries. + * + * @param maxPoolSize the maximum number of entries allowed in any of the size-sensitive constant pools + * @return true if any of the size-sensitive constant pools have overflowed the supplied size limit + */ + public boolean hasOverflowed(int maxPoolSize) { + for (IndexSection section: overflowableSections) { + if (section.getItemCount() > maxPoolSize) return true; + } + return false; } public void writeTo(@Nonnull DexDataStore dest) throws IOException { @@ -260,13 +311,36 @@ public abstract class DexWriter< writeProtos(indexWriter); writeFields(indexWriter); writeMethods(indexWriter); + + // encoded arrays depend on method handles.. + DexDataWriter methodHandleWriter = outputAt(dest, indexWriter.getPosition() + + classSection.getItemCount() * ClassDefItem.ITEM_SIZE + + callSiteSection.getItemCount() * CallSiteIdItem.ITEM_SIZE); + try { + writeMethodHandles(methodHandleWriter); + } finally { + methodHandleWriter.close(); + } + + // call sites depend on encoded arrays.. writeEncodedArrays(offsetWriter); + + // class defs depend on method handles and call sites.. + DexDataWriter callSiteWriter = outputAt(dest, indexWriter.getPosition() + + classSection.getItemCount() * ClassDefItem.ITEM_SIZE); + try { + writeCallSites(callSiteWriter); + } finally { + callSiteWriter.close(); + } + writeAnnotations(offsetWriter); writeAnnotationSets(offsetWriter); writeAnnotationSetRefs(offsetWriter); writeAnnotationDirectories(offsetWriter); writeDebugAndCodeItems(offsetWriter, tempFactory.makeDeferredOutputStream()); writeClasses(indexWriter, offsetWriter); + writeMapItem(offsetWriter); writeHeader(headerWriter, dataSectionOffset, offsetWriter.getPosition()); } finally { @@ -480,10 +554,15 @@ public abstract class DexWriter< if (classHasData) { indexWriter.writeInt(offsetWriter.getPosition()); } else { - indexWriter.writeInt(0); + indexWriter.writeInt(NO_OFFSET); } - indexWriter.writeInt(classSection.getEncodedArrayOffset(key)); + EncodedArrayKey staticInitializers = classSection.getStaticInitializers(key); + if (staticInitializers != null) { + indexWriter.writeInt(encodedArraySection.getItemOffset(staticInitializers)); + } else { + indexWriter.writeInt(NO_OFFSET); + } // now write the class_data_item if (classHasData) { @@ -503,6 +582,58 @@ public abstract class DexWriter< return nextIndex; } + private void writeCallSites(DexDataWriter writer) throws IOException { + callSiteSectionOffset = writer.getPosition(); + + List<Map.Entry<? extends CallSiteKey, Integer>> callSiteEntries = + Lists.newArrayList(callSiteSection.getItems()); + Collections.sort(callSiteEntries, callSiteComparator); + + int index = 0; + + for (Map.Entry<? extends CallSiteKey, Integer> callSite: callSiteEntries) { + callSite.setValue(index++); + writer.writeInt(encodedArraySection.getItemOffset(callSiteSection.getEncodedCallSite(callSite.getKey()))); + } + } + + private void writeMethodHandles(DexDataWriter writer) throws IOException { + methodHandleSectionOffset = writer.getPosition(); + + int index = 0; + + for (Entry<? extends MethodHandleKey, Integer> entry: methodHandleSection.getItems()) { + entry.setValue(index++); + MethodHandleKey methodHandleReference = entry.getKey(); + writer.writeUshort(methodHandleReference.getMethodHandleType()); + writer.writeUshort(0); + int memberIndex; + switch (methodHandleReference.getMethodHandleType()) { + case MethodHandleType.STATIC_PUT: + case MethodHandleType.STATIC_GET: + case MethodHandleType.INSTANCE_PUT: + case MethodHandleType.INSTANCE_GET: + memberIndex = fieldSection.getItemIndex( + methodHandleSection.getFieldReference(methodHandleReference)); + break; + case MethodHandleType.INVOKE_STATIC: + case MethodHandleType.INVOKE_INSTANCE: + case MethodHandleType.INVOKE_CONSTRUCTOR: + case MethodHandleType.INVOKE_DIRECT: + case MethodHandleType.INVOKE_INTERFACE: + memberIndex = methodSection.getItemIndex( + methodHandleSection.getMethodReference(methodHandleReference)); + break; + default: + throw new ExceptionWithContext("Invalid method handle type: %d", + methodHandleReference.getMethodHandleType()); + } + + writer.writeUshort(memberIndex); + writer.writeUshort(0); + } + } + private void writeEncodedFields(@Nonnull DexDataWriter writer, @Nonnull Collection<? extends FieldKey> fields) throws IOException { int prevIndex = 0; @@ -541,55 +672,16 @@ public abstract class DexWriter< } } - private static class EncodedArrayKey<EncodedValue> { - @Nonnull Collection<? extends EncodedValue> elements; - - public EncodedArrayKey() { - } - - @Override public int hashCode() { - return CollectionUtils.listHashCode(elements); - } - - @Override public boolean equals(Object o) { - if (o instanceof EncodedArrayKey) { - EncodedArrayKey other = (EncodedArrayKey)o; - if (elements.size() != other.elements.size()) { - return false; - } - return Iterables.elementsEqual(elements, other.elements); - } - return false; - } - } - private void writeEncodedArrays(@Nonnull DexDataWriter writer) throws IOException { InternalEncodedValueWriter encodedValueWriter = new InternalEncodedValueWriter(writer); encodedArraySectionOffset = writer.getPosition(); - HashMap<EncodedArrayKey<EncodedValue>, Integer> internedItems = Maps.newHashMap(); - EncodedArrayKey<EncodedValue> key = new EncodedArrayKey<EncodedValue>(); - - for (ClassKey classKey: classSection.getSortedClasses()) { - Collection <? extends EncodedValue> elements = classSection.getStaticInitializers(classKey); - if (elements != null && elements.size() > 0) { - key.elements = elements; - Integer prev = internedItems.get(key); - if (prev != null) { - classSection.setEncodedArrayOffset(classKey, prev); - } else { - int offset = writer.getPosition(); - internedItems.put(key, offset); - classSection.setEncodedArrayOffset(classKey, offset); - key = new EncodedArrayKey<EncodedValue>(); - - numEncodedArrayItems++; - - writer.writeUleb128(elements.size()); - for (EncodedValue value: elements) { - writeEncodedValue(encodedValueWriter, value); - } - } + for (Map.Entry<? extends EncodedArrayKey, Integer> entry: encodedArraySection.getItems()) { + entry.setValue(writer.getPosition()); + List<? extends EncodedValue> encodedArray = encodedArraySection.getEncodedValueList(entry.getKey()); + writer.writeUleb128(encodedArray.size()); + for (EncodedValue value: encodedArray) { + writeEncodedValue(encodedValueWriter, value); } } } @@ -975,7 +1067,7 @@ public abstract class DexWriter< InstructionWriter instructionWriter = InstructionWriter.makeInstructionWriter(opcodes, writer, stringSection, typeSection, fieldSection, - methodSection, protoSection); + methodSection, protoSection, methodHandleSection, callSiteSection); writer.writeInt(codeUnitCount); int codeOffset = 0; @@ -1196,10 +1288,16 @@ public abstract class DexWriter< if (methodSection.getItems().size() > 0) { numItems++; } + if (callSiteSection.getItems().size() > 0) { + numItems++; + } + if (methodHandleSection.getItems().size() > 0) { + numItems++; + } if (typeListSection.getItems().size() > 0) { numItems++; } - if (numEncodedArrayItems > 0) { + if (encodedArraySection.getItems().size() > 0) { numItems++; } if (annotationSection.getItems().size() > 0) { @@ -1247,14 +1345,19 @@ public abstract class DexWriter< writeMapItem(writer, ItemType.FIELD_ID_ITEM, fieldSection.getItems().size(), fieldSectionOffset); writeMapItem(writer, ItemType.METHOD_ID_ITEM, methodSection.getItems().size(), methodSectionOffset); writeMapItem(writer, ItemType.CLASS_DEF_ITEM, classSection.getItems().size(), classIndexSectionOffset); + writeMapItem(writer, ItemType.CALL_SITE_ID_ITEM, callSiteSection.getItems().size(), callSiteSectionOffset); + writeMapItem(writer, ItemType.METHOD_HANDLE_ITEM, methodHandleSection.getItems().size(), + methodHandleSectionOffset); // data section writeMapItem(writer, ItemType.STRING_DATA_ITEM, stringSection.getItems().size(), stringDataSectionOffset); writeMapItem(writer, ItemType.TYPE_LIST, typeListSection.getItems().size(), typeListSectionOffset); - writeMapItem(writer, ItemType.ENCODED_ARRAY_ITEM, numEncodedArrayItems, encodedArraySectionOffset); + writeMapItem(writer, ItemType.ENCODED_ARRAY_ITEM, encodedArraySection.getItems().size(), + encodedArraySectionOffset); writeMapItem(writer, ItemType.ANNOTATION_ITEM, annotationSection.getItems().size(), annotationSectionOffset); writeMapItem(writer, ItemType.ANNOTATION_SET_ITEM, - annotationSetSection.getItems().size() + (shouldCreateEmptyAnnotationSet() ? 1 : 0), annotationSetSectionOffset); + annotationSetSection.getItems().size() + (shouldCreateEmptyAnnotationSet() ? 1 : 0), + annotationSetSectionOffset); writeMapItem(writer, ItemType.ANNOTATION_SET_REF_LIST, numAnnotationSetRefItems, annotationSetRefSectionOffset); writeMapItem(writer, ItemType.ANNOTATION_DIRECTORY_ITEM, numAnnotationDirectoryItems, annotationDirectorySectionOffset); @@ -1331,8 +1434,11 @@ public abstract class DexWriter< @Nonnull public abstract FieldSectionType getFieldSection(); @Nonnull public abstract MethodSectionType getMethodSection(); @Nonnull public abstract ClassSectionType getClassSection(); + @Nonnull public abstract CallSiteSectionType getCallSiteSection(); + @Nonnull public abstract MethodHandleSectionType getMethodHandleSection(); @Nonnull public abstract TypeListSectionType getTypeListSection(); @Nonnull public abstract AnnotationSectionType getAnnotationSection(); @Nonnull public abstract AnnotationSetSectionType getAnnotationSetSection(); + @Nonnull public abstract EncodedArraySectionType getEncodedArraySection(); } } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/EncodedArraySection.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/EncodedArraySection.java new file mode 100644 index 00000000..49a5d159 --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/EncodedArraySection.java @@ -0,0 +1,38 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.writer; + +import java.util.List; + +public interface EncodedArraySection<EncodedArrayKey, EncodedValue> extends OffsetSection<EncodedArrayKey> { + List<? extends EncodedValue> getEncodedValueList(EncodedArrayKey encodedArrayKey); +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/EncodedValueWriter.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/EncodedValueWriter.java index def326c6..3032acb6 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/writer/EncodedValueWriter.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/EncodedValueWriter.java @@ -35,6 +35,7 @@ import com.google.common.collect.Ordering; import org.jf.dexlib2.ValueType; import org.jf.dexlib2.base.BaseAnnotationElement; import org.jf.dexlib2.iface.reference.FieldReference; +import org.jf.dexlib2.iface.reference.MethodHandleReference; import org.jf.dexlib2.iface.reference.MethodReference; import javax.annotation.Nonnull; @@ -43,12 +44,14 @@ import java.util.Collection; public abstract class EncodedValueWriter<StringKey, TypeKey, FieldRefKey extends FieldReference, MethodRefKey extends MethodReference, AnnotationElement extends org.jf.dexlib2.iface.AnnotationElement, - EncodedValue> { + ProtoRefKey, MethodHandleKey extends MethodHandleReference, EncodedValue> { @Nonnull private final DexDataWriter writer; @Nonnull private final StringSection<StringKey, ?> stringSection; @Nonnull private final TypeSection<?, TypeKey, ?> typeSection; @Nonnull private final FieldSection<?, ?, FieldRefKey, ?> fieldSection; @Nonnull private final MethodSection<?, ?, ?, MethodRefKey, ?> methodSection; + @Nonnull private final ProtoSection<?, ?, ProtoRefKey, ?> protoSection; + @Nonnull private final MethodHandleSection<MethodHandleKey, ?, ?> methodHandleSection; @Nonnull private final AnnotationSection<StringKey, TypeKey, ?, AnnotationElement, EncodedValue> annotationSection; public EncodedValueWriter( @@ -57,12 +60,16 @@ public abstract class EncodedValueWriter<StringKey, TypeKey, FieldRefKey extends @Nonnull TypeSection<?, TypeKey, ?> typeSection, @Nonnull FieldSection<?, ?, FieldRefKey, ?> fieldSection, @Nonnull MethodSection<?, ?, ?, MethodRefKey, ?> methodSection, + ProtoSection<?, ?, ProtoRefKey, ?> protoSection, + MethodHandleSection<MethodHandleKey, ?, ?> methodHandleSection, @Nonnull AnnotationSection<StringKey, TypeKey, ?, AnnotationElement, EncodedValue> annotationSection) { this.writer = writer; this.stringSection = stringSection; this.typeSection = typeSection; this.fieldSection = fieldSection; this.methodSection = methodSection; + this.protoSection = protoSection; + this.methodHandleSection = methodHandleSection; this.annotationSection = annotationSection; } @@ -146,4 +153,12 @@ public abstract class EncodedValueWriter<StringKey, TypeKey, FieldRefKey extends public void writeType(@Nonnull TypeKey value) throws IOException { writer.writeEncodedUint(ValueType.TYPE, typeSection.getItemIndex(value)); } + + public void writeMethodType(@Nonnull ProtoRefKey value) throws IOException { + writer.writeEncodedUint(ValueType.METHOD_TYPE, protoSection.getItemIndex(value)); + } + + public void writeMethodHandle(@Nonnull MethodHandleKey value) throws IOException { + writer.writeEncodedUint(ValueType.METHOD_HANDLE, methodHandleSection.getItemIndex(value)); + } } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/InstructionWriter.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/InstructionWriter.java index f6fd52fd..f86f683f 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/writer/InstructionWriter.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/InstructionWriter.java @@ -40,12 +40,7 @@ import org.jf.dexlib2.iface.instruction.DualReferenceInstruction; import org.jf.dexlib2.iface.instruction.ReferenceInstruction; import org.jf.dexlib2.iface.instruction.SwitchElement; import org.jf.dexlib2.iface.instruction.formats.*; -import org.jf.dexlib2.iface.reference.FieldReference; -import org.jf.dexlib2.iface.reference.MethodProtoReference; -import org.jf.dexlib2.iface.reference.MethodReference; -import org.jf.dexlib2.iface.reference.Reference; -import org.jf.dexlib2.iface.reference.StringReference; -import org.jf.dexlib2.iface.reference.TypeReference; +import org.jf.dexlib2.iface.reference.*; import org.jf.util.ExceptionWithContext; import javax.annotation.Nonnull; @@ -55,7 +50,8 @@ import java.util.List; public class InstructionWriter<StringRef extends StringReference, TypeRef extends TypeReference, FieldRefKey extends FieldReference, MethodRefKey extends MethodReference, - ProtoRefKey extends MethodProtoReference> { + ProtoRefKey extends MethodProtoReference, MethodHandleKey extends MethodHandleReference, + CallSiteKey extends CallSiteReference> { @Nonnull private final Opcodes opcodes; @Nonnull private final DexDataWriter writer; @Nonnull private final StringSection<?, StringRef> stringSection; @@ -63,10 +59,14 @@ public class InstructionWriter<StringRef extends StringReference, TypeRef extend @Nonnull private final FieldSection<?, ?, FieldRefKey, ?> fieldSection; @Nonnull private final MethodSection<?, ?, ?, MethodRefKey, ?> methodSection; @Nonnull private final ProtoSection<?, ?, ProtoRefKey, ?> protoSection; - - @Nonnull static <StringRef extends StringReference, TypeRef extends TypeReference, FieldRefKey extends FieldReference, - MethodRefKey extends MethodReference, ProtoRefKey extends MethodProtoReference> - InstructionWriter<StringRef, TypeRef, FieldRefKey, MethodRefKey, ProtoRefKey> + @Nonnull private final MethodHandleSection<MethodHandleKey, ?, ?> methodHandleSection; + @Nonnull private final CallSiteSection<CallSiteKey, ?> callSiteSection; + + @Nonnull static <StringRef extends StringReference, TypeRef extends TypeReference, + FieldRefKey extends FieldReference, MethodRefKey extends MethodReference, + ProtoRefKey extends MethodProtoReference, MethodHandleKey extends MethodHandleReference, + CallSiteKey extends CallSiteReference> + InstructionWriter<StringRef, TypeRef, FieldRefKey, MethodRefKey, ProtoRefKey, MethodHandleKey, CallSiteKey> makeInstructionWriter( @Nonnull Opcodes opcodes, @Nonnull DexDataWriter writer, @@ -74,9 +74,13 @@ public class InstructionWriter<StringRef extends StringReference, TypeRef extend @Nonnull TypeSection<?, ?, TypeRef> typeSection, @Nonnull FieldSection<?, ?, FieldRefKey, ?> fieldSection, @Nonnull MethodSection<?, ?, ?, MethodRefKey, ?> methodSection, - @Nonnull ProtoSection<?, ?, ProtoRefKey, ?> protoSection) { - return new InstructionWriter<StringRef, TypeRef, FieldRefKey, MethodRefKey, ProtoRefKey>( - opcodes, writer, stringSection, typeSection, fieldSection, methodSection, protoSection); + @Nonnull ProtoSection<?, ?, ProtoRefKey, ?> protoSection, + @Nonnull MethodHandleSection<MethodHandleKey, ?, ?> methodHandleSection, + @Nonnull CallSiteSection<CallSiteKey, ?> callSiteSection) { + return new InstructionWriter< + StringRef, TypeRef, FieldRefKey, MethodRefKey, ProtoRefKey, MethodHandleKey,CallSiteKey>( + opcodes, writer, stringSection, typeSection, fieldSection, methodSection, protoSection, + methodHandleSection, callSiteSection); } InstructionWriter(@Nonnull Opcodes opcodes, @@ -85,7 +89,9 @@ public class InstructionWriter<StringRef extends StringReference, TypeRef extend @Nonnull TypeSection<?, ?, TypeRef> typeSection, @Nonnull FieldSection<?, ?, FieldRefKey, ?> fieldSection, @Nonnull MethodSection<?, ?, ?, MethodRefKey, ?> methodSection, - @Nonnull ProtoSection<?, ?, ProtoRefKey, ?> protoSection) { + @Nonnull ProtoSection<?, ?, ProtoRefKey, ?> protoSection, + @Nonnull MethodHandleSection<MethodHandleKey, ?, ?> methodHandleSection, + @Nonnull CallSiteSection<CallSiteKey, ?> callSiteSection) { this.opcodes = opcodes; this.writer = writer; this.stringSection = stringSection; @@ -93,6 +99,8 @@ public class InstructionWriter<StringRef extends StringReference, TypeRef extend this.fieldSection = fieldSection; this.methodSection = methodSection; this.protoSection = protoSection; + this.methodHandleSection = methodHandleSection; + this.callSiteSection = callSiteSection; } private short getOpcodeValue(Opcode opcode) { @@ -551,6 +559,10 @@ public class InstructionWriter<StringRef extends StringReference, TypeRef extend return typeSection.getItemIndex((TypeRef) reference); case ReferenceType.METHOD_PROTO: return protoSection.getItemIndex((ProtoRefKey) reference); + case ReferenceType.METHOD_HANDLE: + return methodHandleSection.getItemIndex((MethodHandleKey) reference); + case ReferenceType.CALL_SITE: + return callSiteSection.getItemIndex((CallSiteKey) reference); default: throw new ExceptionWithContext("Unknown reference type: %d", referenceType); } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/MethodHandleSection.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/MethodHandleSection.java new file mode 100644 index 00000000..2190ab9c --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/MethodHandleSection.java @@ -0,0 +1,42 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.writer; + +import org.jf.dexlib2.iface.reference.FieldReference; +import org.jf.dexlib2.iface.reference.MethodHandleReference; +import org.jf.dexlib2.iface.reference.MethodReference; + +public interface MethodHandleSection<MethodHandleKey extends MethodHandleReference, FieldRefKey extends FieldReference, + MethodRefKey extends MethodReference> extends IndexSection<MethodHandleKey> { + FieldRefKey getFieldReference(MethodHandleKey methodHandleReference); + MethodRefKey getMethodReference(MethodHandleKey methodHandleReference); +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderCallSitePool.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderCallSitePool.java new file mode 100644 index 00000000..0c5c6aef --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderCallSitePool.java @@ -0,0 +1,98 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.writer.builder; + +import com.google.common.collect.Maps; +import org.jf.dexlib2.iface.reference.CallSiteReference; +import org.jf.dexlib2.writer.CallSiteSection; +import org.jf.dexlib2.writer.builder.BuilderEncodedValues.BuilderArrayEncodedValue; +import org.jf.dexlib2.writer.util.CallSiteUtil; + +import javax.annotation.Nonnull; +import java.util.Collection; +import java.util.Map; +import java.util.concurrent.ConcurrentMap; + +public class BuilderCallSitePool extends BaseBuilderPool + implements CallSiteSection<BuilderCallSiteReference, BuilderArrayEncodedValue> { + @Nonnull private final ConcurrentMap<CallSiteReference, BuilderCallSiteReference> internedItems = + Maps.newConcurrentMap(); + + public BuilderCallSitePool(@Nonnull DexBuilder dexBuilder) { + super(dexBuilder); + } + + @Nonnull public BuilderCallSiteReference internCallSite(@Nonnull CallSiteReference callSiteReference) { + BuilderCallSiteReference internedCallSite = internedItems.get(callSiteReference); + if (internedCallSite != null) { + return internedCallSite; + } + BuilderArrayEncodedValue encodedCallSite = dexBuilder.encodedArraySection.internArrayEncodedValue( + CallSiteUtil.getEncodedCallSite(callSiteReference)); + internedCallSite = new BuilderCallSiteReference(callSiteReference.getName(), encodedCallSite); + BuilderCallSiteReference existing = internedItems.putIfAbsent(internedCallSite, internedCallSite); + return existing == null ? internedCallSite : existing; + } + + @Override + public BuilderArrayEncodedValue getEncodedCallSite(BuilderCallSiteReference callSiteReference) { + return callSiteReference.encodedCallSite; + } + + @Override + public int getItemIndex(@Nonnull BuilderCallSiteReference builderCallSite) { + return builderCallSite.index; + } + + @Nonnull + @Override + public Collection<? extends Map.Entry<? extends BuilderCallSiteReference, Integer>> getItems() { + return new BuilderMapEntryCollection<BuilderCallSiteReference>(internedItems.values()) { + @Override + protected int getValue(@Nonnull BuilderCallSiteReference builderCallSiteReference) { + return builderCallSiteReference.index; + } + + @Override + protected int setValue(@Nonnull BuilderCallSiteReference builderCallSiteReference, int value) { + int prev = builderCallSiteReference.index; + builderCallSiteReference.index = value; + return prev; + } + }; + } + + @Override + public int getItemCount() { + return internedItems.size(); + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderCallSiteReference.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderCallSiteReference.java new file mode 100644 index 00000000..76e5b38f --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderCallSiteReference.java @@ -0,0 +1,88 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.writer.builder; + +import com.google.common.collect.ImmutableList; +import org.jf.dexlib2.base.reference.BaseCallSiteReference; +import org.jf.dexlib2.iface.value.StringEncodedValue; +import org.jf.dexlib2.writer.builder.BuilderEncodedValues.BuilderArrayEncodedValue; +import org.jf.dexlib2.writer.builder.BuilderEncodedValues.BuilderEncodedValue; +import org.jf.dexlib2.writer.builder.BuilderEncodedValues.BuilderMethodHandleEncodedValue; +import org.jf.dexlib2.writer.builder.BuilderEncodedValues.BuilderMethodTypeEncodedValue; + +import javax.annotation.Nonnull; +import java.util.List; + +import static org.jf.dexlib2.writer.DexWriter.NO_INDEX; + +public class BuilderCallSiteReference extends BaseCallSiteReference implements BuilderReference { + @Nonnull final String name; + @Nonnull final BuilderArrayEncodedValue encodedCallSite; + int index = NO_INDEX; + + public BuilderCallSiteReference(@Nonnull String name, + @Nonnull BuilderArrayEncodedValue encodedCallSite) { + this.name = name; + this.encodedCallSite = encodedCallSite; + } + + @Nonnull @Override public String getName() { + return name; + } + + @Nonnull @Override public BuilderMethodHandleReference getMethodHandle() { + return ((BuilderMethodHandleEncodedValue) encodedCallSite.elements.get(0)).getValue(); + } + + @Nonnull @Override public String getMethodName() { + return ((StringEncodedValue) encodedCallSite.elements.get(1)).getValue(); + } + + @Nonnull @Override public BuilderMethodProtoReference getMethodProto() { + return ((BuilderMethodTypeEncodedValue) encodedCallSite.elements.get(2)).getValue(); + } + + @Nonnull @Override public List<? extends BuilderEncodedValue> getExtraArguments() { + if (encodedCallSite.elements.size() <= 3) { + return ImmutableList.of(); + } + return encodedCallSite.elements.subList(3, encodedCallSite.elements.size()); + } + + @Override public int getIndex() { + return index; + } + + @Override public void setIndex(int index) { + this.index = index; + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderClassDef.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderClassDef.java index 9938a6e0..1d852818 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderClassDef.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderClassDef.java @@ -35,9 +35,9 @@ import com.google.common.base.Functions; import com.google.common.collect.*; import org.jf.dexlib2.base.reference.BaseTypeReference; import org.jf.dexlib2.iface.ClassDef; -import org.jf.dexlib2.util.FieldUtil; import org.jf.dexlib2.util.MethodUtil; import org.jf.dexlib2.writer.DexWriter; +import org.jf.dexlib2.writer.builder.BuilderEncodedValues.BuilderArrayEncodedValue; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -54,9 +54,9 @@ public class BuilderClassDef extends BaseTypeReference implements ClassDef { @Nonnull final SortedSet<BuilderField> instanceFields; @Nonnull final SortedSet<BuilderMethod> directMethods; @Nonnull final SortedSet<BuilderMethod> virtualMethods; + @Nullable final BuilderArrayEncodedValue staticInitializers; int classDefIndex = DexWriter.NO_INDEX; - int encodedArrayOffset = DexWriter.NO_OFFSET; int annotationDirectoryOffset = DexWriter.NO_OFFSET; BuilderClassDef(@Nonnull BuilderTypeReference type, @@ -65,14 +65,19 @@ public class BuilderClassDef extends BaseTypeReference implements ClassDef { @Nonnull BuilderTypeList interfaces, @Nullable BuilderStringReference sourceFile, @Nonnull BuilderAnnotationSet annotations, - @Nullable Iterable<? extends BuilderField> fields, - @Nullable Iterable<? extends BuilderMethod> methods) { - if (fields == null) { - fields = ImmutableList.of(); - } + @Nullable SortedSet<BuilderField> staticFields, + @Nullable SortedSet<BuilderField> instanceFields, + @Nullable Iterable<? extends BuilderMethod> methods, + @Nullable BuilderArrayEncodedValue staticInitializers) { if (methods == null) { methods = ImmutableList.of(); } + if (staticFields == null) { + staticFields = ImmutableSortedSet.of(); + } + if (instanceFields == null) { + instanceFields = ImmutableSortedSet.of(); + } this.type = type; this.accessFlags = accessFlags; @@ -80,10 +85,11 @@ public class BuilderClassDef extends BaseTypeReference implements ClassDef { this.interfaces = interfaces; this.sourceFile = sourceFile; this.annotations = annotations; - this.staticFields = ImmutableSortedSet.copyOf(Iterables.filter(fields, FieldUtil.FIELD_IS_STATIC)); - this.instanceFields = ImmutableSortedSet.copyOf(Iterables.filter(fields, FieldUtil.FIELD_IS_INSTANCE)); + this.staticFields = staticFields; + this.instanceFields = instanceFields; this.directMethods = ImmutableSortedSet.copyOf(Iterables.filter(methods, MethodUtil.METHOD_IS_DIRECT)); this.virtualMethods = ImmutableSortedSet.copyOf(Iterables.filter(methods, MethodUtil.METHOD_IS_VIRTUAL)); + this.staticInitializers = staticInitializers; } @Nonnull @Override public String getType() { return type.getType(); } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderClassPool.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderClassPool.java index 232b4824..26dbf07b 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderClassPool.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderClassPool.java @@ -48,21 +48,24 @@ import org.jf.dexlib2.iface.value.EncodedValue; import org.jf.dexlib2.util.EncodedValueUtils; import org.jf.dexlib2.writer.ClassSection; import org.jf.dexlib2.writer.DebugWriter; +import org.jf.dexlib2.writer.builder.BuilderEncodedValues.BuilderArrayEncodedValue; import org.jf.dexlib2.writer.builder.BuilderEncodedValues.BuilderEncodedValue; import org.jf.util.AbstractForwardSequentialList; -import org.jf.util.CollectionUtils; import org.jf.util.ExceptionWithContext; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.io.IOException; -import java.util.*; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentMap; public class BuilderClassPool extends BaseBuilderPool implements ClassSection<BuilderStringReference, BuilderTypeReference, BuilderTypeList, BuilderClassDef, BuilderField, BuilderMethod, BuilderAnnotationSet, - BuilderEncodedValue> { + BuilderArrayEncodedValue> { @Nonnull private final ConcurrentMap<String, BuilderClassDef> internedItems = Maps.newConcurrentMap(); @@ -153,23 +156,8 @@ public class BuilderClassPool extends BaseBuilderPool implements ClassSection<Bu }; @Nullable @Override - public Collection<? extends BuilderEncodedValue> getStaticInitializers(@Nonnull BuilderClassDef classDef) { - final SortedSet<BuilderField> sortedStaticFields = classDef.getStaticFields(); - - final int lastIndex = CollectionUtils.lastIndexOf(sortedStaticFields, HAS_INITIALIZER); - if (lastIndex > -1) { - return new AbstractCollection<BuilderEncodedValue>() { - @Nonnull @Override public Iterator<BuilderEncodedValue> iterator() { - Iterable<BuilderField> fields = Iterables.limit(sortedStaticFields, lastIndex + 1); - return Iterables.transform(fields, GET_INITIAL_VALUE).iterator(); - } - - @Override public int size() { - return lastIndex+1; - } - }; - } - return null; + public BuilderArrayEncodedValue getStaticInitializers(@Nonnull BuilderClassDef classDef) { + return classDef.staticInitializers; } @Nonnull @Override @@ -323,14 +311,6 @@ public class BuilderClassPool extends BaseBuilderPool implements ClassSection<Bu return new MutableMethodImplementation(impl); } - @Override public void setEncodedArrayOffset(@Nonnull BuilderClassDef builderClassDef, int offset) { - builderClassDef.encodedArrayOffset = offset; - } - - @Override public int getEncodedArrayOffset(@Nonnull BuilderClassDef builderClassDef) { - return builderClassDef.encodedArrayOffset; - } - @Override public void setAnnotationDirectoryOffset(@Nonnull BuilderClassDef builderClassDef, int offset) { builderClassDef.annotationDirectoryOffset = offset; } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderEncodedArrayPool.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderEncodedArrayPool.java new file mode 100644 index 00000000..c6d0db87 --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderEncodedArrayPool.java @@ -0,0 +1,94 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.writer.builder; + +import com.google.common.collect.Maps; +import org.jf.dexlib2.iface.value.ArrayEncodedValue; +import org.jf.dexlib2.writer.EncodedArraySection; +import org.jf.dexlib2.writer.builder.BuilderEncodedValues.BuilderArrayEncodedValue; +import org.jf.dexlib2.writer.builder.BuilderEncodedValues.BuilderEncodedValue; + +import javax.annotation.Nonnull; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentMap; + +public class BuilderEncodedArrayPool extends BaseBuilderPool implements + EncodedArraySection<BuilderArrayEncodedValue, BuilderEncodedValue> { + @Nonnull private final ConcurrentMap<ArrayEncodedValue, BuilderArrayEncodedValue> internedItems = + Maps.newConcurrentMap(); + + public BuilderEncodedArrayPool(@Nonnull DexBuilder dexBuilder) { + super(dexBuilder); + } + + @Nonnull public BuilderArrayEncodedValue internArrayEncodedValue(@Nonnull ArrayEncodedValue arrayEncodedValue) { + BuilderArrayEncodedValue builderArrayEncodedValue = internedItems.get(arrayEncodedValue); + if (builderArrayEncodedValue != null) { + return builderArrayEncodedValue; + } + + builderArrayEncodedValue = (BuilderArrayEncodedValue)dexBuilder.internEncodedValue(arrayEncodedValue); + BuilderArrayEncodedValue previous = internedItems.putIfAbsent( + builderArrayEncodedValue, builderArrayEncodedValue); + return previous == null ? builderArrayEncodedValue : previous; + } + + @Override + public int getItemOffset(@Nonnull BuilderArrayEncodedValue builderArrayEncodedValue) { + return builderArrayEncodedValue.offset; + } + + @Nonnull + @Override + public Collection<? extends Map.Entry<? extends BuilderArrayEncodedValue, Integer>> getItems() { + return new BuilderMapEntryCollection<BuilderArrayEncodedValue>(internedItems.values()) { + @Override + protected int getValue(@Nonnull BuilderArrayEncodedValue builderArrayEncodedValue) { + return builderArrayEncodedValue.offset; + } + + @Override + protected int setValue(@Nonnull BuilderArrayEncodedValue key, int value) { + int prev = key.offset; + key.offset = value; + return prev; + } + }; + } + + @Override + public List<? extends BuilderEncodedValue> getEncodedValueList(BuilderArrayEncodedValue builderArrayEncodedValue) { + return builderArrayEncodedValue.elements; + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderEncodedValues.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderEncodedValues.java index 0f047124..5fae60c2 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderEncodedValues.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderEncodedValues.java @@ -34,6 +34,7 @@ package org.jf.dexlib2.writer.builder; import org.jf.dexlib2.base.value.*; import org.jf.dexlib2.iface.value.EncodedValue; import org.jf.dexlib2.immutable.value.*; +import org.jf.dexlib2.writer.DexWriter; import org.jf.util.ExceptionWithContext; import javax.annotation.Nonnull; @@ -66,6 +67,7 @@ public abstract class BuilderEncodedValues { public static class BuilderArrayEncodedValue extends BaseArrayEncodedValue implements BuilderEncodedValue { @Nonnull final List<? extends BuilderEncodedValue> elements; + int offset = DexWriter.NO_OFFSET; BuilderArrayEncodedValue(@Nonnull List<? extends BuilderEncodedValue> elements) { this.elements = elements; @@ -239,4 +241,26 @@ public abstract class BuilderEncodedValues { return typeReference.getType(); } } + + public static class BuilderMethodTypeEncodedValue extends BaseMethodTypeEncodedValue + implements BuilderEncodedValue { + @Nonnull final BuilderMethodProtoReference methodProtoReference; + + public BuilderMethodTypeEncodedValue(@Nonnull BuilderMethodProtoReference methodProtoReference) { + this.methodProtoReference = methodProtoReference; + } + + @Nonnull @Override public BuilderMethodProtoReference getValue() { return methodProtoReference; } + } + + public static class BuilderMethodHandleEncodedValue extends BaseMethodHandleEncodedValue + implements BuilderEncodedValue { + @Nonnull final BuilderMethodHandleReference methodHandleReference; + + public BuilderMethodHandleEncodedValue(@Nonnull BuilderMethodHandleReference methodHandleReference) { + this.methodHandleReference = methodHandleReference; + } + + @Nonnull @Override public BuilderMethodHandleReference getValue() { return methodHandleReference; } + } } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderMethodHandlePool.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderMethodHandlePool.java new file mode 100644 index 00000000..320344c9 --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderMethodHandlePool.java @@ -0,0 +1,127 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.writer.builder; + +import com.google.common.collect.Maps; +import org.jf.dexlib2.MethodHandleType; +import org.jf.dexlib2.iface.reference.FieldReference; +import org.jf.dexlib2.iface.reference.MethodHandleReference; +import org.jf.dexlib2.iface.reference.MethodReference; +import org.jf.dexlib2.writer.MethodHandleSection; +import org.jf.util.ExceptionWithContext; + +import javax.annotation.Nonnull; +import java.util.Collection; +import java.util.Map; +import java.util.concurrent.ConcurrentMap; + +public class BuilderMethodHandlePool extends BaseBuilderPool + implements MethodHandleSection<BuilderMethodHandleReference, BuilderFieldReference, BuilderMethodReference> { + @Nonnull private final ConcurrentMap<MethodHandleReference, BuilderMethodHandleReference> internedItems = + Maps.newConcurrentMap(); + + public BuilderMethodHandlePool(@Nonnull DexBuilder dexBuilder) { + super(dexBuilder); + } + + public BuilderMethodHandleReference internMethodHandle(MethodHandleReference methodHandleReference) { + BuilderMethodHandleReference internedMethodHandle = internedItems.get(methodHandleReference); + if (internedMethodHandle != null) { + return internedMethodHandle; + } + + BuilderReference memberReference; + switch (methodHandleReference.getMethodHandleType()) { + case MethodHandleType.STATIC_PUT: + case MethodHandleType.STATIC_GET: + case MethodHandleType.INSTANCE_PUT: + case MethodHandleType.INSTANCE_GET: + memberReference = dexBuilder.internFieldReference( + (FieldReference) methodHandleReference.getMemberReference()); + break; + case MethodHandleType.INVOKE_STATIC: + case MethodHandleType.INVOKE_INSTANCE: + case MethodHandleType.INVOKE_CONSTRUCTOR: + case MethodHandleType.INVOKE_DIRECT: + case MethodHandleType.INVOKE_INTERFACE: + memberReference = dexBuilder.internMethodReference( + (MethodReference) methodHandleReference.getMemberReference()); + break; + default: + throw new ExceptionWithContext("Invalid method handle type: %d", + methodHandleReference.getMethodHandleType()); + } + + internedMethodHandle = new BuilderMethodHandleReference(methodHandleReference.getMethodHandleType(), + memberReference); + BuilderMethodHandleReference prev = internedItems.putIfAbsent(internedMethodHandle, internedMethodHandle); + return prev == null ? internedMethodHandle : prev; + } + + @Override + public BuilderFieldReference getFieldReference(BuilderMethodHandleReference methodHandleReference) { + return (BuilderFieldReference) methodHandleReference.getMemberReference(); + } + + @Override + public BuilderMethodReference getMethodReference(BuilderMethodHandleReference methodHandleReference) { + return (BuilderMethodReference) methodHandleReference.getMemberReference(); + } + + @Override + public int getItemIndex(@Nonnull BuilderMethodHandleReference builderMethodHandleReference) { + return builderMethodHandleReference.index; + } + + @Nonnull + @Override + public Collection<? extends Map.Entry<? extends BuilderMethodHandleReference, Integer>> getItems() { + return new BuilderMapEntryCollection<BuilderMethodHandleReference>(internedItems.values()) { + @Override + protected int getValue(@Nonnull BuilderMethodHandleReference builderMethodHandleReference) { + return builderMethodHandleReference.index; + } + + @Override + protected int setValue(@Nonnull BuilderMethodHandleReference builderMethodHandleReference, int value) { + int prev = builderMethodHandleReference.index; + builderMethodHandleReference.index = value; + return prev; + } + }; + } + + @Override + public int getItemCount() { + return internedItems.size(); + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderMethodHandleReference.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderMethodHandleReference.java new file mode 100644 index 00000000..4fe0e300 --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderMethodHandleReference.java @@ -0,0 +1,65 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.writer.builder; + +import org.jf.dexlib2.base.reference.BaseMethodHandleReference; + +import javax.annotation.Nonnull; + +import static org.jf.dexlib2.writer.DexWriter.NO_INDEX; + +public class BuilderMethodHandleReference extends BaseMethodHandleReference implements BuilderReference { + final int methodHandleType; + @Nonnull final BuilderReference memberReference; + int index = NO_INDEX; + + public BuilderMethodHandleReference(int methodHandleType, @Nonnull BuilderReference memberReference) { + this.methodHandleType = methodHandleType; + this.memberReference = memberReference; + } + + @Override public int getMethodHandleType() { + return methodHandleType; + } + + @Nonnull @Override public BuilderReference getMemberReference() { + return memberReference; + } + + @Override public int getIndex() { + return index; + } + + @Override public void setIndex(int index) { + this.index = index; + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/DexBuilder.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/DexBuilder.java index 25938fe0..60377882 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/DexBuilder.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/DexBuilder.java @@ -32,10 +32,7 @@ package org.jf.dexlib2.writer.builder; import com.google.common.base.Function; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterators; -import com.google.common.collect.Sets; +import com.google.common.collect.*; import org.jf.dexlib2.Opcodes; import org.jf.dexlib2.ValueType; import org.jf.dexlib2.iface.Annotation; @@ -44,8 +41,10 @@ import org.jf.dexlib2.iface.MethodImplementation; import org.jf.dexlib2.iface.MethodParameter; import org.jf.dexlib2.iface.reference.*; import org.jf.dexlib2.iface.value.*; +import org.jf.dexlib2.util.FieldUtil; import org.jf.dexlib2.writer.DexWriter; import org.jf.dexlib2.writer.builder.BuilderEncodedValues.*; +import org.jf.dexlib2.writer.util.StaticInitializerUtil; import org.jf.util.ExceptionWithContext; import javax.annotation.Nonnull; @@ -57,10 +56,11 @@ import java.util.Set; public class DexBuilder extends DexWriter<BuilderStringReference, BuilderStringReference, BuilderTypeReference, BuilderTypeReference, BuilderMethodProtoReference, BuilderFieldReference, BuilderMethodReference, - BuilderClassDef, BuilderAnnotation, BuilderAnnotationSet, BuilderTypeList, BuilderField, BuilderMethod, - BuilderEncodedValue, BuilderAnnotationElement, BuilderStringPool, BuilderTypePool, BuilderProtoPool, - BuilderFieldPool, BuilderMethodPool, BuilderClassPool, BuilderTypeListPool, BuilderAnnotationPool, - BuilderAnnotationSetPool> { + BuilderClassDef, BuilderCallSiteReference, BuilderMethodHandleReference, BuilderAnnotation, BuilderAnnotationSet, BuilderTypeList, + BuilderField, BuilderMethod, BuilderArrayEncodedValue, BuilderEncodedValue, BuilderAnnotationElement, + BuilderStringPool, BuilderTypePool, BuilderProtoPool, BuilderFieldPool, BuilderMethodPool, BuilderClassPool, + BuilderCallSitePool, BuilderMethodHandlePool, BuilderTypeListPool, BuilderAnnotationPool, + BuilderAnnotationSetPool, BuilderEncodedArrayPool> { public DexBuilder(@Nonnull Opcodes opcodes) { super(opcodes); @@ -122,14 +122,36 @@ public class DexBuilder extends DexWriter<BuilderStringReference, BuilderStringR } } + ImmutableSortedSet<BuilderField> staticFields = null; + ImmutableSortedSet<BuilderField> instanceFields = null; + BuilderArrayEncodedValue internedStaticInitializers = null; + if (fields != null) { + staticFields = ImmutableSortedSet.copyOf(Iterables.filter(fields, FieldUtil.FIELD_IS_STATIC)); + instanceFields = ImmutableSortedSet.copyOf(Iterables.filter(fields, FieldUtil.FIELD_IS_INSTANCE)); + ArrayEncodedValue staticInitializers = StaticInitializerUtil.getStaticInitializers(staticFields); + if (staticInitializers != null) { + internedStaticInitializers = encodedArraySection.internArrayEncodedValue(staticInitializers); + } + } + return classSection.internClass(new BuilderClassDef(typeSection.internType(type), accessFlags, typeSection.internNullableType(superclass), typeListSection.internTypeList(interfaces), stringSection.internNullableString(sourceFile), annotationSetSection.internAnnotationSet(annotations), - fields, - methods)); + staticFields, + instanceFields, + methods, + internedStaticInitializers)); + } + + public BuilderCallSiteReference internCallSite(@Nonnull CallSiteReference callSiteReference) { + return callSiteSection.internCallSite(callSiteReference); + } + + public BuilderMethodHandleReference internMethodHandle(@Nonnull MethodHandleReference methodHandleReference) { + return methodHandleSection.internMethodHandle(methodHandleReference); } @Nonnull public BuilderStringReference internStringReference(@Nonnull String string) { @@ -182,6 +204,12 @@ public class DexBuilder extends DexWriter<BuilderStringReference, BuilderStringR if (reference instanceof MethodProtoReference) { return internMethodProtoReference((MethodProtoReference) reference); } + if (reference instanceof CallSiteReference) { + return internCallSite((CallSiteReference) reference); + } + if (reference instanceof MethodHandleReference) { + return internMethodHandle((MethodHandleReference) reference); + } throw new IllegalArgumentException("Could not determine type of reference"); } @@ -258,6 +286,12 @@ public class DexBuilder extends DexWriter<BuilderStringReference, BuilderStringR case ValueType.TYPE: writer.writeType(((BuilderTypeEncodedValue)encodedValue).typeReference); break; + case ValueType.METHOD_TYPE: + writer.writeMethodType(((BuilderMethodTypeEncodedValue) encodedValue).methodProtoReference); + break; + case ValueType.METHOD_HANDLE: + writer.writeMethodHandle(((BuilderMethodHandleEncodedValue) encodedValue).methodHandleReference); + break; default: throw new ExceptionWithContext("Unrecognized value type: %d", encodedValue.getValueType()); } @@ -287,7 +321,7 @@ public class DexBuilder extends DexWriter<BuilderStringReference, BuilderStringR return internEncodedValue(encodedValue); } - @Nonnull private BuilderEncodedValue internEncodedValue(@Nonnull EncodedValue encodedValue) { + @Nonnull BuilderEncodedValue internEncodedValue(@Nonnull EncodedValue encodedValue) { switch (encodedValue.getValueType()) { case ValueType.ANNOTATION: return internAnnotationEncodedValue((AnnotationEncodedValue)encodedValue); @@ -322,6 +356,10 @@ public class DexBuilder extends DexWriter<BuilderStringReference, BuilderStringR return internStringEncodedValue((StringEncodedValue)encodedValue); case ValueType.TYPE: return internTypeEncodedValue((TypeEncodedValue)encodedValue); + case ValueType.METHOD_TYPE: + return internMethodTypeEncodedValue((MethodTypeEncodedValue) encodedValue); + case ValueType.METHOD_HANDLE: + return internMethodHandleEncodedValue((MethodHandleEncodedValue) encodedValue); default: throw new ExceptionWithContext("Unexpected encoded value type: %d", encodedValue.getValueType()); } @@ -364,6 +402,16 @@ public class DexBuilder extends DexWriter<BuilderStringReference, BuilderStringR return new BuilderTypeEncodedValue(typeSection.internType(type.getValue())); } + @Nonnull private BuilderMethodTypeEncodedValue internMethodTypeEncodedValue( + @Nonnull MethodTypeEncodedValue methodType) { + return new BuilderMethodTypeEncodedValue(protoSection.internMethodProto(methodType.getValue())); + } + + @Nonnull private BuilderMethodHandleEncodedValue internMethodHandleEncodedValue( + @Nonnull MethodHandleEncodedValue methodHandle) { + return new BuilderMethodHandleEncodedValue(methodHandleSection.internMethodHandle(methodHandle.getValue())); + } + protected class DexBuilderSectionProvider extends SectionProvider { @Nonnull @Override public BuilderStringPool getStringSection() { return new BuilderStringPool(); @@ -389,6 +437,14 @@ public class DexBuilder extends DexWriter<BuilderStringReference, BuilderStringR return new BuilderClassPool(DexBuilder.this); } + @Nonnull @Override public BuilderCallSitePool getCallSiteSection() { + return new BuilderCallSitePool(DexBuilder.this); + } + + @Nonnull @Override public BuilderMethodHandlePool getMethodHandleSection() { + return new BuilderMethodHandlePool(DexBuilder.this); + } + @Nonnull @Override public BuilderTypeListPool getTypeListSection() { return new BuilderTypeListPool(DexBuilder.this); } @@ -400,5 +456,9 @@ public class DexBuilder extends DexWriter<BuilderStringReference, BuilderStringR @Nonnull @Override public BuilderAnnotationSetPool getAnnotationSetSection() { return new BuilderAnnotationSetPool(DexBuilder.this); } + + @Nonnull @Override public BuilderEncodedArrayPool getEncodedArraySection() { + return new BuilderEncodedArrayPool(DexBuilder.this); + } } } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/io/MemoryDataStore.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/io/MemoryDataStore.java index 5797f806..67808361 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/writer/io/MemoryDataStore.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/io/MemoryDataStore.java @@ -8,24 +8,34 @@ import java.util.Arrays; public class MemoryDataStore implements DexDataStore { private byte[] buf; + private int size = 0; public MemoryDataStore() { - this(1024 * 1024); + this(0); } public MemoryDataStore(int initialCapacity) { buf = new byte[initialCapacity]; } - public byte[] getData() { + public byte[] getBuffer() { return buf; } + public int getSize() { + return size; + } + + public byte[] getData() { + return Arrays.copyOf(buf, size); + } + @Nonnull @Override public OutputStream outputAt(final int offset) { + if (offset < 0) throw new IllegalArgumentException(); return new OutputStream() { private int position = offset; @Override public void write(int b) throws IOException { - growBufferIfNeeded(position); + growBufferIfNeeded(position + 1); buf[position++] = (byte)b; } @@ -43,28 +53,39 @@ public class MemoryDataStore implements DexDataStore { }; } - private void growBufferIfNeeded(int index) { - if (index < buf.length) { - return; + private void growBufferIfNeeded(int minSize) { + if (minSize > size) { + if (minSize > buf.length) { + int newSize = getNewBufferSize(buf.length, minSize); + if (newSize < minSize) throw new IndexOutOfBoundsException(); + buf = Arrays.copyOf(buf, newSize); + } + size = minSize; } - buf = Arrays.copyOf(buf, (int)((index + 1) * 1.2)); + } + + protected int getNewBufferSize(int currentSize, int newMinSize) { + final int MIN_GROWTH_STEP = 256 * 1024; + return Math.max(newMinSize + (newMinSize >> 2), currentSize + MIN_GROWTH_STEP); } @Nonnull @Override public InputStream readAt(final int offset) { + if (offset < 0) throw new IllegalArgumentException(); return new InputStream() { private int position = offset; + private int mark = offset; @Override public int read() throws IOException { - if (position >= buf.length) { + if (position >= size) { return -1; } return buf[position++]; } @Override public int read(byte[] b) throws IOException { - int readLength = Math.min(b.length, buf.length - position); + int readLength = Math.min(b.length, size - position); if (readLength <= 0) { - if (position >= buf.length) { + if (position >= size) { return -1; } return 0; @@ -75,26 +96,38 @@ public class MemoryDataStore implements DexDataStore { } @Override public int read(byte[] b, int off, int len) throws IOException { - int readLength = Math.min(len, buf.length - position); + int readLength = Math.min(len, size - position); if (readLength <= 0) { - if (position >= buf.length) { + if (position >= size) { return -1; } return 0; } - System.arraycopy(buf, position, b, 0, readLength); + System.arraycopy(buf, position, b, off, readLength); position += readLength; return readLength; } @Override public long skip(long n) throws IOException { - int skipLength = (int)Math.min(n, buf.length - position); + int skipLength = (int)Math.max(0, Math.min(n, size - position)); position += skipLength; return skipLength; } @Override public int available() throws IOException { - return buf.length - position; + return Math.max(0, size - position); + } + + @Override public void mark(int i) { + mark = position; + } + + @Override public void reset() throws IOException { + position = mark; + } + + @Override public boolean markSupported() { + return true; } }; } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/CallSitePool.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/CallSitePool.java new file mode 100644 index 00000000..83f84226 --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/CallSitePool.java @@ -0,0 +1,59 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.writer.pool; + +import org.jf.dexlib2.iface.reference.CallSiteReference; +import org.jf.dexlib2.iface.value.ArrayEncodedValue; +import org.jf.dexlib2.writer.CallSiteSection; +import org.jf.dexlib2.writer.util.CallSiteUtil; + +import javax.annotation.Nonnull; + +public class CallSitePool extends BaseIndexPool<CallSiteReference> + implements CallSiteSection<CallSiteReference, ArrayEncodedValue> { + + public CallSitePool(@Nonnull DexPool dexPool) { + super(dexPool); + } + + public void intern(CallSiteReference callSiteReference) { + Integer prev = internedItems.put(callSiteReference, 0); + if (prev == null) { + dexPool.encodedArraySection.intern(getEncodedCallSite(callSiteReference)); + } + } + + @Override + public ArrayEncodedValue getEncodedCallSite(CallSiteReference callSiteReference) { + return CallSiteUtil.getEncodedCallSite(callSiteReference); + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/ClassPool.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/ClassPool.java index 7c1d6811..3492c075 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/ClassPool.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/ClassPool.java @@ -33,7 +33,9 @@ package org.jf.dexlib2.writer.pool; import com.google.common.base.Function; import com.google.common.base.Predicate; -import com.google.common.collect.*; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterables; +import com.google.common.collect.Ordering; import org.jf.dexlib2.DebugItemType; import org.jf.dexlib2.ReferenceType; import org.jf.dexlib2.builder.MutableMethodImplementation; @@ -42,14 +44,13 @@ import org.jf.dexlib2.iface.debug.*; import org.jf.dexlib2.iface.instruction.Instruction; import org.jf.dexlib2.iface.instruction.ReferenceInstruction; import org.jf.dexlib2.iface.reference.*; +import org.jf.dexlib2.iface.value.ArrayEncodedValue; import org.jf.dexlib2.iface.value.EncodedValue; -import org.jf.dexlib2.immutable.value.ImmutableEncodedValueFactory; -import org.jf.dexlib2.util.EncodedValueUtils; import org.jf.dexlib2.util.ReferenceUtil; import org.jf.dexlib2.writer.ClassSection; import org.jf.dexlib2.writer.DebugWriter; +import org.jf.dexlib2.writer.util.StaticInitializerUtil; import org.jf.util.AbstractForwardSequentialList; -import org.jf.util.CollectionUtils; import org.jf.util.ExceptionWithContext; import javax.annotation.Nonnull; @@ -60,7 +61,7 @@ import java.util.Map.Entry; public class ClassPool extends BasePool<String, PoolClassDef> implements ClassSection<CharSequence, CharSequence, TypeListPool.Key<? extends Collection<? extends CharSequence>>, PoolClassDef, Field, PoolMethod, - Set<? extends Annotation>, EncodedValue> { + Set<? extends Annotation>, ArrayEncodedValue> { public ClassPool(@Nonnull DexPool dexPool) { super(dexPool); @@ -94,6 +95,11 @@ public class ClassPool extends BasePool<String, PoolClassDef> implements ClassSe } dexPool.annotationSetSection.intern(field.getAnnotations()); + + ArrayEncodedValue staticInitializers = getStaticInitializers(poolClassDef); + if (staticInitializers != null) { + dexPool.encodedArraySection.intern(staticInitializers); + } } HashSet<String> methods = new HashSet<String>(); @@ -139,6 +145,9 @@ public class ClassPool extends BasePool<String, PoolClassDef> implements ClassSe case ReferenceType.METHOD: dexPool.methodSection.intern((MethodReference)reference); break; + case ReferenceType.CALL_SITE: + dexPool.callSiteSection.intern((CallSiteReference) reference); + break; default: throw new ExceptionWithContext("Unrecognized reference type: %d", instruction.getOpcode().referenceType); @@ -240,43 +249,9 @@ public class ClassPool extends BasePool<String, PoolClassDef> implements ClassSe return classDef.getSourceFile(); } - private static final Predicate<Field> HAS_INITIALIZER = new Predicate<Field>() { - @Override - public boolean apply(Field input) { - EncodedValue encodedValue = input.getInitialValue(); - return encodedValue != null && !EncodedValueUtils.isDefaultValue(encodedValue); - } - }; - - private static final Function<Field, EncodedValue> GET_INITIAL_VALUE = new Function<Field, EncodedValue>() { - @Override - public EncodedValue apply(Field input) { - EncodedValue initialValue = input.getInitialValue(); - if (initialValue == null) { - return ImmutableEncodedValueFactory.defaultValueForType(input.getType()); - } - return initialValue; - } - }; - - @Nullable @Override public Collection<? extends EncodedValue> getStaticInitializers( + @Nullable @Override public ArrayEncodedValue getStaticInitializers( @Nonnull PoolClassDef classDef) { - final SortedSet<Field> sortedStaticFields = classDef.getStaticFields(); - - final int lastIndex = CollectionUtils.lastIndexOf(sortedStaticFields, HAS_INITIALIZER); - if (lastIndex > -1) { - return new AbstractCollection<EncodedValue>() { - @Nonnull @Override public Iterator<EncodedValue> iterator() { - Iterable<Field> fields = Iterables.limit(sortedStaticFields, lastIndex + 1); - return Iterables.transform(fields, GET_INITIAL_VALUE).iterator(); - } - - @Override public int size() { - return lastIndex+1; - } - }; - } - return null; + return StaticInitializerUtil.getStaticInitializers(classDef.getStaticFields()); } @Nonnull @Override public Collection<? extends Field> getSortedStaticFields(@Nonnull PoolClassDef classDef) { @@ -419,14 +394,6 @@ public class ClassPool extends BasePool<String, PoolClassDef> implements ClassSe return new MutableMethodImplementation(poolMethod.getImplementation()); } - @Override public void setEncodedArrayOffset(@Nonnull PoolClassDef classDef, int offset) { - classDef.encodedArrayOffset = offset; - } - - @Override public int getEncodedArrayOffset(@Nonnull PoolClassDef classDef) { - return classDef.encodedArrayOffset; - } - @Override public void setAnnotationDirectoryOffset(@Nonnull PoolClassDef classDef, int offset) { classDef.annotationDirectoryOffset = offset; } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/DexPool.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/DexPool.java index 6d662ec3..62ebb940 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/DexPool.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/DexPool.java @@ -52,14 +52,25 @@ import java.util.Set; public class DexPool extends DexWriter<CharSequence, StringReference, CharSequence, TypeReference, MethodProtoReference, FieldReference, MethodReference, PoolClassDef, - Annotation, Set<? extends Annotation>, + CallSiteReference, MethodHandleReference, Annotation, Set<? extends Annotation>, TypeListPool.Key<? extends Collection<? extends CharSequence>>, Field, PoolMethod, - EncodedValue, AnnotationElement, StringPool, TypePool, ProtoPool, FieldPool, MethodPool, ClassPool, - TypeListPool, AnnotationPool, AnnotationSetPool> { + ArrayEncodedValue, EncodedValue, AnnotationElement, StringPool, TypePool, ProtoPool, FieldPool, MethodPool, + ClassPool, CallSitePool, MethodHandlePool, TypeListPool, AnnotationPool, AnnotationSetPool, EncodedArrayPool> { - private final Markable[] sections = new Markable[] { - stringSection, typeSection, protoSection, fieldSection, methodSection, classSection, typeListSection, - annotationSection, annotationSetSection + private final BasePool<?, ?>[] sections = new BasePool<?, ?>[] { + stringSection, + typeSection, + protoSection, + fieldSection, + methodSection, + classSection, + callSiteSection, + methodHandleSection, + + typeListSection, + annotationSection, + annotationSetSection, + encodedArraySection, }; public DexPool(Opcodes opcodes) { @@ -170,6 +181,12 @@ public class DexPool extends DexWriter<CharSequence, StringReference, CharSequen case ValueType.TYPE: writer.writeType(((TypeEncodedValue)encodedValue).getValue()); break; + case ValueType.METHOD_TYPE: + writer.writeMethodType(((MethodTypeEncodedValue) encodedValue).getValue()); + break; + case ValueType.METHOD_HANDLE: + writer.writeMethodHandle(((MethodHandleEncodedValue) encodedValue).getValue()); + break; default: throw new ExceptionWithContext("Unrecognized value type: %d", encodedValue.getValueType()); } @@ -205,6 +222,12 @@ public class DexPool extends DexWriter<CharSequence, StringReference, CharSequen case ValueType.METHOD: methodSection.intern(((MethodEncodedValue)encodedValue).getValue()); break; + case ValueType.METHOD_HANDLE: + methodHandleSection.intern(((MethodHandleEncodedValue)encodedValue).getValue()); + break; + case ValueType.METHOD_TYPE: + protoSection.intern(((MethodTypeEncodedValue)encodedValue).getValue()); + break; } } @@ -233,6 +256,14 @@ public class DexPool extends DexWriter<CharSequence, StringReference, CharSequen return new ClassPool(DexPool.this); } + @Nonnull @Override public CallSitePool getCallSiteSection() { + return new CallSitePool(DexPool.this); + } + + @Nonnull @Override public MethodHandlePool getMethodHandleSection() { + return new MethodHandlePool(DexPool.this); + } + @Nonnull @Override public TypeListPool getTypeListSection() { return new TypeListPool(DexPool.this); } @@ -244,5 +275,9 @@ public class DexPool extends DexWriter<CharSequence, StringReference, CharSequen @Nonnull @Override public AnnotationSetPool getAnnotationSetSection() { return new AnnotationSetPool(DexPool.this); } + + @Nonnull @Override public EncodedArrayPool getEncodedArraySection() { + return new EncodedArrayPool(DexPool.this); + } } } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/EncodedArrayPool.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/EncodedArrayPool.java new file mode 100644 index 00000000..0b33f987 --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/EncodedArrayPool.java @@ -0,0 +1,61 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.writer.pool; + +import org.jf.dexlib2.iface.value.ArrayEncodedValue; +import org.jf.dexlib2.iface.value.EncodedValue; +import org.jf.dexlib2.writer.EncodedArraySection; + +import javax.annotation.Nonnull; +import java.util.List; + +public class EncodedArrayPool extends BaseOffsetPool<ArrayEncodedValue> + implements EncodedArraySection<ArrayEncodedValue, EncodedValue> { + + public EncodedArrayPool(@Nonnull DexPool dexPool) { + super(dexPool); + } + + public void intern(@Nonnull ArrayEncodedValue arrayEncodedValue) { + Integer prev = internedItems.put(arrayEncodedValue, 0); + if (prev == null) { + for (EncodedValue value: arrayEncodedValue.getValue()) { + dexPool.internEncodedValue(value); + } + } + } + + @Override + public List<? extends EncodedValue> getEncodedValueList(ArrayEncodedValue arrayEncodedValue) { + return arrayEncodedValue.getValue(); + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/MethodHandlePool.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/MethodHandlePool.java new file mode 100644 index 00000000..017b74dc --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/MethodHandlePool.java @@ -0,0 +1,82 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.writer.pool; + +import org.jf.dexlib2.MethodHandleType; +import org.jf.dexlib2.iface.reference.FieldReference; +import org.jf.dexlib2.iface.reference.MethodHandleReference; +import org.jf.dexlib2.iface.reference.MethodReference; +import org.jf.dexlib2.writer.MethodHandleSection; +import org.jf.util.ExceptionWithContext; + +import javax.annotation.Nonnull; + +public class MethodHandlePool extends BaseIndexPool<MethodHandleReference> + implements MethodHandleSection<MethodHandleReference, FieldReference, MethodReference> { + public MethodHandlePool(@Nonnull DexPool dexPool) { + super(dexPool); + } + + public void intern(MethodHandleReference methodHandleReference) { + Integer prev = internedItems.put(methodHandleReference, 0); + if (prev == null) { + switch (methodHandleReference.getMethodHandleType()) { + case MethodHandleType.STATIC_PUT: + case MethodHandleType.STATIC_GET: + case MethodHandleType.INSTANCE_PUT: + case MethodHandleType.INSTANCE_GET: + dexPool.fieldSection.intern((FieldReference) methodHandleReference.getMemberReference()); + break; + case MethodHandleType.INVOKE_STATIC: + case MethodHandleType.INVOKE_INSTANCE: + case MethodHandleType.INVOKE_CONSTRUCTOR: + case MethodHandleType.INVOKE_DIRECT: + case MethodHandleType.INVOKE_INTERFACE: + dexPool.methodSection.intern((MethodReference) methodHandleReference.getMemberReference()); + break; + default: + throw new ExceptionWithContext( + "Invalid method handle type: %d", methodHandleReference.getMethodHandleType()); + } + } + } + + @Override + public FieldReference getFieldReference(MethodHandleReference methodHandleReference) { + return (FieldReference) methodHandleReference.getMemberReference(); + } + + @Override + public MethodReference getMethodReference(MethodHandleReference methodHandleReference) { + return (MethodReference) methodHandleReference.getMemberReference(); + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/PoolClassDef.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/PoolClassDef.java index 00958fb8..02f22102 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/PoolClassDef.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/PoolClassDef.java @@ -50,7 +50,6 @@ class PoolClassDef extends BaseTypeReference implements ClassDef { @Nonnull final ImmutableSortedSet<PoolMethod> virtualMethods; int classDefIndex = DexPool.NO_INDEX; - int encodedArrayOffset = DexPool.NO_OFFSET; int annotationDirectoryOffset = DexPool.NO_OFFSET; PoolClassDef(@Nonnull ClassDef classDef) { diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/util/CallSiteUtil.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/util/CallSiteUtil.java new file mode 100644 index 00000000..73dbc409 --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/util/CallSiteUtil.java @@ -0,0 +1,76 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.writer.util; + +import com.google.common.collect.Lists; +import org.jf.dexlib2.base.value.BaseArrayEncodedValue; +import org.jf.dexlib2.base.value.BaseMethodHandleEncodedValue; +import org.jf.dexlib2.base.value.BaseMethodTypeEncodedValue; +import org.jf.dexlib2.iface.reference.CallSiteReference; +import org.jf.dexlib2.iface.reference.MethodHandleReference; +import org.jf.dexlib2.iface.reference.MethodProtoReference; +import org.jf.dexlib2.iface.value.ArrayEncodedValue; +import org.jf.dexlib2.iface.value.EncodedValue; +import org.jf.dexlib2.immutable.value.ImmutableStringEncodedValue; + +import javax.annotation.Nonnull; +import java.util.List; + +public class CallSiteUtil { + public static ArrayEncodedValue getEncodedCallSite(CallSiteReference callSiteReference) { + return new BaseArrayEncodedValue() { + @Nonnull + @Override + public List<? extends EncodedValue> getValue() { + List<EncodedValue> encodedCallSite = Lists.newArrayList(); + + encodedCallSite.add(new BaseMethodHandleEncodedValue() { + @Nonnull + @Override + public MethodHandleReference getValue() { + return callSiteReference.getMethodHandle(); + } + }); + encodedCallSite.add(new ImmutableStringEncodedValue(callSiteReference.getMethodName())); + encodedCallSite.add(new BaseMethodTypeEncodedValue() { + @Nonnull + @Override + public MethodProtoReference getValue() { + return callSiteReference.getMethodProto(); + } + }); + encodedCallSite.addAll(callSiteReference.getExtraArguments()); + return encodedCallSite; + } + }; + } +} diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/util/StaticInitializerUtil.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/util/StaticInitializerUtil.java new file mode 100644 index 00000000..e4ca180b --- /dev/null +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/util/StaticInitializerUtil.java @@ -0,0 +1,97 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.writer.util; + +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; +import org.jf.dexlib2.base.value.BaseArrayEncodedValue; +import org.jf.dexlib2.iface.Field; +import org.jf.dexlib2.iface.value.ArrayEncodedValue; +import org.jf.dexlib2.iface.value.EncodedValue; +import org.jf.dexlib2.immutable.value.ImmutableEncodedValueFactory; +import org.jf.dexlib2.util.EncodedValueUtils; +import org.jf.util.AbstractForwardSequentialList; +import org.jf.util.CollectionUtils; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.Iterator; +import java.util.List; +import java.util.SortedSet; + +public class StaticInitializerUtil { + + @Nullable public static ArrayEncodedValue getStaticInitializers( + @Nonnull SortedSet<? extends Field> sortedStaticFields) { + final int lastIndex = CollectionUtils.lastIndexOf(sortedStaticFields, HAS_INITIALIZER); + if (lastIndex > -1) { + return new BaseArrayEncodedValue() { + @Nonnull + @Override + public List<? extends EncodedValue> getValue() { + return new AbstractForwardSequentialList<EncodedValue>() { + @Nonnull @Override public Iterator<EncodedValue> iterator() { + Iterable<? extends Field> fields = Iterables.limit(sortedStaticFields, lastIndex + 1); + return Iterables.transform(fields, GET_INITIAL_VALUE).iterator(); + } + + @Override public int size() { + return lastIndex+1; + } + }; + } + }; + } + return null; + } + + private static final Predicate<Field> HAS_INITIALIZER = new Predicate<Field>() { + @Override + public boolean apply(Field input) { + EncodedValue encodedValue = input.getInitialValue(); + return encodedValue != null && !EncodedValueUtils.isDefaultValue(encodedValue); + } + }; + + private static final Function<Field, EncodedValue> GET_INITIAL_VALUE = new Function<Field, EncodedValue>() { + @Override + public EncodedValue apply(Field input) { + EncodedValue initialValue = input.getInitialValue(); + if (initialValue == null) { + return ImmutableEncodedValueFactory.defaultValueForType(input.getType()); + } + return initialValue; + } + }; + +} diff --git a/util/src/main/java/org/jf/util/AbstractForwardSequentialList.java b/dexlib2/src/main/java/org/jf/util/AbstractForwardSequentialList.java index 19739e63..19739e63 100644 --- a/util/src/main/java/org/jf/util/AbstractForwardSequentialList.java +++ b/dexlib2/src/main/java/org/jf/util/AbstractForwardSequentialList.java diff --git a/util/src/main/java/org/jf/util/AbstractListIterator.java b/dexlib2/src/main/java/org/jf/util/AbstractListIterator.java index 240bf66c..240bf66c 100644 --- a/util/src/main/java/org/jf/util/AbstractListIterator.java +++ b/dexlib2/src/main/java/org/jf/util/AbstractListIterator.java diff --git a/util/src/main/java/org/jf/util/ArraySortedSet.java b/dexlib2/src/main/java/org/jf/util/ArraySortedSet.java index a0a82f1a..a0a82f1a 100644 --- a/util/src/main/java/org/jf/util/ArraySortedSet.java +++ b/dexlib2/src/main/java/org/jf/util/ArraySortedSet.java diff --git a/util/src/main/java/org/jf/util/BitSetUtils.java b/dexlib2/src/main/java/org/jf/util/BitSetUtils.java index 777a857a..777a857a 100644 --- a/util/src/main/java/org/jf/util/BitSetUtils.java +++ b/dexlib2/src/main/java/org/jf/util/BitSetUtils.java diff --git a/util/src/main/java/org/jf/util/CharSequenceUtils.java b/dexlib2/src/main/java/org/jf/util/CharSequenceUtils.java index f78d9bee..f78d9bee 100644 --- a/util/src/main/java/org/jf/util/CharSequenceUtils.java +++ b/dexlib2/src/main/java/org/jf/util/CharSequenceUtils.java diff --git a/util/src/main/java/org/jf/util/CollectionUtils.java b/dexlib2/src/main/java/org/jf/util/CollectionUtils.java index 23e23dc9..23e23dc9 100644 --- a/util/src/main/java/org/jf/util/CollectionUtils.java +++ b/dexlib2/src/main/java/org/jf/util/CollectionUtils.java diff --git a/util/src/main/java/org/jf/util/ExceptionWithContext.java b/dexlib2/src/main/java/org/jf/util/ExceptionWithContext.java index ae80388a..ae80388a 100644 --- a/util/src/main/java/org/jf/util/ExceptionWithContext.java +++ b/dexlib2/src/main/java/org/jf/util/ExceptionWithContext.java diff --git a/util/src/main/java/org/jf/util/Hex.java b/dexlib2/src/main/java/org/jf/util/Hex.java index 19727cda..19727cda 100644 --- a/util/src/main/java/org/jf/util/Hex.java +++ b/dexlib2/src/main/java/org/jf/util/Hex.java diff --git a/util/src/main/java/org/jf/util/ImmutableConverter.java b/dexlib2/src/main/java/org/jf/util/ImmutableConverter.java index d8d88002..d8d88002 100644 --- a/util/src/main/java/org/jf/util/ImmutableConverter.java +++ b/dexlib2/src/main/java/org/jf/util/ImmutableConverter.java diff --git a/util/src/main/java/org/jf/util/ImmutableUtils.java b/dexlib2/src/main/java/org/jf/util/ImmutableUtils.java index 8f4371fa..8f4371fa 100644 --- a/util/src/main/java/org/jf/util/ImmutableUtils.java +++ b/dexlib2/src/main/java/org/jf/util/ImmutableUtils.java diff --git a/util/src/main/java/org/jf/util/IndentingWriter.java b/dexlib2/src/main/java/org/jf/util/IndentingWriter.java index 8e4ca628..8e4ca628 100644 --- a/util/src/main/java/org/jf/util/IndentingWriter.java +++ b/dexlib2/src/main/java/org/jf/util/IndentingWriter.java diff --git a/util/src/main/java/org/jf/util/NibbleUtils.java b/dexlib2/src/main/java/org/jf/util/NibbleUtils.java index f06c1179..f06c1179 100644 --- a/util/src/main/java/org/jf/util/NibbleUtils.java +++ b/dexlib2/src/main/java/org/jf/util/NibbleUtils.java diff --git a/util/src/main/java/org/jf/util/NumberUtils.java b/dexlib2/src/main/java/org/jf/util/NumberUtils.java index 401de928..401de928 100644 --- a/util/src/main/java/org/jf/util/NumberUtils.java +++ b/dexlib2/src/main/java/org/jf/util/NumberUtils.java diff --git a/util/src/main/java/org/jf/util/RandomAccessFileInputStream.java b/dexlib2/src/main/java/org/jf/util/RandomAccessFileInputStream.java index e10f7c28..e10f7c28 100644 --- a/util/src/main/java/org/jf/util/RandomAccessFileInputStream.java +++ b/dexlib2/src/main/java/org/jf/util/RandomAccessFileInputStream.java diff --git a/util/src/main/java/org/jf/util/RandomAccessFileOutputStream.java b/dexlib2/src/main/java/org/jf/util/RandomAccessFileOutputStream.java index b804d265..b804d265 100644 --- a/util/src/main/java/org/jf/util/RandomAccessFileOutputStream.java +++ b/dexlib2/src/main/java/org/jf/util/RandomAccessFileOutputStream.java diff --git a/util/src/main/java/org/jf/util/SparseArray.java b/dexlib2/src/main/java/org/jf/util/SparseArray.java index 474e21c7..474e21c7 100644 --- a/util/src/main/java/org/jf/util/SparseArray.java +++ b/dexlib2/src/main/java/org/jf/util/SparseArray.java diff --git a/util/src/main/java/org/jf/util/SparseIntArray.java b/dexlib2/src/main/java/org/jf/util/SparseIntArray.java index 2b8b5e0a..2b8b5e0a 100644 --- a/util/src/main/java/org/jf/util/SparseIntArray.java +++ b/dexlib2/src/main/java/org/jf/util/SparseIntArray.java diff --git a/util/src/main/java/org/jf/util/StringUtils.java b/dexlib2/src/main/java/org/jf/util/StringUtils.java index 4de6d9de..4de6d9de 100644 --- a/util/src/main/java/org/jf/util/StringUtils.java +++ b/dexlib2/src/main/java/org/jf/util/StringUtils.java diff --git a/util/src/main/java/org/jf/util/StringWrapper.java b/dexlib2/src/main/java/org/jf/util/StringWrapper.java index 304c2972..05226de1 100644 --- a/util/src/main/java/org/jf/util/StringWrapper.java +++ b/dexlib2/src/main/java/org/jf/util/StringWrapper.java @@ -1,18 +1,18 @@ /* - * Copyright 2013, Google Inc. + * Copyright 2018, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * - * * Redistributions of source code must retain the above copyright + * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above + * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. - * * Neither the name of Google Inc. nor the names of its + * Neither the name of Google Inc. nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * @@ -187,10 +187,6 @@ public class StringWrapper { return newArr; } - public static void printWrappedString(@Nonnull PrintStream stream, @Nonnull String string) { - printWrappedString(stream, string, ConsoleUtil.getConsoleWidth()); - } - public static void printWrappedString(@Nonnull PrintStream stream, @Nonnull String string, int maxWidth) { for (String str: wrapStringOnBreaks(string, maxWidth)) { stream.println(str); diff --git a/util/src/main/java/org/jf/util/TwoColumnOutput.java b/dexlib2/src/main/java/org/jf/util/TwoColumnOutput.java index a04d9a5d..a04d9a5d 100644 --- a/util/src/main/java/org/jf/util/TwoColumnOutput.java +++ b/dexlib2/src/main/java/org/jf/util/TwoColumnOutput.java diff --git a/util/src/main/java/org/jf/util/Utf8Utils.java b/dexlib2/src/main/java/org/jf/util/Utf8Utils.java index 957e535d..957e535d 100644 --- a/util/src/main/java/org/jf/util/Utf8Utils.java +++ b/dexlib2/src/main/java/org/jf/util/Utf8Utils.java diff --git a/util/src/main/java/org/jf/util/WrappedIndentingWriter.java b/dexlib2/src/main/java/org/jf/util/WrappedIndentingWriter.java index df4575bd..df4575bd 100644 --- a/util/src/main/java/org/jf/util/WrappedIndentingWriter.java +++ b/dexlib2/src/main/java/org/jf/util/WrappedIndentingWriter.java diff --git a/dexlib2/src/test/java/org/jf/dexlib2/DexEntryFinderTest.java b/dexlib2/src/test/java/org/jf/dexlib2/DexEntryFinderTest.java index 610d3c76..9994e188 100644 --- a/dexlib2/src/test/java/org/jf/dexlib2/DexEntryFinderTest.java +++ b/dexlib2/src/test/java/org/jf/dexlib2/DexEntryFinderTest.java @@ -31,8 +31,8 @@ package org.jf.dexlib2; -import com.beust.jcommander.internal.Maps; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import org.jf.dexlib2.DexFileFactory.DexEntryFinder; import org.jf.dexlib2.DexFileFactory.DexFileNotFoundException; import org.jf.dexlib2.DexFileFactory.MultipleMatchingDexEntriesException; @@ -223,9 +223,5 @@ public class DexEntryFinderTest { } return null; } - - @Nonnull @Override public Opcodes getOpcodes() { - return Opcodes.getDefault(); - } } } diff --git a/dexlib2/src/test/java/org/jf/dexlib2/builder/LocatedItemsTest.java b/dexlib2/src/test/java/org/jf/dexlib2/builder/LocatedItemsTest.java new file mode 100644 index 00000000..a1947997 --- /dev/null +++ b/dexlib2/src/test/java/org/jf/dexlib2/builder/LocatedItemsTest.java @@ -0,0 +1,46 @@ +package org.jf.dexlib2.builder; + +import com.google.common.collect.Sets; +import org.jf.dexlib2.builder.debug.BuilderLineNumber; +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +public class LocatedItemsTest { + + private List<BuilderDebugItem> createItems(int count) { + List<BuilderDebugItem> items = new ArrayList<>(); + for(int i = 0; i < count; ++i) { + items.add(new BuilderLineNumber(i)); + } + return items; + } + + private void doTestMergeIntoKeepsOrderOfDebugItems(int countLocation1, int countLocation2) { + MethodLocation location1 = new MethodLocation(null, 123, 1); + MethodLocation location2 = new MethodLocation(null, 456, 2); + + List<BuilderDebugItem> items1 = createItems(countLocation1); + List<BuilderDebugItem> items2 = createItems(countLocation2); + location1.getDebugItems().addAll(items1); + location2.getDebugItems().addAll(items2); + + location1.mergeInto(location2); + + Assert.assertEquals(Sets.newHashSet(), location1.getDebugItems()); + // items1 appear BEFORE items2 + List<BuilderDebugItem> expectedItems = new ArrayList<>(items1); + expectedItems.addAll(items2); + Assert.assertEquals(expectedItems, new ArrayList<>(location2.getDebugItems())); + } + + @Test + public void testMergeIntoKeepsOrderOfDebugItems() { + doTestMergeIntoKeepsOrderOfDebugItems(2, 2); + doTestMergeIntoKeepsOrderOfDebugItems(0, 0); + doTestMergeIntoKeepsOrderOfDebugItems(0, 2); + doTestMergeIntoKeepsOrderOfDebugItems(2, 0); + } +} diff --git a/dexlib2/src/test/java/org/jf/dexlib2/pool/RollbackTest.java b/dexlib2/src/test/java/org/jf/dexlib2/pool/RollbackTest.java index 6074de14..87473bbf 100644 --- a/dexlib2/src/test/java/org/jf/dexlib2/pool/RollbackTest.java +++ b/dexlib2/src/test/java/org/jf/dexlib2/pool/RollbackTest.java @@ -84,7 +84,7 @@ public class RollbackTest { dexPool.internClass(class2); dexPool.reset(); dexPool.writeTo(dataStore); - dexFile1 = new RawDexFile(Opcodes.getDefault(), dataStore.getData()); + dexFile1 = new RawDexFile(Opcodes.getDefault(), dataStore.getBuffer()); } RawDexFile dexFile2; @@ -93,7 +93,7 @@ public class RollbackTest { DexPool dexPool = new DexPool(Opcodes.getDefault()); dexPool.internClass(class1); dexPool.writeTo(dataStore); - dexFile2 = new RawDexFile(Opcodes.getDefault(), dataStore.getData()); + dexFile2 = new RawDexFile(Opcodes.getDefault(), dataStore.getBuffer()); } List<MapItem> mapItems1 = dexFile1.getMapItems(); diff --git a/dexlib2/src/test/java/org/jf/dexlib2/writer/CallSiteTest.java b/dexlib2/src/test/java/org/jf/dexlib2/writer/CallSiteTest.java new file mode 100644 index 00000000..c909fb28 --- /dev/null +++ b/dexlib2/src/test/java/org/jf/dexlib2/writer/CallSiteTest.java @@ -0,0 +1,135 @@ +/* + * Copyright 2018, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.dexlib2.writer; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import org.jf.dexlib2.*; +import org.jf.dexlib2.builder.MethodImplementationBuilder; +import org.jf.dexlib2.builder.instruction.BuilderInstruction35c; +import org.jf.dexlib2.iface.ClassDef; +import org.jf.dexlib2.iface.DexFile; +import org.jf.dexlib2.iface.Method; +import org.jf.dexlib2.iface.instruction.Instruction; +import org.jf.dexlib2.iface.instruction.formats.Instruction35c; +import org.jf.dexlib2.iface.reference.CallSiteReference; +import org.jf.dexlib2.immutable.ImmutableClassDef; +import org.jf.dexlib2.immutable.ImmutableDexFile; +import org.jf.dexlib2.immutable.ImmutableMethod; +import org.jf.dexlib2.immutable.ImmutableMethodImplementation; +import org.jf.dexlib2.immutable.instruction.ImmutableInstruction35c; +import org.jf.dexlib2.immutable.reference.ImmutableCallSiteReference; +import org.jf.dexlib2.immutable.reference.ImmutableMethodHandleReference; +import org.jf.dexlib2.immutable.reference.ImmutableMethodProtoReference; +import org.jf.dexlib2.immutable.reference.ImmutableMethodReference; +import org.jf.dexlib2.writer.builder.BuilderCallSiteReference; +import org.jf.dexlib2.writer.builder.BuilderMethod; +import org.jf.dexlib2.writer.builder.DexBuilder; +import org.jf.dexlib2.writer.io.FileDataStore; +import org.junit.Assert; +import org.junit.Test; + +import java.io.File; +import java.io.IOException; + +public class CallSiteTest { + @Test + public void testPoolCallSite() throws IOException { + ClassDef class1 = new ImmutableClassDef("Lcls1;", AccessFlags.PUBLIC.getValue(), "Ljava/lang/Object;", null, null, + null, null, + Lists.<Method>newArrayList( + new ImmutableMethod("Lcls1", "method1", + ImmutableList.of(), "V", AccessFlags.PUBLIC.getValue(), null, + new ImmutableMethodImplementation(10, ImmutableList.of( + new ImmutableInstruction35c(Opcode.INVOKE_CUSTOM, 0, 0, 0, 0, 0, 0, + new ImmutableCallSiteReference("call_site_1", + new ImmutableMethodHandleReference(MethodHandleType.INVOKE_STATIC, + new ImmutableMethodReference("Lcls1", "loader", + ImmutableList.of("Ljava/lang/invoke/Lookup;", + "Ljava/lang/String;", + "Ljava/lang/invoke/MethodType;"), + "Ljava/lang/invoke/CallSite;")), + "someMethod", new ImmutableMethodProtoReference(ImmutableList.of(), "V"), ImmutableList.of())) + ), null, null)))); + + File tempFile = File.createTempFile("dex", ".dex"); + DexFileFactory.writeDexFile(tempFile.getPath(), + new ImmutableDexFile(Opcodes.forArtVersion(111), ImmutableList.of(class1))); + + verifyDexFile(DexFileFactory.loadDexFile(tempFile, Opcodes.forArtVersion(111))); + } + + @Test + public void testBuilderCallSite() throws IOException { + DexBuilder dexBuilder = new DexBuilder(Opcodes.forArtVersion(111)); + + BuilderCallSiteReference callSite = dexBuilder.internCallSite(new ImmutableCallSiteReference("call_site_1", + new ImmutableMethodHandleReference( + MethodHandleType.INVOKE_STATIC, + new ImmutableMethodReference("Lcls1", "loader", ImmutableList.of("Ljava/lang/invoke/Lookup;", + "Ljava/lang/String;", + "Ljava/lang/invoke/MethodType;"), + "Ljava/lang/invoke/CallSite;")), + "someMethod", + new ImmutableMethodProtoReference(ImmutableList.of(), "V"), ImmutableList.of())); + + MethodImplementationBuilder methodImplementationBuilder = new MethodImplementationBuilder(10); + methodImplementationBuilder.addInstruction(new BuilderInstruction35c(Opcode.INVOKE_CUSTOM, 0, 0, 0, 0, 0, 0, + callSite)); + + BuilderMethod method = dexBuilder.internMethod("Lcls1", "method1", null, "V", 0, ImmutableSet.of(), + methodImplementationBuilder.getMethodImplementation()); + dexBuilder.internClassDef("Lcls1;", AccessFlags.PUBLIC.getValue(), "Ljava/lang/Object;", null, null, + ImmutableSet.of(), null, + ImmutableList.of(method)); + + File tempFile = File.createTempFile("dex", ".dex"); + dexBuilder.writeTo(new FileDataStore(tempFile)); + + verifyDexFile(DexFileFactory.loadDexFile(tempFile, Opcodes.forArtVersion(111))); + } + + private void verifyDexFile(DexFile dexFile) { + Assert.assertEquals(1, dexFile.getClasses().size()); + ClassDef cls = Lists.newArrayList(dexFile.getClasses()).get(0); + Assert.assertEquals("Lcls1;", cls.getType()); + Assert.assertEquals(1, Lists.newArrayList(cls.getMethods()).size()); + Method method = Iterators.getNext(cls.getMethods().iterator(), null); + Assert.assertEquals("method1", method.getName()); + Assert.assertEquals(1, Lists.newArrayList(method.getImplementation().getInstructions()).size()); + Instruction instruction = Lists.newArrayList(method.getImplementation().getInstructions().iterator()).get(0); + Assert.assertEquals(Opcode.INVOKE_CUSTOM, instruction.getOpcode()); + Assert.assertTrue(((Instruction35c) instruction).getReference() instanceof CallSiteReference); + } +} diff --git a/dexlib2/src/test/java/org/jf/dexlib2/writer/DexDataWriterTest.java b/dexlib2/src/test/java/org/jf/dexlib2/writer/DexDataWriterTest.java index fee32d89..7ef574c1 100644 --- a/dexlib2/src/test/java/org/jf/dexlib2/writer/DexDataWriterTest.java +++ b/dexlib2/src/test/java/org/jf/dexlib2/writer/DexDataWriterTest.java @@ -34,7 +34,6 @@ package org.jf.dexlib2.writer; import junit.framework.Assert; import org.jf.dexlib2.ValueType; import org.jf.util.ExceptionWithContext; -import org.jf.util.NakedByteArrayOutputStream; import org.junit.Before; import org.junit.Test; diff --git a/dexlib2/src/test/java/org/jf/dexlib2/writer/DexWriterSleb128Test.java b/dexlib2/src/test/java/org/jf/dexlib2/writer/DexWriterSleb128Test.java index b41cf461..ffcf96b7 100644 --- a/dexlib2/src/test/java/org/jf/dexlib2/writer/DexWriterSleb128Test.java +++ b/dexlib2/src/test/java/org/jf/dexlib2/writer/DexWriterSleb128Test.java @@ -32,7 +32,6 @@ package org.jf.dexlib2.writer; import junit.framework.Assert; -import org.jf.util.NakedByteArrayOutputStream; import org.junit.Test; import java.io.IOException; diff --git a/dexlib2/src/test/java/org/jf/dexlib2/writer/DexWriterTest.java b/dexlib2/src/test/java/org/jf/dexlib2/writer/DexWriterTest.java index bf55e37f..fb65934f 100644 --- a/dexlib2/src/test/java/org/jf/dexlib2/writer/DexWriterTest.java +++ b/dexlib2/src/test/java/org/jf/dexlib2/writer/DexWriterTest.java @@ -77,7 +77,7 @@ public class DexWriterTest { throw new RuntimeException(ex); } - DexBackedDexFile dexFile = new DexBackedDexFile(Opcodes.getDefault(), dataStore.getData()); + DexBackedDexFile dexFile = new DexBackedDexFile(Opcodes.getDefault(), dataStore.getBuffer()); ClassDef dbClassDef = Iterables.getFirst(dexFile.getClasses(), null); Assert.assertNotNull(dbClassDef); Annotation dbAnnotation = Iterables.getFirst(dbClassDef.getAnnotations(), null); @@ -117,7 +117,7 @@ public class DexWriterTest { throw new RuntimeException(ex); } - DexBackedDexFile dexFile = new DexBackedDexFile(Opcodes.getDefault(), dataStore.getData()); + DexBackedDexFile dexFile = new DexBackedDexFile(Opcodes.getDefault(), dataStore.getBuffer()); ClassDef dbClassDef = Iterables.getFirst(dexFile.getClasses(), null); Assert.assertNotNull(dbClassDef); Annotation dbAnnotation = Iterables.getFirst(dbClassDef.getAnnotations(), null); diff --git a/dexlib2/src/test/java/org/jf/dexlib2/writer/DexWriterUleb128Test.java b/dexlib2/src/test/java/org/jf/dexlib2/writer/DexWriterUleb128Test.java index bf993bcd..4fb1acb3 100644 --- a/dexlib2/src/test/java/org/jf/dexlib2/writer/DexWriterUleb128Test.java +++ b/dexlib2/src/test/java/org/jf/dexlib2/writer/DexWriterUleb128Test.java @@ -32,7 +32,6 @@ package org.jf.dexlib2.writer; import junit.framework.Assert; -import org.jf.util.NakedByteArrayOutputStream; import org.junit.Test; import java.io.IOException; diff --git a/dexlib2/src/test/java/org/jf/dexlib2/writer/JumboStringConversionTest.java b/dexlib2/src/test/java/org/jf/dexlib2/writer/JumboStringConversionTest.java index 340b1fa1..c64f3b29 100644 --- a/dexlib2/src/test/java/org/jf/dexlib2/writer/JumboStringConversionTest.java +++ b/dexlib2/src/test/java/org/jf/dexlib2/writer/JumboStringConversionTest.java @@ -92,7 +92,7 @@ public class JumboStringConversionTest { MemoryDataStore dexStore = new MemoryDataStore(); dexBuilder.writeTo(dexStore); - DexBackedDexFile dexFile = new DexBackedDexFile(Opcodes.getDefault(), dexStore.getData()); + DexBackedDexFile dexFile = new DexBackedDexFile(Opcodes.getDefault(), dexStore.getBuffer()); ClassDef classDef = Iterables.getFirst(dexFile.getClasses(), null); Assert.assertNotNull(classDef); @@ -189,7 +189,7 @@ public class JumboStringConversionTest { MemoryDataStore dexStore = new MemoryDataStore(); dexBuilder.writeTo(dexStore); - DexBackedDexFile dexFile = new DexBackedDexFile(Opcodes.getDefault(), dexStore.getData()); + DexBackedDexFile dexFile = new DexBackedDexFile(Opcodes.getDefault(), dexStore.getBuffer()); ClassDef classDef = Iterables.getFirst(dexFile.getClasses(), null); Assert.assertNotNull(classDef); diff --git a/util/src/main/java/org/jf/util/NakedByteArrayOutputStream.java b/dexlib2/src/test/java/org/jf/dexlib2/writer/NakedByteArrayOutputStream.java index 1358627b..ea1e6d72 100644 --- a/util/src/main/java/org/jf/util/NakedByteArrayOutputStream.java +++ b/dexlib2/src/test/java/org/jf/dexlib2/writer/NakedByteArrayOutputStream.java @@ -1,18 +1,18 @@ /* - * Copyright 2012, Google Inc. + * Copyright 2018, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * - * * Redistributions of source code must retain the above copyright + * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above + * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. - * * Neither the name of Google Inc. nor the names of its + * Neither the name of Google Inc. nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * @@ -29,7 +29,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package org.jf.util; +package org.jf.dexlib2.writer; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/util/src/test/java/org/jf/util/AbstractForwardSequentialListTest.java b/dexlib2/src/test/java/org/jf/util/AbstractForwardSequentialListTest.java index 6b52320d..6b52320d 100644 --- a/util/src/test/java/org/jf/util/AbstractForwardSequentialListTest.java +++ b/dexlib2/src/test/java/org/jf/util/AbstractForwardSequentialListTest.java diff --git a/util/src/test/java/org/jf/util/IndentingWriterTest.java b/dexlib2/src/test/java/org/jf/util/IndentingWriterTest.java index 457262b5..457262b5 100644 --- a/util/src/test/java/org/jf/util/IndentingWriterTest.java +++ b/dexlib2/src/test/java/org/jf/util/IndentingWriterTest.java diff --git a/util/src/test/java/org/jf/util/NumberUtilsTest.java b/dexlib2/src/test/java/org/jf/util/NumberUtilsTest.java index a059c87d..a059c87d 100644 --- a/util/src/test/java/org/jf/util/NumberUtilsTest.java +++ b/dexlib2/src/test/java/org/jf/util/NumberUtilsTest.java diff --git a/util/src/test/java/org/jf/util/StringWrapperTest.java b/dexlib2/src/test/java/org/jf/util/StringWrapperTest.java index 94c79142..94c79142 100644 --- a/util/src/test/java/org/jf/util/StringWrapperTest.java +++ b/dexlib2/src/test/java/org/jf/util/StringWrapperTest.java diff --git a/examples/InvokeCustom/BootstrapLinker.smali b/examples/InvokeCustom/BootstrapLinker.smali new file mode 100644 index 00000000..cb50bb5f --- /dev/null +++ b/examples/InvokeCustom/BootstrapLinker.smali @@ -0,0 +1,60 @@ +.class public LBootstrapLinker; + +.super Ljava/lang/Object; + +.method public static normalLink(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Object;)Ljava/lang/invoke/CallSite; + .registers 15 + + sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; + const-string v3, "BootstrapLinker.normalLink - " + invoke-virtual {v0, v3}, Ljava/io/PrintStream;->print(Ljava/lang/String;)V + invoke-virtual {p3}, Ljava/lang/Object;->toString()Ljava/lang/String; + move-result-object v1 + invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V + + const v0, 0 + const v1, 1 + invoke-virtual {p2, v0, v1}, Ljava/lang/invoke/MethodType;->dropParameterTypes(II)Ljava/lang/invoke/MethodType; + move-result-object p2 + + const-class v1, LCustom; + + invoke-virtual {p0, v1, p1, p2}, Ljava/lang/invoke/MethodHandles$Lookup;->findVirtual(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; + move-result-object v2 + + new-instance v0, Ljava/lang/invoke/ConstantCallSite; + invoke-direct {v0, v2}, Ljava/lang/invoke/ConstantCallSite;-><init>(Ljava/lang/invoke/MethodHandle;)V + + return-object v0 +.end method + + +.method public static backwardsLink(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;)Ljava/lang/invoke/CallSite; + .registers 15 + + sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; + const-string v3, "BootstrapLinker.backwardsLink - " + invoke-virtual {v0, v3}, Ljava/io/PrintStream;->print(Ljava/lang/String;)V + invoke-virtual {v0, p3}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V + + const v0, 0 + const v1, 1 + invoke-virtual {p2, v0, v1}, Ljava/lang/invoke/MethodType;->dropParameterTypes(II)Ljava/lang/invoke/MethodType; + move-result-object p2 + + new-instance v0, Ljava/lang/StringBuffer; + invoke-direct {v0, p1}, Ljava/lang/StringBuffer;-><init>(Ljava/lang/String;)V + invoke-virtual {v0}, Ljava/lang/StringBuffer;->reverse()Ljava/lang/StringBuffer; + invoke-virtual {v0}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String; + move-result-object p1 + + const-class v1, LCustom; + + invoke-virtual {p0, v1, p1, p2}, Ljava/lang/invoke/MethodHandles$Lookup;->findVirtual(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; + move-result-object v2 + + new-instance v0, Ljava/lang/invoke/ConstantCallSite; + invoke-direct {v0, v2}, Ljava/lang/invoke/ConstantCallSite;-><init>(Ljava/lang/invoke/MethodHandle;)V + + return-object v0 +.end method diff --git a/examples/InvokeCustom/Custom.smali b/examples/InvokeCustom/Custom.smali new file mode 100644 index 00000000..63a28f5d --- /dev/null +++ b/examples/InvokeCustom/Custom.smali @@ -0,0 +1,27 @@ +.class public LCustom; + +.super Ljava/lang/Object; + +.method public doSomething(Ljava/lang/String;)Ljava/lang/String; + .registers 15 + + sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; + + invoke-virtual {v0, p1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V + + const-string v1, "Custom" + + return-object v1 +.end method + +.method public gnihtemoSod(Ljava/lang/String;)Ljava/lang/String; + .registers 15 + + sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; + + invoke-virtual {v0, p1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V + + const-string v1, "motsuC" + + return-object v1 +.end method
\ No newline at end of file diff --git a/examples/InvokeCustom/Main.smali b/examples/InvokeCustom/Main.smali new file mode 100644 index 00000000..db009cd2 --- /dev/null +++ b/examples/InvokeCustom/Main.smali @@ -0,0 +1,26 @@ +.class LMain; + +.super Ljava/lang/Object; + +.method public static main([Ljava/lang/String;)V + .registers 15 + + new-instance v0, LCustom; + invoke-direct {v0}, LCustom;-><init>()V + + const-string v1, "Arg to doSomething" + + invoke-custom {v0, v1}, normallyLinkedCallSite("doSomething", (LCustom;Ljava/lang/String;)Ljava/lang/String;, "just testing")@LBootstrapLinker;->normalLink(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;)Ljava/lang/invoke/CallSite; + move-result-object v2 + sget-object v3, Ljava/lang/System;->out:Ljava/io/PrintStream; + const-string v4, "got back - " + invoke-virtual {v3, v4}, Ljava/io/PrintStream;->print(Ljava/lang/String;)V + invoke-virtual {v3, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V + + invoke-custom {v0, v1}, backwardsLinkedCallSite("doSomething", (LCustom;Ljava/lang/String;)Ljava/lang/String;, "just testing")@LBootstrapLinker;->backwardsLink(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;)Ljava/lang/invoke/CallSite; + move-result-object v2 + sget-object v3, Ljava/lang/System;->out:Ljava/io/PrintStream; + const-string v4, "got back - " + invoke-virtual {v3, v4}, Ljava/io/PrintStream;->print(Ljava/lang/String;)V + invoke-virtual {v3, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V +.end method
\ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar Binary files differindex 241a7ad1..f6b961fd 100644 --- a/gradle/wrapper/gradle-wrapper.jar +++ b/gradle/wrapper/gradle-wrapper.jar diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ea282cc8..9a4163a4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Wed May 03 00:04:05 SGT 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-all.zip @@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -155,7 +155,7 @@ if $cygwin ; then fi # Escape application args -save ( ) { +save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } diff --git a/smali/src/main/antlr/smaliParser.g b/smali/src/main/antlr/smaliParser.g index 2d5eccaa..76de3bc5 100644 --- a/smali/src/main/antlr/smaliParser.g +++ b/smali/src/main/antlr/smaliParser.g @@ -41,6 +41,7 @@ tokens { ARRAY_DATA_DIRECTIVE; ARRAY_TYPE_PREFIX; ARROW; + AT; BOOL_LITERAL; BYTE_LITERAL; CATCH_DIRECTIVE; @@ -106,11 +107,14 @@ tokens { INSTRUCTION_FORMAT31i_OR_ID; INSTRUCTION_FORMAT31t; INSTRUCTION_FORMAT32x; + INSTRUCTION_FORMAT35c_CALL_SITE; INSTRUCTION_FORMAT35c_METHOD; INSTRUCTION_FORMAT35c_METHOD_ODEX; + INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE; INSTRUCTION_FORMAT35c_TYPE; INSTRUCTION_FORMAT35mi_METHOD; INSTRUCTION_FORMAT35ms_METHOD; + INSTRUCTION_FORMAT3rc_CALL_SITE; INSTRUCTION_FORMAT3rc_METHOD; INSTRUCTION_FORMAT3rc_METHOD_ODEX; INSTRUCTION_FORMAT3rc_TYPE; @@ -125,6 +129,8 @@ tokens { LOCALS_DIRECTIVE; LONG_LITERAL; METHOD_DIRECTIVE; + METHOD_HANDLE_TYPE_FIELD; + METHOD_HANDLE_TYPE_METHOD; MEMBER_NAME; NEGATIVE_INTEGER_LITERAL; NULL_LITERAL; @@ -176,6 +182,7 @@ tokens { I_ANNOTATION; I_ANNOTATION_ELEMENT; I_SUBANNOTATION; + I_ENCODED_METHOD_HANDLE; I_ENCODED_FIELD; I_ENCODED_METHOD; I_ENCODED_ENUM; @@ -208,6 +215,8 @@ tokens { I_STATEMENT_FORMAT21c_TYPE; I_STATEMENT_FORMAT21c_FIELD; I_STATEMENT_FORMAT21c_STRING; + I_STATEMENT_FORMAT21c_METHOD_HANDLE; + I_STATEMENT_FORMAT21c_METHOD_TYPE; I_STATEMENT_FORMAT21ih; I_STATEMENT_FORMAT21lh; I_STATEMENT_FORMAT21s; @@ -224,8 +233,10 @@ tokens { I_STATEMENT_FORMAT31i; I_STATEMENT_FORMAT31t; I_STATEMENT_FORMAT32x; + I_STATEMENT_FORMAT35c_CALL_SITE; I_STATEMENT_FORMAT35c_METHOD; I_STATEMENT_FORMAT35c_TYPE; + I_STATEMENT_FORMAT3rc_CALL_SITE; I_STATEMENT_FORMAT3rc_METHOD; I_STATEMENT_FORMAT3rc_TYPE; I_STATEMENT_FORMAT45cc_METHOD; @@ -236,12 +247,13 @@ tokens { I_STATEMENT_SPARSE_SWITCH; I_REGISTER_RANGE; I_REGISTER_LIST; + I_CALL_SITE_EXTRA_ARGUMENTS; + I_CALL_SITE_REFERENCE; } @header { package org.jf.smali; -import org.jf.dexlib2.Format; import org.jf.dexlib2.Opcode; import org.jf.dexlib2.Opcodes; } @@ -549,6 +561,8 @@ simple_name | PRIMITIVE_TYPE -> SIMPLE_NAME[$PRIMITIVE_TYPE] | VOID_TYPE -> SIMPLE_NAME[$VOID_TYPE] | ANNOTATION_VISIBILITY -> SIMPLE_NAME[$ANNOTATION_VISIBILITY] + | METHOD_HANDLE_TYPE_FIELD + | METHOD_HANDLE_TYPE_METHOD | INSTRUCTION_FORMAT10t -> SIMPLE_NAME[$INSTRUCTION_FORMAT10t] | INSTRUCTION_FORMAT10x -> SIMPLE_NAME[$INSTRUCTION_FORMAT10x] | INSTRUCTION_FORMAT10x_ODEX -> SIMPLE_NAME[$INSTRUCTION_FORMAT10x_ODEX] @@ -556,6 +570,8 @@ simple_name | INSTRUCTION_FORMAT12x_OR_ID -> SIMPLE_NAME[$INSTRUCTION_FORMAT12x_OR_ID] | INSTRUCTION_FORMAT21c_FIELD -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_FIELD] | INSTRUCTION_FORMAT21c_FIELD_ODEX -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_FIELD_ODEX] + | INSTRUCTION_FORMAT21c_METHOD_HANDLE -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_METHOD_HANDLE] + | INSTRUCTION_FORMAT21c_METHOD_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_METHOD_TYPE] | INSTRUCTION_FORMAT21c_STRING -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_STRING] | INSTRUCTION_FORMAT21c_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_TYPE] | INSTRUCTION_FORMAT21t -> SIMPLE_NAME[$INSTRUCTION_FORMAT21t] @@ -568,8 +584,10 @@ simple_name | INSTRUCTION_FORMAT23x -> SIMPLE_NAME[$INSTRUCTION_FORMAT23x] | INSTRUCTION_FORMAT31i_OR_ID -> SIMPLE_NAME[$INSTRUCTION_FORMAT31i_OR_ID] | INSTRUCTION_FORMAT31t -> SIMPLE_NAME[$INSTRUCTION_FORMAT31t] + | INSTRUCTION_FORMAT35c_CALL_SITE -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_CALL_SITE] | INSTRUCTION_FORMAT35c_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_METHOD] | INSTRUCTION_FORMAT35c_METHOD_ODEX -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_METHOD_ODEX] + | INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE] | INSTRUCTION_FORMAT35c_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_TYPE] | INSTRUCTION_FORMAT35mi_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT35mi_METHOD] | INSTRUCTION_FORMAT35ms_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT35ms_METHOD] @@ -636,7 +654,9 @@ literal | array_literal | subannotation | type_field_method_literal - | enum_literal; + | enum_literal + | method_handle_literal + | method_prototype; parsed_integer_literal returns[int value] : integer_literal { $value = LiteralTools.parseInt($integer_literal.text); }; @@ -699,6 +719,20 @@ type_field_method_literal | PRIMITIVE_TYPE | VOID_TYPE; +call_site_reference + : simple_name OPEN_PAREN STRING_LITERAL COMMA method_prototype (COMMA literal)* CLOSE_PAREN AT method_reference + -> ^(I_CALL_SITE_REFERENCE simple_name STRING_LITERAL method_prototype ^(I_CALL_SITE_EXTRA_ARGUMENTS literal*) + method_reference); + +method_handle_reference + : METHOD_HANDLE_TYPE_FIELD AT field_reference -> METHOD_HANDLE_TYPE_FIELD field_reference + | METHOD_HANDLE_TYPE_METHOD AT method_reference -> METHOD_HANDLE_TYPE_METHOD method_reference + | INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE AT method_reference -> INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE method_reference; + +method_handle_literal + : method_handle_reference + -> ^(I_ENCODED_METHOD_HANDLE method_handle_reference); + method_reference : (reference_type_descriptor ARROW)? member_name method_prototype -> reference_type_descriptor? member_name method_prototype; @@ -795,8 +829,10 @@ instruction_format22s instruction_format31i : INSTRUCTION_FORMAT31i | INSTRUCTION_FORMAT31i_OR_ID -> INSTRUCTION_FORMAT31i[$INSTRUCTION_FORMAT31i_OR_ID]; - - + +instruction_format35c_method + : INSTRUCTION_FORMAT35c_METHOD + | INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE -> INSTRUCTION_FORMAT35c_METHOD[$INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE]; instruction : insn_format10t @@ -809,6 +845,8 @@ instruction | insn_format20t | insn_format21c_field | insn_format21c_field_odex + | insn_format21c_method_handle + | insn_format21c_method_type | insn_format21c_string | insn_format21c_type | insn_format21ih @@ -829,11 +867,13 @@ instruction | insn_format31i | insn_format31t | insn_format32x + | insn_format35c_call_site | insn_format35c_method | insn_format35c_type | insn_format35c_method_odex | insn_format35mi_method | insn_format35ms_method + | insn_format3rc_call_site | insn_format3rc_method | insn_format3rc_method_odex | insn_format3rc_type @@ -909,6 +949,18 @@ insn_format21c_field_odex } -> ^(I_STATEMENT_FORMAT21c_FIELD[$start, "I_STATEMENT_FORMAT21c_FIELD"] INSTRUCTION_FORMAT21c_FIELD_ODEX REGISTER field_reference); +insn_format21c_method_handle + : //e.g. const-method-handle v0, invoke-static@Ljava/lang/Integer;->toString(I)Ljava/lang/String; + INSTRUCTION_FORMAT21c_METHOD_HANDLE REGISTER COMMA method_handle_reference + -> ^(I_STATEMENT_FORMAT21c_METHOD_HANDLE[$start, "I_STATEMENT_FORMAT21c_METHOD_HANDLE"] + INSTRUCTION_FORMAT21c_METHOD_HANDLE REGISTER method_handle_reference); + +insn_format21c_method_type + : //e.g. const-method-type v0, (ILjava/lang/String;)Ljava/lang/String; + INSTRUCTION_FORMAT21c_METHOD_TYPE REGISTER COMMA method_prototype + -> ^(I_STATEMENT_FORMAT21c_METHOD_TYPE[$start, "I_STATEMENT_FORMAT21c_METHOD_TYPE"] + INSTRUCTION_FORMAT21c_METHOD_TYPE REGISTER method_prototype); + insn_format21c_string : //e.g. const-string v1, "Hello World!" INSTRUCTION_FORMAT21c_STRING REGISTER COMMA STRING_LITERAL @@ -1016,10 +1068,16 @@ insn_format32x INSTRUCTION_FORMAT32x REGISTER COMMA REGISTER -> ^(I_STATEMENT_FORMAT32x[$start, "I_STATEMENT_FORMAT32x"] INSTRUCTION_FORMAT32x REGISTER REGISTER); +insn_format35c_call_site + : //e.g. invoke-custom {v0, v1}, call_site_name + // OR invoke-custom {v0, v1}, {"doSomething", (LCustom;Ljava/lang/String;)Ljava/lang/String;, "just testing"}, BootstrapLinker;->normalLink(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Object;)Ljava/lang/invoke/CallSite; + INSTRUCTION_FORMAT35c_CALL_SITE OPEN_BRACE register_list CLOSE_BRACE COMMA call_site_reference + -> ^(I_STATEMENT_FORMAT35c_CALL_SITE[$start, "I_STATEMENT_FORMAT35c_CALL_SITE"] INSTRUCTION_FORMAT35c_CALL_SITE register_list call_site_reference); + insn_format35c_method : //e.g. invoke-virtual {v0,v1} java/io/PrintStream/print(Ljava/lang/Stream;)V - INSTRUCTION_FORMAT35c_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference - -> ^(I_STATEMENT_FORMAT35c_METHOD[$start, "I_STATEMENT_FORMAT35c_METHOD"] INSTRUCTION_FORMAT35c_METHOD register_list method_reference); + instruction_format35c_method OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference + -> ^(I_STATEMENT_FORMAT35c_METHOD[$start, "I_STATEMENT_FORMAT35c_METHOD"] instruction_format35c_method register_list method_reference); insn_format35c_type : //e.g. filled-new-array {v0,v1}, I @@ -1047,6 +1105,12 @@ insn_format35ms_method throwOdexedInstructionException(input, $INSTRUCTION_FORMAT35ms_METHOD.text); }; +insn_format3rc_call_site + : //e.g. invoke-custom/range {v0 .. v1}, call_site_name + // OR invoke-custom/range {v0 .. v1}, {"doSomething", (LCustom;Ljava/lang/String;)Ljava/lang/String;, "just testing"}, BootstrapLinker;->normalLink(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Object;)Ljava/lang/invoke/CallSite; + INSTRUCTION_FORMAT3rc_CALL_SITE OPEN_BRACE register_range CLOSE_BRACE COMMA call_site_reference + -> ^(I_STATEMENT_FORMAT3rc_CALL_SITE[$start, "I_STATEMENT_FORMAT3rc_CALL_SITE"] INSTRUCTION_FORMAT3rc_CALL_SITE register_range call_site_reference); + insn_format3rc_method : //e.g. invoke-virtual/range {v25..v26}, java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; INSTRUCTION_FORMAT3rc_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA method_reference diff --git a/smali/src/main/antlr/smaliTreeWalker.g b/smali/src/main/antlr/smaliTreeWalker.g index 171756ec..f3595232 100644 --- a/smali/src/main/antlr/smaliTreeWalker.g +++ b/smali/src/main/antlr/smaliTreeWalker.g @@ -60,7 +60,9 @@ import org.jf.dexlib2.iface.reference.MethodReference; import org.jf.dexlib2.iface.value.EncodedValue; import org.jf.dexlib2.immutable.ImmutableAnnotation; import org.jf.dexlib2.immutable.ImmutableAnnotationElement; +import org.jf.dexlib2.immutable.reference.ImmutableCallSiteReference; import org.jf.dexlib2.immutable.reference.ImmutableFieldReference; +import org.jf.dexlib2.immutable.reference.ImmutableMethodHandleReference; import org.jf.dexlib2.immutable.reference.ImmutableMethodReference; import org.jf.dexlib2.immutable.reference.ImmutableMethodProtoReference; import org.jf.dexlib2.immutable.reference.ImmutableReference; @@ -80,6 +82,7 @@ import java.util.*; private int apiLevel = 15; private Opcodes opcodes = Opcodes.forApi(apiLevel); private DexBuilder dexBuilder; + private int callSiteNameIndex = 0; public void setDexBuilder(DexBuilder dexBuilder) { this.dexBuilder = dexBuilder; @@ -269,7 +272,7 @@ field_initial_value returns[EncodedValue encodedValue] : ^(I_FIELD_INITIAL_VALUE literal) {$encodedValue = $literal.encodedValue;} | /*epsilon*/; -literal returns[EncodedValue encodedValue] +literal returns[ImmutableEncodedValue encodedValue] : integer_literal { $encodedValue = new ImmutableIntEncodedValue($integer_literal.value); } | long_literal { $encodedValue = new ImmutableLongEncodedValue($long_literal.value); } | short_literal { $encodedValue = new ImmutableShortEncodedValue($short_literal.value); } @@ -285,7 +288,9 @@ literal returns[EncodedValue encodedValue] | subannotation { $encodedValue = new ImmutableAnnotationEncodedValue($subannotation.annotationType, $subannotation.elements); } | field_literal { $encodedValue = new ImmutableFieldEncodedValue($field_literal.value); } | method_literal { $encodedValue = new ImmutableMethodEncodedValue($method_literal.value); } - | enum_literal { $encodedValue = new ImmutableEnumEncodedValue($enum_literal.value); }; + | enum_literal { $encodedValue = new ImmutableEnumEncodedValue($enum_literal.value); } + | method_handle_literal { $encodedValue = new ImmutableMethodHandleEncodedValue($method_handle_literal.value); } + | method_prototype { $encodedValue = new ImmutableMethodTypeEncodedValue($method_prototype.proto); }; //everything but string fixed_64bit_literal_number returns[Number value] @@ -465,11 +470,12 @@ method returns[BuilderMethod ret] methodImplementation); }; -method_prototype returns[List<String> parameters, String returnType] +method_prototype returns[ImmutableMethodProtoReference proto] : ^(I_METHOD_PROTOTYPE ^(I_METHOD_RETURN_TYPE type_descriptor) method_type_list) { - $returnType = $type_descriptor.type; - $parameters = $method_type_list.types; + String returnType = $type_descriptor.type; + List<String> parameters = $method_type_list.types; + $proto = new ImmutableMethodProtoReference(parameters, returnType); }; method_name_and_prototype returns[String name, List<SmaliMethodParameter> parameters, String returnType] @@ -479,14 +485,14 @@ method_name_and_prototype returns[String name, List<SmaliMethodParameter> parame $parameters = Lists.newArrayList(); int paramRegister = 0; - for (String type: $method_prototype.parameters) { - $parameters.add(new SmaliMethodParameter(paramRegister++, type)); + for (CharSequence type: $method_prototype.proto.getParameterTypes()) { + $parameters.add(new SmaliMethodParameter(paramRegister++, type.toString())); char c = type.charAt(0); if (c == 'D' || c == 'J') { paramRegister++; } } - $returnType = $method_prototype.returnType; + $returnType = $method_prototype.proto.getReturnType(); }; method_type_list returns[List<String> types] @@ -501,6 +507,40 @@ method_type_list returns[List<String> types] } )*; +call_site_reference returns[ImmutableCallSiteReference callSiteReference] + : + ^(I_CALL_SITE_REFERENCE call_site_name=SIMPLE_NAME method_name=string_literal method_prototype + call_site_extra_arguments method_reference) + { + String callSiteName = $call_site_name.text; + ImmutableMethodHandleReference methodHandleReference = + new ImmutableMethodHandleReference(MethodHandleType.INVOKE_STATIC, + $method_reference.methodReference); + $callSiteReference = new ImmutableCallSiteReference( + callSiteName, methodHandleReference, $method_name.value, $method_prototype.proto, + $call_site_extra_arguments.extraArguments); + }; + +method_handle_type returns[int methodHandleType] + : (METHOD_HANDLE_TYPE_FIELD | METHOD_HANDLE_TYPE_METHOD | INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE) { + $methodHandleType = MethodHandleType.getMethodHandleType($text); + }; + +method_handle_reference returns[ImmutableMethodHandleReference methodHandle] + : method_handle_type (field_reference | method_reference) { + ImmutableReference reference; + if ($field_reference.text != null) { + reference = $field_reference.fieldReference; + } else { + reference = $method_reference.methodReference; + } + $methodHandle = new ImmutableMethodHandleReference($method_handle_type.methodHandleType, reference); + }; + +method_handle_literal returns[ImmutableMethodHandleReference value] + : (I_ENCODED_METHOD_HANDLE method_handle_reference) { + $value = $method_handle_reference.methodHandle; + }; method_reference returns[ImmutableMethodReference methodReference] : reference_type_descriptor? SIMPLE_NAME method_prototype @@ -512,7 +552,7 @@ method_reference returns[ImmutableMethodReference methodReference] type = $reference_type_descriptor.type; } $methodReference = new ImmutableMethodReference(type, $SIMPLE_NAME.text, - $method_prototype.parameters, $method_prototype.returnType); + $method_prototype.proto.getParameterTypes(), $method_prototype.proto.getReturnType()); }; field_reference returns[ImmutableFieldReference fieldReference] @@ -653,6 +693,10 @@ source $method::methodBuilder.addSetSourceFile(dexBuilder.internNullableStringReference($string_literal.value)); }; +call_site_extra_arguments returns[List<ImmutableEncodedValue> extraArguments] + : { $extraArguments = Lists.newArrayList(); } + ^(I_CALL_SITE_EXTRA_ARGUMENTS (literal { $extraArguments.add($literal.encodedValue); })*); + ordered_method_items : ^(I_ORDERED_METHOD_ITEMS (label_def | instruction | debug_directive)*); @@ -725,6 +769,8 @@ instruction | insn_format20bc | insn_format20t | insn_format21c_field + | insn_format21c_method_handle + | insn_format21c_method_type | insn_format21c_string | insn_format21c_type | insn_format21ih @@ -743,8 +789,10 @@ instruction | insn_format31i | insn_format31t | insn_format32x + | insn_format35c_call_site | insn_format35c_method | insn_format35c_type + | insn_format3rc_call_site | insn_format3rc_method | insn_format3rc_type | insn_format45cc_method @@ -842,6 +890,32 @@ insn_format21c_field dexBuilder.internFieldReference(fieldReference))); }; +insn_format21c_method_handle + : //e.g. const-method-handle v0, invoke-static@Ljava/lang/Integer;->toString(I)Ljava/lang/String; + ^(I_STATEMENT_FORMAT21c_METHOD_HANDLE inst=(INSTRUCTION_FORMAT21c_METHOD_HANDLE) REGISTER method_handle_reference) + { + Opcode opcode = opcodes.getOpcodeByName($inst.text); + short regA = parseRegister_byte($REGISTER.text); + + ImmutableMethodHandleReference methodHandleReference = $method_handle_reference.methodHandle; + + $method::methodBuilder.addInstruction(new BuilderInstruction21c(opcode, regA, + dexBuilder.internMethodHandle(methodHandleReference))); + }; + +insn_format21c_method_type + : //e.g. const-method-type v0, (ILjava/lang/String;)Ljava/lang/String; + ^(I_STATEMENT_FORMAT21c_METHOD_TYPE inst=(INSTRUCTION_FORMAT21c_METHOD_TYPE) REGISTER method_prototype) + { + Opcode opcode = opcodes.getOpcodeByName($inst.text); + short regA = parseRegister_byte($REGISTER.text); + + ImmutableMethodProtoReference methodProtoReference = $method_prototype.proto; + + $method::methodBuilder.addInstruction(new BuilderInstruction21c(opcode, regA, + dexBuilder.internMethodProtoReference(methodProtoReference))); + }; + insn_format21c_string : //e.g. const-string v1, "Hello World!" ^(I_STATEMENT_FORMAT21c_STRING INSTRUCTION_FORMAT21c_STRING REGISTER string_literal) @@ -1051,6 +1125,23 @@ insn_format32x $method::methodBuilder.addInstruction(new BuilderInstruction32x(opcode, regA, regB)); }; +insn_format35c_call_site + : //e.g. invoke-custom {v0, v1}, call_site_name + // OR invoke-custom {v0, v1}, {"doSomething", (LCustom;Ljava/lang/String;)Ljava/lang/String;, "just testing"}, BootstrapLinker;->normalLink(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Object;)Ljava/lang/invoke/CallSite; + ^(I_STATEMENT_FORMAT35c_CALL_SITE INSTRUCTION_FORMAT35c_CALL_SITE register_list call_site_reference) + { + Opcode opcode = opcodes.getOpcodeByName($INSTRUCTION_FORMAT35c_CALL_SITE.text); + + //this depends on the fact that register_list returns a byte[5] + byte[] registers = $register_list.registers; + byte registerCount = $register_list.registerCount; + + ImmutableCallSiteReference callSiteReference = $call_site_reference.callSiteReference; + + $method::methodBuilder.addInstruction(new BuilderInstruction35c(opcode, registerCount, registers[0], + registers[1], registers[2], registers[3], registers[4], dexBuilder.internCallSite(callSiteReference))); + }; + insn_format35c_method : //e.g. invoke-virtual {v0,v1} java/io/PrintStream/print(Ljava/lang/Stream;)V ^(I_STATEMENT_FORMAT35c_METHOD INSTRUCTION_FORMAT35c_METHOD register_list method_reference) @@ -1081,6 +1172,23 @@ insn_format35c_type registers[2], registers[3], registers[4], dexBuilder.internTypeReference($nonvoid_type_descriptor.type))); }; +insn_format3rc_call_site + : //e.g. invoke-custom/range {v0 .. v1}, call_site_name + // OR invoke-custom/range {v0 .. v1}, {"doSomething", (LCustom;Ljava/lang/String;)Ljava/lang/String;, "just testing"}, BootstrapLinker;->normalLink(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Object;)Ljava/lang/invoke/CallSite; + ^(I_STATEMENT_FORMAT3rc_CALL_SITE INSTRUCTION_FORMAT3rc_CALL_SITE register_range call_site_reference) + { + Opcode opcode = opcodes.getOpcodeByName($INSTRUCTION_FORMAT3rc_CALL_SITE.text); + int startRegister = $register_range.startRegister; + int endRegister = $register_range.endRegister; + + int registerCount = endRegister - startRegister + 1; + + ImmutableCallSiteReference callSiteReference = $call_site_reference.callSiteReference; + + $method::methodBuilder.addInstruction(new BuilderInstruction3rc(opcode, startRegister, registerCount, + dexBuilder.internCallSite(callSiteReference))); + }; + insn_format3rc_method : //e.g. invoke-virtual/range {v25..v26} java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; ^(I_STATEMENT_FORMAT3rc_METHOD INSTRUCTION_FORMAT3rc_METHOD register_range method_reference) @@ -1122,14 +1230,11 @@ insn_format45cc_method byte registerCount = $register_list.registerCount; ImmutableMethodReference methodReference = $method_reference.methodReference; - ImmutableMethodProtoReference methodProtoReference = new ImmutableMethodProtoReference( - $method_prototype.parameters, - $method_prototype.returnType); $method::methodBuilder.addInstruction(new BuilderInstruction45cc(opcode, registerCount, registers[0], registers[1], registers[2], registers[3], registers[4], dexBuilder.internMethodReference(methodReference), - dexBuilder.internMethodProtoReference(methodProtoReference))); + dexBuilder.internMethodProtoReference($method_prototype.proto))); }; insn_format4rcc_method @@ -1143,13 +1248,10 @@ insn_format4rcc_method int registerCount = endRegister-startRegister+1; ImmutableMethodReference methodReference = $method_reference.methodReference; - ImmutableMethodProtoReference methodProtoReference = new ImmutableMethodProtoReference( - $method_prototype.parameters, - $method_prototype.returnType); $method::methodBuilder.addInstruction(new BuilderInstruction4rcc(opcode, startRegister, registerCount, dexBuilder.internMethodReference(methodReference), - dexBuilder.internMethodProtoReference(methodProtoReference))); + dexBuilder.internMethodProtoReference($method_prototype.proto))); }; insn_format51l_type @@ -1282,9 +1384,7 @@ annotations returns[Set<Annotation> annotations] } })*) { - if (annotationMap.size() > 0) { $annotations = ImmutableSet.copyOf(annotationMap.values()); - } }; annotation returns[Annotation annotation] @@ -1314,19 +1414,19 @@ subannotation returns[String annotationType, List<AnnotationElement> elements] $elements = elements; }; -field_literal returns[FieldReference value] +field_literal returns[ImmutableFieldReference value] : ^(I_ENCODED_FIELD field_reference) { $value = $field_reference.fieldReference; }; -method_literal returns[MethodReference value] +method_literal returns[ImmutableMethodReference value] : ^(I_ENCODED_METHOD method_reference) { $value = $method_reference.methodReference; }; -enum_literal returns[FieldReference value] +enum_literal returns[ImmutableFieldReference value] : ^(I_ENCODED_ENUM field_reference) { $value = $field_reference.fieldReference; diff --git a/smali/src/main/java/org/jf/smali/Smali.java b/smali/src/main/java/org/jf/smali/Smali.java index 7f3762af..1c7d1584 100644 --- a/smali/src/main/java/org/jf/smali/Smali.java +++ b/smali/src/main/java/org/jf/smali/Smali.java @@ -50,6 +50,7 @@ import java.util.Arrays; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import java.util.TreeSet; import java.util.concurrent.*; public class Smali { @@ -73,7 +74,7 @@ public class Smali { * @return true if assembly completed with no errors, or false if errors were encountered */ public static boolean assemble(final SmaliOptions options, List<String> input) throws IOException { - LinkedHashSet<File> filesToProcessSet = new LinkedHashSet<File>(); + TreeSet<File> filesToProcessSet = new TreeSet<File>(); for (String fileToProcess: input) { File argFile = new File(fileToProcess); diff --git a/smali/src/main/java/org/jf/smali/SmaliTestUtils.java b/smali/src/main/java/org/jf/smali/SmaliTestUtils.java index a0fe55c2..8b1d34a1 100644 --- a/smali/src/main/java/org/jf/smali/SmaliTestUtils.java +++ b/smali/src/main/java/org/jf/smali/SmaliTestUtils.java @@ -72,7 +72,7 @@ public class SmaliTestUtils { smaliParser.smali_file_return result = parser.smali_file(); if(parser.getNumberOfSyntaxErrors() > 0 || lexer.getNumberOfSyntaxErrors() > 0) { - throw new RuntimeException("Error occured while compiling text"); + throw new RuntimeException("Error occurred while compiling text"); } CommonTree t = result.getTree(); @@ -87,14 +87,14 @@ public class SmaliTestUtils { dexGen.smali_file(); if (dexGen.getNumberOfSyntaxErrors() > 0) { - throw new RuntimeException("Error occured while compiling text"); + throw new RuntimeException("Error occurred while compiling text"); } MemoryDataStore dataStore = new MemoryDataStore(); dexBuilder.writeTo(dataStore); - DexBackedDexFile dexFile = new DexBackedDexFile(Opcodes.forApi(apiLevel), dataStore.getData()); + DexBackedDexFile dexFile = new DexBackedDexFile(Opcodes.forApi(apiLevel), dataStore.getBuffer()); return Iterables.getFirst(dexFile.getClasses(), null); } diff --git a/smali/src/main/java/org/jf/smali/smaliFlexLexer.java b/smali/src/main/java/org/jf/smali/smaliFlexLexer.java index 40921113..1cb964e2 100644 --- a/smali/src/main/java/org/jf/smali/smaliFlexLexer.java +++ b/smali/src/main/java/org/jf/smali/smaliFlexLexer.java @@ -4,14 +4,15 @@ package org.jf.smali; import java.io.*; import org.antlr.runtime.*; +import org.jf.smali.util.*; import org.jf.util.*; import static org.jf.smali.smaliParser.*; /** - * This class is a scanner generated by + * This class is a scanner generated by * <a href="http://www.jflex.de/">JFlex</a> 1.6.1 - * from the specification file <tt>./src/main/jflex/smaliLexer.jflex</tt> + * from the specification file <tt>/ssd/aosp-master/external/smali/smali/src/main/jflex/smaliLexer.jflex</tt> */ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { @@ -35,14 +36,14 @@ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { * at the beginning of a line * l is of the form l = 2*k, k a non negative integer */ - private static final int ZZ_LEXSTATE[] = { + private static final int ZZ_LEXSTATE[] = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5 }; - /** + /** * Translates characters to character classes */ - private static final String ZZ_CMAP_PACKED = + private static final String ZZ_CMAP_PACKED = "\11\0\1\115\1\64\2\0\1\64\22\0\1\50\1\0\1\62\1\72"+ "\1\22\2\0\1\63\1\113\1\114\2\0\1\110\1\7\1\17\1\30"+ "\1\1\1\76\1\75\1\102\1\73\1\5\1\77\1\5\1\101\1\4"+ @@ -55,12 +56,12 @@ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { "\1\67\1\111\1\0\1\112\43\0\u1f5f\22\20\0\30\22\10\0\ub7d0\22"+ "\u0400\20\u0400\21\u1ff0\22\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\40\0"; - /** + /** * Translates characters to character classes */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - /** + /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); @@ -68,59 +69,63 @@ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { private static final String ZZ_ACTION_PACKED_0 = "\6\0\1\1\1\2\2\3\1\2\4\3\1\4\1\1"+ "\2\5\1\3\1\6\15\3\1\7\1\3\1\10\1\11"+ - "\2\3\1\12\1\13\1\1\1\14\1\15\1\16\1\17"+ - "\1\20\1\21\1\22\1\23\1\24\1\5\1\23\1\25"+ - "\1\26\1\23\1\27\1\30\1\31\1\0\1\27\1\32"+ - "\1\33\1\0\1\2\3\3\1\34\1\35\1\36\1\0"+ - "\1\37\1\40\1\41\2\3\2\42\1\3\1\0\1\43"+ - "\12\3\3\4\1\44\10\4\1\45\1\3\1\0\1\3"+ - "\2\0\22\3\1\46\31\3\6\0\1\47\1\50\1\51"+ - "\1\52\1\53\1\54\1\55\1\56\1\57\1\60\1\61"+ - "\1\2\1\0\1\41\1\3\1\0\1\62\1\36\2\3"+ - "\1\42\12\3\1\41\5\3\21\4\1\3\1\0\1\63"+ - "\2\0\1\64\2\0\43\3\1\65\14\3\1\66\1\0"+ - "\1\64\1\0\1\67\1\52\1\61\1\0\1\36\1\0"+ - "\2\3\1\42\5\3\1\70\5\3\1\70\4\3\25\4"+ - "\4\0\7\3\1\71\5\3\1\72\11\3\1\73\5\3"+ - "\1\74\1\3\1\75\6\3\1\76\6\3\1\77\3\3"+ - "\1\52\1\61\1\100\2\3\1\101\14\3\4\4\1\102"+ - "\13\4\1\103\1\0\3\4\3\3\1\104\32\3\1\0"+ - "\11\3\1\105\5\3\1\0\3\3\1\52\1\61\1\3"+ - "\1\106\22\3\1\0\1\3\1\4\1\107\1\110\1\111"+ - "\1\112\3\4\1\113\3\4\1\114\13\4\5\3\1\0"+ - "\34\3\1\105\5\3\2\0\12\3\1\71\4\3\2\0"+ - "\3\3\2\115\12\3\1\0\13\3\1\0\1\3\2\4"+ - "\1\116\4\4\1\117\15\4\1\120\7\3\1\0\1\121"+ - "\1\0\16\3\1\71\11\3\1\71\12\3\1\0\1\122"+ - "\1\74\11\3\1\0\3\3\1\123\1\124\1\0\1\61"+ - "\11\3\1\0\21\3\1\0\1\3\24\4\1\3\1\71"+ - "\5\3\1\0\1\125\13\3\1\0\10\3\1\0\3\3"+ - "\1\126\10\3\1\0\4\3\1\127\1\3\2\0\3\3"+ - "\1\0\4\3\1\70\2\3\1\70\2\3\1\0\15\3"+ - "\1\70\3\3\1\130\1\3\1\4\1\131\5\4\1\132"+ - "\1\133\11\4\1\0\1\4\6\3\1\0\11\3\1\72"+ - "\2\3\1\72\1\3\1\0\2\3\1\0\7\3\1\74"+ - "\1\0\2\3\1\134\4\3\2\0\2\3\1\0\10\3"+ - "\1\135\1\136\16\3\6\4\1\137\1\140\5\4\1\141"+ - "\2\4\1\142\3\3\1\143\1\0\1\3\1\144\7\3"+ - "\1\0\11\3\1\0\5\3\2\0\2\3\1\145\20\3"+ - "\1\146\1\147\1\150\10\4\1\151\1\4\2\3\2\0"+ - "\5\3\1\0\2\3\1\105\1\65\3\3\1\105\1\152"+ - "\5\3\1\0\1\153\1\0\7\3\1\154\7\3\11\4"+ - "\1\155\2\0\1\156\13\3\1\157\1\160\2\3\1\161"+ - "\2\3\1\0\1\154\2\3\1\154\3\3\11\4\2\0"+ - "\1\162\1\163\1\164\10\3\1\0\5\3\1\165\1\166"+ - "\1\167\5\4\1\170\2\0\1\171\6\3\1\0\4\3"+ - "\1\172\1\173\3\4\3\0\5\3\1\0\3\3\1\174"+ - "\3\4\3\0\4\3\1\0\3\3\1\0\3\4\1\0"+ - "\1\175\1\0\2\3\1\176\1\177\1\200\2\3\1\0"+ - "\1\201\1\202\1\203\1\204\1\0\2\3\3\0\1\205"+ - "\2\0\1\206\1\3\4\0\1\207\1\3\4\0\1\3"+ - "\3\0\1\210\1\3\3\0\1\3\1\211\1\212\1\213"+ - "\1\214"; + "\1\3\1\12\1\3\1\13\1\14\1\1\1\15\1\16"+ + "\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\5"+ + "\1\24\1\26\1\27\1\24\1\30\1\31\1\32\1\0"+ + "\1\30\1\33\1\34\1\0\1\2\3\3\1\35\1\36"+ + "\1\37\1\0\1\40\1\41\1\42\2\3\2\43\1\3"+ + "\1\0\1\44\12\3\3\4\1\45\10\4\1\46\1\3"+ + "\1\0\1\3\2\0\22\3\1\47\31\3\6\0\1\50"+ + "\1\51\1\52\1\53\1\54\1\55\1\56\1\57\1\60"+ + "\1\61\1\62\1\2\1\0\1\42\1\3\1\0\1\63"+ + "\1\37\2\3\1\43\12\3\1\42\5\3\21\4\1\3"+ + "\1\0\1\64\2\0\1\65\2\0\43\3\1\66\14\3"+ + "\1\67\1\0\1\65\1\0\1\70\1\53\1\62\1\0"+ + "\1\37\1\0\2\3\1\43\5\3\1\71\5\3\1\71"+ + "\4\3\25\4\4\0\7\3\1\72\5\3\1\73\12\3"+ + "\1\74\5\3\1\75\1\3\1\76\6\3\1\77\6\3"+ + "\1\100\3\3\1\53\1\62\1\101\2\3\1\102\14\3"+ + "\4\4\1\103\13\4\1\104\1\0\3\4\3\3\1\105"+ + "\33\3\1\0\11\3\1\106\5\3\1\0\3\3\1\53"+ + "\1\62\1\3\1\107\22\3\1\0\1\3\1\4\1\110"+ + "\1\111\1\112\1\113\3\4\1\114\3\4\1\115\13\4"+ + "\5\3\1\0\25\3\1\74\10\3\1\106\5\3\2\0"+ + "\12\3\1\72\4\3\2\0\3\3\2\116\12\3\1\0"+ + "\13\3\1\0\1\3\2\4\1\117\4\4\1\120\15\4"+ + "\1\121\10\3\1\0\1\122\1\0\16\3\1\72\12\3"+ + "\1\72\12\3\1\0\1\123\1\75\11\3\1\0\3\3"+ + "\1\124\1\125\1\0\1\62\11\3\1\0\22\3\1\0"+ + "\1\3\24\4\1\3\1\72\6\3\1\0\1\126\13\3"+ + "\1\0\12\3\1\0\3\3\1\127\10\3\1\0\4\3"+ + "\1\130\1\3\2\0\3\3\1\0\4\3\1\71\2\3"+ + "\1\71\2\3\1\0\17\3\1\71\3\3\1\131\1\3"+ + "\1\4\1\132\5\4\1\133\1\134\11\4\1\0\1\4"+ + "\7\3\1\0\11\3\1\73\2\3\1\73\2\3\1\0"+ + "\2\3\1\0\7\3\1\75\1\0\2\3\1\135\4\3"+ + "\2\0\2\3\1\0\10\3\1\136\1\137\21\3\6\4"+ + "\1\140\1\141\5\4\1\142\2\4\1\143\4\3\1\144"+ + "\1\0\1\3\1\145\7\3\1\146\1\0\11\3\1\0"+ + "\5\3\2\0\2\3\1\147\23\3\1\150\1\151\1\152"+ + "\10\4\1\153\1\4\3\3\2\0\5\3\1\0\2\3"+ + "\1\106\1\66\3\3\1\106\1\154\5\3\1\0\1\155"+ + "\1\0\12\3\1\156\7\3\11\4\1\157\1\3\2\0"+ + "\1\160\13\3\1\161\1\162\2\3\1\163\2\3\1\164"+ + "\2\3\1\0\1\165\2\3\1\165\3\3\11\4\1\0"+ + "\1\3\1\0\1\166\1\167\1\170\10\3\1\0\2\3"+ + "\1\0\5\3\1\171\1\172\1\173\5\4\1\174\1\0"+ + "\2\3\1\0\1\175\4\3\1\176\1\3\1\0\2\3"+ + "\1\0\4\3\1\177\1\200\3\4\1\0\2\3\2\0"+ + "\4\3\1\0\2\3\1\0\3\3\1\201\3\4\1\0"+ + "\2\3\2\0\3\3\1\0\2\3\1\0\3\3\1\0"+ + "\3\4\1\0\1\202\1\3\1\203\1\0\2\3\1\0"+ + "\1\204\1\205\1\206\2\3\1\0\1\207\1\210\1\211"+ + "\1\212\1\3\1\0\2\3\1\213\3\0\1\214\1\0"+ + "\1\215\1\0\1\216\1\3\4\0\1\217\1\3\4\0"+ + "\1\3\3\0\1\220\1\3\3\0\1\3\1\221\1\222"+ + "\1\223\1\224"; private static int [] zzUnpackAction() { - int [] result = new int[1209]; + int [] result = new int[1263]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -139,7 +144,7 @@ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { } - /** + /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); @@ -149,157 +154,163 @@ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { "\0\u0270\0\u02be\0\u030c\0\u035a\0\u03a8\0\u03f6\0\u0444\0\u0492"+ "\0\u04e0\0\u052e\0\u057c\0\u05ca\0\u0618\0\u0666\0\u06b4\0\u0702"+ "\0\u0750\0\u079e\0\u07ec\0\u083a\0\u0888\0\u08d6\0\u0924\0\u0972"+ - "\0\u09c0\0\u0a0e\0\u0a5c\0\u0aaa\0\u01d4\0\u01d4\0\u0af8\0\u0b46"+ - "\0\u0b94\0\u0270\0\u0be2\0\u01d4\0\u01d4\0\u01d4\0\u01d4\0\u01d4"+ - "\0\u01d4\0\u01d4\0\u01d4\0\u01d4\0\u01d4\0\u0c30\0\u0c7e\0\u01d4"+ - "\0\u0ccc\0\u0d1a\0\u01d4\0\u01d4\0\u0d68\0\u0db6\0\u01d4\0\u01d4"+ - "\0\u0e04\0\u0e52\0\u0ea0\0\u0eee\0\u0f3c\0\u0270\0\u0270\0\u0f8a"+ - "\0\u04e0\0\u0270\0\u0270\0\u0270\0\u0fd8\0\u1026\0\u1074\0\u10c2"+ - "\0\u1110\0\u115e\0\u01d4\0\u11ac\0\u11fa\0\u1248\0\u1296\0\u12e4"+ - "\0\u1332\0\u1380\0\u13ce\0\u141c\0\u146a\0\u14b8\0\u1506\0\u1554"+ - "\0\u01d4\0\u15a2\0\u15f0\0\u163e\0\u168c\0\u16da\0\u1728\0\u1776"+ - "\0\u17c4\0\u052e\0\u1812\0\u1860\0\u18ae\0\u18fc\0\u194a\0\u1998"+ - "\0\u19e6\0\u1a34\0\u1a82\0\u1ad0\0\u1b1e\0\u1b6c\0\u1bba\0\u1c08"+ - "\0\u1c56\0\u1ca4\0\u1cf2\0\u1d40\0\u1d8e\0\u1ddc\0\u1e2a\0\u1e78"+ - "\0\u1ec6\0\u1f14\0\u1f62\0\u1fb0\0\u1ffe\0\u204c\0\u209a\0\u20e8"+ - "\0\u2136\0\u2184\0\u21d2\0\u2220\0\u226e\0\u22bc\0\u230a\0\u2358"+ - "\0\u23a6\0\u23f4\0\u2442\0\u2490\0\u24de\0\u252c\0\u257a\0\u25c8"+ - "\0\u2616\0\u2664\0\u26b2\0\u2700\0\u274e\0\u279c\0\u27ea\0\u2838"+ - "\0\u2886\0\u01d4\0\u01d4\0\u01d4\0\u28d4\0\u01d4\0\u01d4\0\u01d4"+ - "\0\u01d4\0\u01d4\0\u01d4\0\u2922\0\u2970\0\u29be\0\u2a0c\0\u2a5a"+ - "\0\u2aa8\0\u01d4\0\u01d4\0\u2af6\0\u2b44\0\u2b92\0\u2be0\0\u2c2e"+ - "\0\u2c7c\0\u2cca\0\u2d18\0\u2d66\0\u2db4\0\u2e02\0\u2e50\0\u2e9e"+ - "\0\u2eec\0\u2f3a\0\u2f88\0\u2fd6\0\u3024\0\u3072\0\u30c0\0\u310e"+ - "\0\u315c\0\u31aa\0\u31f8\0\u3246\0\u3294\0\u32e2\0\u3330\0\u337e"+ - "\0\u33cc\0\u341a\0\u3468\0\u34b6\0\u3504\0\u3552\0\u35a0\0\u35ee"+ - "\0\u363c\0\u1860\0\u368a\0\u36d8\0\u1860\0\u3726\0\u3774\0\u37c2"+ - "\0\u3810\0\u385e\0\u38ac\0\u38fa\0\u3948\0\u3996\0\u39e4\0\u3a32"+ - "\0\u3a80\0\u3ace\0\u3b1c\0\u3b6a\0\u3bb8\0\u3c06\0\u3c54\0\u3ca2"+ - "\0\u3cf0\0\u3d3e\0\u3d8c\0\u3dda\0\u3e28\0\u3e76\0\u3ec4\0\u3f12"+ - "\0\u3f60\0\u3fae\0\u3ffc\0\u404a\0\u4098\0\u40e6\0\u4134\0\u4182"+ - "\0\u41d0\0\u421e\0\u0270\0\u426c\0\u42ba\0\u4308\0\u4356\0\u43a4"+ - "\0\u43f2\0\u4440\0\u448e\0\u44dc\0\u452a\0\u4578\0\u45c6\0\u01d4"+ - "\0\u0c30\0\u01d4\0\u0ccc\0\u01d4\0\u4614\0\u4662\0\u46b0\0\u46fe"+ - "\0\u474c\0\u479a\0\u47e8\0\u4836\0\u4884\0\u48d2\0\u4920\0\u496e"+ - "\0\u49bc\0\u4a0a\0\u4a58\0\u4aa6\0\u4af4\0\u4b42\0\u4b90\0\u4bde"+ - "\0\u4c2c\0\u4c7a\0\u4cc8\0\u4d16\0\u4d64\0\u4db2\0\u4e00\0\u4e4e"+ - "\0\u4e9c\0\u4eea\0\u4f38\0\u4f86\0\u4fd4\0\u5022\0\u5070\0\u50be"+ - "\0\u510c\0\u515a\0\u51a8\0\u51f6\0\u5244\0\u5292\0\u52e0\0\u532e"+ - "\0\u537c\0\u53ca\0\u5418\0\u5466\0\u54b4\0\u5502\0\u5550\0\u559e"+ - "\0\u55ec\0\u563a\0\u5688\0\u56d6\0\u5724\0\u5772\0\u57c0\0\u580e"+ - "\0\u585c\0\u58aa\0\u58f8\0\u5946\0\u5994\0\u59e2\0\u5a30\0\u5a7e"+ - "\0\u5acc\0\u5b1a\0\u5b68\0\u5bb6\0\u0270\0\u5c04\0\u5c52\0\u5ca0"+ - "\0\u5cee\0\u5d3c\0\u5d8a\0\u5dd8\0\u0270\0\u5e26\0\u5e74\0\u5ec2"+ - "\0\u5f10\0\u5f5e\0\u5fac\0\u0270\0\u5ffa\0\u6048\0\u6096\0\u60e4"+ - "\0\u6132\0\u6180\0\u61ce\0\u621c\0\u626a\0\u62b8\0\u6306\0\u6354"+ - "\0\u0270\0\u63a2\0\u63f0\0\u643e\0\u648c\0\u64da\0\u6528\0\u6576"+ - "\0\u65c4\0\u6612\0\u6660\0\u66ae\0\u66fc\0\u674a\0\u6798\0\u67e6"+ - "\0\u6834\0\u6882\0\u68d0\0\u691e\0\u14b8\0\u696c\0\u69ba\0\u6a08"+ - "\0\u6a56\0\u6aa4\0\u6af2\0\u6b40\0\u6b8e\0\u6bdc\0\u6c2a\0\u6c78"+ - "\0\u14b8\0\u6cc6\0\u6d14\0\u6d62\0\u6db0\0\u6dfe\0\u6e4c\0\u6e9a"+ - "\0\u6ee8\0\u6f36\0\u6f84\0\u6fd2\0\u7020\0\u706e\0\u70bc\0\u710a"+ - "\0\u7158\0\u71a6\0\u71f4\0\u7242\0\u7290\0\u72de\0\u732c\0\u737a"+ - "\0\u73c8\0\u7416\0\u7464\0\u74b2\0\u7500\0\u754e\0\u759c\0\u75ea"+ - "\0\u7638\0\u7686\0\u76d4\0\u7722\0\u7770\0\u77be\0\u780c\0\u785a"+ - "\0\u78a8\0\u78f6\0\u7944\0\u7992\0\u79e0\0\u7a2e\0\u7a7c\0\u7aca"+ - "\0\u7b18\0\u7b66\0\u7bb4\0\u7c02\0\u7c50\0\u7c9e\0\u7cec\0\u7d3a"+ - "\0\u7d88\0\u7dd6\0\u0270\0\u7e24\0\u7e72\0\u7ec0\0\u7f0e\0\u7f5c"+ - "\0\u7faa\0\u7ff8\0\u8046\0\u8094\0\u80e2\0\u8130\0\u817e\0\u81cc"+ - "\0\u821a\0\u8268\0\u82b6\0\u8304\0\u8352\0\u83a0\0\u83ee\0\u843c"+ - "\0\u14b8\0\u14b8\0\u848a\0\u84d8\0\u8526\0\u8574\0\u85c2\0\u14b8"+ - "\0\u8610\0\u865e\0\u86ac\0\u14b8\0\u86fa\0\u8748\0\u8796\0\u87e4"+ - "\0\u8832\0\u8880\0\u88ce\0\u891c\0\u896a\0\u89b8\0\u8a06\0\u8a54"+ - "\0\u8aa2\0\u8af0\0\u8b3e\0\u8b8c\0\u8bda\0\u8c28\0\u8c76\0\u8cc4"+ - "\0\u8d12\0\u8d60\0\u8dae\0\u8dfc\0\u8e4a\0\u8e98\0\u8ee6\0\u8f34"+ - "\0\u8f82\0\u8fd0\0\u901e\0\u906c\0\u90ba\0\u9108\0\u9156\0\u91a4"+ - "\0\u91f2\0\u9240\0\u928e\0\u92dc\0\u932a\0\u9378\0\u93c6\0\u9414"+ - "\0\u9462\0\u94b0\0\u94fe\0\u954c\0\u959a\0\u95e8\0\u9636\0\u9684"+ - "\0\u96d2\0\u9720\0\u976e\0\u97bc\0\u980a\0\u9858\0\u98a6\0\u98f4"+ - "\0\u9942\0\u9990\0\u99de\0\u9a2c\0\u9a7a\0\u9ac8\0\u9b16\0\u9b64"+ - "\0\u9bb2\0\u9c00\0\u9c4e\0\u9c9c\0\u9cea\0\u01d4\0\u9d38\0\u9d86"+ - "\0\u9dd4\0\u9e22\0\u9e70\0\u9ebe\0\u9f0c\0\u9f5a\0\u9fa8\0\u9ff6"+ - "\0\ua044\0\ua092\0\ua0e0\0\ua12e\0\ua17c\0\ua1ca\0\ua218\0\ua266"+ - "\0\ua2b4\0\ua302\0\ua350\0\ua39e\0\ua3ec\0\ua43a\0\ua488\0\ua4d6"+ - "\0\ua524\0\u14b8\0\ua572\0\ua5c0\0\ua60e\0\ua65c\0\u14b8\0\ua6aa"+ - "\0\ua6f8\0\ua746\0\ua794\0\ua7e2\0\ua830\0\ua87e\0\ua8cc\0\ua91a"+ - "\0\ua968\0\ua9b6\0\uaa04\0\uaa52\0\u14b8\0\uaaa0\0\uaaee\0\uab3c"+ - "\0\uab8a\0\uabd8\0\uac26\0\uac74\0\uacc2\0\u01d4\0\uad10\0\uad5e"+ - "\0\uadac\0\uadfa\0\uae48\0\uae96\0\uaee4\0\uaf32\0\uaf80\0\uafce"+ - "\0\ub01c\0\ub06a\0\ub0b8\0\ub106\0\ub154\0\ub1a2\0\ub1f0\0\ub23e"+ - "\0\ub28c\0\ub2da\0\ub328\0\ub376\0\ub3c4\0\ub412\0\ub460\0\ub4ae"+ - "\0\ub4fc\0\ub54a\0\ub598\0\ub5e6\0\ub634\0\ub682\0\ub6d0\0\ub71e"+ - "\0\ub76c\0\ub7ba\0\ub808\0\u01d4\0\u0270\0\ub856\0\ub8a4\0\ub8f2"+ - "\0\ub940\0\ub98e\0\ub9dc\0\uba2a\0\uba78\0\ubac6\0\ubb14\0\ubb62"+ - "\0\ubbb0\0\ubbfe\0\u01d4\0\u01d4\0\ubc4c\0\u9d38\0\ubc9a\0\ubce8"+ - "\0\ubd36\0\ubd84\0\ubdd2\0\ube20\0\ube6e\0\ubebc\0\ubf0a\0\ubf58"+ - "\0\ubfa6\0\ubff4\0\uc042\0\uc090\0\uc0de\0\uc12c\0\uc17a\0\uc1c8"+ - "\0\uc216\0\uc264\0\uc2b2\0\uc300\0\uc34e\0\uc39c\0\uc3ea\0\uc438"+ - "\0\uc486\0\uc4d4\0\uc522\0\uc570\0\uc5be\0\uc60c\0\uc65a\0\uc6a8"+ - "\0\uc6f6\0\uc744\0\uc792\0\uc7e0\0\uc82e\0\uc87c\0\uc8ca\0\uc918"+ - "\0\uc966\0\uc9b4\0\uca02\0\uca50\0\uca9e\0\ucaec\0\ucb3a\0\ucb88"+ - "\0\u0270\0\ucbd6\0\ucc24\0\ucc72\0\uccc0\0\ucd0e\0\ucd5c\0\u01d4"+ - "\0\ucdaa\0\ucdf8\0\uce46\0\uce94\0\ucee2\0\ucf30\0\ucf7e\0\ucfcc"+ - "\0\ud01a\0\ud068\0\ud0b6\0\ud104\0\ud152\0\ud1a0\0\ud1ee\0\ud23c"+ - "\0\ud28a\0\ud2d8\0\ud326\0\ud374\0\ud3c2\0\ud410\0\ud45e\0\ud4ac"+ - "\0\ud4fa\0\ud548\0\ud596\0\ud5e4\0\ud632\0\ud680\0\ud6ce\0\ud71c"+ - "\0\ud76a\0\ud7b8\0\ud806\0\ud854\0\ud8a2\0\ud8f0\0\u0270\0\ud93e"+ + "\0\u09c0\0\u0a0e\0\u0a5c\0\u0aaa\0\u01d4\0\u01d4\0\u0af8\0\u01d4"+ + "\0\u0b46\0\u0b94\0\u0270\0\u0be2\0\u01d4\0\u01d4\0\u01d4\0\u01d4"+ + "\0\u01d4\0\u01d4\0\u01d4\0\u01d4\0\u01d4\0\u01d4\0\u0c30\0\u0c7e"+ + "\0\u01d4\0\u0ccc\0\u0d1a\0\u01d4\0\u01d4\0\u0d68\0\u0db6\0\u01d4"+ + "\0\u01d4\0\u0e04\0\u0e52\0\u0ea0\0\u0eee\0\u0f3c\0\u0270\0\u0270"+ + "\0\u0f8a\0\u04e0\0\u0270\0\u0270\0\u0270\0\u0fd8\0\u1026\0\u1074"+ + "\0\u10c2\0\u1110\0\u115e\0\u01d4\0\u11ac\0\u11fa\0\u1248\0\u1296"+ + "\0\u12e4\0\u1332\0\u1380\0\u13ce\0\u141c\0\u146a\0\u14b8\0\u1506"+ + "\0\u1554\0\u01d4\0\u15a2\0\u15f0\0\u163e\0\u168c\0\u16da\0\u1728"+ + "\0\u1776\0\u17c4\0\u052e\0\u1812\0\u1860\0\u18ae\0\u18fc\0\u194a"+ + "\0\u1998\0\u19e6\0\u1a34\0\u1a82\0\u1ad0\0\u1b1e\0\u1b6c\0\u1bba"+ + "\0\u1c08\0\u1c56\0\u1ca4\0\u1cf2\0\u1d40\0\u1d8e\0\u1ddc\0\u1e2a"+ + "\0\u1e78\0\u1ec6\0\u1f14\0\u1f62\0\u1fb0\0\u1ffe\0\u204c\0\u209a"+ + "\0\u20e8\0\u2136\0\u2184\0\u21d2\0\u2220\0\u226e\0\u22bc\0\u230a"+ + "\0\u2358\0\u23a6\0\u23f4\0\u2442\0\u2490\0\u24de\0\u252c\0\u257a"+ + "\0\u25c8\0\u2616\0\u2664\0\u26b2\0\u2700\0\u274e\0\u279c\0\u27ea"+ + "\0\u2838\0\u2886\0\u01d4\0\u01d4\0\u01d4\0\u28d4\0\u01d4\0\u01d4"+ + "\0\u01d4\0\u01d4\0\u01d4\0\u01d4\0\u2922\0\u2970\0\u29be\0\u2a0c"+ + "\0\u2a5a\0\u2aa8\0\u01d4\0\u01d4\0\u2af6\0\u2b44\0\u2b92\0\u2be0"+ + "\0\u2c2e\0\u2c7c\0\u2cca\0\u2d18\0\u2d66\0\u2db4\0\u2e02\0\u2e50"+ + "\0\u2e9e\0\u2eec\0\u2f3a\0\u2f88\0\u2fd6\0\u3024\0\u3072\0\u30c0"+ + "\0\u310e\0\u315c\0\u31aa\0\u31f8\0\u3246\0\u3294\0\u32e2\0\u3330"+ + "\0\u337e\0\u33cc\0\u341a\0\u3468\0\u34b6\0\u3504\0\u3552\0\u35a0"+ + "\0\u35ee\0\u363c\0\u1860\0\u368a\0\u36d8\0\u1860\0\u3726\0\u3774"+ + "\0\u37c2\0\u3810\0\u385e\0\u38ac\0\u38fa\0\u3948\0\u3996\0\u39e4"+ + "\0\u3a32\0\u3a80\0\u3ace\0\u3b1c\0\u3b6a\0\u3bb8\0\u3c06\0\u3c54"+ + "\0\u3ca2\0\u3cf0\0\u3d3e\0\u3d8c\0\u3dda\0\u3e28\0\u3e76\0\u3ec4"+ + "\0\u3f12\0\u3f60\0\u3fae\0\u3ffc\0\u404a\0\u4098\0\u40e6\0\u4134"+ + "\0\u4182\0\u41d0\0\u421e\0\u0270\0\u426c\0\u42ba\0\u4308\0\u4356"+ + "\0\u43a4\0\u43f2\0\u4440\0\u448e\0\u44dc\0\u452a\0\u4578\0\u45c6"+ + "\0\u01d4\0\u0c30\0\u01d4\0\u0ccc\0\u01d4\0\u4614\0\u4662\0\u46b0"+ + "\0\u46fe\0\u474c\0\u479a\0\u47e8\0\u4836\0\u4884\0\u48d2\0\u4920"+ + "\0\u496e\0\u49bc\0\u4a0a\0\u4a58\0\u4aa6\0\u4af4\0\u4b42\0\u4b90"+ + "\0\u4bde\0\u4c2c\0\u4c7a\0\u4cc8\0\u4d16\0\u4d64\0\u4db2\0\u4e00"+ + "\0\u4e4e\0\u4e9c\0\u4eea\0\u4f38\0\u4f86\0\u4fd4\0\u5022\0\u5070"+ + "\0\u50be\0\u510c\0\u515a\0\u51a8\0\u51f6\0\u5244\0\u5292\0\u52e0"+ + "\0\u532e\0\u537c\0\u53ca\0\u5418\0\u5466\0\u54b4\0\u5502\0\u5550"+ + "\0\u559e\0\u55ec\0\u563a\0\u5688\0\u56d6\0\u5724\0\u5772\0\u57c0"+ + "\0\u580e\0\u585c\0\u58aa\0\u58f8\0\u5946\0\u5994\0\u59e2\0\u5a30"+ + "\0\u5a7e\0\u5acc\0\u5b1a\0\u5b68\0\u5bb6\0\u5c04\0\u0270\0\u5c52"+ + "\0\u5ca0\0\u5cee\0\u5d3c\0\u5d8a\0\u5dd8\0\u5e26\0\u0270\0\u5e74"+ + "\0\u5ec2\0\u5f10\0\u5f5e\0\u5fac\0\u5ffa\0\u0270\0\u6048\0\u6096"+ + "\0\u60e4\0\u6132\0\u6180\0\u61ce\0\u621c\0\u626a\0\u62b8\0\u6306"+ + "\0\u6354\0\u63a2\0\u0270\0\u63f0\0\u643e\0\u648c\0\u64da\0\u6528"+ + "\0\u6576\0\u65c4\0\u6612\0\u6660\0\u66ae\0\u66fc\0\u674a\0\u6798"+ + "\0\u67e6\0\u6834\0\u6882\0\u68d0\0\u691e\0\u696c\0\u14b8\0\u69ba"+ + "\0\u6a08\0\u6a56\0\u6aa4\0\u6af2\0\u6b40\0\u6b8e\0\u6bdc\0\u6c2a"+ + "\0\u6c78\0\u6cc6\0\u14b8\0\u6d14\0\u6d62\0\u6db0\0\u6dfe\0\u6e4c"+ + "\0\u6e9a\0\u6ee8\0\u6f36\0\u6f84\0\u6fd2\0\u7020\0\u706e\0\u70bc"+ + "\0\u710a\0\u7158\0\u71a6\0\u71f4\0\u7242\0\u7290\0\u72de\0\u732c"+ + "\0\u737a\0\u73c8\0\u7416\0\u7464\0\u74b2\0\u7500\0\u754e\0\u759c"+ + "\0\u75ea\0\u7638\0\u7686\0\u76d4\0\u7722\0\u7770\0\u77be\0\u780c"+ + "\0\u785a\0\u78a8\0\u78f6\0\u7944\0\u7992\0\u79e0\0\u7a2e\0\u7a7c"+ + "\0\u7aca\0\u7b18\0\u7b66\0\u7bb4\0\u7c02\0\u7c50\0\u7c9e\0\u7cec"+ + "\0\u7d3a\0\u7d88\0\u7dd6\0\u7e24\0\u7e72\0\u0270\0\u7ec0\0\u7f0e"+ + "\0\u7f5c\0\u7faa\0\u7ff8\0\u8046\0\u8094\0\u80e2\0\u8130\0\u817e"+ + "\0\u81cc\0\u821a\0\u8268\0\u82b6\0\u8304\0\u8352\0\u83a0\0\u83ee"+ + "\0\u843c\0\u848a\0\u84d8\0\u14b8\0\u14b8\0\u8526\0\u8574\0\u85c2"+ + "\0\u8610\0\u865e\0\u14b8\0\u86ac\0\u86fa\0\u8748\0\u14b8\0\u8796"+ + "\0\u87e4\0\u8832\0\u8880\0\u88ce\0\u891c\0\u896a\0\u89b8\0\u8a06"+ + "\0\u8a54\0\u8aa2\0\u8af0\0\u8b3e\0\u8b8c\0\u8bda\0\u8c28\0\u8c76"+ + "\0\u8cc4\0\u8d12\0\u8d60\0\u8dae\0\u8dfc\0\u8e4a\0\u8e98\0\u8ee6"+ + "\0\u8f34\0\u8f82\0\u8fd0\0\u901e\0\u906c\0\u90ba\0\u9108\0\u9156"+ + "\0\u91a4\0\u91f2\0\u9240\0\u928e\0\u92dc\0\u932a\0\u9378\0\u93c6"+ + "\0\u9414\0\u9462\0\u94b0\0\u94fe\0\u954c\0\u959a\0\u95e8\0\u9636"+ + "\0\u9684\0\u96d2\0\u9720\0\u976e\0\u97bc\0\u980a\0\u9858\0\u98a6"+ + "\0\u98f4\0\u9942\0\u9990\0\u99de\0\u9a2c\0\u9a7a\0\u9ac8\0\u9b16"+ + "\0\u9b64\0\u9bb2\0\u9c00\0\u9c4e\0\u9c9c\0\u9cea\0\u9d38\0\u9d86"+ + "\0\u9dd4\0\u9e22\0\u01d4\0\u9e70\0\u9ebe\0\u9f0c\0\u9f5a\0\u9fa8"+ + "\0\u9ff6\0\ua044\0\ua092\0\ua0e0\0\ua12e\0\ua17c\0\ua1ca\0\ua218"+ + "\0\ua266\0\ua2b4\0\ua302\0\ua350\0\ua39e\0\ua3ec\0\ua43a\0\ua488"+ + "\0\ua4d6\0\ua524\0\ua572\0\ua5c0\0\ua60e\0\ua65c\0\u14b8\0\ua6aa"+ + "\0\ua6f8\0\ua746\0\ua794\0\u14b8\0\ua7e2\0\ua830\0\ua87e\0\ua8cc"+ + "\0\ua91a\0\ua968\0\ua9b6\0\uaa04\0\uaa52\0\uaaa0\0\uaaee\0\uab3c"+ + "\0\uab8a\0\u14b8\0\uabd8\0\uac26\0\uac74\0\uacc2\0\uad10\0\uad5e"+ + "\0\uadac\0\uadfa\0\uae48\0\u01d4\0\uae96\0\uaee4\0\uaf32\0\uaf80"+ + "\0\uafce\0\ub01c\0\ub06a\0\ub0b8\0\ub106\0\ub154\0\ub1a2\0\ub1f0"+ + "\0\ub23e\0\ub28c\0\ub2da\0\ub328\0\ub376\0\ub3c4\0\ub412\0\ub460"+ + "\0\ub4ae\0\ub4fc\0\ub54a\0\ub598\0\ub5e6\0\ub634\0\ub682\0\ub6d0"+ + "\0\ub71e\0\ub76c\0\ub7ba\0\ub808\0\ub856\0\ub8a4\0\ub8f2\0\ub940"+ + "\0\ub98e\0\ub9dc\0\u01d4\0\u0270\0\uba2a\0\uba78\0\ubac6\0\ubb14"+ + "\0\ubb62\0\ubbb0\0\ubbfe\0\ubc4c\0\ubc9a\0\ubce8\0\ubd36\0\ubd84"+ + "\0\ubdd2\0\u01d4\0\u01d4\0\ube20\0\u9e70\0\ube6e\0\ubebc\0\ubf0a"+ + "\0\ubf58\0\ubfa6\0\ubff4\0\uc042\0\uc090\0\uc0de\0\uc12c\0\uc17a"+ + "\0\uc1c8\0\uc216\0\uc264\0\uc2b2\0\uc300\0\uc34e\0\uc39c\0\uc3ea"+ + "\0\uc438\0\uc486\0\uc4d4\0\uc522\0\uc570\0\uc5be\0\uc60c\0\uc65a"+ + "\0\uc6a8\0\uc6f6\0\uc744\0\uc792\0\uc7e0\0\uc82e\0\uc87c\0\uc8ca"+ + "\0\uc918\0\uc966\0\uc9b4\0\uca02\0\uca50\0\uca9e\0\ucaec\0\ucb3a"+ + "\0\ucb88\0\ucbd6\0\ucc24\0\ucc72\0\uccc0\0\ucd0e\0\ucd5c\0\ucdaa"+ + "\0\u0270\0\ucdf8\0\uce46\0\uce94\0\ucee2\0\ucf30\0\ucf7e\0\ucfcc"+ + "\0\u01d4\0\ud01a\0\ud068\0\ud0b6\0\ud104\0\ud152\0\ud1a0\0\ud1ee"+ + "\0\ud23c\0\ud28a\0\ud2d8\0\ud326\0\ud374\0\ud3c2\0\ud410\0\ud45e"+ + "\0\ud4ac\0\ud4fa\0\ud548\0\ud596\0\ud5e4\0\ud632\0\ud680\0\ud6ce"+ + "\0\ud71c\0\ud76a\0\ud7b8\0\ud806\0\ud854\0\ud8a2\0\ud8f0\0\ud93e"+ "\0\ud98c\0\ud9da\0\uda28\0\uda76\0\udac4\0\udb12\0\udb60\0\udbae"+ - "\0\udbfc\0\udc4a\0\udc98\0\udce6\0\udd34\0\udd82\0\uddd0\0\ude1e"+ - "\0\ude6c\0\udeba\0\udf08\0\udf56\0\udfa4\0\udff2\0\ue040\0\ue08e"+ - "\0\ue0dc\0\ue12a\0\ue178\0\ue1c6\0\ue214\0\ue262\0\u0270\0\ue2b0"+ - "\0\ue2fe\0\ue34c\0\uc4d4\0\ue39a\0\ue3e8\0\u14b8\0\ue436\0\ue484"+ - "\0\ue4d2\0\ue520\0\ue56e\0\u14b8\0\u14b8\0\ue5bc\0\ue60a\0\ue658"+ - "\0\ue6a6\0\ue6f4\0\ue742\0\ue790\0\ue7de\0\ue82c\0\ue87a\0\ue8c8"+ - "\0\ue916\0\ue964\0\ue9b2\0\uea00\0\uea4e\0\uea9c\0\ueaea\0\ueb38"+ - "\0\ueb86\0\uebd4\0\uec22\0\uec70\0\uecbe\0\ued0c\0\ued5a\0\ueda8"+ - "\0\u0270\0\uedf6\0\uee44\0\uee92\0\ueee0\0\uef2e\0\uef7c\0\uefca"+ - "\0\uf018\0\uf066\0\uf0b4\0\uf102\0\uf150\0\uf19e\0\uf1ec\0\uf23a"+ - "\0\uf288\0\uf2d6\0\uf324\0\uf372\0\u0270\0\uf3c0\0\uf40e\0\uf45c"+ + "\0\udbfc\0\u0270\0\udc4a\0\udc98\0\udce6\0\udd34\0\udd82\0\uddd0"+ + "\0\ude1e\0\ude6c\0\udeba\0\udf08\0\udf56\0\udfa4\0\udff2\0\ue040"+ + "\0\ue08e\0\ue0dc\0\ue12a\0\ue178\0\ue1c6\0\ue214\0\ue262\0\ue2b0"+ + "\0\ue2fe\0\ue34c\0\ue39a\0\ue3e8\0\ue436\0\ue484\0\ue4d2\0\ue520"+ + "\0\ue56e\0\ue5bc\0\ue60a\0\u0270\0\ue658\0\ue6a6\0\ue6f4\0\uc6f6"+ + "\0\ue742\0\ue790\0\u14b8\0\ue7de\0\ue82c\0\ue87a\0\ue8c8\0\ue916"+ + "\0\u14b8\0\u14b8\0\ue964\0\ue9b2\0\uea00\0\uea4e\0\uea9c\0\ueaea"+ + "\0\ueb38\0\ueb86\0\uebd4\0\uec22\0\uec70\0\uecbe\0\ued0c\0\ued5a"+ + "\0\ueda8\0\uedf6\0\uee44\0\uee92\0\ueee0\0\uef2e\0\uef7c\0\uefca"+ + "\0\uf018\0\uf066\0\uf0b4\0\uf102\0\uf150\0\uf19e\0\u0270\0\uf1ec"+ + "\0\uf23a\0\uf288\0\uf2d6\0\uf324\0\uf372\0\uf3c0\0\uf40e\0\uf45c"+ "\0\uf4aa\0\uf4f8\0\uf546\0\uf594\0\uf5e2\0\uf630\0\uf67e\0\uf6cc"+ - "\0\uf71a\0\uf768\0\uf7b6\0\uf804\0\uf852\0\uf8a0\0\u0270\0\ude6c"+ - "\0\uf8ee\0\uf93c\0\uf98a\0\uf9d8\0\ufa26\0\ufa74\0\ufac2\0\ufb10"+ - "\0\ufb5e\0\ufbac\0\ufbfa\0\ufc48\0\ufc96\0\ufce4\0\ufd32\0\ufd80"+ - "\0\ufdce\0\ufe1c\0\ufe6a\0\ufeb8\0\u14b8\0\u14b8\0\uff06\0\uff54"+ - "\0\uffa2\0\ufff0\1\76\0\u14b8\1\214\1\332\0\u14b8\1\u0128"+ - "\1\u0176\1\u01c4\1\u0212\1\u0260\1\u02ae\0\u0270\1\u02fc\1\u034a"+ - "\1\u0398\1\u03e6\1\u0434\1\u0482\1\u04d0\1\u051e\1\u056c\1\u05ba"+ - "\1\u0608\1\u0656\1\u06a4\1\u06f2\1\u0740\1\u078e\1\u07dc\1\u082a"+ - "\1\u0878\1\u08c6\1\u0914\1\u0962\1\u09b0\1\u09fe\1\u0a4c\1\u0a9a"+ - "\1\u0ae8\0\uf630\1\u0b36\1\u0b84\1\u0bd2\1\u0c20\1\u0c6e\1\u0cbc"+ - "\1\u0d0a\1\u0d58\1\u0da6\1\u0df4\1\u0e42\1\u0e90\1\u0ede\1\u0f2c"+ - "\1\u0f7a\1\u0fc8\0\u14b8\0\u14b8\0\u14b8\1\u1016\1\u1064\1\u10b2"+ - "\1\u1100\1\u114e\1\u119c\1\u11ea\1\u1238\0\u14b8\1\u1286\1\u12d4"+ - "\1\u1322\1\u1370\1\u13be\1\u140c\1\u145a\1\u14a8\1\u14f6\1\u1544"+ - "\1\u1592\1\u15e0\1\u162e\0\u0270\1\u167c\1\u16ca\1\u1718\1\u1766"+ - "\1\u17b4\0\u01d4\1\u1802\1\u1850\1\u189e\1\u18ec\1\u193a\1\u1988"+ - "\0\u01d4\1\u19d6\1\u1a24\1\u1a72\1\u1ac0\1\u1b0e\1\u1b5c\1\u1baa"+ - "\1\u1bf8\1\u1c46\1\u1c94\1\u1ce2\1\u1d30\1\u1d7e\1\u1dcc\1\u1e1a"+ - "\1\u1e68\1\u1eb6\1\u1f04\1\u1f52\1\u1fa0\1\u1fee\1\u203c\1\u208a"+ - "\1\u20d8\1\u2126\1\u2174\1\u21c2\1\u2210\0\u01d4\1\u225e\1\u22ac"+ - "\1\u22fa\1\u2348\1\u2396\1\u23e4\1\u2432\1\u2480\1\u24ce\1\u251c"+ - "\1\u256a\0\u01d4\0\u01d4\1\u25b8\1\u2606\0\u0270\1\u2654\1\u26a2"+ - "\1\u26f0\1\u273e\1\u278c\1\u27da\1\u2828\1\u2876\1\u28c4\1\u2912"+ - "\1\u2960\1\u29ae\1\u29fc\1\u2a4a\1\u2a98\1\u2ae6\1\u2b34\1\u2b82"+ - "\1\u2bd0\1\u2c1e\1\u2c6c\0\u01d4\0\u0270\0\u0270\1\u2cba\1\u2d08"+ - "\1\u2d56\1\u2da4\1\u2df2\1\u2e40\1\u2e8e\1\u2edc\1\u2f2a\1\u2f78"+ - "\1\u2fc6\1\u3014\1\u3062\1\u30b0\0\u14b8\0\u14b8\0\u14b8\1\u30fe"+ - "\1\u314c\1\u319a\1\u31e8\1\u3236\0\u14b8\1\u3284\1\u32d2\1\u3320"+ - "\1\u336e\1\u33bc\1\u340a\1\u3458\1\u34a6\1\u34f4\1\u3542\1\u3590"+ - "\1\u35de\1\u362c\1\u367a\0\u14b8\0\u14b8\1\u36c8\1\u3716\1\u3764"+ - "\1\u37b2\1\u3800\1\u384e\1\u389c\1\u38ea\1\u3938\1\u3986\1\u39d4"+ - "\1\u3a22\1\u3a70\1\u3abe\1\u3b0c\1\u3b5a\1\u3ba8\1\u3bf6\1\u3c44"+ + "\0\uf71a\0\uf768\0\uf7b6\0\u0270\0\uf804\0\uf852\0\uf8a0\0\uf8ee"+ + "\0\uf93c\0\uf98a\0\uf9d8\0\ufa26\0\ufa74\0\ufac2\0\ufb10\0\ufb5e"+ + "\0\ufbac\0\ufbfa\0\ufc48\0\ufc96\0\ufce4\0\u0270\0\ue178\0\ufd32"+ + "\0\ufd80\0\ufdce\0\ufe1c\0\ufe6a\0\ufeb8\0\uff06\0\uff54\0\uffa2"+ + "\0\ufff0\1\76\1\214\1\332\1\u0128\1\u0176\1\u01c4\1\u0212"+ + "\1\u0260\1\u02ae\1\u02fc\1\u034a\1\u0398\1\u03e6\0\u14b8\0\u14b8"+ + "\1\u0434\1\u0482\1\u04d0\1\u051e\1\u056c\0\u14b8\1\u05ba\1\u0608"+ + "\0\u14b8\1\u0656\1\u06a4\1\u06f2\1\u0740\1\u078e\1\u07dc\1\u082a"+ + "\0\u0270\1\u0878\1\u08c6\1\u0914\1\u0962\1\u09b0\1\u09fe\1\u0a4c"+ + "\0\u0270\1\u0a9a\1\u0ae8\1\u0b36\1\u0b84\1\u0bd2\1\u0c20\1\u0c6e"+ + "\1\u0cbc\1\u0d0a\1\u0d58\1\u0da6\1\u0df4\1\u0e42\1\u0e90\1\u0ede"+ + "\1\u0f2c\1\u0f7a\1\u0fc8\1\u1016\1\u1064\0\ufa74\1\u10b2\1\u1100"+ + "\1\u114e\1\u119c\1\u11ea\1\u1238\1\u1286\1\u12d4\1\u1322\1\u1370"+ + "\1\u13be\1\u140c\1\u145a\1\u14a8\1\u14f6\1\u1544\1\u1592\1\u15e0"+ + "\1\u162e\0\u14b8\0\u14b8\0\u14b8\1\u167c\1\u16ca\1\u1718\1\u1766"+ + "\1\u17b4\1\u1802\1\u1850\1\u189e\0\u14b8\1\u18ec\1\u193a\1\u1988"+ + "\1\u19d6\1\u1a24\1\u1a72\1\u1ac0\1\u1b0e\1\u1b5c\1\u1baa\1\u1bf8"+ + "\1\u1c46\1\u1c94\1\u1ce2\0\u0270\1\u1d30\1\u1d7e\1\u1dcc\1\u1e1a"+ + "\1\u1e68\0\u01d4\1\u1eb6\1\u1f04\1\u1f52\1\u1fa0\1\u1fee\1\u203c"+ + "\0\u01d4\1\u208a\1\u20d8\1\u2126\1\u2174\1\u21c2\1\u2210\1\u225e"+ + "\1\u22ac\1\u22fa\1\u2348\1\u2396\1\u23e4\1\u2432\1\u2480\1\u24ce"+ + "\1\u251c\1\u256a\1\u25b8\1\u2606\1\u2654\1\u26a2\1\u26f0\1\u273e"+ + "\1\u278c\1\u27da\1\u2828\1\u2876\1\u28c4\1\u2912\1\u2960\1\u29ae"+ + "\1\u29fc\0\u01d4\1\u2a4a\1\u2a98\1\u2ae6\1\u2b34\1\u2b82\1\u2bd0"+ + "\1\u2c1e\1\u2c6c\1\u2cba\1\u2d08\1\u2d56\0\u01d4\0\u01d4\1\u2da4"+ + "\1\u2df2\0\u0270\1\u2e40\1\u2e8e\1\u2edc\1\u2f2a\1\u2f78\1\u2fc6"+ + "\1\u3014\1\u3062\1\u30b0\1\u30fe\1\u314c\1\u319a\1\u31e8\1\u3236"+ + "\1\u3284\1\u32d2\1\u3320\1\u336e\1\u33bc\1\u340a\1\u3458\1\u34a6"+ + "\1\u34f4\1\u3542\1\u3590\0\u01d4\0\u0270\0\u0270\1\u35de\1\u362c"+ + "\1\u367a\1\u36c8\1\u3716\1\u3764\1\u37b2\1\u3800\1\u384e\1\u389c"+ + "\1\u38ea\1\u3938\1\u3986\1\u39d4\1\u3a22\1\u3a70\1\u3abe\0\u14b8"+ + "\0\u14b8\0\u14b8\1\u3b0c\1\u3b5a\1\u3ba8\1\u3bf6\1\u3c44\0\u14b8"+ "\1\u3c92\1\u3ce0\1\u3d2e\1\u3d7c\1\u3dca\1\u3e18\1\u3e66\1\u3eb4"+ - "\1\u3f02\1\u3f50\1\u3f9e\1\u3fec\1\u403a\1\u4088\1\u40d6\1\u4124"+ - "\0\u01d4\1\u4172\1\u41c0\1\u420e\1\u425c\0\u01d4\1\u42aa\1\u42f8"+ - "\1\u4346\1\u4394\0\u14b8\0\u14b8\0\u14b8\0\u01d4\1\u43e2\1\u4430"+ - "\1\u447e\1\u44cc\1\u451a\1\u4568\0\u0270\1\u45b6\1\u4604\0\u0270"+ - "\1\u4652\1\u46a0\1\u46ee\1\u473c\1\u478a\0\u01d4\1\u47d8\1\u4826"+ - "\1\u4874\1\u48c2\1\u4910\1\u495e\1\u49ac\1\u49fa\1\u4a48\0\u01d4"+ - "\1\u4a96\1\u4ae4\1\u4b32\1\u4b80\1\u4bce\0\u01d4\0\u01d4\0\u01d4"+ - "\0\u0270"; + "\1\u3f02\0\u0270\1\u3f50\1\u3f9e\1\u3fec\1\u403a\1\u4088\1\u40d6"+ + "\1\u4124\1\u4172\1\u41c0\0\u14b8\0\u14b8\1\u420e\1\u425c\1\u42aa"+ + "\1\u42f8\1\u4346\1\u4394\1\u43e2\1\u4430\1\u447e\1\u44cc\1\u451a"+ + "\1\u4568\1\u45b6\1\u4604\1\u4652\1\u46a0\1\u46ee\1\u473c\1\u478a"+ + "\1\u47d8\1\u4826\1\u4874\1\u48c2\1\u4910\1\u495e\1\u49ac\1\u49fa"+ + "\1\u4a48\1\u4a96\1\u4ae4\1\u4b32\1\u4b80\1\u4bce\1\u4c1c\1\u4c6a"+ + "\1\u4cb8\1\u4d06\1\u4d54\1\u4da2\1\u4df0\1\u4e3e\1\u4e8c\1\u4eda"+ + "\0\u0270\1\u4f28\0\u01d4\1\u4f76\1\u4fc4\1\u5012\1\u5060\1\u50ae"+ + "\0\u01d4\1\u50fc\1\u514a\1\u5198\1\u51e6\0\u14b8\0\u14b8\0\u14b8"+ + "\0\u01d4\1\u5234\1\u5282\1\u52d0\1\u531e\0\u01d4\1\u536c\1\u53ba"+ + "\1\u5408\0\u0270\1\u5456\0\u0270\1\u54a4\0\u0270\1\u54f2\1\u5540"+ + "\1\u558e\1\u55dc\1\u562a\0\u01d4\1\u5678\1\u56c6\1\u5714\1\u5762"+ + "\1\u57b0\1\u57fe\1\u584c\1\u589a\1\u58e8\0\u01d4\1\u5936\1\u5984"+ + "\1\u59d2\1\u5a20\1\u5a6e\0\u01d4\0\u01d4\0\u01d4\0\u0270"; private static int [] zzUnpackRowMap() { - int [] result = new int[1209]; + int [] result = new int[1263]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -316,7 +327,7 @@ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { return j; } - /** + /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); @@ -328,2484 +339,2594 @@ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { "\1\30\1\31\1\32\1\33\1\34\1\35\1\36\1\37"+ "\1\40\1\41\1\42\1\43\1\11\1\44\3\11\1\7"+ "\1\11\2\22\1\45\1\46\1\43\1\7\1\47\1\11"+ - "\1\7\1\50\1\51\1\13\1\11\3\13\1\11\2\13"+ - "\1\52\1\53\1\7\1\54\1\55\1\56\1\57\1\60"+ - "\1\61\1\62\1\43\23\63\4\64\31\63\2\64\57\63"+ - "\4\65\1\66\2\63\1\67\25\63\2\65\57\63\4\70"+ - "\1\71\30\63\2\70\34\63\62\72\1\73\1\72\1\74"+ - "\1\75\30\72\63\76\1\77\1\100\1\101\30\76\117\0"+ - "\1\102\1\103\1\11\1\104\1\102\1\105\4\11\1\106"+ - "\1\107\2\11\1\110\1\111\1\0\3\11\1\106\1\11"+ - "\1\112\3\0\1\11\1\112\1\11\1\113\2\11\1\105"+ - "\3\11\1\107\1\11\1\114\1\0\5\11\1\0\1\11"+ - "\1\113\1\114\4\0\2\11\1\0\1\103\1\0\1\102"+ - "\1\11\3\102\1\11\1\104\1\102\1\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\15\11\1\0\5\11"+ + "\1\50\1\51\1\52\1\13\1\11\3\13\1\11\2\13"+ + "\1\53\1\54\1\7\1\55\1\56\1\57\1\60\1\61"+ + "\1\62\1\63\1\43\23\64\4\65\31\64\2\65\57\64"+ + "\4\66\1\67\2\64\1\70\25\64\2\66\57\64\4\71"+ + "\1\72\30\64\2\71\34\64\62\73\1\74\1\73\1\75"+ + "\1\76\30\73\63\77\1\100\1\101\1\102\30\77\117\0"+ + "\1\103\1\104\1\11\1\105\1\103\1\106\4\11\1\107"+ + "\1\110\2\11\1\111\1\112\1\0\3\11\1\107\1\11"+ + "\1\113\3\0\1\11\1\113\1\11\1\114\2\11\1\106"+ + "\3\11\1\110\1\11\1\115\1\0\5\11\1\0\1\11"+ + "\1\114\1\115\4\0\2\11\1\0\1\104\1\0\1\103"+ + "\1\11\3\103\1\11\1\105\1\103\1\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\4\11"+ - "\1\115\2\11\1\116\5\11\1\0\5\11\1\0\3\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\4\11"+ + "\1\116\2\11\1\117\5\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\1\13"+ - "\2\11\2\13\1\105\4\11\1\106\1\107\2\11\1\110"+ - "\1\111\1\0\3\11\1\106\1\11\1\112\3\0\1\11"+ - "\1\112\1\11\1\113\2\11\1\105\3\11\1\107\1\11"+ - "\1\114\1\0\5\11\1\0\1\11\1\113\1\114\4\0"+ + "\2\11\2\13\1\106\4\11\1\107\1\110\2\11\1\111"+ + "\1\112\1\0\3\11\1\107\1\11\1\113\3\0\1\11"+ + "\1\113\1\11\1\114\2\11\1\106\3\11\1\110\1\11"+ + "\1\115\1\0\5\11\1\0\1\11\1\114\1\115\4\0"+ "\2\11\1\0\1\11\1\0\1\13\1\11\3\13\1\11"+ - "\2\13\1\11\13\0\1\117\2\11\2\120\3\11\1\121"+ - "\5\11\1\122\1\111\1\0\2\11\1\121\3\11\3\0"+ + "\2\13\1\11\13\0\1\120\2\11\2\121\3\11\1\122"+ + "\5\11\1\123\1\112\1\0\2\11\1\122\3\11\3\0"+ "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\1\120\1\11\3\120\1\11\2\120\1\11"+ - "\1\0\1\123\11\0\11\11\1\124\1\125\3\11\1\0"+ - "\1\111\1\0\6\11\3\0\1\11\1\126\3\11\1\127"+ - "\3\11\1\130\3\11\1\0\1\11\1\131\3\11\1\0"+ + "\1\11\1\0\1\121\1\11\3\121\1\11\2\121\1\11"+ + "\1\0\1\124\11\0\11\11\1\125\1\126\3\11\1\0"+ + "\1\112\1\0\6\11\3\0\1\11\1\127\3\11\1\130"+ + "\3\11\1\131\3\11\1\0\1\11\1\132\3\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\15\11\1\132\1\0\1\111\1\0\6\11\3\0\2\11"+ - "\1\132\12\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\10\11\1\133\5\11"+ - "\1\0\1\111\1\0\6\11\3\0\1\11\1\134\1\135"+ + "\15\11\1\133\1\0\1\112\1\0\6\11\3\0\2\11"+ + "\1\133\12\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\10\11\1\134\5\11"+ + "\1\0\1\112\1\0\6\11\3\0\1\11\1\135\1\136"+ "\12\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\1\110\2\136\2\110\3\136"+ - "\1\137\1\136\1\140\3\136\1\141\3\0\5\136\2\0"+ - "\1\136\1\142\1\143\1\144\1\145\1\136\1\146\1\147"+ - "\1\150\1\151\4\136\1\0\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\1\110\1\136\3\110\1\136\2\110\1\136"+ - "\33\0\1\11\75\0\16\11\1\0\1\111\1\0\1\11"+ - "\4\152\1\153\2\0\1\154\15\11\1\0\5\11\1\0"+ - "\1\11\2\152\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\11\11\1\124\4\11\1\0\1\111\1\0\1\11"+ - "\4\152\1\153\2\0\1\154\11\11\1\124\3\11\1\0"+ - "\5\11\1\0\1\11\2\152\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\155\1\0\1\156\1\0\6\155"+ - "\3\0\15\155\1\0\5\155\1\0\3\155\4\0\2\155"+ - "\1\0\1\155\1\0\11\155\35\0\4\154\1\157\2\0"+ - "\1\25\25\0\2\154\35\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\1\11\1\160\6\11\1\161\2\11\1\162"+ - "\1\11\1\0\1\163\4\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\13\11\1\164\1\11\1\0\5\11"+ + "\1\11\1\0\11\11\13\0\1\111\2\137\2\111\3\137"+ + "\1\140\1\137\1\141\3\137\1\142\3\0\5\137\2\0"+ + "\1\137\1\143\1\144\1\145\1\146\1\137\1\147\1\150"+ + "\1\151\1\152\4\137\1\0\11\137\3\0\3\137\1\0"+ + "\1\137\1\0\1\111\1\137\3\111\1\137\2\111\1\137"+ + "\33\0\1\11\75\0\16\11\1\0\1\112\1\0\1\11"+ + "\4\153\1\154\2\0\1\155\15\11\1\0\5\11\1\0"+ + "\1\11\2\153\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\11\11\1\125\4\11\1\0\1\112\1\0\1\11"+ + "\4\153\1\154\2\0\1\155\11\11\1\125\3\11\1\0"+ + "\5\11\1\0\1\11\2\153\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\156\1\0\1\157\1\0\6\156"+ + "\3\0\15\156\1\0\5\156\1\0\3\156\4\0\2\156"+ + "\1\0\1\156\1\0\11\156\35\0\4\155\1\160\2\0"+ + "\1\25\25\0\2\155\35\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\1\11\1\161\6\11\1\162\2\11\1\163"+ + "\1\11\1\0\1\164\4\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\13\11\1\165\1\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\2\11\1\165\13\11\1\0\1\111\1\0\6\11"+ - "\3\0\5\11\1\166\1\11\1\167\1\11\1\170\2\11"+ - "\1\171\1\0\1\11\1\172\3\11\1\0\3\11\4\0"+ + "\13\0\2\11\1\166\13\11\1\0\1\112\1\0\6\11"+ + "\3\0\5\11\1\167\1\11\1\170\1\11\1\171\2\11"+ + "\1\172\1\0\1\11\1\173\3\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\4\11\1\173\1\174\4\11"+ - "\1\175\2\11\1\0\1\176\1\177\1\200\2\11\1\0"+ + "\1\112\1\0\6\11\3\0\4\11\1\174\1\175\4\11"+ + "\1\176\2\11\1\0\1\177\1\200\1\201\2\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\3\11\1\201"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\3\11\1\202"+ "\11\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\1\202\2\11\2\202\11\11"+ - "\1\0\1\111\1\0\6\11\3\0\2\11\1\203\1\11"+ - "\1\204\2\11\1\205\5\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\1\202\1\11\3\202"+ - "\1\11\2\202\1\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\11\11\1\206\3\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\207\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\3\11\1\210"+ - "\1\211\1\11\1\212\6\11\1\0\5\11\1\0\3\11"+ + "\1\11\1\0\11\11\13\0\1\203\2\11\2\203\11\11"+ + "\1\0\1\112\1\0\6\11\3\0\2\11\1\204\1\11"+ + "\1\205\2\11\1\206\5\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\1\203\1\11\3\203"+ + "\1\11\2\203\1\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\11\11\1\207\3\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\210\1\0\11\11\13\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\3\11\1\211"+ + "\1\212\1\11\1\213\6\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\4\11\1\213\6\11"+ - "\1\214\1\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\15\11\1\132\1\0"+ - "\1\111\1\0\6\11\3\0\2\11\1\215\1\11\1\216"+ - "\1\11\1\217\4\11\1\220\1\11\1\0\5\11\1\0"+ + "\1\0\1\112\1\0\6\11\3\0\4\11\1\214\6\11"+ + "\1\215\1\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\15\11\1\133\1\0"+ + "\1\112\1\0\6\11\3\0\2\11\1\216\1\11\1\217"+ + "\1\11\1\220\4\11\1\221\1\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\7\11\1\221"+ - "\5\11\1\0\1\222\4\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\7\11\1\223\5\11\1\0\5\11"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\7\11\1\222"+ + "\5\11\1\0\1\223\4\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\7\11\1\224\5\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\10\11\1\224\5\11\1\0\1\111\1\0\6\11"+ - "\3\0\6\11\1\225\4\11\1\226\1\11\1\0\5\11"+ + "\13\0\10\11\1\225\5\11\1\0\1\112\1\0\6\11"+ + "\3\0\6\11\1\226\4\11\1\227\1\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ "\62\0\1\43\13\0\1\43\30\0\1\43\1\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\6\11\1\227\4\11"+ - "\1\230\1\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\1\202\2\11\2\202"+ - "\11\11\1\0\1\111\1\0\6\11\3\0\2\11\1\231"+ - "\7\11\1\232\1\233\1\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\1\202\1\11\3\202"+ - "\1\11\2\202\1\11\13\0\16\11\1\0\1\111\1\0"+ + "\1\0\1\112\1\0\6\11\3\0\6\11\1\230\4\11"+ + "\1\231\1\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\1\203\2\11\2\203"+ + "\11\11\1\0\1\112\1\0\6\11\3\0\2\11\1\232"+ + "\7\11\1\233\1\234\1\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\1\203\1\11\3\203"+ + "\1\11\2\203\1\11\13\0\16\11\1\0\1\112\1\0"+ "\6\11\3\0\13\11\1\41\1\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\12\0"+ - "\64\51\1\0\31\51\1\0\16\234\1\0\1\235\1\0"+ - "\6\234\3\0\15\234\1\0\5\234\1\0\3\234\4\0"+ - "\2\234\1\0\1\234\1\0\11\234\13\0\16\236\1\0"+ - "\1\237\1\0\6\236\3\0\15\236\1\0\5\236\1\0"+ - "\3\236\4\0\2\236\1\0\1\236\1\0\11\236\44\0"+ - "\1\67\64\0\16\240\1\0\1\241\1\0\6\240\3\0"+ - "\15\240\1\0\5\240\1\0\3\240\4\0\2\240\1\0"+ - "\1\240\1\0\11\240\12\0\62\72\1\0\1\72\2\0"+ - "\30\72\3\242\1\243\7\242\1\244\23\242\1\245\2\242"+ - "\1\246\1\242\1\247\1\250\14\242\1\251\1\252\1\242"+ - "\1\253\30\242\63\76\3\0\30\76\3\242\1\243\7\242"+ - "\1\244\23\242\1\254\2\242\1\246\1\242\1\247\1\250"+ - "\14\242\1\251\1\252\1\242\1\253\30\242\1\0\1\102"+ - "\2\11\1\104\1\102\1\105\4\11\1\106\1\107\2\11"+ - "\1\110\1\111\1\0\3\11\1\106\1\11\1\112\3\0"+ - "\1\11\1\112\1\11\1\113\2\11\1\105\3\11\1\107"+ - "\1\11\1\114\1\0\5\11\1\0\1\11\1\113\1\114"+ - "\4\0\2\11\1\0\1\11\1\0\1\102\1\11\3\102"+ - "\1\11\1\104\1\102\1\11\13\0\1\255\1\11\4\255"+ - "\4\11\1\255\2\11\1\255\1\256\1\111\1\0\1\11"+ - "\1\255\1\11\1\255\2\11\3\0\1\255\1\11\1\255"+ - "\3\11\1\255\5\11\1\255\1\0\5\11\1\0\2\11"+ - "\1\255\4\0\2\11\1\0\1\11\1\0\1\255\1\11"+ - "\3\255\1\11\2\255\1\11\13\0\1\104\2\11\2\104"+ - "\1\105\4\11\1\106\3\11\1\110\1\111\1\0\3\11"+ - "\1\106\2\11\3\0\6\11\1\105\5\11\1\114\1\0"+ - "\5\11\1\0\2\11\1\114\4\0\2\11\1\0\1\11"+ - "\1\0\1\104\1\11\3\104\1\11\2\104\1\11\13\0"+ - "\1\257\2\11\2\257\1\11\1\260\7\11\1\0\1\111"+ + "\64\52\1\0\31\52\1\0\16\235\1\0\1\236\1\0"+ + "\6\235\3\0\15\235\1\0\5\235\1\0\3\235\4\0"+ + "\2\235\1\0\1\235\1\0\11\235\13\0\16\237\1\0"+ + "\1\240\1\0\6\237\3\0\15\237\1\0\5\237\1\0"+ + "\3\237\4\0\2\237\1\0\1\237\1\0\11\237\44\0"+ + "\1\70\64\0\16\241\1\0\1\242\1\0\6\241\3\0"+ + "\15\241\1\0\5\241\1\0\3\241\4\0\2\241\1\0"+ + "\1\241\1\0\11\241\12\0\62\73\1\0\1\73\2\0"+ + "\30\73\3\243\1\244\7\243\1\245\23\243\1\246\2\243"+ + "\1\247\1\243\1\250\1\251\14\243\1\252\1\253\1\243"+ + "\1\254\30\243\63\77\3\0\30\77\3\243\1\244\7\243"+ + "\1\245\23\243\1\255\2\243\1\247\1\243\1\250\1\251"+ + "\14\243\1\252\1\253\1\243\1\254\30\243\1\0\1\103"+ + "\2\11\1\105\1\103\1\106\4\11\1\107\1\110\2\11"+ + "\1\111\1\112\1\0\3\11\1\107\1\11\1\113\3\0"+ + "\1\11\1\113\1\11\1\114\2\11\1\106\3\11\1\110"+ + "\1\11\1\115\1\0\5\11\1\0\1\11\1\114\1\115"+ + "\4\0\2\11\1\0\1\11\1\0\1\103\1\11\3\103"+ + "\1\11\1\105\1\103\1\11\13\0\1\256\1\11\4\256"+ + "\4\11\1\256\2\11\1\256\1\257\1\112\1\0\1\11"+ + "\1\256\1\11\1\256\2\11\3\0\1\256\1\11\1\256"+ + "\3\11\1\256\5\11\1\256\1\0\5\11\1\0\2\11"+ + "\1\256\4\0\2\11\1\0\1\11\1\0\1\256\1\11"+ + "\3\256\1\11\2\256\1\11\13\0\1\105\2\11\2\105"+ + "\1\106\4\11\1\107\3\11\1\111\1\112\1\0\3\11"+ + "\1\107\2\11\3\0\6\11\1\106\5\11\1\115\1\0"+ + "\5\11\1\0\2\11\1\115\4\0\2\11\1\0\1\11"+ + "\1\0\1\105\1\11\3\105\1\11\2\105\1\11\13\0"+ + "\1\260\2\11\2\260\1\11\1\261\7\11\1\0\1\112"+ "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\1\257\1\11\3\257"+ - "\1\11\2\257\1\11\13\0\1\110\2\0\2\110\1\261"+ - "\4\0\1\262\11\0\1\262\13\0\1\261\5\0\1\263"+ - "\11\0\1\263\11\0\1\110\1\0\3\110\1\0\2\110"+ - "\14\0\10\11\1\264\5\11\1\0\1\111\1\0\6\11"+ + "\4\0\2\11\1\0\1\11\1\0\1\260\1\11\3\260"+ + "\1\11\2\260\1\11\13\0\1\111\2\0\2\111\1\262"+ + "\4\0\1\263\11\0\1\263\13\0\1\262\5\0\1\264"+ + "\11\0\1\264\11\0\1\111\1\0\3\111\1\0\2\111"+ + "\14\0\10\11\1\265\5\11\1\0\1\112\1\0\6\11"+ "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\10\11\1\265\5\11"+ - "\1\0\1\111\1\0\6\11\3\0\15\11\1\0\5\11"+ + "\1\0\1\11\1\0\11\11\13\0\10\11\1\266\5\11"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\1\266\1\267\1\11\1\104\1\266\1\105\4\11"+ - "\1\106\1\107\2\11\1\110\1\111\1\0\3\11\1\106"+ - "\1\11\1\112\3\0\1\11\1\112\1\11\1\113\2\11"+ - "\1\105\3\11\1\107\1\11\1\114\1\0\5\11\1\0"+ - "\1\11\1\113\1\114\4\0\2\11\1\0\1\267\1\0"+ - "\1\266\1\11\3\266\1\11\1\104\1\266\1\11\13\0"+ - "\1\120\2\11\2\120\1\105\4\11\1\106\1\107\2\11"+ - "\1\110\1\111\1\0\3\11\1\106\1\11\1\112\3\0"+ - "\1\11\1\112\1\11\1\113\2\11\1\105\3\11\1\107"+ - "\1\11\1\114\1\0\5\11\1\0\1\11\1\113\1\114"+ - "\4\0\2\11\1\0\1\11\1\0\1\120\1\11\3\120"+ - "\1\11\2\120\1\11\13\0\11\11\1\124\4\11\1\0"+ - "\1\111\1\0\6\11\3\0\11\11\1\124\3\11\1\0"+ + "\13\0\1\267\1\270\1\11\1\105\1\267\1\106\4\11"+ + "\1\107\1\110\2\11\1\111\1\112\1\0\3\11\1\107"+ + "\1\11\1\113\3\0\1\11\1\113\1\11\1\114\2\11"+ + "\1\106\3\11\1\110\1\11\1\115\1\0\5\11\1\0"+ + "\1\11\1\114\1\115\4\0\2\11\1\0\1\270\1\0"+ + "\1\267\1\11\3\267\1\11\1\105\1\267\1\11\13\0"+ + "\1\121\2\11\2\121\1\106\4\11\1\107\1\110\2\11"+ + "\1\111\1\112\1\0\3\11\1\107\1\11\1\113\3\0"+ + "\1\11\1\113\1\11\1\114\2\11\1\106\3\11\1\110"+ + "\1\11\1\115\1\0\5\11\1\0\1\11\1\114\1\115"+ + "\4\0\2\11\1\0\1\11\1\0\1\121\1\11\3\121"+ + "\1\11\2\121\1\11\13\0\11\11\1\125\4\11\1\0"+ + "\1\112\1\0\6\11\3\0\11\11\1\125\3\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\1\110\2\0\2\110\65\0\1\110\1\0"+ - "\3\110\1\0\2\110\14\0\12\11\1\270\3\11\1\0"+ - "\1\111\1\0\3\11\1\270\2\11\3\0\15\11\1\0"+ + "\11\11\13\0\1\111\2\0\2\111\65\0\1\111\1\0"+ + "\3\111\1\0\2\111\14\0\12\11\1\271\3\11\1\0"+ + "\1\112\1\0\3\11\1\271\2\11\3\0\15\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\6\11\1\271\7\11\1\0\1\111\1\0"+ + "\11\11\13\0\6\11\1\272\7\11\1\0\1\112\1\0"+ "\6\11\3\0\15\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\1\11\1\272\13\11\1\0"+ + "\1\112\1\0\6\11\3\0\1\11\1\273\13\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\4\11\1\273\10\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\12\11\1\270"+ - "\3\11\1\0\1\111\1\0\3\11\1\270\2\11\3\0"+ - "\1\11\1\274\1\11\1\275\6\11\1\276\2\11\1\0"+ - "\5\11\1\0\3\11\4\0\1\277\1\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\6\11\1\300\6\11\1\0\5\11\1\0\3\11"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\4\11\1\274\10\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\12\11\1\271"+ + "\3\11\1\0\1\112\1\0\3\11\1\271\2\11\3\0"+ + "\1\11\1\275\1\11\1\276\6\11\1\277\2\11\1\0"+ + "\5\11\1\0\3\11\4\0\1\300\1\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\6\11\1\301\6\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\11\11"+ - "\1\301\4\11\1\0\1\111\1\0\6\11\3\0\11\11"+ - "\1\301\3\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\1\11\1\302\4\11\1\303\2\11"+ - "\1\304\3\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\13\11\1\305\1\11\1\0\5\11"+ + "\1\302\4\11\1\0\1\112\1\0\6\11\3\0\11\11"+ + "\1\302\3\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\1\11\1\303\4\11\1\304\2\11"+ + "\1\305\3\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\13\11\1\306\1\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\1\11"+ - "\1\306\13\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\136\4\0\5\136"+ - "\2\0\16\136\1\0\11\136\3\0\3\136\1\0\1\136"+ - "\1\0\11\136\13\0\16\136\4\0\5\136\2\0\11\136"+ - "\1\307\4\136\1\0\11\136\3\0\3\136\1\0\1\136"+ - "\1\0\11\136\13\0\10\136\1\310\5\136\4\0\5\136"+ - "\2\0\16\136\1\0\11\136\3\0\3\136\1\0\1\136"+ - "\1\0\11\136\13\0\16\136\4\0\5\136\2\0\2\136"+ - "\1\311\1\312\12\136\1\0\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\10\136\1\313\5\136\4\0"+ - "\5\136\2\0\14\136\1\314\1\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\10\136\1\315\1\136\1\316\3\136\1\0"+ - "\11\136\3\0\3\136\1\0\1\136\1\0\11\136\13\0"+ - "\16\136\4\0\5\136\2\0\5\136\1\317\1\320\5\136"+ - "\1\321\1\136\1\0\11\136\3\0\3\136\1\0\1\136"+ - "\1\0\11\136\13\0\16\136\4\0\5\136\2\0\3\136"+ - "\1\322\4\136\1\323\5\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\6\136\1\324\3\136\1\325\3\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\7\136\1\326\6\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\7\136\1\327\6\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\330"+ - "\1\0\1\331\1\0\6\330\3\0\15\330\1\0\5\330"+ - "\1\0\3\330\4\0\2\330\1\0\1\330\1\0\11\330"+ - "\35\0\4\332\1\333\2\0\1\154\25\0\2\332\35\0"+ - "\16\155\1\0\1\156\1\0\6\155\1\334\1\335\1\0"+ - "\15\155\1\0\5\155\1\0\3\155\4\0\2\155\1\0"+ - "\1\155\1\0\11\155\33\0\1\155\75\0\16\336\1\0"+ - "\1\337\1\0\6\336\3\0\15\336\1\0\5\336\1\0"+ - "\3\336\4\0\2\336\1\0\1\336\1\0\11\336\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\2\11\1\340"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\1\11"+ + "\1\307\13\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\137\4\0\5\137"+ + "\2\0\16\137\1\0\11\137\3\0\3\137\1\0\1\137"+ + "\1\0\11\137\13\0\16\137\4\0\5\137\2\0\11\137"+ + "\1\310\4\137\1\0\11\137\3\0\3\137\1\0\1\137"+ + "\1\0\11\137\13\0\10\137\1\311\5\137\4\0\5\137"+ + "\2\0\16\137\1\0\11\137\3\0\3\137\1\0\1\137"+ + "\1\0\11\137\13\0\16\137\4\0\5\137\2\0\2\137"+ + "\1\312\1\313\12\137\1\0\11\137\3\0\3\137\1\0"+ + "\1\137\1\0\11\137\13\0\10\137\1\314\5\137\4\0"+ + "\5\137\2\0\14\137\1\315\1\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\10\137\1\316\1\137\1\317\3\137\1\0"+ + "\11\137\3\0\3\137\1\0\1\137\1\0\11\137\13\0"+ + "\16\137\4\0\5\137\2\0\5\137\1\320\1\321\5\137"+ + "\1\322\1\137\1\0\11\137\3\0\3\137\1\0\1\137"+ + "\1\0\11\137\13\0\16\137\4\0\5\137\2\0\3\137"+ + "\1\323\4\137\1\324\5\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\6\137\1\325\3\137\1\326\3\137\1\0\11\137"+ + "\3\0\3\137\1\0\1\137\1\0\11\137\13\0\16\137"+ + "\4\0\5\137\2\0\7\137\1\327\6\137\1\0\11\137"+ + "\3\0\3\137\1\0\1\137\1\0\11\137\13\0\16\137"+ + "\4\0\5\137\2\0\7\137\1\330\6\137\1\0\11\137"+ + "\3\0\3\137\1\0\1\137\1\0\11\137\13\0\16\331"+ + "\1\0\1\332\1\0\6\331\3\0\15\331\1\0\5\331"+ + "\1\0\3\331\4\0\2\331\1\0\1\331\1\0\11\331"+ + "\35\0\4\333\1\334\2\0\1\155\25\0\2\333\35\0"+ + "\16\156\1\0\1\157\1\0\6\156\1\335\1\336\1\0"+ + "\15\156\1\0\5\156\1\0\3\156\4\0\2\156\1\0"+ + "\1\156\1\0\11\156\33\0\1\156\75\0\16\337\1\0"+ + "\1\340\1\0\6\337\3\0\15\337\1\0\5\337\1\0"+ + "\3\337\4\0\2\337\1\0\1\337\1\0\11\337\13\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\2\11\1\341"+ "\12\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\5\11\1\341\7\11\1\0\5\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\5\11\1\342\7\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\11\11\1\342"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\11\11\1\343"+ "\3\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\6\11\1\343\6\11\1\0\5\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\6\11\1\344\6\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\11\11\1\344"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\11\11\1\345"+ "\3\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\3\11\1\345\11\11\1\0\5\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\3\11\1\346\11\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\4\11\1\346"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\4\11\1\347"+ "\10\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\7\11\1\347\5\11\1\0\5\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\7\11\1\350\5\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\11\11\1\350"+ - "\2\11\1\223\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\14\11\1\351\1\0\5\11\1\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\11\11\1\351"+ + "\2\11\1\224\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\14\11\1\352\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\6\11\1\346"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\6\11\1\347"+ "\6\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\2\11\1\352\13\11\1\0"+ - "\1\111\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ + "\1\11\1\0\11\11\13\0\2\11\1\353\13\11\1\0"+ + "\1\112\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\2\11\1\353"+ - "\1\11\1\354\10\11\1\0\5\11\1\0\3\11\4\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\2\11\1\354"+ + "\1\11\1\355\10\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\2\11\1\355\4\11\1\356"+ + "\1\112\1\0\6\11\3\0\2\11\1\356\4\11\1\357"+ "\5\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\1\11\1\357\5\11\1\357\5\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\1\11\1\360\5\11\1\360\5\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\6\11\1\354\6\11\1\0\5\11\1\0\3\11\4\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\6\11\1\355\6\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\3\11\1\360\5\11\1\361"+ + "\1\112\1\0\6\11\3\0\3\11\1\361\5\11\1\362"+ "\3\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\15\11\1\0\1\362\4\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\1\202"+ - "\2\11\2\202\11\11\1\0\1\111\1\0\6\11\3\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\15\11\1\0\1\363\4\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\1\203"+ + "\2\11\2\203\11\11\1\0\1\112\1\0\6\11\3\0"+ "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\1\202\1\11\3\202\1\11\2\202\1\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\1\363"+ + "\1\11\1\0\1\203\1\11\3\203\1\11\2\203\1\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\1\364"+ "\14\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\2\11\1\364\13\11\1\0"+ - "\1\111\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ + "\1\11\1\0\11\11\13\0\2\11\1\365\13\11\1\0"+ + "\1\112\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\10\11\1\365\5\11\1\0\1\111\1\0\6\11\3\0"+ - "\13\11\1\366\1\11\1\0\5\11\1\0\3\11\4\0"+ + "\10\11\1\366\5\11\1\0\1\112\1\0\6\11\3\0"+ + "\13\11\1\367\1\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\4\11\1\367\10\11\1\0"+ + "\1\112\1\0\6\11\3\0\4\11\1\370\10\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\6\11\1\370\6\11\1\0\5\11\1\0\3\11\4\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\6\11\1\371\6\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\4\11\1\371\10\11\1\0"+ + "\1\112\1\0\6\11\3\0\4\11\1\372\10\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\11\11\1\372\3\11\1\0\5\11\1\0\3\11\4\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\11\11\1\373\3\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\10\11\1\351\1\11\1\373"+ + "\1\112\1\0\6\11\3\0\10\11\1\352\1\11\1\374"+ "\2\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\1\11\1\351\13\11\1\0\5\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\1\11\1\352\13\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\11\11\1\374"+ - "\3\11\1\0\5\11\1\0\3\11\4\0\1\375\1\11"+ - "\1\0\1\11\1\0\11\11\13\0\11\11\1\301\4\11"+ - "\1\0\1\111\1\0\6\11\3\0\11\11\1\301\1\376"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\11\11\1\375"+ + "\3\11\1\0\5\11\1\0\3\11\4\0\1\376\1\11"+ + "\1\0\1\11\1\0\11\11\13\0\11\11\1\302\4\11"+ + "\1\0\1\112\1\0\6\11\3\0\11\11\1\302\1\377"+ "\2\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\1\11\1\377\13\11\1\0\5\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\1\11\1\u0100\13\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\15\11\1\0"+ - "\1\11\1\u0100\2\11\1\u0101\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\6\11\1\u0102\7\11"+ - "\1\0\1\111\1\0\6\11\3\0\5\11\1\u0103\4\11"+ - "\1\u0104\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\2\11\1\u0105\1\11\1\u0106\10\11"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ + "\1\11\1\u0101\2\11\1\u0102\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\6\11\1\u0103\7\11"+ + "\1\0\1\112\1\0\6\11\3\0\5\11\1\u0104\4\11"+ + "\1\u0105\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\2\11\1\u0106\1\11\1\u0107\10\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\7\11\1\u0107\5\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\7\11\1\u0108\5\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\6\11"+ - "\1\u0108\7\11\1\0\1\111\1\0\6\11\3\0\15\11"+ + "\1\u0109\7\11\1\0\1\112\1\0\6\11\3\0\15\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\1\351"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\1\352"+ "\1\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\1\u0109\14\11\1\0\5\11"+ + "\1\112\1\0\6\11\3\0\1\u010a\14\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\4\11"+ - "\1\u010a\10\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\11\11\1\u010b\3\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\4\11"+ + "\1\u010b\10\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\11\11\1\u010c\3\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\12\11"+ - "\1\u010c\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\7\11\1\u010d\5\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\12\11"+ + "\1\u010d\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\7\11\1\u010e\5\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\2\11"+ - "\1\u010e\12\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\1\11\1\u010f\13\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\2\11"+ + "\1\u010f\12\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\1\11\1\u0110\13\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\234\1\0\1\235\1\0\6\234\3\0\15\234"+ - "\1\0\5\234\1\0\3\234\4\0\2\234\1\0\1\234"+ - "\1\0\11\234\1\0\1\u0110\31\0\1\234\75\0\16\236"+ - "\1\0\1\237\1\0\6\236\1\u0111\1\u0112\1\0\15\236"+ - "\1\0\5\236\1\0\3\236\4\0\2\236\1\0\1\236"+ - "\1\0\11\236\33\0\1\236\75\0\16\240\1\0\1\241"+ - "\1\0\6\240\1\u0113\1\u0114\1\0\15\240\1\0\5\240"+ - "\1\0\3\240\4\0\2\240\1\0\1\240\1\0\11\240"+ - "\33\0\1\240\75\0\1\u0115\1\0\4\u0115\4\0\1\u0115"+ - "\2\0\1\u0115\4\0\1\u0115\1\0\1\u0115\5\0\1\u0115"+ - "\1\0\1\u0115\3\0\1\u0115\5\0\1\u0115\11\0\1\u0115"+ - "\11\0\1\u0115\1\0\3\u0115\1\0\2\u0115\14\0\1\u0116"+ - "\1\0\4\u0116\4\0\1\u0116\2\0\1\u0116\4\0\1\u0116"+ - "\1\0\1\u0116\5\0\1\u0116\1\0\1\u0116\3\0\1\u0116"+ - "\5\0\1\u0116\11\0\1\u0116\11\0\1\u0116\1\0\3\u0116"+ - "\1\0\2\u0116\14\0\1\255\1\11\4\255\1\11\1\105"+ - "\2\11\1\255\1\107\1\11\1\255\1\u0117\1\111\1\0"+ - "\1\11\1\255\1\11\1\255\1\11\1\112\3\0\1\255"+ - "\1\112\1\255\1\113\1\11\1\105\1\255\3\11\1\107"+ - "\1\11\1\255\1\0\5\11\1\0\1\11\1\113\1\255"+ - "\4\0\2\11\1\0\1\11\1\0\1\255\1\11\3\255"+ - "\1\11\2\255\1\11\13\0\1\u0117\1\0\4\u0117\4\0"+ - "\1\u0117\2\0\1\u0117\4\0\1\u0117\1\0\1\u0117\5\0"+ - "\1\u0117\1\0\1\u0117\3\0\1\u0117\5\0\1\u0117\11\0"+ - "\1\u0117\11\0\1\u0117\1\0\3\u0117\1\0\2\u0117\14\0"+ - "\1\257\2\11\2\257\5\11\1\106\3\11\1\0\1\111"+ - "\1\0\3\11\1\106\2\11\3\0\14\11\1\114\1\0"+ - "\5\11\1\0\2\11\1\114\4\0\2\11\1\0\1\11"+ - "\1\0\1\257\1\11\3\257\1\11\2\257\1\11\13\0"+ - "\1\257\2\11\2\257\11\11\1\0\1\111\1\0\6\11"+ + "\13\0\16\235\1\0\1\236\1\0\6\235\3\0\15\235"+ + "\1\0\5\235\1\0\3\235\4\0\2\235\1\0\1\235"+ + "\1\0\11\235\1\0\1\u0111\31\0\1\235\75\0\16\237"+ + "\1\0\1\240\1\0\6\237\1\u0112\1\u0113\1\0\15\237"+ + "\1\0\5\237\1\0\3\237\4\0\2\237\1\0\1\237"+ + "\1\0\11\237\33\0\1\237\75\0\16\241\1\0\1\242"+ + "\1\0\6\241\1\u0114\1\u0115\1\0\15\241\1\0\5\241"+ + "\1\0\3\241\4\0\2\241\1\0\1\241\1\0\11\241"+ + "\33\0\1\241\75\0\1\u0116\1\0\4\u0116\4\0\1\u0116"+ + "\2\0\1\u0116\4\0\1\u0116\1\0\1\u0116\5\0\1\u0116"+ + "\1\0\1\u0116\3\0\1\u0116\5\0\1\u0116\11\0\1\u0116"+ + "\11\0\1\u0116\1\0\3\u0116\1\0\2\u0116\14\0\1\u0117"+ + "\1\0\4\u0117\4\0\1\u0117\2\0\1\u0117\4\0\1\u0117"+ + "\1\0\1\u0117\5\0\1\u0117\1\0\1\u0117\3\0\1\u0117"+ + "\5\0\1\u0117\11\0\1\u0117\11\0\1\u0117\1\0\3\u0117"+ + "\1\0\2\u0117\14\0\1\256\1\11\4\256\1\11\1\106"+ + "\2\11\1\256\1\110\1\11\1\256\1\u0118\1\112\1\0"+ + "\1\11\1\256\1\11\1\256\1\11\1\113\3\0\1\256"+ + "\1\113\1\256\1\114\1\11\1\106\1\256\3\11\1\110"+ + "\1\11\1\256\1\0\5\11\1\0\1\11\1\114\1\256"+ + "\4\0\2\11\1\0\1\11\1\0\1\256\1\11\3\256"+ + "\1\11\2\256\1\11\13\0\1\u0118\1\0\4\u0118\4\0"+ + "\1\u0118\2\0\1\u0118\4\0\1\u0118\1\0\1\u0118\5\0"+ + "\1\u0118\1\0\1\u0118\3\0\1\u0118\5\0\1\u0118\11\0"+ + "\1\u0118\11\0\1\u0118\1\0\3\u0118\1\0\2\u0118\14\0"+ + "\1\260\2\11\2\260\5\11\1\107\3\11\1\0\1\112"+ + "\1\0\3\11\1\107\2\11\3\0\14\11\1\115\1\0"+ + "\5\11\1\0\2\11\1\115\4\0\2\11\1\0\1\11"+ + "\1\0\1\260\1\11\3\260\1\11\2\260\1\11\13\0"+ + "\1\260\2\11\2\260\11\11\1\0\1\112\1\0\6\11"+ "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\1\257\1\11\3\257\1\11\2\257"+ - "\1\11\13\0\1\u0118\2\0\2\u0118\1\0\1\u0119\63\0"+ - "\1\u0118\1\0\3\u0118\1\0\2\u0118\14\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\1\11\1\u011a\13\11\1\0"+ + "\1\0\1\11\1\0\1\260\1\11\3\260\1\11\2\260"+ + "\1\11\13\0\1\u0119\2\0\2\u0119\1\0\1\u011a\63\0"+ + "\1\u0119\1\0\3\u0119\1\0\2\u0119\14\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\1\11\1\u011b\13\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\14\11\1\u011b\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\1\266\2\11\1\104"+ - "\1\266\1\105\4\11\1\106\1\107\2\11\1\110\1\111"+ - "\1\0\3\11\1\106\1\11\1\112\3\0\1\11\1\112"+ - "\1\11\1\113\2\11\1\105\3\11\1\107\1\11\1\114"+ - "\1\0\5\11\1\0\1\11\1\113\1\114\4\0\2\11"+ - "\1\0\1\11\1\0\1\266\1\11\3\266\1\11\1\104"+ - "\1\266\1\11\13\0\1\u011c\1\11\4\u011c\4\11\1\u011c"+ - "\2\11\1\u011c\1\256\1\111\1\0\1\11\1\u011c\1\11"+ - "\1\u011c\2\11\3\0\1\u011c\1\11\1\u011c\3\11\1\u011c"+ - "\5\11\1\u011c\1\0\5\11\1\0\2\11\1\u011c\4\0"+ - "\2\11\1\0\1\11\1\0\1\u011c\1\11\3\u011c\1\11"+ - "\2\u011c\1\11\13\0\10\11\1\u011d\5\11\1\0\1\111"+ - "\1\0\2\11\1\u011d\3\11\3\0\15\11\1\0\5\11"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\14\11\1\u011c\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\1\267\2\11\1\105"+ + "\1\267\1\106\4\11\1\107\1\110\2\11\1\111\1\112"+ + "\1\0\3\11\1\107\1\11\1\113\3\0\1\11\1\113"+ + "\1\11\1\114\2\11\1\106\3\11\1\110\1\11\1\115"+ + "\1\0\5\11\1\0\1\11\1\114\1\115\4\0\2\11"+ + "\1\0\1\11\1\0\1\267\1\11\3\267\1\11\1\105"+ + "\1\267\1\11\13\0\1\u011d\1\11\4\u011d\4\11\1\u011d"+ + "\2\11\1\u011d\1\257\1\112\1\0\1\11\1\u011d\1\11"+ + "\1\u011d\2\11\3\0\1\u011d\1\11\1\u011d\3\11\1\u011d"+ + "\5\11\1\u011d\1\0\5\11\1\0\2\11\1\u011d\4\0"+ + "\2\11\1\0\1\11\1\0\1\u011d\1\11\3\u011d\1\11"+ + "\2\u011d\1\11\13\0\10\11\1\u011e\5\11\1\0\1\112"+ + "\1\0\2\11\1\u011e\3\11\3\0\15\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\1\11"+ - "\1\u011e\4\11\1\u011f\2\11\1\u0120\3\11\1\0\1\11"+ - "\1\u011e\3\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\6\11\1\u0121\6\11\1\0\5\11\1\0\3\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\1\11"+ + "\1\u011f\4\11\1\u0120\2\11\1\u0121\3\11\1\0\1\11"+ + "\1\u011f\3\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\6\11\1\u0122\6\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\12\11\1\u0122\2\11"+ + "\1\0\1\112\1\0\6\11\3\0\12\11\1\u0123\2\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\10\11\1\u0123\5\11\1\0\1\111"+ + "\1\0\11\11\13\0\10\11\1\u0124\5\11\1\0\1\112"+ "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\12\11\1\u0124\2\11"+ + "\1\0\1\112\1\0\6\11\3\0\12\11\1\u0125\2\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\6\11\1\u0125\7\11\1\0\1\111"+ - "\1\0\6\11\3\0\6\11\1\u0126\6\11\1\0\5\11"+ + "\1\0\11\11\13\0\6\11\1\u0126\7\11\1\0\1\112"+ + "\1\0\6\11\3\0\6\11\1\u0127\6\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\13\11"+ - "\1\u0127\1\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\12\11\1\u0128\2\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\13\11"+ + "\1\u0128\1\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\12\11\1\u0129\2\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\12\11\1\106\3\11\1\0\1\111\1\0\3\11"+ - "\1\106\2\11\3\0\14\11\1\114\1\0\5\11\1\0"+ - "\2\11\1\114\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\1\11"+ - "\1\u0129\13\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\1\11\1\u012a\13\11\1\0\5\11"+ + "\13\0\12\11\1\107\3\11\1\0\1\112\1\0\3\11"+ + "\1\107\2\11\3\0\14\11\1\115\1\0\5\11\1\0"+ + "\2\11\1\115\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\1\11"+ + "\1\u012a\13\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\1\11\1\u012b\13\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\2\11"+ - "\1\u012b\12\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\2\11\1\u012c\12\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\2\11"+ + "\1\u012c\12\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\2\11\1\u012d\12\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\3\11"+ - "\1\u0106\11\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\136\4\0\5\136"+ - "\2\0\6\136\1\u012d\7\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\7\136\1\u012e\6\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\3\136\1\u012f\12\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\13\136\1\u0130\2\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\12\136\1\u0131\3\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\1\136\1\u0132\14\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\10\136\1\u0133\5\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\12\136\1\u0134\3\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\2\136\1\u0135\13\136"+ - "\4\0\5\136\2\0\6\136\1\u0136\7\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\3\136\1\u0137\12\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\5\136\1\u0138\10\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\1\136\1\u0139\6\136\1\u013a\5\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\14\136\1\u013b\1\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\10\136\1\u013c\5\136\4\0\5\136\2\0\16\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\5\136\1\u013d\7\136"+ - "\1\u013e\1\0\11\136\3\0\3\136\1\0\1\136\1\0"+ - "\11\136\13\0\16\136\4\0\5\136\2\0\4\136\1\u013f"+ - "\11\136\1\0\1\136\1\u0140\7\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\16\136\4\0\5\136\2\0"+ - "\13\136\1\u0141\2\136\1\0\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\16\330\1\0\1\331\1\0"+ - "\6\330\1\333\1\332\1\0\15\330\1\0\5\330\1\0"+ - "\3\330\4\0\2\330\1\0\1\330\1\0\11\330\33\0"+ - "\1\330\75\0\16\u0142\1\0\1\u0143\1\0\6\u0142\3\0"+ - "\15\u0142\1\0\5\u0142\1\0\3\u0142\4\0\2\u0142\1\0"+ - "\1\u0142\1\0\11\u0142\13\0\16\u0144\1\0\1\u0145\1\0"+ - "\6\u0144\3\0\15\u0144\1\0\5\u0144\1\0\3\u0144\4\0"+ - "\2\u0144\1\0\1\u0144\1\0\11\u0144\13\0\16\336\1\0"+ - "\1\337\1\0\6\336\1\157\1\154\1\0\15\336\1\0"+ - "\5\336\1\0\3\336\4\0\2\336\1\0\1\336\1\0"+ - "\11\336\33\0\1\336\75\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\3\11\1\u0146\11\11\1\0\5\11\1\0"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\3\11"+ + "\1\u0107\11\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\137\4\0\5\137"+ + "\2\0\6\137\1\u012e\7\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\7\137\1\u012f\6\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\3\137\1\u0130\12\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\13\137\1\u0131\2\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\12\137\1\u0132\3\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\1\137\1\u0133\14\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\10\137\1\u0134\5\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\12\137\1\u0135\3\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\2\137\1\u0136\13\137"+ + "\4\0\5\137\2\0\6\137\1\u0137\7\137\1\0\11\137"+ + "\3\0\3\137\1\0\1\137\1\0\11\137\13\0\16\137"+ + "\4\0\5\137\2\0\3\137\1\u0138\12\137\1\0\11\137"+ + "\3\0\3\137\1\0\1\137\1\0\11\137\13\0\16\137"+ + "\4\0\5\137\2\0\5\137\1\u0139\10\137\1\0\11\137"+ + "\3\0\3\137\1\0\1\137\1\0\11\137\13\0\16\137"+ + "\4\0\5\137\2\0\1\137\1\u013a\6\137\1\u013b\5\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\14\137\1\u013c\1\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\10\137\1\u013d\5\137\4\0\5\137\2\0\16\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\5\137\1\u013e\7\137"+ + "\1\u013f\1\0\11\137\3\0\3\137\1\0\1\137\1\0"+ + "\11\137\13\0\16\137\4\0\5\137\2\0\4\137\1\u0140"+ + "\11\137\1\0\1\137\1\u0141\7\137\3\0\3\137\1\0"+ + "\1\137\1\0\11\137\13\0\16\137\4\0\5\137\2\0"+ + "\13\137\1\u0142\2\137\1\0\11\137\3\0\3\137\1\0"+ + "\1\137\1\0\11\137\13\0\16\331\1\0\1\332\1\0"+ + "\6\331\1\334\1\333\1\0\15\331\1\0\5\331\1\0"+ + "\3\331\4\0\2\331\1\0\1\331\1\0\11\331\33\0"+ + "\1\331\75\0\16\u0143\1\0\1\u0144\1\0\6\u0143\3\0"+ + "\15\u0143\1\0\5\u0143\1\0\3\u0143\4\0\2\u0143\1\0"+ + "\1\u0143\1\0\11\u0143\13\0\16\u0145\1\0\1\u0146\1\0"+ + "\6\u0145\3\0\15\u0145\1\0\5\u0145\1\0\3\u0145\4\0"+ + "\2\u0145\1\0\1\u0145\1\0\11\u0145\13\0\16\337\1\0"+ + "\1\340\1\0\6\337\1\160\1\155\1\0\15\337\1\0"+ + "\5\337\1\0\3\337\4\0\2\337\1\0\1\337\1\0"+ + "\11\337\33\0\1\337\75\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\3\11\1\u0147\11\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\6\11\1\u0147\7\11\1\0\1\111\1\0\6\11\3\0"+ - "\1\11\1\u0148\13\11\1\0\1\11\1\u0148\3\11\1\0"+ + "\6\11\1\u0148\7\11\1\0\1\112\1\0\6\11\3\0"+ + "\1\11\1\u0149\13\11\1\0\1\11\1\u0149\3\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\3\11\1\u0149"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\3\11\1\u014a"+ "\11\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\1\u014a\14\11\1\0\5\11\1\0\3\11"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\1\u014b\14\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\15\11\1\0\1\11"+ - "\1\u014b\3\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\12\11\1\u014c\2\11\1\0\5\11\1\0\3\11"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\1\11"+ + "\1\u014c\3\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\12\11\1\u014d\2\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\12\11\1\u014d\2\11"+ + "\1\0\1\112\1\0\6\11\3\0\12\11\1\u014e\2\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\2\11\1\u014e\12\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\2\11\1\u014f\12\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\13\11\1\u014f\1\11"+ + "\1\0\1\112\1\0\6\11\3\0\13\11\1\u0150\1\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\6\11\1\u0150\7\11\1\0\1\111"+ + "\1\0\11\11\13\0\6\11\1\u0151\7\11\1\0\1\112"+ "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\6\11"+ - "\1\u0151\7\11\1\0\1\111\1\0\6\11\3\0\15\11"+ + "\1\u0152\7\11\1\0\1\112\1\0\6\11\3\0\15\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\7\11\1\u0152\5\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\7\11\1\u0153\5\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\12\11\1\u0153\2\11"+ + "\1\0\1\112\1\0\6\11\3\0\12\11\1\u0154\2\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\12\11\1\u0154\2\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\12\11\1\u0155\2\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\10\11"+ - "\1\u0155\5\11\1\0\1\111\1\0\6\11\3\0\15\11"+ + "\1\u0156\5\11\1\0\1\112\1\0\6\11\3\0\15\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\6\11\1\u0156\7\11\1\0\1\111"+ + "\1\0\11\11\13\0\6\11\1\u0157\7\11\1\0\1\112"+ "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\12\11\1\u0157\2\11"+ + "\1\0\1\112\1\0\6\11\3\0\12\11\1\u0158\2\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\1\u0158\11\11\1\u0159\2\11\1\0\5\11\1\0"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\1\u0159\11\11\1\u015a\2\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\7\11\1\357"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\7\11\1\360"+ "\5\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\15\11\1\0\3\11\1\u015a\1\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\15\11\1\0\3\11\1\u015b\1\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\1\11\1\u0154"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\1\11\1\u015c"+ "\13\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ "\6\11\3\0\15\11\1\0\5\11\1\0\3\11\4\0"+ - "\1\u015b\1\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\12\11\1\u015c\2\11"+ + "\1\u015d\1\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\12\11\1\u015e\2\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\10\11\1\u015d\4\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\10\11\1\u015f\4\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\1\u015e\14\11\1\0"+ + "\1\0\1\112\1\0\6\11\3\0\1\u0160\14\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\2\11\1\u015f\13\11\1\0\1\111\1\0"+ + "\11\11\13\0\2\11\1\u0161\13\11\1\0\1\112\1\0"+ "\6\11\3\0\15\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\12\11\1\u0160\2\11\1\0"+ - "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\4\11\1\u0161\10\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\10\11\1\u0162"+ - "\5\11\1\0\1\111\1\0\6\11\3\0\15\11\1\0"+ + "\1\112\1\0\6\11\3\0\12\11\1\u0162\2\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\6\11\1\u0163\6\11\1\0\5\11\1\0\3\11\4\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\4\11\1\u0163\10\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\10\11\1\u0164"+ - "\5\11\1\0\1\111\1\0\6\11\3\0\15\11\1\0"+ + "\5\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\6\11\1\u0165\6\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\10\11\1\u0166"+ + "\5\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\1\11\1\u0165\13\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\6\11\1\u0166"+ - "\7\11\1\0\1\111\1\0\6\11\3\0\15\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\1\11\1\u0167\13\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\6\11\1\u0168"+ + "\7\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\6\11\1\u0167\7\11\1\0\1\111\1\0"+ + "\11\11\13\0\6\11\1\u0169\7\11\1\0\1\112\1\0"+ "\6\11\3\0\15\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\3\11\1\u0168\2\11\1\u0169"+ + "\1\112\1\0\6\11\3\0\3\11\1\u016a\2\11\1\u016b"+ "\6\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\6\11\1\u016a\7\11\1\0"+ - "\1\111\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ + "\1\11\1\0\11\11\13\0\6\11\1\u016c\7\11\1\0"+ + "\1\112\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\11\11\1\u016b"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\11\11\1\u016d"+ "\3\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\6\11\1\u016c\6\11\1\0\5\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\6\11\1\u016e\6\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\13\11\1\u016d"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\13\11\1\u016f"+ "\1\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\10\11\1\u016e\5\11\1\0"+ - "\1\111\1\0\6\11\3\0\1\11\1\u016f\13\11\1\0"+ + "\1\11\1\0\11\11\13\0\10\11\1\u0170\5\11\1\0"+ + "\1\112\1\0\6\11\3\0\1\11\1\u0171\13\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\1\11\1\u0170\13\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\2\11\1\u0171"+ - "\13\11\1\0\1\111\1\0\6\11\3\0\15\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\1\11\1\u0172\13\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\2\11\1\u0173"+ + "\13\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\6\11\1\u0172\6\11\1\0\5\11\1\0\3\11\4\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\6\11\1\u0174\6\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\13\11\1\u0173\1\11\1\0"+ + "\1\112\1\0\6\11\3\0\13\11\1\u0175\1\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\2\11\1\u0174\12\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\2\11\1\u0175"+ - "\13\11\1\0\1\111\1\0\6\11\3\0\15\11\1\0"+ - "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ "\2\11\1\u0176\12\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\1\u0177\1\0"+ - "\4\u0177\4\0\1\u0177\2\0\1\u0177\4\0\1\u0177\1\0"+ - "\1\u0177\5\0\1\u0177\1\0\1\u0177\3\0\1\u0177\5\0"+ - "\1\u0177\11\0\1\u0177\11\0\1\u0177\1\0\3\u0177\1\0"+ - "\2\u0177\14\0\1\u0178\1\0\4\u0178\4\0\1\u0178\2\0"+ - "\1\u0178\4\0\1\u0178\1\0\1\u0178\5\0\1\u0178\1\0"+ - "\1\u0178\3\0\1\u0178\5\0\1\u0178\11\0\1\u0178\11\0"+ - "\1\u0178\1\0\3\u0178\1\0\2\u0178\14\0\1\u0117\1\0"+ - "\4\u0117\1\0\1\261\2\0\1\u0117\2\0\1\u0117\4\0"+ - "\1\u0117\1\0\1\u0117\5\0\1\u0117\1\0\1\u0117\2\0"+ - "\1\261\1\u0117\5\0\1\u0117\11\0\1\u0117\11\0\1\u0117"+ - "\1\0\3\u0117\1\0\2\u0117\14\0\1\u0118\2\0\2\u0118"+ - "\5\0\1\262\11\0\1\262\21\0\1\263\11\0\1\263"+ - "\11\0\1\u0118\1\0\3\u0118\1\0\2\u0118\14\0\1\u0118"+ - "\2\0\2\u0118\65\0\1\u0118\1\0\3\u0118\1\0\2\u0118"+ - "\14\0\16\11\1\0\1\111\1\0\6\11\3\0\14\11"+ - "\1\u0179\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\15\11\1\0\1\11\1\u017a\3\11\1\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\2\11\1\u0177"+ + "\13\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\2\11\1\u0178\12\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\1\u0179\1\0"+ + "\4\u0179\4\0\1\u0179\2\0\1\u0179\4\0\1\u0179\1\0"+ + "\1\u0179\5\0\1\u0179\1\0\1\u0179\3\0\1\u0179\5\0"+ + "\1\u0179\11\0\1\u0179\11\0\1\u0179\1\0\3\u0179\1\0"+ + "\2\u0179\14\0\1\u017a\1\0\4\u017a\4\0\1\u017a\2\0"+ + "\1\u017a\4\0\1\u017a\1\0\1\u017a\5\0\1\u017a\1\0"+ + "\1\u017a\3\0\1\u017a\5\0\1\u017a\11\0\1\u017a\11\0"+ + "\1\u017a\1\0\3\u017a\1\0\2\u017a\14\0\1\u0118\1\0"+ + "\4\u0118\1\0\1\262\2\0\1\u0118\2\0\1\u0118\4\0"+ + "\1\u0118\1\0\1\u0118\5\0\1\u0118\1\0\1\u0118\2\0"+ + "\1\262\1\u0118\5\0\1\u0118\11\0\1\u0118\11\0\1\u0118"+ + "\1\0\3\u0118\1\0\2\u0118\14\0\1\u0119\2\0\2\u0119"+ + "\5\0\1\263\11\0\1\263\21\0\1\264\11\0\1\264"+ + "\11\0\1\u0119\1\0\3\u0119\1\0\2\u0119\14\0\1\u0119"+ + "\2\0\2\u0119\65\0\1\u0119\1\0\3\u0119\1\0\2\u0119"+ + "\14\0\16\11\1\0\1\112\1\0\6\11\3\0\14\11"+ + "\1\u017b\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\15\11\1\0\1\11\1\u017c\3\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\1\u011c\1\11\4\u011c\1\11\1\105\2\11\1\u011c\1\107"+ - "\1\11\1\u011c\1\u0117\1\111\1\0\1\11\1\u011c\1\11"+ - "\1\u011c\1\11\1\112\3\0\1\u011c\1\112\1\u011c\1\113"+ - "\1\11\1\105\1\u011c\3\11\1\107\1\11\1\u011c\1\0"+ - "\5\11\1\0\1\11\1\113\1\u011c\4\0\2\11\1\0"+ - "\1\11\1\0\1\u011c\1\11\3\u011c\1\11\2\u011c\1\11"+ - "\13\0\11\11\1\u017b\4\11\1\0\1\111\1\0\6\11"+ - "\3\0\11\11\1\u017b\3\11\1\0\5\11\1\0\3\11"+ + "\1\u011d\1\11\4\u011d\1\11\1\106\2\11\1\u011d\1\110"+ + "\1\11\1\u011d\1\u0118\1\112\1\0\1\11\1\u011d\1\11"+ + "\1\u011d\1\11\1\113\3\0\1\u011d\1\113\1\u011d\1\114"+ + "\1\11\1\106\1\u011d\3\11\1\110\1\11\1\u011d\1\0"+ + "\5\11\1\0\1\11\1\114\1\u011d\4\0\2\11\1\0"+ + "\1\11\1\0\1\u011d\1\11\3\u011d\1\11\2\u011d\1\11"+ + "\13\0\11\11\1\u017d\4\11\1\0\1\112\1\0\6\11"+ + "\3\0\11\11\1\u017d\3\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\6\11\1\u017c\3\11"+ - "\1\u017c\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ + "\1\0\1\112\1\0\6\11\3\0\6\11\1\u017e\3\11"+ + "\1\u017e\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\5\11\1\u017c\3\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\6\11"+ - "\1\u017c\6\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\1\11\1\u017d\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\5\11\1\u017e\3\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\6\11"+ + "\1\u017e\6\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\15\11\1\0\1\11\1\u017f\3\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\6\11\1\u017e\7\11\1\0\1\111\1\0\6\11"+ + "\13\0\6\11\1\u0180\7\11\1\0\1\112\1\0\6\11"+ "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\11\11\1\u017f\3\11\1\0\5\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\11\11\1\u0181\3\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\2\11"+ - "\1\u0180\12\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\12\11\1\u0181\2\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\2\11"+ + "\1\u0182\12\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\12\11\1\u0183\2\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\7\11"+ - "\1\u0182\5\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\3\11\1\u0183\1\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\7\11"+ + "\1\u0184\5\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\15\11\1\0\3\11\1\u0185\1\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\6\11\1\u0184\7\11\1\0\1\111\1\0\6\11"+ + "\13\0\6\11\1\u0186\7\11\1\0\1\112\1\0\6\11"+ "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\6\11\1\u0185\7\11"+ - "\1\0\1\111\1\0\6\11\3\0\6\11\1\u0186\6\11"+ + "\1\0\1\11\1\0\11\11\13\0\6\11\1\u0187\7\11"+ + "\1\0\1\112\1\0\6\11\3\0\6\11\1\u0188\6\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\14\11\1\u0187\1\0\5\11\1\0\3\11\4\0"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\14\11\1\u0189\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\1\11\1\u015d\13\11\1\0"+ + "\1\112\1\0\6\11\3\0\1\11\1\u015f\13\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\12\11\1\u0188\2\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\16\136\4\0"+ - "\5\136\2\0\2\136\1\u0189\13\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\2\136\1\u018a\13\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\4\136\1\u018b\11\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\1\136\1\u018c\14\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\7\136\1\u018d\6\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\3\136\1\u018e\12\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\3\136\1\u018f\12\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\14\136\1\u0190\1\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\3\136\1\u0191\12\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\7\136\1\u0192\6\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\10\136\1\u0193\5\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\10\136\1\u0194\5\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\16\136\1\0\3\136\1\u0195\5\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\3\136\1\u0196\12\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\2\136\1\u0197\13\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\2\136\1\u0198\13\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\11\136\1\u0199\4\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\16\136\1\u019a\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\16\136\4\0\5\136\2\0"+ - "\13\136\1\u019b\2\136\1\0\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\10\136\1\u019c\5\136\4\0"+ - "\5\136\2\0\16\136\1\0\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\16\136\4\0\5\136\2\0"+ - "\16\136\1\0\1\u019d\10\136\3\0\3\136\1\0\1\136"+ - "\1\0\11\136\13\0\16\u0142\1\0\1\u0143\1\0\6\u0142"+ - "\1\333\1\332\1\0\15\u0142\1\0\5\u0142\1\0\3\u0142"+ - "\4\0\2\u0142\1\0\1\u0142\1\0\11\u0142\33\0\1\u0142"+ - "\75\0\16\u0144\1\0\1\u0145\1\0\6\u0144\1\334\1\335"+ - "\1\0\15\u0144\1\0\5\u0144\1\0\3\u0144\4\0\2\u0144"+ - "\1\0\1\u0144\1\0\11\u0144\33\0\1\u0144\75\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\3\11\1\u019e\11\11"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\12\11\1\u018a\2\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\137\4\0"+ + "\5\137\2\0\2\137\1\u018b\13\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\2\137\1\u018c\13\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\4\137\1\u018d\11\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\1\137\1\u018e\14\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\7\137\1\u018f\6\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\3\137\1\u0190\12\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\3\137\1\u0191\12\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\14\137\1\u0192\1\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\3\137\1\u0193\12\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\7\137\1\u0194\6\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\10\137\1\u0195\5\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\10\137\1\u0196\5\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\16\137\1\0\3\137\1\u0197\5\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\3\137\1\u0198\12\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\2\137\1\u0199\13\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\2\137\1\u019a\13\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\11\137\1\u019b\4\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\16\137\1\u019c\11\137\3\0\3\137\1\0"+ + "\1\137\1\0\11\137\13\0\16\137\4\0\5\137\2\0"+ + "\13\137\1\u019d\2\137\1\0\11\137\3\0\3\137\1\0"+ + "\1\137\1\0\11\137\13\0\10\137\1\u019e\5\137\4\0"+ + "\5\137\2\0\16\137\1\0\11\137\3\0\3\137\1\0"+ + "\1\137\1\0\11\137\13\0\16\137\4\0\5\137\2\0"+ + "\16\137\1\0\1\u019f\10\137\3\0\3\137\1\0\1\137"+ + "\1\0\11\137\13\0\16\u0143\1\0\1\u0144\1\0\6\u0143"+ + "\1\334\1\333\1\0\15\u0143\1\0\5\u0143\1\0\3\u0143"+ + "\4\0\2\u0143\1\0\1\u0143\1\0\11\u0143\33\0\1\u0143"+ + "\75\0\16\u0145\1\0\1\u0146\1\0\6\u0145\1\335\1\336"+ + "\1\0\15\u0145\1\0\5\u0145\1\0\3\u0145\4\0\2\u0145"+ + "\1\0\1\u0145\1\0\11\u0145\33\0\1\u0145\75\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\3\11\1\u01a0\11\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\1\11\1\u019f\13\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\1\11\1\u01a1\13\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\6\11"+ - "\1\u01a0\7\11\1\0\1\111\1\0\6\11\3\0\15\11"+ + "\1\u01a2\7\11\1\0\1\112\1\0\6\11\3\0\15\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\12\11\1\u01a1\2\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\12\11\1\u01a3\2\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\15\11\1\0\3\11"+ - "\1\u01a2\1\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\6\11\1\u01a3\7\11\1\0\1\111"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\3\11"+ + "\1\u01a4\1\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\6\11\1\u01a5\7\11\1\0\1\112"+ "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\7\11\1\u01a4\5\11"+ + "\1\0\1\112\1\0\6\11\3\0\7\11\1\u01a6\5\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\6\11\1\u01a5\7\11\1\0\1\111"+ + "\1\0\11\11\13\0\6\11\1\u01a7\7\11\1\0\1\112"+ "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\15\11\1\0\2\11"+ - "\1\u01a6\2\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\12\11\1\u01a7\2\11\1\0\5\11\1\0\3\11"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\2\11"+ + "\1\u01a8\2\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\12\11\1\u01a9\2\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\10\11"+ - "\1\u016e\1\11\1\u01a8\3\11\1\0\1\111\1\0\6\11"+ - "\3\0\1\11\1\u016f\12\11\1\u01a9\1\0\5\11\1\0"+ + "\1\u0170\1\11\1\u01aa\3\11\1\0\1\112\1\0\6\11"+ + "\3\0\1\11\1\u0171\12\11\1\u01ab\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\10\11\1\u01aa\1\11\1\u01a8\3\11\1\0\1\111\1\0"+ - "\6\11\3\0\1\11\1\u016f\12\11\1\u01a9\1\0\5\11"+ + "\10\11\1\u01ac\1\11\1\u01aa\3\11\1\0\1\112\1\0"+ + "\6\11\3\0\1\11\1\u0171\12\11\1\u01ab\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\3\11"+ - "\1\u01ab\11\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\6\11\1\u01ac\7\11"+ - "\1\0\1\111\1\0\6\11\3\0\15\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\3\11"+ + "\1\u01ad\11\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\6\11\1\u01ae\7\11"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\10\11\1\u01ad\5\11\1\0\1\111\1\0\6\11"+ + "\13\0\10\11\1\u01af\5\11\1\0\1\112\1\0\6\11"+ "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\1\u01ae\14\11\1\0\5\11\1\0"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\1\u01b0\14\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\10\11\1\u01af\5\11\1\0\1\111\1\0\6\11\3\0"+ - "\1\11\1\u016f\13\11\1\0\5\11\1\0\3\11\4\0"+ + "\10\11\1\u01b1\5\11\1\0\1\112\1\0\6\11\3\0"+ + "\1\11\1\u0171\13\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\6\11\1\u01b0\6\11\1\0"+ + "\1\112\1\0\6\11\3\0\6\11\1\u01b2\6\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\15\11\1\0\1\u01b1\4\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\1\u01b2\4\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\15\11\1\0\1\u01b3\4\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\15\11\1\0\1\u01b4\4\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\6\11\1\u01b3"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\6\11\1\u01b5"+ "\6\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\2\11\1\u01b4\12\11\1\0\5\11\1\0"+ + "\1\11\1\0\11\11\13\0\10\11\1\u01b6\5\11\1\0"+ + "\1\112\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\6\11\1\u01b5"+ - "\6\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\4\11\1\u01b6\10\11\1\0\5\11\1\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\2\11\1\u01b7"+ + "\12\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\6\11\1\u01b8\6\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\6\11\1\u01b7\7\11\1\0\1\111\1\0\6\11\3\0"+ - "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\10\11\1\u01b8\5\11\1\0"+ - "\1\111\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\4\11\1\u01b9"+ + "\10\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\6\11\1\u01ba\7\11\1\0"+ + "\1\112\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\7\11\1\u01b9"+ - "\5\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\12\11\1\u01ba\2\11\1\0\5\11\1\0"+ + "\10\11\1\u01bb\5\11\1\0\1\112\1\0\6\11\3\0"+ + "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\7\11\1\u01bc\5\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\6\11\1\u01bb\7\11\1\0\1\111\1\0\6\11\1\u01bc"+ - "\2\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ - "\4\0\1\u017a\1\11\1\0\1\11\1\0\11\11\13\0"+ - "\10\11\1\u01bd\1\11\1\u01be\3\11\1\0\1\111\1\0"+ - "\6\11\3\0\1\11\1\u01bf\12\11\1\u01c0\1\0\5\11"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\12\11\1\u01bd"+ + "\2\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\6\11\1\u01be\7\11\1\0"+ + "\1\112\1\0\6\11\1\u01bf\2\0\15\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\10\11\1\u01c1\5\11\1\0\1\111\1\0\6\11"+ - "\3\0\2\11\1\u01c2\12\11\1\0\5\11\1\0\3\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\15\11"+ + "\1\0\5\11\1\0\3\11\4\0\1\u017c\1\11\1\0"+ + "\1\11\1\0\11\11\13\0\10\11\1\u01c0\1\11\1\u01c1"+ + "\3\11\1\0\1\112\1\0\6\11\3\0\1\11\1\u01c2"+ + "\12\11\1\u01c3\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\10\11\1\u01c4\5\11"+ + "\1\0\1\112\1\0\6\11\3\0\2\11\1\u01c5\12\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\4\11\1\u01c6\10\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\4\11\1\u01c3\10\11"+ + "\1\0\1\112\1\0\6\11\3\0\7\11\1\u01c7\5\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\7\11\1\u01c4\5\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\10\11"+ - "\1\u01bd\5\11\1\0\1\111\1\0\6\11\3\0\1\11"+ - "\1\u01bf\13\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\3\11\1\u01c5\11\11\1\0\5\11"+ + "\1\0\11\11\13\0\10\11\1\u01c0\5\11\1\0\1\112"+ + "\1\0\6\11\3\0\1\11\1\u01c2\13\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\15\11"+ - "\1\0\4\11\1\u01c6\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\11\11\1\u01c7\3\11\1\0\5\11\1\0"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\3\11"+ + "\1\u01c8\11\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\15\11\1\0\4\11\1\u01c9\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\13\11\1\u01c8"+ - "\1\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\2\11\1\u01c9\12\11\1\0\5\11\1\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\11\11\1\u01ca"+ + "\3\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\13\11\1\u01cb\1\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\1\11\1\u01ca"+ - "\13\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\7\11\1\u01cb\5\11\1\0\5\11\1\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\2\11\1\u01cc"+ + "\12\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\1\11\1\u01cd\13\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\1\u01cc\2\0\15\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\7\11\1\u01cd\5\11\1\0\5\11\1\0\3\11"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\7\11\1\u01ce"+ + "\5\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\1\u01cf\2\0\15\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\1\11\1\u01ce\13\11"+ + "\1\0\1\112\1\0\6\11\3\0\7\11\1\u01d0\5\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\12\11\1\u01cf\2\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\1\u01d0"+ - "\1\0\4\u01d0\4\0\1\u01d0\2\0\1\u01d0\4\0\1\u01d0"+ - "\1\0\1\u01d0\5\0\1\u01d0\1\0\1\u01d0\3\0\1\u01d0"+ - "\5\0\1\u01d0\11\0\1\u01d0\11\0\1\u01d0\1\0\3\u01d0"+ - "\1\0\2\u01d0\14\0\1\u01d1\1\0\4\u01d1\4\0\1\u01d1"+ - "\2\0\1\u01d1\4\0\1\u01d1\1\0\1\u01d1\5\0\1\u01d1"+ - "\1\0\1\u01d1\3\0\1\u01d1\5\0\1\u01d1\11\0\1\u01d1"+ - "\11\0\1\u01d1\1\0\3\u01d1\1\0\2\u01d1\14\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\6\11\1\u015d\6\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\1\11\1\u01d1\13\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\12\11\1\u01d2\2\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\10\11\1\u01d2\5\11\1\0\1\111"+ - "\1\0\2\11\1\u01d2\3\11\3\0\15\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\15\11"+ - "\1\0\5\11\1\0\3\11\4\0\1\11\1\u01d3\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\2\11\1\u01d4\12\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\2\11\1\u01d5\13\11\1\0\1\111\1\0\6\11\3\0"+ - "\1\u01d6\2\11\1\u01d7\7\11\1\u01d8\1\11\1\0\4\11"+ - "\1\u01d9\1\0\3\11\4\0\1\u01da\1\11\1\0\1\11"+ - "\1\0\5\11\1\u01db\3\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\6\11\1\u01dc\6\11\1\0\5\11"+ + "\1\0\11\11\13\0\1\u01d3\1\0\4\u01d3\4\0\1\u01d3"+ + "\2\0\1\u01d3\4\0\1\u01d3\1\0\1\u01d3\5\0\1\u01d3"+ + "\1\0\1\u01d3\3\0\1\u01d3\5\0\1\u01d3\11\0\1\u01d3"+ + "\11\0\1\u01d3\1\0\3\u01d3\1\0\2\u01d3\14\0\1\u01d4"+ + "\1\0\4\u01d4\4\0\1\u01d4\2\0\1\u01d4\4\0\1\u01d4"+ + "\1\0\1\u01d4\5\0\1\u01d4\1\0\1\u01d4\3\0\1\u01d4"+ + "\5\0\1\u01d4\11\0\1\u01d4\11\0\1\u01d4\1\0\3\u01d4"+ + "\1\0\2\u01d4\14\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\6\11\1\u015f\6\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\10\11"+ + "\1\u01d5\5\11\1\0\1\112\1\0\2\11\1\u01d5\3\11"+ + "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ + "\4\0\1\11\1\u01d6\1\0\1\11\1\0\11\11\13\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\2\11\1\u01d7"+ + "\12\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\2\11\1\u01d8\13\11\1\0"+ + "\1\112\1\0\6\11\3\0\1\u01d9\2\11\1\u01da\7\11"+ + "\1\u01db\1\11\1\0\4\11\1\u01dc\1\0\3\11\4\0"+ + "\1\u01dd\1\11\1\0\1\11\1\0\5\11\1\u01de\3\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\6\11"+ + "\1\u01df\6\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\11\11\1\u01e0\3\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\11\11"+ - "\1\u01dd\3\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\13\11\1\u01de\1\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\13\11"+ + "\1\u01e1\1\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\12\11\1\u01e2\3\11"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\12\11\1\u01df\3\11\1\0\1\111\1\0\6\11"+ - "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\6\11\1\u01e0\6\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\6\11"+ + "\1\u01e3\6\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\2\11\1\u01e4\13\11"+ + "\1\0\1\112\1\0\6\11\3\0\1\u01e5\2\11\1\u01e6"+ + "\7\11\1\u01db\1\11\1\0\4\11\1\u01dc\1\0\3\11"+ + "\4\0\1\u01dd\1\11\1\0\1\11\1\0\5\11\1\u01de"+ + "\3\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\2\11\1\u01e7\12\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\14\11\1\u01e8\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\2\11\1\u01e1\13\11\1\0\1\111\1\0\6\11"+ - "\3\0\1\u01e2\2\11\1\u01e3\7\11\1\u01d8\1\11\1\0"+ - "\4\11\1\u01d9\1\0\3\11\4\0\1\u01da\1\11\1\0"+ - "\1\11\1\0\5\11\1\u01db\3\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\2\11\1\u01e4\12\11\1\0"+ - "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\14\11\1\u01e5\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\15\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\u01e9\1\11"+ + "\1\0\11\11\13\0\6\11\1\u01ea\7\11\1\0\1\112"+ "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\u01e6\1\11\1\0\11\11\13\0\6\11"+ - "\1\u01e7\7\11\1\0\1\111\1\0\6\11\3\0\15\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\136\4\0\5\136\2\0\7\136"+ - "\1\u01e8\6\136\1\0\11\136\3\0\3\136\1\0\1\136"+ - "\1\0\11\136\13\0\16\136\4\0\5\136\2\0\15\136"+ - "\1\u01e9\1\0\11\136\3\0\3\136\1\0\1\136\1\0"+ - "\11\136\13\0\16\136\4\0\5\136\2\0\4\136\1\u01ea"+ - "\11\136\1\0\11\136\3\0\3\136\1\0\1\136\1\0"+ - "\11\136\13\0\16\136\4\0\5\136\2\0\16\136\1\0"+ - "\1\u01eb\10\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\2\136\1\u01ec\13\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\16\136\1\0\2\136"+ - "\1\u01ed\6\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\13\136\1\u01ee\2\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\12\136\1\u01ef\3\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\10\136\1\u01f0\5\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\4\136\1\u01f1\11\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\1\136\1\u01f2\14\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\7\136\1\u01f3\6\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\11\136\1\u01f4\4\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\14\136\1\u01f5\1\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\14\136\1\u01f6\1\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\12\136\1\u01f7\3\136\4\0\5\136\2\0\2\136"+ - "\1\u01f8\1\u01f9\1\u01fa\1\136\1\u01fb\2\136\1\u01fc\4\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\3\136\1\u01fd\12\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\4\136\1\u01fe\11\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\14\136\1\u01ff\1\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\6\11\1\u0200\7\11\1\0\1\111\1\0\6\11"+ - "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\13\11\1\u0201\1\11\1\0\5\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\137"+ + "\4\0\5\137\2\0\7\137\1\u01eb\6\137\1\0\11\137"+ + "\3\0\3\137\1\0\1\137\1\0\11\137\13\0\16\137"+ + "\4\0\5\137\2\0\15\137\1\u01ec\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\4\137\1\u01ed\11\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\16\137\1\0\1\u01ee\10\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\2\137\1\u01ef\13\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\16\137\1\0\2\137\1\u01f0\6\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\13\137\1\u01f1\2\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\12\137\1\u01f2\3\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\10\137\1\u01f3\5\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\4\137\1\u01f4\11\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\1\137\1\u01f5\14\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\7\137\1\u01f6\6\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\11\137\1\u01f7\4\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\14\137\1\u01f8\1\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\14\137\1\u01f9\1\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\12\137\1\u01fa\3\137"+ + "\4\0\5\137\2\0\2\137\1\u01fb\1\u01fc\1\u01fd\1\137"+ + "\1\u01fe\2\137\1\u01ff\4\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\3\137\1\u0200\12\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\4\137\1\u0201\11\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\14\137\1\u0202\1\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\6\11\1\u0203\7\11"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\12\11\1\u0202\3\11\1\0\1\111\1\0\6\11"+ - "\3\0\14\11\1\u0203\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\6\11\1\u0204"+ - "\7\11\1\0\1\111\1\0\6\11\1\u0205\2\0\7\11"+ - "\1\u0206\5\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\6\11\1\u0207\7\11"+ - "\1\0\1\111\1\0\6\11\3\0\15\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\13\11"+ + "\1\u0204\1\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\12\11\1\u0205\3\11"+ + "\1\0\1\112\1\0\6\11\3\0\14\11\1\u0206\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\6\11\1\u0207\7\11\1\0\1\112\1\0"+ + "\6\11\1\u0208\2\0\7\11\1\u0209\5\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\12\11"+ - "\1\u0208\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\2\11\1\u0209\12\11\1\0\5\11"+ + "\13\0\6\11\1\u020a\7\11\1\0\1\112\1\0\6\11"+ + "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\12\11\1\u020b\2\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\2\11\1\u020a\13\11\1\0\1\111\1\0\6\11"+ - "\3\0\1\u020b\2\11\1\u020c\7\11\1\u020d\1\11\1\0"+ - "\4\11\1\u020e\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\6\11\1\u020f\7\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\2\11\1\u0210\12\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\2\11"+ + "\1\u020c\12\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\2\11\1\u020d\13\11"+ + "\1\0\1\112\1\0\6\11\3\0\1\u020e\2\11\1\u020f"+ + "\7\11\1\u0210\1\11\1\0\4\11\1\u0211\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\6\11"+ + "\1\u0212\7\11\1\0\1\112\1\0\6\11\3\0\15\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\1\11\1\u0211\13\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\2\11\1\u0213\12\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\13\11\1\u0212\1\11"+ + "\1\0\1\112\1\0\6\11\3\0\1\11\1\u0214\13\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\11\11\1\u0213\3\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\13\11\1\u0215\1\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\6\11\1\u0214\6\11"+ + "\1\0\1\112\1\0\6\11\3\0\11\11\1\u0216\3\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\2\11\1\u0215\13\11\1\0\1\111"+ - "\1\0\6\11\3\0\1\u0216\2\11\1\u0217\7\11\1\u0218"+ - "\1\11\1\0\4\11\1\u0219\1\0\3\11\4\0\1\u021a"+ - "\1\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\1\u015d\14\11\1\0\5\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\6\11\1\u0217\6\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\2\11"+ + "\1\u0218\13\11\1\0\1\112\1\0\6\11\3\0\1\u0219"+ + "\2\11\1\u021a\7\11\1\u021b\1\11\1\0\4\11\1\u021c"+ + "\1\0\3\11\4\0\1\u021d\1\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\1\u021e\14\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\12\11\1\u021f\2\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\12\11"+ - "\1\u021b\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\11\11\1\u021c\3\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\11\11"+ + "\1\u0220\3\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\10\11\1\u017b\4\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\10\11"+ - "\1\u0179\4\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\7\11\1\u021d\5\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\7\11"+ + "\1\u0221\5\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\6\11\1\u0222\6\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\6\11"+ - "\1\355\6\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\14\11\1\u0214\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\12\11\1\u017a"+ - "\2\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\1\u021e\14\11\1\0\5\11\1\0\3\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\14\11"+ + "\1\u0217\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\1\u015f\14\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\12\11\1\u021f\2\11"+ + "\1\0\1\112\1\0\6\11\3\0\12\11\1\u017c\2\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\10\11\1\u0220\5\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\10\11\1\u0221\4\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\11\11\1\u0222\3\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\1\u0223\14\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\12\11\1\u0224\2\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\10\11\1\u0225\5\11\1\0\1\112\1\0"+ + "\6\11\3\0\15\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\10\11\1\u0226\4\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\11\11\1\u0227\3\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\13\11\1\u0228\1\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\6\11\1\u0229\1\u022a\3\11\1\u022b\1\11\1\0\4\11"+ + "\1\u022c\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\25\0\1\u022d\62\0\1\u022e\20\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\11\11\1\u022f\3\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\1\11\1\u0230\13\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\13\11\1\u0231\1\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\13\11\1\u0232\1\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\11\11\1\u0233\3\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\7\11\1\u0234\5\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\1\u0235\14\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\7\11"+ + "\1\u0236\5\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\10\11\1\u0237\5\11"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\6\11\1\u0238\7\11\1\0\1\112\1\0\6\11"+ + "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\12\11\1\u0239\2\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\11\11"+ + "\1\u023a\3\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\7\11\1\u023b\5\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\6\11"+ + "\1\u023c\6\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\10\11\1\u023d\5\11"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\110\0\1\u023e\3\0\1\u023f\14\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\15\11\1\0\1\11\1\u0240\3\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\6\11"+ + "\1\u0241\6\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\10\11\1\u0242\5\11"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\1\u0243\1\0\4\u0243\4\0\1\u0243\2\0\1\u0243"+ + "\4\0\1\u0243\1\0\1\u0243\5\0\1\u0243\1\0\1\u0243"+ + "\3\0\1\u0243\5\0\1\u0243\11\0\1\u0243\11\0\1\u0243"+ + "\1\0\3\u0243\1\0\2\u0243\14\0\1\u0244\1\0\4\u0244"+ + "\4\0\1\u0244\2\0\1\u0244\4\0\1\u0244\1\0\1\u0244"+ + "\5\0\1\u0244\1\0\1\u0244\3\0\1\u0244\5\0\1\u0244"+ + "\11\0\1\u0244\11\0\1\u0244\1\0\3\u0244\1\0\2\u0244"+ + "\14\0\13\11\1\u0245\2\11\1\0\1\112\1\0\6\11"+ + "\3\0\12\11\1\u0245\2\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\13\11\1\u0223\1\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\6\11\1\u0224\1\u0225\3\11\1\u0226\1\11\1\0"+ - "\4\11\1\u0227\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\25\0\1\u0228\62\0\1\u0229\20\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\11\11\1\u022a\3\11"+ + "\1\0\1\112\1\0\6\11\3\0\1\11\1\u0246\13\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\1\11\1\u022b\13\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\13\11\1\u022c\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\13\11\1\u0247\1\11\1\0\2\11\1\u0248\2\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\15\11"+ + "\1\0\1\u0249\4\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\15\11\1\0\1\u024a\4\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\2\11"+ + "\1\u024b\13\11\1\0\1\112\1\0\6\11\3\0\15\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\13\11\1\u022d\1\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\10\11\1\u024c\5\11\1\0\1\112"+ + "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\11\11\1\u022e\3\11"+ + "\1\0\1\112\1\0\6\11\3\0\13\11\1\u024d\1\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\7\11\1\u022f\5\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\4\11\1\u024e\10\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\1\u0230\14\11\1\0"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\u024f\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\1\u0250"+ + "\11\11\1\u0251\2\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\6\11\1\u0252"+ + "\7\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\7\11\1\u0231\5\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\10\11\1\u0232"+ - "\5\11\1\0\1\111\1\0\6\11\3\0\15\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\2\11\1\u0253\12\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\6\11\1\u0254"+ + "\7\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\6\11\1\u0233\7\11\1\0\1\111\1\0"+ - "\6\11\3\0\15\11\1\0\5\11\1\0\3\11\4\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\13\11\1\u0255\1\11\1\0\2\11\1\u0256\2\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ + "\1\u0257\4\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\15\11\1\0\1\u0258\4\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\12\11\1\u0234\2\11\1\0"+ + "\1\112\1\0\6\11\3\0\7\11\1\u0259\5\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\11\11\1\u0235\3\11\1\0\5\11\1\0\3\11\4\0"+ + "\11\11\13\0\6\11\1\u025a\7\11\1\0\1\112\1\0"+ + "\6\11\3\0\15\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\1\u025b\115\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\12\11\1\u025c"+ + "\2\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\137\4\0\5\137\2\0"+ + "\11\137\1\u025d\4\137\1\0\11\137\3\0\3\137\1\0"+ + "\1\137\1\0\11\137\13\0\16\137\4\0\5\137\2\0"+ + "\3\137\1\u025e\12\137\1\0\11\137\3\0\3\137\1\0"+ + "\1\137\1\0\11\137\13\0\16\137\4\0\5\137\2\0"+ + "\4\137\1\u025f\11\137\1\0\11\137\3\0\3\137\1\0"+ + "\1\137\1\0\11\137\13\0\6\137\1\u0260\7\137\4\0"+ + "\5\137\2\0\16\137\1\0\11\137\3\0\3\137\1\0"+ + "\1\137\1\0\11\137\13\0\16\137\4\0\5\137\2\0"+ + "\3\137\1\u0261\12\137\1\0\11\137\3\0\3\137\1\0"+ + "\1\137\1\0\11\137\13\0\16\137\4\0\5\137\2\0"+ + "\12\137\1\u0262\3\137\1\0\11\137\3\0\3\137\1\0"+ + "\1\137\1\0\11\137\13\0\16\137\4\0\5\137\2\0"+ + "\7\137\1\u0263\6\137\1\0\11\137\3\0\3\137\1\0"+ + "\1\137\1\0\11\137\13\0\16\137\4\0\5\137\2\0"+ + "\7\137\1\u0264\6\137\1\0\11\137\3\0\3\137\1\0"+ + "\1\137\1\0\11\137\13\0\16\137\4\0\5\137\2\0"+ + "\15\137\1\u0265\1\0\11\137\3\0\3\137\1\0\1\137"+ + "\1\0\11\137\13\0\16\137\4\0\5\137\2\0\16\137"+ + "\1\0\1\137\1\u0266\7\137\3\0\3\137\1\0\1\137"+ + "\1\0\11\137\13\0\16\137\4\0\5\137\2\0\16\137"+ + "\1\0\1\137\1\u0267\7\137\3\0\3\137\1\0\1\137"+ + "\1\0\11\137\13\0\10\137\1\u0268\5\137\4\0\5\137"+ + "\2\0\16\137\1\0\11\137\3\0\3\137\1\0\1\137"+ + "\1\0\11\137\13\0\16\137\4\0\5\137\2\0\14\137"+ + "\1\u0269\1\137\1\0\11\137\3\0\3\137\1\0\1\137"+ + "\1\0\11\137\13\0\16\137\4\0\5\137\2\0\10\137"+ + "\1\u026a\1\137\1\u026b\3\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\5\137\1\u026c\1\u026d\7\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\3\137\1\u026e\12\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\7\137\1\u026f\6\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\10\137\1\u0270\5\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\13\137\1\u0271\2\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\15\137\1\u0272\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\1\u0273\14\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\11\11\1\u0274"+ + "\3\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\1\11\1\u0275\13\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\13\11\1\u0276"+ + "\1\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\1\u0277\2\11\1\u0278\4\11\1\u0279\4\11"+ + "\1\0\4\11\1\u027a\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\63\0\1\u027b\21\0\1\u027c\2\0"+ + "\1\u027d\20\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\4\11\1\u027e\10\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\7\11\1\u0236\5\11\1\0"+ - "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\6\11\1\u0237\6\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\10\11\1\u0238"+ - "\5\11\1\0\1\111\1\0\6\11\3\0\15\11\1\0"+ - "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\110\0\1\u0239\3\0\1\u023a\14\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\15\11\1\0\1\11\1\u023b"+ - "\3\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\6\11\1\u023c\6\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\10\11\1\u023d"+ - "\5\11\1\0\1\111\1\0\6\11\3\0\15\11\1\0"+ - "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\1\u023e\1\0\4\u023e\4\0\1\u023e\2\0"+ - "\1\u023e\4\0\1\u023e\1\0\1\u023e\5\0\1\u023e\1\0"+ - "\1\u023e\3\0\1\u023e\5\0\1\u023e\11\0\1\u023e\11\0"+ - "\1\u023e\1\0\3\u023e\1\0\2\u023e\14\0\1\u023f\1\0"+ - "\4\u023f\4\0\1\u023f\2\0\1\u023f\4\0\1\u023f\1\0"+ - "\1\u023f\5\0\1\u023f\1\0\1\u023f\3\0\1\u023f\5\0"+ - "\1\u023f\11\0\1\u023f\11\0\1\u023f\1\0\3\u023f\1\0"+ - "\2\u023f\14\0\13\11\1\u0240\2\11\1\0\1\111\1\0"+ - "\6\11\3\0\12\11\1\u0240\2\11\1\0\5\11\1\0"+ + "\1\112\1\0\6\11\3\0\1\u027f\14\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\13\11"+ + "\1\u0280\1\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\1\u0281\14\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\1\11\1\u0241"+ - "\13\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\13\11\1\u0242\1\11\1\0\2\11\1\u0243"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\13\11\1\u0282"+ + "\1\11\1\0\2\11\1\u0283\2\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\15\11\1\0\1\u0284\4\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\15\11"+ + "\1\0\1\u0285\4\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\2\11\1\u0286\13\11\1\0"+ + "\1\112\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ + "\10\11\1\u0287\5\11\1\0\1\112\1\0\6\11\3\0"+ + "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\1\11\1\u0288\13\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\12\11\1\u0289"+ + "\2\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\13\11\1\u028a\1\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\4\11\1\u028b"+ + "\10\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\12\11\1\u028c\2\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ + "\6\11\1\u028d\7\11\1\0\1\112\1\0\6\11\3\0"+ + "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\13\11\1\u028e\1\11\1\0\2\11\1\u028f"+ "\2\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\15\11\1\0\1\u0244\4\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\1\u0245\4\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\15\11\1\0\1\u0290\4\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\15\11\1\0\1\u0291\4\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\2\11\1\u0246\13\11\1\0\1\111\1\0\6\11\3\0"+ + "\2\11\1\u0292\13\11\1\0\1\112\1\0\6\11\3\0"+ "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\10\11\1\u0247\5\11\1\0"+ - "\1\111\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ + "\1\11\1\0\11\11\13\0\10\11\1\u0293\5\11\1\0"+ + "\1\112\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\13\11\1\u0248"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\13\11\1\u0294"+ "\1\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\4\11\1\u0249\10\11\1\0\5\11\1\0"+ + "\1\11\1\0\11\11\13\0\6\11\1\u0295\7\11\1\0"+ + "\1\112\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\15\11\1\0"+ - "\5\11\1\0\3\11\4\0\2\11\1\u024a\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\1\u024b\11\11\1\u024c\2\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\6\11"+ - "\1\u024d\7\11\1\0\1\111\1\0\6\11\3\0\15\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\2\11\1\u024e\12\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\6\11"+ - "\1\u024f\7\11\1\0\1\111\1\0\6\11\3\0\15\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\13\11\1\u0250\1\11\1\0\2\11\1\u0251\2\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\15\11"+ - "\1\0\1\u0252\4\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\15\11\1\0\1\u0253\4\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\7\11\1\u0254\5\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\6\11\1\u0255\7\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\1\u0256"+ - "\115\0\16\11\1\0\1\111\1\0\6\11\3\0\12\11"+ - "\1\u0257\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\136\4\0\5\136"+ - "\2\0\11\136\1\u0258\4\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\3\136\1\u0259\12\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\4\136\1\u025a\11\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\6\136\1\u025b\7\136"+ - "\4\0\5\136\2\0\16\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\3\136\1\u025c\12\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\12\136\1\u025d\3\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\7\136\1\u025e\6\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\7\136\1\u025f\6\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\15\136\1\u0260\1\0\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\16\136\4\0\5\136\2\0"+ - "\16\136\1\0\1\136\1\u0261\7\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\16\136\4\0\5\136\2\0"+ - "\16\136\1\0\1\136\1\u0262\7\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\10\136\1\u0263\5\136\4\0"+ - "\5\136\2\0\16\136\1\0\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\16\136\4\0\5\136\2\0"+ - "\14\136\1\u0264\1\136\1\0\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\16\136\4\0\5\136\2\0"+ - "\10\136\1\u0265\1\136\1\u0266\3\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\5\136\1\u0267\1\u0268\7\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\3\136\1\u0269\12\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\7\136\1\u026a\6\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\10\136\1\u026b\5\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\13\136\1\u026c\2\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\15\136\1\u026d\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\1\u026e\14\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\11\11"+ - "\1\u026f\3\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\1\11\1\u0270\13\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\13\11"+ - "\1\u0271\1\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\1\u0272\2\11\1\u0273\11\11\1\0"+ - "\4\11\1\u0274\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\63\0\1\u0275\21\0\1\u0276\2\0\1\u0277"+ - "\20\0\16\11\1\0\1\111\1\0\6\11\3\0\4\11"+ - "\1\u0278\10\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\1\u0279\14\11\1\0\5\11\1\0"+ + "\12\11\1\u0296\3\11\1\0\1\112\1\0\6\11\3\0"+ + "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\12\11\1\u0297\2\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\13\11\1\u027a"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\13\11\1\u0298"+ "\1\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\1\u027b\14\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\13\11\1\u027c\1\11"+ - "\1\0\2\11\1\u027d\2\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\1\u027e\4\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\12\11\1\u015c\2\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\15\11\1\0"+ - "\1\u027f\4\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\2\11\1\u0280\13\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\10\11"+ - "\1\u0281\5\11\1\0\1\111\1\0\6\11\3\0\15\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\1\11\1\u0282\13\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\12\11\1\u0283\2\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\13\11\1\u0284\1\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\4\11\1\u0285\10\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\12\11\1\u0286\2\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\6\11"+ - "\1\u0287\7\11\1\0\1\111\1\0\6\11\3\0\15\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\13\11\1\u0288\1\11\1\0\2\11\1\u0289\2\11"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\12\11\1\u0299"+ + "\2\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\6\11\1\u029a\6\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\11\11\1\u029b"+ + "\3\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\6\11\1\u017b\6\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ + "\6\11\1\u029c\7\11\1\0\1\112\1\0\6\11\3\0"+ + "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\7\11\1\u029d\5\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\u029e\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\6\11\1\u029f\6\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\2\11\1\u02a0"+ + "\13\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\10\11\1\u02a1\5\11\1\0\1\112\1\0"+ + "\6\11\3\0\15\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\54\0\1\u02a2\152\0"+ + "\1\u02a3\17\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\12\11\1\u02a4\2\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\13\11\1\u02a5\1\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\11\11\1\u02a6\3\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\4\11\1\u02a7\10\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\3\11\1\u02a8\11\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\7\11\1\u02a9\5\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\15\11\1\0\1\u02aa\4\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\13\11\1\u02ab\1\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\15\11"+ - "\1\0\1\u028a\4\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\15\11\1\0\1\u028b\4\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\2\11"+ - "\1\u028c\13\11\1\0\1\111\1\0\6\11\3\0\15\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\10\11\1\u028d\5\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\13\11\1\u028e\1\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\12\11\1\u028f\3\11\1\0\1\111"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\6\11"+ + "\1\u02ac\6\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\12\11\1\u0290\2\11"+ + "\4\0\1\u02ad\1\11\1\0\1\11\1\0\11\11\13\0"+ + "\16\11\1\0\1\112\1\0\6\11\1\u02ae\2\0\15\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\13\11\1\u0291\1\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\15\11\1\0\1\11\1\u028c\3\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\12\11\1\u0292\2\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\6\11\1\u0293\6\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\11\11\1\u0294\3\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\6\11\1\u0179\6\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\6\11"+ - "\1\u0295\7\11\1\0\1\111\1\0\6\11\3\0\15\11"+ + "\1\0\1\112\1\0\6\11\3\0\6\11\1\u02af\6\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\7\11\1\u0296\5\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\6\11\1\u02b0\7\11\1\0\1\112"+ + "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\15\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\u0297\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\6\11"+ - "\1\u0298\6\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\2\11\1\u0299\13\11"+ - "\1\0\1\111\1\0\6\11\3\0\15\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\10\11\1\u029a\5\11\1\0\1\111\1\0\6\11"+ - "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\54\0\1\u029b\152\0\1\u029c"+ - "\17\0\16\11\1\0\1\111\1\0\6\11\3\0\12\11"+ - "\1\u029d\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\13\11\1\u029e\1\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\11\11"+ - "\1\u029f\3\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\4\11\1\u02a0\10\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\3\11"+ - "\1\u02a1\11\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\7\11\1\u02a2\5\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\15\11"+ - "\1\0\1\u02a3\4\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\13\11\1\u02a4\1\11\1\0\5\11\1\0"+ + "\1\0\1\112\1\0\6\11\3\0\1\u02b1\14\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\111\0\1\u02b2\113\0\1\u02b3\21\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\3\11\1\u015f\11\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\u02b4"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\1\11\1\u017c\13\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\6\11\1\u02a5"+ - "\6\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ + "\1\u02b5\1\0\4\u02b5\4\0\1\u02b5\2\0\1\u02b5\4\0"+ + "\1\u02b5\1\0\1\u02b5\5\0\1\u02b5\1\0\1\u02b5\3\0"+ + "\1\u02b5\5\0\1\u02b5\11\0\1\u02b5\11\0\1\u02b5\1\0"+ + "\3\u02b5\1\0\2\u02b5\14\0\14\11\1\302\1\11\1\0"+ + "\1\112\1\0\6\11\3\0\15\11\1\0\2\11\1\302"+ + "\2\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\6\11\1\u02b6\7\11\1\0\1\112\1\0"+ "\6\11\3\0\15\11\1\0\5\11\1\0\3\11\4\0"+ - "\1\u02a6\1\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\1\u02a7\2\0\15\11\1\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\13\11\1\u02b7\1\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\15\11\1\0\1\11\1\u0286\3\11\1\0\3\11\4\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\12\11\1\u02b8\2\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\6\11\1\u02a8\6\11\1\0"+ + "\1\112\1\0\6\11\3\0\2\11\1\u02b9\12\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\6\11\1\u02a9\7\11\1\0\1\111\1\0"+ - "\6\11\3\0\15\11\1\0\5\11\1\0\3\11\4\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\13\11\1\u02ba\1\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\1\u02aa\14\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\111\0\1\u02ab\113\0\1\u02ac\21\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\3\11\1\u015d\11\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\15\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\u02ad\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\1\11\1\u017a\13\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\1\u02ae"+ - "\1\0\4\u02ae\4\0\1\u02ae\2\0\1\u02ae\4\0\1\u02ae"+ - "\1\0\1\u02ae\5\0\1\u02ae\1\0\1\u02ae\3\0\1\u02ae"+ - "\5\0\1\u02ae\11\0\1\u02ae\11\0\1\u02ae\1\0\3\u02ae"+ - "\1\0\2\u02ae\14\0\14\11\1\301\1\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\2\11\1\301\2\11"+ + "\1\112\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\1\11\1\u02bb"+ + "\7\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\14\11\1\u02bc\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\1\11\1\u02bd\13\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\6\11\1\u02af\7\11\1\0\1\111\1\0\6\11"+ + "\13\0\10\11\1\u02be\5\11\1\0\1\112\1\0\6\11"+ "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\13\11\1\u02b0\1\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\12\11"+ - "\1\u02b1\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\2\11\1\u02b2\12\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\13\11"+ - "\1\u02b3\1\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ + "\1\0\1\11\1\0\11\11\13\0\1\u02bf\115\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\6\11\1\u02c0\6\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\10\11\1\u02c1\5\11\1\0\1\112"+ "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\1\11\1\u02b4\7\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\14\11"+ - "\1\u02b5\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\1\11\1\u02b6\13\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\10\11\1\u02b7\5\11\1\0\1\111\1\0\6\11\3\0"+ - "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\1\u02b8\115\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\6\11\1\u02b9\6\11\1\0"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\2\11"+ + "\1\u02c2\7\11\1\u01c1\3\11\1\0\1\112\1\0\6\11"+ + "\3\0\1\u02c3\1\u01c2\1\11\1\u02c4\10\11\1\u01c3\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\10\11\1\u02ba\5\11\1\0\1\111\1\0"+ - "\6\11\3\0\15\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\2\11\1\u02bb"+ - "\7\11\1\u01be\3\11\1\0\1\111\1\0\6\11\3\0"+ - "\1\u02bc\1\u01bf\1\11\1\u02bd\10\11\1\u01c0\1\0\5\11"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\1\u017c\14\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\10\11\1\u02c5\5\11"+ + "\1\0\1\112\1\0\6\11\3\0\1\u02c6\2\11\1\u02c7"+ + "\1\11\1\u02c8\5\11\1\u02c9\1\u02ca\1\0\5\11\1\0"+ + "\3\11\4\0\1\u02cb\1\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\13\11"+ + "\1\u02cc\1\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\12\11\1\u02cd\2\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\1\u017a"+ - "\14\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\10\11\1\u02be\5\11\1\0"+ - "\1\111\1\0\6\11\3\0\3\11\1\u02bf\1\11\1\u02c0"+ - "\5\11\1\u02c1\1\u02c2\1\0\5\11\1\0\3\11\4\0"+ - "\1\u02c3\1\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\13\11\1\u02c4\1\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\2\11"+ + "\1\u02ce\12\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\13\11\1\u02cf\1\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\7\11"+ + "\1\u02d0\5\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\11\11\1\u02d1\3\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\103\0\1\u02d2\25\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\13\11\1\u02d3\1\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\137"+ + "\4\0\5\137\2\0\7\137\1\u02d4\6\137\1\0\11\137"+ + "\3\0\3\137\1\0\1\137\1\0\11\137\13\0\16\137"+ + "\4\0\5\137\2\0\2\137\1\u02d5\13\137\1\0\11\137"+ + "\3\0\3\137\1\0\1\137\1\0\11\137\13\0\16\137"+ + "\4\0\5\137\2\0\15\137\1\u02d6\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\13\137\1\u02d7\2\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\14\137\1\u02d8\1\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\6\137\1\u02d9"+ + "\7\137\4\0\5\137\2\0\16\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\6\137\1\u02da"+ + "\7\137\4\0\5\137\2\0\16\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\5\137\1\u02db\10\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\5\137\1\u02dc\10\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\7\137\1\u02dd\6\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\1\137\1\u02de\14\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\10\137\1\u02df\5\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\12\137\1\u02e0\3\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\2\137\1\u02e1"+ + "\13\137\4\0\5\137\2\0\16\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\3\137\1\u02e2\12\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\1\137\1\u02e3\6\137\1\u02e4\5\137\1\0"+ + "\11\137\3\0\3\137\1\0\1\137\1\0\11\137\13\0"+ + "\16\137\4\0\5\137\2\0\13\137\1\u02e5\2\137\1\0"+ + "\11\137\3\0\3\137\1\0\1\137\1\0\11\137\13\0"+ + "\16\137\4\0\5\137\2\0\13\137\1\u02e6\2\137\1\0"+ + "\11\137\3\0\3\137\1\0\1\137\1\0\11\137\13\0"+ + "\16\137\4\0\5\137\2\0\7\137\1\u02e7\6\137\1\0"+ + "\11\137\3\0\3\137\1\0\1\137\1\0\11\137\13\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ + "\1\u02e8\4\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\15\11\1\0\1\11\1\u02e9\3\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\13\11\1\u02ea\1\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\12\11\1\u02c5\2\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\4\11\1\u02eb\10\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\2\11\1\u02c6\12\11"+ + "\1\0\1\112\1\0\6\11\3\0\1\11\1\u02ec\13\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\13\11\1\u02c7\1\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\12\11\1\u02ed\2\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\7\11\1\u02c8\5\11"+ + "\1\0\1\112\1\0\6\11\3\0\6\11\1\u02ee\6\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\11\11\1\u02c9\3\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\103\0\1\u02ca"+ - "\25\0\16\11\1\0\1\111\1\0\6\11\3\0\13\11"+ - "\1\u02cb\1\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\136\4\0\5\136"+ - "\2\0\7\136\1\u02cc\6\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\2\136\1\u02cd\13\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\15\136\1\u02ce\1\0\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\16\136\4\0\5\136\2\0"+ - "\13\136\1\u02cf\2\136\1\0\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\16\136\4\0\5\136\2\0"+ - "\14\136\1\u02d0\1\136\1\0\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\6\136\1\u02d1\7\136\4\0"+ - "\5\136\2\0\16\136\1\0\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\6\136\1\u02d2\7\136\4\0"+ - "\5\136\2\0\16\136\1\0\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\16\136\4\0\5\136\2\0"+ - "\5\136\1\u02d3\10\136\1\0\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\16\136\4\0\5\136\2\0"+ - "\5\136\1\u02d4\10\136\1\0\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\16\136\4\0\5\136\2\0"+ - "\7\136\1\u02d5\6\136\1\0\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\16\136\4\0\5\136\2\0"+ - "\1\136\1\u02d6\14\136\1\0\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\16\136\4\0\5\136\2\0"+ - "\10\136\1\u02d7\5\136\1\0\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\16\136\4\0\5\136\2\0"+ - "\12\136\1\u02d8\3\136\1\0\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\2\136\1\u02d9\13\136\4\0"+ - "\5\136\2\0\16\136\1\0\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\16\136\4\0\5\136\2\0"+ - "\3\136\1\u02da\12\136\1\0\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\16\136\4\0\5\136\2\0"+ - "\1\136\1\u02db\6\136\1\u02dc\5\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\13\136\1\u02dd\2\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\13\136\1\u02de\2\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\7\136\1\u02df\6\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\15\11\1\0\1\u02e0\4\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\15\11"+ - "\1\0\1\11\1\u02e1\3\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\13\11\1\u02e2\1\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\4\11"+ - "\1\u02e3\10\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\1\11\1\u02e4\13\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\12\11"+ - "\1\u02e5\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\10\11\1\u02e6\5\11"+ - "\1\0\1\111\1\0\6\11\3\0\15\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\23\0\1\u02e7\203\0\1\u02e8\17\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\1\u02e9\14\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\2\11\1\u02ea"+ - "\12\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\6\11\1\u02eb\7\11\1\0"+ - "\1\111\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\12\11\1\u015d"+ - "\2\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\13\11\1\u02ec\1\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\12\11\1\u02ed"+ - "\2\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\2\11\1\u02ee\12\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\13\11\1\u02ef"+ - "\1\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ + "\1\0\11\11\13\0\10\11\1\u02ef\5\11\1\0\1\112"+ + "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\23\0\1\u02f0"+ + "\203\0\1\u02f1\17\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\1\u02f2\14\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\2\11\1\u02f3\12\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\6\11\1\u02f4\7\11\1\0\1\112\1\0"+ "\6\11\3\0\15\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\1\11\1\u02f0\7\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\14\11\1\u02ed"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\6\11\1\u02f1\6\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\10\11"+ - "\1\u02f2\5\11\1\0\1\111\1\0\6\11\3\0\15\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\2\11\1\u0213\12\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\2\11"+ - "\1\u02f3\13\11\1\0\1\111\1\0\6\11\3\0\15\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\1\u02f4\2\0\15\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\3\11\1\u02f5\11\11\1\0"+ + "\1\112\1\0\6\11\3\0\12\11\1\u015f\2\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\13\11\1\u02f6\1\11\1\0\5\11\1\0\3\11\4\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\13\11\1\u02f5\1\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\12\11\1\u02f7\2\11\1\0"+ + "\1\112\1\0\6\11\3\0\12\11\1\u02f6\2\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\2\11\1\u02f8\12\11\1\0\5\11\1\0\3\11\4\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\2\11\1\u02f7\12\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\13\11\1\u02f9\1\11\1\0"+ + "\1\112\1\0\6\11\3\0\13\11\1\u02f8\1\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\1\11\1\u02fa\7\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\14\11\1\u02fb\1\0\5\11"+ + "\1\11\1\0\1\11\1\u02f9\7\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\14\11\1\u02f6\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\6\11"+ + "\1\u02fa\6\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\10\11\1\u02fb\5\11"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\1\11"+ - "\1\u02fc\13\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\5\11\1\u015d\7\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\2\11"+ + "\1\u0216\12\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\2\11\1\u02fc\13\11"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\1\u02fd\2\0"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\1\u02fd\2\0"+ "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\11\11\1\u02fe\3\11\1\0\5\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\3\11\1\u02fe\11\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\6\11\1\u02ff"+ - "\6\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\6\11\1\u0300\7\11\1\0"+ - "\1\111\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\13\11\1\u02ff"+ + "\1\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\12\11\1\u0300\2\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\12\11\1\u0301"+ - "\2\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\13\11\1\u0302\1\11\1\0\4\11\1\u0303"+ - "\1\0\3\11\4\0\1\u0304\1\11\1\0\1\11\1\0"+ - "\11\11\13\0\6\11\1\u0305\7\11\1\0\1\111\1\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\2\11\1\u0301"+ + "\12\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\13\11\1\u0302\1\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\1\11\1\u0303\7\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\14\11\1\u0304\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\1\11\1\u0305\13\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\5\11\1\u0306\7\11\1\0\1\11\1\u0307\3\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\5\11"+ + "\1\u015f\7\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\1\u0308\2\0\15\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\11\11\1\u0309"+ + "\3\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\6\11\1\u030a\6\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ + "\6\11\1\u030b\7\11\1\0\1\112\1\0\6\11\3\0"+ + "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\12\11\1\u030c\2\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\13\11\1\u030d"+ + "\1\11\1\0\4\11\1\u030e\1\0\3\11\4\0\1\u030f"+ + "\1\11\1\0\1\11\1\0\11\11\13\0\6\11\1\u0310"+ + "\7\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\1\u0311\14\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\3\11\1\u0312\11\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\15\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\1\11\1\u0313\7\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\14\11\1\u0314\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\60\0"+ + "\1\u0315\50\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\2\11\1\u022f\12\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\15\11\1\0\1\11\1\u02a4"+ + "\3\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\2\11\1\u0316\13\11\1\0\1\112\1\0"+ "\6\11\3\0\15\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\1\u0306\14\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\3\11"+ - "\1\u0307\11\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\1\11\1\u0308\7\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\14\11"+ - "\1\u0309\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\60\0\1\u030a\50\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\2\11\1\u022a\12\11\1\0"+ + "\1\112\1\0\6\11\3\0\12\11\1\u0317\2\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\15\11\1\0\1\11\1\u029d\3\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\2\11\1\u030b"+ - "\13\11\1\0\1\111\1\0\6\11\3\0\15\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\2\11\1\u0318\12\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\6\11\1\u0319"+ + "\7\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\12\11\1\u030c\2\11\1\0\5\11\1\0\3\11\4\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\7\11\1\u031a\5\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\2\11\1\u030d\12\11\1\0"+ + "\1\112\1\0\6\11\3\0\11\11\1\u0281\3\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\6\11\1\u030e\7\11\1\0\1\111\1\0"+ - "\6\11\3\0\15\11\1\0\5\11\1\0\3\11\4\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\6\11\1\u031b\6\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\46\0\1\u031c\40\0"+ + "\1\u031d\21\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\14\11\1\u031e\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\12\11\1\u031f\2\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\6\11\1\u0320\7\11\1\0\1\112\1\0\6\11"+ + "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\1\u0321\115\0\12\11"+ + "\1\u0322\3\11\1\0\1\112\1\0\6\11\3\0\1\u0323"+ + "\7\11\1\u0324\4\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\7\11\1\u030f\5\11\1\0"+ + "\1\112\1\0\6\11\3\0\1\11\1\u0325\13\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\11\11\1\u027b\3\11\1\0\5\11\1\0\3\11\4\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\6\11\1\u0326\6\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\6\11\1\u0310\6\11\1\0"+ + "\1\112\1\0\6\11\3\0\7\11\1\u0326\5\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\46\0\1\u0311\40\0\1\u0312\21\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\14\11\1\u0313\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\12\11"+ - "\1\u0314\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\6\11\1\u0315\7\11"+ - "\1\0\1\111\1\0\6\11\3\0\15\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\1\u0316\115\0\12\11\1\u0317\3\11\1\0\1\111"+ - "\1\0\6\11\3\0\1\u0318\7\11\1\u0319\4\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\7\11\1\u0327\5\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\6\11\1\u0328\6\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\1\11\1\u031a\13\11\1\0\5\11\1\0\3\11\4\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\6\11\1\u0329\6\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\6\11\1\u031b\6\11\1\0"+ + "\1\112\1\0\6\11\3\0\2\11\1\u032a\12\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\7\11\1\u031b\5\11\1\0\5\11\1\0\3\11\4\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\1\u032b\14\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\103\0\1\u032c\25\0\6\11"+ + "\1\u032d\7\11\1\0\1\112\1\0\6\11\3\0\15\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\2\11\1\u032e\12\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\2\11"+ + "\1\u032f\2\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\15\11\1\0\1\u0330\4\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\7\11\1\u031c\5\11\1\0"+ + "\1\112\1\0\6\11\3\0\15\11\1\0\1\u0331\4\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\11\11"+ + "\1\u0332\3\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\4\11\1\u0333\6\11\1\u0334\1\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\4\11\1\u0335\5\11\1\u0336\2\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\13\11"+ + "\1\u0337\1\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\2\11\1\u0338\13\11"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\10\11\1\u0339\5\11\1\0\1\112\1\0\6\11"+ + "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\10\11\1\u033a\5\11"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\1\11"+ + "\1\u033b\13\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\6\11\1\u033c\6\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\7\11"+ + "\1\u033c\5\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\7\11\1\u033d\5\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\2\11"+ + "\1\u033e\12\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\6\11\1\u033f\6\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\1\u0340\1\0\4\u0340\4\0\1\u0340\2\0\1\u0340"+ + "\4\0\1\u0340\1\0\1\u0340\5\0\1\u0340\1\0\1\u0340"+ + "\3\0\1\u0340\5\0\1\u0340\11\0\1\u0340\11\0\1\u0340"+ + "\1\0\3\u0340\1\0\2\u0340\14\0\6\11\1\u0341\7\11"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\137\4\0\5\137\2\0\12\137\1\u0342\3\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\2\137\1\u0343\13\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\3\137\1\u0344\12\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\10\137\1\u0345\5\137\4\0\5\137\2\0\16\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\13\137\1\u0346\2\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\4\137\1\u0347\11\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\4\137\1\u0348\11\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\7\137\1\u0349\6\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\7\137\1\u034a\6\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\2\137\1\u034b\13\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\3\137\1\u034c\12\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\3\137\1\u034d\12\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\14\137\1\u034e\1\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\3\137\1\u034f\12\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\10\137\1\u0350\5\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\16\137\1\0\3\137"+ + "\1\u0351\5\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\3\137\1\u0352\12\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\16\137\1\0\1\u0353"+ + "\10\137\3\0\3\137\1\0\1\137\1\0\11\137\13\0"+ + "\16\137\4\0\5\137\2\0\16\137\1\u0354\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\10\137\1\u0355\5\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\2\11\1\u0356\12\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\6\11\1\u031d\6\11\1\0\5\11\1\0\3\11\4\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\2\11\1\u0357\12\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\2\11\1\u0358"+ + "\13\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\2\11\1\u0359\12\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\6\11\1\u031e\6\11\1\0"+ + "\1\112\1\0\6\11\3\0\7\11\1\u035a\5\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\2\11\1\u031f\12\11\1\0\5\11\1\0\3\11\4\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\12\11\1\u035b\2\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\1\u0320\14\11\1\0\5\11"+ + "\1\112\1\0\6\11\3\0\14\11\1\u035c\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\103\0\1\u0321\25\0\6\11\1\u0322\7\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ + "\64\0\1\u035d\44\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\12\11\1\u035e\2\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\2\11\1\u0323\12\11"+ + "\1\0\1\112\1\0\6\11\3\0\3\11\1\u035f\11\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\15\11\1\0\2\11\1\u0324\2\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\15\11\1\0\1\u0325"+ - "\4\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\15\11\1\0\1\u0326\4\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\11\11\1\u0327\3\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\4\11"+ - "\1\u0328\5\11\1\u0329\2\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\10\11\1\u01c0\1\11\1\u01c1\3\11"+ + "\1\0\1\112\1\0\6\11\3\0\14\11\1\u01c3\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\1\11\1\u0360\13\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\6\11\1\u02e9\6\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\7\11\1\u02e9\5\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\7\11\1\u0357\5\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\6\11\1\u0361\6\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\11\11\1\u0362\3\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\13\11\1\u0363\1\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\1\11\1\u0364\13\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\107\0\1\u031d\21\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\15\11\1\0\4\11\1\u0365\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\13\11\1\u032a\1\11"+ + "\1\0\1\112\1\0\6\11\3\0\1\11\1\u0366\13\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\2\11\1\u032b\13\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\10\11"+ - "\1\u032c\5\11\1\0\1\111\1\0\6\11\3\0\15\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\6\11\1\u0367\6\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\7\11\1\u0367\5\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\10\11\1\u032d\5\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\7\11\1\u0368\5\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\1\11\1\u032e\13\11"+ + "\1\0\1\112\1\0\6\11\3\0\6\11\1\u0369\6\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\6\11\1\u032f\6\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\6\11\1\u036a\6\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\7\11\1\u032f\5\11"+ + "\1\0\1\112\1\0\6\11\3\0\2\11\1\u036b\12\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\7\11\1\u0330\5\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\4\11\1\u036c\10\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\2\11\1\u0331\12\11"+ + "\1\0\1\112\1\0\6\11\3\0\6\11\1\u036c\6\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\6\11\1\u0332\6\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\1\u0333"+ - "\1\0\4\u0333\4\0\1\u0333\2\0\1\u0333\4\0\1\u0333"+ - "\1\0\1\u0333\5\0\1\u0333\1\0\1\u0333\3\0\1\u0333"+ - "\5\0\1\u0333\11\0\1\u0333\11\0\1\u0333\1\0\3\u0333"+ - "\1\0\2\u0333\14\0\6\11\1\u0334\7\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\136"+ - "\4\0\5\136\2\0\12\136\1\u0335\3\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\2\136\1\u0336\13\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\3\136\1\u0337\12\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\10\136"+ - "\1\u0338\5\136\4\0\5\136\2\0\16\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\13\136\1\u0339\2\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\4\136\1\u033a\11\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\4\136\1\u033b\11\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\7\136\1\u033c\6\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\7\136\1\u033d\6\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\2\136\1\u033e\13\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\3\136\1\u033f\12\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\3\136\1\u0340\12\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\14\136\1\u0341\1\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\3\136\1\u0342\12\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\10\136\1\u0343\5\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\16\136\1\0\3\136\1\u0344\5\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\3\136\1\u0345\12\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\16\136\1\0\1\u0346\10\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\16\136\1\u0347\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\16\136\4\0\5\136\2\0"+ - "\10\136\1\u0348\5\136\1\0\11\136\3\0\3\136\1\0"+ - "\1\136\1\0\11\136\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\2\11\1\u0349\12\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\2\11\1\u034a"+ - "\12\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\2\11\1\u034b\13\11\1\0"+ - "\1\111\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\2\11\1\u034c"+ - "\12\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\7\11\1\u034d\5\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\14\11\1\u034e"+ + "\1\0\11\11\46\0\1\u036d\40\0\1\u031d\21\0\10\11"+ + "\1\u036e\5\11\1\0\1\112\1\0\6\11\3\0\15\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\64\0\1\u034f\44\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\12\11\1\u0350\2\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\3\11"+ - "\1\u0351\11\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\10\11\1\u01bd\1\11"+ - "\1\u01be\3\11\1\0\1\111\1\0\6\11\3\0\14\11"+ - "\1\u01c0\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\1\11\1\u0352\13\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\6\11\1\u02e1"+ - "\6\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\7\11\1\u02e1\5\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\7\11\1\u034a"+ - "\5\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\6\11\1\u0353\6\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\11\11\1\u0354"+ - "\3\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\13\11\1\u0355\1\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\1\11\1\u0356"+ - "\13\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\107\0\1\u0312\21\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\15\11\1\0\4\11\1\u0357"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\14\11\1\u015f\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\10\11\1\u036f"+ + "\5\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\1\u0370"+ + "\2\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\2\11\1\u0371\13\11"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\1\11"+ - "\1\u0358\13\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\6\11\1\u0359\6\11\1\0\5\11"+ + "\13\0\10\11\1\u0372\5\11\1\0\1\112\1\0\6\11"+ + "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\13\11\1\u0373\1\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\7\11"+ - "\1\u0359\5\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\7\11\1\u035a\5\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\6\11"+ + "\1\u0374\6\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\6\11\1\u0375\6\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\6\11"+ - "\1\u035b\6\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\6\11\1\u035c\6\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\4\11"+ + "\1\u0376\10\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\6\11\1\u0377\6\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\2\11"+ - "\1\u035d\12\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\46\0\1\u035e\40\0\1\u0312"+ - "\21\0\10\11\1\u035f\5\11\1\0\1\111\1\0\6\11"+ - "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\14\11\1\u015d\1\0\5\11\1\0"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\6\11"+ + "\1\u0378\6\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\55\0\1\u0379\53\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\1\11\1\u037a\13\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\2\11\1\u037b\12\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\2\11"+ + "\1\u037c\2\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\12\11\1\u037d\3\11\1\0\1\112"+ + "\1\0\6\11\3\0\1\u037e\7\11\1\u037f\4\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\7\11\1\u0380\5\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\23\0\1\u0381\141\0"+ + "\1\u0382\61\0\6\11\1\u0383\7\11\1\0\1\112\1\0"+ + "\6\11\3\0\15\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\13\11\1\u0384\1\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\6\11\1\u016b\6\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\103\0\1\u0385\25\0"+ + "\10\11\1\u0386\5\11\1\0\1\112\1\0\6\11\3\0"+ + "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\1\11\1\u0387\13\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\6\11\1\u0388"+ + "\6\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\6\11\1\u0389\6\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\10\11\1\u0360\5\11\1\0\1\111\1\0\6\11\3\0"+ + "\6\11\1\u038a\7\11\1\0\1\112\1\0\6\11\3\0"+ "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\1\u0361\2\0\15\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\2\11"+ - "\1\u0362\13\11\1\0\1\111\1\0\6\11\3\0\15\11"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\12\11\1\u0326\2\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\1\u038b\14\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\10\11\1\u0363\5\11\1\0\1\111"+ + "\1\0\11\11\13\0\6\11\1\u038c\7\11\1\0\1\112"+ "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\13\11\1\u0364\1\11"+ + "\1\0\1\112\1\0\6\11\3\0\12\11\1\u038d\2\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\6\11\1\u0365\6\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\15\11\1\0\3\11\1\u038e\1\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\1\u038f"+ + "\1\0\4\u038f\4\0\1\u038f\2\0\1\u038f\4\0\1\u038f"+ + "\1\0\1\u038f\5\0\1\u038f\1\0\1\u038f\3\0\1\u038f"+ + "\5\0\1\u038f\11\0\1\u038f\11\0\1\u038f\1\0\3\u038f"+ + "\1\0\2\u038f\14\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\5\11\1\u0306\5\11\1\u0390\1\11\1\0\1\11"+ + "\1\u0307\3\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\12\11\1\u0391\2\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\6\11\1\u0366\6\11"+ + "\1\0\1\112\1\0\6\11\3\0\12\11\1\u037a\2\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\4\11\1\u0367\10\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\2\11\1\u0392\12\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\6\11\1\u0368\6\11"+ + "\1\0\1\112\1\0\6\11\3\0\13\11\1\u0393\1\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\6\11\1\u0369\6\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\55\0\1\u036a"+ - "\53\0\16\11\1\0\1\111\1\0\6\11\3\0\1\11"+ - "\1\u036b\13\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\2\11\1\u036c\12\11\1\0\5\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\3\11\1\u0394\6\11\1\u0395\2\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\3\11"+ + "\1\u0396\11\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\11\11\1\u0397\3\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\5\11"+ + "\1\u0398\7\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\2\11\1\u0399\12\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\1\11"+ + "\1\u039a\13\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\1\11\1\u039b\7\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\7\11"+ + "\1\u039c\5\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\7\11\1\u039d\5\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\15\11"+ - "\1\0\2\11\1\u036d\2\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\12\11\1\u036e\3\11"+ - "\1\0\1\111\1\0\6\11\3\0\1\u036f\7\11\1\u0370"+ - "\4\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\7\11\1\u0371\5\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\23\0"+ - "\1\u0372\141\0\1\u0373\61\0\6\11\1\u0374\7\11\1\0"+ - "\1\111\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\6\11"+ + "\1\u039e\6\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\12\11\1\u033c\2\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\15\11"+ + "\1\0\2\11\1\u039f\2\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\15\11\1\0\4\11\1\u03a0\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\13\11\1\u0375"+ - "\1\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\6\11\1\u0169\6\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\103\0"+ - "\1\u0376\25\0\10\11\1\u0377\5\11\1\0\1\111\1\0"+ - "\6\11\3\0\15\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\1\11\1\u0378\13\11\1\0"+ + "\10\11\1\u01c0\5\11\1\0\1\112\1\0\6\11\3\0"+ + "\1\11\1\u01c2\12\11\1\u01c3\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\137"+ + "\4\0\5\137\2\0\13\137\1\u03a1\2\137\1\0\11\137"+ + "\3\0\3\137\1\0\1\137\1\0\11\137\13\0\16\137"+ + "\4\0\5\137\2\0\13\137\1\u03a2\2\137\1\0\11\137"+ + "\3\0\3\137\1\0\1\137\1\0\11\137\13\0\16\137"+ + "\4\0\5\137\2\0\14\137\1\u03a3\1\137\1\0\11\137"+ + "\3\0\3\137\1\0\1\137\1\0\11\137\13\0\16\137"+ + "\4\0\5\137\2\0\3\137\1\u03a4\12\137\1\0\11\137"+ + "\3\0\3\137\1\0\1\137\1\0\11\137\13\0\16\137"+ + "\4\0\5\137\2\0\16\137\1\0\4\137\1\u03a5\4\137"+ + "\3\0\3\137\1\0\1\137\1\0\11\137\13\0\16\137"+ + "\4\0\5\137\2\0\16\137\1\0\4\137\1\u03a6\4\137"+ + "\3\0\3\137\1\0\1\137\1\0\11\137\13\0\16\137"+ + "\4\0\5\137\2\0\15\137\1\u03a7\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\2\137\1\u03a8\13\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\16\137\1\0\2\137\1\u03a9\6\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\13\137\1\u03aa\2\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\12\137\1\u03ab\3\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\4\137\1\u03ac\11\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\7\137\1\u03ad\6\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\11\137\1\u03ae\4\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\14\137\1\u03af\1\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\2\137\1\u03b0\13\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\4\137\1\u03b1\11\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\11\11\1\u03b2\3\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\6\11\1\u0379\6\11\1\0\5\11\1\0\3\11\4\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\12\11\1\u02e9\2\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\6\11\1\u037a\6\11\1\0"+ + "\1\112\1\0\6\11\3\0\1\11\1\u02f6\13\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\6\11\1\u037b\7\11\1\0\1\111\1\0"+ - "\6\11\3\0\15\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\12\11\1\u031b\2\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\3\11\1\u03b3\11\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\10\11\1\u03b4"+ + "\5\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\1\u037c\14\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\6\11\1\u037d\7\11"+ - "\1\0\1\111\1\0\6\11\3\0\15\11\1\0\5\11"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\15\11\1\0\1\u03b5\4\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\6\11\1\u03b6\6\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\12\11"+ - "\1\u037e\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\3\11\1\u037f\1\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\1\u0380\1\0\4\u0380\4\0\1\u0380\2\0\1\u0380"+ - "\4\0\1\u0380\1\0\1\u0380\5\0\1\u0380\1\0\1\u0380"+ - "\3\0\1\u0380\5\0\1\u0380\11\0\1\u0380\11\0\1\u0380"+ - "\1\0\3\u0380\1\0\2\u0380\14\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\13\11\1\u0381\1\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\12\11"+ - "\1\u0382\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\12\11\1\u036b\2\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\2\11"+ - "\1\u0383\12\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\13\11\1\u0384\1\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\12\11"+ - "\1\u0385\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\5\11\1\u0386\7\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\2\11"+ - "\1\u0387\12\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\1\11\1\u0388\13\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\15\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\1\11\1\u0389\7\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\7\11\1\u038a\5\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\7\11"+ - "\1\u038b\5\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\6\11\1\u038c\6\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\12\11"+ - "\1\u032f\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\2\11\1\u038d\2\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\15\11"+ - "\1\0\4\11\1\u038e\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\10\11\1\u01bd\5\11\1\0"+ - "\1\111\1\0\6\11\3\0\1\11\1\u01bf\12\11\1\u01c0"+ + "\63\0\1\u03b7\45\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\13\11\1\u03b8\1\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\12\11\1\u03b9\2\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\136\4\0\5\136\2\0\13\136"+ - "\1\u038f\2\136\1\0\11\136\3\0\3\136\1\0\1\136"+ - "\1\0\11\136\13\0\16\136\4\0\5\136\2\0\13\136"+ - "\1\u0390\2\136\1\0\11\136\3\0\3\136\1\0\1\136"+ - "\1\0\11\136\13\0\16\136\4\0\5\136\2\0\14\136"+ - "\1\u0391\1\136\1\0\11\136\3\0\3\136\1\0\1\136"+ - "\1\0\11\136\13\0\16\136\4\0\5\136\2\0\3\136"+ - "\1\u0392\12\136\1\0\11\136\3\0\3\136\1\0\1\136"+ - "\1\0\11\136\13\0\16\136\4\0\5\136\2\0\16\136"+ - "\1\0\4\136\1\u0393\4\136\3\0\3\136\1\0\1\136"+ - "\1\0\11\136\13\0\16\136\4\0\5\136\2\0\16\136"+ - "\1\0\4\136\1\u0394\4\136\3\0\3\136\1\0\1\136"+ - "\1\0\11\136\13\0\16\136\4\0\5\136\2\0\15\136"+ - "\1\u0395\1\0\11\136\3\0\3\136\1\0\1\136\1\0"+ - "\11\136\13\0\16\136\4\0\5\136\2\0\2\136\1\u0396"+ - "\13\136\1\0\11\136\3\0\3\136\1\0\1\136\1\0"+ - "\11\136\13\0\16\136\4\0\5\136\2\0\16\136\1\0"+ - "\2\136\1\u0397\6\136\3\0\3\136\1\0\1\136\1\0"+ - "\11\136\13\0\16\136\4\0\5\136\2\0\13\136\1\u0398"+ - "\2\136\1\0\11\136\3\0\3\136\1\0\1\136\1\0"+ - "\11\136\13\0\16\136\4\0\5\136\2\0\12\136\1\u0399"+ - "\3\136\1\0\11\136\3\0\3\136\1\0\1\136\1\0"+ - "\11\136\13\0\16\136\4\0\5\136\2\0\4\136\1\u039a"+ - "\11\136\1\0\11\136\3\0\3\136\1\0\1\136\1\0"+ - "\11\136\13\0\16\136\4\0\5\136\2\0\7\136\1\u039b"+ - "\6\136\1\0\11\136\3\0\3\136\1\0\1\136\1\0"+ - "\11\136\13\0\16\136\4\0\5\136\2\0\11\136\1\u039c"+ - "\4\136\1\0\11\136\3\0\3\136\1\0\1\136\1\0"+ - "\11\136\13\0\16\136\4\0\5\136\2\0\14\136\1\u039d"+ - "\1\136\1\0\11\136\3\0\3\136\1\0\1\136\1\0"+ - "\11\136\13\0\16\136\4\0\5\136\2\0\2\136\1\u039e"+ - "\13\136\1\0\11\136\3\0\3\136\1\0\1\136\1\0"+ - "\11\136\13\0\16\136\4\0\5\136\2\0\4\136\1\u039f"+ - "\11\136\1\0\11\136\3\0\3\136\1\0\1\136\1\0"+ - "\11\136\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\11\11\1\u03a0\3\11\1\0\5\11\1\0\3\11\4\0"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\6\11\1\u03ba\6\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\1\u0357\14\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\15\11\1\0\1\11\1\u03bb\3\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\12\11\1\u02e1\2\11\1\0"+ + "\1\112\1\0\6\11\3\0\11\11\1\u015f\3\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\6\11\1\u028c\6\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\10\11\1\u03bc"+ + "\5\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\1\11\1\u02ed\13\11\1\0\5\11\1\0\3\11\4\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\6\11\1\u03bd\6\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\3\11\1\u03a1\11\11\1\0"+ + "\1\112\1\0\6\11\3\0\12\11\1\u0367\2\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\1\u03be\14\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\6\11\1\u03bf\7\11"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\12\11"+ + "\1\u03c0\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\12\11\1\u03c1\2\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\23\0\1\u03c2\105\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\1\11"+ + "\1\u0299\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\11\11\1\u03c3\3\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\10\11\1\u03a2\5\11\1\0\1\111\1\0"+ + "\11\11\46\0\1\u036d\62\0\16\11\1\0\1\112\1\0"+ "\6\11\3\0\15\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\1\11\1\u03c4\7\11\13\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\14\11\1\u03c5"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\10\11\1\u03c6\5\11\1\0\1\112"+ + "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\11\11\1\u03c7\3\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\u03c8"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\5\11\1\u03c9\7\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\1\11\1\u03ca\13\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\1\u03cb\14\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\6\11\1\u03a3\6\11\1\0"+ - "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\63\0\1\u03a4\45\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\13\11\1\u03a5\1\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\12\11\1\u03a6"+ - "\2\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\6\11\1\u03a7\6\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\1\u034a\14\11"+ + "\1\112\1\0\6\11\1\u01bf\2\0\15\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\110\0\1\u03cc\20\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\6\11\1\u02a4\6\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\11\11\1\u03cd\3\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\15\11\1\0\1\11\1\u03a8\3\11\1\0\3\11"+ + "\1\0\11\11\13\0\10\11\1\u03ce\5\11\1\0\1\112"+ + "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\11\11\1\u015d\3\11"+ + "\1\0\1\112\1\0\6\11\3\0\1\11\1\u03cf\13\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\6\11\1\u0286\6\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\6\11\1\u03d0\6\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\10\11"+ - "\1\u03a9\5\11\1\0\1\111\1\0\6\11\3\0\15\11"+ + "\1\u03d1\5\11\1\0\1\112\1\0\6\11\3\0\15\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\57\0\1\u03d2\117\0\1\u03d3\47\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\3\11\1\u03d4\11\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\6\11\1\u03aa\6\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\6\11\1\u03d5\7\11\1\0\1\112"+ + "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\1\u03d6"+ + "\1\0\4\u03d6\4\0\1\u03d6\2\0\1\u03d6\4\0\1\u03d6"+ + "\1\0\1\u03d6\5\0\1\u03d6\1\0\1\u03d6\3\0\1\u03d6"+ + "\5\0\1\u03d6\11\0\1\u03d6\11\0\1\u03d6\1\0\3\u03d6"+ + "\1\0\2\u03d6\14\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\6\11\1\u03d7\6\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\12\11\1\u0359\2\11"+ + "\1\0\1\112\1\0\6\11\3\0\2\11\1\u03d8\12\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\1\u03ab\14\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\6\11\1\u03ac"+ - "\7\11\1\0\1\111\1\0\6\11\3\0\15\11\1\0"+ - "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\12\11\1\u03ad\2\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\23\0\1\u03ae\105\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\15\11\1\0"+ - "\5\11\1\0\3\11\4\0\1\11\1\u0292\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\11\11\1\u03af\3\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\46\0\1\u035e"+ - "\62\0\16\11\1\0\1\111\1\0\6\11\3\0\15\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\12\11\1\u03d9\2\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\2\11\1\u03da\12\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\1\11\1\u03b0\7\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\14\11\1\u03b1\1\0\5\11\1\0"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\5\11\1\u01de\3\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\12\11\1\u0329\2\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\1\u01dd"+ + "\1\11\1\0\1\11\1\0\5\11\1\u01de\3\11\13\0"+ + "\10\11\1\u03db\5\11\1\0\1\112\1\0\6\11\3\0"+ + "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\12\11\1\u037c\3\11\1\0"+ + "\1\112\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\10\11\1\u03b2\5\11\1\0\1\111\1\0\6\11\3\0"+ + "\10\11\1\u03dc\5\11\1\0\1\112\1\0\6\11\3\0"+ "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\11\11\1\u03b3\3\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\u03b4\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\5\11\1\u03b5"+ - "\7\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\1\11\1\u03b6\13\11\1\0\5\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\7\11\1\u02a4\5\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\1\u03b7\14\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\1\u01bc\2\0\15\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\110\0\1\u03b8\20\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\6\11\1\u029d"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\7\11\1\u022f"+ + "\5\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\12\11\1\u03dd\2\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\6\11\1\u03de"+ "\6\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\11\11\1\u03b9\3\11\1\0\5\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\12\11\1\u03df\2\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\10\11\1\u03ba\5\11\1\0\1\111\1\0\6\11\3\0"+ - "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\1\11\1\u03bb\13\11\1\0\5\11\1\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\3\11\1\u03e0"+ + "\11\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\6\11\1\u03e1\6\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\6\11\1\u03bc"+ - "\6\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\10\11\1\u03bd\5\11\1\0"+ - "\1\111\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\57\0"+ - "\1\u03be\117\0\1\u03bf\47\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\3\11\1\u03c0\11\11\1\0\5\11\1\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\12\11\1\u03e2"+ + "\2\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\15\11\1\0\2\11\1\u03e3\2\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\6\11\1\u03c1\7\11\1\0\1\111\1\0\6\11\3\0"+ - "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\1\u03c2\1\0\4\u03c2\4\0"+ - "\1\u03c2\2\0\1\u03c2\4\0\1\u03c2\1\0\1\u03c2\5\0"+ - "\1\u03c2\1\0\1\u03c2\3\0\1\u03c2\5\0\1\u03c2\11\0"+ - "\1\u03c2\11\0\1\u03c2\1\0\3\u03c2\1\0\2\u03c2\14\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\6\11\1\u03c3"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\6\11\1\u03e4"+ "\6\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\2\11\1\u03c4\12\11\1\0\5\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\6\11\1\u03e5\6\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\12\11\1\u03c5"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\12\11\1\u03e6"+ "\2\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\2\11\1\u03c6\12\11\1\0\5\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\2\11\1\u03e7\12\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\15\11\1\0"+ - "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\5\11\1\u01db\3\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\12\11\1\u031e\2\11\1\0\5\11\1\0"+ + "\6\11\1\u03e8\7\11\1\0\1\112\1\0\6\11\3\0"+ + "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\6\11\1\u03e9\7\11\1\0"+ + "\1\112\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\15\11\1\0"+ - "\5\11\1\0\3\11\4\0\1\u01da\1\11\1\0\1\11"+ - "\1\0\5\11\1\u01db\3\11\13\0\10\11\1\u03c7\5\11"+ - "\1\0\1\111\1\0\6\11\3\0\15\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\12\11\1\u036d\3\11\1\0\1\111\1\0\6\11"+ - "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\10\11\1\u03c8\5\11"+ - "\1\0\1\111\1\0\6\11\3\0\15\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\7\11"+ - "\1\u029d\5\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\7\11\1\u022a\5\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\6\11"+ - "\1\u03c9\6\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\6\11\1\u03ca\6\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\12\11"+ - "\1\u03cb\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\2\11\1\u03cc\2\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\6\11"+ - "\1\u03cd\6\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\6\11\1\u03ce\6\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\12\11"+ - "\1\u03cf\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\2\11\1\u03d0\12\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\6\11\1\u03d1\7\11\1\0\1\111\1\0\6\11"+ - "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\6\11\1\u03d2\7\11"+ - "\1\0\1\111\1\0\6\11\3\0\15\11\1\0\5\11"+ + "\16\137\4\0\5\137\2\0\4\137\1\u03ea\11\137\1\0"+ + "\11\137\3\0\3\137\1\0\1\137\1\0\11\137\13\0"+ + "\16\137\4\0\5\137\2\0\3\137\1\u03eb\12\137\1\0"+ + "\11\137\3\0\3\137\1\0\1\137\1\0\11\137\13\0"+ + "\16\137\4\0\5\137\2\0\12\137\1\u03ec\3\137\1\0"+ + "\11\137\3\0\3\137\1\0\1\137\1\0\11\137\13\0"+ + "\16\137\4\0\5\137\2\0\13\137\1\u03ed\2\137\1\0"+ + "\11\137\3\0\3\137\1\0\1\137\1\0\11\137\13\0"+ + "\10\137\1\u03ee\5\137\4\0\5\137\2\0\16\137\1\0"+ + "\11\137\3\0\3\137\1\0\1\137\1\0\11\137\13\0"+ + "\10\137\1\u03ef\5\137\4\0\5\137\2\0\16\137\1\0"+ + "\11\137\3\0\3\137\1\0\1\137\1\0\11\137\13\0"+ + "\6\137\1\u03f0\7\137\4\0\5\137\2\0\16\137\1\0"+ + "\11\137\3\0\3\137\1\0\1\137\1\0\11\137\13\0"+ + "\16\137\4\0\5\137\2\0\3\137\1\u03f1\12\137\1\0"+ + "\11\137\3\0\3\137\1\0\1\137\1\0\11\137\13\0"+ + "\16\137\4\0\5\137\2\0\12\137\1\u03f2\3\137\1\0"+ + "\11\137\3\0\3\137\1\0\1\137\1\0\11\137\13\0"+ + "\16\137\4\0\5\137\2\0\7\137\1\u03f3\6\137\1\0"+ + "\11\137\3\0\3\137\1\0\1\137\1\0\11\137\13\0"+ + "\16\137\4\0\5\137\2\0\15\137\1\u03f4\1\0\11\137"+ + "\3\0\3\137\1\0\1\137\1\0\11\137\13\0\16\137"+ + "\4\0\5\137\2\0\15\137\1\u03f5\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\14\137\1\u03f6\1\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\15\11\1\0\1\11\1\u03f7"+ + "\3\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\3\11\1\u03b9\11\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\11\11\1\u03f8\3\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\13\11\1\u03f9\1\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\1\u03fa\2\0\15\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\136\4\0\5\136\2\0\4\136\1\u03d3\11\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\3\136\1\u03d4\12\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\12\136\1\u03d5\3\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\13\136\1\u03d6\2\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\10\136\1\u03d7\5\136\4\0\5\136\2\0\16\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\10\136\1\u03d8\5\136\4\0\5\136\2\0\16\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\6\136\1\u03d9\7\136\4\0\5\136\2\0\16\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\3\136\1\u03da\12\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\12\136\1\u03db\3\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\7\136\1\u03dc\6\136"+ - "\1\0\11\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\13\0\16\136\4\0\5\136\2\0\15\136\1\u03dd\1\0"+ - "\11\136\3\0\3\136\1\0\1\136\1\0\11\136\13\0"+ - "\16\136\4\0\5\136\2\0\15\136\1\u03de\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\14\136\1\u03df\1\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\15\11\1\0\1\11"+ - "\1\u03e0\3\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\3\11\1\u03a6\11\11\1\0\5\11\1\0\3\11"+ + "\110\0\1\u03fb\20\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\7\11\1\u015f\5\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\11\11\1\u03e1\3\11"+ + "\1\0\1\112\1\0\6\11\3\0\2\11\1\u03fc\12\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\1\u03e2\2\0\15\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\110\0\1\u03e3\20\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\7\11\1\u015d"+ - "\5\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\2\11\1\u03e4\12\11\1\0\5\11\1\0"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\12\11\1\u03fd\2\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\12\11\1\u03fe\2\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\2\11\1\u03ff\12\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\12\11\1\u036a\2\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\1\u021d"+ + "\1\11\1\0\1\11\1\0\11\11\13\0\10\11\1\u0400"+ + "\5\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\57\0\1\u0401\51\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\1\11\1\u0402\13\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\12\11\1\u03e5"+ - "\2\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\12\11\1\u03e6\2\11\1\0\5\11\1\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\6\11\1\u0403"+ + "\6\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\6\11\1\u0404\6\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\14\11\1\u0405"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\12\11\1\u0406\2\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\10\11"+ + "\1\u0407\5\11\1\0\1\112\1\0\6\11\3\0\15\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\12\11\1\u0408\2\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\12\11\1\u0409\2\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\12\11\1\u0378\2\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\111\0\1\u040a"+ + "\17\0\16\11\1\0\1\112\1\0\6\11\3\0\1\u040b"+ + "\14\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\6\11\1\u040c\6\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\2\11\1\u03e7"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\2\11\1\u040d"+ "\12\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\12\11\1\u035c\2\11\1\0\5\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\12\11\1\u040e\2\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\15\11\1\0"+ - "\5\11\1\0\3\11\4\0\1\u021a\1\11\1\0\1\11"+ - "\1\0\11\11\13\0\10\11\1\u03e8\5\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\57\0\1\u03e9"+ - "\51\0\16\11\1\0\1\111\1\0\6\11\3\0\1\11"+ - "\1\u03ea\13\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\6\11\1\u03eb\6\11\1\0\5\11"+ + "\12\11\1\u040f\3\11\1\0\1\112\1\0\6\11\3\0"+ + "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\110\0\1\u0410\2\0\1\u0411\63\0"+ + "\1\u0412\47\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\15\11\1\0\2\11\1\u0413\2\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\10\11\1\u01c0"+ + "\1\11\1\u01c1\3\11\1\0\1\112\1\0\6\11\3\0"+ + "\1\11\1\u01c2\13\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\1\11\1\u0414\13\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\3\11\1\u0415\11\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\15\11\1\0\1\u0416\4\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\6\11"+ - "\1\u03ec\6\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\14\11\1\u03ed\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\12\11\1\u03ee"+ - "\2\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\10\11\1\u03ef\5\11\1\0"+ - "\1\111\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\12\11\1\u03f0"+ - "\2\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\12\11\1\u03f1\2\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\12\11\1\u0369"+ - "\2\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\111\0\1\u03f2\17\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\1\u03f3\14\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\11\11"+ + "\1\u0326\3\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\1\11\1\u0417\13\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\6\11"+ - "\1\u03f4\6\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\2\11\1\u03f5\12\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\13\11"+ + "\1\u0418\1\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\2\11\1\u0419\12\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\12\11"+ - "\1\u03f6\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\12\11\1\u03f7\3\11"+ - "\1\0\1\111\1\0\6\11\3\0\15\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\7\11"+ + "\1\u041a\5\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\13\11\1\u041b\1\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\110\0\1\u03f8\2\0\1\u03f9\63\0\1\u03fa\47\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\15\11\1\0\2\11"+ - "\1\u03fb\2\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\10\11\1\u01bd\1\11\1\u01be\3\11"+ - "\1\0\1\111\1\0\6\11\3\0\1\11\1\u01bf\13\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\1\11\1\u03fc\13\11\1\0\5\11\1\0\3\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\12\11"+ + "\1\u041c\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\7\11\1\u041d\5\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\10\11\1\u041e\5\11\1\0\1\112\1\0\6\11"+ + "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\10\11\1\u041f\4\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\1\u0420"+ + "\14\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\1\u0421\14\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\3\11\1\u03fd\11\11"+ + "\1\0\1\112\1\0\6\11\3\0\4\11\1\u0422\10\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\15\11\1\0\1\u03fe\4\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\11\11\1\u031b\3\11\1\0"+ - "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\1\11\1\u03ff\13\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\13\11\1\u0400\1\11\1\0"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\11\11\1\u033c\3\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\14\11\1\u0423\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\7\11\1\u0401\5\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\7\11\1\u0402\5\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\2\11\1\u0424\12\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\10\137\1\u0425"+ + "\5\137\4\0\5\137\2\0\16\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\13\137\1\u0426\2\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\13\137\1\u0427\2\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\15\137\1\u0428\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\13\137\1\u0429\2\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\14\137\1\u042a\1\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\6\137\1\u042b\7\137"+ + "\4\0\5\137\2\0\16\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\6\137\1\u042c\7\137"+ + "\4\0\5\137\2\0\16\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\1\137\1\u042d\14\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\6\11\1\u02b1\6\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\15\11"+ + "\1\0\1\11\1\u042e\3\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\14\11\1\u042f\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\63\0"+ + "\1\u0430\24\0\1\u027d\3\0\1\u0431\112\0\1\u0432\17\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\11\11\1\u02e9"+ + "\3\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\15\11\1\0\1\u02a4\4\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\1\u0433\14\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\10\11\1\u0403\5\11\1\0\1\111\1\0"+ - "\6\11\3\0\15\11\1\0\5\11\1\0\3\11\4\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\11\11\1\u0367\3\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\10\11\1\u0404\4\11\1\0"+ + "\1\112\1\0\6\11\3\0\1\11\1\u0434\13\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\1\u0405\14\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\1\u0406\14\11\1\0\5\11\1\0"+ + "\11\11\113\0\1\u0411\15\0\10\11\1\u0435\5\11\1\0"+ + "\1\112\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\4\11\1\u0407"+ - "\10\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\11\11\1\u032f\3\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\14\11\1\u0408"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\1\u0407\14\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\6\11\1\u0436\7\11\1\0\1\112"+ + "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\6\11\1\u0437\6\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\12\11\1\u0404\2\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\10\11"+ + "\1\u0438\5\11\1\0\1\112\1\0\6\11\3\0\15\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\6\11\1\u0439\7\11\1\0\1\112"+ + "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\6\11\1\u03b9\6\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\2\11\1\u0409\12\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\10\136"+ - "\1\u040a\5\136\4\0\5\136\2\0\16\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\13\136\1\u040b\2\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\13\136\1\u040c\2\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\15\136\1\u040d\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\13\136\1\u040e\2\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\14\136\1\u040f\1\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\6\136\1\u0410"+ - "\7\136\4\0\5\136\2\0\16\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\6\136\1\u0411"+ - "\7\136\4\0\5\136\2\0\16\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\1\136\1\u0412\14\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\6\11\1\u02aa\6\11\1\0"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\1\11\1\u043a\13\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\3\11\1\u043b\11\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\15\11\1\0\1\u043c\4\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\10\11\1\u043d"+ + "\5\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\15\11\1\0\1\11\1\u0413\3\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\63\0\1\u0414\24\0"+ - "\1\u0277\3\0\1\u0415\112\0\1\u0416\17\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\11\11\1\u02e1\3\11\1\0"+ + "\11\11\111\0\1\u043e\60\0\1\u043f\54\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\11\11\1\u0440\3\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\15\11\1\0\1\u029d\4\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\1\u0417\14\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\11\11\1\u0359"+ - "\3\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\1\11\1\u0418\13\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\113\0"+ - "\1\u03f9\15\0\10\11\1\u0419\5\11\1\0\1\111\1\0"+ - "\6\11\3\0\15\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\1\u03ef\14\11\1\0\5\11"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\14\11\1\u0441\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\3\11\1\u0441\11\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\6\11\1\u041a\7\11\1\0\1\111\1\0\6\11"+ - "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\6\11\1\u041b\6\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\13\11"+ + "\1\u0414\1\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\6\11\1\u0442\6\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\12\11"+ - "\1\u03ec\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\10\11\1\u041c\5\11"+ - "\1\0\1\111\1\0\6\11\3\0\15\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\11\11"+ + "\1\u02b1\3\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\11\11\1\u0443\3\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\6\11\1\u041d\7\11\1\0\1\111\1\0\6\11"+ + "\13\0\12\11\1\u0444\3\11\1\0\1\112\1\0\6\11"+ "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\6\11\1\u03a6\6\11\1\0\5\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\10\11\1\u0445\4\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\7\11"+ + "\1\u0446\5\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\6\11\1\u0447\7\11"+ + "\1\0\1\112\1\0\6\11\1\u0448\2\0\15\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\1\u0449\14\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\13\11\1\u044a\1\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\1\11"+ - "\1\u041e\13\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\3\11\1\u041f\11\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\12\11"+ + "\1\u044b\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\12\11\1\u044c\2\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\15\11"+ - "\1\0\1\u0420\4\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\10\11\1\u0421\5\11\1\0"+ - "\1\111\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\111\0"+ - "\1\u0422\60\0\1\u0423\54\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\11\11\1\u0424\3\11\1\0\5\11\1\0"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\2\11"+ + "\1\u044d\12\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\2\11\1\u044e\12\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\7\11"+ + "\1\u044f\5\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\137\4\0\5\137"+ + "\2\0\14\137\1\u0450\1\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\1\137\1\u0451\14\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\1\137\1\u0452\14\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\3\137\1\u0453\12\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\10\137\1\u0454\5\137"+ + "\4\0\5\137\2\0\16\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\13\137\1\u0455\2\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\4\137\1\u0456\11\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\4\137\1\u0457\11\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\3\137\1\u0458\12\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\1\u0459\2\0\15\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\14\11\1\u0425"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\3\11\1\u0425\11\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\13\11\1\u03fc\1\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\6\11\1\u0426\6\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\11\11\1\u02aa\3\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\12\11\1\u0427\3\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\6\11"+ - "\1\u0428\7\11\1\0\1\111\1\0\6\11\1\u0429\2\0"+ + "\6\11\1\u045a\7\11\1\0\1\112\1\0\6\11\3\0"+ "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\1\u042a\14\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\13\11\1\u042b\1\11"+ - "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\12\11\1\u042c\2\11\1\0\5\11\1\0\3\11"+ + "\1\11\1\0\11\11\23\0\1\u045b\201\0\1\u045c\21\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ + "\1\u045d\4\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\6\11\1\u045e\6\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\12\11\1\u042d\2\11"+ + "\1\0\1\112\1\0\6\11\3\0\11\11\1\u045f\3\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\2\11\1\u042e\12\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\2\11\1\u042f\12\11"+ + "\1\0\11\11\13\0\2\11\1\u0460\13\11\1\0\1\112"+ + "\1\0\6\11\3\0\11\11\1\u0461\3\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\7\11"+ + "\1\u0404\5\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\13\11\1\u0462\1\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\13\11"+ + "\1\u030d\1\11\1\0\4\11\1\u030e\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\14\11\1\u031a\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\3\11"+ + "\1\u031a\11\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\13\11\1\u043a\1\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\1\u0463"+ + "\14\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\1\u0159\14\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\6\11"+ + "\1\u0464\7\11\1\0\1\112\1\0\6\11\3\0\15\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\7\11\1\u0430\5\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\136"+ - "\4\0\5\136\2\0\14\136\1\u0431\1\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\1\136\1\u0432\14\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\1\136\1\u0433\14\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\3\136\1\u0434\12\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\10\136"+ - "\1\u0435\5\136\4\0\5\136\2\0\16\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\13\136\1\u0436\2\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\4\136\1\u0437\11\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\4\136\1\u0438\11\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\3\136\1\u0439\12\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\1\u043a\2\0\15\11\1\0"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\1\u0465\14\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\2\11\1\u0466\12\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\23\0\1\u043b\201\0\1\u043c\21\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\15\11\1\0\1\u043d\4\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\6\11"+ - "\1\u043e\6\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\11\11\1\u043f\3\11\1\0\5\11"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\1\u0467"+ + "\2\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\4\11\1\u0468\10\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\2\11\1\u0440\13\11\1\0\1\111\1\0\6\11"+ - "\3\0\11\11\1\u0441\3\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\7\11\1\u03ec\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\15\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\13\11\1\u0442\1\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\13\11\1\u0302\1\11"+ - "\1\0\4\11\1\u0303\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\14\11\1\u030f\1\0\5\11\1\0\3\11"+ + "\1\0\5\11\1\u0469\3\11\54\0\1\u046a\54\0\16\11"+ + "\1\0\1\112\1\0\6\11\1\u0448\2\0\15\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\7\11\1\u046b\5\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\6\11\1\u046c"+ + "\7\11\1\0\1\112\1\0\6\11\3\0\15\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\6\11\1\u046d\7\11\1\0\1\112\1\0"+ + "\6\11\1\u0448\2\0\15\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\3\11\1\u030f\11\11"+ + "\1\0\1\112\1\0\6\11\3\0\1\11\1\u041d\13\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\13\11\1\u041e\1\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\12\11\1\u046e\2\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\1\u0443\14\11\1\0"+ + "\1\0\1\112\1\0\6\11\3\0\7\11\1\u046f\5\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\137\4\0\5\137\2\0\12\137"+ + "\1\u0470\3\137\1\0\11\137\3\0\3\137\1\0\1\137"+ + "\1\0\11\137\13\0\16\137\4\0\5\137\2\0\16\137"+ + "\1\0\1\u0471\10\137\3\0\3\137\1\0\1\137\1\0"+ + "\11\137\13\0\16\137\4\0\5\137\2\0\16\137\1\0"+ + "\1\u0472\10\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\13\137\1\u0473\2\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\14\137\1\u0474\1\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\3\137\1\u0475\12\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\16\137\1\0\4\137"+ + "\1\u0476\4\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\16\137\1\0\4\137"+ + "\1\u0477\4\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\13\0\16\137\4\0\5\137\2\0\2\137\1\u0478\13\137"+ + "\1\0\11\137\3\0\3\137\1\0\1\137\1\0\11\137"+ + "\106\0\1\u0479\22\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\12\11\1\u047a\2\11\1\0\1\u047b\4\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\64\0"+ + "\1\u047c\44\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\6\11\1\u047d\6\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\2\11\1\u047e\12\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\1\u0158\14\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\6\11\1\u0444\7\11"+ - "\1\0\1\111\1\0\6\11\3\0\15\11\1\0\5\11"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\13\11\1\u047f\1\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\11\11\1\u0404\3\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\2\11\1\u0480\12\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\2\11\1\u0481\12\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\6\11\1\u0482\6\11\1\0\5\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\1\u0483\14\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\2\11"+ - "\1\u0445\12\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\5\11\1\u0446\3\11"+ - "\54\0\1\u0447\54\0\16\11\1\0\1\111\1\0\6\11"+ - "\1\u0429\2\0\15\11\1\0\5\11\1\0\3\11\4\0"+ + "\54\0\1\u0484\54\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\1\u0485\14\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\7\11\1\u0448\5\11\1\0"+ + "\1\112\1\0\6\11\3\0\4\11\1\u0486\10\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\6\11\1\u0449\7\11\1\0\1\111\1\0"+ - "\6\11\3\0\15\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\6\11\1\u044a"+ - "\7\11\1\0\1\111\1\0\6\11\1\u0429\2\0\15\11"+ + "\11\11\47\0\1\u0487\61\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\5\11\1\u0488\7\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ + "\10\11\1\u0489\5\11\1\0\1\112\1\0\6\11\3\0"+ + "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\6\11\1\u048a\6\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\2\11\1\u045d"+ + "\12\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\2\11\1\u048b\12\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ + "\16\137\4\0\5\137\2\0\3\137\1\u048c\12\137\1\0"+ + "\11\137\3\0\3\137\1\0\1\137\1\0\11\137\13\0"+ + "\16\137\4\0\5\137\2\0\12\137\1\u048d\3\137\1\0"+ + "\11\137\3\0\3\137\1\0\1\137\1\0\11\137\13\0"+ + "\16\137\4\0\5\137\2\0\13\137\1\u048e\2\137\1\0"+ + "\11\137\3\0\3\137\1\0\1\137\1\0\11\137\13\0"+ + "\10\137\1\u048f\5\137\4\0\5\137\2\0\16\137\1\0"+ + "\11\137\3\0\3\137\1\0\1\137\1\0\11\137\13\0"+ + "\10\137\1\u0490\5\137\4\0\5\137\2\0\16\137\1\0"+ + "\11\137\3\0\3\137\1\0\1\137\1\0\11\137\51\0"+ + "\1\u0491\57\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\15\11\1\0\2\11\1\u0492\2\11\1\0\3\11\4\0"+ + "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\2\11\1\u0493\12\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\63\0\1\u0494\45\0\16\11\1\0\1\112\1\0"+ + "\6\11\1\u0495\2\0\15\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\7\11\1\u0496\5\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\1\11\1\u0402\13\11\1\0\5\11\1\0\3\11"+ + "\1\0\11\11\13\0\6\11\1\u0497\7\11\1\0\1\112"+ + "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\12\11\1\u044b\2\11"+ + "\1\0\1\112\1\0\6\11\3\0\12\11\1\u0498\2\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\7\11\1\u044c\5\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\136"+ - "\4\0\5\136\2\0\12\136\1\u044d\3\136\1\0\11\136"+ - "\3\0\3\136\1\0\1\136\1\0\11\136\13\0\16\136"+ - "\4\0\5\136\2\0\16\136\1\0\1\u044e\10\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\16\136\1\0\1\u044f\10\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\13\136\1\u0450\2\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\14\136\1\u0451\1\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\3\136\1\u0452\12\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\16\136\1\0\4\136\1\u0453\4\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\16\136\1\0\4\136\1\u0454\4\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\2\136\1\u0455\13\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\106\0\1\u0456\73\0\1\u0457"+ - "\44\0\16\11\1\0\1\111\1\0\6\11\3\0\6\11"+ - "\1\u0458\6\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\2\11\1\u0459\12\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\13\11"+ - "\1\u045a\1\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\11\11\1\u03ec\3\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\2\11"+ - "\1\u045b\12\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\2\11\1\u045c\12\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\1\u045d"+ - "\14\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\4\11\1\u045e\10\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\47\0"+ - "\1\u045f\61\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\5\11\1\u0460\7\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\10\11\1\u0461"+ - "\5\11\1\0\1\111\1\0\6\11\3\0\15\11\1\0"+ - "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\6\11\1\u0462\6\11\1\0\5\11\1\0\3\11\4\0"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\1\u0499\14\11\1\0\5\11\1\0\3\11\4\0"+ "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\2\11\1\u043d\12\11\1\0"+ + "\1\112\1\0\6\11\3\0\6\11\1\u0449\6\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\2\11\1\u0463\12\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\16\136\4\0"+ - "\5\136\2\0\3\136\1\u0464\12\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\12\136\1\u0465\3\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\13\136\1\u0466\2\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\10\136\1\u0467"+ - "\5\136\4\0\5\136\2\0\16\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\10\136\1\u0468"+ - "\5\136\4\0\5\136\2\0\16\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\51\0\1\u0469\127\0"+ - "\1\u046a\45\0\16\11\1\0\1\111\1\0\6\11\1\u046b"+ - "\2\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\7\11\1\u046c\5\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\6\11\1\u046d\7\11\1\0\1\111\1\0\6\11"+ - "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\12\11\1\u046e\2\11\1\0\5\11"+ - "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\1\u046f"+ - "\14\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\6\11\1\u042a\6\11\1\0\5\11\1\0"+ + "\11\11\47\0\1\u049a\61\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\12\11\1\u049b\2\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\10\11\1\u0470\5\11\1\0\1\111\1\0\6\11\3\0"+ + "\10\11\1\u049c\5\11\1\0\1\112\1\0\6\11\3\0"+ "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\56\0\1\u0471\52\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\15\11\1\0\1\u0472\4\11"+ + "\1\11\1\0\11\11\56\0\1\u049d\52\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\15\11\1\0\1\u049e\4\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\11\11"+ - "\1\u0473\3\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\10\11\1\u0474\4\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\11\11"+ + "\1\u049f\3\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\10\11\1\u04a0\4\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\15\11"+ - "\1\0\2\11\1\u0475\2\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\10\136\1\u0476\5\136"+ - "\4\0\5\136\2\0\16\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\13\136\1\u0477\2\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\13\0\16\136\4\0\5\136"+ - "\2\0\13\136\1\u0478\2\136\1\0\11\136\3\0\3\136"+ - "\1\0\1\136\1\0\11\136\55\0\1\u0479\150\0\1\u047a"+ - "\61\0\1\u047b\54\0\16\11\1\0\1\111\1\0\6\11"+ - "\3\0\7\11\1\u047c\5\11\1\0\5\11\1\0\3\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\15\11"+ + "\1\0\2\11\1\u04a1\2\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\10\137\1\u04a2\5\137"+ + "\4\0\5\137\2\0\16\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\13\137\1\u04a3\2\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\13\137\1\u04a4\2\137\1\0\11\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\55\0\1\u04a5\53\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\5\11\1\u04a6\7\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\11\11\1\u04a7\3\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\110\0\1\u04a8"+ + "\61\0\1\u04a9\54\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\7\11\1\u04aa\5\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\2\11"+ - "\1\u0440\13\11\1\0\1\111\1\0\6\11\3\0\15\11"+ + "\1\u0460\13\11\1\0\1\112\1\0\6\11\3\0\15\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\10\11\1\u047d\5\11\1\0\1\111"+ + "\1\0\11\11\13\0\10\11\1\u04ab\5\11\1\0\1\112"+ "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\1\u047e\14\11\1\0"+ + "\1\0\1\112\1\0\6\11\3\0\1\u04ac\14\11\1\0"+ "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\1\u047f\14\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\64\0\1\u0480\44\0\10\11"+ - "\1\u0481\5\11\1\0\1\111\1\0\6\11\3\0\15\11"+ + "\11\11\56\0\1\u04ad\52\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\13\11\1\u04ae\1\11\1\0\5\11\1\0"+ + "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\1\u04af\14\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\10\11\1\u0482\5\11\1\0\1\111"+ - "\1\0\6\11\3\0\15\11\1\0\5\11\1\0\3\11"+ - "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ - "\1\0\1\111\1\0\6\11\3\0\5\11\1\u0483\7\11"+ + "\1\0\11\11\64\0\1\u04b0\44\0\10\11\1\u04b1\5\11"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\10\11\1\u04b2\5\11\1\0\1\112\1\0\6\11"+ + "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\5\11\1\u04b3\7\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\1\u04b4\2\0"+ + "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\137\4\0\5\137\2\0"+ + "\14\137\1\u04b5\1\137\1\0\11\137\3\0\3\137\1\0"+ + "\1\137\1\0\11\137\13\0\16\137\4\0\5\137\2\0"+ + "\1\137\1\u04b6\14\137\1\0\11\137\3\0\3\137\1\0"+ + "\1\137\1\0\11\137\13\0\16\137\4\0\5\137\2\0"+ + "\1\137\1\u04b7\14\137\1\0\11\137\3\0\3\137\1\0"+ + "\1\137\1\0\11\137\15\0\1\u04b8\113\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\6\11\1\u04b9\6\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\13\0\16\11\1\0\1\112\1\0\6\11\3\0"+ + "\14\11\1\u04ba\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\111\0\1\u04bb\53\0\1\u04bc"+ + "\61\0\10\11\1\u04bd\5\11\1\0\1\112\1\0\6\11"+ + "\3\0\15\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\13\11\1\u04be\1\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\3\0\6\11"+ + "\1\u040d\6\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\64\0\1\u04bf\44\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\7\11\1\u0482\5\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\1\u0484\2\0\15\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\16\136\4\0"+ - "\5\136\2\0\14\136\1\u0485\1\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\1\136\1\u0486\14\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\13\0\16\136\4\0"+ - "\5\136\2\0\1\136\1\u0487\14\136\1\0\11\136\3\0"+ - "\3\136\1\0\1\136\1\0\11\136\15\0\1\u0488\211\0"+ - "\1\u0489\53\0\1\u048a\61\0\10\11\1\u048b\5\11\1\0"+ - "\1\111\1\0\6\11\3\0\15\11\1\0\5\11\1\0"+ + "\1\0\11\11\13\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\15\11\1\0\3\11\1\u04c0\1\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\53\0\1\u04c1"+ + "\55\0\16\11\1\0\1\112\1\0\6\11\3\0\1\u04c2"+ + "\14\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\12\11\1\u04c3\2\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\13\11\1\u048c"+ - "\1\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\13\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\6\11\1\u03f5\6\11\1\0\5\11\1\0"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\12\11\1\u04c4"+ + "\2\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\54\0\1\u04c5\54\0\16\137\4\0"+ + "\5\137\2\0\12\137\1\u04c6\3\137\1\0\11\137\3\0"+ + "\3\137\1\0\1\137\1\0\11\137\13\0\16\137\4\0"+ + "\5\137\2\0\16\137\1\0\1\u04c7\10\137\3\0\3\137"+ + "\1\0\1\137\1\0\11\137\13\0\16\137\4\0\5\137"+ + "\2\0\16\137\1\0\1\u04c8\10\137\3\0\3\137\1\0"+ + "\1\137\1\0\11\137\60\0\1\u04c9\50\0\16\11\1\0"+ + "\1\112\1\0\6\11\3\0\1\11\1\u04ca\13\11\1\0"+ + "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ + "\11\11\56\0\1\u04cb\52\0\16\11\1\0\1\112\1\0"+ + "\6\11\3\0\6\11\1\u04cc\6\11\1\0\5\11\1\0"+ "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\15\11\1\0"+ - "\3\11\1\u048d\1\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\53\0\1\u048e\55\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\1\u048f\14\11\1\0\5\11"+ + "\16\11\1\0\1\112\1\0\6\11\3\0\11\11\1\u04cd"+ + "\3\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\53\0\1\u04ce\55\0\16\11\1\0"+ + "\1\112\1\0\6\11\1\u04cf\2\0\15\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\12\11"+ - "\1\u0490\2\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\12\11\1\u0491\2\11\1\0\5\11"+ + "\13\0\16\11\1\0\1\112\1\0\6\11\1\u04d0\2\0"+ + "\15\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ + "\1\11\1\0\11\11\13\0\16\11\1\0\1\112\1\0"+ + "\6\11\1\u04d1\2\0\15\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\15\11\1\0\2\11"+ + "\1\u04d2\2\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\47\0\1\u04d3\61\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\6\11\1\u04d4\6\11\1\0\5\11"+ + "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ + "\64\0\1\u04d5\44\0\16\11\1\0\1\112\1\0\6\11"+ + "\3\0\7\11\1\u04d6\5\11\1\0\5\11\1\0\3\11"+ + "\4\0\2\11\1\0\1\11\1\0\11\11\13\0\6\11"+ + "\1\u04d7\7\11\1\0\1\112\1\0\6\11\3\0\15\11"+ + "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ + "\1\0\11\11\54\0\1\u04d8\115\0\1\u04d9\115\0\1\u04da"+ + "\117\0\1\u04db\112\0\1\u04dc\55\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\6\11\1\u04dd\6\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\54\0\1\u0492\54\0\16\136\4\0\5\136\2\0\12\136"+ - "\1\u0493\3\136\1\0\11\136\3\0\3\136\1\0\1\136"+ - "\1\0\11\136\13\0\16\136\4\0\5\136\2\0\16\136"+ - "\1\0\1\u0494\10\136\3\0\3\136\1\0\1\136\1\0"+ - "\11\136\13\0\16\136\4\0\5\136\2\0\16\136\1\0"+ - "\1\u0495\10\136\3\0\3\136\1\0\1\136\1\0\11\136"+ - "\60\0\1\u0496\113\0\1\u0497\52\0\16\11\1\0\1\111"+ - "\1\0\6\11\3\0\6\11\1\u0498\6\11\1\0\5\11"+ + "\47\0\1\u04de\115\0\1\u04df\115\0\1\u04e0\132\0\1\u04e1"+ + "\44\0\16\11\1\0\1\112\1\0\6\11\3\0\7\11"+ + "\1\u04e2\5\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\56\0\1\u04e3\115\0\1\u04e4"+ + "\115\0\1\u04e5\112\0\1\u04e6\55\0\16\11\1\0\1\112"+ + "\1\0\6\11\3\0\7\11\1\u04e7\5\11\1\0\5\11"+ "\1\0\3\11\4\0\2\11\1\0\1\11\1\0\11\11"+ - "\13\0\16\11\1\0\1\111\1\0\6\11\3\0\11\11"+ - "\1\u0499\3\11\1\0\5\11\1\0\3\11\4\0\2\11"+ - "\1\0\1\11\1\0\11\11\13\0\16\11\1\0\1\111"+ - "\1\0\6\11\1\u049a\2\0\15\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\13\0"+ - "\16\11\1\0\1\111\1\0\6\11\1\u049b\2\0\15\11"+ + "\64\0\1\u04e8\115\0\1\u04e9\115\0\1\u04ea\44\0\16\11"+ + "\1\0\1\112\1\0\6\11\3\0\13\11\1\u04eb\1\11"+ "\1\0\5\11\1\0\3\11\4\0\2\11\1\0\1\11"+ - "\1\0\11\11\13\0\16\11\1\0\1\111\1\0\6\11"+ - "\1\u049c\2\0\15\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\13\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\15\11\1\0\2\11\1\u049d"+ - "\2\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\47\0\1\u049e\132\0\1\u049f\44\0\16\11\1\0"+ - "\1\111\1\0\6\11\3\0\7\11\1\u04a0\5\11\1\0"+ - "\5\11\1\0\3\11\4\0\2\11\1\0\1\11\1\0"+ - "\11\11\13\0\6\11\1\u04a1\7\11\1\0\1\111\1\0"+ - "\6\11\3\0\15\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\54\0\1\u04a2\115\0"+ - "\1\u04a3\115\0\1\u04a4\117\0\1\u04a5\112\0\1\u04a6\55\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\6\11\1\u04a7"+ - "\6\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\47\0\1\u04a8\115\0\1\u04a9\115\0"+ - "\1\u04aa\132\0\1\u04ab\44\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\7\11\1\u04ac\5\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\56\0"+ - "\1\u04ad\115\0\1\u04ae\115\0\1\u04af\112\0\1\u04b0\55\0"+ - "\16\11\1\0\1\111\1\0\6\11\3\0\7\11\1\u04b1"+ - "\5\11\1\0\5\11\1\0\3\11\4\0\2\11\1\0"+ - "\1\11\1\0\11\11\64\0\1\u04b2\115\0\1\u04b3\115\0"+ - "\1\u04b4\44\0\16\11\1\0\1\111\1\0\6\11\3\0"+ - "\13\11\1\u04b5\1\11\1\0\5\11\1\0\3\11\4\0"+ - "\2\11\1\0\1\11\1\0\11\11\53\0\1\u04b6\115\0"+ - "\1\u04b7\115\0\1\u04b8\55\0\16\11\1\0\1\111\1\0"+ - "\6\11\3\0\7\11\1\u04b9\5\11\1\0\5\11\1\0"+ - "\3\11\4\0\2\11\1\0\1\11\1\0\11\11\12\0"; + "\1\0\11\11\53\0\1\u04ec\115\0\1\u04ed\115\0\1\u04ee"+ + "\55\0\16\11\1\0\1\112\1\0\6\11\3\0\7\11"+ + "\1\u04ef\5\11\1\0\5\11\1\0\3\11\4\0\2\11"+ + "\1\0\1\11\1\0\11\11\12\0"; private static int [] zzUnpackTrans() { - int [] result = new int[85020]; + int [] result = new int[88764]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -2843,33 +2964,36 @@ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\6\0\1\11\35\1\2\11\5\1\12\11\2\1\1\11"+ - "\2\1\2\11\1\0\1\1\2\11\1\0\7\1\1\0"+ - "\10\1\1\0\1\11\15\1\1\11\12\1\1\0\1\1"+ - "\2\0\54\1\6\0\3\11\1\1\6\11\2\1\1\0"+ - "\2\1\1\0\2\11\45\1\1\0\1\1\2\0\1\1"+ - "\2\0\60\1\1\11\1\0\1\11\1\0\1\11\2\1"+ - "\1\0\1\1\1\0\50\1\4\0\124\1\1\0\41\1"+ - "\1\0\17\1\1\0\31\1\1\0\36\1\1\0\42\1"+ - "\2\0\17\1\2\0\3\1\1\11\13\1\1\0\13\1"+ - "\1\0\36\1\1\0\1\11\1\0\43\1\1\0\1\11"+ - "\12\1\1\0\3\1\2\11\1\0\12\1\1\0\21\1"+ - "\1\0\34\1\1\0\1\11\13\1\1\0\10\1\1\0"+ - "\14\1\1\0\6\1\2\0\3\1\1\0\12\1\1\0"+ - "\45\1\1\0\7\1\1\0\16\1\1\0\2\1\1\0"+ - "\10\1\1\0\7\1\2\0\2\1\1\0\55\1\1\0"+ - "\11\1\1\0\11\1\1\0\5\1\2\0\42\1\2\0"+ - "\5\1\1\0\10\1\1\11\5\1\1\0\1\11\1\0"+ - "\31\1\2\0\1\11\13\1\2\11\5\1\1\0\20\1"+ - "\2\0\1\11\12\1\1\0\16\1\2\0\7\1\1\0"+ - "\11\1\3\0\5\1\1\0\7\1\3\0\4\1\1\0"+ - "\3\1\1\0\3\1\1\0\1\11\1\0\3\1\1\11"+ - "\3\1\1\0\3\1\1\11\1\0\2\1\3\0\1\1"+ - "\2\0\2\1\4\0\1\11\1\1\4\0\1\1\3\0"+ - "\1\11\1\1\3\0\1\1\3\11\1\1"; + "\6\0\1\11\35\1\2\11\1\1\1\11\4\1\12\11"+ + "\2\1\1\11\2\1\2\11\1\0\1\1\2\11\1\0"+ + "\7\1\1\0\10\1\1\0\1\11\15\1\1\11\12\1"+ + "\1\0\1\1\2\0\54\1\6\0\3\11\1\1\6\11"+ + "\2\1\1\0\2\1\1\0\2\11\45\1\1\0\1\1"+ + "\2\0\1\1\2\0\60\1\1\11\1\0\1\11\1\0"+ + "\1\11\2\1\1\0\1\1\1\0\50\1\4\0\125\1"+ + "\1\0\42\1\1\0\17\1\1\0\31\1\1\0\36\1"+ + "\1\0\44\1\2\0\17\1\2\0\3\1\1\11\13\1"+ + "\1\0\13\1\1\0\37\1\1\0\1\11\1\0\44\1"+ + "\1\0\1\11\12\1\1\0\3\1\2\11\1\0\12\1"+ + "\1\0\22\1\1\0\35\1\1\0\1\11\13\1\1\0"+ + "\12\1\1\0\14\1\1\0\6\1\2\0\3\1\1\0"+ + "\12\1\1\0\47\1\1\0\10\1\1\0\17\1\1\0"+ + "\2\1\1\0\10\1\1\0\7\1\2\0\2\1\1\0"+ + "\61\1\1\0\12\1\1\0\11\1\1\0\5\1\2\0"+ + "\46\1\2\0\5\1\1\0\10\1\1\11\5\1\1\0"+ + "\1\11\1\0\35\1\2\0\1\11\13\1\2\11\10\1"+ + "\1\0\20\1\1\0\1\1\1\0\1\11\12\1\1\0"+ + "\2\1\1\0\16\1\1\0\2\1\1\0\7\1\1\0"+ + "\2\1\1\0\11\1\1\0\2\1\2\0\4\1\1\0"+ + "\2\1\1\0\7\1\1\0\2\1\2\0\3\1\1\0"+ + "\2\1\1\0\3\1\1\0\3\1\1\0\2\1\1\11"+ + "\1\0\2\1\1\0\1\1\1\11\3\1\1\0\3\1"+ + "\1\11\1\1\1\0\2\1\1\11\3\0\1\1\1\0"+ + "\1\1\1\0\2\1\4\0\1\11\1\1\4\0\1\1"+ + "\3\0\1\11\1\1\3\0\1\1\3\11\1\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[1209]; + int [] result = new int[1263]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -2920,12 +3044,12 @@ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { private int yychar; /** - * the number of characters from the last newline up to the start of the + * the number of characters from the last newline up to the start of the * matched text */ private int yycolumn; - /** + /** * zzAtBOL == true <=> the scanner is currently at the beginning of a line */ private boolean zzAtBOL = true; @@ -2935,8 +3059,8 @@ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { /** denotes if the user-EOF-code has already been executed */ private boolean zzEOFDone; - - /** + + /** * The number of occupied positions in zzBuffer beyond zzEndRead. * When a lead/high surrogate has been read from the input stream * into the final zzBuffer position, this will have a value of 1; @@ -3125,7 +3249,7 @@ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { } - /** + /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table @@ -3148,7 +3272,7 @@ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { * Refills the input buffer. * * @return <code>false</code>, iff there was new input. - * + * * @exception java.io.IOException if any I/O-Error occurs */ private boolean zzRefill() throws java.io.IOException { @@ -3205,7 +3329,7 @@ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { return true; } - + /** * Closes the input stream. */ @@ -3222,13 +3346,13 @@ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { * Resets the scanner to read from a new input stream. * Does not close the old reader. * - * All internal variables are reset, the old input stream + * All internal variables are reset, the old input stream * <b>cannot</b> be reused (internal buffer is discarded and lost). * Lexical state is set to <tt>ZZ_INITIAL</tt>. * * Internal scan buffer is resized down to its initial length, if it has grown. * - * @param reader the new input stream + * @param reader the new input stream */ public final void yyreset(java.io.Reader reader) { zzReader = reader; @@ -3272,12 +3396,12 @@ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { /** - * Returns the character at position <tt>pos</tt> from the - * matched text. - * + * Returns the character at position <tt>pos</tt> from the + * matched text. + * * It is equivalent to yytext().charAt(pos), but faster * - * @param pos the position of the character to fetch. + * @param pos the position of the character to fetch. * A value from 0 to yylength()-1. * * @return the character at position pos @@ -3298,8 +3422,8 @@ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { /** * Reports an error that occured while scanning. * - * In a wellformed scanner (no or only correct usage of - * yypushback(int) and a match-all fallback rule) this method + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method * will only be called with things that "Can't Possibly Happen". * If this method is called, something is seriously wrong * (e.g. a JFlex bug producing a faulty scanner etc.). @@ -3319,7 +3443,7 @@ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { } throw new Error(message); - } + } /** @@ -3414,9 +3538,9 @@ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { zzEndReadL = zzEndRead; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; - if (eof) + if (eof) zzPeek = false; - else + else zzPeek = zzBufferL[zzMarkedPosL] == '\n'; } if (zzPeek) yyline--; @@ -3424,7 +3548,7 @@ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { zzAction = -1; zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - + zzState = ZZ_LEXSTATE[zzLexicalState]; // set up zzAction for empty match case: @@ -3436,7 +3560,7 @@ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { zzForAction: { while (true) { - + if (zzCurrentPosL < zzEndReadL) { zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); zzCurrentPosL += Character.charCount(zzInput); @@ -3487,135 +3611,139 @@ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { case YYINITIAL: { return newToken(EOF); } - case 1210: break; + case 1264: break; case PARAM_LIST_OR_ID: { yybegin(YYINITIAL); } - case 1211: break; + case 1265: break; case PARAM_LIST: { yybegin(YYINITIAL); } - case 1212: break; + case 1266: break; case ARRAY_DESCRIPTOR: { yybegin(YYINITIAL); } - case 1213: break; + case 1267: break; case STRING: { return invalidStringOrChar("Unterminated string literal"); } - case 1214: break; + case 1268: break; case CHAR: { return invalidStringOrChar("Unterminated character literal"); } - case 1215: break; + case 1269: break; default: return null; } } else { switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 1: + case 1: { return invalidToken("Invalid text"); } - case 141: break; - case 2: + case 149: break; + case 2: { return newToken(POSITIVE_INTEGER_LITERAL); } - case 142: break; - case 3: + case 150: break; + case 3: { return newToken(SIMPLE_NAME); } - case 143: break; - case 4: + case 151: break; + case 4: { return invalidToken("Invalid directive"); } - case 144: break; - case 5: + case 152: break; + case 5: { return newToken(PRIMITIVE_TYPE); } - case 145: break; - case 6: + case 153: break; + case 6: { yybegin(ARRAY_DESCRIPTOR); return newToken(ARRAY_TYPE_PREFIX); } - case 146: break; - case 7: + case 154: break; + case 7: { return newToken(WHITE_SPACE, true); } - case 147: break; - case 8: + case 155: break; + case 8: { beginStringOrChar(STRING); sb.append('"'); } - case 148: break; - case 9: + case 156: break; + case 9: { beginStringOrChar(CHAR); sb.append('\''); } - case 149: break; - case 10: + case 157: break; + case 10: + { return newToken(AT); + } + case 158: break; + case 11: { return newToken(LINE_COMMENT, true); } - case 150: break; - case 11: + case 159: break; + case 12: { return newToken(VOID_TYPE); } - case 151: break; - case 12: + case 160: break; + case 13: { return newToken(EQUAL); } - case 152: break; - case 13: + case 161: break; + case 14: { return newToken(COLON); } - case 153: break; - case 14: + case 162: break; + case 15: { return newToken(COMMA); } - case 154: break; - case 15: + case 163: break; + case 16: { return newToken(OPEN_BRACE); } - case 155: break; - case 16: + case 164: break; + case 17: { return newToken(CLOSE_BRACE); } - case 156: break; - case 17: + case 165: break; + case 18: { return newToken(OPEN_PAREN); } - case 157: break; - case 18: + case 166: break; + case 19: { return newToken(CLOSE_PAREN); } - case 158: break; - case 19: + case 167: break; + case 20: { yypushback(1); yybegin(YYINITIAL); } - case 159: break; - case 20: + case 168: break; + case 21: { return newToken(PARAM_LIST_OR_ID_PRIMITIVE_TYPE); } - case 160: break; - case 21: + case 169: break; + case 22: { return newToken(ARRAY_TYPE_PREFIX); } - case 161: break; - case 22: + case 170: break; + case 23: { yybegin(YYINITIAL); return newToken(PRIMITIVE_TYPE); } - case 162: break; - case 23: + case 171: break; + case 24: { sb.append(yytext()); } - case 163: break; - case 24: + case 172: break; + case 25: { sb.append('"'); return endStringOrChar(STRING_LITERAL); } - case 164: break; - case 25: + case 173: break; + case 26: { return invalidStringOrChar("Unterminated string literal"); } - case 165: break; - case 26: + case 174: break; + case 27: { sb.append('\''); if (sb.length() == 2) { return invalidStringOrChar("Empty character literal"); @@ -3625,470 +3753,498 @@ public class smaliFlexLexer implements TokenSource, LexerErrorInterface { return endStringOrChar(CHAR_LITERAL); } - case 166: break; - case 27: + case 175: break; + case 28: { return invalidStringOrChar("Unterminated character literal"); } - case 167: break; - case 28: + case 176: break; + case 29: { return newToken(FLOAT_LITERAL_OR_ID); } - case 168: break; - case 29: + case 177: break; + case 30: { return newToken(BYTE_LITERAL); } - case 169: break; - case 30: + case 178: break; + case 31: { return newToken(DOUBLE_LITERAL); } - case 170: break; - case 31: + case 179: break; + case 32: { return newToken(LONG_LITERAL); } - case 171: break; - case 32: + case 180: break; + case 33: { return newToken(SHORT_LITERAL); } - case 172: break; - case 33: + case 181: break; + case 34: { return newToken(DOUBLE_LITERAL_OR_ID); } - case 173: break; - case 34: + case 182: break; + case 35: { return newToken(NEGATIVE_INTEGER_LITERAL); } - case 174: break; - case 35: + case 183: break; + case 36: { return newToken(ARROW); } - case 175: break; - case 36: + case 184: break; + case 37: { return newToken(DOTDOT); } - case 176: break; - case 37: + case 185: break; + case 38: { // go back and re-lex it as a PARAM_LIST_OR_ID yypushback(yylength()); yybegin(PARAM_LIST_OR_ID); } - case 177: break; - case 38: + case 186: break; + case 39: { return newToken(REGISTER); } - case 178: break; - case 39: + case 187: break; + case 40: { sb.append(yytext()); setStringOrCharError("Invalid escape sequence " + yytext()); } - case 179: break; - case 40: + case 188: break; + case 41: { sb.append('\b'); } - case 180: break; - case 41: + case 189: break; + case 42: { sb.append('\f'); } - case 181: break; - case 42: + case 190: break; + case 43: { sb.append(yytext()); setStringOrCharError("Invalid \\u sequence. \\u must be followed by 4 hex digits"); } - case 182: break; - case 43: + case 191: break; + case 44: { sb.append('\r'); } - case 183: break; - case 44: + case 192: break; + case 45: { sb.append('\n'); } - case 184: break; - case 45: + case 193: break; + case 46: { sb.append('\t'); } - case 185: break; - case 46: + case 194: break; + case 47: { sb.append('"'); } - case 186: break; - case 47: + case 195: break; + case 48: { sb.append('\''); } - case 187: break; - case 48: + case 196: break; + case 49: { sb.append('\\'); } - case 188: break; - case 49: + case 197: break; + case 50: { sb.append(yytext()); setStringOrCharError("Invalid \\u sequence. \\u must be followed by exactly 4 hex digits"); } - case 189: break; - case 50: + case 198: break; + case 51: { return newToken(FLOAT_LITERAL); } - case 190: break; - case 51: + case 199: break; + case 52: { // go back and re-lex it as a PARAM_LIST yypushback(yylength()); yybegin(PARAM_LIST); } - case 191: break; - case 52: + case 200: break; + case 53: { return newToken(CLASS_DESCRIPTOR); } - case 192: break; - case 53: + case 201: break; + case 54: { return newToken(INSTRUCTION_FORMAT10x); } - case 193: break; - case 54: + case 202: break; + case 55: { return newToken(MEMBER_NAME); } - case 194: break; - case 55: + case 203: break; + case 56: { yybegin(YYINITIAL); return newToken(CLASS_DESCRIPTOR); } - case 195: break; - case 56: + case 204: break; + case 57: { return newToken(INSTRUCTION_FORMAT22c_FIELD); } - case 196: break; - case 57: + case 205: break; + case 58: { return newToken(INSTRUCTION_FORMAT23x); } - case 197: break; - case 58: + case 206: break; + case 59: { return newToken(INSTRUCTION_FORMAT21c_FIELD); } - case 198: break; - case 59: + case 207: break; + case 60: { return newToken(ACCESS_SPEC); } - case 199: break; - case 60: + case 208: break; + case 61: { return newToken(INSTRUCTION_FORMAT12x_OR_ID); } - case 200: break; - case 61: + case 209: break; + case 62: { return newToken(NULL_LITERAL); } - case 201: break; - case 62: + case 210: break; + case 63: { return newToken(BOOL_LITERAL); } - case 202: break; - case 63: + case 211: break; + case 64: { return newToken(INSTRUCTION_FORMAT10t); } - case 203: break; - case 64: + case 212: break; + case 65: { return newToken(ANNOTATION_VISIBILITY); } - case 204: break; - case 65: + case 213: break; + case 66: { return newToken(INSTRUCTION_FORMAT22t); } - case 205: break; - case 66: + case 214: break; + case 67: { return newToken(LINE_DIRECTIVE); } - case 206: break; - case 67: + case 215: break; + case 68: { return newToken(ENUM_DIRECTIVE); } - case 207: break; - case 68: + case 216: break; + case 69: { return newToken(INSTRUCTION_FORMAT31i_OR_ID); } - case 208: break; - case 69: + case 217: break; + case 70: { return newToken(INSTRUCTION_FORMAT11x); } - case 209: break; - case 70: + case 218: break; + case 71: { return newToken(INSTRUCTION_FORMAT21t); } - case 210: break; - case 71: + case 219: break; + case 72: { return newToken(FIELD_DIRECTIVE); } - case 211: break; - case 72: + case 220: break; + case 73: { return newToken(CLASS_DIRECTIVE); } - case 212: break; - case 73: + case 221: break; + case 74: { return newToken(CATCH_DIRECTIVE); } - case 213: break; - case 74: + case 222: break; + case 75: { return newToken(LOCAL_DIRECTIVE); } - case 214: break; - case 75: + case 223: break; + case 76: { return newToken(SUPER_DIRECTIVE); } - case 215: break; - case 76: + case 224: break; + case 77: { return newToken(PARAMETER_DIRECTIVE); } - case 216: break; - case 77: + case 225: break; + case 78: { sb.append((char)Integer.parseInt(yytext().substring(2,6), 16)); } - case 217: break; - case 78: + case 226: break; + case 79: { return newToken(LOCALS_DIRECTIVE); } - case 218: break; - case 79: + case 227: break; + case 80: { return newToken(SOURCE_DIRECTIVE); } - case 219: break; - case 80: + case 228: break; + case 81: { return newToken(METHOD_DIRECTIVE); } - case 220: break; - case 81: + case 229: break; + case 82: { return newToken(INSTRUCTION_FORMAT11n); } - case 221: break; - case 82: + case 230: break; + case 83: { return newToken(INSTRUCTION_FORMAT32x); } - case 222: break; - case 83: + case 231: break; + case 84: { return newToken(INSTRUCTION_FORMAT20t); } - case 223: break; - case 84: + case 232: break; + case 85: { return newToken(INSTRUCTION_FORMAT30t); } - case 224: break; - case 85: + case 233: break; + case 86: { return newToken(INSTRUCTION_FORMAT21s); } - case 225: break; - case 86: + case 234: break; + case 87: { return newToken(INSTRUCTION_FORMAT22s_OR_ID); } - case 226: break; - case 87: + case 235: break; + case 88: { return newToken(VERIFICATION_ERROR_TYPE); } - case 227: break; - case 88: + case 236: break; + case 89: { return newToken(FIELD_OFFSET); } - case 228: break; - case 89: + case 237: break; + case 90: { return newToken(CATCHALL_DIRECTIVE); } - case 229: break; - case 90: + case 238: break; + case 91: { return newToken(PROLOGUE_DIRECTIVE); } - case 230: break; - case 91: + case 239: break; + case 92: { return newToken(EPILOGUE_DIRECTIVE); } - case 231: break; - case 92: + case 240: break; + case 93: { return newToken(INSTRUCTION_FORMAT22c_TYPE); } - case 232: break; - case 93: + case 241: break; + case 94: { return newToken(INSTRUCTION_FORMAT22cs_FIELD); } - case 233: break; - case 94: + case 242: break; + case 95: { return newToken(INLINE_INDEX); } - case 234: break; - case 95: + case 243: break; + case 96: { return newToken(END_FIELD_DIRECTIVE); } - case 235: break; - case 96: + case 244: break; + case 97: { return newToken(END_LOCAL_DIRECTIVE); } - case 236: break; - case 97: + case 245: break; + case 98: { return newToken(END_PARAMETER_DIRECTIVE); } - case 237: break; - case 98: + case 246: break; + case 99: { return newToken(REGISTERS_DIRECTIVE); } - case 238: break; - case 99: + case 247: break; + case 100: { return newToken(INSTRUCTION_FORMAT51l); } - case 239: break; - case 100: + case 248: break; + case 101: { return newToken(INSTRUCTION_FORMAT21c_TYPE); } - case 240: break; - case 101: + case 249: break; + case 102: + { return newToken(METHOD_HANDLE_TYPE_FIELD); + } + case 250: break; + case 103: { return newToken(VTABLE_INDEX); } - case 241: break; - case 102: + case 251: break; + case 104: { return newToken(IMPLEMENTS_DIRECTIVE); } - case 242: break; - case 103: + case 252: break; + case 105: { return newToken(ARRAY_DATA_DIRECTIVE); } - case 243: break; - case 104: + case 253: break; + case 106: { return newToken(ANNOTATION_DIRECTIVE); } - case 244: break; - case 105: + case 254: break; + case 107: { return newToken(END_METHOD_DIRECTIVE); } - case 245: break; - case 106: + case 255: break; + case 108: { return newToken(INSTRUCTION_FORMAT22x); } - case 246: break; - case 107: + case 256: break; + case 109: { return newToken(INSTRUCTION_FORMAT22b); } - case 247: break; - case 108: + case 257: break; + case 110: { return newToken(INSTRUCTION_FORMAT35c_METHOD); } - case 248: break; - case 109: + case 258: break; + case 111: { return newToken(INSTRUCTION_FORMAT21c_STRING); } - case 249: break; - case 110: + case 259: break; + case 112: { return newToken(INSTRUCTION_FORMAT21ih); } - case 250: break; - case 111: + case 260: break; + case 113: { return newToken(INSTRUCTION_FORMAT22s); } - case 251: break; - case 112: + case 261: break; + case 114: { return newToken(INSTRUCTION_FORMAT12x); } - case 252: break; - case 113: + case 262: break; + case 115: { return newToken(INSTRUCTION_FORMAT22c_FIELD_ODEX); } - case 253: break; - case 114: + case 263: break; + case 116: + { return newToken(INSTRUCTION_FORMAT35c_CALL_SITE); + } + case 264: break; + case 117: + { return newToken(INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE); + } + case 265: break; + case 118: { return newToken(INSTRUCTION_FORMAT31i); } - case 254: break; - case 115: + case 266: break; + case 119: { return newToken(INSTRUCTION_FORMAT31t); } - case 255: break; - case 116: + case 267: break; + case 120: { return newToken(INSTRUCTION_FORMAT21c_FIELD_ODEX); } - case 256: break; - case 117: + case 268: break; + case 121: { return newToken(SUBANNOTATION_DIRECTIVE); } - case 257: break; - case 118: + case 269: break; + case 122: { return newToken(SPARSE_SWITCH_DIRECTIVE); } - case 258: break; - case 119: + case 270: break; + case 123: { return newToken(PACKED_SWITCH_DIRECTIVE); } - case 259: break; - case 120: + case 271: break; + case 124: { return newToken(RESTART_LOCAL_DIRECTIVE); } - case 260: break; - case 121: + case 272: break; + case 125: { return newToken(INSTRUCTION_FORMAT35mi_METHOD); } - case 261: break; - case 122: + case 273: break; + case 126: + { return newToken(METHOD_HANDLE_TYPE_METHOD); + } + case 274: break; + case 127: { return newToken(END_ARRAY_DATA_DIRECTIVE); } - case 262: break; - case 123: + case 275: break; + case 128: { return newToken(END_ANNOTATION_DIRECTIVE); } - case 263: break; - case 124: + case 276: break; + case 129: { return newToken(INSTRUCTION_FORMAT35c_TYPE); } - case 264: break; - case 125: + case 277: break; + case 130: + { return newToken(INSTRUCTION_FORMAT21c_METHOD_TYPE); + } + case 278: break; + case 131: { return newToken(INSTRUCTION_FORMAT21lh); } - case 265: break; - case 126: + case 279: break; + case 132: { return newToken(INSTRUCTION_FORMAT35ms_METHOD); } - case 266: break; - case 127: + case 280: break; + case 133: { return newToken(INSTRUCTION_FORMAT3rc_METHOD); } - case 267: break; - case 128: + case 281: break; + case 134: { return newToken(INSTRUCTION_FORMAT45cc_METHOD); } - case 268: break; - case 129: + case 282: break; + case 135: { return newToken(END_SUBANNOTATION_DIRECTIVE); } - case 269: break; - case 130: + case 283: break; + case 136: { return newToken(END_SPARSE_SWITCH_DIRECTIVE); } - case 270: break; - case 131: + case 284: break; + case 137: { return newToken(END_PACKED_SWITCH_DIRECTIVE); } - case 271: break; - case 132: + case 285: break; + case 138: { return newToken(INSTRUCTION_FORMAT31c); } - case 272: break; - case 133: + case 286: break; + case 139: + { return newToken(INSTRUCTION_FORMAT3rc_CALL_SITE); + } + case 287: break; + case 140: { return newToken(INSTRUCTION_FORMAT35c_METHOD_ODEX); } - case 273: break; - case 134: + case 288: break; + case 141: + { return newToken(INSTRUCTION_FORMAT21c_METHOD_HANDLE); + } + case 289: break; + case 142: { return newToken(INSTRUCTION_FORMAT10x_ODEX); } - case 274: break; - case 135: + case 290: break; + case 143: { return newToken(INSTRUCTION_FORMAT3rmi_METHOD); } - case 275: break; - case 136: + case 291: break; + case 144: { return newToken(INSTRUCTION_FORMAT3rc_TYPE); } - case 276: break; - case 137: + case 292: break; + case 145: { return newToken(INSTRUCTION_FORMAT3rms_METHOD); } - case 277: break; - case 138: + case 293: break; + case 146: { return newToken(INSTRUCTION_FORMAT4rcc_METHOD); } - case 278: break; - case 139: + case 294: break; + case 147: { return newToken(INSTRUCTION_FORMAT3rc_METHOD_ODEX); } - case 279: break; - case 140: + case 295: break; + case 148: { return newToken(INSTRUCTION_FORMAT20bc); } - case 280: break; + case 296: break; default: zzScanError(ZZ_NO_MATCH); } diff --git a/smali/src/main/java/org/jf/smali/smaliParser.java b/smali/src/main/java/org/jf/smali/smaliParser.java index 72ef0347..2159fc68 100644 --- a/smali/src/main/java/org/jf/smali/smaliParser.java +++ b/smali/src/main/java/org/jf/smali/smaliParser.java @@ -1,8 +1,7 @@ -// $ANTLR 3.5.2 smaliParser.g 2017-04-20 15:20:45 +// $ANTLR 3.5.2 smaliParser.g 2019-04-05 11:21:30 package org.jf.smali; -import org.jf.dexlib2.Format; import org.jf.dexlib2.Opcode; import org.jf.dexlib2.Opcodes; @@ -20,7 +19,7 @@ public class smaliParser extends Parser { public static final String[] tokenNames = new String[] { "<invalid>", "<EOR>", "<DOWN>", "<UP>", "ACCESS_SPEC", "ANNOTATION_DIRECTIVE", "ANNOTATION_VISIBILITY", "ARRAY_DATA_DIRECTIVE", "ARRAY_TYPE_PREFIX", - "ARROW", "BOOL_LITERAL", "BYTE_LITERAL", "CATCHALL_DIRECTIVE", "CATCH_DIRECTIVE", + "ARROW", "AT", "BOOL_LITERAL", "BYTE_LITERAL", "CATCHALL_DIRECTIVE", "CATCH_DIRECTIVE", "CHAR_LITERAL", "CLASS_DESCRIPTOR", "CLASS_DIRECTIVE", "CLOSE_BRACE", "CLOSE_PAREN", "COLON", "COMMA", "DOTDOT", "DOUBLE_LITERAL", "DOUBLE_LITERAL_OR_ID", "END_ANNOTATION_DIRECTIVE", "END_ARRAY_DATA_DIRECTIVE", "END_FIELD_DIRECTIVE", @@ -31,49 +30,54 @@ public class smaliParser extends Parser { "INSTRUCTION_FORMAT10t", "INSTRUCTION_FORMAT10x", "INSTRUCTION_FORMAT10x_ODEX", "INSTRUCTION_FORMAT11n", "INSTRUCTION_FORMAT11x", "INSTRUCTION_FORMAT12x", "INSTRUCTION_FORMAT12x_OR_ID", "INSTRUCTION_FORMAT20bc", "INSTRUCTION_FORMAT20t", - "INSTRUCTION_FORMAT21c_FIELD", "INSTRUCTION_FORMAT21c_FIELD_ODEX", "INSTRUCTION_FORMAT21c_STRING", - "INSTRUCTION_FORMAT21c_TYPE", "INSTRUCTION_FORMAT21ih", "INSTRUCTION_FORMAT21lh", - "INSTRUCTION_FORMAT21s", "INSTRUCTION_FORMAT21t", "INSTRUCTION_FORMAT22b", - "INSTRUCTION_FORMAT22c_FIELD", "INSTRUCTION_FORMAT22c_FIELD_ODEX", "INSTRUCTION_FORMAT22c_TYPE", - "INSTRUCTION_FORMAT22cs_FIELD", "INSTRUCTION_FORMAT22s", "INSTRUCTION_FORMAT22s_OR_ID", - "INSTRUCTION_FORMAT22t", "INSTRUCTION_FORMAT22x", "INSTRUCTION_FORMAT23x", - "INSTRUCTION_FORMAT30t", "INSTRUCTION_FORMAT31c", "INSTRUCTION_FORMAT31i", - "INSTRUCTION_FORMAT31i_OR_ID", "INSTRUCTION_FORMAT31t", "INSTRUCTION_FORMAT32x", - "INSTRUCTION_FORMAT35c_METHOD", "INSTRUCTION_FORMAT35c_METHOD_ODEX", "INSTRUCTION_FORMAT35c_TYPE", - "INSTRUCTION_FORMAT35mi_METHOD", "INSTRUCTION_FORMAT35ms_METHOD", "INSTRUCTION_FORMAT3rc_METHOD", - "INSTRUCTION_FORMAT3rc_METHOD_ODEX", "INSTRUCTION_FORMAT3rc_TYPE", "INSTRUCTION_FORMAT3rmi_METHOD", - "INSTRUCTION_FORMAT3rms_METHOD", "INSTRUCTION_FORMAT45cc_METHOD", "INSTRUCTION_FORMAT4rcc_METHOD", - "INSTRUCTION_FORMAT51l", "INTEGER_LITERAL", "INVALID_TOKEN", "I_ACCESS_LIST", - "I_ANNOTATION", "I_ANNOTATIONS", "I_ANNOTATION_ELEMENT", "I_ARRAY_ELEMENTS", - "I_ARRAY_ELEMENT_SIZE", "I_CATCH", "I_CATCHALL", "I_CATCHES", "I_CLASS_DEF", + "INSTRUCTION_FORMAT21c_FIELD", "INSTRUCTION_FORMAT21c_FIELD_ODEX", "INSTRUCTION_FORMAT21c_METHOD_HANDLE", + "INSTRUCTION_FORMAT21c_METHOD_TYPE", "INSTRUCTION_FORMAT21c_STRING", "INSTRUCTION_FORMAT21c_TYPE", + "INSTRUCTION_FORMAT21ih", "INSTRUCTION_FORMAT21lh", "INSTRUCTION_FORMAT21s", + "INSTRUCTION_FORMAT21t", "INSTRUCTION_FORMAT22b", "INSTRUCTION_FORMAT22c_FIELD", + "INSTRUCTION_FORMAT22c_FIELD_ODEX", "INSTRUCTION_FORMAT22c_TYPE", "INSTRUCTION_FORMAT22cs_FIELD", + "INSTRUCTION_FORMAT22s", "INSTRUCTION_FORMAT22s_OR_ID", "INSTRUCTION_FORMAT22t", + "INSTRUCTION_FORMAT22x", "INSTRUCTION_FORMAT23x", "INSTRUCTION_FORMAT30t", + "INSTRUCTION_FORMAT31c", "INSTRUCTION_FORMAT31i", "INSTRUCTION_FORMAT31i_OR_ID", + "INSTRUCTION_FORMAT31t", "INSTRUCTION_FORMAT32x", "INSTRUCTION_FORMAT35c_CALL_SITE", + "INSTRUCTION_FORMAT35c_METHOD", "INSTRUCTION_FORMAT35c_METHOD_ODEX", "INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE", + "INSTRUCTION_FORMAT35c_TYPE", "INSTRUCTION_FORMAT35mi_METHOD", "INSTRUCTION_FORMAT35ms_METHOD", + "INSTRUCTION_FORMAT3rc_CALL_SITE", "INSTRUCTION_FORMAT3rc_METHOD", "INSTRUCTION_FORMAT3rc_METHOD_ODEX", + "INSTRUCTION_FORMAT3rc_TYPE", "INSTRUCTION_FORMAT3rmi_METHOD", "INSTRUCTION_FORMAT3rms_METHOD", + "INSTRUCTION_FORMAT45cc_METHOD", "INSTRUCTION_FORMAT4rcc_METHOD", "INSTRUCTION_FORMAT51l", + "INTEGER_LITERAL", "INVALID_TOKEN", "I_ACCESS_LIST", "I_ANNOTATION", "I_ANNOTATIONS", + "I_ANNOTATION_ELEMENT", "I_ARRAY_ELEMENTS", "I_ARRAY_ELEMENT_SIZE", "I_CALL_SITE_EXTRA_ARGUMENTS", + "I_CALL_SITE_REFERENCE", "I_CATCH", "I_CATCHALL", "I_CATCHES", "I_CLASS_DEF", "I_ENCODED_ARRAY", "I_ENCODED_ENUM", "I_ENCODED_FIELD", "I_ENCODED_METHOD", - "I_END_LOCAL", "I_EPILOGUE", "I_FIELD", "I_FIELDS", "I_FIELD_INITIAL_VALUE", - "I_FIELD_TYPE", "I_IMPLEMENTS", "I_LABEL", "I_LINE", "I_LOCAL", "I_LOCALS", - "I_METHOD", "I_METHODS", "I_METHOD_PROTOTYPE", "I_METHOD_RETURN_TYPE", - "I_ORDERED_METHOD_ITEMS", "I_PACKED_SWITCH_ELEMENTS", "I_PACKED_SWITCH_START_KEY", - "I_PARAMETER", "I_PARAMETERS", "I_PARAMETER_NOT_SPECIFIED", "I_PROLOGUE", - "I_REGISTERS", "I_REGISTER_LIST", "I_REGISTER_RANGE", "I_RESTART_LOCAL", + "I_ENCODED_METHOD_HANDLE", "I_END_LOCAL", "I_EPILOGUE", "I_FIELD", "I_FIELDS", + "I_FIELD_INITIAL_VALUE", "I_FIELD_TYPE", "I_IMPLEMENTS", "I_LABEL", "I_LINE", + "I_LOCAL", "I_LOCALS", "I_METHOD", "I_METHODS", "I_METHOD_PROTOTYPE", + "I_METHOD_RETURN_TYPE", "I_ORDERED_METHOD_ITEMS", "I_PACKED_SWITCH_ELEMENTS", + "I_PACKED_SWITCH_START_KEY", "I_PARAMETER", "I_PARAMETERS", "I_PARAMETER_NOT_SPECIFIED", + "I_PROLOGUE", "I_REGISTERS", "I_REGISTER_LIST", "I_REGISTER_RANGE", "I_RESTART_LOCAL", "I_SOURCE", "I_SPARSE_SWITCH_ELEMENTS", "I_STATEMENT_ARRAY_DATA", "I_STATEMENT_FORMAT10t", "I_STATEMENT_FORMAT10x", "I_STATEMENT_FORMAT11n", "I_STATEMENT_FORMAT11x", "I_STATEMENT_FORMAT12x", "I_STATEMENT_FORMAT20bc", "I_STATEMENT_FORMAT20t", - "I_STATEMENT_FORMAT21c_FIELD", "I_STATEMENT_FORMAT21c_STRING", "I_STATEMENT_FORMAT21c_TYPE", + "I_STATEMENT_FORMAT21c_FIELD", "I_STATEMENT_FORMAT21c_METHOD_HANDLE", + "I_STATEMENT_FORMAT21c_METHOD_TYPE", "I_STATEMENT_FORMAT21c_STRING", "I_STATEMENT_FORMAT21c_TYPE", "I_STATEMENT_FORMAT21ih", "I_STATEMENT_FORMAT21lh", "I_STATEMENT_FORMAT21s", "I_STATEMENT_FORMAT21t", "I_STATEMENT_FORMAT22b", "I_STATEMENT_FORMAT22c_FIELD", "I_STATEMENT_FORMAT22c_TYPE", "I_STATEMENT_FORMAT22s", "I_STATEMENT_FORMAT22t", "I_STATEMENT_FORMAT22x", "I_STATEMENT_FORMAT23x", "I_STATEMENT_FORMAT30t", "I_STATEMENT_FORMAT31c", "I_STATEMENT_FORMAT31i", "I_STATEMENT_FORMAT31t", - "I_STATEMENT_FORMAT32x", "I_STATEMENT_FORMAT35c_METHOD", "I_STATEMENT_FORMAT35c_TYPE", - "I_STATEMENT_FORMAT3rc_METHOD", "I_STATEMENT_FORMAT3rc_TYPE", "I_STATEMENT_FORMAT45cc_METHOD", - "I_STATEMENT_FORMAT4rcc_METHOD", "I_STATEMENT_FORMAT51l", "I_STATEMENT_PACKED_SWITCH", - "I_STATEMENT_SPARSE_SWITCH", "I_SUBANNOTATION", "I_SUPER", "LINE_COMMENT", - "LINE_DIRECTIVE", "LOCALS_DIRECTIVE", "LOCAL_DIRECTIVE", "LONG_LITERAL", - "MEMBER_NAME", "METHOD_DIRECTIVE", "NEGATIVE_INTEGER_LITERAL", "NULL_LITERAL", - "OPEN_BRACE", "OPEN_PAREN", "PACKED_SWITCH_DIRECTIVE", "PARAMETER_DIRECTIVE", - "PARAM_LIST_OR_ID_PRIMITIVE_TYPE", "POSITIVE_INTEGER_LITERAL", "PRIMITIVE_TYPE", - "PROLOGUE_DIRECTIVE", "REGISTER", "REGISTERS_DIRECTIVE", "RESTART_LOCAL_DIRECTIVE", - "SHORT_LITERAL", "SIMPLE_NAME", "SOURCE_DIRECTIVE", "SPARSE_SWITCH_DIRECTIVE", - "STRING_LITERAL", "SUBANNOTATION_DIRECTIVE", "SUPER_DIRECTIVE", "VERIFICATION_ERROR_TYPE", - "VOID_TYPE", "VTABLE_INDEX", "WHITE_SPACE" + "I_STATEMENT_FORMAT32x", "I_STATEMENT_FORMAT35c_CALL_SITE", "I_STATEMENT_FORMAT35c_METHOD", + "I_STATEMENT_FORMAT35c_TYPE", "I_STATEMENT_FORMAT3rc_CALL_SITE", "I_STATEMENT_FORMAT3rc_METHOD", + "I_STATEMENT_FORMAT3rc_TYPE", "I_STATEMENT_FORMAT45cc_METHOD", "I_STATEMENT_FORMAT4rcc_METHOD", + "I_STATEMENT_FORMAT51l", "I_STATEMENT_PACKED_SWITCH", "I_STATEMENT_SPARSE_SWITCH", + "I_SUBANNOTATION", "I_SUPER", "LINE_COMMENT", "LINE_DIRECTIVE", "LOCALS_DIRECTIVE", + "LOCAL_DIRECTIVE", "LONG_LITERAL", "MEMBER_NAME", "METHOD_DIRECTIVE", + "METHOD_HANDLE_TYPE_FIELD", "METHOD_HANDLE_TYPE_METHOD", "NEGATIVE_INTEGER_LITERAL", + "NULL_LITERAL", "OPEN_BRACE", "OPEN_PAREN", "PACKED_SWITCH_DIRECTIVE", + "PARAMETER_DIRECTIVE", "PARAM_LIST_OR_ID_PRIMITIVE_TYPE", "POSITIVE_INTEGER_LITERAL", + "PRIMITIVE_TYPE", "PROLOGUE_DIRECTIVE", "REGISTER", "REGISTERS_DIRECTIVE", + "RESTART_LOCAL_DIRECTIVE", "SHORT_LITERAL", "SIMPLE_NAME", "SOURCE_DIRECTIVE", + "SPARSE_SWITCH_DIRECTIVE", "STRING_LITERAL", "SUBANNOTATION_DIRECTIVE", + "SUPER_DIRECTIVE", "VERIFICATION_ERROR_TYPE", "VOID_TYPE", "VTABLE_INDEX", + "WHITE_SPACE" }; public static final int EOF=-1; public static final int ACCESS_SPEC=4; @@ -82,197 +86,212 @@ public class smaliParser extends Parser { public static final int ARRAY_DATA_DIRECTIVE=7; public static final int ARRAY_TYPE_PREFIX=8; public static final int ARROW=9; - public static final int BOOL_LITERAL=10; - public static final int BYTE_LITERAL=11; - public static final int CATCHALL_DIRECTIVE=12; - public static final int CATCH_DIRECTIVE=13; - public static final int CHAR_LITERAL=14; - public static final int CLASS_DESCRIPTOR=15; - public static final int CLASS_DIRECTIVE=16; - public static final int CLOSE_BRACE=17; - public static final int CLOSE_PAREN=18; - public static final int COLON=19; - public static final int COMMA=20; - public static final int DOTDOT=21; - public static final int DOUBLE_LITERAL=22; - public static final int DOUBLE_LITERAL_OR_ID=23; - public static final int END_ANNOTATION_DIRECTIVE=24; - public static final int END_ARRAY_DATA_DIRECTIVE=25; - public static final int END_FIELD_DIRECTIVE=26; - public static final int END_LOCAL_DIRECTIVE=27; - public static final int END_METHOD_DIRECTIVE=28; - public static final int END_PACKED_SWITCH_DIRECTIVE=29; - public static final int END_PARAMETER_DIRECTIVE=30; - public static final int END_SPARSE_SWITCH_DIRECTIVE=31; - public static final int END_SUBANNOTATION_DIRECTIVE=32; - public static final int ENUM_DIRECTIVE=33; - public static final int EPILOGUE_DIRECTIVE=34; - public static final int EQUAL=35; - public static final int FIELD_DIRECTIVE=36; - public static final int FIELD_OFFSET=37; - public static final int FLOAT_LITERAL=38; - public static final int FLOAT_LITERAL_OR_ID=39; - public static final int IMPLEMENTS_DIRECTIVE=40; - public static final int INLINE_INDEX=41; - public static final int INSTRUCTION_FORMAT10t=42; - public static final int INSTRUCTION_FORMAT10x=43; - public static final int INSTRUCTION_FORMAT10x_ODEX=44; - public static final int INSTRUCTION_FORMAT11n=45; - public static final int INSTRUCTION_FORMAT11x=46; - public static final int INSTRUCTION_FORMAT12x=47; - public static final int INSTRUCTION_FORMAT12x_OR_ID=48; - public static final int INSTRUCTION_FORMAT20bc=49; - public static final int INSTRUCTION_FORMAT20t=50; - public static final int INSTRUCTION_FORMAT21c_FIELD=51; - public static final int INSTRUCTION_FORMAT21c_FIELD_ODEX=52; - public static final int INSTRUCTION_FORMAT21c_STRING=53; - public static final int INSTRUCTION_FORMAT21c_TYPE=54; - public static final int INSTRUCTION_FORMAT21ih=55; - public static final int INSTRUCTION_FORMAT21lh=56; - public static final int INSTRUCTION_FORMAT21s=57; - public static final int INSTRUCTION_FORMAT21t=58; - public static final int INSTRUCTION_FORMAT22b=59; - public static final int INSTRUCTION_FORMAT22c_FIELD=60; - public static final int INSTRUCTION_FORMAT22c_FIELD_ODEX=61; - public static final int INSTRUCTION_FORMAT22c_TYPE=62; - public static final int INSTRUCTION_FORMAT22cs_FIELD=63; - public static final int INSTRUCTION_FORMAT22s=64; - public static final int INSTRUCTION_FORMAT22s_OR_ID=65; - public static final int INSTRUCTION_FORMAT22t=66; - public static final int INSTRUCTION_FORMAT22x=67; - public static final int INSTRUCTION_FORMAT23x=68; - public static final int INSTRUCTION_FORMAT30t=69; - public static final int INSTRUCTION_FORMAT31c=70; - public static final int INSTRUCTION_FORMAT31i=71; - public static final int INSTRUCTION_FORMAT31i_OR_ID=72; - public static final int INSTRUCTION_FORMAT31t=73; - public static final int INSTRUCTION_FORMAT32x=74; - public static final int INSTRUCTION_FORMAT35c_METHOD=75; - public static final int INSTRUCTION_FORMAT35c_METHOD_ODEX=76; - public static final int INSTRUCTION_FORMAT35c_TYPE=77; - public static final int INSTRUCTION_FORMAT35mi_METHOD=78; - public static final int INSTRUCTION_FORMAT35ms_METHOD=79; - public static final int INSTRUCTION_FORMAT3rc_METHOD=80; - public static final int INSTRUCTION_FORMAT3rc_METHOD_ODEX=81; - public static final int INSTRUCTION_FORMAT3rc_TYPE=82; - public static final int INSTRUCTION_FORMAT3rmi_METHOD=83; - public static final int INSTRUCTION_FORMAT3rms_METHOD=84; - public static final int INSTRUCTION_FORMAT45cc_METHOD=85; - public static final int INSTRUCTION_FORMAT4rcc_METHOD=86; - public static final int INSTRUCTION_FORMAT51l=87; - public static final int INTEGER_LITERAL=88; - public static final int INVALID_TOKEN=89; - public static final int I_ACCESS_LIST=90; - public static final int I_ANNOTATION=91; - public static final int I_ANNOTATIONS=92; - public static final int I_ANNOTATION_ELEMENT=93; - public static final int I_ARRAY_ELEMENTS=94; - public static final int I_ARRAY_ELEMENT_SIZE=95; - public static final int I_CATCH=96; - public static final int I_CATCHALL=97; - public static final int I_CATCHES=98; - public static final int I_CLASS_DEF=99; - public static final int I_ENCODED_ARRAY=100; - public static final int I_ENCODED_ENUM=101; - public static final int I_ENCODED_FIELD=102; - public static final int I_ENCODED_METHOD=103; - public static final int I_END_LOCAL=104; - public static final int I_EPILOGUE=105; - public static final int I_FIELD=106; - public static final int I_FIELDS=107; - public static final int I_FIELD_INITIAL_VALUE=108; - public static final int I_FIELD_TYPE=109; - public static final int I_IMPLEMENTS=110; - public static final int I_LABEL=111; - public static final int I_LINE=112; - public static final int I_LOCAL=113; - public static final int I_LOCALS=114; - public static final int I_METHOD=115; - public static final int I_METHODS=116; - public static final int I_METHOD_PROTOTYPE=117; - public static final int I_METHOD_RETURN_TYPE=118; - public static final int I_ORDERED_METHOD_ITEMS=119; - public static final int I_PACKED_SWITCH_ELEMENTS=120; - public static final int I_PACKED_SWITCH_START_KEY=121; - public static final int I_PARAMETER=122; - public static final int I_PARAMETERS=123; - public static final int I_PARAMETER_NOT_SPECIFIED=124; - public static final int I_PROLOGUE=125; - public static final int I_REGISTERS=126; - public static final int I_REGISTER_LIST=127; - public static final int I_REGISTER_RANGE=128; - public static final int I_RESTART_LOCAL=129; - public static final int I_SOURCE=130; - public static final int I_SPARSE_SWITCH_ELEMENTS=131; - public static final int I_STATEMENT_ARRAY_DATA=132; - public static final int I_STATEMENT_FORMAT10t=133; - public static final int I_STATEMENT_FORMAT10x=134; - public static final int I_STATEMENT_FORMAT11n=135; - public static final int I_STATEMENT_FORMAT11x=136; - public static final int I_STATEMENT_FORMAT12x=137; - public static final int I_STATEMENT_FORMAT20bc=138; - public static final int I_STATEMENT_FORMAT20t=139; - public static final int I_STATEMENT_FORMAT21c_FIELD=140; - public static final int I_STATEMENT_FORMAT21c_STRING=141; - public static final int I_STATEMENT_FORMAT21c_TYPE=142; - public static final int I_STATEMENT_FORMAT21ih=143; - public static final int I_STATEMENT_FORMAT21lh=144; - public static final int I_STATEMENT_FORMAT21s=145; - public static final int I_STATEMENT_FORMAT21t=146; - public static final int I_STATEMENT_FORMAT22b=147; - public static final int I_STATEMENT_FORMAT22c_FIELD=148; - public static final int I_STATEMENT_FORMAT22c_TYPE=149; - public static final int I_STATEMENT_FORMAT22s=150; - public static final int I_STATEMENT_FORMAT22t=151; - public static final int I_STATEMENT_FORMAT22x=152; - public static final int I_STATEMENT_FORMAT23x=153; - public static final int I_STATEMENT_FORMAT30t=154; - public static final int I_STATEMENT_FORMAT31c=155; - public static final int I_STATEMENT_FORMAT31i=156; - public static final int I_STATEMENT_FORMAT31t=157; - public static final int I_STATEMENT_FORMAT32x=158; - public static final int I_STATEMENT_FORMAT35c_METHOD=159; - public static final int I_STATEMENT_FORMAT35c_TYPE=160; - public static final int I_STATEMENT_FORMAT3rc_METHOD=161; - public static final int I_STATEMENT_FORMAT3rc_TYPE=162; - public static final int I_STATEMENT_FORMAT45cc_METHOD=163; - public static final int I_STATEMENT_FORMAT4rcc_METHOD=164; - public static final int I_STATEMENT_FORMAT51l=165; - public static final int I_STATEMENT_PACKED_SWITCH=166; - public static final int I_STATEMENT_SPARSE_SWITCH=167; - public static final int I_SUBANNOTATION=168; - public static final int I_SUPER=169; - public static final int LINE_COMMENT=170; - public static final int LINE_DIRECTIVE=171; - public static final int LOCALS_DIRECTIVE=172; - public static final int LOCAL_DIRECTIVE=173; - public static final int LONG_LITERAL=174; - public static final int MEMBER_NAME=175; - public static final int METHOD_DIRECTIVE=176; - public static final int NEGATIVE_INTEGER_LITERAL=177; - public static final int NULL_LITERAL=178; - public static final int OPEN_BRACE=179; - public static final int OPEN_PAREN=180; - public static final int PACKED_SWITCH_DIRECTIVE=181; - public static final int PARAMETER_DIRECTIVE=182; - public static final int PARAM_LIST_OR_ID_PRIMITIVE_TYPE=183; - public static final int POSITIVE_INTEGER_LITERAL=184; - public static final int PRIMITIVE_TYPE=185; - public static final int PROLOGUE_DIRECTIVE=186; - public static final int REGISTER=187; - public static final int REGISTERS_DIRECTIVE=188; - public static final int RESTART_LOCAL_DIRECTIVE=189; - public static final int SHORT_LITERAL=190; - public static final int SIMPLE_NAME=191; - public static final int SOURCE_DIRECTIVE=192; - public static final int SPARSE_SWITCH_DIRECTIVE=193; - public static final int STRING_LITERAL=194; - public static final int SUBANNOTATION_DIRECTIVE=195; - public static final int SUPER_DIRECTIVE=196; - public static final int VERIFICATION_ERROR_TYPE=197; - public static final int VOID_TYPE=198; - public static final int VTABLE_INDEX=199; - public static final int WHITE_SPACE=200; + public static final int AT=10; + public static final int BOOL_LITERAL=11; + public static final int BYTE_LITERAL=12; + public static final int CATCHALL_DIRECTIVE=13; + public static final int CATCH_DIRECTIVE=14; + public static final int CHAR_LITERAL=15; + public static final int CLASS_DESCRIPTOR=16; + public static final int CLASS_DIRECTIVE=17; + public static final int CLOSE_BRACE=18; + public static final int CLOSE_PAREN=19; + public static final int COLON=20; + public static final int COMMA=21; + public static final int DOTDOT=22; + public static final int DOUBLE_LITERAL=23; + public static final int DOUBLE_LITERAL_OR_ID=24; + public static final int END_ANNOTATION_DIRECTIVE=25; + public static final int END_ARRAY_DATA_DIRECTIVE=26; + public static final int END_FIELD_DIRECTIVE=27; + public static final int END_LOCAL_DIRECTIVE=28; + public static final int END_METHOD_DIRECTIVE=29; + public static final int END_PACKED_SWITCH_DIRECTIVE=30; + public static final int END_PARAMETER_DIRECTIVE=31; + public static final int END_SPARSE_SWITCH_DIRECTIVE=32; + public static final int END_SUBANNOTATION_DIRECTIVE=33; + public static final int ENUM_DIRECTIVE=34; + public static final int EPILOGUE_DIRECTIVE=35; + public static final int EQUAL=36; + public static final int FIELD_DIRECTIVE=37; + public static final int FIELD_OFFSET=38; + public static final int FLOAT_LITERAL=39; + public static final int FLOAT_LITERAL_OR_ID=40; + public static final int IMPLEMENTS_DIRECTIVE=41; + public static final int INLINE_INDEX=42; + public static final int INSTRUCTION_FORMAT10t=43; + public static final int INSTRUCTION_FORMAT10x=44; + public static final int INSTRUCTION_FORMAT10x_ODEX=45; + public static final int INSTRUCTION_FORMAT11n=46; + public static final int INSTRUCTION_FORMAT11x=47; + public static final int INSTRUCTION_FORMAT12x=48; + public static final int INSTRUCTION_FORMAT12x_OR_ID=49; + public static final int INSTRUCTION_FORMAT20bc=50; + public static final int INSTRUCTION_FORMAT20t=51; + public static final int INSTRUCTION_FORMAT21c_FIELD=52; + public static final int INSTRUCTION_FORMAT21c_FIELD_ODEX=53; + public static final int INSTRUCTION_FORMAT21c_METHOD_HANDLE=54; + public static final int INSTRUCTION_FORMAT21c_METHOD_TYPE=55; + public static final int INSTRUCTION_FORMAT21c_STRING=56; + public static final int INSTRUCTION_FORMAT21c_TYPE=57; + public static final int INSTRUCTION_FORMAT21ih=58; + public static final int INSTRUCTION_FORMAT21lh=59; + public static final int INSTRUCTION_FORMAT21s=60; + public static final int INSTRUCTION_FORMAT21t=61; + public static final int INSTRUCTION_FORMAT22b=62; + public static final int INSTRUCTION_FORMAT22c_FIELD=63; + public static final int INSTRUCTION_FORMAT22c_FIELD_ODEX=64; + public static final int INSTRUCTION_FORMAT22c_TYPE=65; + public static final int INSTRUCTION_FORMAT22cs_FIELD=66; + public static final int INSTRUCTION_FORMAT22s=67; + public static final int INSTRUCTION_FORMAT22s_OR_ID=68; + public static final int INSTRUCTION_FORMAT22t=69; + public static final int INSTRUCTION_FORMAT22x=70; + public static final int INSTRUCTION_FORMAT23x=71; + public static final int INSTRUCTION_FORMAT30t=72; + public static final int INSTRUCTION_FORMAT31c=73; + public static final int INSTRUCTION_FORMAT31i=74; + public static final int INSTRUCTION_FORMAT31i_OR_ID=75; + public static final int INSTRUCTION_FORMAT31t=76; + public static final int INSTRUCTION_FORMAT32x=77; + public static final int INSTRUCTION_FORMAT35c_CALL_SITE=78; + public static final int INSTRUCTION_FORMAT35c_METHOD=79; + public static final int INSTRUCTION_FORMAT35c_METHOD_ODEX=80; + public static final int INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE=81; + public static final int INSTRUCTION_FORMAT35c_TYPE=82; + public static final int INSTRUCTION_FORMAT35mi_METHOD=83; + public static final int INSTRUCTION_FORMAT35ms_METHOD=84; + public static final int INSTRUCTION_FORMAT3rc_CALL_SITE=85; + public static final int INSTRUCTION_FORMAT3rc_METHOD=86; + public static final int INSTRUCTION_FORMAT3rc_METHOD_ODEX=87; + public static final int INSTRUCTION_FORMAT3rc_TYPE=88; + public static final int INSTRUCTION_FORMAT3rmi_METHOD=89; + public static final int INSTRUCTION_FORMAT3rms_METHOD=90; + public static final int INSTRUCTION_FORMAT45cc_METHOD=91; + public static final int INSTRUCTION_FORMAT4rcc_METHOD=92; + public static final int INSTRUCTION_FORMAT51l=93; + public static final int INTEGER_LITERAL=94; + public static final int INVALID_TOKEN=95; + public static final int I_ACCESS_LIST=96; + public static final int I_ANNOTATION=97; + public static final int I_ANNOTATIONS=98; + public static final int I_ANNOTATION_ELEMENT=99; + public static final int I_ARRAY_ELEMENTS=100; + public static final int I_ARRAY_ELEMENT_SIZE=101; + public static final int I_CALL_SITE_EXTRA_ARGUMENTS=102; + public static final int I_CALL_SITE_REFERENCE=103; + public static final int I_CATCH=104; + public static final int I_CATCHALL=105; + public static final int I_CATCHES=106; + public static final int I_CLASS_DEF=107; + public static final int I_ENCODED_ARRAY=108; + public static final int I_ENCODED_ENUM=109; + public static final int I_ENCODED_FIELD=110; + public static final int I_ENCODED_METHOD=111; + public static final int I_ENCODED_METHOD_HANDLE=112; + public static final int I_END_LOCAL=113; + public static final int I_EPILOGUE=114; + public static final int I_FIELD=115; + public static final int I_FIELDS=116; + public static final int I_FIELD_INITIAL_VALUE=117; + public static final int I_FIELD_TYPE=118; + public static final int I_IMPLEMENTS=119; + public static final int I_LABEL=120; + public static final int I_LINE=121; + public static final int I_LOCAL=122; + public static final int I_LOCALS=123; + public static final int I_METHOD=124; + public static final int I_METHODS=125; + public static final int I_METHOD_PROTOTYPE=126; + public static final int I_METHOD_RETURN_TYPE=127; + public static final int I_ORDERED_METHOD_ITEMS=128; + public static final int I_PACKED_SWITCH_ELEMENTS=129; + public static final int I_PACKED_SWITCH_START_KEY=130; + public static final int I_PARAMETER=131; + public static final int I_PARAMETERS=132; + public static final int I_PARAMETER_NOT_SPECIFIED=133; + public static final int I_PROLOGUE=134; + public static final int I_REGISTERS=135; + public static final int I_REGISTER_LIST=136; + public static final int I_REGISTER_RANGE=137; + public static final int I_RESTART_LOCAL=138; + public static final int I_SOURCE=139; + public static final int I_SPARSE_SWITCH_ELEMENTS=140; + public static final int I_STATEMENT_ARRAY_DATA=141; + public static final int I_STATEMENT_FORMAT10t=142; + public static final int I_STATEMENT_FORMAT10x=143; + public static final int I_STATEMENT_FORMAT11n=144; + public static final int I_STATEMENT_FORMAT11x=145; + public static final int I_STATEMENT_FORMAT12x=146; + public static final int I_STATEMENT_FORMAT20bc=147; + public static final int I_STATEMENT_FORMAT20t=148; + public static final int I_STATEMENT_FORMAT21c_FIELD=149; + public static final int I_STATEMENT_FORMAT21c_METHOD_HANDLE=150; + public static final int I_STATEMENT_FORMAT21c_METHOD_TYPE=151; + public static final int I_STATEMENT_FORMAT21c_STRING=152; + public static final int I_STATEMENT_FORMAT21c_TYPE=153; + public static final int I_STATEMENT_FORMAT21ih=154; + public static final int I_STATEMENT_FORMAT21lh=155; + public static final int I_STATEMENT_FORMAT21s=156; + public static final int I_STATEMENT_FORMAT21t=157; + public static final int I_STATEMENT_FORMAT22b=158; + public static final int I_STATEMENT_FORMAT22c_FIELD=159; + public static final int I_STATEMENT_FORMAT22c_TYPE=160; + public static final int I_STATEMENT_FORMAT22s=161; + public static final int I_STATEMENT_FORMAT22t=162; + public static final int I_STATEMENT_FORMAT22x=163; + public static final int I_STATEMENT_FORMAT23x=164; + public static final int I_STATEMENT_FORMAT30t=165; + public static final int I_STATEMENT_FORMAT31c=166; + public static final int I_STATEMENT_FORMAT31i=167; + public static final int I_STATEMENT_FORMAT31t=168; + public static final int I_STATEMENT_FORMAT32x=169; + public static final int I_STATEMENT_FORMAT35c_CALL_SITE=170; + public static final int I_STATEMENT_FORMAT35c_METHOD=171; + public static final int I_STATEMENT_FORMAT35c_TYPE=172; + public static final int I_STATEMENT_FORMAT3rc_CALL_SITE=173; + public static final int I_STATEMENT_FORMAT3rc_METHOD=174; + public static final int I_STATEMENT_FORMAT3rc_TYPE=175; + public static final int I_STATEMENT_FORMAT45cc_METHOD=176; + public static final int I_STATEMENT_FORMAT4rcc_METHOD=177; + public static final int I_STATEMENT_FORMAT51l=178; + public static final int I_STATEMENT_PACKED_SWITCH=179; + public static final int I_STATEMENT_SPARSE_SWITCH=180; + public static final int I_SUBANNOTATION=181; + public static final int I_SUPER=182; + public static final int LINE_COMMENT=183; + public static final int LINE_DIRECTIVE=184; + public static final int LOCALS_DIRECTIVE=185; + public static final int LOCAL_DIRECTIVE=186; + public static final int LONG_LITERAL=187; + public static final int MEMBER_NAME=188; + public static final int METHOD_DIRECTIVE=189; + public static final int METHOD_HANDLE_TYPE_FIELD=190; + public static final int METHOD_HANDLE_TYPE_METHOD=191; + public static final int NEGATIVE_INTEGER_LITERAL=192; + public static final int NULL_LITERAL=193; + public static final int OPEN_BRACE=194; + public static final int OPEN_PAREN=195; + public static final int PACKED_SWITCH_DIRECTIVE=196; + public static final int PARAMETER_DIRECTIVE=197; + public static final int PARAM_LIST_OR_ID_PRIMITIVE_TYPE=198; + public static final int POSITIVE_INTEGER_LITERAL=199; + public static final int PRIMITIVE_TYPE=200; + public static final int PROLOGUE_DIRECTIVE=201; + public static final int REGISTER=202; + public static final int REGISTERS_DIRECTIVE=203; + public static final int RESTART_LOCAL_DIRECTIVE=204; + public static final int SHORT_LITERAL=205; + public static final int SIMPLE_NAME=206; + public static final int SOURCE_DIRECTIVE=207; + public static final int SPARSE_SWITCH_DIRECTIVE=208; + public static final int STRING_LITERAL=209; + public static final int SUBANNOTATION_DIRECTIVE=210; + public static final int SUPER_DIRECTIVE=211; + public static final int VERIFICATION_ERROR_TYPE=212; + public static final int VOID_TYPE=213; + public static final int VTABLE_INDEX=214; + public static final int WHITE_SPACE=215; // delegates public Parser[] getDelegates() { @@ -480,7 +499,7 @@ public class smaliParser extends Parser { // $ANTLR start "smali_file" - // smaliParser.g:415:1: smali_file : ({...}? => class_spec |{...}? => super_spec | implements_spec |{...}? => source_spec | method | field | annotation )+ EOF -> ^( I_CLASS_DEF class_spec ( super_spec )? ( implements_spec )* ( source_spec )? ^( I_METHODS ( method )* ) ^( I_FIELDS ( field )* ) ) ; + // smaliParser.g:427:1: smali_file : ({...}? => class_spec |{...}? => super_spec | implements_spec |{...}? => source_spec | method | field | annotation )+ EOF -> ^( I_CLASS_DEF class_spec ( super_spec )? ( implements_spec )* ( source_spec )? ^( I_METHODS ( method )* ) ^( I_FIELDS ( field )* ) ) ; public final smaliParser.smali_file_return smali_file() throws RecognitionException { smali_file_stack.push(new smali_file_scope()); smaliParser.smali_file_return retval = new smaliParser.smali_file_return(); @@ -511,10 +530,10 @@ public class smaliParser extends Parser { smali_file_stack.peek().classAnnotations = new ArrayList<CommonTree>(); try { - // smaliParser.g:427:3: ( ({...}? => class_spec |{...}? => super_spec | implements_spec |{...}? => source_spec | method | field | annotation )+ EOF -> ^( I_CLASS_DEF class_spec ( super_spec )? ( implements_spec )* ( source_spec )? ^( I_METHODS ( method )* ) ^( I_FIELDS ( field )* ) ) ) - // smaliParser.g:428:3: ({...}? => class_spec |{...}? => super_spec | implements_spec |{...}? => source_spec | method | field | annotation )+ EOF + // smaliParser.g:439:3: ( ({...}? => class_spec |{...}? => super_spec | implements_spec |{...}? => source_spec | method | field | annotation )+ EOF -> ^( I_CLASS_DEF class_spec ( super_spec )? ( implements_spec )* ( source_spec )? ^( I_METHODS ( method )* ) ^( I_FIELDS ( field )* ) ) ) + // smaliParser.g:440:3: ({...}? => class_spec |{...}? => super_spec | implements_spec |{...}? => source_spec | method | field | annotation )+ EOF { - // smaliParser.g:428:3: ({...}? => class_spec |{...}? => super_spec | implements_spec |{...}? => source_spec | method | field | annotation )+ + // smaliParser.g:440:3: ({...}? => class_spec |{...}? => super_spec | implements_spec |{...}? => source_spec | method | field | annotation )+ int cnt1=0; loop1: while (true) { @@ -544,12 +563,12 @@ public class smaliParser extends Parser { switch (alt1) { case 1 : - // smaliParser.g:428:5: {...}? => class_spec + // smaliParser.g:440:5: {...}? => class_spec { if ( !((!smali_file_stack.peek().hasClassSpec)) ) { throw new FailedPredicateException(input, "smali_file", "!$smali_file::hasClassSpec"); } - pushFollow(FOLLOW_class_spec_in_smali_file1075); + pushFollow(FOLLOW_class_spec_in_smali_file1140); class_spec1=class_spec(); state._fsp--; @@ -558,12 +577,12 @@ public class smaliParser extends Parser { } break; case 2 : - // smaliParser.g:429:5: {...}? => super_spec + // smaliParser.g:441:5: {...}? => super_spec { if ( !((!smali_file_stack.peek().hasSuperSpec)) ) { throw new FailedPredicateException(input, "smali_file", "!$smali_file::hasSuperSpec"); } - pushFollow(FOLLOW_super_spec_in_smali_file1086); + pushFollow(FOLLOW_super_spec_in_smali_file1151); super_spec2=super_spec(); state._fsp--; @@ -572,9 +591,9 @@ public class smaliParser extends Parser { } break; case 3 : - // smaliParser.g:430:5: implements_spec + // smaliParser.g:442:5: implements_spec { - pushFollow(FOLLOW_implements_spec_in_smali_file1094); + pushFollow(FOLLOW_implements_spec_in_smali_file1159); implements_spec3=implements_spec(); state._fsp--; @@ -582,12 +601,12 @@ public class smaliParser extends Parser { } break; case 4 : - // smaliParser.g:431:5: {...}? => source_spec + // smaliParser.g:443:5: {...}? => source_spec { if ( !((!smali_file_stack.peek().hasSourceSpec)) ) { throw new FailedPredicateException(input, "smali_file", "!$smali_file::hasSourceSpec"); } - pushFollow(FOLLOW_source_spec_in_smali_file1103); + pushFollow(FOLLOW_source_spec_in_smali_file1168); source_spec4=source_spec(); state._fsp--; @@ -596,9 +615,9 @@ public class smaliParser extends Parser { } break; case 5 : - // smaliParser.g:432:5: method + // smaliParser.g:444:5: method { - pushFollow(FOLLOW_method_in_smali_file1111); + pushFollow(FOLLOW_method_in_smali_file1176); method5=method(); state._fsp--; @@ -606,9 +625,9 @@ public class smaliParser extends Parser { } break; case 6 : - // smaliParser.g:433:5: field + // smaliParser.g:445:5: field { - pushFollow(FOLLOW_field_in_smali_file1117); + pushFollow(FOLLOW_field_in_smali_file1182); field6=field(); state._fsp--; @@ -616,9 +635,9 @@ public class smaliParser extends Parser { } break; case 7 : - // smaliParser.g:434:5: annotation + // smaliParser.g:446:5: annotation { - pushFollow(FOLLOW_annotation_in_smali_file1123); + pushFollow(FOLLOW_annotation_in_smali_file1188); annotation7=annotation(); state._fsp--; @@ -635,7 +654,7 @@ public class smaliParser extends Parser { cnt1++; } - EOF8=(Token)match(input,EOF,FOLLOW_EOF_in_smali_file1134); + EOF8=(Token)match(input,EOF,FOLLOW_EOF_in_smali_file1199); stream_EOF.add(EOF8); @@ -650,7 +669,7 @@ public class smaliParser extends Parser { } // AST REWRITE - // elements: super_spec, method, field, implements_spec, class_spec, source_spec + // elements: source_spec, super_spec, implements_spec, class_spec, method, field // token labels: // rule labels: retval // token list labels: @@ -660,36 +679,36 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 448:3: -> ^( I_CLASS_DEF class_spec ( super_spec )? ( implements_spec )* ( source_spec )? ^( I_METHODS ( method )* ) ^( I_FIELDS ( field )* ) ) + // 460:3: -> ^( I_CLASS_DEF class_spec ( super_spec )? ( implements_spec )* ( source_spec )? ^( I_METHODS ( method )* ) ^( I_FIELDS ( field )* ) ) { - // smaliParser.g:448:6: ^( I_CLASS_DEF class_spec ( super_spec )? ( implements_spec )* ( source_spec )? ^( I_METHODS ( method )* ) ^( I_FIELDS ( field )* ) ) + // smaliParser.g:460:6: ^( I_CLASS_DEF class_spec ( super_spec )? ( implements_spec )* ( source_spec )? ^( I_METHODS ( method )* ) ^( I_FIELDS ( field )* ) ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_CLASS_DEF, "I_CLASS_DEF"), root_1); adaptor.addChild(root_1, stream_class_spec.nextTree()); - // smaliParser.g:450:8: ( super_spec )? + // smaliParser.g:462:8: ( super_spec )? if ( stream_super_spec.hasNext() ) { adaptor.addChild(root_1, stream_super_spec.nextTree()); } stream_super_spec.reset(); - // smaliParser.g:451:8: ( implements_spec )* + // smaliParser.g:463:8: ( implements_spec )* while ( stream_implements_spec.hasNext() ) { adaptor.addChild(root_1, stream_implements_spec.nextTree()); } stream_implements_spec.reset(); - // smaliParser.g:452:8: ( source_spec )? + // smaliParser.g:464:8: ( source_spec )? if ( stream_source_spec.hasNext() ) { adaptor.addChild(root_1, stream_source_spec.nextTree()); } stream_source_spec.reset(); - // smaliParser.g:453:8: ^( I_METHODS ( method )* ) + // smaliParser.g:465:8: ^( I_METHODS ( method )* ) { CommonTree root_2 = (CommonTree)adaptor.nil(); root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_METHODS, "I_METHODS"), root_2); - // smaliParser.g:453:20: ( method )* + // smaliParser.g:465:20: ( method )* while ( stream_method.hasNext() ) { adaptor.addChild(root_2, stream_method.nextTree()); } @@ -698,11 +717,11 @@ public class smaliParser extends Parser { adaptor.addChild(root_1, root_2); } - // smaliParser.g:453:29: ^( I_FIELDS ( field )* ) + // smaliParser.g:465:29: ^( I_FIELDS ( field )* ) { CommonTree root_2 = (CommonTree)adaptor.nil(); root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_FIELDS, "I_FIELDS"), root_2); - // smaliParser.g:453:40: ( field )* + // smaliParser.g:465:40: ( field )* while ( stream_field.hasNext() ) { adaptor.addChild(root_2, stream_field.nextTree()); } @@ -751,7 +770,7 @@ public class smaliParser extends Parser { // $ANTLR start "class_spec" - // smaliParser.g:455:1: class_spec returns [String className] : CLASS_DIRECTIVE access_list CLASS_DESCRIPTOR -> CLASS_DESCRIPTOR access_list ; + // smaliParser.g:467:1: class_spec returns [String className] : CLASS_DIRECTIVE access_list CLASS_DESCRIPTOR -> CLASS_DESCRIPTOR access_list ; public final smaliParser.class_spec_return class_spec() throws RecognitionException { smaliParser.class_spec_return retval = new smaliParser.class_spec_return(); retval.start = input.LT(1); @@ -769,23 +788,23 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_access_list=new RewriteRuleSubtreeStream(adaptor,"rule access_list"); try { - // smaliParser.g:456:3: ( CLASS_DIRECTIVE access_list CLASS_DESCRIPTOR -> CLASS_DESCRIPTOR access_list ) - // smaliParser.g:456:5: CLASS_DIRECTIVE access_list CLASS_DESCRIPTOR + // smaliParser.g:468:3: ( CLASS_DIRECTIVE access_list CLASS_DESCRIPTOR -> CLASS_DESCRIPTOR access_list ) + // smaliParser.g:468:5: CLASS_DIRECTIVE access_list CLASS_DESCRIPTOR { - CLASS_DIRECTIVE9=(Token)match(input,CLASS_DIRECTIVE,FOLLOW_CLASS_DIRECTIVE_in_class_spec1221); + CLASS_DIRECTIVE9=(Token)match(input,CLASS_DIRECTIVE,FOLLOW_CLASS_DIRECTIVE_in_class_spec1286); stream_CLASS_DIRECTIVE.add(CLASS_DIRECTIVE9); - pushFollow(FOLLOW_access_list_in_class_spec1223); + pushFollow(FOLLOW_access_list_in_class_spec1288); access_list10=access_list(); state._fsp--; stream_access_list.add(access_list10.getTree()); - CLASS_DESCRIPTOR11=(Token)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_class_spec1225); + CLASS_DESCRIPTOR11=(Token)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_class_spec1290); stream_CLASS_DESCRIPTOR.add(CLASS_DESCRIPTOR11); retval.className = (CLASS_DESCRIPTOR11!=null?CLASS_DESCRIPTOR11.getText():null); // AST REWRITE - // elements: access_list, CLASS_DESCRIPTOR + // elements: CLASS_DESCRIPTOR, access_list // token labels: // rule labels: retval // token list labels: @@ -795,7 +814,7 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 456:89: -> CLASS_DESCRIPTOR access_list + // 468:89: -> CLASS_DESCRIPTOR access_list { adaptor.addChild(root_0, stream_CLASS_DESCRIPTOR.nextNode()); adaptor.addChild(root_0, stream_access_list.nextTree()); @@ -833,7 +852,7 @@ public class smaliParser extends Parser { // $ANTLR start "super_spec" - // smaliParser.g:458:1: super_spec : SUPER_DIRECTIVE CLASS_DESCRIPTOR -> ^( I_SUPER[$start, \"I_SUPER\"] CLASS_DESCRIPTOR ) ; + // smaliParser.g:470:1: super_spec : SUPER_DIRECTIVE CLASS_DESCRIPTOR -> ^( I_SUPER[$start, \"I_SUPER\"] CLASS_DESCRIPTOR ) ; public final smaliParser.super_spec_return super_spec() throws RecognitionException { smaliParser.super_spec_return retval = new smaliParser.super_spec_return(); retval.start = input.LT(1); @@ -849,13 +868,13 @@ public class smaliParser extends Parser { RewriteRuleTokenStream stream_SUPER_DIRECTIVE=new RewriteRuleTokenStream(adaptor,"token SUPER_DIRECTIVE"); try { - // smaliParser.g:459:3: ( SUPER_DIRECTIVE CLASS_DESCRIPTOR -> ^( I_SUPER[$start, \"I_SUPER\"] CLASS_DESCRIPTOR ) ) - // smaliParser.g:459:5: SUPER_DIRECTIVE CLASS_DESCRIPTOR + // smaliParser.g:471:3: ( SUPER_DIRECTIVE CLASS_DESCRIPTOR -> ^( I_SUPER[$start, \"I_SUPER\"] CLASS_DESCRIPTOR ) ) + // smaliParser.g:471:5: SUPER_DIRECTIVE CLASS_DESCRIPTOR { - SUPER_DIRECTIVE12=(Token)match(input,SUPER_DIRECTIVE,FOLLOW_SUPER_DIRECTIVE_in_super_spec1243); + SUPER_DIRECTIVE12=(Token)match(input,SUPER_DIRECTIVE,FOLLOW_SUPER_DIRECTIVE_in_super_spec1308); stream_SUPER_DIRECTIVE.add(SUPER_DIRECTIVE12); - CLASS_DESCRIPTOR13=(Token)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_super_spec1245); + CLASS_DESCRIPTOR13=(Token)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_super_spec1310); stream_CLASS_DESCRIPTOR.add(CLASS_DESCRIPTOR13); // AST REWRITE @@ -869,9 +888,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 459:38: -> ^( I_SUPER[$start, \"I_SUPER\"] CLASS_DESCRIPTOR ) + // 471:38: -> ^( I_SUPER[$start, \"I_SUPER\"] CLASS_DESCRIPTOR ) { - // smaliParser.g:459:41: ^( I_SUPER[$start, \"I_SUPER\"] CLASS_DESCRIPTOR ) + // smaliParser.g:471:41: ^( I_SUPER[$start, \"I_SUPER\"] CLASS_DESCRIPTOR ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_SUPER, (retval.start), "I_SUPER"), root_1); @@ -913,7 +932,7 @@ public class smaliParser extends Parser { // $ANTLR start "implements_spec" - // smaliParser.g:461:1: implements_spec : IMPLEMENTS_DIRECTIVE CLASS_DESCRIPTOR -> ^( I_IMPLEMENTS[$start, \"I_IMPLEMENTS\"] CLASS_DESCRIPTOR ) ; + // smaliParser.g:473:1: implements_spec : IMPLEMENTS_DIRECTIVE CLASS_DESCRIPTOR -> ^( I_IMPLEMENTS[$start, \"I_IMPLEMENTS\"] CLASS_DESCRIPTOR ) ; public final smaliParser.implements_spec_return implements_spec() throws RecognitionException { smaliParser.implements_spec_return retval = new smaliParser.implements_spec_return(); retval.start = input.LT(1); @@ -929,13 +948,13 @@ public class smaliParser extends Parser { RewriteRuleTokenStream stream_CLASS_DESCRIPTOR=new RewriteRuleTokenStream(adaptor,"token CLASS_DESCRIPTOR"); try { - // smaliParser.g:462:3: ( IMPLEMENTS_DIRECTIVE CLASS_DESCRIPTOR -> ^( I_IMPLEMENTS[$start, \"I_IMPLEMENTS\"] CLASS_DESCRIPTOR ) ) - // smaliParser.g:462:5: IMPLEMENTS_DIRECTIVE CLASS_DESCRIPTOR + // smaliParser.g:474:3: ( IMPLEMENTS_DIRECTIVE CLASS_DESCRIPTOR -> ^( I_IMPLEMENTS[$start, \"I_IMPLEMENTS\"] CLASS_DESCRIPTOR ) ) + // smaliParser.g:474:5: IMPLEMENTS_DIRECTIVE CLASS_DESCRIPTOR { - IMPLEMENTS_DIRECTIVE14=(Token)match(input,IMPLEMENTS_DIRECTIVE,FOLLOW_IMPLEMENTS_DIRECTIVE_in_implements_spec1264); + IMPLEMENTS_DIRECTIVE14=(Token)match(input,IMPLEMENTS_DIRECTIVE,FOLLOW_IMPLEMENTS_DIRECTIVE_in_implements_spec1329); stream_IMPLEMENTS_DIRECTIVE.add(IMPLEMENTS_DIRECTIVE14); - CLASS_DESCRIPTOR15=(Token)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_implements_spec1266); + CLASS_DESCRIPTOR15=(Token)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_implements_spec1331); stream_CLASS_DESCRIPTOR.add(CLASS_DESCRIPTOR15); // AST REWRITE @@ -949,9 +968,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 462:43: -> ^( I_IMPLEMENTS[$start, \"I_IMPLEMENTS\"] CLASS_DESCRIPTOR ) + // 474:43: -> ^( I_IMPLEMENTS[$start, \"I_IMPLEMENTS\"] CLASS_DESCRIPTOR ) { - // smaliParser.g:462:46: ^( I_IMPLEMENTS[$start, \"I_IMPLEMENTS\"] CLASS_DESCRIPTOR ) + // smaliParser.g:474:46: ^( I_IMPLEMENTS[$start, \"I_IMPLEMENTS\"] CLASS_DESCRIPTOR ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_IMPLEMENTS, (retval.start), "I_IMPLEMENTS"), root_1); @@ -993,7 +1012,7 @@ public class smaliParser extends Parser { // $ANTLR start "source_spec" - // smaliParser.g:464:1: source_spec : SOURCE_DIRECTIVE STRING_LITERAL -> ^( I_SOURCE[$start, \"I_SOURCE\"] STRING_LITERAL ) ; + // smaliParser.g:476:1: source_spec : SOURCE_DIRECTIVE STRING_LITERAL -> ^( I_SOURCE[$start, \"I_SOURCE\"] STRING_LITERAL ) ; public final smaliParser.source_spec_return source_spec() throws RecognitionException { smaliParser.source_spec_return retval = new smaliParser.source_spec_return(); retval.start = input.LT(1); @@ -1009,13 +1028,13 @@ public class smaliParser extends Parser { RewriteRuleTokenStream stream_STRING_LITERAL=new RewriteRuleTokenStream(adaptor,"token STRING_LITERAL"); try { - // smaliParser.g:465:3: ( SOURCE_DIRECTIVE STRING_LITERAL -> ^( I_SOURCE[$start, \"I_SOURCE\"] STRING_LITERAL ) ) - // smaliParser.g:465:5: SOURCE_DIRECTIVE STRING_LITERAL + // smaliParser.g:477:3: ( SOURCE_DIRECTIVE STRING_LITERAL -> ^( I_SOURCE[$start, \"I_SOURCE\"] STRING_LITERAL ) ) + // smaliParser.g:477:5: SOURCE_DIRECTIVE STRING_LITERAL { - SOURCE_DIRECTIVE16=(Token)match(input,SOURCE_DIRECTIVE,FOLLOW_SOURCE_DIRECTIVE_in_source_spec1285); + SOURCE_DIRECTIVE16=(Token)match(input,SOURCE_DIRECTIVE,FOLLOW_SOURCE_DIRECTIVE_in_source_spec1350); stream_SOURCE_DIRECTIVE.add(SOURCE_DIRECTIVE16); - STRING_LITERAL17=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_source_spec1287); + STRING_LITERAL17=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_source_spec1352); stream_STRING_LITERAL.add(STRING_LITERAL17); // AST REWRITE @@ -1029,9 +1048,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 465:37: -> ^( I_SOURCE[$start, \"I_SOURCE\"] STRING_LITERAL ) + // 477:37: -> ^( I_SOURCE[$start, \"I_SOURCE\"] STRING_LITERAL ) { - // smaliParser.g:465:40: ^( I_SOURCE[$start, \"I_SOURCE\"] STRING_LITERAL ) + // smaliParser.g:477:40: ^( I_SOURCE[$start, \"I_SOURCE\"] STRING_LITERAL ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_SOURCE, (retval.start), "I_SOURCE"), root_1); @@ -1073,7 +1092,7 @@ public class smaliParser extends Parser { // $ANTLR start "access_list" - // smaliParser.g:467:1: access_list : ( ACCESS_SPEC )* -> ^( I_ACCESS_LIST[$start,\"I_ACCESS_LIST\"] ( ACCESS_SPEC )* ) ; + // smaliParser.g:479:1: access_list : ( ACCESS_SPEC )* -> ^( I_ACCESS_LIST[$start,\"I_ACCESS_LIST\"] ( ACCESS_SPEC )* ) ; public final smaliParser.access_list_return access_list() throws RecognitionException { smaliParser.access_list_return retval = new smaliParser.access_list_return(); retval.start = input.LT(1); @@ -1086,17 +1105,17 @@ public class smaliParser extends Parser { RewriteRuleTokenStream stream_ACCESS_SPEC=new RewriteRuleTokenStream(adaptor,"token ACCESS_SPEC"); try { - // smaliParser.g:468:3: ( ( ACCESS_SPEC )* -> ^( I_ACCESS_LIST[$start,\"I_ACCESS_LIST\"] ( ACCESS_SPEC )* ) ) - // smaliParser.g:468:5: ( ACCESS_SPEC )* + // smaliParser.g:480:3: ( ( ACCESS_SPEC )* -> ^( I_ACCESS_LIST[$start,\"I_ACCESS_LIST\"] ( ACCESS_SPEC )* ) ) + // smaliParser.g:480:5: ( ACCESS_SPEC )* { - // smaliParser.g:468:5: ( ACCESS_SPEC )* + // smaliParser.g:480:5: ( ACCESS_SPEC )* loop2: while (true) { int alt2=2; int LA2_0 = input.LA(1); if ( (LA2_0==ACCESS_SPEC) ) { int LA2_2 = input.LA(2); - if ( (LA2_2==ACCESS_SPEC||LA2_2==ANNOTATION_VISIBILITY||LA2_2==BOOL_LITERAL||LA2_2==CLASS_DESCRIPTOR||LA2_2==DOUBLE_LITERAL_OR_ID||LA2_2==FLOAT_LITERAL_OR_ID||(LA2_2 >= INSTRUCTION_FORMAT10t && LA2_2 <= INSTRUCTION_FORMAT10x_ODEX)||LA2_2==INSTRUCTION_FORMAT11x||LA2_2==INSTRUCTION_FORMAT12x_OR_ID||(LA2_2 >= INSTRUCTION_FORMAT21c_FIELD && LA2_2 <= INSTRUCTION_FORMAT21c_TYPE)||LA2_2==INSTRUCTION_FORMAT21t||(LA2_2 >= INSTRUCTION_FORMAT22c_FIELD && LA2_2 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA2_2 >= INSTRUCTION_FORMAT22s_OR_ID && LA2_2 <= INSTRUCTION_FORMAT22t)||LA2_2==INSTRUCTION_FORMAT23x||(LA2_2 >= INSTRUCTION_FORMAT31i_OR_ID && LA2_2 <= INSTRUCTION_FORMAT31t)||(LA2_2 >= INSTRUCTION_FORMAT35c_METHOD && LA2_2 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA2_2 >= INSTRUCTION_FORMAT45cc_METHOD && LA2_2 <= INSTRUCTION_FORMAT51l)||LA2_2==MEMBER_NAME||(LA2_2 >= NEGATIVE_INTEGER_LITERAL && LA2_2 <= NULL_LITERAL)||(LA2_2 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA2_2 <= PRIMITIVE_TYPE)||LA2_2==REGISTER||LA2_2==SIMPLE_NAME||(LA2_2 >= VERIFICATION_ERROR_TYPE && LA2_2 <= VOID_TYPE)) ) { + if ( (LA2_2==ACCESS_SPEC||LA2_2==ANNOTATION_VISIBILITY||LA2_2==BOOL_LITERAL||LA2_2==CLASS_DESCRIPTOR||LA2_2==DOUBLE_LITERAL_OR_ID||LA2_2==FLOAT_LITERAL_OR_ID||(LA2_2 >= INSTRUCTION_FORMAT10t && LA2_2 <= INSTRUCTION_FORMAT10x_ODEX)||LA2_2==INSTRUCTION_FORMAT11x||LA2_2==INSTRUCTION_FORMAT12x_OR_ID||(LA2_2 >= INSTRUCTION_FORMAT21c_FIELD && LA2_2 <= INSTRUCTION_FORMAT21c_TYPE)||LA2_2==INSTRUCTION_FORMAT21t||(LA2_2 >= INSTRUCTION_FORMAT22c_FIELD && LA2_2 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA2_2 >= INSTRUCTION_FORMAT22s_OR_ID && LA2_2 <= INSTRUCTION_FORMAT22t)||LA2_2==INSTRUCTION_FORMAT23x||(LA2_2 >= INSTRUCTION_FORMAT31i_OR_ID && LA2_2 <= INSTRUCTION_FORMAT31t)||(LA2_2 >= INSTRUCTION_FORMAT35c_CALL_SITE && LA2_2 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA2_2 >= INSTRUCTION_FORMAT45cc_METHOD && LA2_2 <= INSTRUCTION_FORMAT51l)||LA2_2==MEMBER_NAME||(LA2_2 >= METHOD_HANDLE_TYPE_FIELD && LA2_2 <= NULL_LITERAL)||(LA2_2 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA2_2 <= PRIMITIVE_TYPE)||LA2_2==REGISTER||LA2_2==SIMPLE_NAME||(LA2_2 >= VERIFICATION_ERROR_TYPE && LA2_2 <= VOID_TYPE)) ) { alt2=1; } @@ -1104,9 +1123,9 @@ public class smaliParser extends Parser { switch (alt2) { case 1 : - // smaliParser.g:468:5: ACCESS_SPEC + // smaliParser.g:480:5: ACCESS_SPEC { - ACCESS_SPEC18=(Token)match(input,ACCESS_SPEC,FOLLOW_ACCESS_SPEC_in_access_list1306); + ACCESS_SPEC18=(Token)match(input,ACCESS_SPEC,FOLLOW_ACCESS_SPEC_in_access_list1371); stream_ACCESS_SPEC.add(ACCESS_SPEC18); } @@ -1128,13 +1147,13 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 468:18: -> ^( I_ACCESS_LIST[$start,\"I_ACCESS_LIST\"] ( ACCESS_SPEC )* ) + // 480:18: -> ^( I_ACCESS_LIST[$start,\"I_ACCESS_LIST\"] ( ACCESS_SPEC )* ) { - // smaliParser.g:468:21: ^( I_ACCESS_LIST[$start,\"I_ACCESS_LIST\"] ( ACCESS_SPEC )* ) + // smaliParser.g:480:21: ^( I_ACCESS_LIST[$start,\"I_ACCESS_LIST\"] ( ACCESS_SPEC )* ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_ACCESS_LIST, (retval.start), "I_ACCESS_LIST"), root_1); - // smaliParser.g:468:61: ( ACCESS_SPEC )* + // smaliParser.g:480:61: ( ACCESS_SPEC )* while ( stream_ACCESS_SPEC.hasNext() ) { adaptor.addChild(root_1, stream_ACCESS_SPEC.nextNode()); } @@ -1177,7 +1196,7 @@ public class smaliParser extends Parser { // $ANTLR start "field" - // smaliParser.g:475:1: field : FIELD_DIRECTIVE access_list member_name COLON nonvoid_type_descriptor ( EQUAL literal )? ( ({...}? annotation )* ( END_FIELD_DIRECTIVE -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ( annotation )* ) ) | -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ) ) ) ) ; + // smaliParser.g:487:1: field : FIELD_DIRECTIVE access_list member_name COLON nonvoid_type_descriptor ( EQUAL literal )? ( ({...}? annotation )* ( END_FIELD_DIRECTIVE -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ( annotation )* ) ) | -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ) ) ) ) ; public final smaliParser.field_return field() throws RecognitionException { smaliParser.field_return retval = new smaliParser.field_return(); retval.start = input.LT(1); @@ -1210,31 +1229,31 @@ public class smaliParser extends Parser { List<CommonTree> annotations = new ArrayList<CommonTree>(); try { - // smaliParser.g:477:3: ( FIELD_DIRECTIVE access_list member_name COLON nonvoid_type_descriptor ( EQUAL literal )? ( ({...}? annotation )* ( END_FIELD_DIRECTIVE -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ( annotation )* ) ) | -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ) ) ) ) ) - // smaliParser.g:477:5: FIELD_DIRECTIVE access_list member_name COLON nonvoid_type_descriptor ( EQUAL literal )? ( ({...}? annotation )* ( END_FIELD_DIRECTIVE -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ( annotation )* ) ) | -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ) ) ) ) + // smaliParser.g:489:3: ( FIELD_DIRECTIVE access_list member_name COLON nonvoid_type_descriptor ( EQUAL literal )? ( ({...}? annotation )* ( END_FIELD_DIRECTIVE -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ( annotation )* ) ) | -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ) ) ) ) ) + // smaliParser.g:489:5: FIELD_DIRECTIVE access_list member_name COLON nonvoid_type_descriptor ( EQUAL literal )? ( ({...}? annotation )* ( END_FIELD_DIRECTIVE -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ( annotation )* ) ) | -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ) ) ) ) { - FIELD_DIRECTIVE19=(Token)match(input,FIELD_DIRECTIVE,FOLLOW_FIELD_DIRECTIVE_in_field1337); + FIELD_DIRECTIVE19=(Token)match(input,FIELD_DIRECTIVE,FOLLOW_FIELD_DIRECTIVE_in_field1402); stream_FIELD_DIRECTIVE.add(FIELD_DIRECTIVE19); - pushFollow(FOLLOW_access_list_in_field1339); + pushFollow(FOLLOW_access_list_in_field1404); access_list20=access_list(); state._fsp--; stream_access_list.add(access_list20.getTree()); - pushFollow(FOLLOW_member_name_in_field1341); + pushFollow(FOLLOW_member_name_in_field1406); member_name21=member_name(); state._fsp--; stream_member_name.add(member_name21.getTree()); - COLON22=(Token)match(input,COLON,FOLLOW_COLON_in_field1343); + COLON22=(Token)match(input,COLON,FOLLOW_COLON_in_field1408); stream_COLON.add(COLON22); - pushFollow(FOLLOW_nonvoid_type_descriptor_in_field1345); + pushFollow(FOLLOW_nonvoid_type_descriptor_in_field1410); nonvoid_type_descriptor23=nonvoid_type_descriptor(); state._fsp--; stream_nonvoid_type_descriptor.add(nonvoid_type_descriptor23.getTree()); - // smaliParser.g:477:75: ( EQUAL literal )? + // smaliParser.g:489:75: ( EQUAL literal )? int alt3=2; int LA3_0 = input.LA(1); if ( (LA3_0==EQUAL) ) { @@ -1242,12 +1261,12 @@ public class smaliParser extends Parser { } switch (alt3) { case 1 : - // smaliParser.g:477:76: EQUAL literal + // smaliParser.g:489:76: EQUAL literal { - EQUAL24=(Token)match(input,EQUAL,FOLLOW_EQUAL_in_field1348); + EQUAL24=(Token)match(input,EQUAL,FOLLOW_EQUAL_in_field1413); stream_EQUAL.add(EQUAL24); - pushFollow(FOLLOW_literal_in_field1350); + pushFollow(FOLLOW_literal_in_field1415); literal25=literal(); state._fsp--; @@ -1257,10 +1276,10 @@ public class smaliParser extends Parser { } - // smaliParser.g:478:5: ( ({...}? annotation )* ( END_FIELD_DIRECTIVE -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ( annotation )* ) ) | -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ) ) ) ) - // smaliParser.g:478:7: ({...}? annotation )* ( END_FIELD_DIRECTIVE -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ( annotation )* ) ) | -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ) ) ) + // smaliParser.g:490:5: ( ({...}? annotation )* ( END_FIELD_DIRECTIVE -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ( annotation )* ) ) | -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ) ) ) ) + // smaliParser.g:490:7: ({...}? annotation )* ( END_FIELD_DIRECTIVE -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ( annotation )* ) ) | -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ) ) ) { - // smaliParser.g:478:7: ({...}? annotation )* + // smaliParser.g:490:7: ({...}? annotation )* loop4: while (true) { int alt4=2; @@ -1275,12 +1294,12 @@ public class smaliParser extends Parser { switch (alt4) { case 1 : - // smaliParser.g:478:8: {...}? annotation + // smaliParser.g:490:8: {...}? annotation { if ( !((input.LA(1) == ANNOTATION_DIRECTIVE)) ) { throw new FailedPredicateException(input, "field", "input.LA(1) == ANNOTATION_DIRECTIVE"); } - pushFollow(FOLLOW_annotation_in_field1363); + pushFollow(FOLLOW_annotation_in_field1428); annotation26=annotation(); state._fsp--; @@ -1294,7 +1313,7 @@ public class smaliParser extends Parser { } } - // smaliParser.g:479:7: ( END_FIELD_DIRECTIVE -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ( annotation )* ) ) | -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ) ) ) + // smaliParser.g:491:7: ( END_FIELD_DIRECTIVE -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ( annotation )* ) ) | -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ) ) ) int alt5=2; int LA5_0 = input.LA(1); if ( (LA5_0==END_FIELD_DIRECTIVE) ) { @@ -1312,13 +1331,13 @@ public class smaliParser extends Parser { switch (alt5) { case 1 : - // smaliParser.g:479:9: END_FIELD_DIRECTIVE + // smaliParser.g:491:9: END_FIELD_DIRECTIVE { - END_FIELD_DIRECTIVE27=(Token)match(input,END_FIELD_DIRECTIVE,FOLLOW_END_FIELD_DIRECTIVE_in_field1377); + END_FIELD_DIRECTIVE27=(Token)match(input,END_FIELD_DIRECTIVE,FOLLOW_END_FIELD_DIRECTIVE_in_field1442); stream_END_FIELD_DIRECTIVE.add(END_FIELD_DIRECTIVE27); // AST REWRITE - // elements: access_list, nonvoid_type_descriptor, annotation, member_name, literal + // elements: member_name, literal, access_list, nonvoid_type_descriptor, annotation // token labels: // rule labels: retval // token list labels: @@ -1328,15 +1347,15 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 480:9: -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ( annotation )* ) ) + // 492:9: -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ( annotation )* ) ) { - // smaliParser.g:480:12: ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ( annotation )* ) ) + // smaliParser.g:492:12: ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ( annotation )* ) ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_FIELD, (retval.start), "I_FIELD"), root_1); adaptor.addChild(root_1, stream_member_name.nextTree()); adaptor.addChild(root_1, stream_access_list.nextTree()); - // smaliParser.g:480:65: ^( I_FIELD_TYPE nonvoid_type_descriptor ) + // smaliParser.g:492:65: ^( I_FIELD_TYPE nonvoid_type_descriptor ) { CommonTree root_2 = (CommonTree)adaptor.nil(); root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_FIELD_TYPE, "I_FIELD_TYPE"), root_2); @@ -1344,9 +1363,9 @@ public class smaliParser extends Parser { adaptor.addChild(root_1, root_2); } - // smaliParser.g:480:105: ( ^( I_FIELD_INITIAL_VALUE literal ) )? + // smaliParser.g:492:105: ( ^( I_FIELD_INITIAL_VALUE literal ) )? if ( stream_literal.hasNext() ) { - // smaliParser.g:480:105: ^( I_FIELD_INITIAL_VALUE literal ) + // smaliParser.g:492:105: ^( I_FIELD_INITIAL_VALUE literal ) { CommonTree root_2 = (CommonTree)adaptor.nil(); root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_FIELD_INITIAL_VALUE, "I_FIELD_INITIAL_VALUE"), root_2); @@ -1357,11 +1376,11 @@ public class smaliParser extends Parser { } stream_literal.reset(); - // smaliParser.g:480:139: ^( I_ANNOTATIONS ( annotation )* ) + // smaliParser.g:492:139: ^( I_ANNOTATIONS ( annotation )* ) { CommonTree root_2 = (CommonTree)adaptor.nil(); root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_ANNOTATIONS, "I_ANNOTATIONS"), root_2); - // smaliParser.g:480:155: ( annotation )* + // smaliParser.g:492:155: ( annotation )* while ( stream_annotation.hasNext() ) { adaptor.addChild(root_2, stream_annotation.nextTree()); } @@ -1381,11 +1400,11 @@ public class smaliParser extends Parser { } break; case 2 : - // smaliParser.g:481:21: + // smaliParser.g:493:21: { smali_file_stack.peek().classAnnotations.addAll(annotations); // AST REWRITE - // elements: member_name, access_list, literal, nonvoid_type_descriptor + // elements: literal, access_list, member_name, nonvoid_type_descriptor // token labels: // rule labels: retval // token list labels: @@ -1395,15 +1414,15 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 482:9: -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ) ) + // 494:9: -> ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ) ) { - // smaliParser.g:482:12: ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ) ) + // smaliParser.g:494:12: ^( I_FIELD[$start, \"I_FIELD\"] member_name access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) ( ^( I_FIELD_INITIAL_VALUE literal ) )? ^( I_ANNOTATIONS ) ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_FIELD, (retval.start), "I_FIELD"), root_1); adaptor.addChild(root_1, stream_member_name.nextTree()); adaptor.addChild(root_1, stream_access_list.nextTree()); - // smaliParser.g:482:65: ^( I_FIELD_TYPE nonvoid_type_descriptor ) + // smaliParser.g:494:65: ^( I_FIELD_TYPE nonvoid_type_descriptor ) { CommonTree root_2 = (CommonTree)adaptor.nil(); root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_FIELD_TYPE, "I_FIELD_TYPE"), root_2); @@ -1411,9 +1430,9 @@ public class smaliParser extends Parser { adaptor.addChild(root_1, root_2); } - // smaliParser.g:482:105: ( ^( I_FIELD_INITIAL_VALUE literal ) )? + // smaliParser.g:494:105: ( ^( I_FIELD_INITIAL_VALUE literal ) )? if ( stream_literal.hasNext() ) { - // smaliParser.g:482:105: ^( I_FIELD_INITIAL_VALUE literal ) + // smaliParser.g:494:105: ^( I_FIELD_INITIAL_VALUE literal ) { CommonTree root_2 = (CommonTree)adaptor.nil(); root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_FIELD_INITIAL_VALUE, "I_FIELD_INITIAL_VALUE"), root_2); @@ -1424,7 +1443,7 @@ public class smaliParser extends Parser { } stream_literal.reset(); - // smaliParser.g:482:139: ^( I_ANNOTATIONS ) + // smaliParser.g:494:139: ^( I_ANNOTATIONS ) { CommonTree root_2 = (CommonTree)adaptor.nil(); root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_ANNOTATIONS, "I_ANNOTATIONS"), root_2); @@ -1475,7 +1494,7 @@ public class smaliParser extends Parser { // $ANTLR start "method" - // smaliParser.g:486:1: method : METHOD_DIRECTIVE access_list member_name method_prototype statements_and_directives END_METHOD_DIRECTIVE -> ^( I_METHOD[$start, \"I_METHOD\"] member_name method_prototype access_list statements_and_directives ) ; + // smaliParser.g:498:1: method : METHOD_DIRECTIVE access_list member_name method_prototype statements_and_directives END_METHOD_DIRECTIVE -> ^( I_METHOD[$start, \"I_METHOD\"] member_name method_prototype access_list statements_and_directives ) ; public final smaliParser.method_return method() throws RecognitionException { smaliParser.method_return retval = new smaliParser.method_return(); retval.start = input.LT(1); @@ -1499,37 +1518,37 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_statements_and_directives=new RewriteRuleSubtreeStream(adaptor,"rule statements_and_directives"); try { - // smaliParser.g:487:3: ( METHOD_DIRECTIVE access_list member_name method_prototype statements_and_directives END_METHOD_DIRECTIVE -> ^( I_METHOD[$start, \"I_METHOD\"] member_name method_prototype access_list statements_and_directives ) ) - // smaliParser.g:487:5: METHOD_DIRECTIVE access_list member_name method_prototype statements_and_directives END_METHOD_DIRECTIVE + // smaliParser.g:499:3: ( METHOD_DIRECTIVE access_list member_name method_prototype statements_and_directives END_METHOD_DIRECTIVE -> ^( I_METHOD[$start, \"I_METHOD\"] member_name method_prototype access_list statements_and_directives ) ) + // smaliParser.g:499:5: METHOD_DIRECTIVE access_list member_name method_prototype statements_and_directives END_METHOD_DIRECTIVE { - METHOD_DIRECTIVE28=(Token)match(input,METHOD_DIRECTIVE,FOLLOW_METHOD_DIRECTIVE_in_method1488); + METHOD_DIRECTIVE28=(Token)match(input,METHOD_DIRECTIVE,FOLLOW_METHOD_DIRECTIVE_in_method1553); stream_METHOD_DIRECTIVE.add(METHOD_DIRECTIVE28); - pushFollow(FOLLOW_access_list_in_method1490); + pushFollow(FOLLOW_access_list_in_method1555); access_list29=access_list(); state._fsp--; stream_access_list.add(access_list29.getTree()); - pushFollow(FOLLOW_member_name_in_method1492); + pushFollow(FOLLOW_member_name_in_method1557); member_name30=member_name(); state._fsp--; stream_member_name.add(member_name30.getTree()); - pushFollow(FOLLOW_method_prototype_in_method1494); + pushFollow(FOLLOW_method_prototype_in_method1559); method_prototype31=method_prototype(); state._fsp--; stream_method_prototype.add(method_prototype31.getTree()); - pushFollow(FOLLOW_statements_and_directives_in_method1496); + pushFollow(FOLLOW_statements_and_directives_in_method1561); statements_and_directives32=statements_and_directives(); state._fsp--; stream_statements_and_directives.add(statements_and_directives32.getTree()); - END_METHOD_DIRECTIVE33=(Token)match(input,END_METHOD_DIRECTIVE,FOLLOW_END_METHOD_DIRECTIVE_in_method1502); + END_METHOD_DIRECTIVE33=(Token)match(input,END_METHOD_DIRECTIVE,FOLLOW_END_METHOD_DIRECTIVE_in_method1567); stream_END_METHOD_DIRECTIVE.add(END_METHOD_DIRECTIVE33); // AST REWRITE - // elements: method_prototype, access_list, member_name, statements_and_directives + // elements: method_prototype, member_name, statements_and_directives, access_list // token labels: // rule labels: retval // token list labels: @@ -1539,9 +1558,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 489:5: -> ^( I_METHOD[$start, \"I_METHOD\"] member_name method_prototype access_list statements_and_directives ) + // 501:5: -> ^( I_METHOD[$start, \"I_METHOD\"] member_name method_prototype access_list statements_and_directives ) { - // smaliParser.g:489:8: ^( I_METHOD[$start, \"I_METHOD\"] member_name method_prototype access_list statements_and_directives ) + // smaliParser.g:501:8: ^( I_METHOD[$start, \"I_METHOD\"] member_name method_prototype access_list statements_and_directives ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_METHOD, (retval.start), "I_METHOD"), root_1); @@ -1592,7 +1611,7 @@ public class smaliParser extends Parser { // $ANTLR start "statements_and_directives" - // smaliParser.g:491:1: statements_and_directives : ( ordered_method_item | registers_directive | catch_directive | catchall_directive | parameter_directive | annotation )* -> ( registers_directive )? ^( I_ORDERED_METHOD_ITEMS ( ordered_method_item )* ) ^( I_CATCHES ( catch_directive )* ( catchall_directive )* ) ^( I_PARAMETERS ( parameter_directive )* ) ; + // smaliParser.g:503:1: statements_and_directives : ( ordered_method_item | registers_directive | catch_directive | catchall_directive | parameter_directive | annotation )* -> ( registers_directive )? ^( I_ORDERED_METHOD_ITEMS ( ordered_method_item )* ) ^( I_CATCHES ( catch_directive )* ( catchall_directive )* ) ^( I_PARAMETERS ( parameter_directive )* ) ; public final smaliParser.statements_and_directives_return statements_and_directives() throws RecognitionException { statements_and_directives_stack.push(new statements_and_directives_scope()); smaliParser.statements_and_directives_return retval = new smaliParser.statements_and_directives_return(); @@ -1615,14 +1634,14 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_parameter_directive=new RewriteRuleSubtreeStream(adaptor,"rule parameter_directive"); try { - // smaliParser.g:497:3: ( ( ordered_method_item | registers_directive | catch_directive | catchall_directive | parameter_directive | annotation )* -> ( registers_directive )? ^( I_ORDERED_METHOD_ITEMS ( ordered_method_item )* ) ^( I_CATCHES ( catch_directive )* ( catchall_directive )* ) ^( I_PARAMETERS ( parameter_directive )* ) ) - // smaliParser.g:497:5: ( ordered_method_item | registers_directive | catch_directive | catchall_directive | parameter_directive | annotation )* + // smaliParser.g:509:3: ( ( ordered_method_item | registers_directive | catch_directive | catchall_directive | parameter_directive | annotation )* -> ( registers_directive )? ^( I_ORDERED_METHOD_ITEMS ( ordered_method_item )* ) ^( I_CATCHES ( catch_directive )* ( catchall_directive )* ) ^( I_PARAMETERS ( parameter_directive )* ) ) + // smaliParser.g:509:5: ( ordered_method_item | registers_directive | catch_directive | catchall_directive | parameter_directive | annotation )* { statements_and_directives_stack.peek().hasRegistersDirective = false; statements_and_directives_stack.peek().methodAnnotations = new ArrayList<CommonTree>(); - // smaliParser.g:501:5: ( ordered_method_item | registers_directive | catch_directive | catchall_directive | parameter_directive | annotation )* + // smaliParser.g:513:5: ( ordered_method_item | registers_directive | catch_directive | catchall_directive | parameter_directive | annotation )* loop6: while (true) { int alt6=7; @@ -1642,6 +1661,8 @@ public class smaliParser extends Parser { case INSTRUCTION_FORMAT20t: case INSTRUCTION_FORMAT21c_FIELD: case INSTRUCTION_FORMAT21c_FIELD_ODEX: + case INSTRUCTION_FORMAT21c_METHOD_HANDLE: + case INSTRUCTION_FORMAT21c_METHOD_TYPE: case INSTRUCTION_FORMAT21c_STRING: case INSTRUCTION_FORMAT21c_TYPE: case INSTRUCTION_FORMAT21ih: @@ -1664,11 +1685,14 @@ public class smaliParser extends Parser { case INSTRUCTION_FORMAT31i_OR_ID: case INSTRUCTION_FORMAT31t: case INSTRUCTION_FORMAT32x: + case INSTRUCTION_FORMAT35c_CALL_SITE: case INSTRUCTION_FORMAT35c_METHOD: case INSTRUCTION_FORMAT35c_METHOD_ODEX: + case INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE: case INSTRUCTION_FORMAT35c_TYPE: case INSTRUCTION_FORMAT35mi_METHOD: case INSTRUCTION_FORMAT35ms_METHOD: + case INSTRUCTION_FORMAT3rc_CALL_SITE: case INSTRUCTION_FORMAT3rc_METHOD: case INSTRUCTION_FORMAT3rc_METHOD_ODEX: case INSTRUCTION_FORMAT3rc_TYPE: @@ -1717,9 +1741,9 @@ public class smaliParser extends Parser { } switch (alt6) { case 1 : - // smaliParser.g:501:7: ordered_method_item + // smaliParser.g:513:7: ordered_method_item { - pushFollow(FOLLOW_ordered_method_item_in_statements_and_directives1547); + pushFollow(FOLLOW_ordered_method_item_in_statements_and_directives1612); ordered_method_item34=ordered_method_item(); state._fsp--; @@ -1727,9 +1751,9 @@ public class smaliParser extends Parser { } break; case 2 : - // smaliParser.g:502:7: registers_directive + // smaliParser.g:514:7: registers_directive { - pushFollow(FOLLOW_registers_directive_in_statements_and_directives1555); + pushFollow(FOLLOW_registers_directive_in_statements_and_directives1620); registers_directive35=registers_directive(); state._fsp--; @@ -1737,9 +1761,9 @@ public class smaliParser extends Parser { } break; case 3 : - // smaliParser.g:503:7: catch_directive + // smaliParser.g:515:7: catch_directive { - pushFollow(FOLLOW_catch_directive_in_statements_and_directives1563); + pushFollow(FOLLOW_catch_directive_in_statements_and_directives1628); catch_directive36=catch_directive(); state._fsp--; @@ -1747,9 +1771,9 @@ public class smaliParser extends Parser { } break; case 4 : - // smaliParser.g:504:7: catchall_directive + // smaliParser.g:516:7: catchall_directive { - pushFollow(FOLLOW_catchall_directive_in_statements_and_directives1571); + pushFollow(FOLLOW_catchall_directive_in_statements_and_directives1636); catchall_directive37=catchall_directive(); state._fsp--; @@ -1757,9 +1781,9 @@ public class smaliParser extends Parser { } break; case 5 : - // smaliParser.g:505:7: parameter_directive + // smaliParser.g:517:7: parameter_directive { - pushFollow(FOLLOW_parameter_directive_in_statements_and_directives1579); + pushFollow(FOLLOW_parameter_directive_in_statements_and_directives1644); parameter_directive38=parameter_directive(); state._fsp--; @@ -1767,9 +1791,9 @@ public class smaliParser extends Parser { } break; case 6 : - // smaliParser.g:506:7: annotation + // smaliParser.g:518:7: annotation { - pushFollow(FOLLOW_annotation_in_statements_and_directives1587); + pushFollow(FOLLOW_annotation_in_statements_and_directives1652); annotation39=annotation(); state._fsp--; @@ -1794,19 +1818,19 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 508:5: -> ( registers_directive )? ^( I_ORDERED_METHOD_ITEMS ( ordered_method_item )* ) ^( I_CATCHES ( catch_directive )* ( catchall_directive )* ) ^( I_PARAMETERS ( parameter_directive )* ) + // 520:5: -> ( registers_directive )? ^( I_ORDERED_METHOD_ITEMS ( ordered_method_item )* ) ^( I_CATCHES ( catch_directive )* ( catchall_directive )* ) ^( I_PARAMETERS ( parameter_directive )* ) { - // smaliParser.g:508:8: ( registers_directive )? + // smaliParser.g:520:8: ( registers_directive )? if ( stream_registers_directive.hasNext() ) { adaptor.addChild(root_0, stream_registers_directive.nextTree()); } stream_registers_directive.reset(); - // smaliParser.g:509:8: ^( I_ORDERED_METHOD_ITEMS ( ordered_method_item )* ) + // smaliParser.g:521:8: ^( I_ORDERED_METHOD_ITEMS ( ordered_method_item )* ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_ORDERED_METHOD_ITEMS, "I_ORDERED_METHOD_ITEMS"), root_1); - // smaliParser.g:509:33: ( ordered_method_item )* + // smaliParser.g:521:33: ( ordered_method_item )* while ( stream_ordered_method_item.hasNext() ) { adaptor.addChild(root_1, stream_ordered_method_item.nextTree()); } @@ -1815,17 +1839,17 @@ public class smaliParser extends Parser { adaptor.addChild(root_0, root_1); } - // smaliParser.g:510:8: ^( I_CATCHES ( catch_directive )* ( catchall_directive )* ) + // smaliParser.g:522:8: ^( I_CATCHES ( catch_directive )* ( catchall_directive )* ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_CATCHES, "I_CATCHES"), root_1); - // smaliParser.g:510:20: ( catch_directive )* + // smaliParser.g:522:20: ( catch_directive )* while ( stream_catch_directive.hasNext() ) { adaptor.addChild(root_1, stream_catch_directive.nextTree()); } stream_catch_directive.reset(); - // smaliParser.g:510:37: ( catchall_directive )* + // smaliParser.g:522:37: ( catchall_directive )* while ( stream_catchall_directive.hasNext() ) { adaptor.addChild(root_1, stream_catchall_directive.nextTree()); } @@ -1834,11 +1858,11 @@ public class smaliParser extends Parser { adaptor.addChild(root_0, root_1); } - // smaliParser.g:511:8: ^( I_PARAMETERS ( parameter_directive )* ) + // smaliParser.g:523:8: ^( I_PARAMETERS ( parameter_directive )* ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_PARAMETERS, "I_PARAMETERS"), root_1); - // smaliParser.g:511:23: ( parameter_directive )* + // smaliParser.g:523:23: ( parameter_directive )* while ( stream_parameter_directive.hasNext() ) { adaptor.addChild(root_1, stream_parameter_directive.nextTree()); } @@ -1883,7 +1907,7 @@ public class smaliParser extends Parser { // $ANTLR start "ordered_method_item" - // smaliParser.g:515:1: ordered_method_item : ( label | instruction | debug_directive ); + // smaliParser.g:527:1: ordered_method_item : ( label | instruction | debug_directive ); public final smaliParser.ordered_method_item_return ordered_method_item() throws RecognitionException { smaliParser.ordered_method_item_return retval = new smaliParser.ordered_method_item_return(); retval.start = input.LT(1); @@ -1896,7 +1920,7 @@ public class smaliParser extends Parser { try { - // smaliParser.g:516:3: ( label | instruction | debug_directive ) + // smaliParser.g:528:3: ( label | instruction | debug_directive ) int alt7=3; switch ( input.LA(1) ) { case COLON: @@ -1916,6 +1940,8 @@ public class smaliParser extends Parser { case INSTRUCTION_FORMAT20t: case INSTRUCTION_FORMAT21c_FIELD: case INSTRUCTION_FORMAT21c_FIELD_ODEX: + case INSTRUCTION_FORMAT21c_METHOD_HANDLE: + case INSTRUCTION_FORMAT21c_METHOD_TYPE: case INSTRUCTION_FORMAT21c_STRING: case INSTRUCTION_FORMAT21c_TYPE: case INSTRUCTION_FORMAT21ih: @@ -1938,11 +1964,14 @@ public class smaliParser extends Parser { case INSTRUCTION_FORMAT31i_OR_ID: case INSTRUCTION_FORMAT31t: case INSTRUCTION_FORMAT32x: + case INSTRUCTION_FORMAT35c_CALL_SITE: case INSTRUCTION_FORMAT35c_METHOD: case INSTRUCTION_FORMAT35c_METHOD_ODEX: + case INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE: case INSTRUCTION_FORMAT35c_TYPE: case INSTRUCTION_FORMAT35mi_METHOD: case INSTRUCTION_FORMAT35ms_METHOD: + case INSTRUCTION_FORMAT3rc_CALL_SITE: case INSTRUCTION_FORMAT3rc_METHOD: case INSTRUCTION_FORMAT3rc_METHOD_ODEX: case INSTRUCTION_FORMAT3rc_TYPE: @@ -1975,12 +2004,12 @@ public class smaliParser extends Parser { } switch (alt7) { case 1 : - // smaliParser.g:516:5: label + // smaliParser.g:528:5: label { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_label_in_ordered_method_item1672); + pushFollow(FOLLOW_label_in_ordered_method_item1737); label40=label(); state._fsp--; @@ -1989,12 +2018,12 @@ public class smaliParser extends Parser { } break; case 2 : - // smaliParser.g:517:5: instruction + // smaliParser.g:529:5: instruction { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_instruction_in_ordered_method_item1678); + pushFollow(FOLLOW_instruction_in_ordered_method_item1743); instruction41=instruction(); state._fsp--; @@ -2003,12 +2032,12 @@ public class smaliParser extends Parser { } break; case 3 : - // smaliParser.g:518:5: debug_directive + // smaliParser.g:530:5: debug_directive { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_debug_directive_in_ordered_method_item1684); + pushFollow(FOLLOW_debug_directive_in_ordered_method_item1749); debug_directive42=debug_directive(); state._fsp--; @@ -2045,7 +2074,7 @@ public class smaliParser extends Parser { // $ANTLR start "registers_directive" - // smaliParser.g:520:1: registers_directive : (directive= REGISTERS_DIRECTIVE regCount= integral_literal -> ^( I_REGISTERS[$REGISTERS_DIRECTIVE, \"I_REGISTERS\"] $regCount) |directive= LOCALS_DIRECTIVE regCount2= integral_literal -> ^( I_LOCALS[$LOCALS_DIRECTIVE, \"I_LOCALS\"] $regCount2) ) ; + // smaliParser.g:532:1: registers_directive : (directive= REGISTERS_DIRECTIVE regCount= integral_literal -> ^( I_REGISTERS[$REGISTERS_DIRECTIVE, \"I_REGISTERS\"] $regCount) |directive= LOCALS_DIRECTIVE regCount2= integral_literal -> ^( I_LOCALS[$LOCALS_DIRECTIVE, \"I_LOCALS\"] $regCount2) ) ; public final smaliParser.registers_directive_return registers_directive() throws RecognitionException { smaliParser.registers_directive_return retval = new smaliParser.registers_directive_return(); retval.start = input.LT(1); @@ -2062,10 +2091,10 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_integral_literal=new RewriteRuleSubtreeStream(adaptor,"rule integral_literal"); try { - // smaliParser.g:521:3: ( (directive= REGISTERS_DIRECTIVE regCount= integral_literal -> ^( I_REGISTERS[$REGISTERS_DIRECTIVE, \"I_REGISTERS\"] $regCount) |directive= LOCALS_DIRECTIVE regCount2= integral_literal -> ^( I_LOCALS[$LOCALS_DIRECTIVE, \"I_LOCALS\"] $regCount2) ) ) - // smaliParser.g:521:5: (directive= REGISTERS_DIRECTIVE regCount= integral_literal -> ^( I_REGISTERS[$REGISTERS_DIRECTIVE, \"I_REGISTERS\"] $regCount) |directive= LOCALS_DIRECTIVE regCount2= integral_literal -> ^( I_LOCALS[$LOCALS_DIRECTIVE, \"I_LOCALS\"] $regCount2) ) + // smaliParser.g:533:3: ( (directive= REGISTERS_DIRECTIVE regCount= integral_literal -> ^( I_REGISTERS[$REGISTERS_DIRECTIVE, \"I_REGISTERS\"] $regCount) |directive= LOCALS_DIRECTIVE regCount2= integral_literal -> ^( I_LOCALS[$LOCALS_DIRECTIVE, \"I_LOCALS\"] $regCount2) ) ) + // smaliParser.g:533:5: (directive= REGISTERS_DIRECTIVE regCount= integral_literal -> ^( I_REGISTERS[$REGISTERS_DIRECTIVE, \"I_REGISTERS\"] $regCount) |directive= LOCALS_DIRECTIVE regCount2= integral_literal -> ^( I_LOCALS[$LOCALS_DIRECTIVE, \"I_LOCALS\"] $regCount2) ) { - // smaliParser.g:521:5: (directive= REGISTERS_DIRECTIVE regCount= integral_literal -> ^( I_REGISTERS[$REGISTERS_DIRECTIVE, \"I_REGISTERS\"] $regCount) |directive= LOCALS_DIRECTIVE regCount2= integral_literal -> ^( I_LOCALS[$LOCALS_DIRECTIVE, \"I_LOCALS\"] $regCount2) ) + // smaliParser.g:533:5: (directive= REGISTERS_DIRECTIVE regCount= integral_literal -> ^( I_REGISTERS[$REGISTERS_DIRECTIVE, \"I_REGISTERS\"] $regCount) |directive= LOCALS_DIRECTIVE regCount2= integral_literal -> ^( I_LOCALS[$LOCALS_DIRECTIVE, \"I_LOCALS\"] $regCount2) ) int alt8=2; int LA8_0 = input.LA(1); if ( (LA8_0==REGISTERS_DIRECTIVE) ) { @@ -2083,12 +2112,12 @@ public class smaliParser extends Parser { switch (alt8) { case 1 : - // smaliParser.g:522:7: directive= REGISTERS_DIRECTIVE regCount= integral_literal + // smaliParser.g:534:7: directive= REGISTERS_DIRECTIVE regCount= integral_literal { - directive=(Token)match(input,REGISTERS_DIRECTIVE,FOLLOW_REGISTERS_DIRECTIVE_in_registers_directive1704); + directive=(Token)match(input,REGISTERS_DIRECTIVE,FOLLOW_REGISTERS_DIRECTIVE_in_registers_directive1769); stream_REGISTERS_DIRECTIVE.add(directive); - pushFollow(FOLLOW_integral_literal_in_registers_directive1708); + pushFollow(FOLLOW_integral_literal_in_registers_directive1773); regCount=integral_literal(); state._fsp--; @@ -2105,9 +2134,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 522:63: -> ^( I_REGISTERS[$REGISTERS_DIRECTIVE, \"I_REGISTERS\"] $regCount) + // 534:63: -> ^( I_REGISTERS[$REGISTERS_DIRECTIVE, \"I_REGISTERS\"] $regCount) { - // smaliParser.g:522:66: ^( I_REGISTERS[$REGISTERS_DIRECTIVE, \"I_REGISTERS\"] $regCount) + // smaliParser.g:534:66: ^( I_REGISTERS[$REGISTERS_DIRECTIVE, \"I_REGISTERS\"] $regCount) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_REGISTERS, directive, "I_REGISTERS"), root_1); @@ -2123,12 +2152,12 @@ public class smaliParser extends Parser { } break; case 2 : - // smaliParser.g:523:7: directive= LOCALS_DIRECTIVE regCount2= integral_literal + // smaliParser.g:535:7: directive= LOCALS_DIRECTIVE regCount2= integral_literal { - directive=(Token)match(input,LOCALS_DIRECTIVE,FOLLOW_LOCALS_DIRECTIVE_in_registers_directive1728); + directive=(Token)match(input,LOCALS_DIRECTIVE,FOLLOW_LOCALS_DIRECTIVE_in_registers_directive1793); stream_LOCALS_DIRECTIVE.add(directive); - pushFollow(FOLLOW_integral_literal_in_registers_directive1732); + pushFollow(FOLLOW_integral_literal_in_registers_directive1797); regCount2=integral_literal(); state._fsp--; @@ -2145,9 +2174,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 523:61: -> ^( I_LOCALS[$LOCALS_DIRECTIVE, \"I_LOCALS\"] $regCount2) + // 535:61: -> ^( I_LOCALS[$LOCALS_DIRECTIVE, \"I_LOCALS\"] $regCount2) { - // smaliParser.g:523:64: ^( I_LOCALS[$LOCALS_DIRECTIVE, \"I_LOCALS\"] $regCount2) + // smaliParser.g:535:64: ^( I_LOCALS[$LOCALS_DIRECTIVE, \"I_LOCALS\"] $regCount2) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_LOCALS, directive, "I_LOCALS"), root_1); @@ -2200,7 +2229,7 @@ public class smaliParser extends Parser { // $ANTLR start "param_list_or_id" - // smaliParser.g:532:1: param_list_or_id : ( PARAM_LIST_OR_ID_PRIMITIVE_TYPE )+ ; + // smaliParser.g:544:1: param_list_or_id : ( PARAM_LIST_OR_ID_PRIMITIVE_TYPE )+ ; public final smaliParser.param_list_or_id_return param_list_or_id() throws RecognitionException { smaliParser.param_list_or_id_return retval = new smaliParser.param_list_or_id_return(); retval.start = input.LT(1); @@ -2212,13 +2241,13 @@ public class smaliParser extends Parser { CommonTree PARAM_LIST_OR_ID_PRIMITIVE_TYPE43_tree=null; try { - // smaliParser.g:533:3: ( ( PARAM_LIST_OR_ID_PRIMITIVE_TYPE )+ ) - // smaliParser.g:533:5: ( PARAM_LIST_OR_ID_PRIMITIVE_TYPE )+ + // smaliParser.g:545:3: ( ( PARAM_LIST_OR_ID_PRIMITIVE_TYPE )+ ) + // smaliParser.g:545:5: ( PARAM_LIST_OR_ID_PRIMITIVE_TYPE )+ { root_0 = (CommonTree)adaptor.nil(); - // smaliParser.g:533:5: ( PARAM_LIST_OR_ID_PRIMITIVE_TYPE )+ + // smaliParser.g:545:5: ( PARAM_LIST_OR_ID_PRIMITIVE_TYPE )+ int cnt9=0; loop9: while (true) { @@ -2230,9 +2259,9 @@ public class smaliParser extends Parser { switch (alt9) { case 1 : - // smaliParser.g:533:5: PARAM_LIST_OR_ID_PRIMITIVE_TYPE + // smaliParser.g:545:5: PARAM_LIST_OR_ID_PRIMITIVE_TYPE { - PARAM_LIST_OR_ID_PRIMITIVE_TYPE43=(Token)match(input,PARAM_LIST_OR_ID_PRIMITIVE_TYPE,FOLLOW_PARAM_LIST_OR_ID_PRIMITIVE_TYPE_in_param_list_or_id1764); + PARAM_LIST_OR_ID_PRIMITIVE_TYPE43=(Token)match(input,PARAM_LIST_OR_ID_PRIMITIVE_TYPE,FOLLOW_PARAM_LIST_OR_ID_PRIMITIVE_TYPE_in_param_list_or_id1829); PARAM_LIST_OR_ID_PRIMITIVE_TYPE43_tree = (CommonTree)adaptor.create(PARAM_LIST_OR_ID_PRIMITIVE_TYPE43); adaptor.addChild(root_0, PARAM_LIST_OR_ID_PRIMITIVE_TYPE43_tree); @@ -2276,7 +2305,7 @@ public class smaliParser extends Parser { // $ANTLR start "simple_name" - // smaliParser.g:537:1: simple_name : ( SIMPLE_NAME | ACCESS_SPEC -> SIMPLE_NAME[$ACCESS_SPEC] | VERIFICATION_ERROR_TYPE -> SIMPLE_NAME[$VERIFICATION_ERROR_TYPE] | POSITIVE_INTEGER_LITERAL -> SIMPLE_NAME[$POSITIVE_INTEGER_LITERAL] | NEGATIVE_INTEGER_LITERAL -> SIMPLE_NAME[$NEGATIVE_INTEGER_LITERAL] | FLOAT_LITERAL_OR_ID -> SIMPLE_NAME[$FLOAT_LITERAL_OR_ID] | DOUBLE_LITERAL_OR_ID -> SIMPLE_NAME[$DOUBLE_LITERAL_OR_ID] | BOOL_LITERAL -> SIMPLE_NAME[$BOOL_LITERAL] | NULL_LITERAL -> SIMPLE_NAME[$NULL_LITERAL] | REGISTER -> SIMPLE_NAME[$REGISTER] | param_list_or_id ->| PRIMITIVE_TYPE -> SIMPLE_NAME[$PRIMITIVE_TYPE] | VOID_TYPE -> SIMPLE_NAME[$VOID_TYPE] | ANNOTATION_VISIBILITY -> SIMPLE_NAME[$ANNOTATION_VISIBILITY] | INSTRUCTION_FORMAT10t -> SIMPLE_NAME[$INSTRUCTION_FORMAT10t] | INSTRUCTION_FORMAT10x -> SIMPLE_NAME[$INSTRUCTION_FORMAT10x] | INSTRUCTION_FORMAT10x_ODEX -> SIMPLE_NAME[$INSTRUCTION_FORMAT10x_ODEX] | INSTRUCTION_FORMAT11x -> SIMPLE_NAME[$INSTRUCTION_FORMAT11x] | INSTRUCTION_FORMAT12x_OR_ID -> SIMPLE_NAME[$INSTRUCTION_FORMAT12x_OR_ID] | INSTRUCTION_FORMAT21c_FIELD -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_FIELD] | INSTRUCTION_FORMAT21c_FIELD_ODEX -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_FIELD_ODEX] | INSTRUCTION_FORMAT21c_STRING -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_STRING] | INSTRUCTION_FORMAT21c_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_TYPE] | INSTRUCTION_FORMAT21t -> SIMPLE_NAME[$INSTRUCTION_FORMAT21t] | INSTRUCTION_FORMAT22c_FIELD -> SIMPLE_NAME[$INSTRUCTION_FORMAT22c_FIELD] | INSTRUCTION_FORMAT22c_FIELD_ODEX -> SIMPLE_NAME[$INSTRUCTION_FORMAT22c_FIELD_ODEX] | INSTRUCTION_FORMAT22c_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT22c_TYPE] | INSTRUCTION_FORMAT22cs_FIELD -> SIMPLE_NAME[$INSTRUCTION_FORMAT22cs_FIELD] | INSTRUCTION_FORMAT22s_OR_ID -> SIMPLE_NAME[$INSTRUCTION_FORMAT22s_OR_ID] | INSTRUCTION_FORMAT22t -> SIMPLE_NAME[$INSTRUCTION_FORMAT22t] | INSTRUCTION_FORMAT23x -> SIMPLE_NAME[$INSTRUCTION_FORMAT23x] | INSTRUCTION_FORMAT31i_OR_ID -> SIMPLE_NAME[$INSTRUCTION_FORMAT31i_OR_ID] | INSTRUCTION_FORMAT31t -> SIMPLE_NAME[$INSTRUCTION_FORMAT31t] | INSTRUCTION_FORMAT35c_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_METHOD] | INSTRUCTION_FORMAT35c_METHOD_ODEX -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_METHOD_ODEX] | INSTRUCTION_FORMAT35c_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_TYPE] | INSTRUCTION_FORMAT35mi_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT35mi_METHOD] | INSTRUCTION_FORMAT35ms_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT35ms_METHOD] | INSTRUCTION_FORMAT45cc_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT45cc_METHOD] | INSTRUCTION_FORMAT4rcc_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT4rcc_METHOD] | INSTRUCTION_FORMAT51l -> SIMPLE_NAME[$INSTRUCTION_FORMAT51l] ); + // smaliParser.g:549:1: simple_name : ( SIMPLE_NAME | ACCESS_SPEC -> SIMPLE_NAME[$ACCESS_SPEC] | VERIFICATION_ERROR_TYPE -> SIMPLE_NAME[$VERIFICATION_ERROR_TYPE] | POSITIVE_INTEGER_LITERAL -> SIMPLE_NAME[$POSITIVE_INTEGER_LITERAL] | NEGATIVE_INTEGER_LITERAL -> SIMPLE_NAME[$NEGATIVE_INTEGER_LITERAL] | FLOAT_LITERAL_OR_ID -> SIMPLE_NAME[$FLOAT_LITERAL_OR_ID] | DOUBLE_LITERAL_OR_ID -> SIMPLE_NAME[$DOUBLE_LITERAL_OR_ID] | BOOL_LITERAL -> SIMPLE_NAME[$BOOL_LITERAL] | NULL_LITERAL -> SIMPLE_NAME[$NULL_LITERAL] | REGISTER -> SIMPLE_NAME[$REGISTER] | param_list_or_id ->| PRIMITIVE_TYPE -> SIMPLE_NAME[$PRIMITIVE_TYPE] | VOID_TYPE -> SIMPLE_NAME[$VOID_TYPE] | ANNOTATION_VISIBILITY -> SIMPLE_NAME[$ANNOTATION_VISIBILITY] | METHOD_HANDLE_TYPE_FIELD | METHOD_HANDLE_TYPE_METHOD | INSTRUCTION_FORMAT10t -> SIMPLE_NAME[$INSTRUCTION_FORMAT10t] | INSTRUCTION_FORMAT10x -> SIMPLE_NAME[$INSTRUCTION_FORMAT10x] | INSTRUCTION_FORMAT10x_ODEX -> SIMPLE_NAME[$INSTRUCTION_FORMAT10x_ODEX] | INSTRUCTION_FORMAT11x -> SIMPLE_NAME[$INSTRUCTION_FORMAT11x] | INSTRUCTION_FORMAT12x_OR_ID -> SIMPLE_NAME[$INSTRUCTION_FORMAT12x_OR_ID] | INSTRUCTION_FORMAT21c_FIELD -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_FIELD] | INSTRUCTION_FORMAT21c_FIELD_ODEX -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_FIELD_ODEX] | INSTRUCTION_FORMAT21c_METHOD_HANDLE -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_METHOD_HANDLE] | INSTRUCTION_FORMAT21c_METHOD_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_METHOD_TYPE] | INSTRUCTION_FORMAT21c_STRING -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_STRING] | INSTRUCTION_FORMAT21c_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_TYPE] | INSTRUCTION_FORMAT21t -> SIMPLE_NAME[$INSTRUCTION_FORMAT21t] | INSTRUCTION_FORMAT22c_FIELD -> SIMPLE_NAME[$INSTRUCTION_FORMAT22c_FIELD] | INSTRUCTION_FORMAT22c_FIELD_ODEX -> SIMPLE_NAME[$INSTRUCTION_FORMAT22c_FIELD_ODEX] | INSTRUCTION_FORMAT22c_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT22c_TYPE] | INSTRUCTION_FORMAT22cs_FIELD -> SIMPLE_NAME[$INSTRUCTION_FORMAT22cs_FIELD] | INSTRUCTION_FORMAT22s_OR_ID -> SIMPLE_NAME[$INSTRUCTION_FORMAT22s_OR_ID] | INSTRUCTION_FORMAT22t -> SIMPLE_NAME[$INSTRUCTION_FORMAT22t] | INSTRUCTION_FORMAT23x -> SIMPLE_NAME[$INSTRUCTION_FORMAT23x] | INSTRUCTION_FORMAT31i_OR_ID -> SIMPLE_NAME[$INSTRUCTION_FORMAT31i_OR_ID] | INSTRUCTION_FORMAT31t -> SIMPLE_NAME[$INSTRUCTION_FORMAT31t] | INSTRUCTION_FORMAT35c_CALL_SITE -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_CALL_SITE] | INSTRUCTION_FORMAT35c_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_METHOD] | INSTRUCTION_FORMAT35c_METHOD_ODEX -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_METHOD_ODEX] | INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE] | INSTRUCTION_FORMAT35c_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_TYPE] | INSTRUCTION_FORMAT35mi_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT35mi_METHOD] | INSTRUCTION_FORMAT35ms_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT35ms_METHOD] | INSTRUCTION_FORMAT45cc_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT45cc_METHOD] | INSTRUCTION_FORMAT4rcc_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT4rcc_METHOD] | INSTRUCTION_FORMAT51l -> SIMPLE_NAME[$INSTRUCTION_FORMAT51l] ); public final smaliParser.simple_name_return simple_name() throws RecognitionException { smaliParser.simple_name_return retval = new smaliParser.simple_name_return(); retval.start = input.LT(1); @@ -2296,33 +2325,39 @@ public class smaliParser extends Parser { Token PRIMITIVE_TYPE55=null; Token VOID_TYPE56=null; Token ANNOTATION_VISIBILITY57=null; - Token INSTRUCTION_FORMAT10t58=null; - Token INSTRUCTION_FORMAT10x59=null; - Token INSTRUCTION_FORMAT10x_ODEX60=null; - Token INSTRUCTION_FORMAT11x61=null; - Token INSTRUCTION_FORMAT12x_OR_ID62=null; - Token INSTRUCTION_FORMAT21c_FIELD63=null; - Token INSTRUCTION_FORMAT21c_FIELD_ODEX64=null; - Token INSTRUCTION_FORMAT21c_STRING65=null; - Token INSTRUCTION_FORMAT21c_TYPE66=null; - Token INSTRUCTION_FORMAT21t67=null; - Token INSTRUCTION_FORMAT22c_FIELD68=null; - Token INSTRUCTION_FORMAT22c_FIELD_ODEX69=null; - Token INSTRUCTION_FORMAT22c_TYPE70=null; - Token INSTRUCTION_FORMAT22cs_FIELD71=null; - Token INSTRUCTION_FORMAT22s_OR_ID72=null; - Token INSTRUCTION_FORMAT22t73=null; - Token INSTRUCTION_FORMAT23x74=null; - Token INSTRUCTION_FORMAT31i_OR_ID75=null; - Token INSTRUCTION_FORMAT31t76=null; - Token INSTRUCTION_FORMAT35c_METHOD77=null; - Token INSTRUCTION_FORMAT35c_METHOD_ODEX78=null; - Token INSTRUCTION_FORMAT35c_TYPE79=null; - Token INSTRUCTION_FORMAT35mi_METHOD80=null; - Token INSTRUCTION_FORMAT35ms_METHOD81=null; - Token INSTRUCTION_FORMAT45cc_METHOD82=null; - Token INSTRUCTION_FORMAT4rcc_METHOD83=null; - Token INSTRUCTION_FORMAT51l84=null; + Token METHOD_HANDLE_TYPE_FIELD58=null; + Token METHOD_HANDLE_TYPE_METHOD59=null; + Token INSTRUCTION_FORMAT10t60=null; + Token INSTRUCTION_FORMAT10x61=null; + Token INSTRUCTION_FORMAT10x_ODEX62=null; + Token INSTRUCTION_FORMAT11x63=null; + Token INSTRUCTION_FORMAT12x_OR_ID64=null; + Token INSTRUCTION_FORMAT21c_FIELD65=null; + Token INSTRUCTION_FORMAT21c_FIELD_ODEX66=null; + Token INSTRUCTION_FORMAT21c_METHOD_HANDLE67=null; + Token INSTRUCTION_FORMAT21c_METHOD_TYPE68=null; + Token INSTRUCTION_FORMAT21c_STRING69=null; + Token INSTRUCTION_FORMAT21c_TYPE70=null; + Token INSTRUCTION_FORMAT21t71=null; + Token INSTRUCTION_FORMAT22c_FIELD72=null; + Token INSTRUCTION_FORMAT22c_FIELD_ODEX73=null; + Token INSTRUCTION_FORMAT22c_TYPE74=null; + Token INSTRUCTION_FORMAT22cs_FIELD75=null; + Token INSTRUCTION_FORMAT22s_OR_ID76=null; + Token INSTRUCTION_FORMAT22t77=null; + Token INSTRUCTION_FORMAT23x78=null; + Token INSTRUCTION_FORMAT31i_OR_ID79=null; + Token INSTRUCTION_FORMAT31t80=null; + Token INSTRUCTION_FORMAT35c_CALL_SITE81=null; + Token INSTRUCTION_FORMAT35c_METHOD82=null; + Token INSTRUCTION_FORMAT35c_METHOD_ODEX83=null; + Token INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE84=null; + Token INSTRUCTION_FORMAT35c_TYPE85=null; + Token INSTRUCTION_FORMAT35mi_METHOD86=null; + Token INSTRUCTION_FORMAT35ms_METHOD87=null; + Token INSTRUCTION_FORMAT45cc_METHOD88=null; + Token INSTRUCTION_FORMAT4rcc_METHOD89=null; + Token INSTRUCTION_FORMAT51l90=null; ParserRuleReturnScope param_list_or_id54 =null; CommonTree SIMPLE_NAME44_tree=null; @@ -2338,33 +2373,40 @@ public class smaliParser extends Parser { CommonTree PRIMITIVE_TYPE55_tree=null; CommonTree VOID_TYPE56_tree=null; CommonTree ANNOTATION_VISIBILITY57_tree=null; - CommonTree INSTRUCTION_FORMAT10t58_tree=null; - CommonTree INSTRUCTION_FORMAT10x59_tree=null; - CommonTree INSTRUCTION_FORMAT10x_ODEX60_tree=null; - CommonTree INSTRUCTION_FORMAT11x61_tree=null; - CommonTree INSTRUCTION_FORMAT12x_OR_ID62_tree=null; - CommonTree INSTRUCTION_FORMAT21c_FIELD63_tree=null; - CommonTree INSTRUCTION_FORMAT21c_FIELD_ODEX64_tree=null; - CommonTree INSTRUCTION_FORMAT21c_STRING65_tree=null; - CommonTree INSTRUCTION_FORMAT21c_TYPE66_tree=null; - CommonTree INSTRUCTION_FORMAT21t67_tree=null; - CommonTree INSTRUCTION_FORMAT22c_FIELD68_tree=null; - CommonTree INSTRUCTION_FORMAT22c_FIELD_ODEX69_tree=null; - CommonTree INSTRUCTION_FORMAT22c_TYPE70_tree=null; - CommonTree INSTRUCTION_FORMAT22cs_FIELD71_tree=null; - CommonTree INSTRUCTION_FORMAT22s_OR_ID72_tree=null; - CommonTree INSTRUCTION_FORMAT22t73_tree=null; - CommonTree INSTRUCTION_FORMAT23x74_tree=null; - CommonTree INSTRUCTION_FORMAT31i_OR_ID75_tree=null; - CommonTree INSTRUCTION_FORMAT31t76_tree=null; - CommonTree INSTRUCTION_FORMAT35c_METHOD77_tree=null; - CommonTree INSTRUCTION_FORMAT35c_METHOD_ODEX78_tree=null; - CommonTree INSTRUCTION_FORMAT35c_TYPE79_tree=null; - CommonTree INSTRUCTION_FORMAT35mi_METHOD80_tree=null; - CommonTree INSTRUCTION_FORMAT35ms_METHOD81_tree=null; - CommonTree INSTRUCTION_FORMAT45cc_METHOD82_tree=null; - CommonTree INSTRUCTION_FORMAT4rcc_METHOD83_tree=null; - CommonTree INSTRUCTION_FORMAT51l84_tree=null; + CommonTree METHOD_HANDLE_TYPE_FIELD58_tree=null; + CommonTree METHOD_HANDLE_TYPE_METHOD59_tree=null; + CommonTree INSTRUCTION_FORMAT10t60_tree=null; + CommonTree INSTRUCTION_FORMAT10x61_tree=null; + CommonTree INSTRUCTION_FORMAT10x_ODEX62_tree=null; + CommonTree INSTRUCTION_FORMAT11x63_tree=null; + CommonTree INSTRUCTION_FORMAT12x_OR_ID64_tree=null; + CommonTree INSTRUCTION_FORMAT21c_FIELD65_tree=null; + CommonTree INSTRUCTION_FORMAT21c_FIELD_ODEX66_tree=null; + CommonTree INSTRUCTION_FORMAT21c_METHOD_HANDLE67_tree=null; + CommonTree INSTRUCTION_FORMAT21c_METHOD_TYPE68_tree=null; + CommonTree INSTRUCTION_FORMAT21c_STRING69_tree=null; + CommonTree INSTRUCTION_FORMAT21c_TYPE70_tree=null; + CommonTree INSTRUCTION_FORMAT21t71_tree=null; + CommonTree INSTRUCTION_FORMAT22c_FIELD72_tree=null; + CommonTree INSTRUCTION_FORMAT22c_FIELD_ODEX73_tree=null; + CommonTree INSTRUCTION_FORMAT22c_TYPE74_tree=null; + CommonTree INSTRUCTION_FORMAT22cs_FIELD75_tree=null; + CommonTree INSTRUCTION_FORMAT22s_OR_ID76_tree=null; + CommonTree INSTRUCTION_FORMAT22t77_tree=null; + CommonTree INSTRUCTION_FORMAT23x78_tree=null; + CommonTree INSTRUCTION_FORMAT31i_OR_ID79_tree=null; + CommonTree INSTRUCTION_FORMAT31t80_tree=null; + CommonTree INSTRUCTION_FORMAT35c_CALL_SITE81_tree=null; + CommonTree INSTRUCTION_FORMAT35c_METHOD82_tree=null; + CommonTree INSTRUCTION_FORMAT35c_METHOD_ODEX83_tree=null; + CommonTree INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE84_tree=null; + CommonTree INSTRUCTION_FORMAT35c_TYPE85_tree=null; + CommonTree INSTRUCTION_FORMAT35mi_METHOD86_tree=null; + CommonTree INSTRUCTION_FORMAT35ms_METHOD87_tree=null; + CommonTree INSTRUCTION_FORMAT45cc_METHOD88_tree=null; + CommonTree INSTRUCTION_FORMAT4rcc_METHOD89_tree=null; + CommonTree INSTRUCTION_FORMAT51l90_tree=null; + RewriteRuleTokenStream stream_INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE"); RewriteRuleTokenStream stream_ANNOTATION_VISIBILITY=new RewriteRuleTokenStream(adaptor,"token ANNOTATION_VISIBILITY"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT21c_TYPE=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT21c_TYPE"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT22t=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT22t"); @@ -2379,6 +2421,7 @@ public class smaliParser extends Parser { RewriteRuleTokenStream stream_INSTRUCTION_FORMAT45cc_METHOD=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT45cc_METHOD"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT35c_TYPE=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT35c_TYPE"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT10x=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT10x"); + RewriteRuleTokenStream stream_INSTRUCTION_FORMAT21c_METHOD_HANDLE=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT21c_METHOD_HANDLE"); RewriteRuleTokenStream stream_FLOAT_LITERAL_OR_ID=new RewriteRuleTokenStream(adaptor,"token FLOAT_LITERAL_OR_ID"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT22c_TYPE=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT22c_TYPE"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT21c_STRING=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT21c_STRING"); @@ -2391,6 +2434,7 @@ public class smaliParser extends Parser { RewriteRuleTokenStream stream_INSTRUCTION_FORMAT21t=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT21t"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT31t=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT31t"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT23x=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT23x"); + RewriteRuleTokenStream stream_INSTRUCTION_FORMAT35c_CALL_SITE=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT35c_CALL_SITE"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT51l=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT51l"); RewriteRuleTokenStream stream_POSITIVE_INTEGER_LITERAL=new RewriteRuleTokenStream(adaptor,"token POSITIVE_INTEGER_LITERAL"); RewriteRuleTokenStream stream_BOOL_LITERAL=new RewriteRuleTokenStream(adaptor,"token BOOL_LITERAL"); @@ -2399,6 +2443,7 @@ public class smaliParser extends Parser { RewriteRuleTokenStream stream_INSTRUCTION_FORMAT22c_FIELD=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT22c_FIELD"); RewriteRuleTokenStream stream_VERIFICATION_ERROR_TYPE=new RewriteRuleTokenStream(adaptor,"token VERIFICATION_ERROR_TYPE"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT11x=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT11x"); + RewriteRuleTokenStream stream_INSTRUCTION_FORMAT21c_METHOD_TYPE=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT21c_METHOD_TYPE"); RewriteRuleTokenStream stream_ACCESS_SPEC=new RewriteRuleTokenStream(adaptor,"token ACCESS_SPEC"); RewriteRuleTokenStream stream_NULL_LITERAL=new RewriteRuleTokenStream(adaptor,"token NULL_LITERAL"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT4rcc_METHOD=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT4rcc_METHOD"); @@ -2407,8 +2452,8 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_param_list_or_id=new RewriteRuleSubtreeStream(adaptor,"rule param_list_or_id"); try { - // smaliParser.g:538:3: ( SIMPLE_NAME | ACCESS_SPEC -> SIMPLE_NAME[$ACCESS_SPEC] | VERIFICATION_ERROR_TYPE -> SIMPLE_NAME[$VERIFICATION_ERROR_TYPE] | POSITIVE_INTEGER_LITERAL -> SIMPLE_NAME[$POSITIVE_INTEGER_LITERAL] | NEGATIVE_INTEGER_LITERAL -> SIMPLE_NAME[$NEGATIVE_INTEGER_LITERAL] | FLOAT_LITERAL_OR_ID -> SIMPLE_NAME[$FLOAT_LITERAL_OR_ID] | DOUBLE_LITERAL_OR_ID -> SIMPLE_NAME[$DOUBLE_LITERAL_OR_ID] | BOOL_LITERAL -> SIMPLE_NAME[$BOOL_LITERAL] | NULL_LITERAL -> SIMPLE_NAME[$NULL_LITERAL] | REGISTER -> SIMPLE_NAME[$REGISTER] | param_list_or_id ->| PRIMITIVE_TYPE -> SIMPLE_NAME[$PRIMITIVE_TYPE] | VOID_TYPE -> SIMPLE_NAME[$VOID_TYPE] | ANNOTATION_VISIBILITY -> SIMPLE_NAME[$ANNOTATION_VISIBILITY] | INSTRUCTION_FORMAT10t -> SIMPLE_NAME[$INSTRUCTION_FORMAT10t] | INSTRUCTION_FORMAT10x -> SIMPLE_NAME[$INSTRUCTION_FORMAT10x] | INSTRUCTION_FORMAT10x_ODEX -> SIMPLE_NAME[$INSTRUCTION_FORMAT10x_ODEX] | INSTRUCTION_FORMAT11x -> SIMPLE_NAME[$INSTRUCTION_FORMAT11x] | INSTRUCTION_FORMAT12x_OR_ID -> SIMPLE_NAME[$INSTRUCTION_FORMAT12x_OR_ID] | INSTRUCTION_FORMAT21c_FIELD -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_FIELD] | INSTRUCTION_FORMAT21c_FIELD_ODEX -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_FIELD_ODEX] | INSTRUCTION_FORMAT21c_STRING -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_STRING] | INSTRUCTION_FORMAT21c_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_TYPE] | INSTRUCTION_FORMAT21t -> SIMPLE_NAME[$INSTRUCTION_FORMAT21t] | INSTRUCTION_FORMAT22c_FIELD -> SIMPLE_NAME[$INSTRUCTION_FORMAT22c_FIELD] | INSTRUCTION_FORMAT22c_FIELD_ODEX -> SIMPLE_NAME[$INSTRUCTION_FORMAT22c_FIELD_ODEX] | INSTRUCTION_FORMAT22c_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT22c_TYPE] | INSTRUCTION_FORMAT22cs_FIELD -> SIMPLE_NAME[$INSTRUCTION_FORMAT22cs_FIELD] | INSTRUCTION_FORMAT22s_OR_ID -> SIMPLE_NAME[$INSTRUCTION_FORMAT22s_OR_ID] | INSTRUCTION_FORMAT22t -> SIMPLE_NAME[$INSTRUCTION_FORMAT22t] | INSTRUCTION_FORMAT23x -> SIMPLE_NAME[$INSTRUCTION_FORMAT23x] | INSTRUCTION_FORMAT31i_OR_ID -> SIMPLE_NAME[$INSTRUCTION_FORMAT31i_OR_ID] | INSTRUCTION_FORMAT31t -> SIMPLE_NAME[$INSTRUCTION_FORMAT31t] | INSTRUCTION_FORMAT35c_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_METHOD] | INSTRUCTION_FORMAT35c_METHOD_ODEX -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_METHOD_ODEX] | INSTRUCTION_FORMAT35c_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_TYPE] | INSTRUCTION_FORMAT35mi_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT35mi_METHOD] | INSTRUCTION_FORMAT35ms_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT35ms_METHOD] | INSTRUCTION_FORMAT45cc_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT45cc_METHOD] | INSTRUCTION_FORMAT4rcc_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT4rcc_METHOD] | INSTRUCTION_FORMAT51l -> SIMPLE_NAME[$INSTRUCTION_FORMAT51l] ) - int alt10=41; + // smaliParser.g:550:3: ( SIMPLE_NAME | ACCESS_SPEC -> SIMPLE_NAME[$ACCESS_SPEC] | VERIFICATION_ERROR_TYPE -> SIMPLE_NAME[$VERIFICATION_ERROR_TYPE] | POSITIVE_INTEGER_LITERAL -> SIMPLE_NAME[$POSITIVE_INTEGER_LITERAL] | NEGATIVE_INTEGER_LITERAL -> SIMPLE_NAME[$NEGATIVE_INTEGER_LITERAL] | FLOAT_LITERAL_OR_ID -> SIMPLE_NAME[$FLOAT_LITERAL_OR_ID] | DOUBLE_LITERAL_OR_ID -> SIMPLE_NAME[$DOUBLE_LITERAL_OR_ID] | BOOL_LITERAL -> SIMPLE_NAME[$BOOL_LITERAL] | NULL_LITERAL -> SIMPLE_NAME[$NULL_LITERAL] | REGISTER -> SIMPLE_NAME[$REGISTER] | param_list_or_id ->| PRIMITIVE_TYPE -> SIMPLE_NAME[$PRIMITIVE_TYPE] | VOID_TYPE -> SIMPLE_NAME[$VOID_TYPE] | ANNOTATION_VISIBILITY -> SIMPLE_NAME[$ANNOTATION_VISIBILITY] | METHOD_HANDLE_TYPE_FIELD | METHOD_HANDLE_TYPE_METHOD | INSTRUCTION_FORMAT10t -> SIMPLE_NAME[$INSTRUCTION_FORMAT10t] | INSTRUCTION_FORMAT10x -> SIMPLE_NAME[$INSTRUCTION_FORMAT10x] | INSTRUCTION_FORMAT10x_ODEX -> SIMPLE_NAME[$INSTRUCTION_FORMAT10x_ODEX] | INSTRUCTION_FORMAT11x -> SIMPLE_NAME[$INSTRUCTION_FORMAT11x] | INSTRUCTION_FORMAT12x_OR_ID -> SIMPLE_NAME[$INSTRUCTION_FORMAT12x_OR_ID] | INSTRUCTION_FORMAT21c_FIELD -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_FIELD] | INSTRUCTION_FORMAT21c_FIELD_ODEX -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_FIELD_ODEX] | INSTRUCTION_FORMAT21c_METHOD_HANDLE -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_METHOD_HANDLE] | INSTRUCTION_FORMAT21c_METHOD_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_METHOD_TYPE] | INSTRUCTION_FORMAT21c_STRING -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_STRING] | INSTRUCTION_FORMAT21c_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_TYPE] | INSTRUCTION_FORMAT21t -> SIMPLE_NAME[$INSTRUCTION_FORMAT21t] | INSTRUCTION_FORMAT22c_FIELD -> SIMPLE_NAME[$INSTRUCTION_FORMAT22c_FIELD] | INSTRUCTION_FORMAT22c_FIELD_ODEX -> SIMPLE_NAME[$INSTRUCTION_FORMAT22c_FIELD_ODEX] | INSTRUCTION_FORMAT22c_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT22c_TYPE] | INSTRUCTION_FORMAT22cs_FIELD -> SIMPLE_NAME[$INSTRUCTION_FORMAT22cs_FIELD] | INSTRUCTION_FORMAT22s_OR_ID -> SIMPLE_NAME[$INSTRUCTION_FORMAT22s_OR_ID] | INSTRUCTION_FORMAT22t -> SIMPLE_NAME[$INSTRUCTION_FORMAT22t] | INSTRUCTION_FORMAT23x -> SIMPLE_NAME[$INSTRUCTION_FORMAT23x] | INSTRUCTION_FORMAT31i_OR_ID -> SIMPLE_NAME[$INSTRUCTION_FORMAT31i_OR_ID] | INSTRUCTION_FORMAT31t -> SIMPLE_NAME[$INSTRUCTION_FORMAT31t] | INSTRUCTION_FORMAT35c_CALL_SITE -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_CALL_SITE] | INSTRUCTION_FORMAT35c_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_METHOD] | INSTRUCTION_FORMAT35c_METHOD_ODEX -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_METHOD_ODEX] | INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE] | INSTRUCTION_FORMAT35c_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_TYPE] | INSTRUCTION_FORMAT35mi_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT35mi_METHOD] | INSTRUCTION_FORMAT35ms_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT35ms_METHOD] | INSTRUCTION_FORMAT45cc_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT45cc_METHOD] | INSTRUCTION_FORMAT4rcc_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT4rcc_METHOD] | INSTRUCTION_FORMAT51l -> SIMPLE_NAME[$INSTRUCTION_FORMAT51l] ) + int alt10=47; switch ( input.LA(1) ) { case SIMPLE_NAME: { @@ -2480,141 +2525,171 @@ public class smaliParser extends Parser { alt10=14; } break; - case INSTRUCTION_FORMAT10t: + case METHOD_HANDLE_TYPE_FIELD: { alt10=15; } break; - case INSTRUCTION_FORMAT10x: + case METHOD_HANDLE_TYPE_METHOD: { alt10=16; } break; - case INSTRUCTION_FORMAT10x_ODEX: + case INSTRUCTION_FORMAT10t: { alt10=17; } break; - case INSTRUCTION_FORMAT11x: + case INSTRUCTION_FORMAT10x: { alt10=18; } break; - case INSTRUCTION_FORMAT12x_OR_ID: + case INSTRUCTION_FORMAT10x_ODEX: { alt10=19; } break; - case INSTRUCTION_FORMAT21c_FIELD: + case INSTRUCTION_FORMAT11x: { alt10=20; } break; - case INSTRUCTION_FORMAT21c_FIELD_ODEX: + case INSTRUCTION_FORMAT12x_OR_ID: { alt10=21; } break; - case INSTRUCTION_FORMAT21c_STRING: + case INSTRUCTION_FORMAT21c_FIELD: { alt10=22; } break; - case INSTRUCTION_FORMAT21c_TYPE: + case INSTRUCTION_FORMAT21c_FIELD_ODEX: { alt10=23; } break; - case INSTRUCTION_FORMAT21t: + case INSTRUCTION_FORMAT21c_METHOD_HANDLE: { alt10=24; } break; - case INSTRUCTION_FORMAT22c_FIELD: + case INSTRUCTION_FORMAT21c_METHOD_TYPE: { alt10=25; } break; - case INSTRUCTION_FORMAT22c_FIELD_ODEX: + case INSTRUCTION_FORMAT21c_STRING: { alt10=26; } break; - case INSTRUCTION_FORMAT22c_TYPE: + case INSTRUCTION_FORMAT21c_TYPE: { alt10=27; } break; - case INSTRUCTION_FORMAT22cs_FIELD: + case INSTRUCTION_FORMAT21t: { alt10=28; } break; - case INSTRUCTION_FORMAT22s_OR_ID: + case INSTRUCTION_FORMAT22c_FIELD: { alt10=29; } break; - case INSTRUCTION_FORMAT22t: + case INSTRUCTION_FORMAT22c_FIELD_ODEX: { alt10=30; } break; - case INSTRUCTION_FORMAT23x: + case INSTRUCTION_FORMAT22c_TYPE: { alt10=31; } break; - case INSTRUCTION_FORMAT31i_OR_ID: + case INSTRUCTION_FORMAT22cs_FIELD: { alt10=32; } break; - case INSTRUCTION_FORMAT31t: + case INSTRUCTION_FORMAT22s_OR_ID: { alt10=33; } break; - case INSTRUCTION_FORMAT35c_METHOD: + case INSTRUCTION_FORMAT22t: { alt10=34; } break; - case INSTRUCTION_FORMAT35c_METHOD_ODEX: + case INSTRUCTION_FORMAT23x: { alt10=35; } break; - case INSTRUCTION_FORMAT35c_TYPE: + case INSTRUCTION_FORMAT31i_OR_ID: { alt10=36; } break; - case INSTRUCTION_FORMAT35mi_METHOD: + case INSTRUCTION_FORMAT31t: { alt10=37; } break; - case INSTRUCTION_FORMAT35ms_METHOD: + case INSTRUCTION_FORMAT35c_CALL_SITE: { alt10=38; } break; - case INSTRUCTION_FORMAT45cc_METHOD: + case INSTRUCTION_FORMAT35c_METHOD: { alt10=39; } break; - case INSTRUCTION_FORMAT4rcc_METHOD: + case INSTRUCTION_FORMAT35c_METHOD_ODEX: { alt10=40; } break; - case INSTRUCTION_FORMAT51l: + case INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE: { alt10=41; } break; + case INSTRUCTION_FORMAT35c_TYPE: + { + alt10=42; + } + break; + case INSTRUCTION_FORMAT35mi_METHOD: + { + alt10=43; + } + break; + case INSTRUCTION_FORMAT35ms_METHOD: + { + alt10=44; + } + break; + case INSTRUCTION_FORMAT45cc_METHOD: + { + alt10=45; + } + break; + case INSTRUCTION_FORMAT4rcc_METHOD: + { + alt10=46; + } + break; + case INSTRUCTION_FORMAT51l: + { + alt10=47; + } + break; default: NoViableAltException nvae = new NoViableAltException("", 10, 0, input); @@ -2622,21 +2697,21 @@ public class smaliParser extends Parser { } switch (alt10) { case 1 : - // smaliParser.g:538:5: SIMPLE_NAME + // smaliParser.g:550:5: SIMPLE_NAME { root_0 = (CommonTree)adaptor.nil(); - SIMPLE_NAME44=(Token)match(input,SIMPLE_NAME,FOLLOW_SIMPLE_NAME_in_simple_name1777); + SIMPLE_NAME44=(Token)match(input,SIMPLE_NAME,FOLLOW_SIMPLE_NAME_in_simple_name1842); SIMPLE_NAME44_tree = (CommonTree)adaptor.create(SIMPLE_NAME44); adaptor.addChild(root_0, SIMPLE_NAME44_tree); } break; case 2 : - // smaliParser.g:539:5: ACCESS_SPEC + // smaliParser.g:551:5: ACCESS_SPEC { - ACCESS_SPEC45=(Token)match(input,ACCESS_SPEC,FOLLOW_ACCESS_SPEC_in_simple_name1783); + ACCESS_SPEC45=(Token)match(input,ACCESS_SPEC,FOLLOW_ACCESS_SPEC_in_simple_name1848); stream_ACCESS_SPEC.add(ACCESS_SPEC45); // AST REWRITE @@ -2650,7 +2725,7 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 539:17: -> SIMPLE_NAME[$ACCESS_SPEC] + // 551:17: -> SIMPLE_NAME[$ACCESS_SPEC] { adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, ACCESS_SPEC45)); } @@ -2661,9 +2736,9 @@ public class smaliParser extends Parser { } break; case 3 : - // smaliParser.g:540:5: VERIFICATION_ERROR_TYPE + // smaliParser.g:552:5: VERIFICATION_ERROR_TYPE { - VERIFICATION_ERROR_TYPE46=(Token)match(input,VERIFICATION_ERROR_TYPE,FOLLOW_VERIFICATION_ERROR_TYPE_in_simple_name1794); + VERIFICATION_ERROR_TYPE46=(Token)match(input,VERIFICATION_ERROR_TYPE,FOLLOW_VERIFICATION_ERROR_TYPE_in_simple_name1859); stream_VERIFICATION_ERROR_TYPE.add(VERIFICATION_ERROR_TYPE46); // AST REWRITE @@ -2677,7 +2752,7 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 540:29: -> SIMPLE_NAME[$VERIFICATION_ERROR_TYPE] + // 552:29: -> SIMPLE_NAME[$VERIFICATION_ERROR_TYPE] { adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, VERIFICATION_ERROR_TYPE46)); } @@ -2688,9 +2763,9 @@ public class smaliParser extends Parser { } break; case 4 : - // smaliParser.g:541:5: POSITIVE_INTEGER_LITERAL + // smaliParser.g:553:5: POSITIVE_INTEGER_LITERAL { - POSITIVE_INTEGER_LITERAL47=(Token)match(input,POSITIVE_INTEGER_LITERAL,FOLLOW_POSITIVE_INTEGER_LITERAL_in_simple_name1805); + POSITIVE_INTEGER_LITERAL47=(Token)match(input,POSITIVE_INTEGER_LITERAL,FOLLOW_POSITIVE_INTEGER_LITERAL_in_simple_name1870); stream_POSITIVE_INTEGER_LITERAL.add(POSITIVE_INTEGER_LITERAL47); // AST REWRITE @@ -2704,7 +2779,7 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 541:30: -> SIMPLE_NAME[$POSITIVE_INTEGER_LITERAL] + // 553:30: -> SIMPLE_NAME[$POSITIVE_INTEGER_LITERAL] { adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, POSITIVE_INTEGER_LITERAL47)); } @@ -2715,9 +2790,9 @@ public class smaliParser extends Parser { } break; case 5 : - // smaliParser.g:542:5: NEGATIVE_INTEGER_LITERAL + // smaliParser.g:554:5: NEGATIVE_INTEGER_LITERAL { - NEGATIVE_INTEGER_LITERAL48=(Token)match(input,NEGATIVE_INTEGER_LITERAL,FOLLOW_NEGATIVE_INTEGER_LITERAL_in_simple_name1816); + NEGATIVE_INTEGER_LITERAL48=(Token)match(input,NEGATIVE_INTEGER_LITERAL,FOLLOW_NEGATIVE_INTEGER_LITERAL_in_simple_name1881); stream_NEGATIVE_INTEGER_LITERAL.add(NEGATIVE_INTEGER_LITERAL48); // AST REWRITE @@ -2731,7 +2806,7 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 542:30: -> SIMPLE_NAME[$NEGATIVE_INTEGER_LITERAL] + // 554:30: -> SIMPLE_NAME[$NEGATIVE_INTEGER_LITERAL] { adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, NEGATIVE_INTEGER_LITERAL48)); } @@ -2742,9 +2817,9 @@ public class smaliParser extends Parser { } break; case 6 : - // smaliParser.g:543:5: FLOAT_LITERAL_OR_ID + // smaliParser.g:555:5: FLOAT_LITERAL_OR_ID { - FLOAT_LITERAL_OR_ID49=(Token)match(input,FLOAT_LITERAL_OR_ID,FOLLOW_FLOAT_LITERAL_OR_ID_in_simple_name1827); + FLOAT_LITERAL_OR_ID49=(Token)match(input,FLOAT_LITERAL_OR_ID,FOLLOW_FLOAT_LITERAL_OR_ID_in_simple_name1892); stream_FLOAT_LITERAL_OR_ID.add(FLOAT_LITERAL_OR_ID49); // AST REWRITE @@ -2758,7 +2833,7 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 543:25: -> SIMPLE_NAME[$FLOAT_LITERAL_OR_ID] + // 555:25: -> SIMPLE_NAME[$FLOAT_LITERAL_OR_ID] { adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, FLOAT_LITERAL_OR_ID49)); } @@ -2769,9 +2844,9 @@ public class smaliParser extends Parser { } break; case 7 : - // smaliParser.g:544:5: DOUBLE_LITERAL_OR_ID + // smaliParser.g:556:5: DOUBLE_LITERAL_OR_ID { - DOUBLE_LITERAL_OR_ID50=(Token)match(input,DOUBLE_LITERAL_OR_ID,FOLLOW_DOUBLE_LITERAL_OR_ID_in_simple_name1838); + DOUBLE_LITERAL_OR_ID50=(Token)match(input,DOUBLE_LITERAL_OR_ID,FOLLOW_DOUBLE_LITERAL_OR_ID_in_simple_name1903); stream_DOUBLE_LITERAL_OR_ID.add(DOUBLE_LITERAL_OR_ID50); // AST REWRITE @@ -2785,7 +2860,7 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 544:26: -> SIMPLE_NAME[$DOUBLE_LITERAL_OR_ID] + // 556:26: -> SIMPLE_NAME[$DOUBLE_LITERAL_OR_ID] { adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, DOUBLE_LITERAL_OR_ID50)); } @@ -2796,9 +2871,9 @@ public class smaliParser extends Parser { } break; case 8 : - // smaliParser.g:545:5: BOOL_LITERAL + // smaliParser.g:557:5: BOOL_LITERAL { - BOOL_LITERAL51=(Token)match(input,BOOL_LITERAL,FOLLOW_BOOL_LITERAL_in_simple_name1849); + BOOL_LITERAL51=(Token)match(input,BOOL_LITERAL,FOLLOW_BOOL_LITERAL_in_simple_name1914); stream_BOOL_LITERAL.add(BOOL_LITERAL51); // AST REWRITE @@ -2812,7 +2887,7 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 545:18: -> SIMPLE_NAME[$BOOL_LITERAL] + // 557:18: -> SIMPLE_NAME[$BOOL_LITERAL] { adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, BOOL_LITERAL51)); } @@ -2823,9 +2898,9 @@ public class smaliParser extends Parser { } break; case 9 : - // smaliParser.g:546:5: NULL_LITERAL + // smaliParser.g:558:5: NULL_LITERAL { - NULL_LITERAL52=(Token)match(input,NULL_LITERAL,FOLLOW_NULL_LITERAL_in_simple_name1860); + NULL_LITERAL52=(Token)match(input,NULL_LITERAL,FOLLOW_NULL_LITERAL_in_simple_name1925); stream_NULL_LITERAL.add(NULL_LITERAL52); // AST REWRITE @@ -2839,7 +2914,7 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 546:18: -> SIMPLE_NAME[$NULL_LITERAL] + // 558:18: -> SIMPLE_NAME[$NULL_LITERAL] { adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, NULL_LITERAL52)); } @@ -2850,9 +2925,9 @@ public class smaliParser extends Parser { } break; case 10 : - // smaliParser.g:547:5: REGISTER + // smaliParser.g:559:5: REGISTER { - REGISTER53=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_simple_name1871); + REGISTER53=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_simple_name1936); stream_REGISTER.add(REGISTER53); // AST REWRITE @@ -2866,7 +2941,7 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 547:14: -> SIMPLE_NAME[$REGISTER] + // 559:14: -> SIMPLE_NAME[$REGISTER] { adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, REGISTER53)); } @@ -2877,9 +2952,9 @@ public class smaliParser extends Parser { } break; case 11 : - // smaliParser.g:548:5: param_list_or_id + // smaliParser.g:560:5: param_list_or_id { - pushFollow(FOLLOW_param_list_or_id_in_simple_name1882); + pushFollow(FOLLOW_param_list_or_id_in_simple_name1947); param_list_or_id54=param_list_or_id(); state._fsp--; @@ -2895,7 +2970,7 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 548:22: -> + // 560:22: -> { adaptor.addChild(root_0, adaptor.create(SIMPLE_NAME, (param_list_or_id54!=null?input.toString(param_list_or_id54.start,param_list_or_id54.stop):null)) ); } @@ -2906,9 +2981,9 @@ public class smaliParser extends Parser { } break; case 12 : - // smaliParser.g:549:5: PRIMITIVE_TYPE + // smaliParser.g:561:5: PRIMITIVE_TYPE { - PRIMITIVE_TYPE55=(Token)match(input,PRIMITIVE_TYPE,FOLLOW_PRIMITIVE_TYPE_in_simple_name1892); + PRIMITIVE_TYPE55=(Token)match(input,PRIMITIVE_TYPE,FOLLOW_PRIMITIVE_TYPE_in_simple_name1957); stream_PRIMITIVE_TYPE.add(PRIMITIVE_TYPE55); // AST REWRITE @@ -2922,7 +2997,7 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 549:20: -> SIMPLE_NAME[$PRIMITIVE_TYPE] + // 561:20: -> SIMPLE_NAME[$PRIMITIVE_TYPE] { adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, PRIMITIVE_TYPE55)); } @@ -2933,9 +3008,9 @@ public class smaliParser extends Parser { } break; case 13 : - // smaliParser.g:550:5: VOID_TYPE + // smaliParser.g:562:5: VOID_TYPE { - VOID_TYPE56=(Token)match(input,VOID_TYPE,FOLLOW_VOID_TYPE_in_simple_name1903); + VOID_TYPE56=(Token)match(input,VOID_TYPE,FOLLOW_VOID_TYPE_in_simple_name1968); stream_VOID_TYPE.add(VOID_TYPE56); // AST REWRITE @@ -2949,7 +3024,7 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 550:15: -> SIMPLE_NAME[$VOID_TYPE] + // 562:15: -> SIMPLE_NAME[$VOID_TYPE] { adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, VOID_TYPE56)); } @@ -2960,9 +3035,9 @@ public class smaliParser extends Parser { } break; case 14 : - // smaliParser.g:551:5: ANNOTATION_VISIBILITY + // smaliParser.g:563:5: ANNOTATION_VISIBILITY { - ANNOTATION_VISIBILITY57=(Token)match(input,ANNOTATION_VISIBILITY,FOLLOW_ANNOTATION_VISIBILITY_in_simple_name1914); + ANNOTATION_VISIBILITY57=(Token)match(input,ANNOTATION_VISIBILITY,FOLLOW_ANNOTATION_VISIBILITY_in_simple_name1979); stream_ANNOTATION_VISIBILITY.add(ANNOTATION_VISIBILITY57); // AST REWRITE @@ -2976,7 +3051,7 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 551:27: -> SIMPLE_NAME[$ANNOTATION_VISIBILITY] + // 563:27: -> SIMPLE_NAME[$ANNOTATION_VISIBILITY] { adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, ANNOTATION_VISIBILITY57)); } @@ -2987,10 +3062,34 @@ public class smaliParser extends Parser { } break; case 15 : - // smaliParser.g:552:5: INSTRUCTION_FORMAT10t + // smaliParser.g:564:5: METHOD_HANDLE_TYPE_FIELD + { + root_0 = (CommonTree)adaptor.nil(); + + + METHOD_HANDLE_TYPE_FIELD58=(Token)match(input,METHOD_HANDLE_TYPE_FIELD,FOLLOW_METHOD_HANDLE_TYPE_FIELD_in_simple_name1990); + METHOD_HANDLE_TYPE_FIELD58_tree = (CommonTree)adaptor.create(METHOD_HANDLE_TYPE_FIELD58); + adaptor.addChild(root_0, METHOD_HANDLE_TYPE_FIELD58_tree); + + } + break; + case 16 : + // smaliParser.g:565:5: METHOD_HANDLE_TYPE_METHOD + { + root_0 = (CommonTree)adaptor.nil(); + + + METHOD_HANDLE_TYPE_METHOD59=(Token)match(input,METHOD_HANDLE_TYPE_METHOD,FOLLOW_METHOD_HANDLE_TYPE_METHOD_in_simple_name1996); + METHOD_HANDLE_TYPE_METHOD59_tree = (CommonTree)adaptor.create(METHOD_HANDLE_TYPE_METHOD59); + adaptor.addChild(root_0, METHOD_HANDLE_TYPE_METHOD59_tree); + + } + break; + case 17 : + // smaliParser.g:566:5: INSTRUCTION_FORMAT10t { - INSTRUCTION_FORMAT10t58=(Token)match(input,INSTRUCTION_FORMAT10t,FOLLOW_INSTRUCTION_FORMAT10t_in_simple_name1925); - stream_INSTRUCTION_FORMAT10t.add(INSTRUCTION_FORMAT10t58); + INSTRUCTION_FORMAT10t60=(Token)match(input,INSTRUCTION_FORMAT10t,FOLLOW_INSTRUCTION_FORMAT10t_in_simple_name2002); + stream_INSTRUCTION_FORMAT10t.add(INSTRUCTION_FORMAT10t60); // AST REWRITE // elements: @@ -3003,9 +3102,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 552:27: -> SIMPLE_NAME[$INSTRUCTION_FORMAT10t] + // 566:27: -> SIMPLE_NAME[$INSTRUCTION_FORMAT10t] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT10t58)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT10t60)); } @@ -3013,11 +3112,11 @@ public class smaliParser extends Parser { } break; - case 16 : - // smaliParser.g:553:5: INSTRUCTION_FORMAT10x + case 18 : + // smaliParser.g:567:5: INSTRUCTION_FORMAT10x { - INSTRUCTION_FORMAT10x59=(Token)match(input,INSTRUCTION_FORMAT10x,FOLLOW_INSTRUCTION_FORMAT10x_in_simple_name1936); - stream_INSTRUCTION_FORMAT10x.add(INSTRUCTION_FORMAT10x59); + INSTRUCTION_FORMAT10x61=(Token)match(input,INSTRUCTION_FORMAT10x,FOLLOW_INSTRUCTION_FORMAT10x_in_simple_name2013); + stream_INSTRUCTION_FORMAT10x.add(INSTRUCTION_FORMAT10x61); // AST REWRITE // elements: @@ -3030,9 +3129,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 553:27: -> SIMPLE_NAME[$INSTRUCTION_FORMAT10x] + // 567:27: -> SIMPLE_NAME[$INSTRUCTION_FORMAT10x] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT10x59)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT10x61)); } @@ -3040,11 +3139,11 @@ public class smaliParser extends Parser { } break; - case 17 : - // smaliParser.g:554:5: INSTRUCTION_FORMAT10x_ODEX + case 19 : + // smaliParser.g:568:5: INSTRUCTION_FORMAT10x_ODEX { - INSTRUCTION_FORMAT10x_ODEX60=(Token)match(input,INSTRUCTION_FORMAT10x_ODEX,FOLLOW_INSTRUCTION_FORMAT10x_ODEX_in_simple_name1947); - stream_INSTRUCTION_FORMAT10x_ODEX.add(INSTRUCTION_FORMAT10x_ODEX60); + INSTRUCTION_FORMAT10x_ODEX62=(Token)match(input,INSTRUCTION_FORMAT10x_ODEX,FOLLOW_INSTRUCTION_FORMAT10x_ODEX_in_simple_name2024); + stream_INSTRUCTION_FORMAT10x_ODEX.add(INSTRUCTION_FORMAT10x_ODEX62); // AST REWRITE // elements: @@ -3057,9 +3156,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 554:32: -> SIMPLE_NAME[$INSTRUCTION_FORMAT10x_ODEX] + // 568:32: -> SIMPLE_NAME[$INSTRUCTION_FORMAT10x_ODEX] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT10x_ODEX60)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT10x_ODEX62)); } @@ -3067,11 +3166,11 @@ public class smaliParser extends Parser { } break; - case 18 : - // smaliParser.g:555:5: INSTRUCTION_FORMAT11x + case 20 : + // smaliParser.g:569:5: INSTRUCTION_FORMAT11x { - INSTRUCTION_FORMAT11x61=(Token)match(input,INSTRUCTION_FORMAT11x,FOLLOW_INSTRUCTION_FORMAT11x_in_simple_name1958); - stream_INSTRUCTION_FORMAT11x.add(INSTRUCTION_FORMAT11x61); + INSTRUCTION_FORMAT11x63=(Token)match(input,INSTRUCTION_FORMAT11x,FOLLOW_INSTRUCTION_FORMAT11x_in_simple_name2035); + stream_INSTRUCTION_FORMAT11x.add(INSTRUCTION_FORMAT11x63); // AST REWRITE // elements: @@ -3084,9 +3183,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 555:27: -> SIMPLE_NAME[$INSTRUCTION_FORMAT11x] + // 569:27: -> SIMPLE_NAME[$INSTRUCTION_FORMAT11x] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT11x61)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT11x63)); } @@ -3094,11 +3193,11 @@ public class smaliParser extends Parser { } break; - case 19 : - // smaliParser.g:556:5: INSTRUCTION_FORMAT12x_OR_ID + case 21 : + // smaliParser.g:570:5: INSTRUCTION_FORMAT12x_OR_ID { - INSTRUCTION_FORMAT12x_OR_ID62=(Token)match(input,INSTRUCTION_FORMAT12x_OR_ID,FOLLOW_INSTRUCTION_FORMAT12x_OR_ID_in_simple_name1969); - stream_INSTRUCTION_FORMAT12x_OR_ID.add(INSTRUCTION_FORMAT12x_OR_ID62); + INSTRUCTION_FORMAT12x_OR_ID64=(Token)match(input,INSTRUCTION_FORMAT12x_OR_ID,FOLLOW_INSTRUCTION_FORMAT12x_OR_ID_in_simple_name2046); + stream_INSTRUCTION_FORMAT12x_OR_ID.add(INSTRUCTION_FORMAT12x_OR_ID64); // AST REWRITE // elements: @@ -3111,9 +3210,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 556:33: -> SIMPLE_NAME[$INSTRUCTION_FORMAT12x_OR_ID] + // 570:33: -> SIMPLE_NAME[$INSTRUCTION_FORMAT12x_OR_ID] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT12x_OR_ID62)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT12x_OR_ID64)); } @@ -3121,11 +3220,11 @@ public class smaliParser extends Parser { } break; - case 20 : - // smaliParser.g:557:5: INSTRUCTION_FORMAT21c_FIELD + case 22 : + // smaliParser.g:571:5: INSTRUCTION_FORMAT21c_FIELD { - INSTRUCTION_FORMAT21c_FIELD63=(Token)match(input,INSTRUCTION_FORMAT21c_FIELD,FOLLOW_INSTRUCTION_FORMAT21c_FIELD_in_simple_name1980); - stream_INSTRUCTION_FORMAT21c_FIELD.add(INSTRUCTION_FORMAT21c_FIELD63); + INSTRUCTION_FORMAT21c_FIELD65=(Token)match(input,INSTRUCTION_FORMAT21c_FIELD,FOLLOW_INSTRUCTION_FORMAT21c_FIELD_in_simple_name2057); + stream_INSTRUCTION_FORMAT21c_FIELD.add(INSTRUCTION_FORMAT21c_FIELD65); // AST REWRITE // elements: @@ -3138,9 +3237,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 557:33: -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_FIELD] + // 571:33: -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_FIELD] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT21c_FIELD63)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT21c_FIELD65)); } @@ -3148,11 +3247,11 @@ public class smaliParser extends Parser { } break; - case 21 : - // smaliParser.g:558:5: INSTRUCTION_FORMAT21c_FIELD_ODEX + case 23 : + // smaliParser.g:572:5: INSTRUCTION_FORMAT21c_FIELD_ODEX { - INSTRUCTION_FORMAT21c_FIELD_ODEX64=(Token)match(input,INSTRUCTION_FORMAT21c_FIELD_ODEX,FOLLOW_INSTRUCTION_FORMAT21c_FIELD_ODEX_in_simple_name1991); - stream_INSTRUCTION_FORMAT21c_FIELD_ODEX.add(INSTRUCTION_FORMAT21c_FIELD_ODEX64); + INSTRUCTION_FORMAT21c_FIELD_ODEX66=(Token)match(input,INSTRUCTION_FORMAT21c_FIELD_ODEX,FOLLOW_INSTRUCTION_FORMAT21c_FIELD_ODEX_in_simple_name2068); + stream_INSTRUCTION_FORMAT21c_FIELD_ODEX.add(INSTRUCTION_FORMAT21c_FIELD_ODEX66); // AST REWRITE // elements: @@ -3165,9 +3264,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 558:38: -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_FIELD_ODEX] + // 572:38: -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_FIELD_ODEX] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT21c_FIELD_ODEX64)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT21c_FIELD_ODEX66)); } @@ -3175,11 +3274,11 @@ public class smaliParser extends Parser { } break; - case 22 : - // smaliParser.g:559:5: INSTRUCTION_FORMAT21c_STRING + case 24 : + // smaliParser.g:573:5: INSTRUCTION_FORMAT21c_METHOD_HANDLE { - INSTRUCTION_FORMAT21c_STRING65=(Token)match(input,INSTRUCTION_FORMAT21c_STRING,FOLLOW_INSTRUCTION_FORMAT21c_STRING_in_simple_name2002); - stream_INSTRUCTION_FORMAT21c_STRING.add(INSTRUCTION_FORMAT21c_STRING65); + INSTRUCTION_FORMAT21c_METHOD_HANDLE67=(Token)match(input,INSTRUCTION_FORMAT21c_METHOD_HANDLE,FOLLOW_INSTRUCTION_FORMAT21c_METHOD_HANDLE_in_simple_name2079); + stream_INSTRUCTION_FORMAT21c_METHOD_HANDLE.add(INSTRUCTION_FORMAT21c_METHOD_HANDLE67); // AST REWRITE // elements: @@ -3192,9 +3291,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 559:34: -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_STRING] + // 573:41: -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_METHOD_HANDLE] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT21c_STRING65)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT21c_METHOD_HANDLE67)); } @@ -3202,11 +3301,11 @@ public class smaliParser extends Parser { } break; - case 23 : - // smaliParser.g:560:5: INSTRUCTION_FORMAT21c_TYPE + case 25 : + // smaliParser.g:574:5: INSTRUCTION_FORMAT21c_METHOD_TYPE { - INSTRUCTION_FORMAT21c_TYPE66=(Token)match(input,INSTRUCTION_FORMAT21c_TYPE,FOLLOW_INSTRUCTION_FORMAT21c_TYPE_in_simple_name2013); - stream_INSTRUCTION_FORMAT21c_TYPE.add(INSTRUCTION_FORMAT21c_TYPE66); + INSTRUCTION_FORMAT21c_METHOD_TYPE68=(Token)match(input,INSTRUCTION_FORMAT21c_METHOD_TYPE,FOLLOW_INSTRUCTION_FORMAT21c_METHOD_TYPE_in_simple_name2090); + stream_INSTRUCTION_FORMAT21c_METHOD_TYPE.add(INSTRUCTION_FORMAT21c_METHOD_TYPE68); // AST REWRITE // elements: @@ -3219,9 +3318,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 560:32: -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_TYPE] + // 574:39: -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_METHOD_TYPE] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT21c_TYPE66)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT21c_METHOD_TYPE68)); } @@ -3229,11 +3328,11 @@ public class smaliParser extends Parser { } break; - case 24 : - // smaliParser.g:561:5: INSTRUCTION_FORMAT21t + case 26 : + // smaliParser.g:575:5: INSTRUCTION_FORMAT21c_STRING { - INSTRUCTION_FORMAT21t67=(Token)match(input,INSTRUCTION_FORMAT21t,FOLLOW_INSTRUCTION_FORMAT21t_in_simple_name2024); - stream_INSTRUCTION_FORMAT21t.add(INSTRUCTION_FORMAT21t67); + INSTRUCTION_FORMAT21c_STRING69=(Token)match(input,INSTRUCTION_FORMAT21c_STRING,FOLLOW_INSTRUCTION_FORMAT21c_STRING_in_simple_name2101); + stream_INSTRUCTION_FORMAT21c_STRING.add(INSTRUCTION_FORMAT21c_STRING69); // AST REWRITE // elements: @@ -3246,9 +3345,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 561:27: -> SIMPLE_NAME[$INSTRUCTION_FORMAT21t] + // 575:34: -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_STRING] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT21t67)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT21c_STRING69)); } @@ -3256,11 +3355,11 @@ public class smaliParser extends Parser { } break; - case 25 : - // smaliParser.g:562:5: INSTRUCTION_FORMAT22c_FIELD + case 27 : + // smaliParser.g:576:5: INSTRUCTION_FORMAT21c_TYPE { - INSTRUCTION_FORMAT22c_FIELD68=(Token)match(input,INSTRUCTION_FORMAT22c_FIELD,FOLLOW_INSTRUCTION_FORMAT22c_FIELD_in_simple_name2035); - stream_INSTRUCTION_FORMAT22c_FIELD.add(INSTRUCTION_FORMAT22c_FIELD68); + INSTRUCTION_FORMAT21c_TYPE70=(Token)match(input,INSTRUCTION_FORMAT21c_TYPE,FOLLOW_INSTRUCTION_FORMAT21c_TYPE_in_simple_name2112); + stream_INSTRUCTION_FORMAT21c_TYPE.add(INSTRUCTION_FORMAT21c_TYPE70); // AST REWRITE // elements: @@ -3273,9 +3372,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 562:33: -> SIMPLE_NAME[$INSTRUCTION_FORMAT22c_FIELD] + // 576:32: -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_TYPE] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT22c_FIELD68)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT21c_TYPE70)); } @@ -3283,11 +3382,11 @@ public class smaliParser extends Parser { } break; - case 26 : - // smaliParser.g:563:5: INSTRUCTION_FORMAT22c_FIELD_ODEX + case 28 : + // smaliParser.g:577:5: INSTRUCTION_FORMAT21t { - INSTRUCTION_FORMAT22c_FIELD_ODEX69=(Token)match(input,INSTRUCTION_FORMAT22c_FIELD_ODEX,FOLLOW_INSTRUCTION_FORMAT22c_FIELD_ODEX_in_simple_name2046); - stream_INSTRUCTION_FORMAT22c_FIELD_ODEX.add(INSTRUCTION_FORMAT22c_FIELD_ODEX69); + INSTRUCTION_FORMAT21t71=(Token)match(input,INSTRUCTION_FORMAT21t,FOLLOW_INSTRUCTION_FORMAT21t_in_simple_name2123); + stream_INSTRUCTION_FORMAT21t.add(INSTRUCTION_FORMAT21t71); // AST REWRITE // elements: @@ -3300,9 +3399,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 563:38: -> SIMPLE_NAME[$INSTRUCTION_FORMAT22c_FIELD_ODEX] + // 577:27: -> SIMPLE_NAME[$INSTRUCTION_FORMAT21t] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT22c_FIELD_ODEX69)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT21t71)); } @@ -3310,11 +3409,11 @@ public class smaliParser extends Parser { } break; - case 27 : - // smaliParser.g:564:5: INSTRUCTION_FORMAT22c_TYPE + case 29 : + // smaliParser.g:578:5: INSTRUCTION_FORMAT22c_FIELD { - INSTRUCTION_FORMAT22c_TYPE70=(Token)match(input,INSTRUCTION_FORMAT22c_TYPE,FOLLOW_INSTRUCTION_FORMAT22c_TYPE_in_simple_name2057); - stream_INSTRUCTION_FORMAT22c_TYPE.add(INSTRUCTION_FORMAT22c_TYPE70); + INSTRUCTION_FORMAT22c_FIELD72=(Token)match(input,INSTRUCTION_FORMAT22c_FIELD,FOLLOW_INSTRUCTION_FORMAT22c_FIELD_in_simple_name2134); + stream_INSTRUCTION_FORMAT22c_FIELD.add(INSTRUCTION_FORMAT22c_FIELD72); // AST REWRITE // elements: @@ -3327,9 +3426,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 564:32: -> SIMPLE_NAME[$INSTRUCTION_FORMAT22c_TYPE] + // 578:33: -> SIMPLE_NAME[$INSTRUCTION_FORMAT22c_FIELD] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT22c_TYPE70)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT22c_FIELD72)); } @@ -3337,11 +3436,11 @@ public class smaliParser extends Parser { } break; - case 28 : - // smaliParser.g:565:5: INSTRUCTION_FORMAT22cs_FIELD + case 30 : + // smaliParser.g:579:5: INSTRUCTION_FORMAT22c_FIELD_ODEX { - INSTRUCTION_FORMAT22cs_FIELD71=(Token)match(input,INSTRUCTION_FORMAT22cs_FIELD,FOLLOW_INSTRUCTION_FORMAT22cs_FIELD_in_simple_name2068); - stream_INSTRUCTION_FORMAT22cs_FIELD.add(INSTRUCTION_FORMAT22cs_FIELD71); + INSTRUCTION_FORMAT22c_FIELD_ODEX73=(Token)match(input,INSTRUCTION_FORMAT22c_FIELD_ODEX,FOLLOW_INSTRUCTION_FORMAT22c_FIELD_ODEX_in_simple_name2145); + stream_INSTRUCTION_FORMAT22c_FIELD_ODEX.add(INSTRUCTION_FORMAT22c_FIELD_ODEX73); // AST REWRITE // elements: @@ -3354,9 +3453,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 565:34: -> SIMPLE_NAME[$INSTRUCTION_FORMAT22cs_FIELD] + // 579:38: -> SIMPLE_NAME[$INSTRUCTION_FORMAT22c_FIELD_ODEX] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT22cs_FIELD71)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT22c_FIELD_ODEX73)); } @@ -3364,11 +3463,11 @@ public class smaliParser extends Parser { } break; - case 29 : - // smaliParser.g:566:5: INSTRUCTION_FORMAT22s_OR_ID + case 31 : + // smaliParser.g:580:5: INSTRUCTION_FORMAT22c_TYPE { - INSTRUCTION_FORMAT22s_OR_ID72=(Token)match(input,INSTRUCTION_FORMAT22s_OR_ID,FOLLOW_INSTRUCTION_FORMAT22s_OR_ID_in_simple_name2079); - stream_INSTRUCTION_FORMAT22s_OR_ID.add(INSTRUCTION_FORMAT22s_OR_ID72); + INSTRUCTION_FORMAT22c_TYPE74=(Token)match(input,INSTRUCTION_FORMAT22c_TYPE,FOLLOW_INSTRUCTION_FORMAT22c_TYPE_in_simple_name2156); + stream_INSTRUCTION_FORMAT22c_TYPE.add(INSTRUCTION_FORMAT22c_TYPE74); // AST REWRITE // elements: @@ -3381,9 +3480,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 566:33: -> SIMPLE_NAME[$INSTRUCTION_FORMAT22s_OR_ID] + // 580:32: -> SIMPLE_NAME[$INSTRUCTION_FORMAT22c_TYPE] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT22s_OR_ID72)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT22c_TYPE74)); } @@ -3391,11 +3490,11 @@ public class smaliParser extends Parser { } break; - case 30 : - // smaliParser.g:567:5: INSTRUCTION_FORMAT22t + case 32 : + // smaliParser.g:581:5: INSTRUCTION_FORMAT22cs_FIELD { - INSTRUCTION_FORMAT22t73=(Token)match(input,INSTRUCTION_FORMAT22t,FOLLOW_INSTRUCTION_FORMAT22t_in_simple_name2090); - stream_INSTRUCTION_FORMAT22t.add(INSTRUCTION_FORMAT22t73); + INSTRUCTION_FORMAT22cs_FIELD75=(Token)match(input,INSTRUCTION_FORMAT22cs_FIELD,FOLLOW_INSTRUCTION_FORMAT22cs_FIELD_in_simple_name2167); + stream_INSTRUCTION_FORMAT22cs_FIELD.add(INSTRUCTION_FORMAT22cs_FIELD75); // AST REWRITE // elements: @@ -3408,9 +3507,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 567:27: -> SIMPLE_NAME[$INSTRUCTION_FORMAT22t] + // 581:34: -> SIMPLE_NAME[$INSTRUCTION_FORMAT22cs_FIELD] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT22t73)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT22cs_FIELD75)); } @@ -3418,11 +3517,11 @@ public class smaliParser extends Parser { } break; - case 31 : - // smaliParser.g:568:5: INSTRUCTION_FORMAT23x + case 33 : + // smaliParser.g:582:5: INSTRUCTION_FORMAT22s_OR_ID { - INSTRUCTION_FORMAT23x74=(Token)match(input,INSTRUCTION_FORMAT23x,FOLLOW_INSTRUCTION_FORMAT23x_in_simple_name2101); - stream_INSTRUCTION_FORMAT23x.add(INSTRUCTION_FORMAT23x74); + INSTRUCTION_FORMAT22s_OR_ID76=(Token)match(input,INSTRUCTION_FORMAT22s_OR_ID,FOLLOW_INSTRUCTION_FORMAT22s_OR_ID_in_simple_name2178); + stream_INSTRUCTION_FORMAT22s_OR_ID.add(INSTRUCTION_FORMAT22s_OR_ID76); // AST REWRITE // elements: @@ -3435,9 +3534,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 568:27: -> SIMPLE_NAME[$INSTRUCTION_FORMAT23x] + // 582:33: -> SIMPLE_NAME[$INSTRUCTION_FORMAT22s_OR_ID] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT23x74)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT22s_OR_ID76)); } @@ -3445,11 +3544,11 @@ public class smaliParser extends Parser { } break; - case 32 : - // smaliParser.g:569:5: INSTRUCTION_FORMAT31i_OR_ID + case 34 : + // smaliParser.g:583:5: INSTRUCTION_FORMAT22t { - INSTRUCTION_FORMAT31i_OR_ID75=(Token)match(input,INSTRUCTION_FORMAT31i_OR_ID,FOLLOW_INSTRUCTION_FORMAT31i_OR_ID_in_simple_name2112); - stream_INSTRUCTION_FORMAT31i_OR_ID.add(INSTRUCTION_FORMAT31i_OR_ID75); + INSTRUCTION_FORMAT22t77=(Token)match(input,INSTRUCTION_FORMAT22t,FOLLOW_INSTRUCTION_FORMAT22t_in_simple_name2189); + stream_INSTRUCTION_FORMAT22t.add(INSTRUCTION_FORMAT22t77); // AST REWRITE // elements: @@ -3462,9 +3561,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 569:33: -> SIMPLE_NAME[$INSTRUCTION_FORMAT31i_OR_ID] + // 583:27: -> SIMPLE_NAME[$INSTRUCTION_FORMAT22t] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT31i_OR_ID75)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT22t77)); } @@ -3472,11 +3571,11 @@ public class smaliParser extends Parser { } break; - case 33 : - // smaliParser.g:570:5: INSTRUCTION_FORMAT31t + case 35 : + // smaliParser.g:584:5: INSTRUCTION_FORMAT23x { - INSTRUCTION_FORMAT31t76=(Token)match(input,INSTRUCTION_FORMAT31t,FOLLOW_INSTRUCTION_FORMAT31t_in_simple_name2123); - stream_INSTRUCTION_FORMAT31t.add(INSTRUCTION_FORMAT31t76); + INSTRUCTION_FORMAT23x78=(Token)match(input,INSTRUCTION_FORMAT23x,FOLLOW_INSTRUCTION_FORMAT23x_in_simple_name2200); + stream_INSTRUCTION_FORMAT23x.add(INSTRUCTION_FORMAT23x78); // AST REWRITE // elements: @@ -3489,9 +3588,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 570:27: -> SIMPLE_NAME[$INSTRUCTION_FORMAT31t] + // 584:27: -> SIMPLE_NAME[$INSTRUCTION_FORMAT23x] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT31t76)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT23x78)); } @@ -3499,11 +3598,11 @@ public class smaliParser extends Parser { } break; - case 34 : - // smaliParser.g:571:5: INSTRUCTION_FORMAT35c_METHOD + case 36 : + // smaliParser.g:585:5: INSTRUCTION_FORMAT31i_OR_ID { - INSTRUCTION_FORMAT35c_METHOD77=(Token)match(input,INSTRUCTION_FORMAT35c_METHOD,FOLLOW_INSTRUCTION_FORMAT35c_METHOD_in_simple_name2134); - stream_INSTRUCTION_FORMAT35c_METHOD.add(INSTRUCTION_FORMAT35c_METHOD77); + INSTRUCTION_FORMAT31i_OR_ID79=(Token)match(input,INSTRUCTION_FORMAT31i_OR_ID,FOLLOW_INSTRUCTION_FORMAT31i_OR_ID_in_simple_name2211); + stream_INSTRUCTION_FORMAT31i_OR_ID.add(INSTRUCTION_FORMAT31i_OR_ID79); // AST REWRITE // elements: @@ -3516,9 +3615,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 571:34: -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_METHOD] + // 585:33: -> SIMPLE_NAME[$INSTRUCTION_FORMAT31i_OR_ID] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT35c_METHOD77)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT31i_OR_ID79)); } @@ -3526,11 +3625,11 @@ public class smaliParser extends Parser { } break; - case 35 : - // smaliParser.g:572:5: INSTRUCTION_FORMAT35c_METHOD_ODEX + case 37 : + // smaliParser.g:586:5: INSTRUCTION_FORMAT31t { - INSTRUCTION_FORMAT35c_METHOD_ODEX78=(Token)match(input,INSTRUCTION_FORMAT35c_METHOD_ODEX,FOLLOW_INSTRUCTION_FORMAT35c_METHOD_ODEX_in_simple_name2145); - stream_INSTRUCTION_FORMAT35c_METHOD_ODEX.add(INSTRUCTION_FORMAT35c_METHOD_ODEX78); + INSTRUCTION_FORMAT31t80=(Token)match(input,INSTRUCTION_FORMAT31t,FOLLOW_INSTRUCTION_FORMAT31t_in_simple_name2222); + stream_INSTRUCTION_FORMAT31t.add(INSTRUCTION_FORMAT31t80); // AST REWRITE // elements: @@ -3543,9 +3642,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 572:39: -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_METHOD_ODEX] + // 586:27: -> SIMPLE_NAME[$INSTRUCTION_FORMAT31t] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT35c_METHOD_ODEX78)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT31t80)); } @@ -3553,11 +3652,11 @@ public class smaliParser extends Parser { } break; - case 36 : - // smaliParser.g:573:5: INSTRUCTION_FORMAT35c_TYPE + case 38 : + // smaliParser.g:587:5: INSTRUCTION_FORMAT35c_CALL_SITE { - INSTRUCTION_FORMAT35c_TYPE79=(Token)match(input,INSTRUCTION_FORMAT35c_TYPE,FOLLOW_INSTRUCTION_FORMAT35c_TYPE_in_simple_name2156); - stream_INSTRUCTION_FORMAT35c_TYPE.add(INSTRUCTION_FORMAT35c_TYPE79); + INSTRUCTION_FORMAT35c_CALL_SITE81=(Token)match(input,INSTRUCTION_FORMAT35c_CALL_SITE,FOLLOW_INSTRUCTION_FORMAT35c_CALL_SITE_in_simple_name2233); + stream_INSTRUCTION_FORMAT35c_CALL_SITE.add(INSTRUCTION_FORMAT35c_CALL_SITE81); // AST REWRITE // elements: @@ -3570,9 +3669,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 573:32: -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_TYPE] + // 587:37: -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_CALL_SITE] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT35c_TYPE79)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT35c_CALL_SITE81)); } @@ -3580,11 +3679,11 @@ public class smaliParser extends Parser { } break; - case 37 : - // smaliParser.g:574:5: INSTRUCTION_FORMAT35mi_METHOD + case 39 : + // smaliParser.g:588:5: INSTRUCTION_FORMAT35c_METHOD { - INSTRUCTION_FORMAT35mi_METHOD80=(Token)match(input,INSTRUCTION_FORMAT35mi_METHOD,FOLLOW_INSTRUCTION_FORMAT35mi_METHOD_in_simple_name2167); - stream_INSTRUCTION_FORMAT35mi_METHOD.add(INSTRUCTION_FORMAT35mi_METHOD80); + INSTRUCTION_FORMAT35c_METHOD82=(Token)match(input,INSTRUCTION_FORMAT35c_METHOD,FOLLOW_INSTRUCTION_FORMAT35c_METHOD_in_simple_name2244); + stream_INSTRUCTION_FORMAT35c_METHOD.add(INSTRUCTION_FORMAT35c_METHOD82); // AST REWRITE // elements: @@ -3597,9 +3696,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 574:35: -> SIMPLE_NAME[$INSTRUCTION_FORMAT35mi_METHOD] + // 588:34: -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_METHOD] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT35mi_METHOD80)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT35c_METHOD82)); } @@ -3607,11 +3706,11 @@ public class smaliParser extends Parser { } break; - case 38 : - // smaliParser.g:575:5: INSTRUCTION_FORMAT35ms_METHOD + case 40 : + // smaliParser.g:589:5: INSTRUCTION_FORMAT35c_METHOD_ODEX { - INSTRUCTION_FORMAT35ms_METHOD81=(Token)match(input,INSTRUCTION_FORMAT35ms_METHOD,FOLLOW_INSTRUCTION_FORMAT35ms_METHOD_in_simple_name2178); - stream_INSTRUCTION_FORMAT35ms_METHOD.add(INSTRUCTION_FORMAT35ms_METHOD81); + INSTRUCTION_FORMAT35c_METHOD_ODEX83=(Token)match(input,INSTRUCTION_FORMAT35c_METHOD_ODEX,FOLLOW_INSTRUCTION_FORMAT35c_METHOD_ODEX_in_simple_name2255); + stream_INSTRUCTION_FORMAT35c_METHOD_ODEX.add(INSTRUCTION_FORMAT35c_METHOD_ODEX83); // AST REWRITE // elements: @@ -3624,9 +3723,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 575:35: -> SIMPLE_NAME[$INSTRUCTION_FORMAT35ms_METHOD] + // 589:39: -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_METHOD_ODEX] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT35ms_METHOD81)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT35c_METHOD_ODEX83)); } @@ -3634,11 +3733,11 @@ public class smaliParser extends Parser { } break; - case 39 : - // smaliParser.g:576:5: INSTRUCTION_FORMAT45cc_METHOD + case 41 : + // smaliParser.g:590:5: INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE { - INSTRUCTION_FORMAT45cc_METHOD82=(Token)match(input,INSTRUCTION_FORMAT45cc_METHOD,FOLLOW_INSTRUCTION_FORMAT45cc_METHOD_in_simple_name2189); - stream_INSTRUCTION_FORMAT45cc_METHOD.add(INSTRUCTION_FORMAT45cc_METHOD82); + INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE84=(Token)match(input,INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE,FOLLOW_INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE_in_simple_name2266); + stream_INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE.add(INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE84); // AST REWRITE // elements: @@ -3651,9 +3750,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 576:35: -> SIMPLE_NAME[$INSTRUCTION_FORMAT45cc_METHOD] + // 590:56: -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT45cc_METHOD82)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE84)); } @@ -3661,11 +3760,11 @@ public class smaliParser extends Parser { } break; - case 40 : - // smaliParser.g:577:5: INSTRUCTION_FORMAT4rcc_METHOD + case 42 : + // smaliParser.g:591:5: INSTRUCTION_FORMAT35c_TYPE { - INSTRUCTION_FORMAT4rcc_METHOD83=(Token)match(input,INSTRUCTION_FORMAT4rcc_METHOD,FOLLOW_INSTRUCTION_FORMAT4rcc_METHOD_in_simple_name2200); - stream_INSTRUCTION_FORMAT4rcc_METHOD.add(INSTRUCTION_FORMAT4rcc_METHOD83); + INSTRUCTION_FORMAT35c_TYPE85=(Token)match(input,INSTRUCTION_FORMAT35c_TYPE,FOLLOW_INSTRUCTION_FORMAT35c_TYPE_in_simple_name2277); + stream_INSTRUCTION_FORMAT35c_TYPE.add(INSTRUCTION_FORMAT35c_TYPE85); // AST REWRITE // elements: @@ -3678,9 +3777,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 577:35: -> SIMPLE_NAME[$INSTRUCTION_FORMAT4rcc_METHOD] + // 591:32: -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_TYPE] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT4rcc_METHOD83)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT35c_TYPE85)); } @@ -3688,11 +3787,38 @@ public class smaliParser extends Parser { } break; - case 41 : - // smaliParser.g:578:5: INSTRUCTION_FORMAT51l + case 43 : + // smaliParser.g:592:5: INSTRUCTION_FORMAT35mi_METHOD + { + INSTRUCTION_FORMAT35mi_METHOD86=(Token)match(input,INSTRUCTION_FORMAT35mi_METHOD,FOLLOW_INSTRUCTION_FORMAT35mi_METHOD_in_simple_name2288); + stream_INSTRUCTION_FORMAT35mi_METHOD.add(INSTRUCTION_FORMAT35mi_METHOD86); + + // AST REWRITE + // elements: + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); + + root_0 = (CommonTree)adaptor.nil(); + // 592:35: -> SIMPLE_NAME[$INSTRUCTION_FORMAT35mi_METHOD] + { + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT35mi_METHOD86)); + } + + + retval.tree = root_0; + + } + break; + case 44 : + // smaliParser.g:593:5: INSTRUCTION_FORMAT35ms_METHOD { - INSTRUCTION_FORMAT51l84=(Token)match(input,INSTRUCTION_FORMAT51l,FOLLOW_INSTRUCTION_FORMAT51l_in_simple_name2211); - stream_INSTRUCTION_FORMAT51l.add(INSTRUCTION_FORMAT51l84); + INSTRUCTION_FORMAT35ms_METHOD87=(Token)match(input,INSTRUCTION_FORMAT35ms_METHOD,FOLLOW_INSTRUCTION_FORMAT35ms_METHOD_in_simple_name2299); + stream_INSTRUCTION_FORMAT35ms_METHOD.add(INSTRUCTION_FORMAT35ms_METHOD87); // AST REWRITE // elements: @@ -3705,9 +3831,90 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 578:27: -> SIMPLE_NAME[$INSTRUCTION_FORMAT51l] + // 593:35: -> SIMPLE_NAME[$INSTRUCTION_FORMAT35ms_METHOD] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT51l84)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT35ms_METHOD87)); + } + + + retval.tree = root_0; + + } + break; + case 45 : + // smaliParser.g:594:5: INSTRUCTION_FORMAT45cc_METHOD + { + INSTRUCTION_FORMAT45cc_METHOD88=(Token)match(input,INSTRUCTION_FORMAT45cc_METHOD,FOLLOW_INSTRUCTION_FORMAT45cc_METHOD_in_simple_name2310); + stream_INSTRUCTION_FORMAT45cc_METHOD.add(INSTRUCTION_FORMAT45cc_METHOD88); + + // AST REWRITE + // elements: + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); + + root_0 = (CommonTree)adaptor.nil(); + // 594:35: -> SIMPLE_NAME[$INSTRUCTION_FORMAT45cc_METHOD] + { + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT45cc_METHOD88)); + } + + + retval.tree = root_0; + + } + break; + case 46 : + // smaliParser.g:595:5: INSTRUCTION_FORMAT4rcc_METHOD + { + INSTRUCTION_FORMAT4rcc_METHOD89=(Token)match(input,INSTRUCTION_FORMAT4rcc_METHOD,FOLLOW_INSTRUCTION_FORMAT4rcc_METHOD_in_simple_name2321); + stream_INSTRUCTION_FORMAT4rcc_METHOD.add(INSTRUCTION_FORMAT4rcc_METHOD89); + + // AST REWRITE + // elements: + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); + + root_0 = (CommonTree)adaptor.nil(); + // 595:35: -> SIMPLE_NAME[$INSTRUCTION_FORMAT4rcc_METHOD] + { + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT4rcc_METHOD89)); + } + + + retval.tree = root_0; + + } + break; + case 47 : + // smaliParser.g:596:5: INSTRUCTION_FORMAT51l + { + INSTRUCTION_FORMAT51l90=(Token)match(input,INSTRUCTION_FORMAT51l,FOLLOW_INSTRUCTION_FORMAT51l_in_simple_name2332); + stream_INSTRUCTION_FORMAT51l.add(INSTRUCTION_FORMAT51l90); + + // AST REWRITE + // elements: + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); + + root_0 = (CommonTree)adaptor.nil(); + // 596:27: -> SIMPLE_NAME[$INSTRUCTION_FORMAT51l] + { + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, INSTRUCTION_FORMAT51l90)); } @@ -3744,24 +3951,24 @@ public class smaliParser extends Parser { // $ANTLR start "member_name" - // smaliParser.g:580:1: member_name : ( simple_name | MEMBER_NAME -> SIMPLE_NAME[$MEMBER_NAME] ); + // smaliParser.g:598:1: member_name : ( simple_name | MEMBER_NAME -> SIMPLE_NAME[$MEMBER_NAME] ); public final smaliParser.member_name_return member_name() throws RecognitionException { smaliParser.member_name_return retval = new smaliParser.member_name_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token MEMBER_NAME86=null; - ParserRuleReturnScope simple_name85 =null; + Token MEMBER_NAME92=null; + ParserRuleReturnScope simple_name91 =null; - CommonTree MEMBER_NAME86_tree=null; + CommonTree MEMBER_NAME92_tree=null; RewriteRuleTokenStream stream_MEMBER_NAME=new RewriteRuleTokenStream(adaptor,"token MEMBER_NAME"); try { - // smaliParser.g:581:3: ( simple_name | MEMBER_NAME -> SIMPLE_NAME[$MEMBER_NAME] ) + // smaliParser.g:599:3: ( simple_name | MEMBER_NAME -> SIMPLE_NAME[$MEMBER_NAME] ) int alt11=2; int LA11_0 = input.LA(1); - if ( (LA11_0==ACCESS_SPEC||LA11_0==ANNOTATION_VISIBILITY||LA11_0==BOOL_LITERAL||LA11_0==DOUBLE_LITERAL_OR_ID||LA11_0==FLOAT_LITERAL_OR_ID||(LA11_0 >= INSTRUCTION_FORMAT10t && LA11_0 <= INSTRUCTION_FORMAT10x_ODEX)||LA11_0==INSTRUCTION_FORMAT11x||LA11_0==INSTRUCTION_FORMAT12x_OR_ID||(LA11_0 >= INSTRUCTION_FORMAT21c_FIELD && LA11_0 <= INSTRUCTION_FORMAT21c_TYPE)||LA11_0==INSTRUCTION_FORMAT21t||(LA11_0 >= INSTRUCTION_FORMAT22c_FIELD && LA11_0 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA11_0 >= INSTRUCTION_FORMAT22s_OR_ID && LA11_0 <= INSTRUCTION_FORMAT22t)||LA11_0==INSTRUCTION_FORMAT23x||(LA11_0 >= INSTRUCTION_FORMAT31i_OR_ID && LA11_0 <= INSTRUCTION_FORMAT31t)||(LA11_0 >= INSTRUCTION_FORMAT35c_METHOD && LA11_0 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA11_0 >= INSTRUCTION_FORMAT45cc_METHOD && LA11_0 <= INSTRUCTION_FORMAT51l)||(LA11_0 >= NEGATIVE_INTEGER_LITERAL && LA11_0 <= NULL_LITERAL)||(LA11_0 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA11_0 <= PRIMITIVE_TYPE)||LA11_0==REGISTER||LA11_0==SIMPLE_NAME||(LA11_0 >= VERIFICATION_ERROR_TYPE && LA11_0 <= VOID_TYPE)) ) { + if ( (LA11_0==ACCESS_SPEC||LA11_0==ANNOTATION_VISIBILITY||LA11_0==BOOL_LITERAL||LA11_0==DOUBLE_LITERAL_OR_ID||LA11_0==FLOAT_LITERAL_OR_ID||(LA11_0 >= INSTRUCTION_FORMAT10t && LA11_0 <= INSTRUCTION_FORMAT10x_ODEX)||LA11_0==INSTRUCTION_FORMAT11x||LA11_0==INSTRUCTION_FORMAT12x_OR_ID||(LA11_0 >= INSTRUCTION_FORMAT21c_FIELD && LA11_0 <= INSTRUCTION_FORMAT21c_TYPE)||LA11_0==INSTRUCTION_FORMAT21t||(LA11_0 >= INSTRUCTION_FORMAT22c_FIELD && LA11_0 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA11_0 >= INSTRUCTION_FORMAT22s_OR_ID && LA11_0 <= INSTRUCTION_FORMAT22t)||LA11_0==INSTRUCTION_FORMAT23x||(LA11_0 >= INSTRUCTION_FORMAT31i_OR_ID && LA11_0 <= INSTRUCTION_FORMAT31t)||(LA11_0 >= INSTRUCTION_FORMAT35c_CALL_SITE && LA11_0 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA11_0 >= INSTRUCTION_FORMAT45cc_METHOD && LA11_0 <= INSTRUCTION_FORMAT51l)||(LA11_0 >= METHOD_HANDLE_TYPE_FIELD && LA11_0 <= NULL_LITERAL)||(LA11_0 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA11_0 <= PRIMITIVE_TYPE)||LA11_0==REGISTER||LA11_0==SIMPLE_NAME||(LA11_0 >= VERIFICATION_ERROR_TYPE && LA11_0 <= VOID_TYPE)) ) { alt11=1; } else if ( (LA11_0==MEMBER_NAME) ) { @@ -3776,24 +3983,24 @@ public class smaliParser extends Parser { switch (alt11) { case 1 : - // smaliParser.g:581:5: simple_name + // smaliParser.g:599:5: simple_name { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_simple_name_in_member_name2226); - simple_name85=simple_name(); + pushFollow(FOLLOW_simple_name_in_member_name2347); + simple_name91=simple_name(); state._fsp--; - adaptor.addChild(root_0, simple_name85.getTree()); + adaptor.addChild(root_0, simple_name91.getTree()); } break; case 2 : - // smaliParser.g:582:5: MEMBER_NAME + // smaliParser.g:600:5: MEMBER_NAME { - MEMBER_NAME86=(Token)match(input,MEMBER_NAME,FOLLOW_MEMBER_NAME_in_member_name2232); - stream_MEMBER_NAME.add(MEMBER_NAME86); + MEMBER_NAME92=(Token)match(input,MEMBER_NAME,FOLLOW_MEMBER_NAME_in_member_name2353); + stream_MEMBER_NAME.add(MEMBER_NAME92); // AST REWRITE // elements: @@ -3806,9 +4013,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 582:17: -> SIMPLE_NAME[$MEMBER_NAME] + // 600:17: -> SIMPLE_NAME[$MEMBER_NAME] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, MEMBER_NAME86)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(SIMPLE_NAME, MEMBER_NAME92)); } @@ -3845,47 +4052,47 @@ public class smaliParser extends Parser { // $ANTLR start "method_prototype" - // smaliParser.g:584:1: method_prototype : OPEN_PAREN param_list CLOSE_PAREN type_descriptor -> ^( I_METHOD_PROTOTYPE[$start, \"I_METHOD_PROTOTYPE\"] ^( I_METHOD_RETURN_TYPE type_descriptor ) ( param_list )? ) ; + // smaliParser.g:602:1: method_prototype : OPEN_PAREN param_list CLOSE_PAREN type_descriptor -> ^( I_METHOD_PROTOTYPE[$start, \"I_METHOD_PROTOTYPE\"] ^( I_METHOD_RETURN_TYPE type_descriptor ) ( param_list )? ) ; public final smaliParser.method_prototype_return method_prototype() throws RecognitionException { smaliParser.method_prototype_return retval = new smaliParser.method_prototype_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token OPEN_PAREN87=null; - Token CLOSE_PAREN89=null; - ParserRuleReturnScope param_list88 =null; - ParserRuleReturnScope type_descriptor90 =null; + Token OPEN_PAREN93=null; + Token CLOSE_PAREN95=null; + ParserRuleReturnScope param_list94 =null; + ParserRuleReturnScope type_descriptor96 =null; - CommonTree OPEN_PAREN87_tree=null; - CommonTree CLOSE_PAREN89_tree=null; + CommonTree OPEN_PAREN93_tree=null; + CommonTree CLOSE_PAREN95_tree=null; RewriteRuleTokenStream stream_OPEN_PAREN=new RewriteRuleTokenStream(adaptor,"token OPEN_PAREN"); RewriteRuleTokenStream stream_CLOSE_PAREN=new RewriteRuleTokenStream(adaptor,"token CLOSE_PAREN"); RewriteRuleSubtreeStream stream_type_descriptor=new RewriteRuleSubtreeStream(adaptor,"rule type_descriptor"); RewriteRuleSubtreeStream stream_param_list=new RewriteRuleSubtreeStream(adaptor,"rule param_list"); try { - // smaliParser.g:585:3: ( OPEN_PAREN param_list CLOSE_PAREN type_descriptor -> ^( I_METHOD_PROTOTYPE[$start, \"I_METHOD_PROTOTYPE\"] ^( I_METHOD_RETURN_TYPE type_descriptor ) ( param_list )? ) ) - // smaliParser.g:585:5: OPEN_PAREN param_list CLOSE_PAREN type_descriptor + // smaliParser.g:603:3: ( OPEN_PAREN param_list CLOSE_PAREN type_descriptor -> ^( I_METHOD_PROTOTYPE[$start, \"I_METHOD_PROTOTYPE\"] ^( I_METHOD_RETURN_TYPE type_descriptor ) ( param_list )? ) ) + // smaliParser.g:603:5: OPEN_PAREN param_list CLOSE_PAREN type_descriptor { - OPEN_PAREN87=(Token)match(input,OPEN_PAREN,FOLLOW_OPEN_PAREN_in_method_prototype2247); - stream_OPEN_PAREN.add(OPEN_PAREN87); + OPEN_PAREN93=(Token)match(input,OPEN_PAREN,FOLLOW_OPEN_PAREN_in_method_prototype2368); + stream_OPEN_PAREN.add(OPEN_PAREN93); - pushFollow(FOLLOW_param_list_in_method_prototype2249); - param_list88=param_list(); + pushFollow(FOLLOW_param_list_in_method_prototype2370); + param_list94=param_list(); state._fsp--; - stream_param_list.add(param_list88.getTree()); - CLOSE_PAREN89=(Token)match(input,CLOSE_PAREN,FOLLOW_CLOSE_PAREN_in_method_prototype2251); - stream_CLOSE_PAREN.add(CLOSE_PAREN89); + stream_param_list.add(param_list94.getTree()); + CLOSE_PAREN95=(Token)match(input,CLOSE_PAREN,FOLLOW_CLOSE_PAREN_in_method_prototype2372); + stream_CLOSE_PAREN.add(CLOSE_PAREN95); - pushFollow(FOLLOW_type_descriptor_in_method_prototype2253); - type_descriptor90=type_descriptor(); + pushFollow(FOLLOW_type_descriptor_in_method_prototype2374); + type_descriptor96=type_descriptor(); state._fsp--; - stream_type_descriptor.add(type_descriptor90.getTree()); + stream_type_descriptor.add(type_descriptor96.getTree()); // AST REWRITE - // elements: type_descriptor, param_list + // elements: param_list, type_descriptor // token labels: // rule labels: retval // token list labels: @@ -3895,13 +4102,13 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 586:5: -> ^( I_METHOD_PROTOTYPE[$start, \"I_METHOD_PROTOTYPE\"] ^( I_METHOD_RETURN_TYPE type_descriptor ) ( param_list )? ) + // 604:5: -> ^( I_METHOD_PROTOTYPE[$start, \"I_METHOD_PROTOTYPE\"] ^( I_METHOD_RETURN_TYPE type_descriptor ) ( param_list )? ) { - // smaliParser.g:586:8: ^( I_METHOD_PROTOTYPE[$start, \"I_METHOD_PROTOTYPE\"] ^( I_METHOD_RETURN_TYPE type_descriptor ) ( param_list )? ) + // smaliParser.g:604:8: ^( I_METHOD_PROTOTYPE[$start, \"I_METHOD_PROTOTYPE\"] ^( I_METHOD_RETURN_TYPE type_descriptor ) ( param_list )? ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_METHOD_PROTOTYPE, (retval.start), "I_METHOD_PROTOTYPE"), root_1); - // smaliParser.g:586:59: ^( I_METHOD_RETURN_TYPE type_descriptor ) + // smaliParser.g:604:59: ^( I_METHOD_RETURN_TYPE type_descriptor ) { CommonTree root_2 = (CommonTree)adaptor.nil(); root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_METHOD_RETURN_TYPE, "I_METHOD_RETURN_TYPE"), root_2); @@ -3909,7 +4116,7 @@ public class smaliParser extends Parser { adaptor.addChild(root_1, root_2); } - // smaliParser.g:586:99: ( param_list )? + // smaliParser.g:604:99: ( param_list )? if ( stream_param_list.hasNext() ) { adaptor.addChild(root_1, stream_param_list.nextTree()); } @@ -3952,24 +4159,24 @@ public class smaliParser extends Parser { // $ANTLR start "param_list_or_id_primitive_type" - // smaliParser.g:588:1: param_list_or_id_primitive_type : PARAM_LIST_OR_ID_PRIMITIVE_TYPE -> PRIMITIVE_TYPE[$PARAM_LIST_OR_ID_PRIMITIVE_TYPE] ; + // smaliParser.g:606:1: param_list_or_id_primitive_type : PARAM_LIST_OR_ID_PRIMITIVE_TYPE -> PRIMITIVE_TYPE[$PARAM_LIST_OR_ID_PRIMITIVE_TYPE] ; public final smaliParser.param_list_or_id_primitive_type_return param_list_or_id_primitive_type() throws RecognitionException { smaliParser.param_list_or_id_primitive_type_return retval = new smaliParser.param_list_or_id_primitive_type_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token PARAM_LIST_OR_ID_PRIMITIVE_TYPE91=null; + Token PARAM_LIST_OR_ID_PRIMITIVE_TYPE97=null; - CommonTree PARAM_LIST_OR_ID_PRIMITIVE_TYPE91_tree=null; + CommonTree PARAM_LIST_OR_ID_PRIMITIVE_TYPE97_tree=null; RewriteRuleTokenStream stream_PARAM_LIST_OR_ID_PRIMITIVE_TYPE=new RewriteRuleTokenStream(adaptor,"token PARAM_LIST_OR_ID_PRIMITIVE_TYPE"); try { - // smaliParser.g:589:3: ( PARAM_LIST_OR_ID_PRIMITIVE_TYPE -> PRIMITIVE_TYPE[$PARAM_LIST_OR_ID_PRIMITIVE_TYPE] ) - // smaliParser.g:589:5: PARAM_LIST_OR_ID_PRIMITIVE_TYPE + // smaliParser.g:607:3: ( PARAM_LIST_OR_ID_PRIMITIVE_TYPE -> PRIMITIVE_TYPE[$PARAM_LIST_OR_ID_PRIMITIVE_TYPE] ) + // smaliParser.g:607:5: PARAM_LIST_OR_ID_PRIMITIVE_TYPE { - PARAM_LIST_OR_ID_PRIMITIVE_TYPE91=(Token)match(input,PARAM_LIST_OR_ID_PRIMITIVE_TYPE,FOLLOW_PARAM_LIST_OR_ID_PRIMITIVE_TYPE_in_param_list_or_id_primitive_type2283); - stream_PARAM_LIST_OR_ID_PRIMITIVE_TYPE.add(PARAM_LIST_OR_ID_PRIMITIVE_TYPE91); + PARAM_LIST_OR_ID_PRIMITIVE_TYPE97=(Token)match(input,PARAM_LIST_OR_ID_PRIMITIVE_TYPE,FOLLOW_PARAM_LIST_OR_ID_PRIMITIVE_TYPE_in_param_list_or_id_primitive_type2404); + stream_PARAM_LIST_OR_ID_PRIMITIVE_TYPE.add(PARAM_LIST_OR_ID_PRIMITIVE_TYPE97); // AST REWRITE // elements: @@ -3982,9 +4189,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 589:37: -> PRIMITIVE_TYPE[$PARAM_LIST_OR_ID_PRIMITIVE_TYPE] + // 607:37: -> PRIMITIVE_TYPE[$PARAM_LIST_OR_ID_PRIMITIVE_TYPE] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(PRIMITIVE_TYPE, PARAM_LIST_OR_ID_PRIMITIVE_TYPE91)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(PRIMITIVE_TYPE, PARAM_LIST_OR_ID_PRIMITIVE_TYPE97)); } @@ -4019,19 +4226,19 @@ public class smaliParser extends Parser { // $ANTLR start "param_list" - // smaliParser.g:591:1: param_list : ( ( param_list_or_id_primitive_type )+ | ( nonvoid_type_descriptor )* ); + // smaliParser.g:609:1: param_list : ( ( param_list_or_id_primitive_type )+ | ( nonvoid_type_descriptor )* ); public final smaliParser.param_list_return param_list() throws RecognitionException { smaliParser.param_list_return retval = new smaliParser.param_list_return(); retval.start = input.LT(1); CommonTree root_0 = null; - ParserRuleReturnScope param_list_or_id_primitive_type92 =null; - ParserRuleReturnScope nonvoid_type_descriptor93 =null; + ParserRuleReturnScope param_list_or_id_primitive_type98 =null; + ParserRuleReturnScope nonvoid_type_descriptor99 =null; try { - // smaliParser.g:592:3: ( ( param_list_or_id_primitive_type )+ | ( nonvoid_type_descriptor )* ) + // smaliParser.g:610:3: ( ( param_list_or_id_primitive_type )+ | ( nonvoid_type_descriptor )* ) int alt14=2; int LA14_0 = input.LA(1); if ( (LA14_0==PARAM_LIST_OR_ID_PRIMITIVE_TYPE) ) { @@ -4049,12 +4256,12 @@ public class smaliParser extends Parser { switch (alt14) { case 1 : - // smaliParser.g:592:5: ( param_list_or_id_primitive_type )+ + // smaliParser.g:610:5: ( param_list_or_id_primitive_type )+ { root_0 = (CommonTree)adaptor.nil(); - // smaliParser.g:592:5: ( param_list_or_id_primitive_type )+ + // smaliParser.g:610:5: ( param_list_or_id_primitive_type )+ int cnt12=0; loop12: while (true) { @@ -4066,13 +4273,13 @@ public class smaliParser extends Parser { switch (alt12) { case 1 : - // smaliParser.g:592:5: param_list_or_id_primitive_type + // smaliParser.g:610:5: param_list_or_id_primitive_type { - pushFollow(FOLLOW_param_list_or_id_primitive_type_in_param_list2298); - param_list_or_id_primitive_type92=param_list_or_id_primitive_type(); + pushFollow(FOLLOW_param_list_or_id_primitive_type_in_param_list2419); + param_list_or_id_primitive_type98=param_list_or_id_primitive_type(); state._fsp--; - adaptor.addChild(root_0, param_list_or_id_primitive_type92.getTree()); + adaptor.addChild(root_0, param_list_or_id_primitive_type98.getTree()); } break; @@ -4088,12 +4295,12 @@ public class smaliParser extends Parser { } break; case 2 : - // smaliParser.g:593:5: ( nonvoid_type_descriptor )* + // smaliParser.g:611:5: ( nonvoid_type_descriptor )* { root_0 = (CommonTree)adaptor.nil(); - // smaliParser.g:593:5: ( nonvoid_type_descriptor )* + // smaliParser.g:611:5: ( nonvoid_type_descriptor )* loop13: while (true) { int alt13=2; @@ -4104,13 +4311,13 @@ public class smaliParser extends Parser { switch (alt13) { case 1 : - // smaliParser.g:593:5: nonvoid_type_descriptor + // smaliParser.g:611:5: nonvoid_type_descriptor { - pushFollow(FOLLOW_nonvoid_type_descriptor_in_param_list2305); - nonvoid_type_descriptor93=nonvoid_type_descriptor(); + pushFollow(FOLLOW_nonvoid_type_descriptor_in_param_list2426); + nonvoid_type_descriptor99=nonvoid_type_descriptor(); state._fsp--; - adaptor.addChild(root_0, nonvoid_type_descriptor93.getTree()); + adaptor.addChild(root_0, nonvoid_type_descriptor99.getTree()); } break; @@ -4151,34 +4358,34 @@ public class smaliParser extends Parser { // $ANTLR start "array_descriptor" - // smaliParser.g:595:1: array_descriptor : ARRAY_TYPE_PREFIX ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR ) ; + // smaliParser.g:613:1: array_descriptor : ARRAY_TYPE_PREFIX ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR ) ; public final smaliParser.array_descriptor_return array_descriptor() throws RecognitionException { smaliParser.array_descriptor_return retval = new smaliParser.array_descriptor_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token ARRAY_TYPE_PREFIX94=null; - Token set95=null; + Token ARRAY_TYPE_PREFIX100=null; + Token set101=null; - CommonTree ARRAY_TYPE_PREFIX94_tree=null; - CommonTree set95_tree=null; + CommonTree ARRAY_TYPE_PREFIX100_tree=null; + CommonTree set101_tree=null; try { - // smaliParser.g:596:3: ( ARRAY_TYPE_PREFIX ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR ) ) - // smaliParser.g:596:5: ARRAY_TYPE_PREFIX ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR ) + // smaliParser.g:614:3: ( ARRAY_TYPE_PREFIX ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR ) ) + // smaliParser.g:614:5: ARRAY_TYPE_PREFIX ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR ) { root_0 = (CommonTree)adaptor.nil(); - ARRAY_TYPE_PREFIX94=(Token)match(input,ARRAY_TYPE_PREFIX,FOLLOW_ARRAY_TYPE_PREFIX_in_array_descriptor2316); - ARRAY_TYPE_PREFIX94_tree = (CommonTree)adaptor.create(ARRAY_TYPE_PREFIX94); - adaptor.addChild(root_0, ARRAY_TYPE_PREFIX94_tree); + ARRAY_TYPE_PREFIX100=(Token)match(input,ARRAY_TYPE_PREFIX,FOLLOW_ARRAY_TYPE_PREFIX_in_array_descriptor2437); + ARRAY_TYPE_PREFIX100_tree = (CommonTree)adaptor.create(ARRAY_TYPE_PREFIX100); + adaptor.addChild(root_0, ARRAY_TYPE_PREFIX100_tree); - set95=input.LT(1); + set101=input.LT(1); if ( input.LA(1)==CLASS_DESCRIPTOR||input.LA(1)==PRIMITIVE_TYPE ) { input.consume(); - adaptor.addChild(root_0, (CommonTree)adaptor.create(set95)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(set101)); state.errorRecovery=false; } else { @@ -4214,24 +4421,24 @@ public class smaliParser extends Parser { // $ANTLR start "type_descriptor" - // smaliParser.g:598:1: type_descriptor : ( VOID_TYPE | PRIMITIVE_TYPE | CLASS_DESCRIPTOR | array_descriptor ); + // smaliParser.g:616:1: type_descriptor : ( VOID_TYPE | PRIMITIVE_TYPE | CLASS_DESCRIPTOR | array_descriptor ); public final smaliParser.type_descriptor_return type_descriptor() throws RecognitionException { smaliParser.type_descriptor_return retval = new smaliParser.type_descriptor_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token VOID_TYPE96=null; - Token PRIMITIVE_TYPE97=null; - Token CLASS_DESCRIPTOR98=null; - ParserRuleReturnScope array_descriptor99 =null; + Token VOID_TYPE102=null; + Token PRIMITIVE_TYPE103=null; + Token CLASS_DESCRIPTOR104=null; + ParserRuleReturnScope array_descriptor105 =null; - CommonTree VOID_TYPE96_tree=null; - CommonTree PRIMITIVE_TYPE97_tree=null; - CommonTree CLASS_DESCRIPTOR98_tree=null; + CommonTree VOID_TYPE102_tree=null; + CommonTree PRIMITIVE_TYPE103_tree=null; + CommonTree CLASS_DESCRIPTOR104_tree=null; try { - // smaliParser.g:599:3: ( VOID_TYPE | PRIMITIVE_TYPE | CLASS_DESCRIPTOR | array_descriptor ) + // smaliParser.g:617:3: ( VOID_TYPE | PRIMITIVE_TYPE | CLASS_DESCRIPTOR | array_descriptor ) int alt15=4; switch ( input.LA(1) ) { case VOID_TYPE: @@ -4261,52 +4468,52 @@ public class smaliParser extends Parser { } switch (alt15) { case 1 : - // smaliParser.g:599:5: VOID_TYPE + // smaliParser.g:617:5: VOID_TYPE { root_0 = (CommonTree)adaptor.nil(); - VOID_TYPE96=(Token)match(input,VOID_TYPE,FOLLOW_VOID_TYPE_in_type_descriptor2334); - VOID_TYPE96_tree = (CommonTree)adaptor.create(VOID_TYPE96); - adaptor.addChild(root_0, VOID_TYPE96_tree); + VOID_TYPE102=(Token)match(input,VOID_TYPE,FOLLOW_VOID_TYPE_in_type_descriptor2455); + VOID_TYPE102_tree = (CommonTree)adaptor.create(VOID_TYPE102); + adaptor.addChild(root_0, VOID_TYPE102_tree); } break; case 2 : - // smaliParser.g:600:5: PRIMITIVE_TYPE + // smaliParser.g:618:5: PRIMITIVE_TYPE { root_0 = (CommonTree)adaptor.nil(); - PRIMITIVE_TYPE97=(Token)match(input,PRIMITIVE_TYPE,FOLLOW_PRIMITIVE_TYPE_in_type_descriptor2340); - PRIMITIVE_TYPE97_tree = (CommonTree)adaptor.create(PRIMITIVE_TYPE97); - adaptor.addChild(root_0, PRIMITIVE_TYPE97_tree); + PRIMITIVE_TYPE103=(Token)match(input,PRIMITIVE_TYPE,FOLLOW_PRIMITIVE_TYPE_in_type_descriptor2461); + PRIMITIVE_TYPE103_tree = (CommonTree)adaptor.create(PRIMITIVE_TYPE103); + adaptor.addChild(root_0, PRIMITIVE_TYPE103_tree); } break; case 3 : - // smaliParser.g:601:5: CLASS_DESCRIPTOR + // smaliParser.g:619:5: CLASS_DESCRIPTOR { root_0 = (CommonTree)adaptor.nil(); - CLASS_DESCRIPTOR98=(Token)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_type_descriptor2346); - CLASS_DESCRIPTOR98_tree = (CommonTree)adaptor.create(CLASS_DESCRIPTOR98); - adaptor.addChild(root_0, CLASS_DESCRIPTOR98_tree); + CLASS_DESCRIPTOR104=(Token)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_type_descriptor2467); + CLASS_DESCRIPTOR104_tree = (CommonTree)adaptor.create(CLASS_DESCRIPTOR104); + adaptor.addChild(root_0, CLASS_DESCRIPTOR104_tree); } break; case 4 : - // smaliParser.g:602:5: array_descriptor + // smaliParser.g:620:5: array_descriptor { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_array_descriptor_in_type_descriptor2352); - array_descriptor99=array_descriptor(); + pushFollow(FOLLOW_array_descriptor_in_type_descriptor2473); + array_descriptor105=array_descriptor(); state._fsp--; - adaptor.addChild(root_0, array_descriptor99.getTree()); + adaptor.addChild(root_0, array_descriptor105.getTree()); } break; @@ -4339,22 +4546,22 @@ public class smaliParser extends Parser { // $ANTLR start "nonvoid_type_descriptor" - // smaliParser.g:604:1: nonvoid_type_descriptor : ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR | array_descriptor ); + // smaliParser.g:622:1: nonvoid_type_descriptor : ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR | array_descriptor ); public final smaliParser.nonvoid_type_descriptor_return nonvoid_type_descriptor() throws RecognitionException { smaliParser.nonvoid_type_descriptor_return retval = new smaliParser.nonvoid_type_descriptor_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token PRIMITIVE_TYPE100=null; - Token CLASS_DESCRIPTOR101=null; - ParserRuleReturnScope array_descriptor102 =null; + Token PRIMITIVE_TYPE106=null; + Token CLASS_DESCRIPTOR107=null; + ParserRuleReturnScope array_descriptor108 =null; - CommonTree PRIMITIVE_TYPE100_tree=null; - CommonTree CLASS_DESCRIPTOR101_tree=null; + CommonTree PRIMITIVE_TYPE106_tree=null; + CommonTree CLASS_DESCRIPTOR107_tree=null; try { - // smaliParser.g:605:3: ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR | array_descriptor ) + // smaliParser.g:623:3: ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR | array_descriptor ) int alt16=3; switch ( input.LA(1) ) { case PRIMITIVE_TYPE: @@ -4379,40 +4586,40 @@ public class smaliParser extends Parser { } switch (alt16) { case 1 : - // smaliParser.g:605:5: PRIMITIVE_TYPE + // smaliParser.g:623:5: PRIMITIVE_TYPE { root_0 = (CommonTree)adaptor.nil(); - PRIMITIVE_TYPE100=(Token)match(input,PRIMITIVE_TYPE,FOLLOW_PRIMITIVE_TYPE_in_nonvoid_type_descriptor2362); - PRIMITIVE_TYPE100_tree = (CommonTree)adaptor.create(PRIMITIVE_TYPE100); - adaptor.addChild(root_0, PRIMITIVE_TYPE100_tree); + PRIMITIVE_TYPE106=(Token)match(input,PRIMITIVE_TYPE,FOLLOW_PRIMITIVE_TYPE_in_nonvoid_type_descriptor2483); + PRIMITIVE_TYPE106_tree = (CommonTree)adaptor.create(PRIMITIVE_TYPE106); + adaptor.addChild(root_0, PRIMITIVE_TYPE106_tree); } break; case 2 : - // smaliParser.g:606:5: CLASS_DESCRIPTOR + // smaliParser.g:624:5: CLASS_DESCRIPTOR { root_0 = (CommonTree)adaptor.nil(); - CLASS_DESCRIPTOR101=(Token)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_nonvoid_type_descriptor2368); - CLASS_DESCRIPTOR101_tree = (CommonTree)adaptor.create(CLASS_DESCRIPTOR101); - adaptor.addChild(root_0, CLASS_DESCRIPTOR101_tree); + CLASS_DESCRIPTOR107=(Token)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_nonvoid_type_descriptor2489); + CLASS_DESCRIPTOR107_tree = (CommonTree)adaptor.create(CLASS_DESCRIPTOR107); + adaptor.addChild(root_0, CLASS_DESCRIPTOR107_tree); } break; case 3 : - // smaliParser.g:607:5: array_descriptor + // smaliParser.g:625:5: array_descriptor { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_array_descriptor_in_nonvoid_type_descriptor2374); - array_descriptor102=array_descriptor(); + pushFollow(FOLLOW_array_descriptor_in_nonvoid_type_descriptor2495); + array_descriptor108=array_descriptor(); state._fsp--; - adaptor.addChild(root_0, array_descriptor102.getTree()); + adaptor.addChild(root_0, array_descriptor108.getTree()); } break; @@ -4445,20 +4652,20 @@ public class smaliParser extends Parser { // $ANTLR start "reference_type_descriptor" - // smaliParser.g:609:1: reference_type_descriptor : ( CLASS_DESCRIPTOR | array_descriptor ); + // smaliParser.g:627:1: reference_type_descriptor : ( CLASS_DESCRIPTOR | array_descriptor ); public final smaliParser.reference_type_descriptor_return reference_type_descriptor() throws RecognitionException { smaliParser.reference_type_descriptor_return retval = new smaliParser.reference_type_descriptor_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token CLASS_DESCRIPTOR103=null; - ParserRuleReturnScope array_descriptor104 =null; + Token CLASS_DESCRIPTOR109=null; + ParserRuleReturnScope array_descriptor110 =null; - CommonTree CLASS_DESCRIPTOR103_tree=null; + CommonTree CLASS_DESCRIPTOR109_tree=null; try { - // smaliParser.g:610:3: ( CLASS_DESCRIPTOR | array_descriptor ) + // smaliParser.g:628:3: ( CLASS_DESCRIPTOR | array_descriptor ) int alt17=2; int LA17_0 = input.LA(1); if ( (LA17_0==CLASS_DESCRIPTOR) ) { @@ -4476,28 +4683,28 @@ public class smaliParser extends Parser { switch (alt17) { case 1 : - // smaliParser.g:610:5: CLASS_DESCRIPTOR + // smaliParser.g:628:5: CLASS_DESCRIPTOR { root_0 = (CommonTree)adaptor.nil(); - CLASS_DESCRIPTOR103=(Token)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_reference_type_descriptor2384); - CLASS_DESCRIPTOR103_tree = (CommonTree)adaptor.create(CLASS_DESCRIPTOR103); - adaptor.addChild(root_0, CLASS_DESCRIPTOR103_tree); + CLASS_DESCRIPTOR109=(Token)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_reference_type_descriptor2505); + CLASS_DESCRIPTOR109_tree = (CommonTree)adaptor.create(CLASS_DESCRIPTOR109); + adaptor.addChild(root_0, CLASS_DESCRIPTOR109_tree); } break; case 2 : - // smaliParser.g:611:5: array_descriptor + // smaliParser.g:629:5: array_descriptor { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_array_descriptor_in_reference_type_descriptor2390); - array_descriptor104=array_descriptor(); + pushFollow(FOLLOW_array_descriptor_in_reference_type_descriptor2511); + array_descriptor110=array_descriptor(); state._fsp--; - adaptor.addChild(root_0, array_descriptor104.getTree()); + adaptor.addChild(root_0, array_descriptor110.getTree()); } break; @@ -4530,23 +4737,23 @@ public class smaliParser extends Parser { // $ANTLR start "integer_literal" - // smaliParser.g:613:1: integer_literal : ( POSITIVE_INTEGER_LITERAL -> INTEGER_LITERAL[$POSITIVE_INTEGER_LITERAL] | NEGATIVE_INTEGER_LITERAL -> INTEGER_LITERAL[$NEGATIVE_INTEGER_LITERAL] ); + // smaliParser.g:631:1: integer_literal : ( POSITIVE_INTEGER_LITERAL -> INTEGER_LITERAL[$POSITIVE_INTEGER_LITERAL] | NEGATIVE_INTEGER_LITERAL -> INTEGER_LITERAL[$NEGATIVE_INTEGER_LITERAL] ); public final smaliParser.integer_literal_return integer_literal() throws RecognitionException { smaliParser.integer_literal_return retval = new smaliParser.integer_literal_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token POSITIVE_INTEGER_LITERAL105=null; - Token NEGATIVE_INTEGER_LITERAL106=null; + Token POSITIVE_INTEGER_LITERAL111=null; + Token NEGATIVE_INTEGER_LITERAL112=null; - CommonTree POSITIVE_INTEGER_LITERAL105_tree=null; - CommonTree NEGATIVE_INTEGER_LITERAL106_tree=null; + CommonTree POSITIVE_INTEGER_LITERAL111_tree=null; + CommonTree NEGATIVE_INTEGER_LITERAL112_tree=null; RewriteRuleTokenStream stream_NEGATIVE_INTEGER_LITERAL=new RewriteRuleTokenStream(adaptor,"token NEGATIVE_INTEGER_LITERAL"); RewriteRuleTokenStream stream_POSITIVE_INTEGER_LITERAL=new RewriteRuleTokenStream(adaptor,"token POSITIVE_INTEGER_LITERAL"); try { - // smaliParser.g:614:3: ( POSITIVE_INTEGER_LITERAL -> INTEGER_LITERAL[$POSITIVE_INTEGER_LITERAL] | NEGATIVE_INTEGER_LITERAL -> INTEGER_LITERAL[$NEGATIVE_INTEGER_LITERAL] ) + // smaliParser.g:632:3: ( POSITIVE_INTEGER_LITERAL -> INTEGER_LITERAL[$POSITIVE_INTEGER_LITERAL] | NEGATIVE_INTEGER_LITERAL -> INTEGER_LITERAL[$NEGATIVE_INTEGER_LITERAL] ) int alt18=2; int LA18_0 = input.LA(1); if ( (LA18_0==POSITIVE_INTEGER_LITERAL) ) { @@ -4564,10 +4771,10 @@ public class smaliParser extends Parser { switch (alt18) { case 1 : - // smaliParser.g:614:5: POSITIVE_INTEGER_LITERAL + // smaliParser.g:632:5: POSITIVE_INTEGER_LITERAL { - POSITIVE_INTEGER_LITERAL105=(Token)match(input,POSITIVE_INTEGER_LITERAL,FOLLOW_POSITIVE_INTEGER_LITERAL_in_integer_literal2400); - stream_POSITIVE_INTEGER_LITERAL.add(POSITIVE_INTEGER_LITERAL105); + POSITIVE_INTEGER_LITERAL111=(Token)match(input,POSITIVE_INTEGER_LITERAL,FOLLOW_POSITIVE_INTEGER_LITERAL_in_integer_literal2521); + stream_POSITIVE_INTEGER_LITERAL.add(POSITIVE_INTEGER_LITERAL111); // AST REWRITE // elements: @@ -4580,9 +4787,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 614:30: -> INTEGER_LITERAL[$POSITIVE_INTEGER_LITERAL] + // 632:30: -> INTEGER_LITERAL[$POSITIVE_INTEGER_LITERAL] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(INTEGER_LITERAL, POSITIVE_INTEGER_LITERAL105)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(INTEGER_LITERAL, POSITIVE_INTEGER_LITERAL111)); } @@ -4591,10 +4798,10 @@ public class smaliParser extends Parser { } break; case 2 : - // smaliParser.g:615:5: NEGATIVE_INTEGER_LITERAL + // smaliParser.g:633:5: NEGATIVE_INTEGER_LITERAL { - NEGATIVE_INTEGER_LITERAL106=(Token)match(input,NEGATIVE_INTEGER_LITERAL,FOLLOW_NEGATIVE_INTEGER_LITERAL_in_integer_literal2411); - stream_NEGATIVE_INTEGER_LITERAL.add(NEGATIVE_INTEGER_LITERAL106); + NEGATIVE_INTEGER_LITERAL112=(Token)match(input,NEGATIVE_INTEGER_LITERAL,FOLLOW_NEGATIVE_INTEGER_LITERAL_in_integer_literal2532); + stream_NEGATIVE_INTEGER_LITERAL.add(NEGATIVE_INTEGER_LITERAL112); // AST REWRITE // elements: @@ -4607,9 +4814,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 615:30: -> INTEGER_LITERAL[$NEGATIVE_INTEGER_LITERAL] + // 633:30: -> INTEGER_LITERAL[$NEGATIVE_INTEGER_LITERAL] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(INTEGER_LITERAL, NEGATIVE_INTEGER_LITERAL106)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(INTEGER_LITERAL, NEGATIVE_INTEGER_LITERAL112)); } @@ -4646,22 +4853,22 @@ public class smaliParser extends Parser { // $ANTLR start "float_literal" - // smaliParser.g:617:1: float_literal : ( FLOAT_LITERAL_OR_ID -> FLOAT_LITERAL[$FLOAT_LITERAL_OR_ID] | FLOAT_LITERAL ); + // smaliParser.g:635:1: float_literal : ( FLOAT_LITERAL_OR_ID -> FLOAT_LITERAL[$FLOAT_LITERAL_OR_ID] | FLOAT_LITERAL ); public final smaliParser.float_literal_return float_literal() throws RecognitionException { smaliParser.float_literal_return retval = new smaliParser.float_literal_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token FLOAT_LITERAL_OR_ID107=null; - Token FLOAT_LITERAL108=null; + Token FLOAT_LITERAL_OR_ID113=null; + Token FLOAT_LITERAL114=null; - CommonTree FLOAT_LITERAL_OR_ID107_tree=null; - CommonTree FLOAT_LITERAL108_tree=null; + CommonTree FLOAT_LITERAL_OR_ID113_tree=null; + CommonTree FLOAT_LITERAL114_tree=null; RewriteRuleTokenStream stream_FLOAT_LITERAL_OR_ID=new RewriteRuleTokenStream(adaptor,"token FLOAT_LITERAL_OR_ID"); try { - // smaliParser.g:618:3: ( FLOAT_LITERAL_OR_ID -> FLOAT_LITERAL[$FLOAT_LITERAL_OR_ID] | FLOAT_LITERAL ) + // smaliParser.g:636:3: ( FLOAT_LITERAL_OR_ID -> FLOAT_LITERAL[$FLOAT_LITERAL_OR_ID] | FLOAT_LITERAL ) int alt19=2; int LA19_0 = input.LA(1); if ( (LA19_0==FLOAT_LITERAL_OR_ID) ) { @@ -4679,10 +4886,10 @@ public class smaliParser extends Parser { switch (alt19) { case 1 : - // smaliParser.g:618:5: FLOAT_LITERAL_OR_ID + // smaliParser.g:636:5: FLOAT_LITERAL_OR_ID { - FLOAT_LITERAL_OR_ID107=(Token)match(input,FLOAT_LITERAL_OR_ID,FOLLOW_FLOAT_LITERAL_OR_ID_in_float_literal2426); - stream_FLOAT_LITERAL_OR_ID.add(FLOAT_LITERAL_OR_ID107); + FLOAT_LITERAL_OR_ID113=(Token)match(input,FLOAT_LITERAL_OR_ID,FOLLOW_FLOAT_LITERAL_OR_ID_in_float_literal2547); + stream_FLOAT_LITERAL_OR_ID.add(FLOAT_LITERAL_OR_ID113); // AST REWRITE // elements: @@ -4695,9 +4902,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 618:25: -> FLOAT_LITERAL[$FLOAT_LITERAL_OR_ID] + // 636:25: -> FLOAT_LITERAL[$FLOAT_LITERAL_OR_ID] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(FLOAT_LITERAL, FLOAT_LITERAL_OR_ID107)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(FLOAT_LITERAL, FLOAT_LITERAL_OR_ID113)); } @@ -4706,14 +4913,14 @@ public class smaliParser extends Parser { } break; case 2 : - // smaliParser.g:619:5: FLOAT_LITERAL + // smaliParser.g:637:5: FLOAT_LITERAL { root_0 = (CommonTree)adaptor.nil(); - FLOAT_LITERAL108=(Token)match(input,FLOAT_LITERAL,FOLLOW_FLOAT_LITERAL_in_float_literal2437); - FLOAT_LITERAL108_tree = (CommonTree)adaptor.create(FLOAT_LITERAL108); - adaptor.addChild(root_0, FLOAT_LITERAL108_tree); + FLOAT_LITERAL114=(Token)match(input,FLOAT_LITERAL,FOLLOW_FLOAT_LITERAL_in_float_literal2558); + FLOAT_LITERAL114_tree = (CommonTree)adaptor.create(FLOAT_LITERAL114); + adaptor.addChild(root_0, FLOAT_LITERAL114_tree); } break; @@ -4746,22 +4953,22 @@ public class smaliParser extends Parser { // $ANTLR start "double_literal" - // smaliParser.g:621:1: double_literal : ( DOUBLE_LITERAL_OR_ID -> DOUBLE_LITERAL[$DOUBLE_LITERAL_OR_ID] | DOUBLE_LITERAL ); + // smaliParser.g:639:1: double_literal : ( DOUBLE_LITERAL_OR_ID -> DOUBLE_LITERAL[$DOUBLE_LITERAL_OR_ID] | DOUBLE_LITERAL ); public final smaliParser.double_literal_return double_literal() throws RecognitionException { smaliParser.double_literal_return retval = new smaliParser.double_literal_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token DOUBLE_LITERAL_OR_ID109=null; - Token DOUBLE_LITERAL110=null; + Token DOUBLE_LITERAL_OR_ID115=null; + Token DOUBLE_LITERAL116=null; - CommonTree DOUBLE_LITERAL_OR_ID109_tree=null; - CommonTree DOUBLE_LITERAL110_tree=null; + CommonTree DOUBLE_LITERAL_OR_ID115_tree=null; + CommonTree DOUBLE_LITERAL116_tree=null; RewriteRuleTokenStream stream_DOUBLE_LITERAL_OR_ID=new RewriteRuleTokenStream(adaptor,"token DOUBLE_LITERAL_OR_ID"); try { - // smaliParser.g:622:3: ( DOUBLE_LITERAL_OR_ID -> DOUBLE_LITERAL[$DOUBLE_LITERAL_OR_ID] | DOUBLE_LITERAL ) + // smaliParser.g:640:3: ( DOUBLE_LITERAL_OR_ID -> DOUBLE_LITERAL[$DOUBLE_LITERAL_OR_ID] | DOUBLE_LITERAL ) int alt20=2; int LA20_0 = input.LA(1); if ( (LA20_0==DOUBLE_LITERAL_OR_ID) ) { @@ -4779,10 +4986,10 @@ public class smaliParser extends Parser { switch (alt20) { case 1 : - // smaliParser.g:622:5: DOUBLE_LITERAL_OR_ID + // smaliParser.g:640:5: DOUBLE_LITERAL_OR_ID { - DOUBLE_LITERAL_OR_ID109=(Token)match(input,DOUBLE_LITERAL_OR_ID,FOLLOW_DOUBLE_LITERAL_OR_ID_in_double_literal2447); - stream_DOUBLE_LITERAL_OR_ID.add(DOUBLE_LITERAL_OR_ID109); + DOUBLE_LITERAL_OR_ID115=(Token)match(input,DOUBLE_LITERAL_OR_ID,FOLLOW_DOUBLE_LITERAL_OR_ID_in_double_literal2568); + stream_DOUBLE_LITERAL_OR_ID.add(DOUBLE_LITERAL_OR_ID115); // AST REWRITE // elements: @@ -4795,9 +5002,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 622:26: -> DOUBLE_LITERAL[$DOUBLE_LITERAL_OR_ID] + // 640:26: -> DOUBLE_LITERAL[$DOUBLE_LITERAL_OR_ID] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(DOUBLE_LITERAL, DOUBLE_LITERAL_OR_ID109)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(DOUBLE_LITERAL, DOUBLE_LITERAL_OR_ID115)); } @@ -4806,14 +5013,14 @@ public class smaliParser extends Parser { } break; case 2 : - // smaliParser.g:623:5: DOUBLE_LITERAL + // smaliParser.g:641:5: DOUBLE_LITERAL { root_0 = (CommonTree)adaptor.nil(); - DOUBLE_LITERAL110=(Token)match(input,DOUBLE_LITERAL,FOLLOW_DOUBLE_LITERAL_in_double_literal2458); - DOUBLE_LITERAL110_tree = (CommonTree)adaptor.create(DOUBLE_LITERAL110); - adaptor.addChild(root_0, DOUBLE_LITERAL110_tree); + DOUBLE_LITERAL116=(Token)match(input,DOUBLE_LITERAL,FOLLOW_DOUBLE_LITERAL_in_double_literal2579); + DOUBLE_LITERAL116_tree = (CommonTree)adaptor.create(DOUBLE_LITERAL116); + adaptor.addChild(root_0, DOUBLE_LITERAL116_tree); } break; @@ -4846,39 +5053,41 @@ public class smaliParser extends Parser { // $ANTLR start "literal" - // smaliParser.g:625:1: literal : ( LONG_LITERAL | integer_literal | SHORT_LITERAL | BYTE_LITERAL | float_literal | double_literal | CHAR_LITERAL | STRING_LITERAL | BOOL_LITERAL | NULL_LITERAL | array_literal | subannotation | type_field_method_literal | enum_literal ); + // smaliParser.g:643:1: literal : ( LONG_LITERAL | integer_literal | SHORT_LITERAL | BYTE_LITERAL | float_literal | double_literal | CHAR_LITERAL | STRING_LITERAL | BOOL_LITERAL | NULL_LITERAL | array_literal | subannotation | type_field_method_literal | enum_literal | method_handle_literal | method_prototype ); public final smaliParser.literal_return literal() throws RecognitionException { smaliParser.literal_return retval = new smaliParser.literal_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token LONG_LITERAL111=null; - Token SHORT_LITERAL113=null; - Token BYTE_LITERAL114=null; - Token CHAR_LITERAL117=null; - Token STRING_LITERAL118=null; - Token BOOL_LITERAL119=null; - Token NULL_LITERAL120=null; - ParserRuleReturnScope integer_literal112 =null; - ParserRuleReturnScope float_literal115 =null; - ParserRuleReturnScope double_literal116 =null; - ParserRuleReturnScope array_literal121 =null; - ParserRuleReturnScope subannotation122 =null; - ParserRuleReturnScope type_field_method_literal123 =null; - ParserRuleReturnScope enum_literal124 =null; - - CommonTree LONG_LITERAL111_tree=null; - CommonTree SHORT_LITERAL113_tree=null; - CommonTree BYTE_LITERAL114_tree=null; - CommonTree CHAR_LITERAL117_tree=null; - CommonTree STRING_LITERAL118_tree=null; - CommonTree BOOL_LITERAL119_tree=null; - CommonTree NULL_LITERAL120_tree=null; + Token LONG_LITERAL117=null; + Token SHORT_LITERAL119=null; + Token BYTE_LITERAL120=null; + Token CHAR_LITERAL123=null; + Token STRING_LITERAL124=null; + Token BOOL_LITERAL125=null; + Token NULL_LITERAL126=null; + ParserRuleReturnScope integer_literal118 =null; + ParserRuleReturnScope float_literal121 =null; + ParserRuleReturnScope double_literal122 =null; + ParserRuleReturnScope array_literal127 =null; + ParserRuleReturnScope subannotation128 =null; + ParserRuleReturnScope type_field_method_literal129 =null; + ParserRuleReturnScope enum_literal130 =null; + ParserRuleReturnScope method_handle_literal131 =null; + ParserRuleReturnScope method_prototype132 =null; + + CommonTree LONG_LITERAL117_tree=null; + CommonTree SHORT_LITERAL119_tree=null; + CommonTree BYTE_LITERAL120_tree=null; + CommonTree CHAR_LITERAL123_tree=null; + CommonTree STRING_LITERAL124_tree=null; + CommonTree BOOL_LITERAL125_tree=null; + CommonTree NULL_LITERAL126_tree=null; try { - // smaliParser.g:626:3: ( LONG_LITERAL | integer_literal | SHORT_LITERAL | BYTE_LITERAL | float_literal | double_literal | CHAR_LITERAL | STRING_LITERAL | BOOL_LITERAL | NULL_LITERAL | array_literal | subannotation | type_field_method_literal | enum_literal ) - int alt21=14; + // smaliParser.g:644:3: ( LONG_LITERAL | integer_literal | SHORT_LITERAL | BYTE_LITERAL | float_literal | double_literal | CHAR_LITERAL | STRING_LITERAL | BOOL_LITERAL | NULL_LITERAL | array_literal | subannotation | type_field_method_literal | enum_literal | method_handle_literal | method_prototype ) + int alt21=16; switch ( input.LA(1) ) { case LONG_LITERAL: { @@ -4888,7 +5097,7 @@ public class smaliParser extends Parser { case POSITIVE_INTEGER_LITERAL: { int LA21_2 = input.LA(2); - if ( (LA21_2==EOF||(LA21_2 >= ACCESS_SPEC && LA21_2 <= ANNOTATION_VISIBILITY)||LA21_2==BOOL_LITERAL||(LA21_2 >= CLASS_DIRECTIVE && LA21_2 <= CLOSE_BRACE)||LA21_2==COMMA||(LA21_2 >= DOUBLE_LITERAL_OR_ID && LA21_2 <= END_ANNOTATION_DIRECTIVE)||LA21_2==END_FIELD_DIRECTIVE||LA21_2==END_SUBANNOTATION_DIRECTIVE||LA21_2==FIELD_DIRECTIVE||(LA21_2 >= FLOAT_LITERAL_OR_ID && LA21_2 <= IMPLEMENTS_DIRECTIVE)||(LA21_2 >= INSTRUCTION_FORMAT10t && LA21_2 <= INSTRUCTION_FORMAT10x_ODEX)||LA21_2==INSTRUCTION_FORMAT11x||LA21_2==INSTRUCTION_FORMAT12x_OR_ID||(LA21_2 >= INSTRUCTION_FORMAT21c_FIELD && LA21_2 <= INSTRUCTION_FORMAT21c_TYPE)||LA21_2==INSTRUCTION_FORMAT21t||(LA21_2 >= INSTRUCTION_FORMAT22c_FIELD && LA21_2 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA21_2 >= INSTRUCTION_FORMAT22s_OR_ID && LA21_2 <= INSTRUCTION_FORMAT22t)||LA21_2==INSTRUCTION_FORMAT23x||(LA21_2 >= INSTRUCTION_FORMAT31i_OR_ID && LA21_2 <= INSTRUCTION_FORMAT31t)||(LA21_2 >= INSTRUCTION_FORMAT35c_METHOD && LA21_2 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA21_2 >= INSTRUCTION_FORMAT45cc_METHOD && LA21_2 <= INSTRUCTION_FORMAT51l)||(LA21_2 >= METHOD_DIRECTIVE && LA21_2 <= NULL_LITERAL)||(LA21_2 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA21_2 <= PRIMITIVE_TYPE)||LA21_2==REGISTER||(LA21_2 >= SIMPLE_NAME && LA21_2 <= SOURCE_DIRECTIVE)||(LA21_2 >= SUPER_DIRECTIVE && LA21_2 <= VOID_TYPE)) ) { + if ( (LA21_2==EOF||(LA21_2 >= ACCESS_SPEC && LA21_2 <= ANNOTATION_VISIBILITY)||LA21_2==BOOL_LITERAL||(LA21_2 >= CLASS_DIRECTIVE && LA21_2 <= CLOSE_PAREN)||LA21_2==COMMA||(LA21_2 >= DOUBLE_LITERAL_OR_ID && LA21_2 <= END_ANNOTATION_DIRECTIVE)||LA21_2==END_FIELD_DIRECTIVE||LA21_2==END_SUBANNOTATION_DIRECTIVE||LA21_2==FIELD_DIRECTIVE||(LA21_2 >= FLOAT_LITERAL_OR_ID && LA21_2 <= IMPLEMENTS_DIRECTIVE)||(LA21_2 >= INSTRUCTION_FORMAT10t && LA21_2 <= INSTRUCTION_FORMAT10x_ODEX)||LA21_2==INSTRUCTION_FORMAT11x||LA21_2==INSTRUCTION_FORMAT12x_OR_ID||(LA21_2 >= INSTRUCTION_FORMAT21c_FIELD && LA21_2 <= INSTRUCTION_FORMAT21c_TYPE)||LA21_2==INSTRUCTION_FORMAT21t||(LA21_2 >= INSTRUCTION_FORMAT22c_FIELD && LA21_2 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA21_2 >= INSTRUCTION_FORMAT22s_OR_ID && LA21_2 <= INSTRUCTION_FORMAT22t)||LA21_2==INSTRUCTION_FORMAT23x||(LA21_2 >= INSTRUCTION_FORMAT31i_OR_ID && LA21_2 <= INSTRUCTION_FORMAT31t)||(LA21_2 >= INSTRUCTION_FORMAT35c_CALL_SITE && LA21_2 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA21_2 >= INSTRUCTION_FORMAT45cc_METHOD && LA21_2 <= INSTRUCTION_FORMAT51l)||(LA21_2 >= METHOD_DIRECTIVE && LA21_2 <= NULL_LITERAL)||(LA21_2 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA21_2 <= PRIMITIVE_TYPE)||LA21_2==REGISTER||(LA21_2 >= SIMPLE_NAME && LA21_2 <= SOURCE_DIRECTIVE)||(LA21_2 >= SUPER_DIRECTIVE && LA21_2 <= VOID_TYPE)) ) { alt21=2; } else if ( (LA21_2==COLON||LA21_2==OPEN_PAREN) ) { @@ -4912,7 +5121,7 @@ public class smaliParser extends Parser { case NEGATIVE_INTEGER_LITERAL: { int LA21_3 = input.LA(2); - if ( (LA21_3==EOF||(LA21_3 >= ACCESS_SPEC && LA21_3 <= ANNOTATION_VISIBILITY)||LA21_3==BOOL_LITERAL||(LA21_3 >= CLASS_DIRECTIVE && LA21_3 <= CLOSE_BRACE)||LA21_3==COMMA||(LA21_3 >= DOUBLE_LITERAL_OR_ID && LA21_3 <= END_ANNOTATION_DIRECTIVE)||LA21_3==END_FIELD_DIRECTIVE||LA21_3==END_SUBANNOTATION_DIRECTIVE||LA21_3==FIELD_DIRECTIVE||(LA21_3 >= FLOAT_LITERAL_OR_ID && LA21_3 <= IMPLEMENTS_DIRECTIVE)||(LA21_3 >= INSTRUCTION_FORMAT10t && LA21_3 <= INSTRUCTION_FORMAT10x_ODEX)||LA21_3==INSTRUCTION_FORMAT11x||LA21_3==INSTRUCTION_FORMAT12x_OR_ID||(LA21_3 >= INSTRUCTION_FORMAT21c_FIELD && LA21_3 <= INSTRUCTION_FORMAT21c_TYPE)||LA21_3==INSTRUCTION_FORMAT21t||(LA21_3 >= INSTRUCTION_FORMAT22c_FIELD && LA21_3 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA21_3 >= INSTRUCTION_FORMAT22s_OR_ID && LA21_3 <= INSTRUCTION_FORMAT22t)||LA21_3==INSTRUCTION_FORMAT23x||(LA21_3 >= INSTRUCTION_FORMAT31i_OR_ID && LA21_3 <= INSTRUCTION_FORMAT31t)||(LA21_3 >= INSTRUCTION_FORMAT35c_METHOD && LA21_3 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA21_3 >= INSTRUCTION_FORMAT45cc_METHOD && LA21_3 <= INSTRUCTION_FORMAT51l)||(LA21_3 >= METHOD_DIRECTIVE && LA21_3 <= NULL_LITERAL)||(LA21_3 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA21_3 <= PRIMITIVE_TYPE)||LA21_3==REGISTER||(LA21_3 >= SIMPLE_NAME && LA21_3 <= SOURCE_DIRECTIVE)||(LA21_3 >= SUPER_DIRECTIVE && LA21_3 <= VOID_TYPE)) ) { + if ( (LA21_3==EOF||(LA21_3 >= ACCESS_SPEC && LA21_3 <= ANNOTATION_VISIBILITY)||LA21_3==BOOL_LITERAL||(LA21_3 >= CLASS_DIRECTIVE && LA21_3 <= CLOSE_PAREN)||LA21_3==COMMA||(LA21_3 >= DOUBLE_LITERAL_OR_ID && LA21_3 <= END_ANNOTATION_DIRECTIVE)||LA21_3==END_FIELD_DIRECTIVE||LA21_3==END_SUBANNOTATION_DIRECTIVE||LA21_3==FIELD_DIRECTIVE||(LA21_3 >= FLOAT_LITERAL_OR_ID && LA21_3 <= IMPLEMENTS_DIRECTIVE)||(LA21_3 >= INSTRUCTION_FORMAT10t && LA21_3 <= INSTRUCTION_FORMAT10x_ODEX)||LA21_3==INSTRUCTION_FORMAT11x||LA21_3==INSTRUCTION_FORMAT12x_OR_ID||(LA21_3 >= INSTRUCTION_FORMAT21c_FIELD && LA21_3 <= INSTRUCTION_FORMAT21c_TYPE)||LA21_3==INSTRUCTION_FORMAT21t||(LA21_3 >= INSTRUCTION_FORMAT22c_FIELD && LA21_3 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA21_3 >= INSTRUCTION_FORMAT22s_OR_ID && LA21_3 <= INSTRUCTION_FORMAT22t)||LA21_3==INSTRUCTION_FORMAT23x||(LA21_3 >= INSTRUCTION_FORMAT31i_OR_ID && LA21_3 <= INSTRUCTION_FORMAT31t)||(LA21_3 >= INSTRUCTION_FORMAT35c_CALL_SITE && LA21_3 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA21_3 >= INSTRUCTION_FORMAT45cc_METHOD && LA21_3 <= INSTRUCTION_FORMAT51l)||(LA21_3 >= METHOD_DIRECTIVE && LA21_3 <= NULL_LITERAL)||(LA21_3 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA21_3 <= PRIMITIVE_TYPE)||LA21_3==REGISTER||(LA21_3 >= SIMPLE_NAME && LA21_3 <= SOURCE_DIRECTIVE)||(LA21_3 >= SUPER_DIRECTIVE && LA21_3 <= VOID_TYPE)) ) { alt21=2; } else if ( (LA21_3==COLON||LA21_3==OPEN_PAREN) ) { @@ -4946,7 +5155,7 @@ public class smaliParser extends Parser { case FLOAT_LITERAL_OR_ID: { int LA21_6 = input.LA(2); - if ( (LA21_6==EOF||(LA21_6 >= ACCESS_SPEC && LA21_6 <= ANNOTATION_VISIBILITY)||LA21_6==BOOL_LITERAL||(LA21_6 >= CLASS_DIRECTIVE && LA21_6 <= CLOSE_BRACE)||LA21_6==COMMA||(LA21_6 >= DOUBLE_LITERAL_OR_ID && LA21_6 <= END_ANNOTATION_DIRECTIVE)||LA21_6==END_FIELD_DIRECTIVE||LA21_6==END_SUBANNOTATION_DIRECTIVE||LA21_6==FIELD_DIRECTIVE||(LA21_6 >= FLOAT_LITERAL_OR_ID && LA21_6 <= IMPLEMENTS_DIRECTIVE)||(LA21_6 >= INSTRUCTION_FORMAT10t && LA21_6 <= INSTRUCTION_FORMAT10x_ODEX)||LA21_6==INSTRUCTION_FORMAT11x||LA21_6==INSTRUCTION_FORMAT12x_OR_ID||(LA21_6 >= INSTRUCTION_FORMAT21c_FIELD && LA21_6 <= INSTRUCTION_FORMAT21c_TYPE)||LA21_6==INSTRUCTION_FORMAT21t||(LA21_6 >= INSTRUCTION_FORMAT22c_FIELD && LA21_6 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA21_6 >= INSTRUCTION_FORMAT22s_OR_ID && LA21_6 <= INSTRUCTION_FORMAT22t)||LA21_6==INSTRUCTION_FORMAT23x||(LA21_6 >= INSTRUCTION_FORMAT31i_OR_ID && LA21_6 <= INSTRUCTION_FORMAT31t)||(LA21_6 >= INSTRUCTION_FORMAT35c_METHOD && LA21_6 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA21_6 >= INSTRUCTION_FORMAT45cc_METHOD && LA21_6 <= INSTRUCTION_FORMAT51l)||(LA21_6 >= METHOD_DIRECTIVE && LA21_6 <= NULL_LITERAL)||(LA21_6 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA21_6 <= PRIMITIVE_TYPE)||LA21_6==REGISTER||(LA21_6 >= SIMPLE_NAME && LA21_6 <= SOURCE_DIRECTIVE)||(LA21_6 >= SUPER_DIRECTIVE && LA21_6 <= VOID_TYPE)) ) { + if ( (LA21_6==EOF||(LA21_6 >= ACCESS_SPEC && LA21_6 <= ANNOTATION_VISIBILITY)||LA21_6==BOOL_LITERAL||(LA21_6 >= CLASS_DIRECTIVE && LA21_6 <= CLOSE_PAREN)||LA21_6==COMMA||(LA21_6 >= DOUBLE_LITERAL_OR_ID && LA21_6 <= END_ANNOTATION_DIRECTIVE)||LA21_6==END_FIELD_DIRECTIVE||LA21_6==END_SUBANNOTATION_DIRECTIVE||LA21_6==FIELD_DIRECTIVE||(LA21_6 >= FLOAT_LITERAL_OR_ID && LA21_6 <= IMPLEMENTS_DIRECTIVE)||(LA21_6 >= INSTRUCTION_FORMAT10t && LA21_6 <= INSTRUCTION_FORMAT10x_ODEX)||LA21_6==INSTRUCTION_FORMAT11x||LA21_6==INSTRUCTION_FORMAT12x_OR_ID||(LA21_6 >= INSTRUCTION_FORMAT21c_FIELD && LA21_6 <= INSTRUCTION_FORMAT21c_TYPE)||LA21_6==INSTRUCTION_FORMAT21t||(LA21_6 >= INSTRUCTION_FORMAT22c_FIELD && LA21_6 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA21_6 >= INSTRUCTION_FORMAT22s_OR_ID && LA21_6 <= INSTRUCTION_FORMAT22t)||LA21_6==INSTRUCTION_FORMAT23x||(LA21_6 >= INSTRUCTION_FORMAT31i_OR_ID && LA21_6 <= INSTRUCTION_FORMAT31t)||(LA21_6 >= INSTRUCTION_FORMAT35c_CALL_SITE && LA21_6 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA21_6 >= INSTRUCTION_FORMAT45cc_METHOD && LA21_6 <= INSTRUCTION_FORMAT51l)||(LA21_6 >= METHOD_DIRECTIVE && LA21_6 <= NULL_LITERAL)||(LA21_6 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA21_6 <= PRIMITIVE_TYPE)||LA21_6==REGISTER||(LA21_6 >= SIMPLE_NAME && LA21_6 <= SOURCE_DIRECTIVE)||(LA21_6 >= SUPER_DIRECTIVE && LA21_6 <= VOID_TYPE)) ) { alt21=5; } else if ( (LA21_6==COLON||LA21_6==OPEN_PAREN) ) { @@ -4975,7 +5184,7 @@ public class smaliParser extends Parser { case DOUBLE_LITERAL_OR_ID: { int LA21_8 = input.LA(2); - if ( (LA21_8==EOF||(LA21_8 >= ACCESS_SPEC && LA21_8 <= ANNOTATION_VISIBILITY)||LA21_8==BOOL_LITERAL||(LA21_8 >= CLASS_DIRECTIVE && LA21_8 <= CLOSE_BRACE)||LA21_8==COMMA||(LA21_8 >= DOUBLE_LITERAL_OR_ID && LA21_8 <= END_ANNOTATION_DIRECTIVE)||LA21_8==END_FIELD_DIRECTIVE||LA21_8==END_SUBANNOTATION_DIRECTIVE||LA21_8==FIELD_DIRECTIVE||(LA21_8 >= FLOAT_LITERAL_OR_ID && LA21_8 <= IMPLEMENTS_DIRECTIVE)||(LA21_8 >= INSTRUCTION_FORMAT10t && LA21_8 <= INSTRUCTION_FORMAT10x_ODEX)||LA21_8==INSTRUCTION_FORMAT11x||LA21_8==INSTRUCTION_FORMAT12x_OR_ID||(LA21_8 >= INSTRUCTION_FORMAT21c_FIELD && LA21_8 <= INSTRUCTION_FORMAT21c_TYPE)||LA21_8==INSTRUCTION_FORMAT21t||(LA21_8 >= INSTRUCTION_FORMAT22c_FIELD && LA21_8 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA21_8 >= INSTRUCTION_FORMAT22s_OR_ID && LA21_8 <= INSTRUCTION_FORMAT22t)||LA21_8==INSTRUCTION_FORMAT23x||(LA21_8 >= INSTRUCTION_FORMAT31i_OR_ID && LA21_8 <= INSTRUCTION_FORMAT31t)||(LA21_8 >= INSTRUCTION_FORMAT35c_METHOD && LA21_8 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA21_8 >= INSTRUCTION_FORMAT45cc_METHOD && LA21_8 <= INSTRUCTION_FORMAT51l)||(LA21_8 >= METHOD_DIRECTIVE && LA21_8 <= NULL_LITERAL)||(LA21_8 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA21_8 <= PRIMITIVE_TYPE)||LA21_8==REGISTER||(LA21_8 >= SIMPLE_NAME && LA21_8 <= SOURCE_DIRECTIVE)||(LA21_8 >= SUPER_DIRECTIVE && LA21_8 <= VOID_TYPE)) ) { + if ( (LA21_8==EOF||(LA21_8 >= ACCESS_SPEC && LA21_8 <= ANNOTATION_VISIBILITY)||LA21_8==BOOL_LITERAL||(LA21_8 >= CLASS_DIRECTIVE && LA21_8 <= CLOSE_PAREN)||LA21_8==COMMA||(LA21_8 >= DOUBLE_LITERAL_OR_ID && LA21_8 <= END_ANNOTATION_DIRECTIVE)||LA21_8==END_FIELD_DIRECTIVE||LA21_8==END_SUBANNOTATION_DIRECTIVE||LA21_8==FIELD_DIRECTIVE||(LA21_8 >= FLOAT_LITERAL_OR_ID && LA21_8 <= IMPLEMENTS_DIRECTIVE)||(LA21_8 >= INSTRUCTION_FORMAT10t && LA21_8 <= INSTRUCTION_FORMAT10x_ODEX)||LA21_8==INSTRUCTION_FORMAT11x||LA21_8==INSTRUCTION_FORMAT12x_OR_ID||(LA21_8 >= INSTRUCTION_FORMAT21c_FIELD && LA21_8 <= INSTRUCTION_FORMAT21c_TYPE)||LA21_8==INSTRUCTION_FORMAT21t||(LA21_8 >= INSTRUCTION_FORMAT22c_FIELD && LA21_8 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA21_8 >= INSTRUCTION_FORMAT22s_OR_ID && LA21_8 <= INSTRUCTION_FORMAT22t)||LA21_8==INSTRUCTION_FORMAT23x||(LA21_8 >= INSTRUCTION_FORMAT31i_OR_ID && LA21_8 <= INSTRUCTION_FORMAT31t)||(LA21_8 >= INSTRUCTION_FORMAT35c_CALL_SITE && LA21_8 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA21_8 >= INSTRUCTION_FORMAT45cc_METHOD && LA21_8 <= INSTRUCTION_FORMAT51l)||(LA21_8 >= METHOD_DIRECTIVE && LA21_8 <= NULL_LITERAL)||(LA21_8 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA21_8 <= PRIMITIVE_TYPE)||LA21_8==REGISTER||(LA21_8 >= SIMPLE_NAME && LA21_8 <= SOURCE_DIRECTIVE)||(LA21_8 >= SUPER_DIRECTIVE && LA21_8 <= VOID_TYPE)) ) { alt21=6; } else if ( (LA21_8==COLON||LA21_8==OPEN_PAREN) ) { @@ -5014,7 +5223,7 @@ public class smaliParser extends Parser { case BOOL_LITERAL: { int LA21_12 = input.LA(2); - if ( (LA21_12==EOF||(LA21_12 >= ACCESS_SPEC && LA21_12 <= ANNOTATION_VISIBILITY)||LA21_12==BOOL_LITERAL||(LA21_12 >= CLASS_DIRECTIVE && LA21_12 <= CLOSE_BRACE)||LA21_12==COMMA||(LA21_12 >= DOUBLE_LITERAL_OR_ID && LA21_12 <= END_ANNOTATION_DIRECTIVE)||LA21_12==END_FIELD_DIRECTIVE||LA21_12==END_SUBANNOTATION_DIRECTIVE||LA21_12==FIELD_DIRECTIVE||(LA21_12 >= FLOAT_LITERAL_OR_ID && LA21_12 <= IMPLEMENTS_DIRECTIVE)||(LA21_12 >= INSTRUCTION_FORMAT10t && LA21_12 <= INSTRUCTION_FORMAT10x_ODEX)||LA21_12==INSTRUCTION_FORMAT11x||LA21_12==INSTRUCTION_FORMAT12x_OR_ID||(LA21_12 >= INSTRUCTION_FORMAT21c_FIELD && LA21_12 <= INSTRUCTION_FORMAT21c_TYPE)||LA21_12==INSTRUCTION_FORMAT21t||(LA21_12 >= INSTRUCTION_FORMAT22c_FIELD && LA21_12 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA21_12 >= INSTRUCTION_FORMAT22s_OR_ID && LA21_12 <= INSTRUCTION_FORMAT22t)||LA21_12==INSTRUCTION_FORMAT23x||(LA21_12 >= INSTRUCTION_FORMAT31i_OR_ID && LA21_12 <= INSTRUCTION_FORMAT31t)||(LA21_12 >= INSTRUCTION_FORMAT35c_METHOD && LA21_12 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA21_12 >= INSTRUCTION_FORMAT45cc_METHOD && LA21_12 <= INSTRUCTION_FORMAT51l)||(LA21_12 >= METHOD_DIRECTIVE && LA21_12 <= NULL_LITERAL)||(LA21_12 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA21_12 <= PRIMITIVE_TYPE)||LA21_12==REGISTER||(LA21_12 >= SIMPLE_NAME && LA21_12 <= SOURCE_DIRECTIVE)||(LA21_12 >= SUPER_DIRECTIVE && LA21_12 <= VOID_TYPE)) ) { + if ( (LA21_12==EOF||(LA21_12 >= ACCESS_SPEC && LA21_12 <= ANNOTATION_VISIBILITY)||LA21_12==BOOL_LITERAL||(LA21_12 >= CLASS_DIRECTIVE && LA21_12 <= CLOSE_PAREN)||LA21_12==COMMA||(LA21_12 >= DOUBLE_LITERAL_OR_ID && LA21_12 <= END_ANNOTATION_DIRECTIVE)||LA21_12==END_FIELD_DIRECTIVE||LA21_12==END_SUBANNOTATION_DIRECTIVE||LA21_12==FIELD_DIRECTIVE||(LA21_12 >= FLOAT_LITERAL_OR_ID && LA21_12 <= IMPLEMENTS_DIRECTIVE)||(LA21_12 >= INSTRUCTION_FORMAT10t && LA21_12 <= INSTRUCTION_FORMAT10x_ODEX)||LA21_12==INSTRUCTION_FORMAT11x||LA21_12==INSTRUCTION_FORMAT12x_OR_ID||(LA21_12 >= INSTRUCTION_FORMAT21c_FIELD && LA21_12 <= INSTRUCTION_FORMAT21c_TYPE)||LA21_12==INSTRUCTION_FORMAT21t||(LA21_12 >= INSTRUCTION_FORMAT22c_FIELD && LA21_12 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA21_12 >= INSTRUCTION_FORMAT22s_OR_ID && LA21_12 <= INSTRUCTION_FORMAT22t)||LA21_12==INSTRUCTION_FORMAT23x||(LA21_12 >= INSTRUCTION_FORMAT31i_OR_ID && LA21_12 <= INSTRUCTION_FORMAT31t)||(LA21_12 >= INSTRUCTION_FORMAT35c_CALL_SITE && LA21_12 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA21_12 >= INSTRUCTION_FORMAT45cc_METHOD && LA21_12 <= INSTRUCTION_FORMAT51l)||(LA21_12 >= METHOD_DIRECTIVE && LA21_12 <= NULL_LITERAL)||(LA21_12 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA21_12 <= PRIMITIVE_TYPE)||LA21_12==REGISTER||(LA21_12 >= SIMPLE_NAME && LA21_12 <= SOURCE_DIRECTIVE)||(LA21_12 >= SUPER_DIRECTIVE && LA21_12 <= VOID_TYPE)) ) { alt21=9; } else if ( (LA21_12==COLON||LA21_12==OPEN_PAREN) ) { @@ -5038,7 +5247,7 @@ public class smaliParser extends Parser { case NULL_LITERAL: { int LA21_13 = input.LA(2); - if ( (LA21_13==EOF||(LA21_13 >= ACCESS_SPEC && LA21_13 <= ANNOTATION_VISIBILITY)||LA21_13==BOOL_LITERAL||(LA21_13 >= CLASS_DIRECTIVE && LA21_13 <= CLOSE_BRACE)||LA21_13==COMMA||(LA21_13 >= DOUBLE_LITERAL_OR_ID && LA21_13 <= END_ANNOTATION_DIRECTIVE)||LA21_13==END_FIELD_DIRECTIVE||LA21_13==END_SUBANNOTATION_DIRECTIVE||LA21_13==FIELD_DIRECTIVE||(LA21_13 >= FLOAT_LITERAL_OR_ID && LA21_13 <= IMPLEMENTS_DIRECTIVE)||(LA21_13 >= INSTRUCTION_FORMAT10t && LA21_13 <= INSTRUCTION_FORMAT10x_ODEX)||LA21_13==INSTRUCTION_FORMAT11x||LA21_13==INSTRUCTION_FORMAT12x_OR_ID||(LA21_13 >= INSTRUCTION_FORMAT21c_FIELD && LA21_13 <= INSTRUCTION_FORMAT21c_TYPE)||LA21_13==INSTRUCTION_FORMAT21t||(LA21_13 >= INSTRUCTION_FORMAT22c_FIELD && LA21_13 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA21_13 >= INSTRUCTION_FORMAT22s_OR_ID && LA21_13 <= INSTRUCTION_FORMAT22t)||LA21_13==INSTRUCTION_FORMAT23x||(LA21_13 >= INSTRUCTION_FORMAT31i_OR_ID && LA21_13 <= INSTRUCTION_FORMAT31t)||(LA21_13 >= INSTRUCTION_FORMAT35c_METHOD && LA21_13 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA21_13 >= INSTRUCTION_FORMAT45cc_METHOD && LA21_13 <= INSTRUCTION_FORMAT51l)||(LA21_13 >= METHOD_DIRECTIVE && LA21_13 <= NULL_LITERAL)||(LA21_13 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA21_13 <= PRIMITIVE_TYPE)||LA21_13==REGISTER||(LA21_13 >= SIMPLE_NAME && LA21_13 <= SOURCE_DIRECTIVE)||(LA21_13 >= SUPER_DIRECTIVE && LA21_13 <= VOID_TYPE)) ) { + if ( (LA21_13==EOF||(LA21_13 >= ACCESS_SPEC && LA21_13 <= ANNOTATION_VISIBILITY)||LA21_13==BOOL_LITERAL||(LA21_13 >= CLASS_DIRECTIVE && LA21_13 <= CLOSE_PAREN)||LA21_13==COMMA||(LA21_13 >= DOUBLE_LITERAL_OR_ID && LA21_13 <= END_ANNOTATION_DIRECTIVE)||LA21_13==END_FIELD_DIRECTIVE||LA21_13==END_SUBANNOTATION_DIRECTIVE||LA21_13==FIELD_DIRECTIVE||(LA21_13 >= FLOAT_LITERAL_OR_ID && LA21_13 <= IMPLEMENTS_DIRECTIVE)||(LA21_13 >= INSTRUCTION_FORMAT10t && LA21_13 <= INSTRUCTION_FORMAT10x_ODEX)||LA21_13==INSTRUCTION_FORMAT11x||LA21_13==INSTRUCTION_FORMAT12x_OR_ID||(LA21_13 >= INSTRUCTION_FORMAT21c_FIELD && LA21_13 <= INSTRUCTION_FORMAT21c_TYPE)||LA21_13==INSTRUCTION_FORMAT21t||(LA21_13 >= INSTRUCTION_FORMAT22c_FIELD && LA21_13 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA21_13 >= INSTRUCTION_FORMAT22s_OR_ID && LA21_13 <= INSTRUCTION_FORMAT22t)||LA21_13==INSTRUCTION_FORMAT23x||(LA21_13 >= INSTRUCTION_FORMAT31i_OR_ID && LA21_13 <= INSTRUCTION_FORMAT31t)||(LA21_13 >= INSTRUCTION_FORMAT35c_CALL_SITE && LA21_13 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA21_13 >= INSTRUCTION_FORMAT45cc_METHOD && LA21_13 <= INSTRUCTION_FORMAT51l)||(LA21_13 >= METHOD_DIRECTIVE && LA21_13 <= NULL_LITERAL)||(LA21_13 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA21_13 <= PRIMITIVE_TYPE)||LA21_13==REGISTER||(LA21_13 >= SIMPLE_NAME && LA21_13 <= SOURCE_DIRECTIVE)||(LA21_13 >= SUPER_DIRECTIVE && LA21_13 <= VOID_TYPE)) ) { alt21=10; } else if ( (LA21_13==COLON||LA21_13==OPEN_PAREN) ) { @@ -5080,6 +5289,8 @@ public class smaliParser extends Parser { case INSTRUCTION_FORMAT12x_OR_ID: case INSTRUCTION_FORMAT21c_FIELD: case INSTRUCTION_FORMAT21c_FIELD_ODEX: + case INSTRUCTION_FORMAT21c_METHOD_HANDLE: + case INSTRUCTION_FORMAT21c_METHOD_TYPE: case INSTRUCTION_FORMAT21c_STRING: case INSTRUCTION_FORMAT21c_TYPE: case INSTRUCTION_FORMAT21t: @@ -5092,6 +5303,7 @@ public class smaliParser extends Parser { case INSTRUCTION_FORMAT23x: case INSTRUCTION_FORMAT31i_OR_ID: case INSTRUCTION_FORMAT31t: + case INSTRUCTION_FORMAT35c_CALL_SITE: case INSTRUCTION_FORMAT35c_METHOD: case INSTRUCTION_FORMAT35c_METHOD_ODEX: case INSTRUCTION_FORMAT35c_TYPE: @@ -5111,11 +5323,88 @@ public class smaliParser extends Parser { alt21=13; } break; + case METHOD_HANDLE_TYPE_FIELD: + { + int LA21_17 = input.LA(2); + if ( (LA21_17==AT) ) { + alt21=15; + } + else if ( (LA21_17==COLON||LA21_17==OPEN_PAREN) ) { + alt21=13; + } + + else { + int nvaeMark = input.mark(); + try { + input.consume(); + NoViableAltException nvae = + new NoViableAltException("", 21, 17, input); + throw nvae; + } finally { + input.rewind(nvaeMark); + } + } + + } + break; + case METHOD_HANDLE_TYPE_METHOD: + { + int LA21_18 = input.LA(2); + if ( (LA21_18==AT) ) { + alt21=15; + } + else if ( (LA21_18==COLON||LA21_18==OPEN_PAREN) ) { + alt21=13; + } + + else { + int nvaeMark = input.mark(); + try { + input.consume(); + NoViableAltException nvae = + new NoViableAltException("", 21, 18, input); + throw nvae; + } finally { + input.rewind(nvaeMark); + } + } + + } + break; + case INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE: + { + int LA21_19 = input.LA(2); + if ( (LA21_19==AT) ) { + alt21=15; + } + else if ( (LA21_19==COLON||LA21_19==OPEN_PAREN) ) { + alt21=13; + } + + else { + int nvaeMark = input.mark(); + try { + input.consume(); + NoViableAltException nvae = + new NoViableAltException("", 21, 19, input); + throw nvae; + } finally { + input.rewind(nvaeMark); + } + } + + } + break; case ENUM_DIRECTIVE: { alt21=14; } break; + case OPEN_PAREN: + { + alt21=16; + } + break; default: NoViableAltException nvae = new NoViableAltException("", 21, 0, input); @@ -5123,184 +5412,212 @@ public class smaliParser extends Parser { } switch (alt21) { case 1 : - // smaliParser.g:626:5: LONG_LITERAL + // smaliParser.g:644:5: LONG_LITERAL { root_0 = (CommonTree)adaptor.nil(); - LONG_LITERAL111=(Token)match(input,LONG_LITERAL,FOLLOW_LONG_LITERAL_in_literal2468); - LONG_LITERAL111_tree = (CommonTree)adaptor.create(LONG_LITERAL111); - adaptor.addChild(root_0, LONG_LITERAL111_tree); + LONG_LITERAL117=(Token)match(input,LONG_LITERAL,FOLLOW_LONG_LITERAL_in_literal2589); + LONG_LITERAL117_tree = (CommonTree)adaptor.create(LONG_LITERAL117); + adaptor.addChild(root_0, LONG_LITERAL117_tree); } break; case 2 : - // smaliParser.g:627:5: integer_literal + // smaliParser.g:645:5: integer_literal { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_integer_literal_in_literal2474); - integer_literal112=integer_literal(); + pushFollow(FOLLOW_integer_literal_in_literal2595); + integer_literal118=integer_literal(); state._fsp--; - adaptor.addChild(root_0, integer_literal112.getTree()); + adaptor.addChild(root_0, integer_literal118.getTree()); } break; case 3 : - // smaliParser.g:628:5: SHORT_LITERAL + // smaliParser.g:646:5: SHORT_LITERAL { root_0 = (CommonTree)adaptor.nil(); - SHORT_LITERAL113=(Token)match(input,SHORT_LITERAL,FOLLOW_SHORT_LITERAL_in_literal2480); - SHORT_LITERAL113_tree = (CommonTree)adaptor.create(SHORT_LITERAL113); - adaptor.addChild(root_0, SHORT_LITERAL113_tree); + SHORT_LITERAL119=(Token)match(input,SHORT_LITERAL,FOLLOW_SHORT_LITERAL_in_literal2601); + SHORT_LITERAL119_tree = (CommonTree)adaptor.create(SHORT_LITERAL119); + adaptor.addChild(root_0, SHORT_LITERAL119_tree); } break; case 4 : - // smaliParser.g:629:5: BYTE_LITERAL + // smaliParser.g:647:5: BYTE_LITERAL { root_0 = (CommonTree)adaptor.nil(); - BYTE_LITERAL114=(Token)match(input,BYTE_LITERAL,FOLLOW_BYTE_LITERAL_in_literal2486); - BYTE_LITERAL114_tree = (CommonTree)adaptor.create(BYTE_LITERAL114); - adaptor.addChild(root_0, BYTE_LITERAL114_tree); + BYTE_LITERAL120=(Token)match(input,BYTE_LITERAL,FOLLOW_BYTE_LITERAL_in_literal2607); + BYTE_LITERAL120_tree = (CommonTree)adaptor.create(BYTE_LITERAL120); + adaptor.addChild(root_0, BYTE_LITERAL120_tree); } break; case 5 : - // smaliParser.g:630:5: float_literal + // smaliParser.g:648:5: float_literal { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_float_literal_in_literal2492); - float_literal115=float_literal(); + pushFollow(FOLLOW_float_literal_in_literal2613); + float_literal121=float_literal(); state._fsp--; - adaptor.addChild(root_0, float_literal115.getTree()); + adaptor.addChild(root_0, float_literal121.getTree()); } break; case 6 : - // smaliParser.g:631:5: double_literal + // smaliParser.g:649:5: double_literal { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_double_literal_in_literal2498); - double_literal116=double_literal(); + pushFollow(FOLLOW_double_literal_in_literal2619); + double_literal122=double_literal(); state._fsp--; - adaptor.addChild(root_0, double_literal116.getTree()); + adaptor.addChild(root_0, double_literal122.getTree()); } break; case 7 : - // smaliParser.g:632:5: CHAR_LITERAL + // smaliParser.g:650:5: CHAR_LITERAL { root_0 = (CommonTree)adaptor.nil(); - CHAR_LITERAL117=(Token)match(input,CHAR_LITERAL,FOLLOW_CHAR_LITERAL_in_literal2504); - CHAR_LITERAL117_tree = (CommonTree)adaptor.create(CHAR_LITERAL117); - adaptor.addChild(root_0, CHAR_LITERAL117_tree); + CHAR_LITERAL123=(Token)match(input,CHAR_LITERAL,FOLLOW_CHAR_LITERAL_in_literal2625); + CHAR_LITERAL123_tree = (CommonTree)adaptor.create(CHAR_LITERAL123); + adaptor.addChild(root_0, CHAR_LITERAL123_tree); } break; case 8 : - // smaliParser.g:633:5: STRING_LITERAL + // smaliParser.g:651:5: STRING_LITERAL { root_0 = (CommonTree)adaptor.nil(); - STRING_LITERAL118=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_literal2510); - STRING_LITERAL118_tree = (CommonTree)adaptor.create(STRING_LITERAL118); - adaptor.addChild(root_0, STRING_LITERAL118_tree); + STRING_LITERAL124=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_literal2631); + STRING_LITERAL124_tree = (CommonTree)adaptor.create(STRING_LITERAL124); + adaptor.addChild(root_0, STRING_LITERAL124_tree); } break; case 9 : - // smaliParser.g:634:5: BOOL_LITERAL + // smaliParser.g:652:5: BOOL_LITERAL { root_0 = (CommonTree)adaptor.nil(); - BOOL_LITERAL119=(Token)match(input,BOOL_LITERAL,FOLLOW_BOOL_LITERAL_in_literal2516); - BOOL_LITERAL119_tree = (CommonTree)adaptor.create(BOOL_LITERAL119); - adaptor.addChild(root_0, BOOL_LITERAL119_tree); + BOOL_LITERAL125=(Token)match(input,BOOL_LITERAL,FOLLOW_BOOL_LITERAL_in_literal2637); + BOOL_LITERAL125_tree = (CommonTree)adaptor.create(BOOL_LITERAL125); + adaptor.addChild(root_0, BOOL_LITERAL125_tree); } break; case 10 : - // smaliParser.g:635:5: NULL_LITERAL + // smaliParser.g:653:5: NULL_LITERAL { root_0 = (CommonTree)adaptor.nil(); - NULL_LITERAL120=(Token)match(input,NULL_LITERAL,FOLLOW_NULL_LITERAL_in_literal2522); - NULL_LITERAL120_tree = (CommonTree)adaptor.create(NULL_LITERAL120); - adaptor.addChild(root_0, NULL_LITERAL120_tree); + NULL_LITERAL126=(Token)match(input,NULL_LITERAL,FOLLOW_NULL_LITERAL_in_literal2643); + NULL_LITERAL126_tree = (CommonTree)adaptor.create(NULL_LITERAL126); + adaptor.addChild(root_0, NULL_LITERAL126_tree); } break; case 11 : - // smaliParser.g:636:5: array_literal + // smaliParser.g:654:5: array_literal { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_array_literal_in_literal2528); - array_literal121=array_literal(); + pushFollow(FOLLOW_array_literal_in_literal2649); + array_literal127=array_literal(); state._fsp--; - adaptor.addChild(root_0, array_literal121.getTree()); + adaptor.addChild(root_0, array_literal127.getTree()); } break; case 12 : - // smaliParser.g:637:5: subannotation + // smaliParser.g:655:5: subannotation { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_subannotation_in_literal2534); - subannotation122=subannotation(); + pushFollow(FOLLOW_subannotation_in_literal2655); + subannotation128=subannotation(); state._fsp--; - adaptor.addChild(root_0, subannotation122.getTree()); + adaptor.addChild(root_0, subannotation128.getTree()); } break; case 13 : - // smaliParser.g:638:5: type_field_method_literal + // smaliParser.g:656:5: type_field_method_literal { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_type_field_method_literal_in_literal2540); - type_field_method_literal123=type_field_method_literal(); + pushFollow(FOLLOW_type_field_method_literal_in_literal2661); + type_field_method_literal129=type_field_method_literal(); state._fsp--; - adaptor.addChild(root_0, type_field_method_literal123.getTree()); + adaptor.addChild(root_0, type_field_method_literal129.getTree()); } break; case 14 : - // smaliParser.g:639:5: enum_literal + // smaliParser.g:657:5: enum_literal + { + root_0 = (CommonTree)adaptor.nil(); + + + pushFollow(FOLLOW_enum_literal_in_literal2667); + enum_literal130=enum_literal(); + state._fsp--; + + adaptor.addChild(root_0, enum_literal130.getTree()); + + } + break; + case 15 : + // smaliParser.g:658:5: method_handle_literal + { + root_0 = (CommonTree)adaptor.nil(); + + + pushFollow(FOLLOW_method_handle_literal_in_literal2673); + method_handle_literal131=method_handle_literal(); + state._fsp--; + + adaptor.addChild(root_0, method_handle_literal131.getTree()); + + } + break; + case 16 : + // smaliParser.g:659:5: method_prototype { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_enum_literal_in_literal2546); - enum_literal124=enum_literal(); + pushFollow(FOLLOW_method_prototype_in_literal2679); + method_prototype132=method_prototype(); state._fsp--; - adaptor.addChild(root_0, enum_literal124.getTree()); + adaptor.addChild(root_0, method_prototype132.getTree()); } break; @@ -5334,30 +5651,30 @@ public class smaliParser extends Parser { // $ANTLR start "parsed_integer_literal" - // smaliParser.g:641:1: parsed_integer_literal returns [int value] : integer_literal ; + // smaliParser.g:661:1: parsed_integer_literal returns [int value] : integer_literal ; public final smaliParser.parsed_integer_literal_return parsed_integer_literal() throws RecognitionException { smaliParser.parsed_integer_literal_return retval = new smaliParser.parsed_integer_literal_return(); retval.start = input.LT(1); CommonTree root_0 = null; - ParserRuleReturnScope integer_literal125 =null; + ParserRuleReturnScope integer_literal133 =null; try { - // smaliParser.g:642:3: ( integer_literal ) - // smaliParser.g:642:5: integer_literal + // smaliParser.g:662:3: ( integer_literal ) + // smaliParser.g:662:5: integer_literal { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_integer_literal_in_parsed_integer_literal2559); - integer_literal125=integer_literal(); + pushFollow(FOLLOW_integer_literal_in_parsed_integer_literal2692); + integer_literal133=integer_literal(); state._fsp--; - adaptor.addChild(root_0, integer_literal125.getTree()); + adaptor.addChild(root_0, integer_literal133.getTree()); - retval.value = LiteralTools.parseInt((integer_literal125!=null?input.toString(integer_literal125.start,integer_literal125.stop):null)); + retval.value = LiteralTools.parseInt((integer_literal133!=null?input.toString(integer_literal133.start,integer_literal133.stop):null)); } retval.stop = input.LT(-1); @@ -5387,26 +5704,26 @@ public class smaliParser extends Parser { // $ANTLR start "integral_literal" - // smaliParser.g:644:1: integral_literal : ( LONG_LITERAL | integer_literal | SHORT_LITERAL | CHAR_LITERAL | BYTE_LITERAL ); + // smaliParser.g:664:1: integral_literal : ( LONG_LITERAL | integer_literal | SHORT_LITERAL | CHAR_LITERAL | BYTE_LITERAL ); public final smaliParser.integral_literal_return integral_literal() throws RecognitionException { smaliParser.integral_literal_return retval = new smaliParser.integral_literal_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token LONG_LITERAL126=null; - Token SHORT_LITERAL128=null; - Token CHAR_LITERAL129=null; - Token BYTE_LITERAL130=null; - ParserRuleReturnScope integer_literal127 =null; + Token LONG_LITERAL134=null; + Token SHORT_LITERAL136=null; + Token CHAR_LITERAL137=null; + Token BYTE_LITERAL138=null; + ParserRuleReturnScope integer_literal135 =null; - CommonTree LONG_LITERAL126_tree=null; - CommonTree SHORT_LITERAL128_tree=null; - CommonTree CHAR_LITERAL129_tree=null; - CommonTree BYTE_LITERAL130_tree=null; + CommonTree LONG_LITERAL134_tree=null; + CommonTree SHORT_LITERAL136_tree=null; + CommonTree CHAR_LITERAL137_tree=null; + CommonTree BYTE_LITERAL138_tree=null; try { - // smaliParser.g:645:3: ( LONG_LITERAL | integer_literal | SHORT_LITERAL | CHAR_LITERAL | BYTE_LITERAL ) + // smaliParser.g:665:3: ( LONG_LITERAL | integer_literal | SHORT_LITERAL | CHAR_LITERAL | BYTE_LITERAL ) int alt22=5; switch ( input.LA(1) ) { case LONG_LITERAL: @@ -5442,64 +5759,64 @@ public class smaliParser extends Parser { } switch (alt22) { case 1 : - // smaliParser.g:645:5: LONG_LITERAL + // smaliParser.g:665:5: LONG_LITERAL { root_0 = (CommonTree)adaptor.nil(); - LONG_LITERAL126=(Token)match(input,LONG_LITERAL,FOLLOW_LONG_LITERAL_in_integral_literal2571); - LONG_LITERAL126_tree = (CommonTree)adaptor.create(LONG_LITERAL126); - adaptor.addChild(root_0, LONG_LITERAL126_tree); + LONG_LITERAL134=(Token)match(input,LONG_LITERAL,FOLLOW_LONG_LITERAL_in_integral_literal2704); + LONG_LITERAL134_tree = (CommonTree)adaptor.create(LONG_LITERAL134); + adaptor.addChild(root_0, LONG_LITERAL134_tree); } break; case 2 : - // smaliParser.g:646:5: integer_literal + // smaliParser.g:666:5: integer_literal { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_integer_literal_in_integral_literal2577); - integer_literal127=integer_literal(); + pushFollow(FOLLOW_integer_literal_in_integral_literal2710); + integer_literal135=integer_literal(); state._fsp--; - adaptor.addChild(root_0, integer_literal127.getTree()); + adaptor.addChild(root_0, integer_literal135.getTree()); } break; case 3 : - // smaliParser.g:647:5: SHORT_LITERAL + // smaliParser.g:667:5: SHORT_LITERAL { root_0 = (CommonTree)adaptor.nil(); - SHORT_LITERAL128=(Token)match(input,SHORT_LITERAL,FOLLOW_SHORT_LITERAL_in_integral_literal2583); - SHORT_LITERAL128_tree = (CommonTree)adaptor.create(SHORT_LITERAL128); - adaptor.addChild(root_0, SHORT_LITERAL128_tree); + SHORT_LITERAL136=(Token)match(input,SHORT_LITERAL,FOLLOW_SHORT_LITERAL_in_integral_literal2716); + SHORT_LITERAL136_tree = (CommonTree)adaptor.create(SHORT_LITERAL136); + adaptor.addChild(root_0, SHORT_LITERAL136_tree); } break; case 4 : - // smaliParser.g:648:5: CHAR_LITERAL + // smaliParser.g:668:5: CHAR_LITERAL { root_0 = (CommonTree)adaptor.nil(); - CHAR_LITERAL129=(Token)match(input,CHAR_LITERAL,FOLLOW_CHAR_LITERAL_in_integral_literal2589); - CHAR_LITERAL129_tree = (CommonTree)adaptor.create(CHAR_LITERAL129); - adaptor.addChild(root_0, CHAR_LITERAL129_tree); + CHAR_LITERAL137=(Token)match(input,CHAR_LITERAL,FOLLOW_CHAR_LITERAL_in_integral_literal2722); + CHAR_LITERAL137_tree = (CommonTree)adaptor.create(CHAR_LITERAL137); + adaptor.addChild(root_0, CHAR_LITERAL137_tree); } break; case 5 : - // smaliParser.g:649:5: BYTE_LITERAL + // smaliParser.g:669:5: BYTE_LITERAL { root_0 = (CommonTree)adaptor.nil(); - BYTE_LITERAL130=(Token)match(input,BYTE_LITERAL,FOLLOW_BYTE_LITERAL_in_integral_literal2595); - BYTE_LITERAL130_tree = (CommonTree)adaptor.create(BYTE_LITERAL130); - adaptor.addChild(root_0, BYTE_LITERAL130_tree); + BYTE_LITERAL138=(Token)match(input,BYTE_LITERAL,FOLLOW_BYTE_LITERAL_in_integral_literal2728); + BYTE_LITERAL138_tree = (CommonTree)adaptor.create(BYTE_LITERAL138); + adaptor.addChild(root_0, BYTE_LITERAL138_tree); } break; @@ -5532,29 +5849,29 @@ public class smaliParser extends Parser { // $ANTLR start "fixed_32bit_literal" - // smaliParser.g:651:1: fixed_32bit_literal : ( LONG_LITERAL | integer_literal | SHORT_LITERAL | BYTE_LITERAL | float_literal | CHAR_LITERAL | BOOL_LITERAL ); + // smaliParser.g:671:1: fixed_32bit_literal : ( LONG_LITERAL | integer_literal | SHORT_LITERAL | BYTE_LITERAL | float_literal | CHAR_LITERAL | BOOL_LITERAL ); public final smaliParser.fixed_32bit_literal_return fixed_32bit_literal() throws RecognitionException { smaliParser.fixed_32bit_literal_return retval = new smaliParser.fixed_32bit_literal_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token LONG_LITERAL131=null; - Token SHORT_LITERAL133=null; - Token BYTE_LITERAL134=null; - Token CHAR_LITERAL136=null; - Token BOOL_LITERAL137=null; - ParserRuleReturnScope integer_literal132 =null; - ParserRuleReturnScope float_literal135 =null; + Token LONG_LITERAL139=null; + Token SHORT_LITERAL141=null; + Token BYTE_LITERAL142=null; + Token CHAR_LITERAL144=null; + Token BOOL_LITERAL145=null; + ParserRuleReturnScope integer_literal140 =null; + ParserRuleReturnScope float_literal143 =null; - CommonTree LONG_LITERAL131_tree=null; - CommonTree SHORT_LITERAL133_tree=null; - CommonTree BYTE_LITERAL134_tree=null; - CommonTree CHAR_LITERAL136_tree=null; - CommonTree BOOL_LITERAL137_tree=null; + CommonTree LONG_LITERAL139_tree=null; + CommonTree SHORT_LITERAL141_tree=null; + CommonTree BYTE_LITERAL142_tree=null; + CommonTree CHAR_LITERAL144_tree=null; + CommonTree BOOL_LITERAL145_tree=null; try { - // smaliParser.g:652:3: ( LONG_LITERAL | integer_literal | SHORT_LITERAL | BYTE_LITERAL | float_literal | CHAR_LITERAL | BOOL_LITERAL ) + // smaliParser.g:672:3: ( LONG_LITERAL | integer_literal | SHORT_LITERAL | BYTE_LITERAL | float_literal | CHAR_LITERAL | BOOL_LITERAL ) int alt23=7; switch ( input.LA(1) ) { case LONG_LITERAL: @@ -5601,90 +5918,90 @@ public class smaliParser extends Parser { } switch (alt23) { case 1 : - // smaliParser.g:652:5: LONG_LITERAL + // smaliParser.g:672:5: LONG_LITERAL { root_0 = (CommonTree)adaptor.nil(); - LONG_LITERAL131=(Token)match(input,LONG_LITERAL,FOLLOW_LONG_LITERAL_in_fixed_32bit_literal2605); - LONG_LITERAL131_tree = (CommonTree)adaptor.create(LONG_LITERAL131); - adaptor.addChild(root_0, LONG_LITERAL131_tree); + LONG_LITERAL139=(Token)match(input,LONG_LITERAL,FOLLOW_LONG_LITERAL_in_fixed_32bit_literal2738); + LONG_LITERAL139_tree = (CommonTree)adaptor.create(LONG_LITERAL139); + adaptor.addChild(root_0, LONG_LITERAL139_tree); } break; case 2 : - // smaliParser.g:653:5: integer_literal + // smaliParser.g:673:5: integer_literal { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_integer_literal_in_fixed_32bit_literal2611); - integer_literal132=integer_literal(); + pushFollow(FOLLOW_integer_literal_in_fixed_32bit_literal2744); + integer_literal140=integer_literal(); state._fsp--; - adaptor.addChild(root_0, integer_literal132.getTree()); + adaptor.addChild(root_0, integer_literal140.getTree()); } break; case 3 : - // smaliParser.g:654:5: SHORT_LITERAL + // smaliParser.g:674:5: SHORT_LITERAL { root_0 = (CommonTree)adaptor.nil(); - SHORT_LITERAL133=(Token)match(input,SHORT_LITERAL,FOLLOW_SHORT_LITERAL_in_fixed_32bit_literal2617); - SHORT_LITERAL133_tree = (CommonTree)adaptor.create(SHORT_LITERAL133); - adaptor.addChild(root_0, SHORT_LITERAL133_tree); + SHORT_LITERAL141=(Token)match(input,SHORT_LITERAL,FOLLOW_SHORT_LITERAL_in_fixed_32bit_literal2750); + SHORT_LITERAL141_tree = (CommonTree)adaptor.create(SHORT_LITERAL141); + adaptor.addChild(root_0, SHORT_LITERAL141_tree); } break; case 4 : - // smaliParser.g:655:5: BYTE_LITERAL + // smaliParser.g:675:5: BYTE_LITERAL { root_0 = (CommonTree)adaptor.nil(); - BYTE_LITERAL134=(Token)match(input,BYTE_LITERAL,FOLLOW_BYTE_LITERAL_in_fixed_32bit_literal2623); - BYTE_LITERAL134_tree = (CommonTree)adaptor.create(BYTE_LITERAL134); - adaptor.addChild(root_0, BYTE_LITERAL134_tree); + BYTE_LITERAL142=(Token)match(input,BYTE_LITERAL,FOLLOW_BYTE_LITERAL_in_fixed_32bit_literal2756); + BYTE_LITERAL142_tree = (CommonTree)adaptor.create(BYTE_LITERAL142); + adaptor.addChild(root_0, BYTE_LITERAL142_tree); } break; case 5 : - // smaliParser.g:656:5: float_literal + // smaliParser.g:676:5: float_literal { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_float_literal_in_fixed_32bit_literal2629); - float_literal135=float_literal(); + pushFollow(FOLLOW_float_literal_in_fixed_32bit_literal2762); + float_literal143=float_literal(); state._fsp--; - adaptor.addChild(root_0, float_literal135.getTree()); + adaptor.addChild(root_0, float_literal143.getTree()); } break; case 6 : - // smaliParser.g:657:5: CHAR_LITERAL + // smaliParser.g:677:5: CHAR_LITERAL { root_0 = (CommonTree)adaptor.nil(); - CHAR_LITERAL136=(Token)match(input,CHAR_LITERAL,FOLLOW_CHAR_LITERAL_in_fixed_32bit_literal2635); - CHAR_LITERAL136_tree = (CommonTree)adaptor.create(CHAR_LITERAL136); - adaptor.addChild(root_0, CHAR_LITERAL136_tree); + CHAR_LITERAL144=(Token)match(input,CHAR_LITERAL,FOLLOW_CHAR_LITERAL_in_fixed_32bit_literal2768); + CHAR_LITERAL144_tree = (CommonTree)adaptor.create(CHAR_LITERAL144); + adaptor.addChild(root_0, CHAR_LITERAL144_tree); } break; case 7 : - // smaliParser.g:658:5: BOOL_LITERAL + // smaliParser.g:678:5: BOOL_LITERAL { root_0 = (CommonTree)adaptor.nil(); - BOOL_LITERAL137=(Token)match(input,BOOL_LITERAL,FOLLOW_BOOL_LITERAL_in_fixed_32bit_literal2641); - BOOL_LITERAL137_tree = (CommonTree)adaptor.create(BOOL_LITERAL137); - adaptor.addChild(root_0, BOOL_LITERAL137_tree); + BOOL_LITERAL145=(Token)match(input,BOOL_LITERAL,FOLLOW_BOOL_LITERAL_in_fixed_32bit_literal2774); + BOOL_LITERAL145_tree = (CommonTree)adaptor.create(BOOL_LITERAL145); + adaptor.addChild(root_0, BOOL_LITERAL145_tree); } break; @@ -5717,30 +6034,30 @@ public class smaliParser extends Parser { // $ANTLR start "fixed_literal" - // smaliParser.g:660:1: fixed_literal : ( integer_literal | LONG_LITERAL | SHORT_LITERAL | BYTE_LITERAL | float_literal | double_literal | CHAR_LITERAL | BOOL_LITERAL ); + // smaliParser.g:680:1: fixed_literal : ( integer_literal | LONG_LITERAL | SHORT_LITERAL | BYTE_LITERAL | float_literal | double_literal | CHAR_LITERAL | BOOL_LITERAL ); public final smaliParser.fixed_literal_return fixed_literal() throws RecognitionException { smaliParser.fixed_literal_return retval = new smaliParser.fixed_literal_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token LONG_LITERAL139=null; - Token SHORT_LITERAL140=null; - Token BYTE_LITERAL141=null; - Token CHAR_LITERAL144=null; - Token BOOL_LITERAL145=null; - ParserRuleReturnScope integer_literal138 =null; - ParserRuleReturnScope float_literal142 =null; - ParserRuleReturnScope double_literal143 =null; - - CommonTree LONG_LITERAL139_tree=null; - CommonTree SHORT_LITERAL140_tree=null; - CommonTree BYTE_LITERAL141_tree=null; - CommonTree CHAR_LITERAL144_tree=null; - CommonTree BOOL_LITERAL145_tree=null; + Token LONG_LITERAL147=null; + Token SHORT_LITERAL148=null; + Token BYTE_LITERAL149=null; + Token CHAR_LITERAL152=null; + Token BOOL_LITERAL153=null; + ParserRuleReturnScope integer_literal146 =null; + ParserRuleReturnScope float_literal150 =null; + ParserRuleReturnScope double_literal151 =null; + + CommonTree LONG_LITERAL147_tree=null; + CommonTree SHORT_LITERAL148_tree=null; + CommonTree BYTE_LITERAL149_tree=null; + CommonTree CHAR_LITERAL152_tree=null; + CommonTree BOOL_LITERAL153_tree=null; try { - // smaliParser.g:661:3: ( integer_literal | LONG_LITERAL | SHORT_LITERAL | BYTE_LITERAL | float_literal | double_literal | CHAR_LITERAL | BOOL_LITERAL ) + // smaliParser.g:681:3: ( integer_literal | LONG_LITERAL | SHORT_LITERAL | BYTE_LITERAL | float_literal | double_literal | CHAR_LITERAL | BOOL_LITERAL ) int alt24=8; switch ( input.LA(1) ) { case NEGATIVE_INTEGER_LITERAL: @@ -5793,104 +6110,104 @@ public class smaliParser extends Parser { } switch (alt24) { case 1 : - // smaliParser.g:661:5: integer_literal + // smaliParser.g:681:5: integer_literal { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_integer_literal_in_fixed_literal2651); - integer_literal138=integer_literal(); + pushFollow(FOLLOW_integer_literal_in_fixed_literal2784); + integer_literal146=integer_literal(); state._fsp--; - adaptor.addChild(root_0, integer_literal138.getTree()); + adaptor.addChild(root_0, integer_literal146.getTree()); } break; case 2 : - // smaliParser.g:662:5: LONG_LITERAL + // smaliParser.g:682:5: LONG_LITERAL { root_0 = (CommonTree)adaptor.nil(); - LONG_LITERAL139=(Token)match(input,LONG_LITERAL,FOLLOW_LONG_LITERAL_in_fixed_literal2657); - LONG_LITERAL139_tree = (CommonTree)adaptor.create(LONG_LITERAL139); - adaptor.addChild(root_0, LONG_LITERAL139_tree); + LONG_LITERAL147=(Token)match(input,LONG_LITERAL,FOLLOW_LONG_LITERAL_in_fixed_literal2790); + LONG_LITERAL147_tree = (CommonTree)adaptor.create(LONG_LITERAL147); + adaptor.addChild(root_0, LONG_LITERAL147_tree); } break; case 3 : - // smaliParser.g:663:5: SHORT_LITERAL + // smaliParser.g:683:5: SHORT_LITERAL { root_0 = (CommonTree)adaptor.nil(); - SHORT_LITERAL140=(Token)match(input,SHORT_LITERAL,FOLLOW_SHORT_LITERAL_in_fixed_literal2663); - SHORT_LITERAL140_tree = (CommonTree)adaptor.create(SHORT_LITERAL140); - adaptor.addChild(root_0, SHORT_LITERAL140_tree); + SHORT_LITERAL148=(Token)match(input,SHORT_LITERAL,FOLLOW_SHORT_LITERAL_in_fixed_literal2796); + SHORT_LITERAL148_tree = (CommonTree)adaptor.create(SHORT_LITERAL148); + adaptor.addChild(root_0, SHORT_LITERAL148_tree); } break; case 4 : - // smaliParser.g:664:5: BYTE_LITERAL + // smaliParser.g:684:5: BYTE_LITERAL { root_0 = (CommonTree)adaptor.nil(); - BYTE_LITERAL141=(Token)match(input,BYTE_LITERAL,FOLLOW_BYTE_LITERAL_in_fixed_literal2669); - BYTE_LITERAL141_tree = (CommonTree)adaptor.create(BYTE_LITERAL141); - adaptor.addChild(root_0, BYTE_LITERAL141_tree); + BYTE_LITERAL149=(Token)match(input,BYTE_LITERAL,FOLLOW_BYTE_LITERAL_in_fixed_literal2802); + BYTE_LITERAL149_tree = (CommonTree)adaptor.create(BYTE_LITERAL149); + adaptor.addChild(root_0, BYTE_LITERAL149_tree); } break; case 5 : - // smaliParser.g:665:5: float_literal + // smaliParser.g:685:5: float_literal { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_float_literal_in_fixed_literal2675); - float_literal142=float_literal(); + pushFollow(FOLLOW_float_literal_in_fixed_literal2808); + float_literal150=float_literal(); state._fsp--; - adaptor.addChild(root_0, float_literal142.getTree()); + adaptor.addChild(root_0, float_literal150.getTree()); } break; case 6 : - // smaliParser.g:666:5: double_literal + // smaliParser.g:686:5: double_literal { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_double_literal_in_fixed_literal2681); - double_literal143=double_literal(); + pushFollow(FOLLOW_double_literal_in_fixed_literal2814); + double_literal151=double_literal(); state._fsp--; - adaptor.addChild(root_0, double_literal143.getTree()); + adaptor.addChild(root_0, double_literal151.getTree()); } break; case 7 : - // smaliParser.g:667:5: CHAR_LITERAL + // smaliParser.g:687:5: CHAR_LITERAL { root_0 = (CommonTree)adaptor.nil(); - CHAR_LITERAL144=(Token)match(input,CHAR_LITERAL,FOLLOW_CHAR_LITERAL_in_fixed_literal2687); - CHAR_LITERAL144_tree = (CommonTree)adaptor.create(CHAR_LITERAL144); - adaptor.addChild(root_0, CHAR_LITERAL144_tree); + CHAR_LITERAL152=(Token)match(input,CHAR_LITERAL,FOLLOW_CHAR_LITERAL_in_fixed_literal2820); + CHAR_LITERAL152_tree = (CommonTree)adaptor.create(CHAR_LITERAL152); + adaptor.addChild(root_0, CHAR_LITERAL152_tree); } break; case 8 : - // smaliParser.g:668:5: BOOL_LITERAL + // smaliParser.g:688:5: BOOL_LITERAL { root_0 = (CommonTree)adaptor.nil(); - BOOL_LITERAL145=(Token)match(input,BOOL_LITERAL,FOLLOW_BOOL_LITERAL_in_fixed_literal2693); - BOOL_LITERAL145_tree = (CommonTree)adaptor.create(BOOL_LITERAL145); - adaptor.addChild(root_0, BOOL_LITERAL145_tree); + BOOL_LITERAL153=(Token)match(input,BOOL_LITERAL,FOLLOW_BOOL_LITERAL_in_fixed_literal2826); + BOOL_LITERAL153_tree = (CommonTree)adaptor.create(BOOL_LITERAL153); + adaptor.addChild(root_0, BOOL_LITERAL153_tree); } break; @@ -5923,38 +6240,38 @@ public class smaliParser extends Parser { // $ANTLR start "array_literal" - // smaliParser.g:670:1: array_literal : OPEN_BRACE ( literal ( COMMA literal )* |) CLOSE_BRACE -> ^( I_ENCODED_ARRAY[$start, \"I_ENCODED_ARRAY\"] ( literal )* ) ; + // smaliParser.g:690:1: array_literal : OPEN_BRACE ( literal ( COMMA literal )* |) CLOSE_BRACE -> ^( I_ENCODED_ARRAY[$start, \"I_ENCODED_ARRAY\"] ( literal )* ) ; public final smaliParser.array_literal_return array_literal() throws RecognitionException { smaliParser.array_literal_return retval = new smaliParser.array_literal_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token OPEN_BRACE146=null; - Token COMMA148=null; - Token CLOSE_BRACE150=null; - ParserRuleReturnScope literal147 =null; - ParserRuleReturnScope literal149 =null; + Token OPEN_BRACE154=null; + Token COMMA156=null; + Token CLOSE_BRACE158=null; + ParserRuleReturnScope literal155 =null; + ParserRuleReturnScope literal157 =null; - CommonTree OPEN_BRACE146_tree=null; - CommonTree COMMA148_tree=null; - CommonTree CLOSE_BRACE150_tree=null; + CommonTree OPEN_BRACE154_tree=null; + CommonTree COMMA156_tree=null; + CommonTree CLOSE_BRACE158_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_OPEN_BRACE=new RewriteRuleTokenStream(adaptor,"token OPEN_BRACE"); RewriteRuleTokenStream stream_CLOSE_BRACE=new RewriteRuleTokenStream(adaptor,"token CLOSE_BRACE"); RewriteRuleSubtreeStream stream_literal=new RewriteRuleSubtreeStream(adaptor,"rule literal"); try { - // smaliParser.g:671:3: ( OPEN_BRACE ( literal ( COMMA literal )* |) CLOSE_BRACE -> ^( I_ENCODED_ARRAY[$start, \"I_ENCODED_ARRAY\"] ( literal )* ) ) - // smaliParser.g:671:5: OPEN_BRACE ( literal ( COMMA literal )* |) CLOSE_BRACE + // smaliParser.g:691:3: ( OPEN_BRACE ( literal ( COMMA literal )* |) CLOSE_BRACE -> ^( I_ENCODED_ARRAY[$start, \"I_ENCODED_ARRAY\"] ( literal )* ) ) + // smaliParser.g:691:5: OPEN_BRACE ( literal ( COMMA literal )* |) CLOSE_BRACE { - OPEN_BRACE146=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_array_literal2703); - stream_OPEN_BRACE.add(OPEN_BRACE146); + OPEN_BRACE154=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_array_literal2836); + stream_OPEN_BRACE.add(OPEN_BRACE154); - // smaliParser.g:671:16: ( literal ( COMMA literal )* |) + // smaliParser.g:691:16: ( literal ( COMMA literal )* |) int alt26=2; int LA26_0 = input.LA(1); - if ( (LA26_0==ACCESS_SPEC||LA26_0==ANNOTATION_VISIBILITY||LA26_0==ARRAY_TYPE_PREFIX||(LA26_0 >= BOOL_LITERAL && LA26_0 <= BYTE_LITERAL)||(LA26_0 >= CHAR_LITERAL && LA26_0 <= CLASS_DESCRIPTOR)||(LA26_0 >= DOUBLE_LITERAL && LA26_0 <= DOUBLE_LITERAL_OR_ID)||LA26_0==ENUM_DIRECTIVE||(LA26_0 >= FLOAT_LITERAL && LA26_0 <= FLOAT_LITERAL_OR_ID)||(LA26_0 >= INSTRUCTION_FORMAT10t && LA26_0 <= INSTRUCTION_FORMAT10x_ODEX)||LA26_0==INSTRUCTION_FORMAT11x||LA26_0==INSTRUCTION_FORMAT12x_OR_ID||(LA26_0 >= INSTRUCTION_FORMAT21c_FIELD && LA26_0 <= INSTRUCTION_FORMAT21c_TYPE)||LA26_0==INSTRUCTION_FORMAT21t||(LA26_0 >= INSTRUCTION_FORMAT22c_FIELD && LA26_0 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA26_0 >= INSTRUCTION_FORMAT22s_OR_ID && LA26_0 <= INSTRUCTION_FORMAT22t)||LA26_0==INSTRUCTION_FORMAT23x||(LA26_0 >= INSTRUCTION_FORMAT31i_OR_ID && LA26_0 <= INSTRUCTION_FORMAT31t)||(LA26_0 >= INSTRUCTION_FORMAT35c_METHOD && LA26_0 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA26_0 >= INSTRUCTION_FORMAT45cc_METHOD && LA26_0 <= INSTRUCTION_FORMAT51l)||(LA26_0 >= LONG_LITERAL && LA26_0 <= MEMBER_NAME)||(LA26_0 >= NEGATIVE_INTEGER_LITERAL && LA26_0 <= OPEN_BRACE)||(LA26_0 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA26_0 <= PRIMITIVE_TYPE)||LA26_0==REGISTER||(LA26_0 >= SHORT_LITERAL && LA26_0 <= SIMPLE_NAME)||(LA26_0 >= STRING_LITERAL && LA26_0 <= SUBANNOTATION_DIRECTIVE)||(LA26_0 >= VERIFICATION_ERROR_TYPE && LA26_0 <= VOID_TYPE)) ) { + if ( (LA26_0==ACCESS_SPEC||LA26_0==ANNOTATION_VISIBILITY||LA26_0==ARRAY_TYPE_PREFIX||(LA26_0 >= BOOL_LITERAL && LA26_0 <= BYTE_LITERAL)||(LA26_0 >= CHAR_LITERAL && LA26_0 <= CLASS_DESCRIPTOR)||(LA26_0 >= DOUBLE_LITERAL && LA26_0 <= DOUBLE_LITERAL_OR_ID)||LA26_0==ENUM_DIRECTIVE||(LA26_0 >= FLOAT_LITERAL && LA26_0 <= FLOAT_LITERAL_OR_ID)||(LA26_0 >= INSTRUCTION_FORMAT10t && LA26_0 <= INSTRUCTION_FORMAT10x_ODEX)||LA26_0==INSTRUCTION_FORMAT11x||LA26_0==INSTRUCTION_FORMAT12x_OR_ID||(LA26_0 >= INSTRUCTION_FORMAT21c_FIELD && LA26_0 <= INSTRUCTION_FORMAT21c_TYPE)||LA26_0==INSTRUCTION_FORMAT21t||(LA26_0 >= INSTRUCTION_FORMAT22c_FIELD && LA26_0 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA26_0 >= INSTRUCTION_FORMAT22s_OR_ID && LA26_0 <= INSTRUCTION_FORMAT22t)||LA26_0==INSTRUCTION_FORMAT23x||(LA26_0 >= INSTRUCTION_FORMAT31i_OR_ID && LA26_0 <= INSTRUCTION_FORMAT31t)||(LA26_0 >= INSTRUCTION_FORMAT35c_CALL_SITE && LA26_0 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA26_0 >= INSTRUCTION_FORMAT45cc_METHOD && LA26_0 <= INSTRUCTION_FORMAT51l)||(LA26_0 >= LONG_LITERAL && LA26_0 <= MEMBER_NAME)||(LA26_0 >= METHOD_HANDLE_TYPE_FIELD && LA26_0 <= OPEN_PAREN)||(LA26_0 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA26_0 <= PRIMITIVE_TYPE)||LA26_0==REGISTER||(LA26_0 >= SHORT_LITERAL && LA26_0 <= SIMPLE_NAME)||(LA26_0 >= STRING_LITERAL && LA26_0 <= SUBANNOTATION_DIRECTIVE)||(LA26_0 >= VERIFICATION_ERROR_TYPE && LA26_0 <= VOID_TYPE)) ) { alt26=1; } else if ( (LA26_0==CLOSE_BRACE) ) { @@ -5969,14 +6286,14 @@ public class smaliParser extends Parser { switch (alt26) { case 1 : - // smaliParser.g:671:17: literal ( COMMA literal )* + // smaliParser.g:691:17: literal ( COMMA literal )* { - pushFollow(FOLLOW_literal_in_array_literal2706); - literal147=literal(); + pushFollow(FOLLOW_literal_in_array_literal2839); + literal155=literal(); state._fsp--; - stream_literal.add(literal147.getTree()); - // smaliParser.g:671:25: ( COMMA literal )* + stream_literal.add(literal155.getTree()); + // smaliParser.g:691:25: ( COMMA literal )* loop25: while (true) { int alt25=2; @@ -5987,16 +6304,16 @@ public class smaliParser extends Parser { switch (alt25) { case 1 : - // smaliParser.g:671:26: COMMA literal + // smaliParser.g:691:26: COMMA literal { - COMMA148=(Token)match(input,COMMA,FOLLOW_COMMA_in_array_literal2709); - stream_COMMA.add(COMMA148); + COMMA156=(Token)match(input,COMMA,FOLLOW_COMMA_in_array_literal2842); + stream_COMMA.add(COMMA156); - pushFollow(FOLLOW_literal_in_array_literal2711); - literal149=literal(); + pushFollow(FOLLOW_literal_in_array_literal2844); + literal157=literal(); state._fsp--; - stream_literal.add(literal149.getTree()); + stream_literal.add(literal157.getTree()); } break; @@ -6008,15 +6325,15 @@ public class smaliParser extends Parser { } break; case 2 : - // smaliParser.g:671:44: + // smaliParser.g:691:44: { } break; } - CLOSE_BRACE150=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_array_literal2719); - stream_CLOSE_BRACE.add(CLOSE_BRACE150); + CLOSE_BRACE158=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_array_literal2852); + stream_CLOSE_BRACE.add(CLOSE_BRACE158); // AST REWRITE // elements: literal @@ -6029,13 +6346,13 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 672:5: -> ^( I_ENCODED_ARRAY[$start, \"I_ENCODED_ARRAY\"] ( literal )* ) + // 692:5: -> ^( I_ENCODED_ARRAY[$start, \"I_ENCODED_ARRAY\"] ( literal )* ) { - // smaliParser.g:672:8: ^( I_ENCODED_ARRAY[$start, \"I_ENCODED_ARRAY\"] ( literal )* ) + // smaliParser.g:692:8: ^( I_ENCODED_ARRAY[$start, \"I_ENCODED_ARRAY\"] ( literal )* ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_ENCODED_ARRAY, (retval.start), "I_ENCODED_ARRAY"), root_1); - // smaliParser.g:672:53: ( literal )* + // smaliParser.g:692:53: ( literal )* while ( stream_literal.hasNext() ) { adaptor.addChild(root_1, stream_literal.nextTree()); } @@ -6078,39 +6395,39 @@ public class smaliParser extends Parser { // $ANTLR start "annotation_element" - // smaliParser.g:674:1: annotation_element : simple_name EQUAL literal -> ^( I_ANNOTATION_ELEMENT[$start, \"I_ANNOTATION_ELEMENT\"] simple_name literal ) ; + // smaliParser.g:694:1: annotation_element : simple_name EQUAL literal -> ^( I_ANNOTATION_ELEMENT[$start, \"I_ANNOTATION_ELEMENT\"] simple_name literal ) ; public final smaliParser.annotation_element_return annotation_element() throws RecognitionException { smaliParser.annotation_element_return retval = new smaliParser.annotation_element_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token EQUAL152=null; - ParserRuleReturnScope simple_name151 =null; - ParserRuleReturnScope literal153 =null; + Token EQUAL160=null; + ParserRuleReturnScope simple_name159 =null; + ParserRuleReturnScope literal161 =null; - CommonTree EQUAL152_tree=null; + CommonTree EQUAL160_tree=null; RewriteRuleTokenStream stream_EQUAL=new RewriteRuleTokenStream(adaptor,"token EQUAL"); RewriteRuleSubtreeStream stream_simple_name=new RewriteRuleSubtreeStream(adaptor,"rule simple_name"); RewriteRuleSubtreeStream stream_literal=new RewriteRuleSubtreeStream(adaptor,"rule literal"); try { - // smaliParser.g:675:3: ( simple_name EQUAL literal -> ^( I_ANNOTATION_ELEMENT[$start, \"I_ANNOTATION_ELEMENT\"] simple_name literal ) ) - // smaliParser.g:675:5: simple_name EQUAL literal + // smaliParser.g:695:3: ( simple_name EQUAL literal -> ^( I_ANNOTATION_ELEMENT[$start, \"I_ANNOTATION_ELEMENT\"] simple_name literal ) ) + // smaliParser.g:695:5: simple_name EQUAL literal { - pushFollow(FOLLOW_simple_name_in_annotation_element2743); - simple_name151=simple_name(); + pushFollow(FOLLOW_simple_name_in_annotation_element2876); + simple_name159=simple_name(); state._fsp--; - stream_simple_name.add(simple_name151.getTree()); - EQUAL152=(Token)match(input,EQUAL,FOLLOW_EQUAL_in_annotation_element2745); - stream_EQUAL.add(EQUAL152); + stream_simple_name.add(simple_name159.getTree()); + EQUAL160=(Token)match(input,EQUAL,FOLLOW_EQUAL_in_annotation_element2878); + stream_EQUAL.add(EQUAL160); - pushFollow(FOLLOW_literal_in_annotation_element2747); - literal153=literal(); + pushFollow(FOLLOW_literal_in_annotation_element2880); + literal161=literal(); state._fsp--; - stream_literal.add(literal153.getTree()); + stream_literal.add(literal161.getTree()); // AST REWRITE // elements: simple_name, literal // token labels: @@ -6122,9 +6439,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 676:5: -> ^( I_ANNOTATION_ELEMENT[$start, \"I_ANNOTATION_ELEMENT\"] simple_name literal ) + // 696:5: -> ^( I_ANNOTATION_ELEMENT[$start, \"I_ANNOTATION_ELEMENT\"] simple_name literal ) { - // smaliParser.g:676:8: ^( I_ANNOTATION_ELEMENT[$start, \"I_ANNOTATION_ELEMENT\"] simple_name literal ) + // smaliParser.g:696:8: ^( I_ANNOTATION_ELEMENT[$start, \"I_ANNOTATION_ELEMENT\"] simple_name literal ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_ANNOTATION_ELEMENT, (retval.start), "I_ANNOTATION_ELEMENT"), root_1); @@ -6167,23 +6484,23 @@ public class smaliParser extends Parser { // $ANTLR start "annotation" - // smaliParser.g:678:1: annotation : ANNOTATION_DIRECTIVE ANNOTATION_VISIBILITY CLASS_DESCRIPTOR ( annotation_element )* END_ANNOTATION_DIRECTIVE -> ^( I_ANNOTATION[$start, \"I_ANNOTATION\"] ANNOTATION_VISIBILITY ^( I_SUBANNOTATION[$start, \"I_SUBANNOTATION\"] CLASS_DESCRIPTOR ( annotation_element )* ) ) ; + // smaliParser.g:698:1: annotation : ANNOTATION_DIRECTIVE ANNOTATION_VISIBILITY CLASS_DESCRIPTOR ( annotation_element )* END_ANNOTATION_DIRECTIVE -> ^( I_ANNOTATION[$start, \"I_ANNOTATION\"] ANNOTATION_VISIBILITY ^( I_SUBANNOTATION[$start, \"I_SUBANNOTATION\"] CLASS_DESCRIPTOR ( annotation_element )* ) ) ; public final smaliParser.annotation_return annotation() throws RecognitionException { smaliParser.annotation_return retval = new smaliParser.annotation_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token ANNOTATION_DIRECTIVE154=null; - Token ANNOTATION_VISIBILITY155=null; - Token CLASS_DESCRIPTOR156=null; - Token END_ANNOTATION_DIRECTIVE158=null; - ParserRuleReturnScope annotation_element157 =null; + Token ANNOTATION_DIRECTIVE162=null; + Token ANNOTATION_VISIBILITY163=null; + Token CLASS_DESCRIPTOR164=null; + Token END_ANNOTATION_DIRECTIVE166=null; + ParserRuleReturnScope annotation_element165 =null; - CommonTree ANNOTATION_DIRECTIVE154_tree=null; - CommonTree ANNOTATION_VISIBILITY155_tree=null; - CommonTree CLASS_DESCRIPTOR156_tree=null; - CommonTree END_ANNOTATION_DIRECTIVE158_tree=null; + CommonTree ANNOTATION_DIRECTIVE162_tree=null; + CommonTree ANNOTATION_VISIBILITY163_tree=null; + CommonTree CLASS_DESCRIPTOR164_tree=null; + CommonTree END_ANNOTATION_DIRECTIVE166_tree=null; RewriteRuleTokenStream stream_ANNOTATION_DIRECTIVE=new RewriteRuleTokenStream(adaptor,"token ANNOTATION_DIRECTIVE"); RewriteRuleTokenStream stream_ANNOTATION_VISIBILITY=new RewriteRuleTokenStream(adaptor,"token ANNOTATION_VISIBILITY"); RewriteRuleTokenStream stream_CLASS_DESCRIPTOR=new RewriteRuleTokenStream(adaptor,"token CLASS_DESCRIPTOR"); @@ -6191,36 +6508,36 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_annotation_element=new RewriteRuleSubtreeStream(adaptor,"rule annotation_element"); try { - // smaliParser.g:679:3: ( ANNOTATION_DIRECTIVE ANNOTATION_VISIBILITY CLASS_DESCRIPTOR ( annotation_element )* END_ANNOTATION_DIRECTIVE -> ^( I_ANNOTATION[$start, \"I_ANNOTATION\"] ANNOTATION_VISIBILITY ^( I_SUBANNOTATION[$start, \"I_SUBANNOTATION\"] CLASS_DESCRIPTOR ( annotation_element )* ) ) ) - // smaliParser.g:679:5: ANNOTATION_DIRECTIVE ANNOTATION_VISIBILITY CLASS_DESCRIPTOR ( annotation_element )* END_ANNOTATION_DIRECTIVE + // smaliParser.g:699:3: ( ANNOTATION_DIRECTIVE ANNOTATION_VISIBILITY CLASS_DESCRIPTOR ( annotation_element )* END_ANNOTATION_DIRECTIVE -> ^( I_ANNOTATION[$start, \"I_ANNOTATION\"] ANNOTATION_VISIBILITY ^( I_SUBANNOTATION[$start, \"I_SUBANNOTATION\"] CLASS_DESCRIPTOR ( annotation_element )* ) ) ) + // smaliParser.g:699:5: ANNOTATION_DIRECTIVE ANNOTATION_VISIBILITY CLASS_DESCRIPTOR ( annotation_element )* END_ANNOTATION_DIRECTIVE { - ANNOTATION_DIRECTIVE154=(Token)match(input,ANNOTATION_DIRECTIVE,FOLLOW_ANNOTATION_DIRECTIVE_in_annotation2772); - stream_ANNOTATION_DIRECTIVE.add(ANNOTATION_DIRECTIVE154); + ANNOTATION_DIRECTIVE162=(Token)match(input,ANNOTATION_DIRECTIVE,FOLLOW_ANNOTATION_DIRECTIVE_in_annotation2905); + stream_ANNOTATION_DIRECTIVE.add(ANNOTATION_DIRECTIVE162); - ANNOTATION_VISIBILITY155=(Token)match(input,ANNOTATION_VISIBILITY,FOLLOW_ANNOTATION_VISIBILITY_in_annotation2774); - stream_ANNOTATION_VISIBILITY.add(ANNOTATION_VISIBILITY155); + ANNOTATION_VISIBILITY163=(Token)match(input,ANNOTATION_VISIBILITY,FOLLOW_ANNOTATION_VISIBILITY_in_annotation2907); + stream_ANNOTATION_VISIBILITY.add(ANNOTATION_VISIBILITY163); - CLASS_DESCRIPTOR156=(Token)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_annotation2776); - stream_CLASS_DESCRIPTOR.add(CLASS_DESCRIPTOR156); + CLASS_DESCRIPTOR164=(Token)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_annotation2909); + stream_CLASS_DESCRIPTOR.add(CLASS_DESCRIPTOR164); - // smaliParser.g:680:5: ( annotation_element )* + // smaliParser.g:700:5: ( annotation_element )* loop27: while (true) { int alt27=2; int LA27_0 = input.LA(1); - if ( (LA27_0==ACCESS_SPEC||LA27_0==ANNOTATION_VISIBILITY||LA27_0==BOOL_LITERAL||LA27_0==DOUBLE_LITERAL_OR_ID||LA27_0==FLOAT_LITERAL_OR_ID||(LA27_0 >= INSTRUCTION_FORMAT10t && LA27_0 <= INSTRUCTION_FORMAT10x_ODEX)||LA27_0==INSTRUCTION_FORMAT11x||LA27_0==INSTRUCTION_FORMAT12x_OR_ID||(LA27_0 >= INSTRUCTION_FORMAT21c_FIELD && LA27_0 <= INSTRUCTION_FORMAT21c_TYPE)||LA27_0==INSTRUCTION_FORMAT21t||(LA27_0 >= INSTRUCTION_FORMAT22c_FIELD && LA27_0 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA27_0 >= INSTRUCTION_FORMAT22s_OR_ID && LA27_0 <= INSTRUCTION_FORMAT22t)||LA27_0==INSTRUCTION_FORMAT23x||(LA27_0 >= INSTRUCTION_FORMAT31i_OR_ID && LA27_0 <= INSTRUCTION_FORMAT31t)||(LA27_0 >= INSTRUCTION_FORMAT35c_METHOD && LA27_0 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA27_0 >= INSTRUCTION_FORMAT45cc_METHOD && LA27_0 <= INSTRUCTION_FORMAT51l)||(LA27_0 >= NEGATIVE_INTEGER_LITERAL && LA27_0 <= NULL_LITERAL)||(LA27_0 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA27_0 <= PRIMITIVE_TYPE)||LA27_0==REGISTER||LA27_0==SIMPLE_NAME||(LA27_0 >= VERIFICATION_ERROR_TYPE && LA27_0 <= VOID_TYPE)) ) { + if ( (LA27_0==ACCESS_SPEC||LA27_0==ANNOTATION_VISIBILITY||LA27_0==BOOL_LITERAL||LA27_0==DOUBLE_LITERAL_OR_ID||LA27_0==FLOAT_LITERAL_OR_ID||(LA27_0 >= INSTRUCTION_FORMAT10t && LA27_0 <= INSTRUCTION_FORMAT10x_ODEX)||LA27_0==INSTRUCTION_FORMAT11x||LA27_0==INSTRUCTION_FORMAT12x_OR_ID||(LA27_0 >= INSTRUCTION_FORMAT21c_FIELD && LA27_0 <= INSTRUCTION_FORMAT21c_TYPE)||LA27_0==INSTRUCTION_FORMAT21t||(LA27_0 >= INSTRUCTION_FORMAT22c_FIELD && LA27_0 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA27_0 >= INSTRUCTION_FORMAT22s_OR_ID && LA27_0 <= INSTRUCTION_FORMAT22t)||LA27_0==INSTRUCTION_FORMAT23x||(LA27_0 >= INSTRUCTION_FORMAT31i_OR_ID && LA27_0 <= INSTRUCTION_FORMAT31t)||(LA27_0 >= INSTRUCTION_FORMAT35c_CALL_SITE && LA27_0 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA27_0 >= INSTRUCTION_FORMAT45cc_METHOD && LA27_0 <= INSTRUCTION_FORMAT51l)||(LA27_0 >= METHOD_HANDLE_TYPE_FIELD && LA27_0 <= NULL_LITERAL)||(LA27_0 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA27_0 <= PRIMITIVE_TYPE)||LA27_0==REGISTER||LA27_0==SIMPLE_NAME||(LA27_0 >= VERIFICATION_ERROR_TYPE && LA27_0 <= VOID_TYPE)) ) { alt27=1; } switch (alt27) { case 1 : - // smaliParser.g:680:5: annotation_element + // smaliParser.g:700:5: annotation_element { - pushFollow(FOLLOW_annotation_element_in_annotation2782); - annotation_element157=annotation_element(); + pushFollow(FOLLOW_annotation_element_in_annotation2915); + annotation_element165=annotation_element(); state._fsp--; - stream_annotation_element.add(annotation_element157.getTree()); + stream_annotation_element.add(annotation_element165.getTree()); } break; @@ -6229,11 +6546,11 @@ public class smaliParser extends Parser { } } - END_ANNOTATION_DIRECTIVE158=(Token)match(input,END_ANNOTATION_DIRECTIVE,FOLLOW_END_ANNOTATION_DIRECTIVE_in_annotation2785); - stream_END_ANNOTATION_DIRECTIVE.add(END_ANNOTATION_DIRECTIVE158); + END_ANNOTATION_DIRECTIVE166=(Token)match(input,END_ANNOTATION_DIRECTIVE,FOLLOW_END_ANNOTATION_DIRECTIVE_in_annotation2918); + stream_END_ANNOTATION_DIRECTIVE.add(END_ANNOTATION_DIRECTIVE166); // AST REWRITE - // elements: CLASS_DESCRIPTOR, annotation_element, ANNOTATION_VISIBILITY + // elements: annotation_element, ANNOTATION_VISIBILITY, CLASS_DESCRIPTOR // token labels: // rule labels: retval // token list labels: @@ -6243,19 +6560,19 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 681:5: -> ^( I_ANNOTATION[$start, \"I_ANNOTATION\"] ANNOTATION_VISIBILITY ^( I_SUBANNOTATION[$start, \"I_SUBANNOTATION\"] CLASS_DESCRIPTOR ( annotation_element )* ) ) + // 701:5: -> ^( I_ANNOTATION[$start, \"I_ANNOTATION\"] ANNOTATION_VISIBILITY ^( I_SUBANNOTATION[$start, \"I_SUBANNOTATION\"] CLASS_DESCRIPTOR ( annotation_element )* ) ) { - // smaliParser.g:681:8: ^( I_ANNOTATION[$start, \"I_ANNOTATION\"] ANNOTATION_VISIBILITY ^( I_SUBANNOTATION[$start, \"I_SUBANNOTATION\"] CLASS_DESCRIPTOR ( annotation_element )* ) ) + // smaliParser.g:701:8: ^( I_ANNOTATION[$start, \"I_ANNOTATION\"] ANNOTATION_VISIBILITY ^( I_SUBANNOTATION[$start, \"I_SUBANNOTATION\"] CLASS_DESCRIPTOR ( annotation_element )* ) ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_ANNOTATION, (retval.start), "I_ANNOTATION"), root_1); adaptor.addChild(root_1, stream_ANNOTATION_VISIBILITY.nextNode()); - // smaliParser.g:681:69: ^( I_SUBANNOTATION[$start, \"I_SUBANNOTATION\"] CLASS_DESCRIPTOR ( annotation_element )* ) + // smaliParser.g:701:69: ^( I_SUBANNOTATION[$start, \"I_SUBANNOTATION\"] CLASS_DESCRIPTOR ( annotation_element )* ) { CommonTree root_2 = (CommonTree)adaptor.nil(); root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_SUBANNOTATION, (retval.start), "I_SUBANNOTATION"), root_2); adaptor.addChild(root_2, stream_CLASS_DESCRIPTOR.nextNode()); - // smaliParser.g:681:131: ( annotation_element )* + // smaliParser.g:701:131: ( annotation_element )* while ( stream_annotation_element.hasNext() ) { adaptor.addChild(root_2, stream_annotation_element.nextTree()); } @@ -6301,54 +6618,54 @@ public class smaliParser extends Parser { // $ANTLR start "subannotation" - // smaliParser.g:683:1: subannotation : SUBANNOTATION_DIRECTIVE CLASS_DESCRIPTOR ( annotation_element )* END_SUBANNOTATION_DIRECTIVE -> ^( I_SUBANNOTATION[$start, \"I_SUBANNOTATION\"] CLASS_DESCRIPTOR ( annotation_element )* ) ; + // smaliParser.g:703:1: subannotation : SUBANNOTATION_DIRECTIVE CLASS_DESCRIPTOR ( annotation_element )* END_SUBANNOTATION_DIRECTIVE -> ^( I_SUBANNOTATION[$start, \"I_SUBANNOTATION\"] CLASS_DESCRIPTOR ( annotation_element )* ) ; public final smaliParser.subannotation_return subannotation() throws RecognitionException { smaliParser.subannotation_return retval = new smaliParser.subannotation_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token SUBANNOTATION_DIRECTIVE159=null; - Token CLASS_DESCRIPTOR160=null; - Token END_SUBANNOTATION_DIRECTIVE162=null; - ParserRuleReturnScope annotation_element161 =null; + Token SUBANNOTATION_DIRECTIVE167=null; + Token CLASS_DESCRIPTOR168=null; + Token END_SUBANNOTATION_DIRECTIVE170=null; + ParserRuleReturnScope annotation_element169 =null; - CommonTree SUBANNOTATION_DIRECTIVE159_tree=null; - CommonTree CLASS_DESCRIPTOR160_tree=null; - CommonTree END_SUBANNOTATION_DIRECTIVE162_tree=null; + CommonTree SUBANNOTATION_DIRECTIVE167_tree=null; + CommonTree CLASS_DESCRIPTOR168_tree=null; + CommonTree END_SUBANNOTATION_DIRECTIVE170_tree=null; RewriteRuleTokenStream stream_SUBANNOTATION_DIRECTIVE=new RewriteRuleTokenStream(adaptor,"token SUBANNOTATION_DIRECTIVE"); RewriteRuleTokenStream stream_CLASS_DESCRIPTOR=new RewriteRuleTokenStream(adaptor,"token CLASS_DESCRIPTOR"); RewriteRuleTokenStream stream_END_SUBANNOTATION_DIRECTIVE=new RewriteRuleTokenStream(adaptor,"token END_SUBANNOTATION_DIRECTIVE"); RewriteRuleSubtreeStream stream_annotation_element=new RewriteRuleSubtreeStream(adaptor,"rule annotation_element"); try { - // smaliParser.g:684:3: ( SUBANNOTATION_DIRECTIVE CLASS_DESCRIPTOR ( annotation_element )* END_SUBANNOTATION_DIRECTIVE -> ^( I_SUBANNOTATION[$start, \"I_SUBANNOTATION\"] CLASS_DESCRIPTOR ( annotation_element )* ) ) - // smaliParser.g:684:5: SUBANNOTATION_DIRECTIVE CLASS_DESCRIPTOR ( annotation_element )* END_SUBANNOTATION_DIRECTIVE + // smaliParser.g:704:3: ( SUBANNOTATION_DIRECTIVE CLASS_DESCRIPTOR ( annotation_element )* END_SUBANNOTATION_DIRECTIVE -> ^( I_SUBANNOTATION[$start, \"I_SUBANNOTATION\"] CLASS_DESCRIPTOR ( annotation_element )* ) ) + // smaliParser.g:704:5: SUBANNOTATION_DIRECTIVE CLASS_DESCRIPTOR ( annotation_element )* END_SUBANNOTATION_DIRECTIVE { - SUBANNOTATION_DIRECTIVE159=(Token)match(input,SUBANNOTATION_DIRECTIVE,FOLLOW_SUBANNOTATION_DIRECTIVE_in_subannotation2818); - stream_SUBANNOTATION_DIRECTIVE.add(SUBANNOTATION_DIRECTIVE159); + SUBANNOTATION_DIRECTIVE167=(Token)match(input,SUBANNOTATION_DIRECTIVE,FOLLOW_SUBANNOTATION_DIRECTIVE_in_subannotation2951); + stream_SUBANNOTATION_DIRECTIVE.add(SUBANNOTATION_DIRECTIVE167); - CLASS_DESCRIPTOR160=(Token)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_subannotation2820); - stream_CLASS_DESCRIPTOR.add(CLASS_DESCRIPTOR160); + CLASS_DESCRIPTOR168=(Token)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_subannotation2953); + stream_CLASS_DESCRIPTOR.add(CLASS_DESCRIPTOR168); - // smaliParser.g:684:46: ( annotation_element )* + // smaliParser.g:704:46: ( annotation_element )* loop28: while (true) { int alt28=2; int LA28_0 = input.LA(1); - if ( (LA28_0==ACCESS_SPEC||LA28_0==ANNOTATION_VISIBILITY||LA28_0==BOOL_LITERAL||LA28_0==DOUBLE_LITERAL_OR_ID||LA28_0==FLOAT_LITERAL_OR_ID||(LA28_0 >= INSTRUCTION_FORMAT10t && LA28_0 <= INSTRUCTION_FORMAT10x_ODEX)||LA28_0==INSTRUCTION_FORMAT11x||LA28_0==INSTRUCTION_FORMAT12x_OR_ID||(LA28_0 >= INSTRUCTION_FORMAT21c_FIELD && LA28_0 <= INSTRUCTION_FORMAT21c_TYPE)||LA28_0==INSTRUCTION_FORMAT21t||(LA28_0 >= INSTRUCTION_FORMAT22c_FIELD && LA28_0 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA28_0 >= INSTRUCTION_FORMAT22s_OR_ID && LA28_0 <= INSTRUCTION_FORMAT22t)||LA28_0==INSTRUCTION_FORMAT23x||(LA28_0 >= INSTRUCTION_FORMAT31i_OR_ID && LA28_0 <= INSTRUCTION_FORMAT31t)||(LA28_0 >= INSTRUCTION_FORMAT35c_METHOD && LA28_0 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA28_0 >= INSTRUCTION_FORMAT45cc_METHOD && LA28_0 <= INSTRUCTION_FORMAT51l)||(LA28_0 >= NEGATIVE_INTEGER_LITERAL && LA28_0 <= NULL_LITERAL)||(LA28_0 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA28_0 <= PRIMITIVE_TYPE)||LA28_0==REGISTER||LA28_0==SIMPLE_NAME||(LA28_0 >= VERIFICATION_ERROR_TYPE && LA28_0 <= VOID_TYPE)) ) { + if ( (LA28_0==ACCESS_SPEC||LA28_0==ANNOTATION_VISIBILITY||LA28_0==BOOL_LITERAL||LA28_0==DOUBLE_LITERAL_OR_ID||LA28_0==FLOAT_LITERAL_OR_ID||(LA28_0 >= INSTRUCTION_FORMAT10t && LA28_0 <= INSTRUCTION_FORMAT10x_ODEX)||LA28_0==INSTRUCTION_FORMAT11x||LA28_0==INSTRUCTION_FORMAT12x_OR_ID||(LA28_0 >= INSTRUCTION_FORMAT21c_FIELD && LA28_0 <= INSTRUCTION_FORMAT21c_TYPE)||LA28_0==INSTRUCTION_FORMAT21t||(LA28_0 >= INSTRUCTION_FORMAT22c_FIELD && LA28_0 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA28_0 >= INSTRUCTION_FORMAT22s_OR_ID && LA28_0 <= INSTRUCTION_FORMAT22t)||LA28_0==INSTRUCTION_FORMAT23x||(LA28_0 >= INSTRUCTION_FORMAT31i_OR_ID && LA28_0 <= INSTRUCTION_FORMAT31t)||(LA28_0 >= INSTRUCTION_FORMAT35c_CALL_SITE && LA28_0 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA28_0 >= INSTRUCTION_FORMAT45cc_METHOD && LA28_0 <= INSTRUCTION_FORMAT51l)||(LA28_0 >= METHOD_HANDLE_TYPE_FIELD && LA28_0 <= NULL_LITERAL)||(LA28_0 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA28_0 <= PRIMITIVE_TYPE)||LA28_0==REGISTER||LA28_0==SIMPLE_NAME||(LA28_0 >= VERIFICATION_ERROR_TYPE && LA28_0 <= VOID_TYPE)) ) { alt28=1; } switch (alt28) { case 1 : - // smaliParser.g:684:46: annotation_element + // smaliParser.g:704:46: annotation_element { - pushFollow(FOLLOW_annotation_element_in_subannotation2822); - annotation_element161=annotation_element(); + pushFollow(FOLLOW_annotation_element_in_subannotation2955); + annotation_element169=annotation_element(); state._fsp--; - stream_annotation_element.add(annotation_element161.getTree()); + stream_annotation_element.add(annotation_element169.getTree()); } break; @@ -6357,11 +6674,11 @@ public class smaliParser extends Parser { } } - END_SUBANNOTATION_DIRECTIVE162=(Token)match(input,END_SUBANNOTATION_DIRECTIVE,FOLLOW_END_SUBANNOTATION_DIRECTIVE_in_subannotation2825); - stream_END_SUBANNOTATION_DIRECTIVE.add(END_SUBANNOTATION_DIRECTIVE162); + END_SUBANNOTATION_DIRECTIVE170=(Token)match(input,END_SUBANNOTATION_DIRECTIVE,FOLLOW_END_SUBANNOTATION_DIRECTIVE_in_subannotation2958); + stream_END_SUBANNOTATION_DIRECTIVE.add(END_SUBANNOTATION_DIRECTIVE170); // AST REWRITE - // elements: CLASS_DESCRIPTOR, annotation_element + // elements: annotation_element, CLASS_DESCRIPTOR // token labels: // rule labels: retval // token list labels: @@ -6371,14 +6688,14 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 685:5: -> ^( I_SUBANNOTATION[$start, \"I_SUBANNOTATION\"] CLASS_DESCRIPTOR ( annotation_element )* ) + // 705:5: -> ^( I_SUBANNOTATION[$start, \"I_SUBANNOTATION\"] CLASS_DESCRIPTOR ( annotation_element )* ) { - // smaliParser.g:685:8: ^( I_SUBANNOTATION[$start, \"I_SUBANNOTATION\"] CLASS_DESCRIPTOR ( annotation_element )* ) + // smaliParser.g:705:8: ^( I_SUBANNOTATION[$start, \"I_SUBANNOTATION\"] CLASS_DESCRIPTOR ( annotation_element )* ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_SUBANNOTATION, (retval.start), "I_SUBANNOTATION"), root_1); adaptor.addChild(root_1, stream_CLASS_DESCRIPTOR.nextNode()); - // smaliParser.g:685:70: ( annotation_element )* + // smaliParser.g:705:70: ( annotation_element )* while ( stream_annotation_element.hasNext() ) { adaptor.addChild(root_1, stream_annotation_element.nextTree()); } @@ -6421,32 +6738,32 @@ public class smaliParser extends Parser { // $ANTLR start "enum_literal" - // smaliParser.g:688:1: enum_literal : ENUM_DIRECTIVE field_reference -> ^( I_ENCODED_ENUM field_reference ) ; + // smaliParser.g:708:1: enum_literal : ENUM_DIRECTIVE field_reference -> ^( I_ENCODED_ENUM field_reference ) ; public final smaliParser.enum_literal_return enum_literal() throws RecognitionException { smaliParser.enum_literal_return retval = new smaliParser.enum_literal_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token ENUM_DIRECTIVE163=null; - ParserRuleReturnScope field_reference164 =null; + Token ENUM_DIRECTIVE171=null; + ParserRuleReturnScope field_reference172 =null; - CommonTree ENUM_DIRECTIVE163_tree=null; + CommonTree ENUM_DIRECTIVE171_tree=null; RewriteRuleTokenStream stream_ENUM_DIRECTIVE=new RewriteRuleTokenStream(adaptor,"token ENUM_DIRECTIVE"); RewriteRuleSubtreeStream stream_field_reference=new RewriteRuleSubtreeStream(adaptor,"rule field_reference"); try { - // smaliParser.g:689:3: ( ENUM_DIRECTIVE field_reference -> ^( I_ENCODED_ENUM field_reference ) ) - // smaliParser.g:689:5: ENUM_DIRECTIVE field_reference + // smaliParser.g:709:3: ( ENUM_DIRECTIVE field_reference -> ^( I_ENCODED_ENUM field_reference ) ) + // smaliParser.g:709:5: ENUM_DIRECTIVE field_reference { - ENUM_DIRECTIVE163=(Token)match(input,ENUM_DIRECTIVE,FOLLOW_ENUM_DIRECTIVE_in_enum_literal2852); - stream_ENUM_DIRECTIVE.add(ENUM_DIRECTIVE163); + ENUM_DIRECTIVE171=(Token)match(input,ENUM_DIRECTIVE,FOLLOW_ENUM_DIRECTIVE_in_enum_literal2985); + stream_ENUM_DIRECTIVE.add(ENUM_DIRECTIVE171); - pushFollow(FOLLOW_field_reference_in_enum_literal2854); - field_reference164=field_reference(); + pushFollow(FOLLOW_field_reference_in_enum_literal2987); + field_reference172=field_reference(); state._fsp--; - stream_field_reference.add(field_reference164.getTree()); + stream_field_reference.add(field_reference172.getTree()); // AST REWRITE // elements: field_reference // token labels: @@ -6458,9 +6775,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 690:3: -> ^( I_ENCODED_ENUM field_reference ) + // 710:3: -> ^( I_ENCODED_ENUM field_reference ) { - // smaliParser.g:690:6: ^( I_ENCODED_ENUM field_reference ) + // smaliParser.g:710:6: ^( I_ENCODED_ENUM field_reference ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_ENCODED_ENUM, "I_ENCODED_ENUM"), root_1); @@ -6502,28 +6819,28 @@ public class smaliParser extends Parser { // $ANTLR start "type_field_method_literal" - // smaliParser.g:692:1: type_field_method_literal : ( reference_type_descriptor | ( ( reference_type_descriptor ARROW )? ( member_name COLON nonvoid_type_descriptor -> ^( I_ENCODED_FIELD ( reference_type_descriptor )? member_name nonvoid_type_descriptor ) | member_name method_prototype -> ^( I_ENCODED_METHOD ( reference_type_descriptor )? member_name method_prototype ) ) ) | PRIMITIVE_TYPE | VOID_TYPE ); + // smaliParser.g:712:1: type_field_method_literal : ( reference_type_descriptor | ( ( reference_type_descriptor ARROW )? ( member_name COLON nonvoid_type_descriptor -> ^( I_ENCODED_FIELD ( reference_type_descriptor )? member_name nonvoid_type_descriptor ) | member_name method_prototype -> ^( I_ENCODED_METHOD ( reference_type_descriptor )? member_name method_prototype ) ) ) | PRIMITIVE_TYPE | VOID_TYPE ); public final smaliParser.type_field_method_literal_return type_field_method_literal() throws RecognitionException { smaliParser.type_field_method_literal_return retval = new smaliParser.type_field_method_literal_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token ARROW167=null; - Token COLON169=null; - Token PRIMITIVE_TYPE173=null; - Token VOID_TYPE174=null; - ParserRuleReturnScope reference_type_descriptor165 =null; - ParserRuleReturnScope reference_type_descriptor166 =null; - ParserRuleReturnScope member_name168 =null; - ParserRuleReturnScope nonvoid_type_descriptor170 =null; - ParserRuleReturnScope member_name171 =null; - ParserRuleReturnScope method_prototype172 =null; - - CommonTree ARROW167_tree=null; - CommonTree COLON169_tree=null; - CommonTree PRIMITIVE_TYPE173_tree=null; - CommonTree VOID_TYPE174_tree=null; + Token ARROW175=null; + Token COLON177=null; + Token PRIMITIVE_TYPE181=null; + Token VOID_TYPE182=null; + ParserRuleReturnScope reference_type_descriptor173 =null; + ParserRuleReturnScope reference_type_descriptor174 =null; + ParserRuleReturnScope member_name176 =null; + ParserRuleReturnScope nonvoid_type_descriptor178 =null; + ParserRuleReturnScope member_name179 =null; + ParserRuleReturnScope method_prototype180 =null; + + CommonTree ARROW175_tree=null; + CommonTree COLON177_tree=null; + CommonTree PRIMITIVE_TYPE181_tree=null; + CommonTree VOID_TYPE182_tree=null; RewriteRuleTokenStream stream_ARROW=new RewriteRuleTokenStream(adaptor,"token ARROW"); RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON"); RewriteRuleSubtreeStream stream_method_prototype=new RewriteRuleSubtreeStream(adaptor,"rule method_prototype"); @@ -6532,13 +6849,13 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_reference_type_descriptor=new RewriteRuleSubtreeStream(adaptor,"rule reference_type_descriptor"); try { - // smaliParser.g:693:3: ( reference_type_descriptor | ( ( reference_type_descriptor ARROW )? ( member_name COLON nonvoid_type_descriptor -> ^( I_ENCODED_FIELD ( reference_type_descriptor )? member_name nonvoid_type_descriptor ) | member_name method_prototype -> ^( I_ENCODED_METHOD ( reference_type_descriptor )? member_name method_prototype ) ) ) | PRIMITIVE_TYPE | VOID_TYPE ) + // smaliParser.g:713:3: ( reference_type_descriptor | ( ( reference_type_descriptor ARROW )? ( member_name COLON nonvoid_type_descriptor -> ^( I_ENCODED_FIELD ( reference_type_descriptor )? member_name nonvoid_type_descriptor ) | member_name method_prototype -> ^( I_ENCODED_METHOD ( reference_type_descriptor )? member_name method_prototype ) ) ) | PRIMITIVE_TYPE | VOID_TYPE ) int alt31=4; switch ( input.LA(1) ) { case CLASS_DESCRIPTOR: { int LA31_1 = input.LA(2); - if ( (LA31_1==EOF||(LA31_1 >= ACCESS_SPEC && LA31_1 <= ANNOTATION_VISIBILITY)||LA31_1==BOOL_LITERAL||(LA31_1 >= CLASS_DIRECTIVE && LA31_1 <= CLOSE_BRACE)||LA31_1==COMMA||(LA31_1 >= DOUBLE_LITERAL_OR_ID && LA31_1 <= END_ANNOTATION_DIRECTIVE)||LA31_1==END_FIELD_DIRECTIVE||LA31_1==END_SUBANNOTATION_DIRECTIVE||LA31_1==FIELD_DIRECTIVE||(LA31_1 >= FLOAT_LITERAL_OR_ID && LA31_1 <= IMPLEMENTS_DIRECTIVE)||(LA31_1 >= INSTRUCTION_FORMAT10t && LA31_1 <= INSTRUCTION_FORMAT10x_ODEX)||LA31_1==INSTRUCTION_FORMAT11x||LA31_1==INSTRUCTION_FORMAT12x_OR_ID||(LA31_1 >= INSTRUCTION_FORMAT21c_FIELD && LA31_1 <= INSTRUCTION_FORMAT21c_TYPE)||LA31_1==INSTRUCTION_FORMAT21t||(LA31_1 >= INSTRUCTION_FORMAT22c_FIELD && LA31_1 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA31_1 >= INSTRUCTION_FORMAT22s_OR_ID && LA31_1 <= INSTRUCTION_FORMAT22t)||LA31_1==INSTRUCTION_FORMAT23x||(LA31_1 >= INSTRUCTION_FORMAT31i_OR_ID && LA31_1 <= INSTRUCTION_FORMAT31t)||(LA31_1 >= INSTRUCTION_FORMAT35c_METHOD && LA31_1 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA31_1 >= INSTRUCTION_FORMAT45cc_METHOD && LA31_1 <= INSTRUCTION_FORMAT51l)||(LA31_1 >= METHOD_DIRECTIVE && LA31_1 <= NULL_LITERAL)||(LA31_1 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA31_1 <= PRIMITIVE_TYPE)||LA31_1==REGISTER||(LA31_1 >= SIMPLE_NAME && LA31_1 <= SOURCE_DIRECTIVE)||(LA31_1 >= SUPER_DIRECTIVE && LA31_1 <= VOID_TYPE)) ) { + if ( (LA31_1==EOF||(LA31_1 >= ACCESS_SPEC && LA31_1 <= ANNOTATION_VISIBILITY)||LA31_1==BOOL_LITERAL||(LA31_1 >= CLASS_DIRECTIVE && LA31_1 <= CLOSE_PAREN)||LA31_1==COMMA||(LA31_1 >= DOUBLE_LITERAL_OR_ID && LA31_1 <= END_ANNOTATION_DIRECTIVE)||LA31_1==END_FIELD_DIRECTIVE||LA31_1==END_SUBANNOTATION_DIRECTIVE||LA31_1==FIELD_DIRECTIVE||(LA31_1 >= FLOAT_LITERAL_OR_ID && LA31_1 <= IMPLEMENTS_DIRECTIVE)||(LA31_1 >= INSTRUCTION_FORMAT10t && LA31_1 <= INSTRUCTION_FORMAT10x_ODEX)||LA31_1==INSTRUCTION_FORMAT11x||LA31_1==INSTRUCTION_FORMAT12x_OR_ID||(LA31_1 >= INSTRUCTION_FORMAT21c_FIELD && LA31_1 <= INSTRUCTION_FORMAT21c_TYPE)||LA31_1==INSTRUCTION_FORMAT21t||(LA31_1 >= INSTRUCTION_FORMAT22c_FIELD && LA31_1 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA31_1 >= INSTRUCTION_FORMAT22s_OR_ID && LA31_1 <= INSTRUCTION_FORMAT22t)||LA31_1==INSTRUCTION_FORMAT23x||(LA31_1 >= INSTRUCTION_FORMAT31i_OR_ID && LA31_1 <= INSTRUCTION_FORMAT31t)||(LA31_1 >= INSTRUCTION_FORMAT35c_CALL_SITE && LA31_1 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA31_1 >= INSTRUCTION_FORMAT45cc_METHOD && LA31_1 <= INSTRUCTION_FORMAT51l)||(LA31_1 >= METHOD_DIRECTIVE && LA31_1 <= NULL_LITERAL)||(LA31_1 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA31_1 <= PRIMITIVE_TYPE)||LA31_1==REGISTER||(LA31_1 >= SIMPLE_NAME && LA31_1 <= SOURCE_DIRECTIVE)||(LA31_1 >= SUPER_DIRECTIVE && LA31_1 <= VOID_TYPE)) ) { alt31=1; } else if ( (LA31_1==ARROW) ) { @@ -6564,7 +6881,7 @@ public class smaliParser extends Parser { int LA31_2 = input.LA(2); if ( (LA31_2==CLASS_DESCRIPTOR||LA31_2==PRIMITIVE_TYPE) ) { int LA31_7 = input.LA(3); - if ( (LA31_7==EOF||(LA31_7 >= ACCESS_SPEC && LA31_7 <= ANNOTATION_VISIBILITY)||LA31_7==BOOL_LITERAL||(LA31_7 >= CLASS_DIRECTIVE && LA31_7 <= CLOSE_BRACE)||LA31_7==COMMA||(LA31_7 >= DOUBLE_LITERAL_OR_ID && LA31_7 <= END_ANNOTATION_DIRECTIVE)||LA31_7==END_FIELD_DIRECTIVE||LA31_7==END_SUBANNOTATION_DIRECTIVE||LA31_7==FIELD_DIRECTIVE||(LA31_7 >= FLOAT_LITERAL_OR_ID && LA31_7 <= IMPLEMENTS_DIRECTIVE)||(LA31_7 >= INSTRUCTION_FORMAT10t && LA31_7 <= INSTRUCTION_FORMAT10x_ODEX)||LA31_7==INSTRUCTION_FORMAT11x||LA31_7==INSTRUCTION_FORMAT12x_OR_ID||(LA31_7 >= INSTRUCTION_FORMAT21c_FIELD && LA31_7 <= INSTRUCTION_FORMAT21c_TYPE)||LA31_7==INSTRUCTION_FORMAT21t||(LA31_7 >= INSTRUCTION_FORMAT22c_FIELD && LA31_7 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA31_7 >= INSTRUCTION_FORMAT22s_OR_ID && LA31_7 <= INSTRUCTION_FORMAT22t)||LA31_7==INSTRUCTION_FORMAT23x||(LA31_7 >= INSTRUCTION_FORMAT31i_OR_ID && LA31_7 <= INSTRUCTION_FORMAT31t)||(LA31_7 >= INSTRUCTION_FORMAT35c_METHOD && LA31_7 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA31_7 >= INSTRUCTION_FORMAT45cc_METHOD && LA31_7 <= INSTRUCTION_FORMAT51l)||(LA31_7 >= METHOD_DIRECTIVE && LA31_7 <= NULL_LITERAL)||(LA31_7 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA31_7 <= PRIMITIVE_TYPE)||LA31_7==REGISTER||(LA31_7 >= SIMPLE_NAME && LA31_7 <= SOURCE_DIRECTIVE)||(LA31_7 >= SUPER_DIRECTIVE && LA31_7 <= VOID_TYPE)) ) { + if ( (LA31_7==EOF||(LA31_7 >= ACCESS_SPEC && LA31_7 <= ANNOTATION_VISIBILITY)||LA31_7==BOOL_LITERAL||(LA31_7 >= CLASS_DIRECTIVE && LA31_7 <= CLOSE_PAREN)||LA31_7==COMMA||(LA31_7 >= DOUBLE_LITERAL_OR_ID && LA31_7 <= END_ANNOTATION_DIRECTIVE)||LA31_7==END_FIELD_DIRECTIVE||LA31_7==END_SUBANNOTATION_DIRECTIVE||LA31_7==FIELD_DIRECTIVE||(LA31_7 >= FLOAT_LITERAL_OR_ID && LA31_7 <= IMPLEMENTS_DIRECTIVE)||(LA31_7 >= INSTRUCTION_FORMAT10t && LA31_7 <= INSTRUCTION_FORMAT10x_ODEX)||LA31_7==INSTRUCTION_FORMAT11x||LA31_7==INSTRUCTION_FORMAT12x_OR_ID||(LA31_7 >= INSTRUCTION_FORMAT21c_FIELD && LA31_7 <= INSTRUCTION_FORMAT21c_TYPE)||LA31_7==INSTRUCTION_FORMAT21t||(LA31_7 >= INSTRUCTION_FORMAT22c_FIELD && LA31_7 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA31_7 >= INSTRUCTION_FORMAT22s_OR_ID && LA31_7 <= INSTRUCTION_FORMAT22t)||LA31_7==INSTRUCTION_FORMAT23x||(LA31_7 >= INSTRUCTION_FORMAT31i_OR_ID && LA31_7 <= INSTRUCTION_FORMAT31t)||(LA31_7 >= INSTRUCTION_FORMAT35c_CALL_SITE && LA31_7 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA31_7 >= INSTRUCTION_FORMAT45cc_METHOD && LA31_7 <= INSTRUCTION_FORMAT51l)||(LA31_7 >= METHOD_DIRECTIVE && LA31_7 <= NULL_LITERAL)||(LA31_7 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA31_7 <= PRIMITIVE_TYPE)||LA31_7==REGISTER||(LA31_7 >= SIMPLE_NAME && LA31_7 <= SOURCE_DIRECTIVE)||(LA31_7 >= SUPER_DIRECTIVE && LA31_7 <= VOID_TYPE)) ) { alt31=1; } else if ( (LA31_7==ARROW) ) { @@ -6613,6 +6930,8 @@ public class smaliParser extends Parser { case INSTRUCTION_FORMAT12x_OR_ID: case INSTRUCTION_FORMAT21c_FIELD: case INSTRUCTION_FORMAT21c_FIELD_ODEX: + case INSTRUCTION_FORMAT21c_METHOD_HANDLE: + case INSTRUCTION_FORMAT21c_METHOD_TYPE: case INSTRUCTION_FORMAT21c_STRING: case INSTRUCTION_FORMAT21c_TYPE: case INSTRUCTION_FORMAT21t: @@ -6625,8 +6944,10 @@ public class smaliParser extends Parser { case INSTRUCTION_FORMAT23x: case INSTRUCTION_FORMAT31i_OR_ID: case INSTRUCTION_FORMAT31t: + case INSTRUCTION_FORMAT35c_CALL_SITE: case INSTRUCTION_FORMAT35c_METHOD: case INSTRUCTION_FORMAT35c_METHOD_ODEX: + case INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE: case INSTRUCTION_FORMAT35c_TYPE: case INSTRUCTION_FORMAT35mi_METHOD: case INSTRUCTION_FORMAT35ms_METHOD: @@ -6634,6 +6955,8 @@ public class smaliParser extends Parser { case INSTRUCTION_FORMAT4rcc_METHOD: case INSTRUCTION_FORMAT51l: case MEMBER_NAME: + case METHOD_HANDLE_TYPE_FIELD: + case METHOD_HANDLE_TYPE_METHOD: case NEGATIVE_INTEGER_LITERAL: case NULL_LITERAL: case PARAM_LIST_OR_ID_PRIMITIVE_TYPE: @@ -6651,7 +6974,7 @@ public class smaliParser extends Parser { if ( (LA31_4==COLON||LA31_4==OPEN_PAREN) ) { alt31=2; } - else if ( (LA31_4==EOF||(LA31_4 >= ACCESS_SPEC && LA31_4 <= ANNOTATION_VISIBILITY)||LA31_4==BOOL_LITERAL||(LA31_4 >= CLASS_DIRECTIVE && LA31_4 <= CLOSE_BRACE)||LA31_4==COMMA||(LA31_4 >= DOUBLE_LITERAL_OR_ID && LA31_4 <= END_ANNOTATION_DIRECTIVE)||LA31_4==END_FIELD_DIRECTIVE||LA31_4==END_SUBANNOTATION_DIRECTIVE||LA31_4==FIELD_DIRECTIVE||(LA31_4 >= FLOAT_LITERAL_OR_ID && LA31_4 <= IMPLEMENTS_DIRECTIVE)||(LA31_4 >= INSTRUCTION_FORMAT10t && LA31_4 <= INSTRUCTION_FORMAT10x_ODEX)||LA31_4==INSTRUCTION_FORMAT11x||LA31_4==INSTRUCTION_FORMAT12x_OR_ID||(LA31_4 >= INSTRUCTION_FORMAT21c_FIELD && LA31_4 <= INSTRUCTION_FORMAT21c_TYPE)||LA31_4==INSTRUCTION_FORMAT21t||(LA31_4 >= INSTRUCTION_FORMAT22c_FIELD && LA31_4 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA31_4 >= INSTRUCTION_FORMAT22s_OR_ID && LA31_4 <= INSTRUCTION_FORMAT22t)||LA31_4==INSTRUCTION_FORMAT23x||(LA31_4 >= INSTRUCTION_FORMAT31i_OR_ID && LA31_4 <= INSTRUCTION_FORMAT31t)||(LA31_4 >= INSTRUCTION_FORMAT35c_METHOD && LA31_4 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA31_4 >= INSTRUCTION_FORMAT45cc_METHOD && LA31_4 <= INSTRUCTION_FORMAT51l)||(LA31_4 >= METHOD_DIRECTIVE && LA31_4 <= NULL_LITERAL)||(LA31_4 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA31_4 <= PRIMITIVE_TYPE)||LA31_4==REGISTER||(LA31_4 >= SIMPLE_NAME && LA31_4 <= SOURCE_DIRECTIVE)||(LA31_4 >= SUPER_DIRECTIVE && LA31_4 <= VOID_TYPE)) ) { + else if ( (LA31_4==EOF||(LA31_4 >= ACCESS_SPEC && LA31_4 <= ANNOTATION_VISIBILITY)||LA31_4==BOOL_LITERAL||(LA31_4 >= CLASS_DIRECTIVE && LA31_4 <= CLOSE_PAREN)||LA31_4==COMMA||(LA31_4 >= DOUBLE_LITERAL_OR_ID && LA31_4 <= END_ANNOTATION_DIRECTIVE)||LA31_4==END_FIELD_DIRECTIVE||LA31_4==END_SUBANNOTATION_DIRECTIVE||LA31_4==FIELD_DIRECTIVE||(LA31_4 >= FLOAT_LITERAL_OR_ID && LA31_4 <= IMPLEMENTS_DIRECTIVE)||(LA31_4 >= INSTRUCTION_FORMAT10t && LA31_4 <= INSTRUCTION_FORMAT10x_ODEX)||LA31_4==INSTRUCTION_FORMAT11x||LA31_4==INSTRUCTION_FORMAT12x_OR_ID||(LA31_4 >= INSTRUCTION_FORMAT21c_FIELD && LA31_4 <= INSTRUCTION_FORMAT21c_TYPE)||LA31_4==INSTRUCTION_FORMAT21t||(LA31_4 >= INSTRUCTION_FORMAT22c_FIELD && LA31_4 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA31_4 >= INSTRUCTION_FORMAT22s_OR_ID && LA31_4 <= INSTRUCTION_FORMAT22t)||LA31_4==INSTRUCTION_FORMAT23x||(LA31_4 >= INSTRUCTION_FORMAT31i_OR_ID && LA31_4 <= INSTRUCTION_FORMAT31t)||(LA31_4 >= INSTRUCTION_FORMAT35c_CALL_SITE && LA31_4 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA31_4 >= INSTRUCTION_FORMAT45cc_METHOD && LA31_4 <= INSTRUCTION_FORMAT51l)||(LA31_4 >= METHOD_DIRECTIVE && LA31_4 <= NULL_LITERAL)||(LA31_4 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA31_4 <= PRIMITIVE_TYPE)||LA31_4==REGISTER||(LA31_4 >= SIMPLE_NAME && LA31_4 <= SOURCE_DIRECTIVE)||(LA31_4 >= SUPER_DIRECTIVE && LA31_4 <= VOID_TYPE)) ) { alt31=3; } @@ -6675,7 +6998,7 @@ public class smaliParser extends Parser { if ( (LA31_5==COLON||LA31_5==OPEN_PAREN) ) { alt31=2; } - else if ( (LA31_5==EOF||(LA31_5 >= ACCESS_SPEC && LA31_5 <= ANNOTATION_VISIBILITY)||LA31_5==BOOL_LITERAL||(LA31_5 >= CLASS_DIRECTIVE && LA31_5 <= CLOSE_BRACE)||LA31_5==COMMA||(LA31_5 >= DOUBLE_LITERAL_OR_ID && LA31_5 <= END_ANNOTATION_DIRECTIVE)||LA31_5==END_FIELD_DIRECTIVE||LA31_5==END_SUBANNOTATION_DIRECTIVE||LA31_5==FIELD_DIRECTIVE||(LA31_5 >= FLOAT_LITERAL_OR_ID && LA31_5 <= IMPLEMENTS_DIRECTIVE)||(LA31_5 >= INSTRUCTION_FORMAT10t && LA31_5 <= INSTRUCTION_FORMAT10x_ODEX)||LA31_5==INSTRUCTION_FORMAT11x||LA31_5==INSTRUCTION_FORMAT12x_OR_ID||(LA31_5 >= INSTRUCTION_FORMAT21c_FIELD && LA31_5 <= INSTRUCTION_FORMAT21c_TYPE)||LA31_5==INSTRUCTION_FORMAT21t||(LA31_5 >= INSTRUCTION_FORMAT22c_FIELD && LA31_5 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA31_5 >= INSTRUCTION_FORMAT22s_OR_ID && LA31_5 <= INSTRUCTION_FORMAT22t)||LA31_5==INSTRUCTION_FORMAT23x||(LA31_5 >= INSTRUCTION_FORMAT31i_OR_ID && LA31_5 <= INSTRUCTION_FORMAT31t)||(LA31_5 >= INSTRUCTION_FORMAT35c_METHOD && LA31_5 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA31_5 >= INSTRUCTION_FORMAT45cc_METHOD && LA31_5 <= INSTRUCTION_FORMAT51l)||(LA31_5 >= METHOD_DIRECTIVE && LA31_5 <= NULL_LITERAL)||(LA31_5 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA31_5 <= PRIMITIVE_TYPE)||LA31_5==REGISTER||(LA31_5 >= SIMPLE_NAME && LA31_5 <= SOURCE_DIRECTIVE)||(LA31_5 >= SUPER_DIRECTIVE && LA31_5 <= VOID_TYPE)) ) { + else if ( (LA31_5==EOF||(LA31_5 >= ACCESS_SPEC && LA31_5 <= ANNOTATION_VISIBILITY)||LA31_5==BOOL_LITERAL||(LA31_5 >= CLASS_DIRECTIVE && LA31_5 <= CLOSE_PAREN)||LA31_5==COMMA||(LA31_5 >= DOUBLE_LITERAL_OR_ID && LA31_5 <= END_ANNOTATION_DIRECTIVE)||LA31_5==END_FIELD_DIRECTIVE||LA31_5==END_SUBANNOTATION_DIRECTIVE||LA31_5==FIELD_DIRECTIVE||(LA31_5 >= FLOAT_LITERAL_OR_ID && LA31_5 <= IMPLEMENTS_DIRECTIVE)||(LA31_5 >= INSTRUCTION_FORMAT10t && LA31_5 <= INSTRUCTION_FORMAT10x_ODEX)||LA31_5==INSTRUCTION_FORMAT11x||LA31_5==INSTRUCTION_FORMAT12x_OR_ID||(LA31_5 >= INSTRUCTION_FORMAT21c_FIELD && LA31_5 <= INSTRUCTION_FORMAT21c_TYPE)||LA31_5==INSTRUCTION_FORMAT21t||(LA31_5 >= INSTRUCTION_FORMAT22c_FIELD && LA31_5 <= INSTRUCTION_FORMAT22cs_FIELD)||(LA31_5 >= INSTRUCTION_FORMAT22s_OR_ID && LA31_5 <= INSTRUCTION_FORMAT22t)||LA31_5==INSTRUCTION_FORMAT23x||(LA31_5 >= INSTRUCTION_FORMAT31i_OR_ID && LA31_5 <= INSTRUCTION_FORMAT31t)||(LA31_5 >= INSTRUCTION_FORMAT35c_CALL_SITE && LA31_5 <= INSTRUCTION_FORMAT35ms_METHOD)||(LA31_5 >= INSTRUCTION_FORMAT45cc_METHOD && LA31_5 <= INSTRUCTION_FORMAT51l)||(LA31_5 >= METHOD_DIRECTIVE && LA31_5 <= NULL_LITERAL)||(LA31_5 >= PARAM_LIST_OR_ID_PRIMITIVE_TYPE && LA31_5 <= PRIMITIVE_TYPE)||LA31_5==REGISTER||(LA31_5 >= SIMPLE_NAME && LA31_5 <= SOURCE_DIRECTIVE)||(LA31_5 >= SUPER_DIRECTIVE && LA31_5 <= VOID_TYPE)) ) { alt31=4; } @@ -6700,26 +7023,26 @@ public class smaliParser extends Parser { } switch (alt31) { case 1 : - // smaliParser.g:693:5: reference_type_descriptor + // smaliParser.g:713:5: reference_type_descriptor { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_reference_type_descriptor_in_type_field_method_literal2874); - reference_type_descriptor165=reference_type_descriptor(); + pushFollow(FOLLOW_reference_type_descriptor_in_type_field_method_literal3007); + reference_type_descriptor173=reference_type_descriptor(); state._fsp--; - adaptor.addChild(root_0, reference_type_descriptor165.getTree()); + adaptor.addChild(root_0, reference_type_descriptor173.getTree()); } break; case 2 : - // smaliParser.g:694:5: ( ( reference_type_descriptor ARROW )? ( member_name COLON nonvoid_type_descriptor -> ^( I_ENCODED_FIELD ( reference_type_descriptor )? member_name nonvoid_type_descriptor ) | member_name method_prototype -> ^( I_ENCODED_METHOD ( reference_type_descriptor )? member_name method_prototype ) ) ) + // smaliParser.g:714:5: ( ( reference_type_descriptor ARROW )? ( member_name COLON nonvoid_type_descriptor -> ^( I_ENCODED_FIELD ( reference_type_descriptor )? member_name nonvoid_type_descriptor ) | member_name method_prototype -> ^( I_ENCODED_METHOD ( reference_type_descriptor )? member_name method_prototype ) ) ) { - // smaliParser.g:694:5: ( ( reference_type_descriptor ARROW )? ( member_name COLON nonvoid_type_descriptor -> ^( I_ENCODED_FIELD ( reference_type_descriptor )? member_name nonvoid_type_descriptor ) | member_name method_prototype -> ^( I_ENCODED_METHOD ( reference_type_descriptor )? member_name method_prototype ) ) ) - // smaliParser.g:694:7: ( reference_type_descriptor ARROW )? ( member_name COLON nonvoid_type_descriptor -> ^( I_ENCODED_FIELD ( reference_type_descriptor )? member_name nonvoid_type_descriptor ) | member_name method_prototype -> ^( I_ENCODED_METHOD ( reference_type_descriptor )? member_name method_prototype ) ) + // smaliParser.g:714:5: ( ( reference_type_descriptor ARROW )? ( member_name COLON nonvoid_type_descriptor -> ^( I_ENCODED_FIELD ( reference_type_descriptor )? member_name nonvoid_type_descriptor ) | member_name method_prototype -> ^( I_ENCODED_METHOD ( reference_type_descriptor )? member_name method_prototype ) ) ) + // smaliParser.g:714:7: ( reference_type_descriptor ARROW )? ( member_name COLON nonvoid_type_descriptor -> ^( I_ENCODED_FIELD ( reference_type_descriptor )? member_name nonvoid_type_descriptor ) | member_name method_prototype -> ^( I_ENCODED_METHOD ( reference_type_descriptor )? member_name method_prototype ) ) { - // smaliParser.g:694:7: ( reference_type_descriptor ARROW )? + // smaliParser.g:714:7: ( reference_type_descriptor ARROW )? int alt29=2; int LA29_0 = input.LA(1); if ( (LA29_0==ARRAY_TYPE_PREFIX||LA29_0==CLASS_DESCRIPTOR) ) { @@ -6727,43 +7050,43 @@ public class smaliParser extends Parser { } switch (alt29) { case 1 : - // smaliParser.g:694:8: reference_type_descriptor ARROW + // smaliParser.g:714:8: reference_type_descriptor ARROW { - pushFollow(FOLLOW_reference_type_descriptor_in_type_field_method_literal2883); - reference_type_descriptor166=reference_type_descriptor(); + pushFollow(FOLLOW_reference_type_descriptor_in_type_field_method_literal3016); + reference_type_descriptor174=reference_type_descriptor(); state._fsp--; - stream_reference_type_descriptor.add(reference_type_descriptor166.getTree()); - ARROW167=(Token)match(input,ARROW,FOLLOW_ARROW_in_type_field_method_literal2885); - stream_ARROW.add(ARROW167); + stream_reference_type_descriptor.add(reference_type_descriptor174.getTree()); + ARROW175=(Token)match(input,ARROW,FOLLOW_ARROW_in_type_field_method_literal3018); + stream_ARROW.add(ARROW175); } break; } - // smaliParser.g:695:7: ( member_name COLON nonvoid_type_descriptor -> ^( I_ENCODED_FIELD ( reference_type_descriptor )? member_name nonvoid_type_descriptor ) | member_name method_prototype -> ^( I_ENCODED_METHOD ( reference_type_descriptor )? member_name method_prototype ) ) + // smaliParser.g:715:7: ( member_name COLON nonvoid_type_descriptor -> ^( I_ENCODED_FIELD ( reference_type_descriptor )? member_name nonvoid_type_descriptor ) | member_name method_prototype -> ^( I_ENCODED_METHOD ( reference_type_descriptor )? member_name method_prototype ) ) int alt30=2; alt30 = dfa30.predict(input); switch (alt30) { case 1 : - // smaliParser.g:695:9: member_name COLON nonvoid_type_descriptor + // smaliParser.g:715:9: member_name COLON nonvoid_type_descriptor { - pushFollow(FOLLOW_member_name_in_type_field_method_literal2897); - member_name168=member_name(); + pushFollow(FOLLOW_member_name_in_type_field_method_literal3030); + member_name176=member_name(); state._fsp--; - stream_member_name.add(member_name168.getTree()); - COLON169=(Token)match(input,COLON,FOLLOW_COLON_in_type_field_method_literal2899); - stream_COLON.add(COLON169); + stream_member_name.add(member_name176.getTree()); + COLON177=(Token)match(input,COLON,FOLLOW_COLON_in_type_field_method_literal3032); + stream_COLON.add(COLON177); - pushFollow(FOLLOW_nonvoid_type_descriptor_in_type_field_method_literal2901); - nonvoid_type_descriptor170=nonvoid_type_descriptor(); + pushFollow(FOLLOW_nonvoid_type_descriptor_in_type_field_method_literal3034); + nonvoid_type_descriptor178=nonvoid_type_descriptor(); state._fsp--; - stream_nonvoid_type_descriptor.add(nonvoid_type_descriptor170.getTree()); + stream_nonvoid_type_descriptor.add(nonvoid_type_descriptor178.getTree()); // AST REWRITE - // elements: reference_type_descriptor, member_name, nonvoid_type_descriptor + // elements: member_name, reference_type_descriptor, nonvoid_type_descriptor // token labels: // rule labels: retval // token list labels: @@ -6773,13 +7096,13 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 695:51: -> ^( I_ENCODED_FIELD ( reference_type_descriptor )? member_name nonvoid_type_descriptor ) + // 715:51: -> ^( I_ENCODED_FIELD ( reference_type_descriptor )? member_name nonvoid_type_descriptor ) { - // smaliParser.g:695:54: ^( I_ENCODED_FIELD ( reference_type_descriptor )? member_name nonvoid_type_descriptor ) + // smaliParser.g:715:54: ^( I_ENCODED_FIELD ( reference_type_descriptor )? member_name nonvoid_type_descriptor ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_ENCODED_FIELD, "I_ENCODED_FIELD"), root_1); - // smaliParser.g:695:72: ( reference_type_descriptor )? + // smaliParser.g:715:72: ( reference_type_descriptor )? if ( stream_reference_type_descriptor.hasNext() ) { adaptor.addChild(root_1, stream_reference_type_descriptor.nextTree()); } @@ -6798,20 +7121,20 @@ public class smaliParser extends Parser { } break; case 2 : - // smaliParser.g:696:9: member_name method_prototype + // smaliParser.g:716:9: member_name method_prototype { - pushFollow(FOLLOW_member_name_in_type_field_method_literal2924); - member_name171=member_name(); + pushFollow(FOLLOW_member_name_in_type_field_method_literal3057); + member_name179=member_name(); state._fsp--; - stream_member_name.add(member_name171.getTree()); - pushFollow(FOLLOW_method_prototype_in_type_field_method_literal2926); - method_prototype172=method_prototype(); + stream_member_name.add(member_name179.getTree()); + pushFollow(FOLLOW_method_prototype_in_type_field_method_literal3059); + method_prototype180=method_prototype(); state._fsp--; - stream_method_prototype.add(method_prototype172.getTree()); + stream_method_prototype.add(method_prototype180.getTree()); // AST REWRITE - // elements: member_name, method_prototype, reference_type_descriptor + // elements: method_prototype, reference_type_descriptor, member_name // token labels: // rule labels: retval // token list labels: @@ -6821,13 +7144,13 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 696:38: -> ^( I_ENCODED_METHOD ( reference_type_descriptor )? member_name method_prototype ) + // 716:38: -> ^( I_ENCODED_METHOD ( reference_type_descriptor )? member_name method_prototype ) { - // smaliParser.g:696:41: ^( I_ENCODED_METHOD ( reference_type_descriptor )? member_name method_prototype ) + // smaliParser.g:716:41: ^( I_ENCODED_METHOD ( reference_type_descriptor )? member_name method_prototype ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_ENCODED_METHOD, "I_ENCODED_METHOD"), root_1); - // smaliParser.g:696:60: ( reference_type_descriptor )? + // smaliParser.g:716:60: ( reference_type_descriptor )? if ( stream_reference_type_descriptor.hasNext() ) { adaptor.addChild(root_1, stream_reference_type_descriptor.nextTree()); } @@ -6853,26 +7176,26 @@ public class smaliParser extends Parser { } break; case 3 : - // smaliParser.g:699:5: PRIMITIVE_TYPE + // smaliParser.g:719:5: PRIMITIVE_TYPE { root_0 = (CommonTree)adaptor.nil(); - PRIMITIVE_TYPE173=(Token)match(input,PRIMITIVE_TYPE,FOLLOW_PRIMITIVE_TYPE_in_type_field_method_literal2959); - PRIMITIVE_TYPE173_tree = (CommonTree)adaptor.create(PRIMITIVE_TYPE173); - adaptor.addChild(root_0, PRIMITIVE_TYPE173_tree); + PRIMITIVE_TYPE181=(Token)match(input,PRIMITIVE_TYPE,FOLLOW_PRIMITIVE_TYPE_in_type_field_method_literal3092); + PRIMITIVE_TYPE181_tree = (CommonTree)adaptor.create(PRIMITIVE_TYPE181); + adaptor.addChild(root_0, PRIMITIVE_TYPE181_tree); } break; case 4 : - // smaliParser.g:700:5: VOID_TYPE + // smaliParser.g:720:5: VOID_TYPE { root_0 = (CommonTree)adaptor.nil(); - VOID_TYPE174=(Token)match(input,VOID_TYPE,FOLLOW_VOID_TYPE_in_type_field_method_literal2965); - VOID_TYPE174_tree = (CommonTree)adaptor.create(VOID_TYPE174); - adaptor.addChild(root_0, VOID_TYPE174_tree); + VOID_TYPE182=(Token)match(input,VOID_TYPE,FOLLOW_VOID_TYPE_in_type_field_method_literal3098); + VOID_TYPE182_tree = (CommonTree)adaptor.create(VOID_TYPE182); + adaptor.addChild(root_0, VOID_TYPE182_tree); } break; @@ -6897,6 +7220,441 @@ public class smaliParser extends Parser { // $ANTLR end "type_field_method_literal" + public static class call_site_reference_return extends ParserRuleReturnScope { + CommonTree tree; + @Override + public CommonTree getTree() { return tree; } + }; + + + // $ANTLR start "call_site_reference" + // smaliParser.g:722:1: call_site_reference : simple_name OPEN_PAREN STRING_LITERAL COMMA method_prototype ( COMMA literal )* CLOSE_PAREN AT method_reference -> ^( I_CALL_SITE_REFERENCE simple_name STRING_LITERAL method_prototype ^( I_CALL_SITE_EXTRA_ARGUMENTS ( literal )* ) method_reference ) ; + public final smaliParser.call_site_reference_return call_site_reference() throws RecognitionException { + smaliParser.call_site_reference_return retval = new smaliParser.call_site_reference_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token OPEN_PAREN184=null; + Token STRING_LITERAL185=null; + Token COMMA186=null; + Token COMMA188=null; + Token CLOSE_PAREN190=null; + Token AT191=null; + ParserRuleReturnScope simple_name183 =null; + ParserRuleReturnScope method_prototype187 =null; + ParserRuleReturnScope literal189 =null; + ParserRuleReturnScope method_reference192 =null; + + CommonTree OPEN_PAREN184_tree=null; + CommonTree STRING_LITERAL185_tree=null; + CommonTree COMMA186_tree=null; + CommonTree COMMA188_tree=null; + CommonTree CLOSE_PAREN190_tree=null; + CommonTree AT191_tree=null; + RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); + RewriteRuleTokenStream stream_OPEN_PAREN=new RewriteRuleTokenStream(adaptor,"token OPEN_PAREN"); + RewriteRuleTokenStream stream_AT=new RewriteRuleTokenStream(adaptor,"token AT"); + RewriteRuleTokenStream stream_STRING_LITERAL=new RewriteRuleTokenStream(adaptor,"token STRING_LITERAL"); + RewriteRuleTokenStream stream_CLOSE_PAREN=new RewriteRuleTokenStream(adaptor,"token CLOSE_PAREN"); + RewriteRuleSubtreeStream stream_method_reference=new RewriteRuleSubtreeStream(adaptor,"rule method_reference"); + RewriteRuleSubtreeStream stream_simple_name=new RewriteRuleSubtreeStream(adaptor,"rule simple_name"); + RewriteRuleSubtreeStream stream_method_prototype=new RewriteRuleSubtreeStream(adaptor,"rule method_prototype"); + RewriteRuleSubtreeStream stream_literal=new RewriteRuleSubtreeStream(adaptor,"rule literal"); + + try { + // smaliParser.g:723:3: ( simple_name OPEN_PAREN STRING_LITERAL COMMA method_prototype ( COMMA literal )* CLOSE_PAREN AT method_reference -> ^( I_CALL_SITE_REFERENCE simple_name STRING_LITERAL method_prototype ^( I_CALL_SITE_EXTRA_ARGUMENTS ( literal )* ) method_reference ) ) + // smaliParser.g:723:5: simple_name OPEN_PAREN STRING_LITERAL COMMA method_prototype ( COMMA literal )* CLOSE_PAREN AT method_reference + { + pushFollow(FOLLOW_simple_name_in_call_site_reference3108); + simple_name183=simple_name(); + state._fsp--; + + stream_simple_name.add(simple_name183.getTree()); + OPEN_PAREN184=(Token)match(input,OPEN_PAREN,FOLLOW_OPEN_PAREN_in_call_site_reference3110); + stream_OPEN_PAREN.add(OPEN_PAREN184); + + STRING_LITERAL185=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_call_site_reference3112); + stream_STRING_LITERAL.add(STRING_LITERAL185); + + COMMA186=(Token)match(input,COMMA,FOLLOW_COMMA_in_call_site_reference3114); + stream_COMMA.add(COMMA186); + + pushFollow(FOLLOW_method_prototype_in_call_site_reference3116); + method_prototype187=method_prototype(); + state._fsp--; + + stream_method_prototype.add(method_prototype187.getTree()); + // smaliParser.g:723:66: ( COMMA literal )* + loop32: + while (true) { + int alt32=2; + int LA32_0 = input.LA(1); + if ( (LA32_0==COMMA) ) { + alt32=1; + } + + switch (alt32) { + case 1 : + // smaliParser.g:723:67: COMMA literal + { + COMMA188=(Token)match(input,COMMA,FOLLOW_COMMA_in_call_site_reference3119); + stream_COMMA.add(COMMA188); + + pushFollow(FOLLOW_literal_in_call_site_reference3121); + literal189=literal(); + state._fsp--; + + stream_literal.add(literal189.getTree()); + } + break; + + default : + break loop32; + } + } + + CLOSE_PAREN190=(Token)match(input,CLOSE_PAREN,FOLLOW_CLOSE_PAREN_in_call_site_reference3125); + stream_CLOSE_PAREN.add(CLOSE_PAREN190); + + AT191=(Token)match(input,AT,FOLLOW_AT_in_call_site_reference3127); + stream_AT.add(AT191); + + pushFollow(FOLLOW_method_reference_in_call_site_reference3129); + method_reference192=method_reference(); + state._fsp--; + + stream_method_reference.add(method_reference192.getTree()); + // AST REWRITE + // elements: STRING_LITERAL, simple_name, method_reference, method_prototype, literal + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); + + root_0 = (CommonTree)adaptor.nil(); + // 724:5: -> ^( I_CALL_SITE_REFERENCE simple_name STRING_LITERAL method_prototype ^( I_CALL_SITE_EXTRA_ARGUMENTS ( literal )* ) method_reference ) + { + // smaliParser.g:724:8: ^( I_CALL_SITE_REFERENCE simple_name STRING_LITERAL method_prototype ^( I_CALL_SITE_EXTRA_ARGUMENTS ( literal )* ) method_reference ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_CALL_SITE_REFERENCE, "I_CALL_SITE_REFERENCE"), root_1); + adaptor.addChild(root_1, stream_simple_name.nextTree()); + adaptor.addChild(root_1, stream_STRING_LITERAL.nextNode()); + adaptor.addChild(root_1, stream_method_prototype.nextTree()); + // smaliParser.g:724:76: ^( I_CALL_SITE_EXTRA_ARGUMENTS ( literal )* ) + { + CommonTree root_2 = (CommonTree)adaptor.nil(); + root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_CALL_SITE_EXTRA_ARGUMENTS, "I_CALL_SITE_EXTRA_ARGUMENTS"), root_2); + // smaliParser.g:724:106: ( literal )* + while ( stream_literal.hasNext() ) { + adaptor.addChild(root_2, stream_literal.nextTree()); + } + stream_literal.reset(); + + adaptor.addChild(root_1, root_2); + } + + adaptor.addChild(root_1, stream_method_reference.nextTree()); + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + + retval.stop = input.LT(-1); + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + } + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "call_site_reference" + + + public static class method_handle_reference_return extends ParserRuleReturnScope { + CommonTree tree; + @Override + public CommonTree getTree() { return tree; } + }; + + + // $ANTLR start "method_handle_reference" + // smaliParser.g:727:1: method_handle_reference : ( METHOD_HANDLE_TYPE_FIELD AT field_reference -> METHOD_HANDLE_TYPE_FIELD field_reference | METHOD_HANDLE_TYPE_METHOD AT method_reference -> METHOD_HANDLE_TYPE_METHOD method_reference | INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE AT method_reference -> INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE method_reference ); + public final smaliParser.method_handle_reference_return method_handle_reference() throws RecognitionException { + smaliParser.method_handle_reference_return retval = new smaliParser.method_handle_reference_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token METHOD_HANDLE_TYPE_FIELD193=null; + Token AT194=null; + Token METHOD_HANDLE_TYPE_METHOD196=null; + Token AT197=null; + Token INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE199=null; + Token AT200=null; + ParserRuleReturnScope field_reference195 =null; + ParserRuleReturnScope method_reference198 =null; + ParserRuleReturnScope method_reference201 =null; + + CommonTree METHOD_HANDLE_TYPE_FIELD193_tree=null; + CommonTree AT194_tree=null; + CommonTree METHOD_HANDLE_TYPE_METHOD196_tree=null; + CommonTree AT197_tree=null; + CommonTree INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE199_tree=null; + CommonTree AT200_tree=null; + RewriteRuleTokenStream stream_AT=new RewriteRuleTokenStream(adaptor,"token AT"); + RewriteRuleTokenStream stream_INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE"); + RewriteRuleTokenStream stream_METHOD_HANDLE_TYPE_FIELD=new RewriteRuleTokenStream(adaptor,"token METHOD_HANDLE_TYPE_FIELD"); + RewriteRuleTokenStream stream_METHOD_HANDLE_TYPE_METHOD=new RewriteRuleTokenStream(adaptor,"token METHOD_HANDLE_TYPE_METHOD"); + RewriteRuleSubtreeStream stream_method_reference=new RewriteRuleSubtreeStream(adaptor,"rule method_reference"); + RewriteRuleSubtreeStream stream_field_reference=new RewriteRuleSubtreeStream(adaptor,"rule field_reference"); + + try { + // smaliParser.g:728:3: ( METHOD_HANDLE_TYPE_FIELD AT field_reference -> METHOD_HANDLE_TYPE_FIELD field_reference | METHOD_HANDLE_TYPE_METHOD AT method_reference -> METHOD_HANDLE_TYPE_METHOD method_reference | INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE AT method_reference -> INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE method_reference ) + int alt33=3; + switch ( input.LA(1) ) { + case METHOD_HANDLE_TYPE_FIELD: + { + alt33=1; + } + break; + case METHOD_HANDLE_TYPE_METHOD: + { + alt33=2; + } + break; + case INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE: + { + alt33=3; + } + break; + default: + NoViableAltException nvae = + new NoViableAltException("", 33, 0, input); + throw nvae; + } + switch (alt33) { + case 1 : + // smaliParser.g:728:5: METHOD_HANDLE_TYPE_FIELD AT field_reference + { + METHOD_HANDLE_TYPE_FIELD193=(Token)match(input,METHOD_HANDLE_TYPE_FIELD,FOLLOW_METHOD_HANDLE_TYPE_FIELD_in_method_handle_reference3173); + stream_METHOD_HANDLE_TYPE_FIELD.add(METHOD_HANDLE_TYPE_FIELD193); + + AT194=(Token)match(input,AT,FOLLOW_AT_in_method_handle_reference3175); + stream_AT.add(AT194); + + pushFollow(FOLLOW_field_reference_in_method_handle_reference3177); + field_reference195=field_reference(); + state._fsp--; + + stream_field_reference.add(field_reference195.getTree()); + // AST REWRITE + // elements: METHOD_HANDLE_TYPE_FIELD, field_reference + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); + + root_0 = (CommonTree)adaptor.nil(); + // 728:49: -> METHOD_HANDLE_TYPE_FIELD field_reference + { + adaptor.addChild(root_0, stream_METHOD_HANDLE_TYPE_FIELD.nextNode()); + adaptor.addChild(root_0, stream_field_reference.nextTree()); + } + + + retval.tree = root_0; + + } + break; + case 2 : + // smaliParser.g:729:5: METHOD_HANDLE_TYPE_METHOD AT method_reference + { + METHOD_HANDLE_TYPE_METHOD196=(Token)match(input,METHOD_HANDLE_TYPE_METHOD,FOLLOW_METHOD_HANDLE_TYPE_METHOD_in_method_handle_reference3189); + stream_METHOD_HANDLE_TYPE_METHOD.add(METHOD_HANDLE_TYPE_METHOD196); + + AT197=(Token)match(input,AT,FOLLOW_AT_in_method_handle_reference3191); + stream_AT.add(AT197); + + pushFollow(FOLLOW_method_reference_in_method_handle_reference3193); + method_reference198=method_reference(); + state._fsp--; + + stream_method_reference.add(method_reference198.getTree()); + // AST REWRITE + // elements: METHOD_HANDLE_TYPE_METHOD, method_reference + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); + + root_0 = (CommonTree)adaptor.nil(); + // 729:51: -> METHOD_HANDLE_TYPE_METHOD method_reference + { + adaptor.addChild(root_0, stream_METHOD_HANDLE_TYPE_METHOD.nextNode()); + adaptor.addChild(root_0, stream_method_reference.nextTree()); + } + + + retval.tree = root_0; + + } + break; + case 3 : + // smaliParser.g:730:5: INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE AT method_reference + { + INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE199=(Token)match(input,INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE,FOLLOW_INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE_in_method_handle_reference3205); + stream_INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE.add(INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE199); + + AT200=(Token)match(input,AT,FOLLOW_AT_in_method_handle_reference3207); + stream_AT.add(AT200); + + pushFollow(FOLLOW_method_reference_in_method_handle_reference3209); + method_reference201=method_reference(); + state._fsp--; + + stream_method_reference.add(method_reference201.getTree()); + // AST REWRITE + // elements: INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE, method_reference + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); + + root_0 = (CommonTree)adaptor.nil(); + // 730:76: -> INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE method_reference + { + adaptor.addChild(root_0, stream_INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE.nextNode()); + adaptor.addChild(root_0, stream_method_reference.nextTree()); + } + + + retval.tree = root_0; + + } + break; + + } + retval.stop = input.LT(-1); + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + } + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "method_handle_reference" + + + public static class method_handle_literal_return extends ParserRuleReturnScope { + CommonTree tree; + @Override + public CommonTree getTree() { return tree; } + }; + + + // $ANTLR start "method_handle_literal" + // smaliParser.g:732:1: method_handle_literal : method_handle_reference -> ^( I_ENCODED_METHOD_HANDLE method_handle_reference ) ; + public final smaliParser.method_handle_literal_return method_handle_literal() throws RecognitionException { + smaliParser.method_handle_literal_return retval = new smaliParser.method_handle_literal_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + ParserRuleReturnScope method_handle_reference202 =null; + + RewriteRuleSubtreeStream stream_method_handle_reference=new RewriteRuleSubtreeStream(adaptor,"rule method_handle_reference"); + + try { + // smaliParser.g:733:3: ( method_handle_reference -> ^( I_ENCODED_METHOD_HANDLE method_handle_reference ) ) + // smaliParser.g:733:5: method_handle_reference + { + pushFollow(FOLLOW_method_handle_reference_in_method_handle_literal3225); + method_handle_reference202=method_handle_reference(); + state._fsp--; + + stream_method_handle_reference.add(method_handle_reference202.getTree()); + // AST REWRITE + // elements: method_handle_reference + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); + + root_0 = (CommonTree)adaptor.nil(); + // 734:3: -> ^( I_ENCODED_METHOD_HANDLE method_handle_reference ) + { + // smaliParser.g:734:6: ^( I_ENCODED_METHOD_HANDLE method_handle_reference ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_ENCODED_METHOD_HANDLE, "I_ENCODED_METHOD_HANDLE"), root_1); + adaptor.addChild(root_1, stream_method_handle_reference.nextTree()); + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + + retval.stop = input.LT(-1); + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + } + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "method_handle_literal" + + public static class method_reference_return extends ParserRuleReturnScope { CommonTree tree; @Override @@ -6905,63 +7663,63 @@ public class smaliParser extends Parser { // $ANTLR start "method_reference" - // smaliParser.g:702:1: method_reference : ( reference_type_descriptor ARROW )? member_name method_prototype -> ( reference_type_descriptor )? member_name method_prototype ; + // smaliParser.g:736:1: method_reference : ( reference_type_descriptor ARROW )? member_name method_prototype -> ( reference_type_descriptor )? member_name method_prototype ; public final smaliParser.method_reference_return method_reference() throws RecognitionException { smaliParser.method_reference_return retval = new smaliParser.method_reference_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token ARROW176=null; - ParserRuleReturnScope reference_type_descriptor175 =null; - ParserRuleReturnScope member_name177 =null; - ParserRuleReturnScope method_prototype178 =null; + Token ARROW204=null; + ParserRuleReturnScope reference_type_descriptor203 =null; + ParserRuleReturnScope member_name205 =null; + ParserRuleReturnScope method_prototype206 =null; - CommonTree ARROW176_tree=null; + CommonTree ARROW204_tree=null; RewriteRuleTokenStream stream_ARROW=new RewriteRuleTokenStream(adaptor,"token ARROW"); RewriteRuleSubtreeStream stream_method_prototype=new RewriteRuleSubtreeStream(adaptor,"rule method_prototype"); RewriteRuleSubtreeStream stream_member_name=new RewriteRuleSubtreeStream(adaptor,"rule member_name"); RewriteRuleSubtreeStream stream_reference_type_descriptor=new RewriteRuleSubtreeStream(adaptor,"rule reference_type_descriptor"); try { - // smaliParser.g:703:3: ( ( reference_type_descriptor ARROW )? member_name method_prototype -> ( reference_type_descriptor )? member_name method_prototype ) - // smaliParser.g:703:5: ( reference_type_descriptor ARROW )? member_name method_prototype + // smaliParser.g:737:3: ( ( reference_type_descriptor ARROW )? member_name method_prototype -> ( reference_type_descriptor )? member_name method_prototype ) + // smaliParser.g:737:5: ( reference_type_descriptor ARROW )? member_name method_prototype { - // smaliParser.g:703:5: ( reference_type_descriptor ARROW )? - int alt32=2; - int LA32_0 = input.LA(1); - if ( (LA32_0==ARRAY_TYPE_PREFIX||LA32_0==CLASS_DESCRIPTOR) ) { - alt32=1; + // smaliParser.g:737:5: ( reference_type_descriptor ARROW )? + int alt34=2; + int LA34_0 = input.LA(1); + if ( (LA34_0==ARRAY_TYPE_PREFIX||LA34_0==CLASS_DESCRIPTOR) ) { + alt34=1; } - switch (alt32) { + switch (alt34) { case 1 : - // smaliParser.g:703:6: reference_type_descriptor ARROW + // smaliParser.g:737:6: reference_type_descriptor ARROW { - pushFollow(FOLLOW_reference_type_descriptor_in_method_reference2976); - reference_type_descriptor175=reference_type_descriptor(); + pushFollow(FOLLOW_reference_type_descriptor_in_method_reference3246); + reference_type_descriptor203=reference_type_descriptor(); state._fsp--; - stream_reference_type_descriptor.add(reference_type_descriptor175.getTree()); - ARROW176=(Token)match(input,ARROW,FOLLOW_ARROW_in_method_reference2978); - stream_ARROW.add(ARROW176); + stream_reference_type_descriptor.add(reference_type_descriptor203.getTree()); + ARROW204=(Token)match(input,ARROW,FOLLOW_ARROW_in_method_reference3248); + stream_ARROW.add(ARROW204); } break; } - pushFollow(FOLLOW_member_name_in_method_reference2982); - member_name177=member_name(); + pushFollow(FOLLOW_member_name_in_method_reference3252); + member_name205=member_name(); state._fsp--; - stream_member_name.add(member_name177.getTree()); - pushFollow(FOLLOW_method_prototype_in_method_reference2984); - method_prototype178=method_prototype(); + stream_member_name.add(member_name205.getTree()); + pushFollow(FOLLOW_method_prototype_in_method_reference3254); + method_prototype206=method_prototype(); state._fsp--; - stream_method_prototype.add(method_prototype178.getTree()); + stream_method_prototype.add(method_prototype206.getTree()); // AST REWRITE - // elements: method_prototype, reference_type_descriptor, member_name + // elements: member_name, reference_type_descriptor, method_prototype // token labels: // rule labels: retval // token list labels: @@ -6971,9 +7729,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 704:3: -> ( reference_type_descriptor )? member_name method_prototype + // 738:3: -> ( reference_type_descriptor )? member_name method_prototype { - // smaliParser.g:704:6: ( reference_type_descriptor )? + // smaliParser.g:738:6: ( reference_type_descriptor )? if ( stream_reference_type_descriptor.hasNext() ) { adaptor.addChild(root_0, stream_reference_type_descriptor.nextTree()); } @@ -7015,21 +7773,21 @@ public class smaliParser extends Parser { // $ANTLR start "field_reference" - // smaliParser.g:706:1: field_reference : ( reference_type_descriptor ARROW )? member_name COLON nonvoid_type_descriptor -> ( reference_type_descriptor )? member_name nonvoid_type_descriptor ; + // smaliParser.g:740:1: field_reference : ( reference_type_descriptor ARROW )? member_name COLON nonvoid_type_descriptor -> ( reference_type_descriptor )? member_name nonvoid_type_descriptor ; public final smaliParser.field_reference_return field_reference() throws RecognitionException { smaliParser.field_reference_return retval = new smaliParser.field_reference_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token ARROW180=null; - Token COLON182=null; - ParserRuleReturnScope reference_type_descriptor179 =null; - ParserRuleReturnScope member_name181 =null; - ParserRuleReturnScope nonvoid_type_descriptor183 =null; + Token ARROW208=null; + Token COLON210=null; + ParserRuleReturnScope reference_type_descriptor207 =null; + ParserRuleReturnScope member_name209 =null; + ParserRuleReturnScope nonvoid_type_descriptor211 =null; - CommonTree ARROW180_tree=null; - CommonTree COLON182_tree=null; + CommonTree ARROW208_tree=null; + CommonTree COLON210_tree=null; RewriteRuleTokenStream stream_ARROW=new RewriteRuleTokenStream(adaptor,"token ARROW"); RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON"); RewriteRuleSubtreeStream stream_nonvoid_type_descriptor=new RewriteRuleSubtreeStream(adaptor,"rule nonvoid_type_descriptor"); @@ -7037,47 +7795,47 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_reference_type_descriptor=new RewriteRuleSubtreeStream(adaptor,"rule reference_type_descriptor"); try { - // smaliParser.g:707:3: ( ( reference_type_descriptor ARROW )? member_name COLON nonvoid_type_descriptor -> ( reference_type_descriptor )? member_name nonvoid_type_descriptor ) - // smaliParser.g:707:5: ( reference_type_descriptor ARROW )? member_name COLON nonvoid_type_descriptor + // smaliParser.g:741:3: ( ( reference_type_descriptor ARROW )? member_name COLON nonvoid_type_descriptor -> ( reference_type_descriptor )? member_name nonvoid_type_descriptor ) + // smaliParser.g:741:5: ( reference_type_descriptor ARROW )? member_name COLON nonvoid_type_descriptor { - // smaliParser.g:707:5: ( reference_type_descriptor ARROW )? - int alt33=2; - int LA33_0 = input.LA(1); - if ( (LA33_0==ARRAY_TYPE_PREFIX||LA33_0==CLASS_DESCRIPTOR) ) { - alt33=1; + // smaliParser.g:741:5: ( reference_type_descriptor ARROW )? + int alt35=2; + int LA35_0 = input.LA(1); + if ( (LA35_0==ARRAY_TYPE_PREFIX||LA35_0==CLASS_DESCRIPTOR) ) { + alt35=1; } - switch (alt33) { + switch (alt35) { case 1 : - // smaliParser.g:707:6: reference_type_descriptor ARROW + // smaliParser.g:741:6: reference_type_descriptor ARROW { - pushFollow(FOLLOW_reference_type_descriptor_in_field_reference3006); - reference_type_descriptor179=reference_type_descriptor(); + pushFollow(FOLLOW_reference_type_descriptor_in_field_reference3276); + reference_type_descriptor207=reference_type_descriptor(); state._fsp--; - stream_reference_type_descriptor.add(reference_type_descriptor179.getTree()); - ARROW180=(Token)match(input,ARROW,FOLLOW_ARROW_in_field_reference3008); - stream_ARROW.add(ARROW180); + stream_reference_type_descriptor.add(reference_type_descriptor207.getTree()); + ARROW208=(Token)match(input,ARROW,FOLLOW_ARROW_in_field_reference3278); + stream_ARROW.add(ARROW208); } break; } - pushFollow(FOLLOW_member_name_in_field_reference3012); - member_name181=member_name(); + pushFollow(FOLLOW_member_name_in_field_reference3282); + member_name209=member_name(); state._fsp--; - stream_member_name.add(member_name181.getTree()); - COLON182=(Token)match(input,COLON,FOLLOW_COLON_in_field_reference3014); - stream_COLON.add(COLON182); + stream_member_name.add(member_name209.getTree()); + COLON210=(Token)match(input,COLON,FOLLOW_COLON_in_field_reference3284); + stream_COLON.add(COLON210); - pushFollow(FOLLOW_nonvoid_type_descriptor_in_field_reference3016); - nonvoid_type_descriptor183=nonvoid_type_descriptor(); + pushFollow(FOLLOW_nonvoid_type_descriptor_in_field_reference3286); + nonvoid_type_descriptor211=nonvoid_type_descriptor(); state._fsp--; - stream_nonvoid_type_descriptor.add(nonvoid_type_descriptor183.getTree()); + stream_nonvoid_type_descriptor.add(nonvoid_type_descriptor211.getTree()); // AST REWRITE - // elements: reference_type_descriptor, nonvoid_type_descriptor, member_name + // elements: reference_type_descriptor, member_name, nonvoid_type_descriptor // token labels: // rule labels: retval // token list labels: @@ -7087,9 +7845,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 708:3: -> ( reference_type_descriptor )? member_name nonvoid_type_descriptor + // 742:3: -> ( reference_type_descriptor )? member_name nonvoid_type_descriptor { - // smaliParser.g:708:6: ( reference_type_descriptor )? + // smaliParser.g:742:6: ( reference_type_descriptor )? if ( stream_reference_type_descriptor.hasNext() ) { adaptor.addChild(root_0, stream_reference_type_descriptor.nextTree()); } @@ -7131,32 +7889,32 @@ public class smaliParser extends Parser { // $ANTLR start "label" - // smaliParser.g:710:1: label : COLON simple_name -> ^( I_LABEL[$COLON, \"I_LABEL\"] simple_name ) ; + // smaliParser.g:744:1: label : COLON simple_name -> ^( I_LABEL[$COLON, \"I_LABEL\"] simple_name ) ; public final smaliParser.label_return label() throws RecognitionException { smaliParser.label_return retval = new smaliParser.label_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token COLON184=null; - ParserRuleReturnScope simple_name185 =null; + Token COLON212=null; + ParserRuleReturnScope simple_name213 =null; - CommonTree COLON184_tree=null; + CommonTree COLON212_tree=null; RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON"); RewriteRuleSubtreeStream stream_simple_name=new RewriteRuleSubtreeStream(adaptor,"rule simple_name"); try { - // smaliParser.g:711:3: ( COLON simple_name -> ^( I_LABEL[$COLON, \"I_LABEL\"] simple_name ) ) - // smaliParser.g:711:5: COLON simple_name + // smaliParser.g:745:3: ( COLON simple_name -> ^( I_LABEL[$COLON, \"I_LABEL\"] simple_name ) ) + // smaliParser.g:745:5: COLON simple_name { - COLON184=(Token)match(input,COLON,FOLLOW_COLON_in_label3037); - stream_COLON.add(COLON184); + COLON212=(Token)match(input,COLON,FOLLOW_COLON_in_label3307); + stream_COLON.add(COLON212); - pushFollow(FOLLOW_simple_name_in_label3039); - simple_name185=simple_name(); + pushFollow(FOLLOW_simple_name_in_label3309); + simple_name213=simple_name(); state._fsp--; - stream_simple_name.add(simple_name185.getTree()); + stream_simple_name.add(simple_name213.getTree()); // AST REWRITE // elements: simple_name // token labels: @@ -7168,12 +7926,12 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 711:23: -> ^( I_LABEL[$COLON, \"I_LABEL\"] simple_name ) + // 745:23: -> ^( I_LABEL[$COLON, \"I_LABEL\"] simple_name ) { - // smaliParser.g:711:26: ^( I_LABEL[$COLON, \"I_LABEL\"] simple_name ) + // smaliParser.g:745:26: ^( I_LABEL[$COLON, \"I_LABEL\"] simple_name ) { CommonTree root_1 = (CommonTree)adaptor.nil(); - root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_LABEL, COLON184, "I_LABEL"), root_1); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_LABEL, COLON212, "I_LABEL"), root_1); adaptor.addChild(root_1, stream_simple_name.nextTree()); adaptor.addChild(root_0, root_1); } @@ -7212,32 +7970,32 @@ public class smaliParser extends Parser { // $ANTLR start "label_ref" - // smaliParser.g:713:1: label_ref : COLON simple_name -> simple_name ; + // smaliParser.g:747:1: label_ref : COLON simple_name -> simple_name ; public final smaliParser.label_ref_return label_ref() throws RecognitionException { smaliParser.label_ref_return retval = new smaliParser.label_ref_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token COLON186=null; - ParserRuleReturnScope simple_name187 =null; + Token COLON214=null; + ParserRuleReturnScope simple_name215 =null; - CommonTree COLON186_tree=null; + CommonTree COLON214_tree=null; RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON"); RewriteRuleSubtreeStream stream_simple_name=new RewriteRuleSubtreeStream(adaptor,"rule simple_name"); try { - // smaliParser.g:714:3: ( COLON simple_name -> simple_name ) - // smaliParser.g:714:5: COLON simple_name + // smaliParser.g:748:3: ( COLON simple_name -> simple_name ) + // smaliParser.g:748:5: COLON simple_name { - COLON186=(Token)match(input,COLON,FOLLOW_COLON_in_label_ref3058); - stream_COLON.add(COLON186); + COLON214=(Token)match(input,COLON,FOLLOW_COLON_in_label_ref3328); + stream_COLON.add(COLON214); - pushFollow(FOLLOW_simple_name_in_label_ref3060); - simple_name187=simple_name(); + pushFollow(FOLLOW_simple_name_in_label_ref3330); + simple_name215=simple_name(); state._fsp--; - stream_simple_name.add(simple_name187.getTree()); + stream_simple_name.add(simple_name215.getTree()); // AST REWRITE // elements: simple_name // token labels: @@ -7249,7 +8007,7 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 714:23: -> simple_name + // 748:23: -> simple_name { adaptor.addChild(root_0, stream_simple_name.nextTree()); } @@ -7286,71 +8044,71 @@ public class smaliParser extends Parser { // $ANTLR start "register_list" - // smaliParser.g:716:1: register_list : ( REGISTER ( COMMA REGISTER )* -> ^( I_REGISTER_LIST[$start, \"I_REGISTER_LIST\"] ( REGISTER )* ) | -> ^( I_REGISTER_LIST[$start, \"I_REGISTER_LIST\"] ) ); + // smaliParser.g:750:1: register_list : ( REGISTER ( COMMA REGISTER )* -> ^( I_REGISTER_LIST[$start, \"I_REGISTER_LIST\"] ( REGISTER )* ) | -> ^( I_REGISTER_LIST[$start, \"I_REGISTER_LIST\"] ) ); public final smaliParser.register_list_return register_list() throws RecognitionException { smaliParser.register_list_return retval = new smaliParser.register_list_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token REGISTER188=null; - Token COMMA189=null; - Token REGISTER190=null; + Token REGISTER216=null; + Token COMMA217=null; + Token REGISTER218=null; - CommonTree REGISTER188_tree=null; - CommonTree COMMA189_tree=null; - CommonTree REGISTER190_tree=null; + CommonTree REGISTER216_tree=null; + CommonTree COMMA217_tree=null; + CommonTree REGISTER218_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); try { - // smaliParser.g:717:3: ( REGISTER ( COMMA REGISTER )* -> ^( I_REGISTER_LIST[$start, \"I_REGISTER_LIST\"] ( REGISTER )* ) | -> ^( I_REGISTER_LIST[$start, \"I_REGISTER_LIST\"] ) ) - int alt35=2; - int LA35_0 = input.LA(1); - if ( (LA35_0==REGISTER) ) { - alt35=1; + // smaliParser.g:751:3: ( REGISTER ( COMMA REGISTER )* -> ^( I_REGISTER_LIST[$start, \"I_REGISTER_LIST\"] ( REGISTER )* ) | -> ^( I_REGISTER_LIST[$start, \"I_REGISTER_LIST\"] ) ) + int alt37=2; + int LA37_0 = input.LA(1); + if ( (LA37_0==REGISTER) ) { + alt37=1; } - else if ( (LA35_0==CLOSE_BRACE) ) { - alt35=2; + else if ( (LA37_0==CLOSE_BRACE) ) { + alt37=2; } else { NoViableAltException nvae = - new NoViableAltException("", 35, 0, input); + new NoViableAltException("", 37, 0, input); throw nvae; } - switch (alt35) { + switch (alt37) { case 1 : - // smaliParser.g:717:5: REGISTER ( COMMA REGISTER )* + // smaliParser.g:751:5: REGISTER ( COMMA REGISTER )* { - REGISTER188=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_register_list3074); - stream_REGISTER.add(REGISTER188); + REGISTER216=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_register_list3344); + stream_REGISTER.add(REGISTER216); - // smaliParser.g:717:14: ( COMMA REGISTER )* - loop34: + // smaliParser.g:751:14: ( COMMA REGISTER )* + loop36: while (true) { - int alt34=2; - int LA34_0 = input.LA(1); - if ( (LA34_0==COMMA) ) { - alt34=1; + int alt36=2; + int LA36_0 = input.LA(1); + if ( (LA36_0==COMMA) ) { + alt36=1; } - switch (alt34) { + switch (alt36) { case 1 : - // smaliParser.g:717:15: COMMA REGISTER + // smaliParser.g:751:15: COMMA REGISTER { - COMMA189=(Token)match(input,COMMA,FOLLOW_COMMA_in_register_list3077); - stream_COMMA.add(COMMA189); + COMMA217=(Token)match(input,COMMA,FOLLOW_COMMA_in_register_list3347); + stream_COMMA.add(COMMA217); - REGISTER190=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_register_list3079); - stream_REGISTER.add(REGISTER190); + REGISTER218=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_register_list3349); + stream_REGISTER.add(REGISTER218); } break; default : - break loop34; + break loop36; } } @@ -7365,13 +8123,13 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 717:32: -> ^( I_REGISTER_LIST[$start, \"I_REGISTER_LIST\"] ( REGISTER )* ) + // 751:32: -> ^( I_REGISTER_LIST[$start, \"I_REGISTER_LIST\"] ( REGISTER )* ) { - // smaliParser.g:717:35: ^( I_REGISTER_LIST[$start, \"I_REGISTER_LIST\"] ( REGISTER )* ) + // smaliParser.g:751:35: ^( I_REGISTER_LIST[$start, \"I_REGISTER_LIST\"] ( REGISTER )* ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_REGISTER_LIST, (retval.start), "I_REGISTER_LIST"), root_1); - // smaliParser.g:717:80: ( REGISTER )* + // smaliParser.g:751:80: ( REGISTER )* while ( stream_REGISTER.hasNext() ) { adaptor.addChild(root_1, stream_REGISTER.nextNode()); } @@ -7388,7 +8146,7 @@ public class smaliParser extends Parser { } break; case 2 : - // smaliParser.g:718:5: + // smaliParser.g:752:5: { // AST REWRITE // elements: @@ -7401,9 +8159,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 718:5: -> ^( I_REGISTER_LIST[$start, \"I_REGISTER_LIST\"] ) + // 752:5: -> ^( I_REGISTER_LIST[$start, \"I_REGISTER_LIST\"] ) { - // smaliParser.g:718:7: ^( I_REGISTER_LIST[$start, \"I_REGISTER_LIST\"] ) + // smaliParser.g:752:7: ^( I_REGISTER_LIST[$start, \"I_REGISTER_LIST\"] ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_REGISTER_LIST, (retval.start), "I_REGISTER_LIST"), root_1); @@ -7446,7 +8204,7 @@ public class smaliParser extends Parser { // $ANTLR start "register_range" - // smaliParser.g:720:1: register_range : (startreg= REGISTER ( DOTDOT endreg= REGISTER )? )? -> ^( I_REGISTER_RANGE[$start, \"I_REGISTER_RANGE\"] ( $startreg)? ( $endreg)? ) ; + // smaliParser.g:754:1: register_range : (startreg= REGISTER ( DOTDOT endreg= REGISTER )? )? -> ^( I_REGISTER_RANGE[$start, \"I_REGISTER_RANGE\"] ( $startreg)? ( $endreg)? ) ; public final smaliParser.register_range_return register_range() throws RecognitionException { smaliParser.register_range_return retval = new smaliParser.register_range_return(); retval.start = input.LT(1); @@ -7455,45 +8213,45 @@ public class smaliParser extends Parser { Token startreg=null; Token endreg=null; - Token DOTDOT191=null; + Token DOTDOT219=null; CommonTree startreg_tree=null; CommonTree endreg_tree=null; - CommonTree DOTDOT191_tree=null; + CommonTree DOTDOT219_tree=null; RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_DOTDOT=new RewriteRuleTokenStream(adaptor,"token DOTDOT"); try { - // smaliParser.g:721:3: ( (startreg= REGISTER ( DOTDOT endreg= REGISTER )? )? -> ^( I_REGISTER_RANGE[$start, \"I_REGISTER_RANGE\"] ( $startreg)? ( $endreg)? ) ) - // smaliParser.g:721:5: (startreg= REGISTER ( DOTDOT endreg= REGISTER )? )? + // smaliParser.g:755:3: ( (startreg= REGISTER ( DOTDOT endreg= REGISTER )? )? -> ^( I_REGISTER_RANGE[$start, \"I_REGISTER_RANGE\"] ( $startreg)? ( $endreg)? ) ) + // smaliParser.g:755:5: (startreg= REGISTER ( DOTDOT endreg= REGISTER )? )? { - // smaliParser.g:721:5: (startreg= REGISTER ( DOTDOT endreg= REGISTER )? )? - int alt37=2; - int LA37_0 = input.LA(1); - if ( (LA37_0==REGISTER) ) { - alt37=1; + // smaliParser.g:755:5: (startreg= REGISTER ( DOTDOT endreg= REGISTER )? )? + int alt39=2; + int LA39_0 = input.LA(1); + if ( (LA39_0==REGISTER) ) { + alt39=1; } - switch (alt37) { + switch (alt39) { case 1 : - // smaliParser.g:721:6: startreg= REGISTER ( DOTDOT endreg= REGISTER )? + // smaliParser.g:755:6: startreg= REGISTER ( DOTDOT endreg= REGISTER )? { - startreg=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_register_range3114); + startreg=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_register_range3384); stream_REGISTER.add(startreg); - // smaliParser.g:721:24: ( DOTDOT endreg= REGISTER )? - int alt36=2; - int LA36_0 = input.LA(1); - if ( (LA36_0==DOTDOT) ) { - alt36=1; + // smaliParser.g:755:24: ( DOTDOT endreg= REGISTER )? + int alt38=2; + int LA38_0 = input.LA(1); + if ( (LA38_0==DOTDOT) ) { + alt38=1; } - switch (alt36) { + switch (alt38) { case 1 : - // smaliParser.g:721:25: DOTDOT endreg= REGISTER + // smaliParser.g:755:25: DOTDOT endreg= REGISTER { - DOTDOT191=(Token)match(input,DOTDOT,FOLLOW_DOTDOT_in_register_range3117); - stream_DOTDOT.add(DOTDOT191); + DOTDOT219=(Token)match(input,DOTDOT,FOLLOW_DOTDOT_in_register_range3387); + stream_DOTDOT.add(DOTDOT219); - endreg=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_register_range3121); + endreg=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_register_range3391); stream_REGISTER.add(endreg); } @@ -7519,19 +8277,19 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 721:52: -> ^( I_REGISTER_RANGE[$start, \"I_REGISTER_RANGE\"] ( $startreg)? ( $endreg)? ) + // 755:52: -> ^( I_REGISTER_RANGE[$start, \"I_REGISTER_RANGE\"] ( $startreg)? ( $endreg)? ) { - // smaliParser.g:721:55: ^( I_REGISTER_RANGE[$start, \"I_REGISTER_RANGE\"] ( $startreg)? ( $endreg)? ) + // smaliParser.g:755:55: ^( I_REGISTER_RANGE[$start, \"I_REGISTER_RANGE\"] ( $startreg)? ( $endreg)? ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_REGISTER_RANGE, (retval.start), "I_REGISTER_RANGE"), root_1); - // smaliParser.g:721:103: ( $startreg)? + // smaliParser.g:755:103: ( $startreg)? if ( stream_startreg.hasNext() ) { adaptor.addChild(root_1, stream_startreg.nextNode()); } stream_startreg.reset(); - // smaliParser.g:721:114: ( $endreg)? + // smaliParser.g:755:114: ( $endreg)? if ( stream_endreg.hasNext() ) { adaptor.addChild(root_1, stream_endreg.nextNode()); } @@ -7574,61 +8332,61 @@ public class smaliParser extends Parser { // $ANTLR start "verification_error_reference" - // smaliParser.g:723:1: verification_error_reference : ( CLASS_DESCRIPTOR | field_reference | method_reference ); + // smaliParser.g:757:1: verification_error_reference : ( CLASS_DESCRIPTOR | field_reference | method_reference ); public final smaliParser.verification_error_reference_return verification_error_reference() throws RecognitionException { smaliParser.verification_error_reference_return retval = new smaliParser.verification_error_reference_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token CLASS_DESCRIPTOR192=null; - ParserRuleReturnScope field_reference193 =null; - ParserRuleReturnScope method_reference194 =null; + Token CLASS_DESCRIPTOR220=null; + ParserRuleReturnScope field_reference221 =null; + ParserRuleReturnScope method_reference222 =null; - CommonTree CLASS_DESCRIPTOR192_tree=null; + CommonTree CLASS_DESCRIPTOR220_tree=null; try { - // smaliParser.g:724:3: ( CLASS_DESCRIPTOR | field_reference | method_reference ) - int alt38=3; - alt38 = dfa38.predict(input); - switch (alt38) { + // smaliParser.g:758:3: ( CLASS_DESCRIPTOR | field_reference | method_reference ) + int alt40=3; + alt40 = dfa40.predict(input); + switch (alt40) { case 1 : - // smaliParser.g:724:5: CLASS_DESCRIPTOR + // smaliParser.g:758:5: CLASS_DESCRIPTOR { root_0 = (CommonTree)adaptor.nil(); - CLASS_DESCRIPTOR192=(Token)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_verification_error_reference3150); - CLASS_DESCRIPTOR192_tree = (CommonTree)adaptor.create(CLASS_DESCRIPTOR192); - adaptor.addChild(root_0, CLASS_DESCRIPTOR192_tree); + CLASS_DESCRIPTOR220=(Token)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_verification_error_reference3420); + CLASS_DESCRIPTOR220_tree = (CommonTree)adaptor.create(CLASS_DESCRIPTOR220); + adaptor.addChild(root_0, CLASS_DESCRIPTOR220_tree); } break; case 2 : - // smaliParser.g:724:24: field_reference + // smaliParser.g:758:24: field_reference { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_field_reference_in_verification_error_reference3154); - field_reference193=field_reference(); + pushFollow(FOLLOW_field_reference_in_verification_error_reference3424); + field_reference221=field_reference(); state._fsp--; - adaptor.addChild(root_0, field_reference193.getTree()); + adaptor.addChild(root_0, field_reference221.getTree()); } break; case 3 : - // smaliParser.g:724:42: method_reference + // smaliParser.g:758:42: method_reference { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_method_reference_in_verification_error_reference3158); - method_reference194=method_reference(); + pushFollow(FOLLOW_method_reference_in_verification_error_reference3428); + method_reference222=method_reference(); state._fsp--; - adaptor.addChild(root_0, method_reference194.getTree()); + adaptor.addChild(root_0, method_reference222.getTree()); } break; @@ -7661,26 +8419,26 @@ public class smaliParser extends Parser { // $ANTLR start "catch_directive" - // smaliParser.g:726:1: catch_directive : CATCH_DIRECTIVE nonvoid_type_descriptor OPEN_BRACE from= label_ref DOTDOT to= label_ref CLOSE_BRACE using= label_ref -> ^( I_CATCH[$start, \"I_CATCH\"] nonvoid_type_descriptor $from $to $using) ; + // smaliParser.g:760:1: catch_directive : CATCH_DIRECTIVE nonvoid_type_descriptor OPEN_BRACE from= label_ref DOTDOT to= label_ref CLOSE_BRACE using= label_ref -> ^( I_CATCH[$start, \"I_CATCH\"] nonvoid_type_descriptor $from $to $using) ; public final smaliParser.catch_directive_return catch_directive() throws RecognitionException { smaliParser.catch_directive_return retval = new smaliParser.catch_directive_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token CATCH_DIRECTIVE195=null; - Token OPEN_BRACE197=null; - Token DOTDOT198=null; - Token CLOSE_BRACE199=null; + Token CATCH_DIRECTIVE223=null; + Token OPEN_BRACE225=null; + Token DOTDOT226=null; + Token CLOSE_BRACE227=null; ParserRuleReturnScope from =null; ParserRuleReturnScope to =null; ParserRuleReturnScope using =null; - ParserRuleReturnScope nonvoid_type_descriptor196 =null; + ParserRuleReturnScope nonvoid_type_descriptor224 =null; - CommonTree CATCH_DIRECTIVE195_tree=null; - CommonTree OPEN_BRACE197_tree=null; - CommonTree DOTDOT198_tree=null; - CommonTree CLOSE_BRACE199_tree=null; + CommonTree CATCH_DIRECTIVE223_tree=null; + CommonTree OPEN_BRACE225_tree=null; + CommonTree DOTDOT226_tree=null; + CommonTree CLOSE_BRACE227_tree=null; RewriteRuleTokenStream stream_OPEN_BRACE=new RewriteRuleTokenStream(adaptor,"token OPEN_BRACE"); RewriteRuleTokenStream stream_CLOSE_BRACE=new RewriteRuleTokenStream(adaptor,"token CLOSE_BRACE"); RewriteRuleTokenStream stream_DOTDOT=new RewriteRuleTokenStream(adaptor,"token DOTDOT"); @@ -7689,43 +8447,43 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_nonvoid_type_descriptor=new RewriteRuleSubtreeStream(adaptor,"rule nonvoid_type_descriptor"); try { - // smaliParser.g:727:3: ( CATCH_DIRECTIVE nonvoid_type_descriptor OPEN_BRACE from= label_ref DOTDOT to= label_ref CLOSE_BRACE using= label_ref -> ^( I_CATCH[$start, \"I_CATCH\"] nonvoid_type_descriptor $from $to $using) ) - // smaliParser.g:727:5: CATCH_DIRECTIVE nonvoid_type_descriptor OPEN_BRACE from= label_ref DOTDOT to= label_ref CLOSE_BRACE using= label_ref + // smaliParser.g:761:3: ( CATCH_DIRECTIVE nonvoid_type_descriptor OPEN_BRACE from= label_ref DOTDOT to= label_ref CLOSE_BRACE using= label_ref -> ^( I_CATCH[$start, \"I_CATCH\"] nonvoid_type_descriptor $from $to $using) ) + // smaliParser.g:761:5: CATCH_DIRECTIVE nonvoid_type_descriptor OPEN_BRACE from= label_ref DOTDOT to= label_ref CLOSE_BRACE using= label_ref { - CATCH_DIRECTIVE195=(Token)match(input,CATCH_DIRECTIVE,FOLLOW_CATCH_DIRECTIVE_in_catch_directive3168); - stream_CATCH_DIRECTIVE.add(CATCH_DIRECTIVE195); + CATCH_DIRECTIVE223=(Token)match(input,CATCH_DIRECTIVE,FOLLOW_CATCH_DIRECTIVE_in_catch_directive3438); + stream_CATCH_DIRECTIVE.add(CATCH_DIRECTIVE223); - pushFollow(FOLLOW_nonvoid_type_descriptor_in_catch_directive3170); - nonvoid_type_descriptor196=nonvoid_type_descriptor(); + pushFollow(FOLLOW_nonvoid_type_descriptor_in_catch_directive3440); + nonvoid_type_descriptor224=nonvoid_type_descriptor(); state._fsp--; - stream_nonvoid_type_descriptor.add(nonvoid_type_descriptor196.getTree()); - OPEN_BRACE197=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_catch_directive3172); - stream_OPEN_BRACE.add(OPEN_BRACE197); + stream_nonvoid_type_descriptor.add(nonvoid_type_descriptor224.getTree()); + OPEN_BRACE225=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_catch_directive3442); + stream_OPEN_BRACE.add(OPEN_BRACE225); - pushFollow(FOLLOW_label_ref_in_catch_directive3176); + pushFollow(FOLLOW_label_ref_in_catch_directive3446); from=label_ref(); state._fsp--; stream_label_ref.add(from.getTree()); - DOTDOT198=(Token)match(input,DOTDOT,FOLLOW_DOTDOT_in_catch_directive3178); - stream_DOTDOT.add(DOTDOT198); + DOTDOT226=(Token)match(input,DOTDOT,FOLLOW_DOTDOT_in_catch_directive3448); + stream_DOTDOT.add(DOTDOT226); - pushFollow(FOLLOW_label_ref_in_catch_directive3182); + pushFollow(FOLLOW_label_ref_in_catch_directive3452); to=label_ref(); state._fsp--; stream_label_ref.add(to.getTree()); - CLOSE_BRACE199=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_catch_directive3184); - stream_CLOSE_BRACE.add(CLOSE_BRACE199); + CLOSE_BRACE227=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_catch_directive3454); + stream_CLOSE_BRACE.add(CLOSE_BRACE227); - pushFollow(FOLLOW_label_ref_in_catch_directive3188); + pushFollow(FOLLOW_label_ref_in_catch_directive3458); using=label_ref(); state._fsp--; stream_label_ref.add(using.getTree()); // AST REWRITE - // elements: from, nonvoid_type_descriptor, using, to + // elements: using, to, nonvoid_type_descriptor, from // token labels: // rule labels: using, from, to, retval // token list labels: @@ -7738,9 +8496,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 728:5: -> ^( I_CATCH[$start, \"I_CATCH\"] nonvoid_type_descriptor $from $to $using) + // 762:5: -> ^( I_CATCH[$start, \"I_CATCH\"] nonvoid_type_descriptor $from $to $using) { - // smaliParser.g:728:8: ^( I_CATCH[$start, \"I_CATCH\"] nonvoid_type_descriptor $from $to $using) + // smaliParser.g:762:8: ^( I_CATCH[$start, \"I_CATCH\"] nonvoid_type_descriptor $from $to $using) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_CATCH, (retval.start), "I_CATCH"), root_1); @@ -7785,25 +8543,25 @@ public class smaliParser extends Parser { // $ANTLR start "catchall_directive" - // smaliParser.g:730:1: catchall_directive : CATCHALL_DIRECTIVE OPEN_BRACE from= label_ref DOTDOT to= label_ref CLOSE_BRACE using= label_ref -> ^( I_CATCHALL[$start, \"I_CATCHALL\"] $from $to $using) ; + // smaliParser.g:764:1: catchall_directive : CATCHALL_DIRECTIVE OPEN_BRACE from= label_ref DOTDOT to= label_ref CLOSE_BRACE using= label_ref -> ^( I_CATCHALL[$start, \"I_CATCHALL\"] $from $to $using) ; public final smaliParser.catchall_directive_return catchall_directive() throws RecognitionException { smaliParser.catchall_directive_return retval = new smaliParser.catchall_directive_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token CATCHALL_DIRECTIVE200=null; - Token OPEN_BRACE201=null; - Token DOTDOT202=null; - Token CLOSE_BRACE203=null; + Token CATCHALL_DIRECTIVE228=null; + Token OPEN_BRACE229=null; + Token DOTDOT230=null; + Token CLOSE_BRACE231=null; ParserRuleReturnScope from =null; ParserRuleReturnScope to =null; ParserRuleReturnScope using =null; - CommonTree CATCHALL_DIRECTIVE200_tree=null; - CommonTree OPEN_BRACE201_tree=null; - CommonTree DOTDOT202_tree=null; - CommonTree CLOSE_BRACE203_tree=null; + CommonTree CATCHALL_DIRECTIVE228_tree=null; + CommonTree OPEN_BRACE229_tree=null; + CommonTree DOTDOT230_tree=null; + CommonTree CLOSE_BRACE231_tree=null; RewriteRuleTokenStream stream_OPEN_BRACE=new RewriteRuleTokenStream(adaptor,"token OPEN_BRACE"); RewriteRuleTokenStream stream_CLOSE_BRACE=new RewriteRuleTokenStream(adaptor,"token CLOSE_BRACE"); RewriteRuleTokenStream stream_DOTDOT=new RewriteRuleTokenStream(adaptor,"token DOTDOT"); @@ -7811,38 +8569,38 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_label_ref=new RewriteRuleSubtreeStream(adaptor,"rule label_ref"); try { - // smaliParser.g:731:3: ( CATCHALL_DIRECTIVE OPEN_BRACE from= label_ref DOTDOT to= label_ref CLOSE_BRACE using= label_ref -> ^( I_CATCHALL[$start, \"I_CATCHALL\"] $from $to $using) ) - // smaliParser.g:731:5: CATCHALL_DIRECTIVE OPEN_BRACE from= label_ref DOTDOT to= label_ref CLOSE_BRACE using= label_ref + // smaliParser.g:765:3: ( CATCHALL_DIRECTIVE OPEN_BRACE from= label_ref DOTDOT to= label_ref CLOSE_BRACE using= label_ref -> ^( I_CATCHALL[$start, \"I_CATCHALL\"] $from $to $using) ) + // smaliParser.g:765:5: CATCHALL_DIRECTIVE OPEN_BRACE from= label_ref DOTDOT to= label_ref CLOSE_BRACE using= label_ref { - CATCHALL_DIRECTIVE200=(Token)match(input,CATCHALL_DIRECTIVE,FOLLOW_CATCHALL_DIRECTIVE_in_catchall_directive3220); - stream_CATCHALL_DIRECTIVE.add(CATCHALL_DIRECTIVE200); + CATCHALL_DIRECTIVE228=(Token)match(input,CATCHALL_DIRECTIVE,FOLLOW_CATCHALL_DIRECTIVE_in_catchall_directive3490); + stream_CATCHALL_DIRECTIVE.add(CATCHALL_DIRECTIVE228); - OPEN_BRACE201=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_catchall_directive3222); - stream_OPEN_BRACE.add(OPEN_BRACE201); + OPEN_BRACE229=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_catchall_directive3492); + stream_OPEN_BRACE.add(OPEN_BRACE229); - pushFollow(FOLLOW_label_ref_in_catchall_directive3226); + pushFollow(FOLLOW_label_ref_in_catchall_directive3496); from=label_ref(); state._fsp--; stream_label_ref.add(from.getTree()); - DOTDOT202=(Token)match(input,DOTDOT,FOLLOW_DOTDOT_in_catchall_directive3228); - stream_DOTDOT.add(DOTDOT202); + DOTDOT230=(Token)match(input,DOTDOT,FOLLOW_DOTDOT_in_catchall_directive3498); + stream_DOTDOT.add(DOTDOT230); - pushFollow(FOLLOW_label_ref_in_catchall_directive3232); + pushFollow(FOLLOW_label_ref_in_catchall_directive3502); to=label_ref(); state._fsp--; stream_label_ref.add(to.getTree()); - CLOSE_BRACE203=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_catchall_directive3234); - stream_CLOSE_BRACE.add(CLOSE_BRACE203); + CLOSE_BRACE231=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_catchall_directive3504); + stream_CLOSE_BRACE.add(CLOSE_BRACE231); - pushFollow(FOLLOW_label_ref_in_catchall_directive3238); + pushFollow(FOLLOW_label_ref_in_catchall_directive3508); using=label_ref(); state._fsp--; stream_label_ref.add(using.getTree()); // AST REWRITE - // elements: using, to, from + // elements: to, from, using // token labels: // rule labels: using, from, to, retval // token list labels: @@ -7855,9 +8613,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 732:5: -> ^( I_CATCHALL[$start, \"I_CATCHALL\"] $from $to $using) + // 766:5: -> ^( I_CATCHALL[$start, \"I_CATCHALL\"] $from $to $using) { - // smaliParser.g:732:8: ^( I_CATCHALL[$start, \"I_CATCHALL\"] $from $to $using) + // smaliParser.g:766:8: ^( I_CATCHALL[$start, \"I_CATCHALL\"] $from $to $using) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_CATCHALL, (retval.start), "I_CATCHALL"), root_1); @@ -7901,25 +8659,25 @@ public class smaliParser extends Parser { // $ANTLR start "parameter_directive" - // smaliParser.g:738:1: parameter_directive : PARAMETER_DIRECTIVE REGISTER ( COMMA STRING_LITERAL )? ({...}? annotation )* ( END_PARAMETER_DIRECTIVE -> ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ( annotation )* ) ) | -> ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ) ) ) ; + // smaliParser.g:772:1: parameter_directive : PARAMETER_DIRECTIVE REGISTER ( COMMA STRING_LITERAL )? ({...}? annotation )* ( END_PARAMETER_DIRECTIVE -> ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ( annotation )* ) ) | -> ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ) ) ) ; public final smaliParser.parameter_directive_return parameter_directive() throws RecognitionException { smaliParser.parameter_directive_return retval = new smaliParser.parameter_directive_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token PARAMETER_DIRECTIVE204=null; - Token REGISTER205=null; - Token COMMA206=null; - Token STRING_LITERAL207=null; - Token END_PARAMETER_DIRECTIVE209=null; - ParserRuleReturnScope annotation208 =null; - - CommonTree PARAMETER_DIRECTIVE204_tree=null; - CommonTree REGISTER205_tree=null; - CommonTree COMMA206_tree=null; - CommonTree STRING_LITERAL207_tree=null; - CommonTree END_PARAMETER_DIRECTIVE209_tree=null; + Token PARAMETER_DIRECTIVE232=null; + Token REGISTER233=null; + Token COMMA234=null; + Token STRING_LITERAL235=null; + Token END_PARAMETER_DIRECTIVE237=null; + ParserRuleReturnScope annotation236 =null; + + CommonTree PARAMETER_DIRECTIVE232_tree=null; + CommonTree REGISTER233_tree=null; + CommonTree COMMA234_tree=null; + CommonTree STRING_LITERAL235_tree=null; + CommonTree END_PARAMETER_DIRECTIVE237_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_PARAMETER_DIRECTIVE=new RewriteRuleTokenStream(adaptor,"token PARAMETER_DIRECTIVE"); @@ -7929,84 +8687,84 @@ public class smaliParser extends Parser { List<CommonTree> annotations = new ArrayList<CommonTree>(); try { - // smaliParser.g:740:3: ( PARAMETER_DIRECTIVE REGISTER ( COMMA STRING_LITERAL )? ({...}? annotation )* ( END_PARAMETER_DIRECTIVE -> ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ( annotation )* ) ) | -> ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ) ) ) ) - // smaliParser.g:740:5: PARAMETER_DIRECTIVE REGISTER ( COMMA STRING_LITERAL )? ({...}? annotation )* ( END_PARAMETER_DIRECTIVE -> ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ( annotation )* ) ) | -> ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ) ) ) + // smaliParser.g:774:3: ( PARAMETER_DIRECTIVE REGISTER ( COMMA STRING_LITERAL )? ({...}? annotation )* ( END_PARAMETER_DIRECTIVE -> ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ( annotation )* ) ) | -> ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ) ) ) ) + // smaliParser.g:774:5: PARAMETER_DIRECTIVE REGISTER ( COMMA STRING_LITERAL )? ({...}? annotation )* ( END_PARAMETER_DIRECTIVE -> ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ( annotation )* ) ) | -> ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ) ) ) { - PARAMETER_DIRECTIVE204=(Token)match(input,PARAMETER_DIRECTIVE,FOLLOW_PARAMETER_DIRECTIVE_in_parameter_directive3277); - stream_PARAMETER_DIRECTIVE.add(PARAMETER_DIRECTIVE204); + PARAMETER_DIRECTIVE232=(Token)match(input,PARAMETER_DIRECTIVE,FOLLOW_PARAMETER_DIRECTIVE_in_parameter_directive3547); + stream_PARAMETER_DIRECTIVE.add(PARAMETER_DIRECTIVE232); - REGISTER205=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_parameter_directive3279); - stream_REGISTER.add(REGISTER205); + REGISTER233=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_parameter_directive3549); + stream_REGISTER.add(REGISTER233); - // smaliParser.g:740:34: ( COMMA STRING_LITERAL )? - int alt39=2; - int LA39_0 = input.LA(1); - if ( (LA39_0==COMMA) ) { - alt39=1; + // smaliParser.g:774:34: ( COMMA STRING_LITERAL )? + int alt41=2; + int LA41_0 = input.LA(1); + if ( (LA41_0==COMMA) ) { + alt41=1; } - switch (alt39) { + switch (alt41) { case 1 : - // smaliParser.g:740:35: COMMA STRING_LITERAL + // smaliParser.g:774:35: COMMA STRING_LITERAL { - COMMA206=(Token)match(input,COMMA,FOLLOW_COMMA_in_parameter_directive3282); - stream_COMMA.add(COMMA206); + COMMA234=(Token)match(input,COMMA,FOLLOW_COMMA_in_parameter_directive3552); + stream_COMMA.add(COMMA234); - STRING_LITERAL207=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_parameter_directive3284); - stream_STRING_LITERAL.add(STRING_LITERAL207); + STRING_LITERAL235=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_parameter_directive3554); + stream_STRING_LITERAL.add(STRING_LITERAL235); } break; } - // smaliParser.g:741:5: ({...}? annotation )* - loop40: + // smaliParser.g:775:5: ({...}? annotation )* + loop42: while (true) { - int alt40=2; - alt40 = dfa40.predict(input); - switch (alt40) { + int alt42=2; + alt42 = dfa42.predict(input); + switch (alt42) { case 1 : - // smaliParser.g:741:6: {...}? annotation + // smaliParser.g:775:6: {...}? annotation { if ( !((input.LA(1) == ANNOTATION_DIRECTIVE)) ) { throw new FailedPredicateException(input, "parameter_directive", "input.LA(1) == ANNOTATION_DIRECTIVE"); } - pushFollow(FOLLOW_annotation_in_parameter_directive3295); - annotation208=annotation(); + pushFollow(FOLLOW_annotation_in_parameter_directive3565); + annotation236=annotation(); state._fsp--; - stream_annotation.add(annotation208.getTree()); - annotations.add((annotation208!=null?((CommonTree)annotation208.getTree()):null)); + stream_annotation.add(annotation236.getTree()); + annotations.add((annotation236!=null?((CommonTree)annotation236.getTree()):null)); } break; default : - break loop40; + break loop42; } } - // smaliParser.g:743:5: ( END_PARAMETER_DIRECTIVE -> ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ( annotation )* ) ) | -> ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ) ) ) - int alt41=2; - int LA41_0 = input.LA(1); - if ( (LA41_0==END_PARAMETER_DIRECTIVE) ) { - alt41=1; + // smaliParser.g:777:5: ( END_PARAMETER_DIRECTIVE -> ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ( annotation )* ) ) | -> ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ) ) ) + int alt43=2; + int LA43_0 = input.LA(1); + if ( (LA43_0==END_PARAMETER_DIRECTIVE) ) { + alt43=1; } - else if ( (LA41_0==ANNOTATION_DIRECTIVE||LA41_0==ARRAY_DATA_DIRECTIVE||(LA41_0 >= CATCHALL_DIRECTIVE && LA41_0 <= CATCH_DIRECTIVE)||LA41_0==COLON||(LA41_0 >= END_LOCAL_DIRECTIVE && LA41_0 <= END_METHOD_DIRECTIVE)||LA41_0==EPILOGUE_DIRECTIVE||(LA41_0 >= INSTRUCTION_FORMAT10t && LA41_0 <= INSTRUCTION_FORMAT51l)||(LA41_0 >= LINE_DIRECTIVE && LA41_0 <= LOCAL_DIRECTIVE)||(LA41_0 >= PACKED_SWITCH_DIRECTIVE && LA41_0 <= PARAMETER_DIRECTIVE)||LA41_0==PROLOGUE_DIRECTIVE||(LA41_0 >= REGISTERS_DIRECTIVE && LA41_0 <= RESTART_LOCAL_DIRECTIVE)||(LA41_0 >= SOURCE_DIRECTIVE && LA41_0 <= SPARSE_SWITCH_DIRECTIVE)) ) { - alt41=2; + else if ( (LA43_0==ANNOTATION_DIRECTIVE||LA43_0==ARRAY_DATA_DIRECTIVE||(LA43_0 >= CATCHALL_DIRECTIVE && LA43_0 <= CATCH_DIRECTIVE)||LA43_0==COLON||(LA43_0 >= END_LOCAL_DIRECTIVE && LA43_0 <= END_METHOD_DIRECTIVE)||LA43_0==EPILOGUE_DIRECTIVE||(LA43_0 >= INSTRUCTION_FORMAT10t && LA43_0 <= INSTRUCTION_FORMAT51l)||(LA43_0 >= LINE_DIRECTIVE && LA43_0 <= LOCAL_DIRECTIVE)||(LA43_0 >= PACKED_SWITCH_DIRECTIVE && LA43_0 <= PARAMETER_DIRECTIVE)||LA43_0==PROLOGUE_DIRECTIVE||(LA43_0 >= REGISTERS_DIRECTIVE && LA43_0 <= RESTART_LOCAL_DIRECTIVE)||(LA43_0 >= SOURCE_DIRECTIVE && LA43_0 <= SPARSE_SWITCH_DIRECTIVE)) ) { + alt43=2; } else { NoViableAltException nvae = - new NoViableAltException("", 41, 0, input); + new NoViableAltException("", 43, 0, input); throw nvae; } - switch (alt41) { + switch (alt43) { case 1 : - // smaliParser.g:743:7: END_PARAMETER_DIRECTIVE + // smaliParser.g:777:7: END_PARAMETER_DIRECTIVE { - END_PARAMETER_DIRECTIVE209=(Token)match(input,END_PARAMETER_DIRECTIVE,FOLLOW_END_PARAMETER_DIRECTIVE_in_parameter_directive3308); - stream_END_PARAMETER_DIRECTIVE.add(END_PARAMETER_DIRECTIVE209); + END_PARAMETER_DIRECTIVE237=(Token)match(input,END_PARAMETER_DIRECTIVE,FOLLOW_END_PARAMETER_DIRECTIVE_in_parameter_directive3578); + stream_END_PARAMETER_DIRECTIVE.add(END_PARAMETER_DIRECTIVE237); // AST REWRITE // elements: STRING_LITERAL, annotation, REGISTER @@ -8019,24 +8777,24 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 744:7: -> ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ( annotation )* ) ) + // 778:7: -> ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ( annotation )* ) ) { - // smaliParser.g:744:10: ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ( annotation )* ) ) + // smaliParser.g:778:10: ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ( annotation )* ) ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_PARAMETER, (retval.start), "I_PARAMETER"), root_1); adaptor.addChild(root_1, stream_REGISTER.nextNode()); - // smaliParser.g:744:56: ( STRING_LITERAL )? + // smaliParser.g:778:56: ( STRING_LITERAL )? if ( stream_STRING_LITERAL.hasNext() ) { adaptor.addChild(root_1, stream_STRING_LITERAL.nextNode()); } stream_STRING_LITERAL.reset(); - // smaliParser.g:744:72: ^( I_ANNOTATIONS ( annotation )* ) + // smaliParser.g:778:72: ^( I_ANNOTATIONS ( annotation )* ) { CommonTree root_2 = (CommonTree)adaptor.nil(); root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_ANNOTATIONS, "I_ANNOTATIONS"), root_2); - // smaliParser.g:744:88: ( annotation )* + // smaliParser.g:778:88: ( annotation )* while ( stream_annotation.hasNext() ) { adaptor.addChild(root_2, stream_annotation.nextTree()); } @@ -8056,11 +8814,11 @@ public class smaliParser extends Parser { } break; case 2 : - // smaliParser.g:745:19: + // smaliParser.g:779:19: { statements_and_directives_stack.peek().methodAnnotations.addAll(annotations); // AST REWRITE - // elements: STRING_LITERAL, REGISTER + // elements: REGISTER, STRING_LITERAL // token labels: // rule labels: retval // token list labels: @@ -8070,20 +8828,20 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 746:7: -> ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ) ) + // 780:7: -> ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ) ) { - // smaliParser.g:746:10: ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ) ) + // smaliParser.g:780:10: ^( I_PARAMETER[$start, \"I_PARAMETER\"] REGISTER ( STRING_LITERAL )? ^( I_ANNOTATIONS ) ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_PARAMETER, (retval.start), "I_PARAMETER"), root_1); adaptor.addChild(root_1, stream_REGISTER.nextNode()); - // smaliParser.g:746:56: ( STRING_LITERAL )? + // smaliParser.g:780:56: ( STRING_LITERAL )? if ( stream_STRING_LITERAL.hasNext() ) { adaptor.addChild(root_1, stream_STRING_LITERAL.nextNode()); } stream_STRING_LITERAL.reset(); - // smaliParser.g:746:72: ^( I_ANNOTATIONS ) + // smaliParser.g:780:72: ^( I_ANNOTATIONS ) { CommonTree root_2 = (CommonTree)adaptor.nil(); root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_ANNOTATIONS, "I_ANNOTATIONS"), root_2); @@ -8132,162 +8890,162 @@ public class smaliParser extends Parser { // $ANTLR start "debug_directive" - // smaliParser.g:749:1: debug_directive : ( line_directive | local_directive | end_local_directive | restart_local_directive | prologue_directive | epilogue_directive | source_directive ); + // smaliParser.g:783:1: debug_directive : ( line_directive | local_directive | end_local_directive | restart_local_directive | prologue_directive | epilogue_directive | source_directive ); public final smaliParser.debug_directive_return debug_directive() throws RecognitionException { smaliParser.debug_directive_return retval = new smaliParser.debug_directive_return(); retval.start = input.LT(1); CommonTree root_0 = null; - ParserRuleReturnScope line_directive210 =null; - ParserRuleReturnScope local_directive211 =null; - ParserRuleReturnScope end_local_directive212 =null; - ParserRuleReturnScope restart_local_directive213 =null; - ParserRuleReturnScope prologue_directive214 =null; - ParserRuleReturnScope epilogue_directive215 =null; - ParserRuleReturnScope source_directive216 =null; + ParserRuleReturnScope line_directive238 =null; + ParserRuleReturnScope local_directive239 =null; + ParserRuleReturnScope end_local_directive240 =null; + ParserRuleReturnScope restart_local_directive241 =null; + ParserRuleReturnScope prologue_directive242 =null; + ParserRuleReturnScope epilogue_directive243 =null; + ParserRuleReturnScope source_directive244 =null; try { - // smaliParser.g:750:3: ( line_directive | local_directive | end_local_directive | restart_local_directive | prologue_directive | epilogue_directive | source_directive ) - int alt42=7; + // smaliParser.g:784:3: ( line_directive | local_directive | end_local_directive | restart_local_directive | prologue_directive | epilogue_directive | source_directive ) + int alt44=7; switch ( input.LA(1) ) { case LINE_DIRECTIVE: { - alt42=1; + alt44=1; } break; case LOCAL_DIRECTIVE: { - alt42=2; + alt44=2; } break; case END_LOCAL_DIRECTIVE: { - alt42=3; + alt44=3; } break; case RESTART_LOCAL_DIRECTIVE: { - alt42=4; + alt44=4; } break; case PROLOGUE_DIRECTIVE: { - alt42=5; + alt44=5; } break; case EPILOGUE_DIRECTIVE: { - alt42=6; + alt44=6; } break; case SOURCE_DIRECTIVE: { - alt42=7; + alt44=7; } break; default: NoViableAltException nvae = - new NoViableAltException("", 42, 0, input); + new NoViableAltException("", 44, 0, input); throw nvae; } - switch (alt42) { + switch (alt44) { case 1 : - // smaliParser.g:750:5: line_directive + // smaliParser.g:784:5: line_directive { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_line_directive_in_debug_directive3381); - line_directive210=line_directive(); + pushFollow(FOLLOW_line_directive_in_debug_directive3651); + line_directive238=line_directive(); state._fsp--; - adaptor.addChild(root_0, line_directive210.getTree()); + adaptor.addChild(root_0, line_directive238.getTree()); } break; case 2 : - // smaliParser.g:751:5: local_directive + // smaliParser.g:785:5: local_directive { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_local_directive_in_debug_directive3387); - local_directive211=local_directive(); + pushFollow(FOLLOW_local_directive_in_debug_directive3657); + local_directive239=local_directive(); state._fsp--; - adaptor.addChild(root_0, local_directive211.getTree()); + adaptor.addChild(root_0, local_directive239.getTree()); } break; case 3 : - // smaliParser.g:752:5: end_local_directive + // smaliParser.g:786:5: end_local_directive { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_end_local_directive_in_debug_directive3393); - end_local_directive212=end_local_directive(); + pushFollow(FOLLOW_end_local_directive_in_debug_directive3663); + end_local_directive240=end_local_directive(); state._fsp--; - adaptor.addChild(root_0, end_local_directive212.getTree()); + adaptor.addChild(root_0, end_local_directive240.getTree()); } break; case 4 : - // smaliParser.g:753:5: restart_local_directive + // smaliParser.g:787:5: restart_local_directive { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_restart_local_directive_in_debug_directive3399); - restart_local_directive213=restart_local_directive(); + pushFollow(FOLLOW_restart_local_directive_in_debug_directive3669); + restart_local_directive241=restart_local_directive(); state._fsp--; - adaptor.addChild(root_0, restart_local_directive213.getTree()); + adaptor.addChild(root_0, restart_local_directive241.getTree()); } break; case 5 : - // smaliParser.g:754:5: prologue_directive + // smaliParser.g:788:5: prologue_directive { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_prologue_directive_in_debug_directive3405); - prologue_directive214=prologue_directive(); + pushFollow(FOLLOW_prologue_directive_in_debug_directive3675); + prologue_directive242=prologue_directive(); state._fsp--; - adaptor.addChild(root_0, prologue_directive214.getTree()); + adaptor.addChild(root_0, prologue_directive242.getTree()); } break; case 6 : - // smaliParser.g:755:5: epilogue_directive + // smaliParser.g:789:5: epilogue_directive { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_epilogue_directive_in_debug_directive3411); - epilogue_directive215=epilogue_directive(); + pushFollow(FOLLOW_epilogue_directive_in_debug_directive3681); + epilogue_directive243=epilogue_directive(); state._fsp--; - adaptor.addChild(root_0, epilogue_directive215.getTree()); + adaptor.addChild(root_0, epilogue_directive243.getTree()); } break; case 7 : - // smaliParser.g:756:5: source_directive + // smaliParser.g:790:5: source_directive { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_source_directive_in_debug_directive3417); - source_directive216=source_directive(); + pushFollow(FOLLOW_source_directive_in_debug_directive3687); + source_directive244=source_directive(); state._fsp--; - adaptor.addChild(root_0, source_directive216.getTree()); + adaptor.addChild(root_0, source_directive244.getTree()); } break; @@ -8320,32 +9078,32 @@ public class smaliParser extends Parser { // $ANTLR start "line_directive" - // smaliParser.g:758:1: line_directive : LINE_DIRECTIVE integral_literal -> ^( I_LINE[$start, \"I_LINE\"] integral_literal ) ; + // smaliParser.g:792:1: line_directive : LINE_DIRECTIVE integral_literal -> ^( I_LINE[$start, \"I_LINE\"] integral_literal ) ; public final smaliParser.line_directive_return line_directive() throws RecognitionException { smaliParser.line_directive_return retval = new smaliParser.line_directive_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token LINE_DIRECTIVE217=null; - ParserRuleReturnScope integral_literal218 =null; + Token LINE_DIRECTIVE245=null; + ParserRuleReturnScope integral_literal246 =null; - CommonTree LINE_DIRECTIVE217_tree=null; + CommonTree LINE_DIRECTIVE245_tree=null; RewriteRuleTokenStream stream_LINE_DIRECTIVE=new RewriteRuleTokenStream(adaptor,"token LINE_DIRECTIVE"); RewriteRuleSubtreeStream stream_integral_literal=new RewriteRuleSubtreeStream(adaptor,"rule integral_literal"); try { - // smaliParser.g:759:3: ( LINE_DIRECTIVE integral_literal -> ^( I_LINE[$start, \"I_LINE\"] integral_literal ) ) - // smaliParser.g:759:5: LINE_DIRECTIVE integral_literal + // smaliParser.g:793:3: ( LINE_DIRECTIVE integral_literal -> ^( I_LINE[$start, \"I_LINE\"] integral_literal ) ) + // smaliParser.g:793:5: LINE_DIRECTIVE integral_literal { - LINE_DIRECTIVE217=(Token)match(input,LINE_DIRECTIVE,FOLLOW_LINE_DIRECTIVE_in_line_directive3427); - stream_LINE_DIRECTIVE.add(LINE_DIRECTIVE217); + LINE_DIRECTIVE245=(Token)match(input,LINE_DIRECTIVE,FOLLOW_LINE_DIRECTIVE_in_line_directive3697); + stream_LINE_DIRECTIVE.add(LINE_DIRECTIVE245); - pushFollow(FOLLOW_integral_literal_in_line_directive3429); - integral_literal218=integral_literal(); + pushFollow(FOLLOW_integral_literal_in_line_directive3699); + integral_literal246=integral_literal(); state._fsp--; - stream_integral_literal.add(integral_literal218.getTree()); + stream_integral_literal.add(integral_literal246.getTree()); // AST REWRITE // elements: integral_literal // token labels: @@ -8357,9 +9115,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 760:5: -> ^( I_LINE[$start, \"I_LINE\"] integral_literal ) + // 794:5: -> ^( I_LINE[$start, \"I_LINE\"] integral_literal ) { - // smaliParser.g:760:8: ^( I_LINE[$start, \"I_LINE\"] integral_literal ) + // smaliParser.g:794:8: ^( I_LINE[$start, \"I_LINE\"] integral_literal ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_LINE, (retval.start), "I_LINE"), root_1); @@ -8401,7 +9159,7 @@ public class smaliParser extends Parser { // $ANTLR start "local_directive" - // smaliParser.g:762:1: local_directive : LOCAL_DIRECTIVE REGISTER ( COMMA ( NULL_LITERAL |name= STRING_LITERAL ) COLON ( VOID_TYPE | nonvoid_type_descriptor ) ( COMMA signature= STRING_LITERAL )? )? -> ^( I_LOCAL[$start, \"I_LOCAL\"] REGISTER ( NULL_LITERAL )? ( $name)? ( nonvoid_type_descriptor )? ( $signature)? ) ; + // smaliParser.g:796:1: local_directive : LOCAL_DIRECTIVE REGISTER ( COMMA ( NULL_LITERAL |name= STRING_LITERAL ) COLON ( VOID_TYPE | nonvoid_type_descriptor ) ( COMMA signature= STRING_LITERAL )? )? -> ^( I_LOCAL[$start, \"I_LOCAL\"] REGISTER ( NULL_LITERAL )? ( $name)? ( nonvoid_type_descriptor )? ( $signature)? ) ; public final smaliParser.local_directive_return local_directive() throws RecognitionException { smaliParser.local_directive_return retval = new smaliParser.local_directive_return(); retval.start = input.LT(1); @@ -8410,24 +9168,24 @@ public class smaliParser extends Parser { Token name=null; Token signature=null; - Token LOCAL_DIRECTIVE219=null; - Token REGISTER220=null; - Token COMMA221=null; - Token NULL_LITERAL222=null; - Token COLON223=null; - Token VOID_TYPE224=null; - Token COMMA226=null; - ParserRuleReturnScope nonvoid_type_descriptor225 =null; + Token LOCAL_DIRECTIVE247=null; + Token REGISTER248=null; + Token COMMA249=null; + Token NULL_LITERAL250=null; + Token COLON251=null; + Token VOID_TYPE252=null; + Token COMMA254=null; + ParserRuleReturnScope nonvoid_type_descriptor253 =null; CommonTree name_tree=null; CommonTree signature_tree=null; - CommonTree LOCAL_DIRECTIVE219_tree=null; - CommonTree REGISTER220_tree=null; - CommonTree COMMA221_tree=null; - CommonTree NULL_LITERAL222_tree=null; - CommonTree COLON223_tree=null; - CommonTree VOID_TYPE224_tree=null; - CommonTree COMMA226_tree=null; + CommonTree LOCAL_DIRECTIVE247_tree=null; + CommonTree REGISTER248_tree=null; + CommonTree COMMA249_tree=null; + CommonTree NULL_LITERAL250_tree=null; + CommonTree COLON251_tree=null; + CommonTree VOID_TYPE252_tree=null; + CommonTree COMMA254_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_LOCAL_DIRECTIVE=new RewriteRuleTokenStream(adaptor,"token LOCAL_DIRECTIVE"); @@ -8438,57 +9196,57 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_nonvoid_type_descriptor=new RewriteRuleSubtreeStream(adaptor,"rule nonvoid_type_descriptor"); try { - // smaliParser.g:763:3: ( LOCAL_DIRECTIVE REGISTER ( COMMA ( NULL_LITERAL |name= STRING_LITERAL ) COLON ( VOID_TYPE | nonvoid_type_descriptor ) ( COMMA signature= STRING_LITERAL )? )? -> ^( I_LOCAL[$start, \"I_LOCAL\"] REGISTER ( NULL_LITERAL )? ( $name)? ( nonvoid_type_descriptor )? ( $signature)? ) ) - // smaliParser.g:763:5: LOCAL_DIRECTIVE REGISTER ( COMMA ( NULL_LITERAL |name= STRING_LITERAL ) COLON ( VOID_TYPE | nonvoid_type_descriptor ) ( COMMA signature= STRING_LITERAL )? )? + // smaliParser.g:797:3: ( LOCAL_DIRECTIVE REGISTER ( COMMA ( NULL_LITERAL |name= STRING_LITERAL ) COLON ( VOID_TYPE | nonvoid_type_descriptor ) ( COMMA signature= STRING_LITERAL )? )? -> ^( I_LOCAL[$start, \"I_LOCAL\"] REGISTER ( NULL_LITERAL )? ( $name)? ( nonvoid_type_descriptor )? ( $signature)? ) ) + // smaliParser.g:797:5: LOCAL_DIRECTIVE REGISTER ( COMMA ( NULL_LITERAL |name= STRING_LITERAL ) COLON ( VOID_TYPE | nonvoid_type_descriptor ) ( COMMA signature= STRING_LITERAL )? )? { - LOCAL_DIRECTIVE219=(Token)match(input,LOCAL_DIRECTIVE,FOLLOW_LOCAL_DIRECTIVE_in_local_directive3452); - stream_LOCAL_DIRECTIVE.add(LOCAL_DIRECTIVE219); + LOCAL_DIRECTIVE247=(Token)match(input,LOCAL_DIRECTIVE,FOLLOW_LOCAL_DIRECTIVE_in_local_directive3722); + stream_LOCAL_DIRECTIVE.add(LOCAL_DIRECTIVE247); - REGISTER220=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_local_directive3454); - stream_REGISTER.add(REGISTER220); + REGISTER248=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_local_directive3724); + stream_REGISTER.add(REGISTER248); - // smaliParser.g:763:30: ( COMMA ( NULL_LITERAL |name= STRING_LITERAL ) COLON ( VOID_TYPE | nonvoid_type_descriptor ) ( COMMA signature= STRING_LITERAL )? )? - int alt46=2; - int LA46_0 = input.LA(1); - if ( (LA46_0==COMMA) ) { - alt46=1; + // smaliParser.g:797:30: ( COMMA ( NULL_LITERAL |name= STRING_LITERAL ) COLON ( VOID_TYPE | nonvoid_type_descriptor ) ( COMMA signature= STRING_LITERAL )? )? + int alt48=2; + int LA48_0 = input.LA(1); + if ( (LA48_0==COMMA) ) { + alt48=1; } - switch (alt46) { + switch (alt48) { case 1 : - // smaliParser.g:763:31: COMMA ( NULL_LITERAL |name= STRING_LITERAL ) COLON ( VOID_TYPE | nonvoid_type_descriptor ) ( COMMA signature= STRING_LITERAL )? + // smaliParser.g:797:31: COMMA ( NULL_LITERAL |name= STRING_LITERAL ) COLON ( VOID_TYPE | nonvoid_type_descriptor ) ( COMMA signature= STRING_LITERAL )? { - COMMA221=(Token)match(input,COMMA,FOLLOW_COMMA_in_local_directive3457); - stream_COMMA.add(COMMA221); + COMMA249=(Token)match(input,COMMA,FOLLOW_COMMA_in_local_directive3727); + stream_COMMA.add(COMMA249); - // smaliParser.g:763:37: ( NULL_LITERAL |name= STRING_LITERAL ) - int alt43=2; - int LA43_0 = input.LA(1); - if ( (LA43_0==NULL_LITERAL) ) { - alt43=1; + // smaliParser.g:797:37: ( NULL_LITERAL |name= STRING_LITERAL ) + int alt45=2; + int LA45_0 = input.LA(1); + if ( (LA45_0==NULL_LITERAL) ) { + alt45=1; } - else if ( (LA43_0==STRING_LITERAL) ) { - alt43=2; + else if ( (LA45_0==STRING_LITERAL) ) { + alt45=2; } else { NoViableAltException nvae = - new NoViableAltException("", 43, 0, input); + new NoViableAltException("", 45, 0, input); throw nvae; } - switch (alt43) { + switch (alt45) { case 1 : - // smaliParser.g:763:38: NULL_LITERAL + // smaliParser.g:797:38: NULL_LITERAL { - NULL_LITERAL222=(Token)match(input,NULL_LITERAL,FOLLOW_NULL_LITERAL_in_local_directive3460); - stream_NULL_LITERAL.add(NULL_LITERAL222); + NULL_LITERAL250=(Token)match(input,NULL_LITERAL,FOLLOW_NULL_LITERAL_in_local_directive3730); + stream_NULL_LITERAL.add(NULL_LITERAL250); } break; case 2 : - // smaliParser.g:763:53: name= STRING_LITERAL + // smaliParser.g:797:53: name= STRING_LITERAL { - name=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_local_directive3466); + name=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_local_directive3736); stream_STRING_LITERAL.add(name); } @@ -8496,61 +9254,61 @@ public class smaliParser extends Parser { } - COLON223=(Token)match(input,COLON,FOLLOW_COLON_in_local_directive3469); - stream_COLON.add(COLON223); + COLON251=(Token)match(input,COLON,FOLLOW_COLON_in_local_directive3739); + stream_COLON.add(COLON251); - // smaliParser.g:763:80: ( VOID_TYPE | nonvoid_type_descriptor ) - int alt44=2; - int LA44_0 = input.LA(1); - if ( (LA44_0==VOID_TYPE) ) { - alt44=1; + // smaliParser.g:797:80: ( VOID_TYPE | nonvoid_type_descriptor ) + int alt46=2; + int LA46_0 = input.LA(1); + if ( (LA46_0==VOID_TYPE) ) { + alt46=1; } - else if ( (LA44_0==ARRAY_TYPE_PREFIX||LA44_0==CLASS_DESCRIPTOR||LA44_0==PRIMITIVE_TYPE) ) { - alt44=2; + else if ( (LA46_0==ARRAY_TYPE_PREFIX||LA46_0==CLASS_DESCRIPTOR||LA46_0==PRIMITIVE_TYPE) ) { + alt46=2; } else { NoViableAltException nvae = - new NoViableAltException("", 44, 0, input); + new NoViableAltException("", 46, 0, input); throw nvae; } - switch (alt44) { + switch (alt46) { case 1 : - // smaliParser.g:763:81: VOID_TYPE + // smaliParser.g:797:81: VOID_TYPE { - VOID_TYPE224=(Token)match(input,VOID_TYPE,FOLLOW_VOID_TYPE_in_local_directive3472); - stream_VOID_TYPE.add(VOID_TYPE224); + VOID_TYPE252=(Token)match(input,VOID_TYPE,FOLLOW_VOID_TYPE_in_local_directive3742); + stream_VOID_TYPE.add(VOID_TYPE252); } break; case 2 : - // smaliParser.g:763:93: nonvoid_type_descriptor + // smaliParser.g:797:93: nonvoid_type_descriptor { - pushFollow(FOLLOW_nonvoid_type_descriptor_in_local_directive3476); - nonvoid_type_descriptor225=nonvoid_type_descriptor(); + pushFollow(FOLLOW_nonvoid_type_descriptor_in_local_directive3746); + nonvoid_type_descriptor253=nonvoid_type_descriptor(); state._fsp--; - stream_nonvoid_type_descriptor.add(nonvoid_type_descriptor225.getTree()); + stream_nonvoid_type_descriptor.add(nonvoid_type_descriptor253.getTree()); } break; } - // smaliParser.g:764:31: ( COMMA signature= STRING_LITERAL )? - int alt45=2; - int LA45_0 = input.LA(1); - if ( (LA45_0==COMMA) ) { - alt45=1; + // smaliParser.g:798:31: ( COMMA signature= STRING_LITERAL )? + int alt47=2; + int LA47_0 = input.LA(1); + if ( (LA47_0==COMMA) ) { + alt47=1; } - switch (alt45) { + switch (alt47) { case 1 : - // smaliParser.g:764:32: COMMA signature= STRING_LITERAL + // smaliParser.g:798:32: COMMA signature= STRING_LITERAL { - COMMA226=(Token)match(input,COMMA,FOLLOW_COMMA_in_local_directive3510); - stream_COMMA.add(COMMA226); + COMMA254=(Token)match(input,COMMA,FOLLOW_COMMA_in_local_directive3780); + stream_COMMA.add(COMMA254); - signature=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_local_directive3514); + signature=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_local_directive3784); stream_STRING_LITERAL.add(signature); } @@ -8564,7 +9322,7 @@ public class smaliParser extends Parser { } // AST REWRITE - // elements: name, NULL_LITERAL, nonvoid_type_descriptor, REGISTER, signature + // elements: name, NULL_LITERAL, signature, nonvoid_type_descriptor, REGISTER // token labels: signature, name // rule labels: retval // token list labels: @@ -8576,32 +9334,32 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 765:5: -> ^( I_LOCAL[$start, \"I_LOCAL\"] REGISTER ( NULL_LITERAL )? ( $name)? ( nonvoid_type_descriptor )? ( $signature)? ) + // 799:5: -> ^( I_LOCAL[$start, \"I_LOCAL\"] REGISTER ( NULL_LITERAL )? ( $name)? ( nonvoid_type_descriptor )? ( $signature)? ) { - // smaliParser.g:765:8: ^( I_LOCAL[$start, \"I_LOCAL\"] REGISTER ( NULL_LITERAL )? ( $name)? ( nonvoid_type_descriptor )? ( $signature)? ) + // smaliParser.g:799:8: ^( I_LOCAL[$start, \"I_LOCAL\"] REGISTER ( NULL_LITERAL )? ( $name)? ( nonvoid_type_descriptor )? ( $signature)? ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_LOCAL, (retval.start), "I_LOCAL"), root_1); adaptor.addChild(root_1, stream_REGISTER.nextNode()); - // smaliParser.g:765:46: ( NULL_LITERAL )? + // smaliParser.g:799:46: ( NULL_LITERAL )? if ( stream_NULL_LITERAL.hasNext() ) { adaptor.addChild(root_1, stream_NULL_LITERAL.nextNode()); } stream_NULL_LITERAL.reset(); - // smaliParser.g:765:61: ( $name)? + // smaliParser.g:799:61: ( $name)? if ( stream_name.hasNext() ) { adaptor.addChild(root_1, stream_name.nextNode()); } stream_name.reset(); - // smaliParser.g:765:67: ( nonvoid_type_descriptor )? + // smaliParser.g:799:67: ( nonvoid_type_descriptor )? if ( stream_nonvoid_type_descriptor.hasNext() ) { adaptor.addChild(root_1, stream_nonvoid_type_descriptor.nextTree()); } stream_nonvoid_type_descriptor.reset(); - // smaliParser.g:765:93: ( $signature)? + // smaliParser.g:799:93: ( $signature)? if ( stream_signature.hasNext() ) { adaptor.addChild(root_1, stream_signature.nextNode()); } @@ -8644,30 +9402,30 @@ public class smaliParser extends Parser { // $ANTLR start "end_local_directive" - // smaliParser.g:767:1: end_local_directive : END_LOCAL_DIRECTIVE REGISTER -> ^( I_END_LOCAL[$start, \"I_END_LOCAL\"] REGISTER ) ; + // smaliParser.g:801:1: end_local_directive : END_LOCAL_DIRECTIVE REGISTER -> ^( I_END_LOCAL[$start, \"I_END_LOCAL\"] REGISTER ) ; public final smaliParser.end_local_directive_return end_local_directive() throws RecognitionException { smaliParser.end_local_directive_return retval = new smaliParser.end_local_directive_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token END_LOCAL_DIRECTIVE227=null; - Token REGISTER228=null; + Token END_LOCAL_DIRECTIVE255=null; + Token REGISTER256=null; - CommonTree END_LOCAL_DIRECTIVE227_tree=null; - CommonTree REGISTER228_tree=null; + CommonTree END_LOCAL_DIRECTIVE255_tree=null; + CommonTree REGISTER256_tree=null; RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_END_LOCAL_DIRECTIVE=new RewriteRuleTokenStream(adaptor,"token END_LOCAL_DIRECTIVE"); try { - // smaliParser.g:768:3: ( END_LOCAL_DIRECTIVE REGISTER -> ^( I_END_LOCAL[$start, \"I_END_LOCAL\"] REGISTER ) ) - // smaliParser.g:768:5: END_LOCAL_DIRECTIVE REGISTER + // smaliParser.g:802:3: ( END_LOCAL_DIRECTIVE REGISTER -> ^( I_END_LOCAL[$start, \"I_END_LOCAL\"] REGISTER ) ) + // smaliParser.g:802:5: END_LOCAL_DIRECTIVE REGISTER { - END_LOCAL_DIRECTIVE227=(Token)match(input,END_LOCAL_DIRECTIVE,FOLLOW_END_LOCAL_DIRECTIVE_in_end_local_directive3556); - stream_END_LOCAL_DIRECTIVE.add(END_LOCAL_DIRECTIVE227); + END_LOCAL_DIRECTIVE255=(Token)match(input,END_LOCAL_DIRECTIVE,FOLLOW_END_LOCAL_DIRECTIVE_in_end_local_directive3826); + stream_END_LOCAL_DIRECTIVE.add(END_LOCAL_DIRECTIVE255); - REGISTER228=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_end_local_directive3558); - stream_REGISTER.add(REGISTER228); + REGISTER256=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_end_local_directive3828); + stream_REGISTER.add(REGISTER256); // AST REWRITE // elements: REGISTER @@ -8680,9 +9438,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 769:5: -> ^( I_END_LOCAL[$start, \"I_END_LOCAL\"] REGISTER ) + // 803:5: -> ^( I_END_LOCAL[$start, \"I_END_LOCAL\"] REGISTER ) { - // smaliParser.g:769:8: ^( I_END_LOCAL[$start, \"I_END_LOCAL\"] REGISTER ) + // smaliParser.g:803:8: ^( I_END_LOCAL[$start, \"I_END_LOCAL\"] REGISTER ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_END_LOCAL, (retval.start), "I_END_LOCAL"), root_1); @@ -8724,30 +9482,30 @@ public class smaliParser extends Parser { // $ANTLR start "restart_local_directive" - // smaliParser.g:771:1: restart_local_directive : RESTART_LOCAL_DIRECTIVE REGISTER -> ^( I_RESTART_LOCAL[$start, \"I_RESTART_LOCAL\"] REGISTER ) ; + // smaliParser.g:805:1: restart_local_directive : RESTART_LOCAL_DIRECTIVE REGISTER -> ^( I_RESTART_LOCAL[$start, \"I_RESTART_LOCAL\"] REGISTER ) ; public final smaliParser.restart_local_directive_return restart_local_directive() throws RecognitionException { smaliParser.restart_local_directive_return retval = new smaliParser.restart_local_directive_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token RESTART_LOCAL_DIRECTIVE229=null; - Token REGISTER230=null; + Token RESTART_LOCAL_DIRECTIVE257=null; + Token REGISTER258=null; - CommonTree RESTART_LOCAL_DIRECTIVE229_tree=null; - CommonTree REGISTER230_tree=null; + CommonTree RESTART_LOCAL_DIRECTIVE257_tree=null; + CommonTree REGISTER258_tree=null; RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_RESTART_LOCAL_DIRECTIVE=new RewriteRuleTokenStream(adaptor,"token RESTART_LOCAL_DIRECTIVE"); try { - // smaliParser.g:772:3: ( RESTART_LOCAL_DIRECTIVE REGISTER -> ^( I_RESTART_LOCAL[$start, \"I_RESTART_LOCAL\"] REGISTER ) ) - // smaliParser.g:772:5: RESTART_LOCAL_DIRECTIVE REGISTER + // smaliParser.g:806:3: ( RESTART_LOCAL_DIRECTIVE REGISTER -> ^( I_RESTART_LOCAL[$start, \"I_RESTART_LOCAL\"] REGISTER ) ) + // smaliParser.g:806:5: RESTART_LOCAL_DIRECTIVE REGISTER { - RESTART_LOCAL_DIRECTIVE229=(Token)match(input,RESTART_LOCAL_DIRECTIVE,FOLLOW_RESTART_LOCAL_DIRECTIVE_in_restart_local_directive3581); - stream_RESTART_LOCAL_DIRECTIVE.add(RESTART_LOCAL_DIRECTIVE229); + RESTART_LOCAL_DIRECTIVE257=(Token)match(input,RESTART_LOCAL_DIRECTIVE,FOLLOW_RESTART_LOCAL_DIRECTIVE_in_restart_local_directive3851); + stream_RESTART_LOCAL_DIRECTIVE.add(RESTART_LOCAL_DIRECTIVE257); - REGISTER230=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_restart_local_directive3583); - stream_REGISTER.add(REGISTER230); + REGISTER258=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_restart_local_directive3853); + stream_REGISTER.add(REGISTER258); // AST REWRITE // elements: REGISTER @@ -8760,9 +9518,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 773:5: -> ^( I_RESTART_LOCAL[$start, \"I_RESTART_LOCAL\"] REGISTER ) + // 807:5: -> ^( I_RESTART_LOCAL[$start, \"I_RESTART_LOCAL\"] REGISTER ) { - // smaliParser.g:773:8: ^( I_RESTART_LOCAL[$start, \"I_RESTART_LOCAL\"] REGISTER ) + // smaliParser.g:807:8: ^( I_RESTART_LOCAL[$start, \"I_RESTART_LOCAL\"] REGISTER ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_RESTART_LOCAL, (retval.start), "I_RESTART_LOCAL"), root_1); @@ -8804,24 +9562,24 @@ public class smaliParser extends Parser { // $ANTLR start "prologue_directive" - // smaliParser.g:775:1: prologue_directive : PROLOGUE_DIRECTIVE -> ^( I_PROLOGUE[$start, \"I_PROLOGUE\"] ) ; + // smaliParser.g:809:1: prologue_directive : PROLOGUE_DIRECTIVE -> ^( I_PROLOGUE[$start, \"I_PROLOGUE\"] ) ; public final smaliParser.prologue_directive_return prologue_directive() throws RecognitionException { smaliParser.prologue_directive_return retval = new smaliParser.prologue_directive_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token PROLOGUE_DIRECTIVE231=null; + Token PROLOGUE_DIRECTIVE259=null; - CommonTree PROLOGUE_DIRECTIVE231_tree=null; + CommonTree PROLOGUE_DIRECTIVE259_tree=null; RewriteRuleTokenStream stream_PROLOGUE_DIRECTIVE=new RewriteRuleTokenStream(adaptor,"token PROLOGUE_DIRECTIVE"); try { - // smaliParser.g:776:3: ( PROLOGUE_DIRECTIVE -> ^( I_PROLOGUE[$start, \"I_PROLOGUE\"] ) ) - // smaliParser.g:776:5: PROLOGUE_DIRECTIVE + // smaliParser.g:810:3: ( PROLOGUE_DIRECTIVE -> ^( I_PROLOGUE[$start, \"I_PROLOGUE\"] ) ) + // smaliParser.g:810:5: PROLOGUE_DIRECTIVE { - PROLOGUE_DIRECTIVE231=(Token)match(input,PROLOGUE_DIRECTIVE,FOLLOW_PROLOGUE_DIRECTIVE_in_prologue_directive3606); - stream_PROLOGUE_DIRECTIVE.add(PROLOGUE_DIRECTIVE231); + PROLOGUE_DIRECTIVE259=(Token)match(input,PROLOGUE_DIRECTIVE,FOLLOW_PROLOGUE_DIRECTIVE_in_prologue_directive3876); + stream_PROLOGUE_DIRECTIVE.add(PROLOGUE_DIRECTIVE259); // AST REWRITE // elements: @@ -8834,9 +9592,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 777:5: -> ^( I_PROLOGUE[$start, \"I_PROLOGUE\"] ) + // 811:5: -> ^( I_PROLOGUE[$start, \"I_PROLOGUE\"] ) { - // smaliParser.g:777:8: ^( I_PROLOGUE[$start, \"I_PROLOGUE\"] ) + // smaliParser.g:811:8: ^( I_PROLOGUE[$start, \"I_PROLOGUE\"] ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_PROLOGUE, (retval.start), "I_PROLOGUE"), root_1); @@ -8877,24 +9635,24 @@ public class smaliParser extends Parser { // $ANTLR start "epilogue_directive" - // smaliParser.g:779:1: epilogue_directive : EPILOGUE_DIRECTIVE -> ^( I_EPILOGUE[$start, \"I_EPILOGUE\"] ) ; + // smaliParser.g:813:1: epilogue_directive : EPILOGUE_DIRECTIVE -> ^( I_EPILOGUE[$start, \"I_EPILOGUE\"] ) ; public final smaliParser.epilogue_directive_return epilogue_directive() throws RecognitionException { smaliParser.epilogue_directive_return retval = new smaliParser.epilogue_directive_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token EPILOGUE_DIRECTIVE232=null; + Token EPILOGUE_DIRECTIVE260=null; - CommonTree EPILOGUE_DIRECTIVE232_tree=null; + CommonTree EPILOGUE_DIRECTIVE260_tree=null; RewriteRuleTokenStream stream_EPILOGUE_DIRECTIVE=new RewriteRuleTokenStream(adaptor,"token EPILOGUE_DIRECTIVE"); try { - // smaliParser.g:780:3: ( EPILOGUE_DIRECTIVE -> ^( I_EPILOGUE[$start, \"I_EPILOGUE\"] ) ) - // smaliParser.g:780:5: EPILOGUE_DIRECTIVE + // smaliParser.g:814:3: ( EPILOGUE_DIRECTIVE -> ^( I_EPILOGUE[$start, \"I_EPILOGUE\"] ) ) + // smaliParser.g:814:5: EPILOGUE_DIRECTIVE { - EPILOGUE_DIRECTIVE232=(Token)match(input,EPILOGUE_DIRECTIVE,FOLLOW_EPILOGUE_DIRECTIVE_in_epilogue_directive3627); - stream_EPILOGUE_DIRECTIVE.add(EPILOGUE_DIRECTIVE232); + EPILOGUE_DIRECTIVE260=(Token)match(input,EPILOGUE_DIRECTIVE,FOLLOW_EPILOGUE_DIRECTIVE_in_epilogue_directive3897); + stream_EPILOGUE_DIRECTIVE.add(EPILOGUE_DIRECTIVE260); // AST REWRITE // elements: @@ -8907,9 +9665,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 781:5: -> ^( I_EPILOGUE[$start, \"I_EPILOGUE\"] ) + // 815:5: -> ^( I_EPILOGUE[$start, \"I_EPILOGUE\"] ) { - // smaliParser.g:781:8: ^( I_EPILOGUE[$start, \"I_EPILOGUE\"] ) + // smaliParser.g:815:8: ^( I_EPILOGUE[$start, \"I_EPILOGUE\"] ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_EPILOGUE, (retval.start), "I_EPILOGUE"), root_1); @@ -8950,40 +9708,40 @@ public class smaliParser extends Parser { // $ANTLR start "source_directive" - // smaliParser.g:783:1: source_directive : SOURCE_DIRECTIVE ( STRING_LITERAL )? -> ^( I_SOURCE[$start, \"I_SOURCE\"] ( STRING_LITERAL )? ) ; + // smaliParser.g:817:1: source_directive : SOURCE_DIRECTIVE ( STRING_LITERAL )? -> ^( I_SOURCE[$start, \"I_SOURCE\"] ( STRING_LITERAL )? ) ; public final smaliParser.source_directive_return source_directive() throws RecognitionException { smaliParser.source_directive_return retval = new smaliParser.source_directive_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token SOURCE_DIRECTIVE233=null; - Token STRING_LITERAL234=null; + Token SOURCE_DIRECTIVE261=null; + Token STRING_LITERAL262=null; - CommonTree SOURCE_DIRECTIVE233_tree=null; - CommonTree STRING_LITERAL234_tree=null; + CommonTree SOURCE_DIRECTIVE261_tree=null; + CommonTree STRING_LITERAL262_tree=null; RewriteRuleTokenStream stream_SOURCE_DIRECTIVE=new RewriteRuleTokenStream(adaptor,"token SOURCE_DIRECTIVE"); RewriteRuleTokenStream stream_STRING_LITERAL=new RewriteRuleTokenStream(adaptor,"token STRING_LITERAL"); try { - // smaliParser.g:784:3: ( SOURCE_DIRECTIVE ( STRING_LITERAL )? -> ^( I_SOURCE[$start, \"I_SOURCE\"] ( STRING_LITERAL )? ) ) - // smaliParser.g:784:5: SOURCE_DIRECTIVE ( STRING_LITERAL )? + // smaliParser.g:818:3: ( SOURCE_DIRECTIVE ( STRING_LITERAL )? -> ^( I_SOURCE[$start, \"I_SOURCE\"] ( STRING_LITERAL )? ) ) + // smaliParser.g:818:5: SOURCE_DIRECTIVE ( STRING_LITERAL )? { - SOURCE_DIRECTIVE233=(Token)match(input,SOURCE_DIRECTIVE,FOLLOW_SOURCE_DIRECTIVE_in_source_directive3648); - stream_SOURCE_DIRECTIVE.add(SOURCE_DIRECTIVE233); + SOURCE_DIRECTIVE261=(Token)match(input,SOURCE_DIRECTIVE,FOLLOW_SOURCE_DIRECTIVE_in_source_directive3918); + stream_SOURCE_DIRECTIVE.add(SOURCE_DIRECTIVE261); - // smaliParser.g:784:22: ( STRING_LITERAL )? - int alt47=2; - int LA47_0 = input.LA(1); - if ( (LA47_0==STRING_LITERAL) ) { - alt47=1; + // smaliParser.g:818:22: ( STRING_LITERAL )? + int alt49=2; + int LA49_0 = input.LA(1); + if ( (LA49_0==STRING_LITERAL) ) { + alt49=1; } - switch (alt47) { + switch (alt49) { case 1 : - // smaliParser.g:784:22: STRING_LITERAL + // smaliParser.g:818:22: STRING_LITERAL { - STRING_LITERAL234=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_source_directive3650); - stream_STRING_LITERAL.add(STRING_LITERAL234); + STRING_LITERAL262=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_source_directive3920); + stream_STRING_LITERAL.add(STRING_LITERAL262); } break; @@ -9001,13 +9759,13 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 785:5: -> ^( I_SOURCE[$start, \"I_SOURCE\"] ( STRING_LITERAL )? ) + // 819:5: -> ^( I_SOURCE[$start, \"I_SOURCE\"] ( STRING_LITERAL )? ) { - // smaliParser.g:785:8: ^( I_SOURCE[$start, \"I_SOURCE\"] ( STRING_LITERAL )? ) + // smaliParser.g:819:8: ^( I_SOURCE[$start, \"I_SOURCE\"] ( STRING_LITERAL )? ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_SOURCE, (retval.start), "I_SOURCE"), root_1); - // smaliParser.g:785:39: ( STRING_LITERAL )? + // smaliParser.g:819:39: ( STRING_LITERAL )? if ( stream_STRING_LITERAL.hasNext() ) { adaptor.addChild(root_1, stream_STRING_LITERAL.nextNode()); } @@ -9050,55 +9808,55 @@ public class smaliParser extends Parser { // $ANTLR start "instruction_format12x" - // smaliParser.g:787:1: instruction_format12x : ( INSTRUCTION_FORMAT12x | INSTRUCTION_FORMAT12x_OR_ID -> INSTRUCTION_FORMAT12x[$INSTRUCTION_FORMAT12x_OR_ID] ); + // smaliParser.g:821:1: instruction_format12x : ( INSTRUCTION_FORMAT12x | INSTRUCTION_FORMAT12x_OR_ID -> INSTRUCTION_FORMAT12x[$INSTRUCTION_FORMAT12x_OR_ID] ); public final smaliParser.instruction_format12x_return instruction_format12x() throws RecognitionException { smaliParser.instruction_format12x_return retval = new smaliParser.instruction_format12x_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT12x235=null; - Token INSTRUCTION_FORMAT12x_OR_ID236=null; + Token INSTRUCTION_FORMAT12x263=null; + Token INSTRUCTION_FORMAT12x_OR_ID264=null; - CommonTree INSTRUCTION_FORMAT12x235_tree=null; - CommonTree INSTRUCTION_FORMAT12x_OR_ID236_tree=null; + CommonTree INSTRUCTION_FORMAT12x263_tree=null; + CommonTree INSTRUCTION_FORMAT12x_OR_ID264_tree=null; RewriteRuleTokenStream stream_INSTRUCTION_FORMAT12x_OR_ID=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT12x_OR_ID"); try { - // smaliParser.g:788:3: ( INSTRUCTION_FORMAT12x | INSTRUCTION_FORMAT12x_OR_ID -> INSTRUCTION_FORMAT12x[$INSTRUCTION_FORMAT12x_OR_ID] ) - int alt48=2; - int LA48_0 = input.LA(1); - if ( (LA48_0==INSTRUCTION_FORMAT12x) ) { - alt48=1; + // smaliParser.g:822:3: ( INSTRUCTION_FORMAT12x | INSTRUCTION_FORMAT12x_OR_ID -> INSTRUCTION_FORMAT12x[$INSTRUCTION_FORMAT12x_OR_ID] ) + int alt50=2; + int LA50_0 = input.LA(1); + if ( (LA50_0==INSTRUCTION_FORMAT12x) ) { + alt50=1; } - else if ( (LA48_0==INSTRUCTION_FORMAT12x_OR_ID) ) { - alt48=2; + else if ( (LA50_0==INSTRUCTION_FORMAT12x_OR_ID) ) { + alt50=2; } else { NoViableAltException nvae = - new NoViableAltException("", 48, 0, input); + new NoViableAltException("", 50, 0, input); throw nvae; } - switch (alt48) { + switch (alt50) { case 1 : - // smaliParser.g:788:5: INSTRUCTION_FORMAT12x + // smaliParser.g:822:5: INSTRUCTION_FORMAT12x { root_0 = (CommonTree)adaptor.nil(); - INSTRUCTION_FORMAT12x235=(Token)match(input,INSTRUCTION_FORMAT12x,FOLLOW_INSTRUCTION_FORMAT12x_in_instruction_format12x3675); - INSTRUCTION_FORMAT12x235_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT12x235); - adaptor.addChild(root_0, INSTRUCTION_FORMAT12x235_tree); + INSTRUCTION_FORMAT12x263=(Token)match(input,INSTRUCTION_FORMAT12x,FOLLOW_INSTRUCTION_FORMAT12x_in_instruction_format12x3945); + INSTRUCTION_FORMAT12x263_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT12x263); + adaptor.addChild(root_0, INSTRUCTION_FORMAT12x263_tree); } break; case 2 : - // smaliParser.g:789:5: INSTRUCTION_FORMAT12x_OR_ID + // smaliParser.g:823:5: INSTRUCTION_FORMAT12x_OR_ID { - INSTRUCTION_FORMAT12x_OR_ID236=(Token)match(input,INSTRUCTION_FORMAT12x_OR_ID,FOLLOW_INSTRUCTION_FORMAT12x_OR_ID_in_instruction_format12x3681); - stream_INSTRUCTION_FORMAT12x_OR_ID.add(INSTRUCTION_FORMAT12x_OR_ID236); + INSTRUCTION_FORMAT12x_OR_ID264=(Token)match(input,INSTRUCTION_FORMAT12x_OR_ID,FOLLOW_INSTRUCTION_FORMAT12x_OR_ID_in_instruction_format12x3951); + stream_INSTRUCTION_FORMAT12x_OR_ID.add(INSTRUCTION_FORMAT12x_OR_ID264); // AST REWRITE // elements: @@ -9111,9 +9869,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 789:33: -> INSTRUCTION_FORMAT12x[$INSTRUCTION_FORMAT12x_OR_ID] + // 823:33: -> INSTRUCTION_FORMAT12x[$INSTRUCTION_FORMAT12x_OR_ID] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(INSTRUCTION_FORMAT12x, INSTRUCTION_FORMAT12x_OR_ID236)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(INSTRUCTION_FORMAT12x, INSTRUCTION_FORMAT12x_OR_ID264)); } @@ -9150,55 +9908,55 @@ public class smaliParser extends Parser { // $ANTLR start "instruction_format22s" - // smaliParser.g:791:1: instruction_format22s : ( INSTRUCTION_FORMAT22s | INSTRUCTION_FORMAT22s_OR_ID -> INSTRUCTION_FORMAT22s[$INSTRUCTION_FORMAT22s_OR_ID] ); + // smaliParser.g:825:1: instruction_format22s : ( INSTRUCTION_FORMAT22s | INSTRUCTION_FORMAT22s_OR_ID -> INSTRUCTION_FORMAT22s[$INSTRUCTION_FORMAT22s_OR_ID] ); public final smaliParser.instruction_format22s_return instruction_format22s() throws RecognitionException { smaliParser.instruction_format22s_return retval = new smaliParser.instruction_format22s_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT22s237=null; - Token INSTRUCTION_FORMAT22s_OR_ID238=null; + Token INSTRUCTION_FORMAT22s265=null; + Token INSTRUCTION_FORMAT22s_OR_ID266=null; - CommonTree INSTRUCTION_FORMAT22s237_tree=null; - CommonTree INSTRUCTION_FORMAT22s_OR_ID238_tree=null; + CommonTree INSTRUCTION_FORMAT22s265_tree=null; + CommonTree INSTRUCTION_FORMAT22s_OR_ID266_tree=null; RewriteRuleTokenStream stream_INSTRUCTION_FORMAT22s_OR_ID=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT22s_OR_ID"); try { - // smaliParser.g:792:3: ( INSTRUCTION_FORMAT22s | INSTRUCTION_FORMAT22s_OR_ID -> INSTRUCTION_FORMAT22s[$INSTRUCTION_FORMAT22s_OR_ID] ) - int alt49=2; - int LA49_0 = input.LA(1); - if ( (LA49_0==INSTRUCTION_FORMAT22s) ) { - alt49=1; + // smaliParser.g:826:3: ( INSTRUCTION_FORMAT22s | INSTRUCTION_FORMAT22s_OR_ID -> INSTRUCTION_FORMAT22s[$INSTRUCTION_FORMAT22s_OR_ID] ) + int alt51=2; + int LA51_0 = input.LA(1); + if ( (LA51_0==INSTRUCTION_FORMAT22s) ) { + alt51=1; } - else if ( (LA49_0==INSTRUCTION_FORMAT22s_OR_ID) ) { - alt49=2; + else if ( (LA51_0==INSTRUCTION_FORMAT22s_OR_ID) ) { + alt51=2; } else { NoViableAltException nvae = - new NoViableAltException("", 49, 0, input); + new NoViableAltException("", 51, 0, input); throw nvae; } - switch (alt49) { + switch (alt51) { case 1 : - // smaliParser.g:792:5: INSTRUCTION_FORMAT22s + // smaliParser.g:826:5: INSTRUCTION_FORMAT22s { root_0 = (CommonTree)adaptor.nil(); - INSTRUCTION_FORMAT22s237=(Token)match(input,INSTRUCTION_FORMAT22s,FOLLOW_INSTRUCTION_FORMAT22s_in_instruction_format22s3696); - INSTRUCTION_FORMAT22s237_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT22s237); - adaptor.addChild(root_0, INSTRUCTION_FORMAT22s237_tree); + INSTRUCTION_FORMAT22s265=(Token)match(input,INSTRUCTION_FORMAT22s,FOLLOW_INSTRUCTION_FORMAT22s_in_instruction_format22s3966); + INSTRUCTION_FORMAT22s265_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT22s265); + adaptor.addChild(root_0, INSTRUCTION_FORMAT22s265_tree); } break; case 2 : - // smaliParser.g:793:5: INSTRUCTION_FORMAT22s_OR_ID + // smaliParser.g:827:5: INSTRUCTION_FORMAT22s_OR_ID { - INSTRUCTION_FORMAT22s_OR_ID238=(Token)match(input,INSTRUCTION_FORMAT22s_OR_ID,FOLLOW_INSTRUCTION_FORMAT22s_OR_ID_in_instruction_format22s3702); - stream_INSTRUCTION_FORMAT22s_OR_ID.add(INSTRUCTION_FORMAT22s_OR_ID238); + INSTRUCTION_FORMAT22s_OR_ID266=(Token)match(input,INSTRUCTION_FORMAT22s_OR_ID,FOLLOW_INSTRUCTION_FORMAT22s_OR_ID_in_instruction_format22s3972); + stream_INSTRUCTION_FORMAT22s_OR_ID.add(INSTRUCTION_FORMAT22s_OR_ID266); // AST REWRITE // elements: @@ -9211,9 +9969,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 793:33: -> INSTRUCTION_FORMAT22s[$INSTRUCTION_FORMAT22s_OR_ID] + // 827:33: -> INSTRUCTION_FORMAT22s[$INSTRUCTION_FORMAT22s_OR_ID] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(INSTRUCTION_FORMAT22s, INSTRUCTION_FORMAT22s_OR_ID238)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(INSTRUCTION_FORMAT22s, INSTRUCTION_FORMAT22s_OR_ID266)); } @@ -9250,55 +10008,55 @@ public class smaliParser extends Parser { // $ANTLR start "instruction_format31i" - // smaliParser.g:795:1: instruction_format31i : ( INSTRUCTION_FORMAT31i | INSTRUCTION_FORMAT31i_OR_ID -> INSTRUCTION_FORMAT31i[$INSTRUCTION_FORMAT31i_OR_ID] ); + // smaliParser.g:829:1: instruction_format31i : ( INSTRUCTION_FORMAT31i | INSTRUCTION_FORMAT31i_OR_ID -> INSTRUCTION_FORMAT31i[$INSTRUCTION_FORMAT31i_OR_ID] ); public final smaliParser.instruction_format31i_return instruction_format31i() throws RecognitionException { smaliParser.instruction_format31i_return retval = new smaliParser.instruction_format31i_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT31i239=null; - Token INSTRUCTION_FORMAT31i_OR_ID240=null; + Token INSTRUCTION_FORMAT31i267=null; + Token INSTRUCTION_FORMAT31i_OR_ID268=null; - CommonTree INSTRUCTION_FORMAT31i239_tree=null; - CommonTree INSTRUCTION_FORMAT31i_OR_ID240_tree=null; + CommonTree INSTRUCTION_FORMAT31i267_tree=null; + CommonTree INSTRUCTION_FORMAT31i_OR_ID268_tree=null; RewriteRuleTokenStream stream_INSTRUCTION_FORMAT31i_OR_ID=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT31i_OR_ID"); try { - // smaliParser.g:796:3: ( INSTRUCTION_FORMAT31i | INSTRUCTION_FORMAT31i_OR_ID -> INSTRUCTION_FORMAT31i[$INSTRUCTION_FORMAT31i_OR_ID] ) - int alt50=2; - int LA50_0 = input.LA(1); - if ( (LA50_0==INSTRUCTION_FORMAT31i) ) { - alt50=1; + // smaliParser.g:830:3: ( INSTRUCTION_FORMAT31i | INSTRUCTION_FORMAT31i_OR_ID -> INSTRUCTION_FORMAT31i[$INSTRUCTION_FORMAT31i_OR_ID] ) + int alt52=2; + int LA52_0 = input.LA(1); + if ( (LA52_0==INSTRUCTION_FORMAT31i) ) { + alt52=1; } - else if ( (LA50_0==INSTRUCTION_FORMAT31i_OR_ID) ) { - alt50=2; + else if ( (LA52_0==INSTRUCTION_FORMAT31i_OR_ID) ) { + alt52=2; } else { NoViableAltException nvae = - new NoViableAltException("", 50, 0, input); + new NoViableAltException("", 52, 0, input); throw nvae; } - switch (alt50) { + switch (alt52) { case 1 : - // smaliParser.g:796:5: INSTRUCTION_FORMAT31i + // smaliParser.g:830:5: INSTRUCTION_FORMAT31i { root_0 = (CommonTree)adaptor.nil(); - INSTRUCTION_FORMAT31i239=(Token)match(input,INSTRUCTION_FORMAT31i,FOLLOW_INSTRUCTION_FORMAT31i_in_instruction_format31i3717); - INSTRUCTION_FORMAT31i239_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT31i239); - adaptor.addChild(root_0, INSTRUCTION_FORMAT31i239_tree); + INSTRUCTION_FORMAT31i267=(Token)match(input,INSTRUCTION_FORMAT31i,FOLLOW_INSTRUCTION_FORMAT31i_in_instruction_format31i3987); + INSTRUCTION_FORMAT31i267_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT31i267); + adaptor.addChild(root_0, INSTRUCTION_FORMAT31i267_tree); } break; case 2 : - // smaliParser.g:797:5: INSTRUCTION_FORMAT31i_OR_ID + // smaliParser.g:831:5: INSTRUCTION_FORMAT31i_OR_ID { - INSTRUCTION_FORMAT31i_OR_ID240=(Token)match(input,INSTRUCTION_FORMAT31i_OR_ID,FOLLOW_INSTRUCTION_FORMAT31i_OR_ID_in_instruction_format31i3723); - stream_INSTRUCTION_FORMAT31i_OR_ID.add(INSTRUCTION_FORMAT31i_OR_ID240); + INSTRUCTION_FORMAT31i_OR_ID268=(Token)match(input,INSTRUCTION_FORMAT31i_OR_ID,FOLLOW_INSTRUCTION_FORMAT31i_OR_ID_in_instruction_format31i3993); + stream_INSTRUCTION_FORMAT31i_OR_ID.add(INSTRUCTION_FORMAT31i_OR_ID268); // AST REWRITE // elements: @@ -9311,9 +10069,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 797:33: -> INSTRUCTION_FORMAT31i[$INSTRUCTION_FORMAT31i_OR_ID] + // 831:33: -> INSTRUCTION_FORMAT31i[$INSTRUCTION_FORMAT31i_OR_ID] { - adaptor.addChild(root_0, (CommonTree)adaptor.create(INSTRUCTION_FORMAT31i, INSTRUCTION_FORMAT31i_OR_ID240)); + adaptor.addChild(root_0, (CommonTree)adaptor.create(INSTRUCTION_FORMAT31i, INSTRUCTION_FORMAT31i_OR_ID268)); } @@ -9342,6 +10100,106 @@ public class smaliParser extends Parser { // $ANTLR end "instruction_format31i" + public static class instruction_format35c_method_return extends ParserRuleReturnScope { + CommonTree tree; + @Override + public CommonTree getTree() { return tree; } + }; + + + // $ANTLR start "instruction_format35c_method" + // smaliParser.g:833:1: instruction_format35c_method : ( INSTRUCTION_FORMAT35c_METHOD | INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE -> INSTRUCTION_FORMAT35c_METHOD[$INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE] ); + public final smaliParser.instruction_format35c_method_return instruction_format35c_method() throws RecognitionException { + smaliParser.instruction_format35c_method_return retval = new smaliParser.instruction_format35c_method_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token INSTRUCTION_FORMAT35c_METHOD269=null; + Token INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE270=null; + + CommonTree INSTRUCTION_FORMAT35c_METHOD269_tree=null; + CommonTree INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE270_tree=null; + RewriteRuleTokenStream stream_INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE"); + + try { + // smaliParser.g:834:3: ( INSTRUCTION_FORMAT35c_METHOD | INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE -> INSTRUCTION_FORMAT35c_METHOD[$INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE] ) + int alt53=2; + int LA53_0 = input.LA(1); + if ( (LA53_0==INSTRUCTION_FORMAT35c_METHOD) ) { + alt53=1; + } + else if ( (LA53_0==INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE) ) { + alt53=2; + } + + else { + NoViableAltException nvae = + new NoViableAltException("", 53, 0, input); + throw nvae; + } + + switch (alt53) { + case 1 : + // smaliParser.g:834:5: INSTRUCTION_FORMAT35c_METHOD + { + root_0 = (CommonTree)adaptor.nil(); + + + INSTRUCTION_FORMAT35c_METHOD269=(Token)match(input,INSTRUCTION_FORMAT35c_METHOD,FOLLOW_INSTRUCTION_FORMAT35c_METHOD_in_instruction_format35c_method4010); + INSTRUCTION_FORMAT35c_METHOD269_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT35c_METHOD269); + adaptor.addChild(root_0, INSTRUCTION_FORMAT35c_METHOD269_tree); + + } + break; + case 2 : + // smaliParser.g:835:5: INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE + { + INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE270=(Token)match(input,INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE,FOLLOW_INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE_in_instruction_format35c_method4016); + stream_INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE.add(INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE270); + + // AST REWRITE + // elements: + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); + + root_0 = (CommonTree)adaptor.nil(); + // 835:56: -> INSTRUCTION_FORMAT35c_METHOD[$INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE] + { + adaptor.addChild(root_0, (CommonTree)adaptor.create(INSTRUCTION_FORMAT35c_METHOD, INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE270)); + } + + + retval.tree = root_0; + + } + break; + + } + retval.stop = input.LT(-1); + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + } + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "instruction_format35c_method" + + public static class instruction_return extends ParserRuleReturnScope { CommonTree tree; @Override @@ -9350,945 +10208,1026 @@ public class smaliParser extends Parser { // $ANTLR start "instruction" - // smaliParser.g:801:1: instruction : ( insn_format10t | insn_format10x | insn_format10x_odex | insn_format11n | insn_format11x | insn_format12x | insn_format20bc | insn_format20t | insn_format21c_field | insn_format21c_field_odex | insn_format21c_string | insn_format21c_type | insn_format21ih | insn_format21lh | insn_format21s | insn_format21t | insn_format22b | insn_format22c_field | insn_format22c_field_odex | insn_format22c_type | insn_format22cs_field | insn_format22s | insn_format22t | insn_format22x | insn_format23x | insn_format30t | insn_format31c | insn_format31i | insn_format31t | insn_format32x | insn_format35c_method | insn_format35c_type | insn_format35c_method_odex | insn_format35mi_method | insn_format35ms_method | insn_format3rc_method | insn_format3rc_method_odex | insn_format3rc_type | insn_format3rmi_method | insn_format3rms_method | insn_format45cc_method | insn_format4rcc_method | insn_format51l | insn_array_data_directive | insn_packed_switch_directive | insn_sparse_switch_directive ); + // smaliParser.g:837:1: instruction : ( insn_format10t | insn_format10x | insn_format10x_odex | insn_format11n | insn_format11x | insn_format12x | insn_format20bc | insn_format20t | insn_format21c_field | insn_format21c_field_odex | insn_format21c_method_handle | insn_format21c_method_type | insn_format21c_string | insn_format21c_type | insn_format21ih | insn_format21lh | insn_format21s | insn_format21t | insn_format22b | insn_format22c_field | insn_format22c_field_odex | insn_format22c_type | insn_format22cs_field | insn_format22s | insn_format22t | insn_format22x | insn_format23x | insn_format30t | insn_format31c | insn_format31i | insn_format31t | insn_format32x | insn_format35c_call_site | insn_format35c_method | insn_format35c_type | insn_format35c_method_odex | insn_format35mi_method | insn_format35ms_method | insn_format3rc_call_site | insn_format3rc_method | insn_format3rc_method_odex | insn_format3rc_type | insn_format3rmi_method | insn_format3rms_method | insn_format45cc_method | insn_format4rcc_method | insn_format51l | insn_array_data_directive | insn_packed_switch_directive | insn_sparse_switch_directive ); public final smaliParser.instruction_return instruction() throws RecognitionException { smaliParser.instruction_return retval = new smaliParser.instruction_return(); retval.start = input.LT(1); CommonTree root_0 = null; - ParserRuleReturnScope insn_format10t241 =null; - ParserRuleReturnScope insn_format10x242 =null; - ParserRuleReturnScope insn_format10x_odex243 =null; - ParserRuleReturnScope insn_format11n244 =null; - ParserRuleReturnScope insn_format11x245 =null; - ParserRuleReturnScope insn_format12x246 =null; - ParserRuleReturnScope insn_format20bc247 =null; - ParserRuleReturnScope insn_format20t248 =null; - ParserRuleReturnScope insn_format21c_field249 =null; - ParserRuleReturnScope insn_format21c_field_odex250 =null; - ParserRuleReturnScope insn_format21c_string251 =null; - ParserRuleReturnScope insn_format21c_type252 =null; - ParserRuleReturnScope insn_format21ih253 =null; - ParserRuleReturnScope insn_format21lh254 =null; - ParserRuleReturnScope insn_format21s255 =null; - ParserRuleReturnScope insn_format21t256 =null; - ParserRuleReturnScope insn_format22b257 =null; - ParserRuleReturnScope insn_format22c_field258 =null; - ParserRuleReturnScope insn_format22c_field_odex259 =null; - ParserRuleReturnScope insn_format22c_type260 =null; - ParserRuleReturnScope insn_format22cs_field261 =null; - ParserRuleReturnScope insn_format22s262 =null; - ParserRuleReturnScope insn_format22t263 =null; - ParserRuleReturnScope insn_format22x264 =null; - ParserRuleReturnScope insn_format23x265 =null; - ParserRuleReturnScope insn_format30t266 =null; - ParserRuleReturnScope insn_format31c267 =null; - ParserRuleReturnScope insn_format31i268 =null; - ParserRuleReturnScope insn_format31t269 =null; - ParserRuleReturnScope insn_format32x270 =null; - ParserRuleReturnScope insn_format35c_method271 =null; - ParserRuleReturnScope insn_format35c_type272 =null; - ParserRuleReturnScope insn_format35c_method_odex273 =null; - ParserRuleReturnScope insn_format35mi_method274 =null; - ParserRuleReturnScope insn_format35ms_method275 =null; - ParserRuleReturnScope insn_format3rc_method276 =null; - ParserRuleReturnScope insn_format3rc_method_odex277 =null; - ParserRuleReturnScope insn_format3rc_type278 =null; - ParserRuleReturnScope insn_format3rmi_method279 =null; - ParserRuleReturnScope insn_format3rms_method280 =null; - ParserRuleReturnScope insn_format45cc_method281 =null; - ParserRuleReturnScope insn_format4rcc_method282 =null; - ParserRuleReturnScope insn_format51l283 =null; - ParserRuleReturnScope insn_array_data_directive284 =null; - ParserRuleReturnScope insn_packed_switch_directive285 =null; - ParserRuleReturnScope insn_sparse_switch_directive286 =null; + ParserRuleReturnScope insn_format10t271 =null; + ParserRuleReturnScope insn_format10x272 =null; + ParserRuleReturnScope insn_format10x_odex273 =null; + ParserRuleReturnScope insn_format11n274 =null; + ParserRuleReturnScope insn_format11x275 =null; + ParserRuleReturnScope insn_format12x276 =null; + ParserRuleReturnScope insn_format20bc277 =null; + ParserRuleReturnScope insn_format20t278 =null; + ParserRuleReturnScope insn_format21c_field279 =null; + ParserRuleReturnScope insn_format21c_field_odex280 =null; + ParserRuleReturnScope insn_format21c_method_handle281 =null; + ParserRuleReturnScope insn_format21c_method_type282 =null; + ParserRuleReturnScope insn_format21c_string283 =null; + ParserRuleReturnScope insn_format21c_type284 =null; + ParserRuleReturnScope insn_format21ih285 =null; + ParserRuleReturnScope insn_format21lh286 =null; + ParserRuleReturnScope insn_format21s287 =null; + ParserRuleReturnScope insn_format21t288 =null; + ParserRuleReturnScope insn_format22b289 =null; + ParserRuleReturnScope insn_format22c_field290 =null; + ParserRuleReturnScope insn_format22c_field_odex291 =null; + ParserRuleReturnScope insn_format22c_type292 =null; + ParserRuleReturnScope insn_format22cs_field293 =null; + ParserRuleReturnScope insn_format22s294 =null; + ParserRuleReturnScope insn_format22t295 =null; + ParserRuleReturnScope insn_format22x296 =null; + ParserRuleReturnScope insn_format23x297 =null; + ParserRuleReturnScope insn_format30t298 =null; + ParserRuleReturnScope insn_format31c299 =null; + ParserRuleReturnScope insn_format31i300 =null; + ParserRuleReturnScope insn_format31t301 =null; + ParserRuleReturnScope insn_format32x302 =null; + ParserRuleReturnScope insn_format35c_call_site303 =null; + ParserRuleReturnScope insn_format35c_method304 =null; + ParserRuleReturnScope insn_format35c_type305 =null; + ParserRuleReturnScope insn_format35c_method_odex306 =null; + ParserRuleReturnScope insn_format35mi_method307 =null; + ParserRuleReturnScope insn_format35ms_method308 =null; + ParserRuleReturnScope insn_format3rc_call_site309 =null; + ParserRuleReturnScope insn_format3rc_method310 =null; + ParserRuleReturnScope insn_format3rc_method_odex311 =null; + ParserRuleReturnScope insn_format3rc_type312 =null; + ParserRuleReturnScope insn_format3rmi_method313 =null; + ParserRuleReturnScope insn_format3rms_method314 =null; + ParserRuleReturnScope insn_format45cc_method315 =null; + ParserRuleReturnScope insn_format4rcc_method316 =null; + ParserRuleReturnScope insn_format51l317 =null; + ParserRuleReturnScope insn_array_data_directive318 =null; + ParserRuleReturnScope insn_packed_switch_directive319 =null; + ParserRuleReturnScope insn_sparse_switch_directive320 =null; try { - // smaliParser.g:802:3: ( insn_format10t | insn_format10x | insn_format10x_odex | insn_format11n | insn_format11x | insn_format12x | insn_format20bc | insn_format20t | insn_format21c_field | insn_format21c_field_odex | insn_format21c_string | insn_format21c_type | insn_format21ih | insn_format21lh | insn_format21s | insn_format21t | insn_format22b | insn_format22c_field | insn_format22c_field_odex | insn_format22c_type | insn_format22cs_field | insn_format22s | insn_format22t | insn_format22x | insn_format23x | insn_format30t | insn_format31c | insn_format31i | insn_format31t | insn_format32x | insn_format35c_method | insn_format35c_type | insn_format35c_method_odex | insn_format35mi_method | insn_format35ms_method | insn_format3rc_method | insn_format3rc_method_odex | insn_format3rc_type | insn_format3rmi_method | insn_format3rms_method | insn_format45cc_method | insn_format4rcc_method | insn_format51l | insn_array_data_directive | insn_packed_switch_directive | insn_sparse_switch_directive ) - int alt51=46; + // smaliParser.g:838:3: ( insn_format10t | insn_format10x | insn_format10x_odex | insn_format11n | insn_format11x | insn_format12x | insn_format20bc | insn_format20t | insn_format21c_field | insn_format21c_field_odex | insn_format21c_method_handle | insn_format21c_method_type | insn_format21c_string | insn_format21c_type | insn_format21ih | insn_format21lh | insn_format21s | insn_format21t | insn_format22b | insn_format22c_field | insn_format22c_field_odex | insn_format22c_type | insn_format22cs_field | insn_format22s | insn_format22t | insn_format22x | insn_format23x | insn_format30t | insn_format31c | insn_format31i | insn_format31t | insn_format32x | insn_format35c_call_site | insn_format35c_method | insn_format35c_type | insn_format35c_method_odex | insn_format35mi_method | insn_format35ms_method | insn_format3rc_call_site | insn_format3rc_method | insn_format3rc_method_odex | insn_format3rc_type | insn_format3rmi_method | insn_format3rms_method | insn_format45cc_method | insn_format4rcc_method | insn_format51l | insn_array_data_directive | insn_packed_switch_directive | insn_sparse_switch_directive ) + int alt54=50; switch ( input.LA(1) ) { case INSTRUCTION_FORMAT10t: { - alt51=1; + alt54=1; } break; case INSTRUCTION_FORMAT10x: { - alt51=2; + alt54=2; } break; case INSTRUCTION_FORMAT10x_ODEX: { - alt51=3; + alt54=3; } break; case INSTRUCTION_FORMAT11n: { - alt51=4; + alt54=4; } break; case INSTRUCTION_FORMAT11x: { - alt51=5; + alt54=5; } break; case INSTRUCTION_FORMAT12x: case INSTRUCTION_FORMAT12x_OR_ID: { - alt51=6; + alt54=6; } break; case INSTRUCTION_FORMAT20bc: { - alt51=7; + alt54=7; } break; case INSTRUCTION_FORMAT20t: { - alt51=8; + alt54=8; } break; case INSTRUCTION_FORMAT21c_FIELD: { - alt51=9; + alt54=9; } break; case INSTRUCTION_FORMAT21c_FIELD_ODEX: { - alt51=10; + alt54=10; + } + break; + case INSTRUCTION_FORMAT21c_METHOD_HANDLE: + { + alt54=11; + } + break; + case INSTRUCTION_FORMAT21c_METHOD_TYPE: + { + alt54=12; } break; case INSTRUCTION_FORMAT21c_STRING: { - alt51=11; + alt54=13; } break; case INSTRUCTION_FORMAT21c_TYPE: { - alt51=12; + alt54=14; } break; case INSTRUCTION_FORMAT21ih: { - alt51=13; + alt54=15; } break; case INSTRUCTION_FORMAT21lh: { - alt51=14; + alt54=16; } break; case INSTRUCTION_FORMAT21s: { - alt51=15; + alt54=17; } break; case INSTRUCTION_FORMAT21t: { - alt51=16; + alt54=18; } break; case INSTRUCTION_FORMAT22b: { - alt51=17; + alt54=19; } break; case INSTRUCTION_FORMAT22c_FIELD: { - alt51=18; + alt54=20; } break; case INSTRUCTION_FORMAT22c_FIELD_ODEX: { - alt51=19; + alt54=21; } break; case INSTRUCTION_FORMAT22c_TYPE: { - alt51=20; + alt54=22; } break; case INSTRUCTION_FORMAT22cs_FIELD: { - alt51=21; + alt54=23; } break; case INSTRUCTION_FORMAT22s: case INSTRUCTION_FORMAT22s_OR_ID: { - alt51=22; + alt54=24; } break; case INSTRUCTION_FORMAT22t: { - alt51=23; + alt54=25; } break; case INSTRUCTION_FORMAT22x: { - alt51=24; + alt54=26; } break; case INSTRUCTION_FORMAT23x: { - alt51=25; + alt54=27; } break; case INSTRUCTION_FORMAT30t: { - alt51=26; + alt54=28; } break; case INSTRUCTION_FORMAT31c: { - alt51=27; + alt54=29; } break; case INSTRUCTION_FORMAT31i: case INSTRUCTION_FORMAT31i_OR_ID: { - alt51=28; + alt54=30; } break; case INSTRUCTION_FORMAT31t: { - alt51=29; + alt54=31; } break; case INSTRUCTION_FORMAT32x: { - alt51=30; + alt54=32; + } + break; + case INSTRUCTION_FORMAT35c_CALL_SITE: + { + alt54=33; } break; case INSTRUCTION_FORMAT35c_METHOD: + case INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE: { - alt51=31; + alt54=34; } break; case INSTRUCTION_FORMAT35c_TYPE: { - alt51=32; + alt54=35; } break; case INSTRUCTION_FORMAT35c_METHOD_ODEX: { - alt51=33; + alt54=36; } break; case INSTRUCTION_FORMAT35mi_METHOD: { - alt51=34; + alt54=37; } break; case INSTRUCTION_FORMAT35ms_METHOD: { - alt51=35; + alt54=38; + } + break; + case INSTRUCTION_FORMAT3rc_CALL_SITE: + { + alt54=39; } break; case INSTRUCTION_FORMAT3rc_METHOD: { - alt51=36; + alt54=40; } break; case INSTRUCTION_FORMAT3rc_METHOD_ODEX: { - alt51=37; + alt54=41; } break; case INSTRUCTION_FORMAT3rc_TYPE: { - alt51=38; + alt54=42; } break; case INSTRUCTION_FORMAT3rmi_METHOD: { - alt51=39; + alt54=43; } break; case INSTRUCTION_FORMAT3rms_METHOD: { - alt51=40; + alt54=44; } break; case INSTRUCTION_FORMAT45cc_METHOD: { - alt51=41; + alt54=45; } break; case INSTRUCTION_FORMAT4rcc_METHOD: { - alt51=42; + alt54=46; } break; case INSTRUCTION_FORMAT51l: { - alt51=43; + alt54=47; } break; case ARRAY_DATA_DIRECTIVE: { - alt51=44; + alt54=48; } break; case PACKED_SWITCH_DIRECTIVE: { - alt51=45; + alt54=49; } break; case SPARSE_SWITCH_DIRECTIVE: { - alt51=46; + alt54=50; } break; default: NoViableAltException nvae = - new NoViableAltException("", 51, 0, input); + new NoViableAltException("", 54, 0, input); throw nvae; } - switch (alt51) { + switch (alt54) { case 1 : - // smaliParser.g:802:5: insn_format10t + // smaliParser.g:838:5: insn_format10t { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format10t_in_instruction3740); - insn_format10t241=insn_format10t(); + pushFollow(FOLLOW_insn_format10t_in_instruction4031); + insn_format10t271=insn_format10t(); state._fsp--; - adaptor.addChild(root_0, insn_format10t241.getTree()); + adaptor.addChild(root_0, insn_format10t271.getTree()); } break; case 2 : - // smaliParser.g:803:5: insn_format10x + // smaliParser.g:839:5: insn_format10x { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format10x_in_instruction3746); - insn_format10x242=insn_format10x(); + pushFollow(FOLLOW_insn_format10x_in_instruction4037); + insn_format10x272=insn_format10x(); state._fsp--; - adaptor.addChild(root_0, insn_format10x242.getTree()); + adaptor.addChild(root_0, insn_format10x272.getTree()); } break; case 3 : - // smaliParser.g:804:5: insn_format10x_odex + // smaliParser.g:840:5: insn_format10x_odex { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format10x_odex_in_instruction3752); - insn_format10x_odex243=insn_format10x_odex(); + pushFollow(FOLLOW_insn_format10x_odex_in_instruction4043); + insn_format10x_odex273=insn_format10x_odex(); state._fsp--; - adaptor.addChild(root_0, insn_format10x_odex243.getTree()); + adaptor.addChild(root_0, insn_format10x_odex273.getTree()); } break; case 4 : - // smaliParser.g:805:5: insn_format11n + // smaliParser.g:841:5: insn_format11n { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format11n_in_instruction3758); - insn_format11n244=insn_format11n(); + pushFollow(FOLLOW_insn_format11n_in_instruction4049); + insn_format11n274=insn_format11n(); state._fsp--; - adaptor.addChild(root_0, insn_format11n244.getTree()); + adaptor.addChild(root_0, insn_format11n274.getTree()); } break; case 5 : - // smaliParser.g:806:5: insn_format11x + // smaliParser.g:842:5: insn_format11x { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format11x_in_instruction3764); - insn_format11x245=insn_format11x(); + pushFollow(FOLLOW_insn_format11x_in_instruction4055); + insn_format11x275=insn_format11x(); state._fsp--; - adaptor.addChild(root_0, insn_format11x245.getTree()); + adaptor.addChild(root_0, insn_format11x275.getTree()); } break; case 6 : - // smaliParser.g:807:5: insn_format12x + // smaliParser.g:843:5: insn_format12x { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format12x_in_instruction3770); - insn_format12x246=insn_format12x(); + pushFollow(FOLLOW_insn_format12x_in_instruction4061); + insn_format12x276=insn_format12x(); state._fsp--; - adaptor.addChild(root_0, insn_format12x246.getTree()); + adaptor.addChild(root_0, insn_format12x276.getTree()); } break; case 7 : - // smaliParser.g:808:5: insn_format20bc + // smaliParser.g:844:5: insn_format20bc { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format20bc_in_instruction3776); - insn_format20bc247=insn_format20bc(); + pushFollow(FOLLOW_insn_format20bc_in_instruction4067); + insn_format20bc277=insn_format20bc(); state._fsp--; - adaptor.addChild(root_0, insn_format20bc247.getTree()); + adaptor.addChild(root_0, insn_format20bc277.getTree()); } break; case 8 : - // smaliParser.g:809:5: insn_format20t + // smaliParser.g:845:5: insn_format20t { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format20t_in_instruction3782); - insn_format20t248=insn_format20t(); + pushFollow(FOLLOW_insn_format20t_in_instruction4073); + insn_format20t278=insn_format20t(); state._fsp--; - adaptor.addChild(root_0, insn_format20t248.getTree()); + adaptor.addChild(root_0, insn_format20t278.getTree()); } break; case 9 : - // smaliParser.g:810:5: insn_format21c_field + // smaliParser.g:846:5: insn_format21c_field { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format21c_field_in_instruction3788); - insn_format21c_field249=insn_format21c_field(); + pushFollow(FOLLOW_insn_format21c_field_in_instruction4079); + insn_format21c_field279=insn_format21c_field(); state._fsp--; - adaptor.addChild(root_0, insn_format21c_field249.getTree()); + adaptor.addChild(root_0, insn_format21c_field279.getTree()); } break; case 10 : - // smaliParser.g:811:5: insn_format21c_field_odex + // smaliParser.g:847:5: insn_format21c_field_odex { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format21c_field_odex_in_instruction3794); - insn_format21c_field_odex250=insn_format21c_field_odex(); + pushFollow(FOLLOW_insn_format21c_field_odex_in_instruction4085); + insn_format21c_field_odex280=insn_format21c_field_odex(); state._fsp--; - adaptor.addChild(root_0, insn_format21c_field_odex250.getTree()); + adaptor.addChild(root_0, insn_format21c_field_odex280.getTree()); } break; case 11 : - // smaliParser.g:812:5: insn_format21c_string + // smaliParser.g:848:5: insn_format21c_method_handle { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format21c_string_in_instruction3800); - insn_format21c_string251=insn_format21c_string(); + pushFollow(FOLLOW_insn_format21c_method_handle_in_instruction4091); + insn_format21c_method_handle281=insn_format21c_method_handle(); state._fsp--; - adaptor.addChild(root_0, insn_format21c_string251.getTree()); + adaptor.addChild(root_0, insn_format21c_method_handle281.getTree()); } break; case 12 : - // smaliParser.g:813:5: insn_format21c_type + // smaliParser.g:849:5: insn_format21c_method_type { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format21c_type_in_instruction3806); - insn_format21c_type252=insn_format21c_type(); + pushFollow(FOLLOW_insn_format21c_method_type_in_instruction4097); + insn_format21c_method_type282=insn_format21c_method_type(); state._fsp--; - adaptor.addChild(root_0, insn_format21c_type252.getTree()); + adaptor.addChild(root_0, insn_format21c_method_type282.getTree()); } break; case 13 : - // smaliParser.g:814:5: insn_format21ih + // smaliParser.g:850:5: insn_format21c_string { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format21ih_in_instruction3812); - insn_format21ih253=insn_format21ih(); + pushFollow(FOLLOW_insn_format21c_string_in_instruction4103); + insn_format21c_string283=insn_format21c_string(); state._fsp--; - adaptor.addChild(root_0, insn_format21ih253.getTree()); + adaptor.addChild(root_0, insn_format21c_string283.getTree()); } break; case 14 : - // smaliParser.g:815:5: insn_format21lh + // smaliParser.g:851:5: insn_format21c_type { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format21lh_in_instruction3818); - insn_format21lh254=insn_format21lh(); + pushFollow(FOLLOW_insn_format21c_type_in_instruction4109); + insn_format21c_type284=insn_format21c_type(); state._fsp--; - adaptor.addChild(root_0, insn_format21lh254.getTree()); + adaptor.addChild(root_0, insn_format21c_type284.getTree()); } break; case 15 : - // smaliParser.g:816:5: insn_format21s + // smaliParser.g:852:5: insn_format21ih { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format21s_in_instruction3824); - insn_format21s255=insn_format21s(); + pushFollow(FOLLOW_insn_format21ih_in_instruction4115); + insn_format21ih285=insn_format21ih(); state._fsp--; - adaptor.addChild(root_0, insn_format21s255.getTree()); + adaptor.addChild(root_0, insn_format21ih285.getTree()); } break; case 16 : - // smaliParser.g:817:5: insn_format21t + // smaliParser.g:853:5: insn_format21lh { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format21t_in_instruction3830); - insn_format21t256=insn_format21t(); + pushFollow(FOLLOW_insn_format21lh_in_instruction4121); + insn_format21lh286=insn_format21lh(); state._fsp--; - adaptor.addChild(root_0, insn_format21t256.getTree()); + adaptor.addChild(root_0, insn_format21lh286.getTree()); } break; case 17 : - // smaliParser.g:818:5: insn_format22b + // smaliParser.g:854:5: insn_format21s { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format22b_in_instruction3836); - insn_format22b257=insn_format22b(); + pushFollow(FOLLOW_insn_format21s_in_instruction4127); + insn_format21s287=insn_format21s(); state._fsp--; - adaptor.addChild(root_0, insn_format22b257.getTree()); + adaptor.addChild(root_0, insn_format21s287.getTree()); } break; case 18 : - // smaliParser.g:819:5: insn_format22c_field + // smaliParser.g:855:5: insn_format21t { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format22c_field_in_instruction3842); - insn_format22c_field258=insn_format22c_field(); + pushFollow(FOLLOW_insn_format21t_in_instruction4133); + insn_format21t288=insn_format21t(); state._fsp--; - adaptor.addChild(root_0, insn_format22c_field258.getTree()); + adaptor.addChild(root_0, insn_format21t288.getTree()); } break; case 19 : - // smaliParser.g:820:5: insn_format22c_field_odex + // smaliParser.g:856:5: insn_format22b { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format22c_field_odex_in_instruction3848); - insn_format22c_field_odex259=insn_format22c_field_odex(); + pushFollow(FOLLOW_insn_format22b_in_instruction4139); + insn_format22b289=insn_format22b(); state._fsp--; - adaptor.addChild(root_0, insn_format22c_field_odex259.getTree()); + adaptor.addChild(root_0, insn_format22b289.getTree()); } break; case 20 : - // smaliParser.g:821:5: insn_format22c_type + // smaliParser.g:857:5: insn_format22c_field { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format22c_type_in_instruction3854); - insn_format22c_type260=insn_format22c_type(); + pushFollow(FOLLOW_insn_format22c_field_in_instruction4145); + insn_format22c_field290=insn_format22c_field(); state._fsp--; - adaptor.addChild(root_0, insn_format22c_type260.getTree()); + adaptor.addChild(root_0, insn_format22c_field290.getTree()); } break; case 21 : - // smaliParser.g:822:5: insn_format22cs_field + // smaliParser.g:858:5: insn_format22c_field_odex { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format22cs_field_in_instruction3860); - insn_format22cs_field261=insn_format22cs_field(); + pushFollow(FOLLOW_insn_format22c_field_odex_in_instruction4151); + insn_format22c_field_odex291=insn_format22c_field_odex(); state._fsp--; - adaptor.addChild(root_0, insn_format22cs_field261.getTree()); + adaptor.addChild(root_0, insn_format22c_field_odex291.getTree()); } break; case 22 : - // smaliParser.g:823:5: insn_format22s + // smaliParser.g:859:5: insn_format22c_type { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format22s_in_instruction3866); - insn_format22s262=insn_format22s(); + pushFollow(FOLLOW_insn_format22c_type_in_instruction4157); + insn_format22c_type292=insn_format22c_type(); state._fsp--; - adaptor.addChild(root_0, insn_format22s262.getTree()); + adaptor.addChild(root_0, insn_format22c_type292.getTree()); } break; case 23 : - // smaliParser.g:824:5: insn_format22t + // smaliParser.g:860:5: insn_format22cs_field { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format22t_in_instruction3872); - insn_format22t263=insn_format22t(); + pushFollow(FOLLOW_insn_format22cs_field_in_instruction4163); + insn_format22cs_field293=insn_format22cs_field(); state._fsp--; - adaptor.addChild(root_0, insn_format22t263.getTree()); + adaptor.addChild(root_0, insn_format22cs_field293.getTree()); } break; case 24 : - // smaliParser.g:825:5: insn_format22x + // smaliParser.g:861:5: insn_format22s { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format22x_in_instruction3878); - insn_format22x264=insn_format22x(); + pushFollow(FOLLOW_insn_format22s_in_instruction4169); + insn_format22s294=insn_format22s(); state._fsp--; - adaptor.addChild(root_0, insn_format22x264.getTree()); + adaptor.addChild(root_0, insn_format22s294.getTree()); } break; case 25 : - // smaliParser.g:826:5: insn_format23x + // smaliParser.g:862:5: insn_format22t { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format23x_in_instruction3884); - insn_format23x265=insn_format23x(); + pushFollow(FOLLOW_insn_format22t_in_instruction4175); + insn_format22t295=insn_format22t(); state._fsp--; - adaptor.addChild(root_0, insn_format23x265.getTree()); + adaptor.addChild(root_0, insn_format22t295.getTree()); } break; case 26 : - // smaliParser.g:827:5: insn_format30t + // smaliParser.g:863:5: insn_format22x { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format30t_in_instruction3890); - insn_format30t266=insn_format30t(); + pushFollow(FOLLOW_insn_format22x_in_instruction4181); + insn_format22x296=insn_format22x(); state._fsp--; - adaptor.addChild(root_0, insn_format30t266.getTree()); + adaptor.addChild(root_0, insn_format22x296.getTree()); } break; case 27 : - // smaliParser.g:828:5: insn_format31c + // smaliParser.g:864:5: insn_format23x { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format31c_in_instruction3896); - insn_format31c267=insn_format31c(); + pushFollow(FOLLOW_insn_format23x_in_instruction4187); + insn_format23x297=insn_format23x(); state._fsp--; - adaptor.addChild(root_0, insn_format31c267.getTree()); + adaptor.addChild(root_0, insn_format23x297.getTree()); } break; case 28 : - // smaliParser.g:829:5: insn_format31i + // smaliParser.g:865:5: insn_format30t { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format31i_in_instruction3902); - insn_format31i268=insn_format31i(); + pushFollow(FOLLOW_insn_format30t_in_instruction4193); + insn_format30t298=insn_format30t(); state._fsp--; - adaptor.addChild(root_0, insn_format31i268.getTree()); + adaptor.addChild(root_0, insn_format30t298.getTree()); } break; case 29 : - // smaliParser.g:830:5: insn_format31t + // smaliParser.g:866:5: insn_format31c { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format31t_in_instruction3908); - insn_format31t269=insn_format31t(); + pushFollow(FOLLOW_insn_format31c_in_instruction4199); + insn_format31c299=insn_format31c(); state._fsp--; - adaptor.addChild(root_0, insn_format31t269.getTree()); + adaptor.addChild(root_0, insn_format31c299.getTree()); } break; case 30 : - // smaliParser.g:831:5: insn_format32x + // smaliParser.g:867:5: insn_format31i { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format32x_in_instruction3914); - insn_format32x270=insn_format32x(); + pushFollow(FOLLOW_insn_format31i_in_instruction4205); + insn_format31i300=insn_format31i(); state._fsp--; - adaptor.addChild(root_0, insn_format32x270.getTree()); + adaptor.addChild(root_0, insn_format31i300.getTree()); } break; case 31 : - // smaliParser.g:832:5: insn_format35c_method + // smaliParser.g:868:5: insn_format31t { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format35c_method_in_instruction3920); - insn_format35c_method271=insn_format35c_method(); + pushFollow(FOLLOW_insn_format31t_in_instruction4211); + insn_format31t301=insn_format31t(); state._fsp--; - adaptor.addChild(root_0, insn_format35c_method271.getTree()); + adaptor.addChild(root_0, insn_format31t301.getTree()); } break; case 32 : - // smaliParser.g:833:5: insn_format35c_type + // smaliParser.g:869:5: insn_format32x { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format35c_type_in_instruction3926); - insn_format35c_type272=insn_format35c_type(); + pushFollow(FOLLOW_insn_format32x_in_instruction4217); + insn_format32x302=insn_format32x(); state._fsp--; - adaptor.addChild(root_0, insn_format35c_type272.getTree()); + adaptor.addChild(root_0, insn_format32x302.getTree()); } break; case 33 : - // smaliParser.g:834:5: insn_format35c_method_odex + // smaliParser.g:870:5: insn_format35c_call_site { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format35c_method_odex_in_instruction3932); - insn_format35c_method_odex273=insn_format35c_method_odex(); + pushFollow(FOLLOW_insn_format35c_call_site_in_instruction4223); + insn_format35c_call_site303=insn_format35c_call_site(); state._fsp--; - adaptor.addChild(root_0, insn_format35c_method_odex273.getTree()); + adaptor.addChild(root_0, insn_format35c_call_site303.getTree()); } break; case 34 : - // smaliParser.g:835:5: insn_format35mi_method + // smaliParser.g:871:5: insn_format35c_method { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format35mi_method_in_instruction3938); - insn_format35mi_method274=insn_format35mi_method(); + pushFollow(FOLLOW_insn_format35c_method_in_instruction4229); + insn_format35c_method304=insn_format35c_method(); state._fsp--; - adaptor.addChild(root_0, insn_format35mi_method274.getTree()); + adaptor.addChild(root_0, insn_format35c_method304.getTree()); } break; case 35 : - // smaliParser.g:836:5: insn_format35ms_method + // smaliParser.g:872:5: insn_format35c_type { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format35ms_method_in_instruction3944); - insn_format35ms_method275=insn_format35ms_method(); + pushFollow(FOLLOW_insn_format35c_type_in_instruction4235); + insn_format35c_type305=insn_format35c_type(); state._fsp--; - adaptor.addChild(root_0, insn_format35ms_method275.getTree()); + adaptor.addChild(root_0, insn_format35c_type305.getTree()); } break; case 36 : - // smaliParser.g:837:5: insn_format3rc_method + // smaliParser.g:873:5: insn_format35c_method_odex { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format3rc_method_in_instruction3950); - insn_format3rc_method276=insn_format3rc_method(); + pushFollow(FOLLOW_insn_format35c_method_odex_in_instruction4241); + insn_format35c_method_odex306=insn_format35c_method_odex(); state._fsp--; - adaptor.addChild(root_0, insn_format3rc_method276.getTree()); + adaptor.addChild(root_0, insn_format35c_method_odex306.getTree()); } break; case 37 : - // smaliParser.g:838:5: insn_format3rc_method_odex + // smaliParser.g:874:5: insn_format35mi_method { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format3rc_method_odex_in_instruction3956); - insn_format3rc_method_odex277=insn_format3rc_method_odex(); + pushFollow(FOLLOW_insn_format35mi_method_in_instruction4247); + insn_format35mi_method307=insn_format35mi_method(); state._fsp--; - adaptor.addChild(root_0, insn_format3rc_method_odex277.getTree()); + adaptor.addChild(root_0, insn_format35mi_method307.getTree()); } break; case 38 : - // smaliParser.g:839:5: insn_format3rc_type + // smaliParser.g:875:5: insn_format35ms_method { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format3rc_type_in_instruction3962); - insn_format3rc_type278=insn_format3rc_type(); + pushFollow(FOLLOW_insn_format35ms_method_in_instruction4253); + insn_format35ms_method308=insn_format35ms_method(); state._fsp--; - adaptor.addChild(root_0, insn_format3rc_type278.getTree()); + adaptor.addChild(root_0, insn_format35ms_method308.getTree()); } break; case 39 : - // smaliParser.g:840:5: insn_format3rmi_method + // smaliParser.g:876:5: insn_format3rc_call_site { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format3rmi_method_in_instruction3968); - insn_format3rmi_method279=insn_format3rmi_method(); + pushFollow(FOLLOW_insn_format3rc_call_site_in_instruction4259); + insn_format3rc_call_site309=insn_format3rc_call_site(); state._fsp--; - adaptor.addChild(root_0, insn_format3rmi_method279.getTree()); + adaptor.addChild(root_0, insn_format3rc_call_site309.getTree()); } break; case 40 : - // smaliParser.g:841:5: insn_format3rms_method + // smaliParser.g:877:5: insn_format3rc_method { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format3rms_method_in_instruction3974); - insn_format3rms_method280=insn_format3rms_method(); + pushFollow(FOLLOW_insn_format3rc_method_in_instruction4265); + insn_format3rc_method310=insn_format3rc_method(); state._fsp--; - adaptor.addChild(root_0, insn_format3rms_method280.getTree()); + adaptor.addChild(root_0, insn_format3rc_method310.getTree()); } break; case 41 : - // smaliParser.g:842:5: insn_format45cc_method + // smaliParser.g:878:5: insn_format3rc_method_odex { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format45cc_method_in_instruction3980); - insn_format45cc_method281=insn_format45cc_method(); + pushFollow(FOLLOW_insn_format3rc_method_odex_in_instruction4271); + insn_format3rc_method_odex311=insn_format3rc_method_odex(); state._fsp--; - adaptor.addChild(root_0, insn_format45cc_method281.getTree()); + adaptor.addChild(root_0, insn_format3rc_method_odex311.getTree()); } break; case 42 : - // smaliParser.g:843:5: insn_format4rcc_method + // smaliParser.g:879:5: insn_format3rc_type { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format4rcc_method_in_instruction3986); - insn_format4rcc_method282=insn_format4rcc_method(); + pushFollow(FOLLOW_insn_format3rc_type_in_instruction4277); + insn_format3rc_type312=insn_format3rc_type(); state._fsp--; - adaptor.addChild(root_0, insn_format4rcc_method282.getTree()); + adaptor.addChild(root_0, insn_format3rc_type312.getTree()); } break; case 43 : - // smaliParser.g:844:5: insn_format51l + // smaliParser.g:880:5: insn_format3rmi_method { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_format51l_in_instruction3992); - insn_format51l283=insn_format51l(); + pushFollow(FOLLOW_insn_format3rmi_method_in_instruction4283); + insn_format3rmi_method313=insn_format3rmi_method(); state._fsp--; - adaptor.addChild(root_0, insn_format51l283.getTree()); + adaptor.addChild(root_0, insn_format3rmi_method313.getTree()); } break; case 44 : - // smaliParser.g:845:5: insn_array_data_directive + // smaliParser.g:881:5: insn_format3rms_method { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_array_data_directive_in_instruction3998); - insn_array_data_directive284=insn_array_data_directive(); + pushFollow(FOLLOW_insn_format3rms_method_in_instruction4289); + insn_format3rms_method314=insn_format3rms_method(); state._fsp--; - adaptor.addChild(root_0, insn_array_data_directive284.getTree()); + adaptor.addChild(root_0, insn_format3rms_method314.getTree()); } break; case 45 : - // smaliParser.g:846:5: insn_packed_switch_directive + // smaliParser.g:882:5: insn_format45cc_method { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_packed_switch_directive_in_instruction4004); - insn_packed_switch_directive285=insn_packed_switch_directive(); + pushFollow(FOLLOW_insn_format45cc_method_in_instruction4295); + insn_format45cc_method315=insn_format45cc_method(); state._fsp--; - adaptor.addChild(root_0, insn_packed_switch_directive285.getTree()); + adaptor.addChild(root_0, insn_format45cc_method315.getTree()); } break; case 46 : - // smaliParser.g:847:5: insn_sparse_switch_directive + // smaliParser.g:883:5: insn_format4rcc_method + { + root_0 = (CommonTree)adaptor.nil(); + + + pushFollow(FOLLOW_insn_format4rcc_method_in_instruction4301); + insn_format4rcc_method316=insn_format4rcc_method(); + state._fsp--; + + adaptor.addChild(root_0, insn_format4rcc_method316.getTree()); + + } + break; + case 47 : + // smaliParser.g:884:5: insn_format51l { root_0 = (CommonTree)adaptor.nil(); - pushFollow(FOLLOW_insn_sparse_switch_directive_in_instruction4010); - insn_sparse_switch_directive286=insn_sparse_switch_directive(); + pushFollow(FOLLOW_insn_format51l_in_instruction4307); + insn_format51l317=insn_format51l(); state._fsp--; - adaptor.addChild(root_0, insn_sparse_switch_directive286.getTree()); + adaptor.addChild(root_0, insn_format51l317.getTree()); + + } + break; + case 48 : + // smaliParser.g:885:5: insn_array_data_directive + { + root_0 = (CommonTree)adaptor.nil(); + + + pushFollow(FOLLOW_insn_array_data_directive_in_instruction4313); + insn_array_data_directive318=insn_array_data_directive(); + state._fsp--; + + adaptor.addChild(root_0, insn_array_data_directive318.getTree()); + + } + break; + case 49 : + // smaliParser.g:886:5: insn_packed_switch_directive + { + root_0 = (CommonTree)adaptor.nil(); + + + pushFollow(FOLLOW_insn_packed_switch_directive_in_instruction4319); + insn_packed_switch_directive319=insn_packed_switch_directive(); + state._fsp--; + + adaptor.addChild(root_0, insn_packed_switch_directive319.getTree()); + + } + break; + case 50 : + // smaliParser.g:887:5: insn_sparse_switch_directive + { + root_0 = (CommonTree)adaptor.nil(); + + + pushFollow(FOLLOW_insn_sparse_switch_directive_in_instruction4325); + insn_sparse_switch_directive320=insn_sparse_switch_directive(); + state._fsp--; + + adaptor.addChild(root_0, insn_sparse_switch_directive320.getTree()); } break; @@ -10321,32 +11260,32 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format10t" - // smaliParser.g:849:1: insn_format10t : INSTRUCTION_FORMAT10t label_ref -> ^( I_STATEMENT_FORMAT10t[$start, \"I_STATEMENT_FORMAT10t\"] INSTRUCTION_FORMAT10t label_ref ) ; + // smaliParser.g:889:1: insn_format10t : INSTRUCTION_FORMAT10t label_ref -> ^( I_STATEMENT_FORMAT10t[$start, \"I_STATEMENT_FORMAT10t\"] INSTRUCTION_FORMAT10t label_ref ) ; public final smaliParser.insn_format10t_return insn_format10t() throws RecognitionException { smaliParser.insn_format10t_return retval = new smaliParser.insn_format10t_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT10t287=null; - ParserRuleReturnScope label_ref288 =null; + Token INSTRUCTION_FORMAT10t321=null; + ParserRuleReturnScope label_ref322 =null; - CommonTree INSTRUCTION_FORMAT10t287_tree=null; + CommonTree INSTRUCTION_FORMAT10t321_tree=null; RewriteRuleTokenStream stream_INSTRUCTION_FORMAT10t=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT10t"); RewriteRuleSubtreeStream stream_label_ref=new RewriteRuleSubtreeStream(adaptor,"rule label_ref"); try { - // smaliParser.g:850:3: ( INSTRUCTION_FORMAT10t label_ref -> ^( I_STATEMENT_FORMAT10t[$start, \"I_STATEMENT_FORMAT10t\"] INSTRUCTION_FORMAT10t label_ref ) ) - // smaliParser.g:852:5: INSTRUCTION_FORMAT10t label_ref + // smaliParser.g:890:3: ( INSTRUCTION_FORMAT10t label_ref -> ^( I_STATEMENT_FORMAT10t[$start, \"I_STATEMENT_FORMAT10t\"] INSTRUCTION_FORMAT10t label_ref ) ) + // smaliParser.g:892:5: INSTRUCTION_FORMAT10t label_ref { - INSTRUCTION_FORMAT10t287=(Token)match(input,INSTRUCTION_FORMAT10t,FOLLOW_INSTRUCTION_FORMAT10t_in_insn_format10t4030); - stream_INSTRUCTION_FORMAT10t.add(INSTRUCTION_FORMAT10t287); + INSTRUCTION_FORMAT10t321=(Token)match(input,INSTRUCTION_FORMAT10t,FOLLOW_INSTRUCTION_FORMAT10t_in_insn_format10t4345); + stream_INSTRUCTION_FORMAT10t.add(INSTRUCTION_FORMAT10t321); - pushFollow(FOLLOW_label_ref_in_insn_format10t4032); - label_ref288=label_ref(); + pushFollow(FOLLOW_label_ref_in_insn_format10t4347); + label_ref322=label_ref(); state._fsp--; - stream_label_ref.add(label_ref288.getTree()); + stream_label_ref.add(label_ref322.getTree()); // AST REWRITE // elements: INSTRUCTION_FORMAT10t, label_ref // token labels: @@ -10358,9 +11297,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 853:5: -> ^( I_STATEMENT_FORMAT10t[$start, \"I_STATEMENT_FORMAT10t\"] INSTRUCTION_FORMAT10t label_ref ) + // 893:5: -> ^( I_STATEMENT_FORMAT10t[$start, \"I_STATEMENT_FORMAT10t\"] INSTRUCTION_FORMAT10t label_ref ) { - // smaliParser.g:853:8: ^( I_STATEMENT_FORMAT10t[$start, \"I_STATEMENT_FORMAT10t\"] INSTRUCTION_FORMAT10t label_ref ) + // smaliParser.g:893:8: ^( I_STATEMENT_FORMAT10t[$start, \"I_STATEMENT_FORMAT10t\"] INSTRUCTION_FORMAT10t label_ref ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT10t, (retval.start), "I_STATEMENT_FORMAT10t"), root_1); @@ -10403,24 +11342,24 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format10x" - // smaliParser.g:855:1: insn_format10x : INSTRUCTION_FORMAT10x -> ^( I_STATEMENT_FORMAT10x[$start, \"I_STATEMENT_FORMAT10x\"] INSTRUCTION_FORMAT10x ) ; + // smaliParser.g:895:1: insn_format10x : INSTRUCTION_FORMAT10x -> ^( I_STATEMENT_FORMAT10x[$start, \"I_STATEMENT_FORMAT10x\"] INSTRUCTION_FORMAT10x ) ; public final smaliParser.insn_format10x_return insn_format10x() throws RecognitionException { smaliParser.insn_format10x_return retval = new smaliParser.insn_format10x_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT10x289=null; + Token INSTRUCTION_FORMAT10x323=null; - CommonTree INSTRUCTION_FORMAT10x289_tree=null; + CommonTree INSTRUCTION_FORMAT10x323_tree=null; RewriteRuleTokenStream stream_INSTRUCTION_FORMAT10x=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT10x"); try { - // smaliParser.g:856:3: ( INSTRUCTION_FORMAT10x -> ^( I_STATEMENT_FORMAT10x[$start, \"I_STATEMENT_FORMAT10x\"] INSTRUCTION_FORMAT10x ) ) - // smaliParser.g:857:5: INSTRUCTION_FORMAT10x + // smaliParser.g:896:3: ( INSTRUCTION_FORMAT10x -> ^( I_STATEMENT_FORMAT10x[$start, \"I_STATEMENT_FORMAT10x\"] INSTRUCTION_FORMAT10x ) ) + // smaliParser.g:897:5: INSTRUCTION_FORMAT10x { - INSTRUCTION_FORMAT10x289=(Token)match(input,INSTRUCTION_FORMAT10x,FOLLOW_INSTRUCTION_FORMAT10x_in_insn_format10x4062); - stream_INSTRUCTION_FORMAT10x.add(INSTRUCTION_FORMAT10x289); + INSTRUCTION_FORMAT10x323=(Token)match(input,INSTRUCTION_FORMAT10x,FOLLOW_INSTRUCTION_FORMAT10x_in_insn_format10x4377); + stream_INSTRUCTION_FORMAT10x.add(INSTRUCTION_FORMAT10x323); // AST REWRITE // elements: INSTRUCTION_FORMAT10x @@ -10433,9 +11372,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 858:5: -> ^( I_STATEMENT_FORMAT10x[$start, \"I_STATEMENT_FORMAT10x\"] INSTRUCTION_FORMAT10x ) + // 898:5: -> ^( I_STATEMENT_FORMAT10x[$start, \"I_STATEMENT_FORMAT10x\"] INSTRUCTION_FORMAT10x ) { - // smaliParser.g:858:8: ^( I_STATEMENT_FORMAT10x[$start, \"I_STATEMENT_FORMAT10x\"] INSTRUCTION_FORMAT10x ) + // smaliParser.g:898:8: ^( I_STATEMENT_FORMAT10x[$start, \"I_STATEMENT_FORMAT10x\"] INSTRUCTION_FORMAT10x ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT10x, (retval.start), "I_STATEMENT_FORMAT10x"), root_1); @@ -10477,30 +11416,30 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format10x_odex" - // smaliParser.g:860:1: insn_format10x_odex : INSTRUCTION_FORMAT10x_ODEX ; + // smaliParser.g:900:1: insn_format10x_odex : INSTRUCTION_FORMAT10x_ODEX ; public final smaliParser.insn_format10x_odex_return insn_format10x_odex() throws RecognitionException { smaliParser.insn_format10x_odex_return retval = new smaliParser.insn_format10x_odex_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT10x_ODEX290=null; + Token INSTRUCTION_FORMAT10x_ODEX324=null; - CommonTree INSTRUCTION_FORMAT10x_ODEX290_tree=null; + CommonTree INSTRUCTION_FORMAT10x_ODEX324_tree=null; try { - // smaliParser.g:861:3: ( INSTRUCTION_FORMAT10x_ODEX ) - // smaliParser.g:862:5: INSTRUCTION_FORMAT10x_ODEX + // smaliParser.g:901:3: ( INSTRUCTION_FORMAT10x_ODEX ) + // smaliParser.g:902:5: INSTRUCTION_FORMAT10x_ODEX { root_0 = (CommonTree)adaptor.nil(); - INSTRUCTION_FORMAT10x_ODEX290=(Token)match(input,INSTRUCTION_FORMAT10x_ODEX,FOLLOW_INSTRUCTION_FORMAT10x_ODEX_in_insn_format10x_odex4090); - INSTRUCTION_FORMAT10x_ODEX290_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT10x_ODEX290); - adaptor.addChild(root_0, INSTRUCTION_FORMAT10x_ODEX290_tree); + INSTRUCTION_FORMAT10x_ODEX324=(Token)match(input,INSTRUCTION_FORMAT10x_ODEX,FOLLOW_INSTRUCTION_FORMAT10x_ODEX_in_insn_format10x_odex4405); + INSTRUCTION_FORMAT10x_ODEX324_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT10x_ODEX324); + adaptor.addChild(root_0, INSTRUCTION_FORMAT10x_ODEX324_tree); - throwOdexedInstructionException(input, (INSTRUCTION_FORMAT10x_ODEX290!=null?INSTRUCTION_FORMAT10x_ODEX290.getText():null)); + throwOdexedInstructionException(input, (INSTRUCTION_FORMAT10x_ODEX324!=null?INSTRUCTION_FORMAT10x_ODEX324.getText():null)); } @@ -10531,46 +11470,46 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format11n" - // smaliParser.g:867:1: insn_format11n : INSTRUCTION_FORMAT11n REGISTER COMMA integral_literal -> ^( I_STATEMENT_FORMAT11n[$start, \"I_STATEMENT_FORMAT11n\"] INSTRUCTION_FORMAT11n REGISTER integral_literal ) ; + // smaliParser.g:907:1: insn_format11n : INSTRUCTION_FORMAT11n REGISTER COMMA integral_literal -> ^( I_STATEMENT_FORMAT11n[$start, \"I_STATEMENT_FORMAT11n\"] INSTRUCTION_FORMAT11n REGISTER integral_literal ) ; public final smaliParser.insn_format11n_return insn_format11n() throws RecognitionException { smaliParser.insn_format11n_return retval = new smaliParser.insn_format11n_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT11n291=null; - Token REGISTER292=null; - Token COMMA293=null; - ParserRuleReturnScope integral_literal294 =null; + Token INSTRUCTION_FORMAT11n325=null; + Token REGISTER326=null; + Token COMMA327=null; + ParserRuleReturnScope integral_literal328 =null; - CommonTree INSTRUCTION_FORMAT11n291_tree=null; - CommonTree REGISTER292_tree=null; - CommonTree COMMA293_tree=null; + CommonTree INSTRUCTION_FORMAT11n325_tree=null; + CommonTree REGISTER326_tree=null; + CommonTree COMMA327_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT11n=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT11n"); RewriteRuleSubtreeStream stream_integral_literal=new RewriteRuleSubtreeStream(adaptor,"rule integral_literal"); try { - // smaliParser.g:868:3: ( INSTRUCTION_FORMAT11n REGISTER COMMA integral_literal -> ^( I_STATEMENT_FORMAT11n[$start, \"I_STATEMENT_FORMAT11n\"] INSTRUCTION_FORMAT11n REGISTER integral_literal ) ) - // smaliParser.g:869:5: INSTRUCTION_FORMAT11n REGISTER COMMA integral_literal + // smaliParser.g:908:3: ( INSTRUCTION_FORMAT11n REGISTER COMMA integral_literal -> ^( I_STATEMENT_FORMAT11n[$start, \"I_STATEMENT_FORMAT11n\"] INSTRUCTION_FORMAT11n REGISTER integral_literal ) ) + // smaliParser.g:909:5: INSTRUCTION_FORMAT11n REGISTER COMMA integral_literal { - INSTRUCTION_FORMAT11n291=(Token)match(input,INSTRUCTION_FORMAT11n,FOLLOW_INSTRUCTION_FORMAT11n_in_insn_format11n4111); - stream_INSTRUCTION_FORMAT11n.add(INSTRUCTION_FORMAT11n291); + INSTRUCTION_FORMAT11n325=(Token)match(input,INSTRUCTION_FORMAT11n,FOLLOW_INSTRUCTION_FORMAT11n_in_insn_format11n4426); + stream_INSTRUCTION_FORMAT11n.add(INSTRUCTION_FORMAT11n325); - REGISTER292=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format11n4113); - stream_REGISTER.add(REGISTER292); + REGISTER326=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format11n4428); + stream_REGISTER.add(REGISTER326); - COMMA293=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format11n4115); - stream_COMMA.add(COMMA293); + COMMA327=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format11n4430); + stream_COMMA.add(COMMA327); - pushFollow(FOLLOW_integral_literal_in_insn_format11n4117); - integral_literal294=integral_literal(); + pushFollow(FOLLOW_integral_literal_in_insn_format11n4432); + integral_literal328=integral_literal(); state._fsp--; - stream_integral_literal.add(integral_literal294.getTree()); + stream_integral_literal.add(integral_literal328.getTree()); // AST REWRITE - // elements: integral_literal, INSTRUCTION_FORMAT11n, REGISTER + // elements: REGISTER, integral_literal, INSTRUCTION_FORMAT11n // token labels: // rule labels: retval // token list labels: @@ -10580,9 +11519,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 870:5: -> ^( I_STATEMENT_FORMAT11n[$start, \"I_STATEMENT_FORMAT11n\"] INSTRUCTION_FORMAT11n REGISTER integral_literal ) + // 910:5: -> ^( I_STATEMENT_FORMAT11n[$start, \"I_STATEMENT_FORMAT11n\"] INSTRUCTION_FORMAT11n REGISTER integral_literal ) { - // smaliParser.g:870:8: ^( I_STATEMENT_FORMAT11n[$start, \"I_STATEMENT_FORMAT11n\"] INSTRUCTION_FORMAT11n REGISTER integral_literal ) + // smaliParser.g:910:8: ^( I_STATEMENT_FORMAT11n[$start, \"I_STATEMENT_FORMAT11n\"] INSTRUCTION_FORMAT11n REGISTER integral_literal ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT11n, (retval.start), "I_STATEMENT_FORMAT11n"), root_1); @@ -10626,33 +11565,33 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format11x" - // smaliParser.g:872:1: insn_format11x : INSTRUCTION_FORMAT11x REGISTER -> ^( I_STATEMENT_FORMAT11x[$start, \"I_STATEMENT_FORMAT11x\"] INSTRUCTION_FORMAT11x REGISTER ) ; + // smaliParser.g:912:1: insn_format11x : INSTRUCTION_FORMAT11x REGISTER -> ^( I_STATEMENT_FORMAT11x[$start, \"I_STATEMENT_FORMAT11x\"] INSTRUCTION_FORMAT11x REGISTER ) ; public final smaliParser.insn_format11x_return insn_format11x() throws RecognitionException { smaliParser.insn_format11x_return retval = new smaliParser.insn_format11x_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT11x295=null; - Token REGISTER296=null; + Token INSTRUCTION_FORMAT11x329=null; + Token REGISTER330=null; - CommonTree INSTRUCTION_FORMAT11x295_tree=null; - CommonTree REGISTER296_tree=null; + CommonTree INSTRUCTION_FORMAT11x329_tree=null; + CommonTree REGISTER330_tree=null; RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT11x=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT11x"); try { - // smaliParser.g:873:3: ( INSTRUCTION_FORMAT11x REGISTER -> ^( I_STATEMENT_FORMAT11x[$start, \"I_STATEMENT_FORMAT11x\"] INSTRUCTION_FORMAT11x REGISTER ) ) - // smaliParser.g:874:5: INSTRUCTION_FORMAT11x REGISTER + // smaliParser.g:913:3: ( INSTRUCTION_FORMAT11x REGISTER -> ^( I_STATEMENT_FORMAT11x[$start, \"I_STATEMENT_FORMAT11x\"] INSTRUCTION_FORMAT11x REGISTER ) ) + // smaliParser.g:914:5: INSTRUCTION_FORMAT11x REGISTER { - INSTRUCTION_FORMAT11x295=(Token)match(input,INSTRUCTION_FORMAT11x,FOLLOW_INSTRUCTION_FORMAT11x_in_insn_format11x4149); - stream_INSTRUCTION_FORMAT11x.add(INSTRUCTION_FORMAT11x295); + INSTRUCTION_FORMAT11x329=(Token)match(input,INSTRUCTION_FORMAT11x,FOLLOW_INSTRUCTION_FORMAT11x_in_insn_format11x4464); + stream_INSTRUCTION_FORMAT11x.add(INSTRUCTION_FORMAT11x329); - REGISTER296=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format11x4151); - stream_REGISTER.add(REGISTER296); + REGISTER330=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format11x4466); + stream_REGISTER.add(REGISTER330); // AST REWRITE - // elements: REGISTER, INSTRUCTION_FORMAT11x + // elements: INSTRUCTION_FORMAT11x, REGISTER // token labels: // rule labels: retval // token list labels: @@ -10662,9 +11601,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 875:5: -> ^( I_STATEMENT_FORMAT11x[$start, \"I_STATEMENT_FORMAT11x\"] INSTRUCTION_FORMAT11x REGISTER ) + // 915:5: -> ^( I_STATEMENT_FORMAT11x[$start, \"I_STATEMENT_FORMAT11x\"] INSTRUCTION_FORMAT11x REGISTER ) { - // smaliParser.g:875:8: ^( I_STATEMENT_FORMAT11x[$start, \"I_STATEMENT_FORMAT11x\"] INSTRUCTION_FORMAT11x REGISTER ) + // smaliParser.g:915:8: ^( I_STATEMENT_FORMAT11x[$start, \"I_STATEMENT_FORMAT11x\"] INSTRUCTION_FORMAT11x REGISTER ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT11x, (retval.start), "I_STATEMENT_FORMAT11x"), root_1); @@ -10707,45 +11646,45 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format12x" - // smaliParser.g:877:1: insn_format12x : instruction_format12x REGISTER COMMA REGISTER -> ^( I_STATEMENT_FORMAT12x[$start, \"I_STATEMENT_FORMAT12x\"] instruction_format12x REGISTER REGISTER ) ; + // smaliParser.g:917:1: insn_format12x : instruction_format12x REGISTER COMMA REGISTER -> ^( I_STATEMENT_FORMAT12x[$start, \"I_STATEMENT_FORMAT12x\"] instruction_format12x REGISTER REGISTER ) ; public final smaliParser.insn_format12x_return insn_format12x() throws RecognitionException { smaliParser.insn_format12x_return retval = new smaliParser.insn_format12x_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token REGISTER298=null; - Token COMMA299=null; - Token REGISTER300=null; - ParserRuleReturnScope instruction_format12x297 =null; + Token REGISTER332=null; + Token COMMA333=null; + Token REGISTER334=null; + ParserRuleReturnScope instruction_format12x331 =null; - CommonTree REGISTER298_tree=null; - CommonTree COMMA299_tree=null; - CommonTree REGISTER300_tree=null; + CommonTree REGISTER332_tree=null; + CommonTree COMMA333_tree=null; + CommonTree REGISTER334_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleSubtreeStream stream_instruction_format12x=new RewriteRuleSubtreeStream(adaptor,"rule instruction_format12x"); try { - // smaliParser.g:878:3: ( instruction_format12x REGISTER COMMA REGISTER -> ^( I_STATEMENT_FORMAT12x[$start, \"I_STATEMENT_FORMAT12x\"] instruction_format12x REGISTER REGISTER ) ) - // smaliParser.g:879:5: instruction_format12x REGISTER COMMA REGISTER + // smaliParser.g:918:3: ( instruction_format12x REGISTER COMMA REGISTER -> ^( I_STATEMENT_FORMAT12x[$start, \"I_STATEMENT_FORMAT12x\"] instruction_format12x REGISTER REGISTER ) ) + // smaliParser.g:919:5: instruction_format12x REGISTER COMMA REGISTER { - pushFollow(FOLLOW_instruction_format12x_in_insn_format12x4181); - instruction_format12x297=instruction_format12x(); + pushFollow(FOLLOW_instruction_format12x_in_insn_format12x4496); + instruction_format12x331=instruction_format12x(); state._fsp--; - stream_instruction_format12x.add(instruction_format12x297.getTree()); - REGISTER298=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format12x4183); - stream_REGISTER.add(REGISTER298); + stream_instruction_format12x.add(instruction_format12x331.getTree()); + REGISTER332=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format12x4498); + stream_REGISTER.add(REGISTER332); - COMMA299=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format12x4185); - stream_COMMA.add(COMMA299); + COMMA333=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format12x4500); + stream_COMMA.add(COMMA333); - REGISTER300=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format12x4187); - stream_REGISTER.add(REGISTER300); + REGISTER334=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format12x4502); + stream_REGISTER.add(REGISTER334); // AST REWRITE - // elements: REGISTER, instruction_format12x, REGISTER + // elements: instruction_format12x, REGISTER, REGISTER // token labels: // rule labels: retval // token list labels: @@ -10755,9 +11694,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 880:5: -> ^( I_STATEMENT_FORMAT12x[$start, \"I_STATEMENT_FORMAT12x\"] instruction_format12x REGISTER REGISTER ) + // 920:5: -> ^( I_STATEMENT_FORMAT12x[$start, \"I_STATEMENT_FORMAT12x\"] instruction_format12x REGISTER REGISTER ) { - // smaliParser.g:880:8: ^( I_STATEMENT_FORMAT12x[$start, \"I_STATEMENT_FORMAT12x\"] instruction_format12x REGISTER REGISTER ) + // smaliParser.g:920:8: ^( I_STATEMENT_FORMAT12x[$start, \"I_STATEMENT_FORMAT12x\"] instruction_format12x REGISTER REGISTER ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT12x, (retval.start), "I_STATEMENT_FORMAT12x"), root_1); @@ -10801,51 +11740,51 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format20bc" - // smaliParser.g:882:1: insn_format20bc : INSTRUCTION_FORMAT20bc VERIFICATION_ERROR_TYPE COMMA verification_error_reference -> ^( I_STATEMENT_FORMAT20bc INSTRUCTION_FORMAT20bc VERIFICATION_ERROR_TYPE verification_error_reference ) ; + // smaliParser.g:922:1: insn_format20bc : INSTRUCTION_FORMAT20bc VERIFICATION_ERROR_TYPE COMMA verification_error_reference -> ^( I_STATEMENT_FORMAT20bc INSTRUCTION_FORMAT20bc VERIFICATION_ERROR_TYPE verification_error_reference ) ; public final smaliParser.insn_format20bc_return insn_format20bc() throws RecognitionException { smaliParser.insn_format20bc_return retval = new smaliParser.insn_format20bc_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT20bc301=null; - Token VERIFICATION_ERROR_TYPE302=null; - Token COMMA303=null; - ParserRuleReturnScope verification_error_reference304 =null; + Token INSTRUCTION_FORMAT20bc335=null; + Token VERIFICATION_ERROR_TYPE336=null; + Token COMMA337=null; + ParserRuleReturnScope verification_error_reference338 =null; - CommonTree INSTRUCTION_FORMAT20bc301_tree=null; - CommonTree VERIFICATION_ERROR_TYPE302_tree=null; - CommonTree COMMA303_tree=null; + CommonTree INSTRUCTION_FORMAT20bc335_tree=null; + CommonTree VERIFICATION_ERROR_TYPE336_tree=null; + CommonTree COMMA337_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_VERIFICATION_ERROR_TYPE=new RewriteRuleTokenStream(adaptor,"token VERIFICATION_ERROR_TYPE"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT20bc=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT20bc"); RewriteRuleSubtreeStream stream_verification_error_reference=new RewriteRuleSubtreeStream(adaptor,"rule verification_error_reference"); try { - // smaliParser.g:883:3: ( INSTRUCTION_FORMAT20bc VERIFICATION_ERROR_TYPE COMMA verification_error_reference -> ^( I_STATEMENT_FORMAT20bc INSTRUCTION_FORMAT20bc VERIFICATION_ERROR_TYPE verification_error_reference ) ) - // smaliParser.g:884:5: INSTRUCTION_FORMAT20bc VERIFICATION_ERROR_TYPE COMMA verification_error_reference + // smaliParser.g:923:3: ( INSTRUCTION_FORMAT20bc VERIFICATION_ERROR_TYPE COMMA verification_error_reference -> ^( I_STATEMENT_FORMAT20bc INSTRUCTION_FORMAT20bc VERIFICATION_ERROR_TYPE verification_error_reference ) ) + // smaliParser.g:924:5: INSTRUCTION_FORMAT20bc VERIFICATION_ERROR_TYPE COMMA verification_error_reference { - INSTRUCTION_FORMAT20bc301=(Token)match(input,INSTRUCTION_FORMAT20bc,FOLLOW_INSTRUCTION_FORMAT20bc_in_insn_format20bc4219); - stream_INSTRUCTION_FORMAT20bc.add(INSTRUCTION_FORMAT20bc301); + INSTRUCTION_FORMAT20bc335=(Token)match(input,INSTRUCTION_FORMAT20bc,FOLLOW_INSTRUCTION_FORMAT20bc_in_insn_format20bc4534); + stream_INSTRUCTION_FORMAT20bc.add(INSTRUCTION_FORMAT20bc335); - VERIFICATION_ERROR_TYPE302=(Token)match(input,VERIFICATION_ERROR_TYPE,FOLLOW_VERIFICATION_ERROR_TYPE_in_insn_format20bc4221); - stream_VERIFICATION_ERROR_TYPE.add(VERIFICATION_ERROR_TYPE302); + VERIFICATION_ERROR_TYPE336=(Token)match(input,VERIFICATION_ERROR_TYPE,FOLLOW_VERIFICATION_ERROR_TYPE_in_insn_format20bc4536); + stream_VERIFICATION_ERROR_TYPE.add(VERIFICATION_ERROR_TYPE336); - COMMA303=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format20bc4223); - stream_COMMA.add(COMMA303); + COMMA337=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format20bc4538); + stream_COMMA.add(COMMA337); - pushFollow(FOLLOW_verification_error_reference_in_insn_format20bc4225); - verification_error_reference304=verification_error_reference(); + pushFollow(FOLLOW_verification_error_reference_in_insn_format20bc4540); + verification_error_reference338=verification_error_reference(); state._fsp--; - stream_verification_error_reference.add(verification_error_reference304.getTree()); + stream_verification_error_reference.add(verification_error_reference338.getTree()); - if (!allowOdex || opcodes.getOpcodeByName((INSTRUCTION_FORMAT20bc301!=null?INSTRUCTION_FORMAT20bc301.getText():null)) == null || apiLevel >= 14) { - throwOdexedInstructionException(input, (INSTRUCTION_FORMAT20bc301!=null?INSTRUCTION_FORMAT20bc301.getText():null)); + if (!allowOdex || opcodes.getOpcodeByName((INSTRUCTION_FORMAT20bc335!=null?INSTRUCTION_FORMAT20bc335.getText():null)) == null || apiLevel >= 14) { + throwOdexedInstructionException(input, (INSTRUCTION_FORMAT20bc335!=null?INSTRUCTION_FORMAT20bc335.getText():null)); } // AST REWRITE - // elements: VERIFICATION_ERROR_TYPE, verification_error_reference, INSTRUCTION_FORMAT20bc + // elements: INSTRUCTION_FORMAT20bc, verification_error_reference, VERIFICATION_ERROR_TYPE // token labels: // rule labels: retval // token list labels: @@ -10855,9 +11794,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 890:5: -> ^( I_STATEMENT_FORMAT20bc INSTRUCTION_FORMAT20bc VERIFICATION_ERROR_TYPE verification_error_reference ) + // 930:5: -> ^( I_STATEMENT_FORMAT20bc INSTRUCTION_FORMAT20bc VERIFICATION_ERROR_TYPE verification_error_reference ) { - // smaliParser.g:890:8: ^( I_STATEMENT_FORMAT20bc INSTRUCTION_FORMAT20bc VERIFICATION_ERROR_TYPE verification_error_reference ) + // smaliParser.g:930:8: ^( I_STATEMENT_FORMAT20bc INSTRUCTION_FORMAT20bc VERIFICATION_ERROR_TYPE verification_error_reference ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT20bc, "I_STATEMENT_FORMAT20bc"), root_1); @@ -10901,32 +11840,32 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format20t" - // smaliParser.g:892:1: insn_format20t : INSTRUCTION_FORMAT20t label_ref -> ^( I_STATEMENT_FORMAT20t[$start, \"I_STATEMENT_FORMAT20t\"] INSTRUCTION_FORMAT20t label_ref ) ; + // smaliParser.g:932:1: insn_format20t : INSTRUCTION_FORMAT20t label_ref -> ^( I_STATEMENT_FORMAT20t[$start, \"I_STATEMENT_FORMAT20t\"] INSTRUCTION_FORMAT20t label_ref ) ; public final smaliParser.insn_format20t_return insn_format20t() throws RecognitionException { smaliParser.insn_format20t_return retval = new smaliParser.insn_format20t_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT20t305=null; - ParserRuleReturnScope label_ref306 =null; + Token INSTRUCTION_FORMAT20t339=null; + ParserRuleReturnScope label_ref340 =null; - CommonTree INSTRUCTION_FORMAT20t305_tree=null; + CommonTree INSTRUCTION_FORMAT20t339_tree=null; RewriteRuleTokenStream stream_INSTRUCTION_FORMAT20t=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT20t"); RewriteRuleSubtreeStream stream_label_ref=new RewriteRuleSubtreeStream(adaptor,"rule label_ref"); try { - // smaliParser.g:893:3: ( INSTRUCTION_FORMAT20t label_ref -> ^( I_STATEMENT_FORMAT20t[$start, \"I_STATEMENT_FORMAT20t\"] INSTRUCTION_FORMAT20t label_ref ) ) - // smaliParser.g:894:5: INSTRUCTION_FORMAT20t label_ref + // smaliParser.g:933:3: ( INSTRUCTION_FORMAT20t label_ref -> ^( I_STATEMENT_FORMAT20t[$start, \"I_STATEMENT_FORMAT20t\"] INSTRUCTION_FORMAT20t label_ref ) ) + // smaliParser.g:934:5: INSTRUCTION_FORMAT20t label_ref { - INSTRUCTION_FORMAT20t305=(Token)match(input,INSTRUCTION_FORMAT20t,FOLLOW_INSTRUCTION_FORMAT20t_in_insn_format20t4262); - stream_INSTRUCTION_FORMAT20t.add(INSTRUCTION_FORMAT20t305); + INSTRUCTION_FORMAT20t339=(Token)match(input,INSTRUCTION_FORMAT20t,FOLLOW_INSTRUCTION_FORMAT20t_in_insn_format20t4577); + stream_INSTRUCTION_FORMAT20t.add(INSTRUCTION_FORMAT20t339); - pushFollow(FOLLOW_label_ref_in_insn_format20t4264); - label_ref306=label_ref(); + pushFollow(FOLLOW_label_ref_in_insn_format20t4579); + label_ref340=label_ref(); state._fsp--; - stream_label_ref.add(label_ref306.getTree()); + stream_label_ref.add(label_ref340.getTree()); // AST REWRITE // elements: INSTRUCTION_FORMAT20t, label_ref // token labels: @@ -10938,9 +11877,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 895:5: -> ^( I_STATEMENT_FORMAT20t[$start, \"I_STATEMENT_FORMAT20t\"] INSTRUCTION_FORMAT20t label_ref ) + // 935:5: -> ^( I_STATEMENT_FORMAT20t[$start, \"I_STATEMENT_FORMAT20t\"] INSTRUCTION_FORMAT20t label_ref ) { - // smaliParser.g:895:8: ^( I_STATEMENT_FORMAT20t[$start, \"I_STATEMENT_FORMAT20t\"] INSTRUCTION_FORMAT20t label_ref ) + // smaliParser.g:935:8: ^( I_STATEMENT_FORMAT20t[$start, \"I_STATEMENT_FORMAT20t\"] INSTRUCTION_FORMAT20t label_ref ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT20t, (retval.start), "I_STATEMENT_FORMAT20t"), root_1); @@ -10983,46 +11922,46 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format21c_field" - // smaliParser.g:897:1: insn_format21c_field : INSTRUCTION_FORMAT21c_FIELD REGISTER COMMA field_reference -> ^( I_STATEMENT_FORMAT21c_FIELD[$start, \"I_STATEMENT_FORMAT21c_FIELD\"] INSTRUCTION_FORMAT21c_FIELD REGISTER field_reference ) ; + // smaliParser.g:937:1: insn_format21c_field : INSTRUCTION_FORMAT21c_FIELD REGISTER COMMA field_reference -> ^( I_STATEMENT_FORMAT21c_FIELD[$start, \"I_STATEMENT_FORMAT21c_FIELD\"] INSTRUCTION_FORMAT21c_FIELD REGISTER field_reference ) ; public final smaliParser.insn_format21c_field_return insn_format21c_field() throws RecognitionException { smaliParser.insn_format21c_field_return retval = new smaliParser.insn_format21c_field_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT21c_FIELD307=null; - Token REGISTER308=null; - Token COMMA309=null; - ParserRuleReturnScope field_reference310 =null; + Token INSTRUCTION_FORMAT21c_FIELD341=null; + Token REGISTER342=null; + Token COMMA343=null; + ParserRuleReturnScope field_reference344 =null; - CommonTree INSTRUCTION_FORMAT21c_FIELD307_tree=null; - CommonTree REGISTER308_tree=null; - CommonTree COMMA309_tree=null; + CommonTree INSTRUCTION_FORMAT21c_FIELD341_tree=null; + CommonTree REGISTER342_tree=null; + CommonTree COMMA343_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT21c_FIELD=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT21c_FIELD"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleSubtreeStream stream_field_reference=new RewriteRuleSubtreeStream(adaptor,"rule field_reference"); try { - // smaliParser.g:898:3: ( INSTRUCTION_FORMAT21c_FIELD REGISTER COMMA field_reference -> ^( I_STATEMENT_FORMAT21c_FIELD[$start, \"I_STATEMENT_FORMAT21c_FIELD\"] INSTRUCTION_FORMAT21c_FIELD REGISTER field_reference ) ) - // smaliParser.g:899:5: INSTRUCTION_FORMAT21c_FIELD REGISTER COMMA field_reference + // smaliParser.g:938:3: ( INSTRUCTION_FORMAT21c_FIELD REGISTER COMMA field_reference -> ^( I_STATEMENT_FORMAT21c_FIELD[$start, \"I_STATEMENT_FORMAT21c_FIELD\"] INSTRUCTION_FORMAT21c_FIELD REGISTER field_reference ) ) + // smaliParser.g:939:5: INSTRUCTION_FORMAT21c_FIELD REGISTER COMMA field_reference { - INSTRUCTION_FORMAT21c_FIELD307=(Token)match(input,INSTRUCTION_FORMAT21c_FIELD,FOLLOW_INSTRUCTION_FORMAT21c_FIELD_in_insn_format21c_field4294); - stream_INSTRUCTION_FORMAT21c_FIELD.add(INSTRUCTION_FORMAT21c_FIELD307); + INSTRUCTION_FORMAT21c_FIELD341=(Token)match(input,INSTRUCTION_FORMAT21c_FIELD,FOLLOW_INSTRUCTION_FORMAT21c_FIELD_in_insn_format21c_field4609); + stream_INSTRUCTION_FORMAT21c_FIELD.add(INSTRUCTION_FORMAT21c_FIELD341); - REGISTER308=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21c_field4296); - stream_REGISTER.add(REGISTER308); + REGISTER342=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21c_field4611); + stream_REGISTER.add(REGISTER342); - COMMA309=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format21c_field4298); - stream_COMMA.add(COMMA309); + COMMA343=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format21c_field4613); + stream_COMMA.add(COMMA343); - pushFollow(FOLLOW_field_reference_in_insn_format21c_field4300); - field_reference310=field_reference(); + pushFollow(FOLLOW_field_reference_in_insn_format21c_field4615); + field_reference344=field_reference(); state._fsp--; - stream_field_reference.add(field_reference310.getTree()); + stream_field_reference.add(field_reference344.getTree()); // AST REWRITE - // elements: REGISTER, INSTRUCTION_FORMAT21c_FIELD, field_reference + // elements: INSTRUCTION_FORMAT21c_FIELD, field_reference, REGISTER // token labels: // rule labels: retval // token list labels: @@ -11032,9 +11971,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 900:5: -> ^( I_STATEMENT_FORMAT21c_FIELD[$start, \"I_STATEMENT_FORMAT21c_FIELD\"] INSTRUCTION_FORMAT21c_FIELD REGISTER field_reference ) + // 940:5: -> ^( I_STATEMENT_FORMAT21c_FIELD[$start, \"I_STATEMENT_FORMAT21c_FIELD\"] INSTRUCTION_FORMAT21c_FIELD REGISTER field_reference ) { - // smaliParser.g:900:8: ^( I_STATEMENT_FORMAT21c_FIELD[$start, \"I_STATEMENT_FORMAT21c_FIELD\"] INSTRUCTION_FORMAT21c_FIELD REGISTER field_reference ) + // smaliParser.g:940:8: ^( I_STATEMENT_FORMAT21c_FIELD[$start, \"I_STATEMENT_FORMAT21c_FIELD\"] INSTRUCTION_FORMAT21c_FIELD REGISTER field_reference ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT21c_FIELD, (retval.start), "I_STATEMENT_FORMAT21c_FIELD"), root_1); @@ -11078,51 +12017,51 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format21c_field_odex" - // smaliParser.g:902:1: insn_format21c_field_odex : INSTRUCTION_FORMAT21c_FIELD_ODEX REGISTER COMMA field_reference -> ^( I_STATEMENT_FORMAT21c_FIELD[$start, \"I_STATEMENT_FORMAT21c_FIELD\"] INSTRUCTION_FORMAT21c_FIELD_ODEX REGISTER field_reference ) ; + // smaliParser.g:942:1: insn_format21c_field_odex : INSTRUCTION_FORMAT21c_FIELD_ODEX REGISTER COMMA field_reference -> ^( I_STATEMENT_FORMAT21c_FIELD[$start, \"I_STATEMENT_FORMAT21c_FIELD\"] INSTRUCTION_FORMAT21c_FIELD_ODEX REGISTER field_reference ) ; public final smaliParser.insn_format21c_field_odex_return insn_format21c_field_odex() throws RecognitionException { smaliParser.insn_format21c_field_odex_return retval = new smaliParser.insn_format21c_field_odex_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT21c_FIELD_ODEX311=null; - Token REGISTER312=null; - Token COMMA313=null; - ParserRuleReturnScope field_reference314 =null; + Token INSTRUCTION_FORMAT21c_FIELD_ODEX345=null; + Token REGISTER346=null; + Token COMMA347=null; + ParserRuleReturnScope field_reference348 =null; - CommonTree INSTRUCTION_FORMAT21c_FIELD_ODEX311_tree=null; - CommonTree REGISTER312_tree=null; - CommonTree COMMA313_tree=null; + CommonTree INSTRUCTION_FORMAT21c_FIELD_ODEX345_tree=null; + CommonTree REGISTER346_tree=null; + CommonTree COMMA347_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT21c_FIELD_ODEX=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT21c_FIELD_ODEX"); RewriteRuleSubtreeStream stream_field_reference=new RewriteRuleSubtreeStream(adaptor,"rule field_reference"); try { - // smaliParser.g:903:3: ( INSTRUCTION_FORMAT21c_FIELD_ODEX REGISTER COMMA field_reference -> ^( I_STATEMENT_FORMAT21c_FIELD[$start, \"I_STATEMENT_FORMAT21c_FIELD\"] INSTRUCTION_FORMAT21c_FIELD_ODEX REGISTER field_reference ) ) - // smaliParser.g:904:5: INSTRUCTION_FORMAT21c_FIELD_ODEX REGISTER COMMA field_reference + // smaliParser.g:943:3: ( INSTRUCTION_FORMAT21c_FIELD_ODEX REGISTER COMMA field_reference -> ^( I_STATEMENT_FORMAT21c_FIELD[$start, \"I_STATEMENT_FORMAT21c_FIELD\"] INSTRUCTION_FORMAT21c_FIELD_ODEX REGISTER field_reference ) ) + // smaliParser.g:944:5: INSTRUCTION_FORMAT21c_FIELD_ODEX REGISTER COMMA field_reference { - INSTRUCTION_FORMAT21c_FIELD_ODEX311=(Token)match(input,INSTRUCTION_FORMAT21c_FIELD_ODEX,FOLLOW_INSTRUCTION_FORMAT21c_FIELD_ODEX_in_insn_format21c_field_odex4332); - stream_INSTRUCTION_FORMAT21c_FIELD_ODEX.add(INSTRUCTION_FORMAT21c_FIELD_ODEX311); + INSTRUCTION_FORMAT21c_FIELD_ODEX345=(Token)match(input,INSTRUCTION_FORMAT21c_FIELD_ODEX,FOLLOW_INSTRUCTION_FORMAT21c_FIELD_ODEX_in_insn_format21c_field_odex4647); + stream_INSTRUCTION_FORMAT21c_FIELD_ODEX.add(INSTRUCTION_FORMAT21c_FIELD_ODEX345); - REGISTER312=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21c_field_odex4334); - stream_REGISTER.add(REGISTER312); + REGISTER346=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21c_field_odex4649); + stream_REGISTER.add(REGISTER346); - COMMA313=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format21c_field_odex4336); - stream_COMMA.add(COMMA313); + COMMA347=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format21c_field_odex4651); + stream_COMMA.add(COMMA347); - pushFollow(FOLLOW_field_reference_in_insn_format21c_field_odex4338); - field_reference314=field_reference(); + pushFollow(FOLLOW_field_reference_in_insn_format21c_field_odex4653); + field_reference348=field_reference(); state._fsp--; - stream_field_reference.add(field_reference314.getTree()); + stream_field_reference.add(field_reference348.getTree()); - if (!allowOdex || opcodes.getOpcodeByName((INSTRUCTION_FORMAT21c_FIELD_ODEX311!=null?INSTRUCTION_FORMAT21c_FIELD_ODEX311.getText():null)) == null || apiLevel >= 14) { - throwOdexedInstructionException(input, (INSTRUCTION_FORMAT21c_FIELD_ODEX311!=null?INSTRUCTION_FORMAT21c_FIELD_ODEX311.getText():null)); + if (!allowOdex || opcodes.getOpcodeByName((INSTRUCTION_FORMAT21c_FIELD_ODEX345!=null?INSTRUCTION_FORMAT21c_FIELD_ODEX345.getText():null)) == null || apiLevel >= 14) { + throwOdexedInstructionException(input, (INSTRUCTION_FORMAT21c_FIELD_ODEX345!=null?INSTRUCTION_FORMAT21c_FIELD_ODEX345.getText():null)); } // AST REWRITE - // elements: INSTRUCTION_FORMAT21c_FIELD_ODEX, REGISTER, field_reference + // elements: INSTRUCTION_FORMAT21c_FIELD_ODEX, field_reference, REGISTER // token labels: // rule labels: retval // token list labels: @@ -11132,9 +12071,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 910:5: -> ^( I_STATEMENT_FORMAT21c_FIELD[$start, \"I_STATEMENT_FORMAT21c_FIELD\"] INSTRUCTION_FORMAT21c_FIELD_ODEX REGISTER field_reference ) + // 950:5: -> ^( I_STATEMENT_FORMAT21c_FIELD[$start, \"I_STATEMENT_FORMAT21c_FIELD\"] INSTRUCTION_FORMAT21c_FIELD_ODEX REGISTER field_reference ) { - // smaliParser.g:910:8: ^( I_STATEMENT_FORMAT21c_FIELD[$start, \"I_STATEMENT_FORMAT21c_FIELD\"] INSTRUCTION_FORMAT21c_FIELD_ODEX REGISTER field_reference ) + // smaliParser.g:950:8: ^( I_STATEMENT_FORMAT21c_FIELD[$start, \"I_STATEMENT_FORMAT21c_FIELD\"] INSTRUCTION_FORMAT21c_FIELD_ODEX REGISTER field_reference ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT21c_FIELD, (retval.start), "I_STATEMENT_FORMAT21c_FIELD"), root_1); @@ -11170,6 +12109,196 @@ public class smaliParser extends Parser { // $ANTLR end "insn_format21c_field_odex" + public static class insn_format21c_method_handle_return extends ParserRuleReturnScope { + CommonTree tree; + @Override + public CommonTree getTree() { return tree; } + }; + + + // $ANTLR start "insn_format21c_method_handle" + // smaliParser.g:952:1: insn_format21c_method_handle : INSTRUCTION_FORMAT21c_METHOD_HANDLE REGISTER COMMA method_handle_reference -> ^( I_STATEMENT_FORMAT21c_METHOD_HANDLE[$start, \"I_STATEMENT_FORMAT21c_METHOD_HANDLE\"] INSTRUCTION_FORMAT21c_METHOD_HANDLE REGISTER method_handle_reference ) ; + public final smaliParser.insn_format21c_method_handle_return insn_format21c_method_handle() throws RecognitionException { + smaliParser.insn_format21c_method_handle_return retval = new smaliParser.insn_format21c_method_handle_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token INSTRUCTION_FORMAT21c_METHOD_HANDLE349=null; + Token REGISTER350=null; + Token COMMA351=null; + ParserRuleReturnScope method_handle_reference352 =null; + + CommonTree INSTRUCTION_FORMAT21c_METHOD_HANDLE349_tree=null; + CommonTree REGISTER350_tree=null; + CommonTree COMMA351_tree=null; + RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); + RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); + RewriteRuleTokenStream stream_INSTRUCTION_FORMAT21c_METHOD_HANDLE=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT21c_METHOD_HANDLE"); + RewriteRuleSubtreeStream stream_method_handle_reference=new RewriteRuleSubtreeStream(adaptor,"rule method_handle_reference"); + + try { + // smaliParser.g:953:3: ( INSTRUCTION_FORMAT21c_METHOD_HANDLE REGISTER COMMA method_handle_reference -> ^( I_STATEMENT_FORMAT21c_METHOD_HANDLE[$start, \"I_STATEMENT_FORMAT21c_METHOD_HANDLE\"] INSTRUCTION_FORMAT21c_METHOD_HANDLE REGISTER method_handle_reference ) ) + // smaliParser.g:954:5: INSTRUCTION_FORMAT21c_METHOD_HANDLE REGISTER COMMA method_handle_reference + { + INSTRUCTION_FORMAT21c_METHOD_HANDLE349=(Token)match(input,INSTRUCTION_FORMAT21c_METHOD_HANDLE,FOLLOW_INSTRUCTION_FORMAT21c_METHOD_HANDLE_in_insn_format21c_method_handle4691); + stream_INSTRUCTION_FORMAT21c_METHOD_HANDLE.add(INSTRUCTION_FORMAT21c_METHOD_HANDLE349); + + REGISTER350=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21c_method_handle4693); + stream_REGISTER.add(REGISTER350); + + COMMA351=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format21c_method_handle4695); + stream_COMMA.add(COMMA351); + + pushFollow(FOLLOW_method_handle_reference_in_insn_format21c_method_handle4697); + method_handle_reference352=method_handle_reference(); + state._fsp--; + + stream_method_handle_reference.add(method_handle_reference352.getTree()); + // AST REWRITE + // elements: REGISTER, method_handle_reference, INSTRUCTION_FORMAT21c_METHOD_HANDLE + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); + + root_0 = (CommonTree)adaptor.nil(); + // 955:5: -> ^( I_STATEMENT_FORMAT21c_METHOD_HANDLE[$start, \"I_STATEMENT_FORMAT21c_METHOD_HANDLE\"] INSTRUCTION_FORMAT21c_METHOD_HANDLE REGISTER method_handle_reference ) + { + // smaliParser.g:955:8: ^( I_STATEMENT_FORMAT21c_METHOD_HANDLE[$start, \"I_STATEMENT_FORMAT21c_METHOD_HANDLE\"] INSTRUCTION_FORMAT21c_METHOD_HANDLE REGISTER method_handle_reference ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT21c_METHOD_HANDLE, (retval.start), "I_STATEMENT_FORMAT21c_METHOD_HANDLE"), root_1); + adaptor.addChild(root_1, stream_INSTRUCTION_FORMAT21c_METHOD_HANDLE.nextNode()); + adaptor.addChild(root_1, stream_REGISTER.nextNode()); + adaptor.addChild(root_1, stream_method_handle_reference.nextTree()); + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + + retval.stop = input.LT(-1); + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + } + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "insn_format21c_method_handle" + + + public static class insn_format21c_method_type_return extends ParserRuleReturnScope { + CommonTree tree; + @Override + public CommonTree getTree() { return tree; } + }; + + + // $ANTLR start "insn_format21c_method_type" + // smaliParser.g:958:1: insn_format21c_method_type : INSTRUCTION_FORMAT21c_METHOD_TYPE REGISTER COMMA method_prototype -> ^( I_STATEMENT_FORMAT21c_METHOD_TYPE[$start, \"I_STATEMENT_FORMAT21c_METHOD_TYPE\"] INSTRUCTION_FORMAT21c_METHOD_TYPE REGISTER method_prototype ) ; + public final smaliParser.insn_format21c_method_type_return insn_format21c_method_type() throws RecognitionException { + smaliParser.insn_format21c_method_type_return retval = new smaliParser.insn_format21c_method_type_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token INSTRUCTION_FORMAT21c_METHOD_TYPE353=null; + Token REGISTER354=null; + Token COMMA355=null; + ParserRuleReturnScope method_prototype356 =null; + + CommonTree INSTRUCTION_FORMAT21c_METHOD_TYPE353_tree=null; + CommonTree REGISTER354_tree=null; + CommonTree COMMA355_tree=null; + RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); + RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); + RewriteRuleTokenStream stream_INSTRUCTION_FORMAT21c_METHOD_TYPE=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT21c_METHOD_TYPE"); + RewriteRuleSubtreeStream stream_method_prototype=new RewriteRuleSubtreeStream(adaptor,"rule method_prototype"); + + try { + // smaliParser.g:959:5: ( INSTRUCTION_FORMAT21c_METHOD_TYPE REGISTER COMMA method_prototype -> ^( I_STATEMENT_FORMAT21c_METHOD_TYPE[$start, \"I_STATEMENT_FORMAT21c_METHOD_TYPE\"] INSTRUCTION_FORMAT21c_METHOD_TYPE REGISTER method_prototype ) ) + // smaliParser.g:960:5: INSTRUCTION_FORMAT21c_METHOD_TYPE REGISTER COMMA method_prototype + { + INSTRUCTION_FORMAT21c_METHOD_TYPE353=(Token)match(input,INSTRUCTION_FORMAT21c_METHOD_TYPE,FOLLOW_INSTRUCTION_FORMAT21c_METHOD_TYPE_in_insn_format21c_method_type4743); + stream_INSTRUCTION_FORMAT21c_METHOD_TYPE.add(INSTRUCTION_FORMAT21c_METHOD_TYPE353); + + REGISTER354=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21c_method_type4745); + stream_REGISTER.add(REGISTER354); + + COMMA355=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format21c_method_type4747); + stream_COMMA.add(COMMA355); + + pushFollow(FOLLOW_method_prototype_in_insn_format21c_method_type4749); + method_prototype356=method_prototype(); + state._fsp--; + + stream_method_prototype.add(method_prototype356.getTree()); + // AST REWRITE + // elements: method_prototype, REGISTER, INSTRUCTION_FORMAT21c_METHOD_TYPE + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); + + root_0 = (CommonTree)adaptor.nil(); + // 961:5: -> ^( I_STATEMENT_FORMAT21c_METHOD_TYPE[$start, \"I_STATEMENT_FORMAT21c_METHOD_TYPE\"] INSTRUCTION_FORMAT21c_METHOD_TYPE REGISTER method_prototype ) + { + // smaliParser.g:961:8: ^( I_STATEMENT_FORMAT21c_METHOD_TYPE[$start, \"I_STATEMENT_FORMAT21c_METHOD_TYPE\"] INSTRUCTION_FORMAT21c_METHOD_TYPE REGISTER method_prototype ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT21c_METHOD_TYPE, (retval.start), "I_STATEMENT_FORMAT21c_METHOD_TYPE"), root_1); + adaptor.addChild(root_1, stream_INSTRUCTION_FORMAT21c_METHOD_TYPE.nextNode()); + adaptor.addChild(root_1, stream_REGISTER.nextNode()); + adaptor.addChild(root_1, stream_method_prototype.nextTree()); + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + + retval.stop = input.LT(-1); + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + } + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "insn_format21c_method_type" + + public static class insn_format21c_string_return extends ParserRuleReturnScope { CommonTree tree; @Override @@ -11178,42 +12307,42 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format21c_string" - // smaliParser.g:912:1: insn_format21c_string : INSTRUCTION_FORMAT21c_STRING REGISTER COMMA STRING_LITERAL -> ^( I_STATEMENT_FORMAT21c_STRING[$start, \"I_STATEMENT_FORMAT21c_STRING\"] INSTRUCTION_FORMAT21c_STRING REGISTER STRING_LITERAL ) ; + // smaliParser.g:964:1: insn_format21c_string : INSTRUCTION_FORMAT21c_STRING REGISTER COMMA STRING_LITERAL -> ^( I_STATEMENT_FORMAT21c_STRING[$start, \"I_STATEMENT_FORMAT21c_STRING\"] INSTRUCTION_FORMAT21c_STRING REGISTER STRING_LITERAL ) ; public final smaliParser.insn_format21c_string_return insn_format21c_string() throws RecognitionException { smaliParser.insn_format21c_string_return retval = new smaliParser.insn_format21c_string_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT21c_STRING315=null; - Token REGISTER316=null; - Token COMMA317=null; - Token STRING_LITERAL318=null; + Token INSTRUCTION_FORMAT21c_STRING357=null; + Token REGISTER358=null; + Token COMMA359=null; + Token STRING_LITERAL360=null; - CommonTree INSTRUCTION_FORMAT21c_STRING315_tree=null; - CommonTree REGISTER316_tree=null; - CommonTree COMMA317_tree=null; - CommonTree STRING_LITERAL318_tree=null; + CommonTree INSTRUCTION_FORMAT21c_STRING357_tree=null; + CommonTree REGISTER358_tree=null; + CommonTree COMMA359_tree=null; + CommonTree STRING_LITERAL360_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_STRING_LITERAL=new RewriteRuleTokenStream(adaptor,"token STRING_LITERAL"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT21c_STRING=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT21c_STRING"); try { - // smaliParser.g:913:3: ( INSTRUCTION_FORMAT21c_STRING REGISTER COMMA STRING_LITERAL -> ^( I_STATEMENT_FORMAT21c_STRING[$start, \"I_STATEMENT_FORMAT21c_STRING\"] INSTRUCTION_FORMAT21c_STRING REGISTER STRING_LITERAL ) ) - // smaliParser.g:914:5: INSTRUCTION_FORMAT21c_STRING REGISTER COMMA STRING_LITERAL + // smaliParser.g:965:3: ( INSTRUCTION_FORMAT21c_STRING REGISTER COMMA STRING_LITERAL -> ^( I_STATEMENT_FORMAT21c_STRING[$start, \"I_STATEMENT_FORMAT21c_STRING\"] INSTRUCTION_FORMAT21c_STRING REGISTER STRING_LITERAL ) ) + // smaliParser.g:966:5: INSTRUCTION_FORMAT21c_STRING REGISTER COMMA STRING_LITERAL { - INSTRUCTION_FORMAT21c_STRING315=(Token)match(input,INSTRUCTION_FORMAT21c_STRING,FOLLOW_INSTRUCTION_FORMAT21c_STRING_in_insn_format21c_string4376); - stream_INSTRUCTION_FORMAT21c_STRING.add(INSTRUCTION_FORMAT21c_STRING315); + INSTRUCTION_FORMAT21c_STRING357=(Token)match(input,INSTRUCTION_FORMAT21c_STRING,FOLLOW_INSTRUCTION_FORMAT21c_STRING_in_insn_format21c_string4793); + stream_INSTRUCTION_FORMAT21c_STRING.add(INSTRUCTION_FORMAT21c_STRING357); - REGISTER316=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21c_string4378); - stream_REGISTER.add(REGISTER316); + REGISTER358=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21c_string4795); + stream_REGISTER.add(REGISTER358); - COMMA317=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format21c_string4380); - stream_COMMA.add(COMMA317); + COMMA359=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format21c_string4797); + stream_COMMA.add(COMMA359); - STRING_LITERAL318=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_insn_format21c_string4382); - stream_STRING_LITERAL.add(STRING_LITERAL318); + STRING_LITERAL360=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_insn_format21c_string4799); + stream_STRING_LITERAL.add(STRING_LITERAL360); // AST REWRITE // elements: STRING_LITERAL, REGISTER, INSTRUCTION_FORMAT21c_STRING @@ -11226,9 +12355,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 915:5: -> ^( I_STATEMENT_FORMAT21c_STRING[$start, \"I_STATEMENT_FORMAT21c_STRING\"] INSTRUCTION_FORMAT21c_STRING REGISTER STRING_LITERAL ) + // 967:5: -> ^( I_STATEMENT_FORMAT21c_STRING[$start, \"I_STATEMENT_FORMAT21c_STRING\"] INSTRUCTION_FORMAT21c_STRING REGISTER STRING_LITERAL ) { - // smaliParser.g:915:8: ^( I_STATEMENT_FORMAT21c_STRING[$start, \"I_STATEMENT_FORMAT21c_STRING\"] INSTRUCTION_FORMAT21c_STRING REGISTER STRING_LITERAL ) + // smaliParser.g:967:8: ^( I_STATEMENT_FORMAT21c_STRING[$start, \"I_STATEMENT_FORMAT21c_STRING\"] INSTRUCTION_FORMAT21c_STRING REGISTER STRING_LITERAL ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT21c_STRING, (retval.start), "I_STATEMENT_FORMAT21c_STRING"), root_1); @@ -11272,46 +12401,46 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format21c_type" - // smaliParser.g:917:1: insn_format21c_type : INSTRUCTION_FORMAT21c_TYPE REGISTER COMMA nonvoid_type_descriptor -> ^( I_STATEMENT_FORMAT21c_TYPE[$start, \"I_STATEMENT_FORMAT21c\"] INSTRUCTION_FORMAT21c_TYPE REGISTER nonvoid_type_descriptor ) ; + // smaliParser.g:969:1: insn_format21c_type : INSTRUCTION_FORMAT21c_TYPE REGISTER COMMA nonvoid_type_descriptor -> ^( I_STATEMENT_FORMAT21c_TYPE[$start, \"I_STATEMENT_FORMAT21c\"] INSTRUCTION_FORMAT21c_TYPE REGISTER nonvoid_type_descriptor ) ; public final smaliParser.insn_format21c_type_return insn_format21c_type() throws RecognitionException { smaliParser.insn_format21c_type_return retval = new smaliParser.insn_format21c_type_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT21c_TYPE319=null; - Token REGISTER320=null; - Token COMMA321=null; - ParserRuleReturnScope nonvoid_type_descriptor322 =null; + Token INSTRUCTION_FORMAT21c_TYPE361=null; + Token REGISTER362=null; + Token COMMA363=null; + ParserRuleReturnScope nonvoid_type_descriptor364 =null; - CommonTree INSTRUCTION_FORMAT21c_TYPE319_tree=null; - CommonTree REGISTER320_tree=null; - CommonTree COMMA321_tree=null; + CommonTree INSTRUCTION_FORMAT21c_TYPE361_tree=null; + CommonTree REGISTER362_tree=null; + CommonTree COMMA363_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT21c_TYPE=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT21c_TYPE"); RewriteRuleSubtreeStream stream_nonvoid_type_descriptor=new RewriteRuleSubtreeStream(adaptor,"rule nonvoid_type_descriptor"); try { - // smaliParser.g:918:3: ( INSTRUCTION_FORMAT21c_TYPE REGISTER COMMA nonvoid_type_descriptor -> ^( I_STATEMENT_FORMAT21c_TYPE[$start, \"I_STATEMENT_FORMAT21c\"] INSTRUCTION_FORMAT21c_TYPE REGISTER nonvoid_type_descriptor ) ) - // smaliParser.g:919:5: INSTRUCTION_FORMAT21c_TYPE REGISTER COMMA nonvoid_type_descriptor + // smaliParser.g:970:3: ( INSTRUCTION_FORMAT21c_TYPE REGISTER COMMA nonvoid_type_descriptor -> ^( I_STATEMENT_FORMAT21c_TYPE[$start, \"I_STATEMENT_FORMAT21c\"] INSTRUCTION_FORMAT21c_TYPE REGISTER nonvoid_type_descriptor ) ) + // smaliParser.g:971:5: INSTRUCTION_FORMAT21c_TYPE REGISTER COMMA nonvoid_type_descriptor { - INSTRUCTION_FORMAT21c_TYPE319=(Token)match(input,INSTRUCTION_FORMAT21c_TYPE,FOLLOW_INSTRUCTION_FORMAT21c_TYPE_in_insn_format21c_type4414); - stream_INSTRUCTION_FORMAT21c_TYPE.add(INSTRUCTION_FORMAT21c_TYPE319); + INSTRUCTION_FORMAT21c_TYPE361=(Token)match(input,INSTRUCTION_FORMAT21c_TYPE,FOLLOW_INSTRUCTION_FORMAT21c_TYPE_in_insn_format21c_type4831); + stream_INSTRUCTION_FORMAT21c_TYPE.add(INSTRUCTION_FORMAT21c_TYPE361); - REGISTER320=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21c_type4416); - stream_REGISTER.add(REGISTER320); + REGISTER362=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21c_type4833); + stream_REGISTER.add(REGISTER362); - COMMA321=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format21c_type4418); - stream_COMMA.add(COMMA321); + COMMA363=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format21c_type4835); + stream_COMMA.add(COMMA363); - pushFollow(FOLLOW_nonvoid_type_descriptor_in_insn_format21c_type4420); - nonvoid_type_descriptor322=nonvoid_type_descriptor(); + pushFollow(FOLLOW_nonvoid_type_descriptor_in_insn_format21c_type4837); + nonvoid_type_descriptor364=nonvoid_type_descriptor(); state._fsp--; - stream_nonvoid_type_descriptor.add(nonvoid_type_descriptor322.getTree()); + stream_nonvoid_type_descriptor.add(nonvoid_type_descriptor364.getTree()); // AST REWRITE - // elements: REGISTER, INSTRUCTION_FORMAT21c_TYPE, nonvoid_type_descriptor + // elements: nonvoid_type_descriptor, REGISTER, INSTRUCTION_FORMAT21c_TYPE // token labels: // rule labels: retval // token list labels: @@ -11321,9 +12450,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 920:5: -> ^( I_STATEMENT_FORMAT21c_TYPE[$start, \"I_STATEMENT_FORMAT21c\"] INSTRUCTION_FORMAT21c_TYPE REGISTER nonvoid_type_descriptor ) + // 972:5: -> ^( I_STATEMENT_FORMAT21c_TYPE[$start, \"I_STATEMENT_FORMAT21c\"] INSTRUCTION_FORMAT21c_TYPE REGISTER nonvoid_type_descriptor ) { - // smaliParser.g:920:8: ^( I_STATEMENT_FORMAT21c_TYPE[$start, \"I_STATEMENT_FORMAT21c\"] INSTRUCTION_FORMAT21c_TYPE REGISTER nonvoid_type_descriptor ) + // smaliParser.g:972:8: ^( I_STATEMENT_FORMAT21c_TYPE[$start, \"I_STATEMENT_FORMAT21c\"] INSTRUCTION_FORMAT21c_TYPE REGISTER nonvoid_type_descriptor ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT21c_TYPE, (retval.start), "I_STATEMENT_FORMAT21c"), root_1); @@ -11367,46 +12496,46 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format21ih" - // smaliParser.g:922:1: insn_format21ih : INSTRUCTION_FORMAT21ih REGISTER COMMA fixed_32bit_literal -> ^( I_STATEMENT_FORMAT21ih[$start, \"I_STATEMENT_FORMAT21ih\"] INSTRUCTION_FORMAT21ih REGISTER fixed_32bit_literal ) ; + // smaliParser.g:974:1: insn_format21ih : INSTRUCTION_FORMAT21ih REGISTER COMMA fixed_32bit_literal -> ^( I_STATEMENT_FORMAT21ih[$start, \"I_STATEMENT_FORMAT21ih\"] INSTRUCTION_FORMAT21ih REGISTER fixed_32bit_literal ) ; public final smaliParser.insn_format21ih_return insn_format21ih() throws RecognitionException { smaliParser.insn_format21ih_return retval = new smaliParser.insn_format21ih_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT21ih323=null; - Token REGISTER324=null; - Token COMMA325=null; - ParserRuleReturnScope fixed_32bit_literal326 =null; + Token INSTRUCTION_FORMAT21ih365=null; + Token REGISTER366=null; + Token COMMA367=null; + ParserRuleReturnScope fixed_32bit_literal368 =null; - CommonTree INSTRUCTION_FORMAT21ih323_tree=null; - CommonTree REGISTER324_tree=null; - CommonTree COMMA325_tree=null; + CommonTree INSTRUCTION_FORMAT21ih365_tree=null; + CommonTree REGISTER366_tree=null; + CommonTree COMMA367_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT21ih=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT21ih"); RewriteRuleSubtreeStream stream_fixed_32bit_literal=new RewriteRuleSubtreeStream(adaptor,"rule fixed_32bit_literal"); try { - // smaliParser.g:923:3: ( INSTRUCTION_FORMAT21ih REGISTER COMMA fixed_32bit_literal -> ^( I_STATEMENT_FORMAT21ih[$start, \"I_STATEMENT_FORMAT21ih\"] INSTRUCTION_FORMAT21ih REGISTER fixed_32bit_literal ) ) - // smaliParser.g:924:5: INSTRUCTION_FORMAT21ih REGISTER COMMA fixed_32bit_literal + // smaliParser.g:975:3: ( INSTRUCTION_FORMAT21ih REGISTER COMMA fixed_32bit_literal -> ^( I_STATEMENT_FORMAT21ih[$start, \"I_STATEMENT_FORMAT21ih\"] INSTRUCTION_FORMAT21ih REGISTER fixed_32bit_literal ) ) + // smaliParser.g:976:5: INSTRUCTION_FORMAT21ih REGISTER COMMA fixed_32bit_literal { - INSTRUCTION_FORMAT21ih323=(Token)match(input,INSTRUCTION_FORMAT21ih,FOLLOW_INSTRUCTION_FORMAT21ih_in_insn_format21ih4452); - stream_INSTRUCTION_FORMAT21ih.add(INSTRUCTION_FORMAT21ih323); + INSTRUCTION_FORMAT21ih365=(Token)match(input,INSTRUCTION_FORMAT21ih,FOLLOW_INSTRUCTION_FORMAT21ih_in_insn_format21ih4869); + stream_INSTRUCTION_FORMAT21ih.add(INSTRUCTION_FORMAT21ih365); - REGISTER324=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21ih4454); - stream_REGISTER.add(REGISTER324); + REGISTER366=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21ih4871); + stream_REGISTER.add(REGISTER366); - COMMA325=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format21ih4456); - stream_COMMA.add(COMMA325); + COMMA367=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format21ih4873); + stream_COMMA.add(COMMA367); - pushFollow(FOLLOW_fixed_32bit_literal_in_insn_format21ih4458); - fixed_32bit_literal326=fixed_32bit_literal(); + pushFollow(FOLLOW_fixed_32bit_literal_in_insn_format21ih4875); + fixed_32bit_literal368=fixed_32bit_literal(); state._fsp--; - stream_fixed_32bit_literal.add(fixed_32bit_literal326.getTree()); + stream_fixed_32bit_literal.add(fixed_32bit_literal368.getTree()); // AST REWRITE - // elements: REGISTER, INSTRUCTION_FORMAT21ih, fixed_32bit_literal + // elements: REGISTER, fixed_32bit_literal, INSTRUCTION_FORMAT21ih // token labels: // rule labels: retval // token list labels: @@ -11416,9 +12545,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 925:5: -> ^( I_STATEMENT_FORMAT21ih[$start, \"I_STATEMENT_FORMAT21ih\"] INSTRUCTION_FORMAT21ih REGISTER fixed_32bit_literal ) + // 977:5: -> ^( I_STATEMENT_FORMAT21ih[$start, \"I_STATEMENT_FORMAT21ih\"] INSTRUCTION_FORMAT21ih REGISTER fixed_32bit_literal ) { - // smaliParser.g:925:8: ^( I_STATEMENT_FORMAT21ih[$start, \"I_STATEMENT_FORMAT21ih\"] INSTRUCTION_FORMAT21ih REGISTER fixed_32bit_literal ) + // smaliParser.g:977:8: ^( I_STATEMENT_FORMAT21ih[$start, \"I_STATEMENT_FORMAT21ih\"] INSTRUCTION_FORMAT21ih REGISTER fixed_32bit_literal ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT21ih, (retval.start), "I_STATEMENT_FORMAT21ih"), root_1); @@ -11462,44 +12591,44 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format21lh" - // smaliParser.g:927:1: insn_format21lh : INSTRUCTION_FORMAT21lh REGISTER COMMA fixed_32bit_literal -> ^( I_STATEMENT_FORMAT21lh[$start, \"I_STATEMENT_FORMAT21lh\"] INSTRUCTION_FORMAT21lh REGISTER fixed_32bit_literal ) ; + // smaliParser.g:979:1: insn_format21lh : INSTRUCTION_FORMAT21lh REGISTER COMMA fixed_32bit_literal -> ^( I_STATEMENT_FORMAT21lh[$start, \"I_STATEMENT_FORMAT21lh\"] INSTRUCTION_FORMAT21lh REGISTER fixed_32bit_literal ) ; public final smaliParser.insn_format21lh_return insn_format21lh() throws RecognitionException { smaliParser.insn_format21lh_return retval = new smaliParser.insn_format21lh_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT21lh327=null; - Token REGISTER328=null; - Token COMMA329=null; - ParserRuleReturnScope fixed_32bit_literal330 =null; + Token INSTRUCTION_FORMAT21lh369=null; + Token REGISTER370=null; + Token COMMA371=null; + ParserRuleReturnScope fixed_32bit_literal372 =null; - CommonTree INSTRUCTION_FORMAT21lh327_tree=null; - CommonTree REGISTER328_tree=null; - CommonTree COMMA329_tree=null; + CommonTree INSTRUCTION_FORMAT21lh369_tree=null; + CommonTree REGISTER370_tree=null; + CommonTree COMMA371_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT21lh=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT21lh"); RewriteRuleSubtreeStream stream_fixed_32bit_literal=new RewriteRuleSubtreeStream(adaptor,"rule fixed_32bit_literal"); try { - // smaliParser.g:928:3: ( INSTRUCTION_FORMAT21lh REGISTER COMMA fixed_32bit_literal -> ^( I_STATEMENT_FORMAT21lh[$start, \"I_STATEMENT_FORMAT21lh\"] INSTRUCTION_FORMAT21lh REGISTER fixed_32bit_literal ) ) - // smaliParser.g:929:5: INSTRUCTION_FORMAT21lh REGISTER COMMA fixed_32bit_literal + // smaliParser.g:980:3: ( INSTRUCTION_FORMAT21lh REGISTER COMMA fixed_32bit_literal -> ^( I_STATEMENT_FORMAT21lh[$start, \"I_STATEMENT_FORMAT21lh\"] INSTRUCTION_FORMAT21lh REGISTER fixed_32bit_literal ) ) + // smaliParser.g:981:5: INSTRUCTION_FORMAT21lh REGISTER COMMA fixed_32bit_literal { - INSTRUCTION_FORMAT21lh327=(Token)match(input,INSTRUCTION_FORMAT21lh,FOLLOW_INSTRUCTION_FORMAT21lh_in_insn_format21lh4490); - stream_INSTRUCTION_FORMAT21lh.add(INSTRUCTION_FORMAT21lh327); + INSTRUCTION_FORMAT21lh369=(Token)match(input,INSTRUCTION_FORMAT21lh,FOLLOW_INSTRUCTION_FORMAT21lh_in_insn_format21lh4907); + stream_INSTRUCTION_FORMAT21lh.add(INSTRUCTION_FORMAT21lh369); - REGISTER328=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21lh4492); - stream_REGISTER.add(REGISTER328); + REGISTER370=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21lh4909); + stream_REGISTER.add(REGISTER370); - COMMA329=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format21lh4494); - stream_COMMA.add(COMMA329); + COMMA371=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format21lh4911); + stream_COMMA.add(COMMA371); - pushFollow(FOLLOW_fixed_32bit_literal_in_insn_format21lh4496); - fixed_32bit_literal330=fixed_32bit_literal(); + pushFollow(FOLLOW_fixed_32bit_literal_in_insn_format21lh4913); + fixed_32bit_literal372=fixed_32bit_literal(); state._fsp--; - stream_fixed_32bit_literal.add(fixed_32bit_literal330.getTree()); + stream_fixed_32bit_literal.add(fixed_32bit_literal372.getTree()); // AST REWRITE // elements: INSTRUCTION_FORMAT21lh, fixed_32bit_literal, REGISTER // token labels: @@ -11511,9 +12640,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 930:5: -> ^( I_STATEMENT_FORMAT21lh[$start, \"I_STATEMENT_FORMAT21lh\"] INSTRUCTION_FORMAT21lh REGISTER fixed_32bit_literal ) + // 982:5: -> ^( I_STATEMENT_FORMAT21lh[$start, \"I_STATEMENT_FORMAT21lh\"] INSTRUCTION_FORMAT21lh REGISTER fixed_32bit_literal ) { - // smaliParser.g:930:8: ^( I_STATEMENT_FORMAT21lh[$start, \"I_STATEMENT_FORMAT21lh\"] INSTRUCTION_FORMAT21lh REGISTER fixed_32bit_literal ) + // smaliParser.g:982:8: ^( I_STATEMENT_FORMAT21lh[$start, \"I_STATEMENT_FORMAT21lh\"] INSTRUCTION_FORMAT21lh REGISTER fixed_32bit_literal ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT21lh, (retval.start), "I_STATEMENT_FORMAT21lh"), root_1); @@ -11557,46 +12686,46 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format21s" - // smaliParser.g:932:1: insn_format21s : INSTRUCTION_FORMAT21s REGISTER COMMA integral_literal -> ^( I_STATEMENT_FORMAT21s[$start, \"I_STATEMENT_FORMAT21s\"] INSTRUCTION_FORMAT21s REGISTER integral_literal ) ; + // smaliParser.g:984:1: insn_format21s : INSTRUCTION_FORMAT21s REGISTER COMMA integral_literal -> ^( I_STATEMENT_FORMAT21s[$start, \"I_STATEMENT_FORMAT21s\"] INSTRUCTION_FORMAT21s REGISTER integral_literal ) ; public final smaliParser.insn_format21s_return insn_format21s() throws RecognitionException { smaliParser.insn_format21s_return retval = new smaliParser.insn_format21s_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT21s331=null; - Token REGISTER332=null; - Token COMMA333=null; - ParserRuleReturnScope integral_literal334 =null; + Token INSTRUCTION_FORMAT21s373=null; + Token REGISTER374=null; + Token COMMA375=null; + ParserRuleReturnScope integral_literal376 =null; - CommonTree INSTRUCTION_FORMAT21s331_tree=null; - CommonTree REGISTER332_tree=null; - CommonTree COMMA333_tree=null; + CommonTree INSTRUCTION_FORMAT21s373_tree=null; + CommonTree REGISTER374_tree=null; + CommonTree COMMA375_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT21s=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT21s"); RewriteRuleSubtreeStream stream_integral_literal=new RewriteRuleSubtreeStream(adaptor,"rule integral_literal"); try { - // smaliParser.g:933:3: ( INSTRUCTION_FORMAT21s REGISTER COMMA integral_literal -> ^( I_STATEMENT_FORMAT21s[$start, \"I_STATEMENT_FORMAT21s\"] INSTRUCTION_FORMAT21s REGISTER integral_literal ) ) - // smaliParser.g:934:5: INSTRUCTION_FORMAT21s REGISTER COMMA integral_literal + // smaliParser.g:985:3: ( INSTRUCTION_FORMAT21s REGISTER COMMA integral_literal -> ^( I_STATEMENT_FORMAT21s[$start, \"I_STATEMENT_FORMAT21s\"] INSTRUCTION_FORMAT21s REGISTER integral_literal ) ) + // smaliParser.g:986:5: INSTRUCTION_FORMAT21s REGISTER COMMA integral_literal { - INSTRUCTION_FORMAT21s331=(Token)match(input,INSTRUCTION_FORMAT21s,FOLLOW_INSTRUCTION_FORMAT21s_in_insn_format21s4528); - stream_INSTRUCTION_FORMAT21s.add(INSTRUCTION_FORMAT21s331); + INSTRUCTION_FORMAT21s373=(Token)match(input,INSTRUCTION_FORMAT21s,FOLLOW_INSTRUCTION_FORMAT21s_in_insn_format21s4945); + stream_INSTRUCTION_FORMAT21s.add(INSTRUCTION_FORMAT21s373); - REGISTER332=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21s4530); - stream_REGISTER.add(REGISTER332); + REGISTER374=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21s4947); + stream_REGISTER.add(REGISTER374); - COMMA333=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format21s4532); - stream_COMMA.add(COMMA333); + COMMA375=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format21s4949); + stream_COMMA.add(COMMA375); - pushFollow(FOLLOW_integral_literal_in_insn_format21s4534); - integral_literal334=integral_literal(); + pushFollow(FOLLOW_integral_literal_in_insn_format21s4951); + integral_literal376=integral_literal(); state._fsp--; - stream_integral_literal.add(integral_literal334.getTree()); + stream_integral_literal.add(integral_literal376.getTree()); // AST REWRITE - // elements: integral_literal, REGISTER, INSTRUCTION_FORMAT21s + // elements: INSTRUCTION_FORMAT21s, REGISTER, integral_literal // token labels: // rule labels: retval // token list labels: @@ -11606,9 +12735,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 935:5: -> ^( I_STATEMENT_FORMAT21s[$start, \"I_STATEMENT_FORMAT21s\"] INSTRUCTION_FORMAT21s REGISTER integral_literal ) + // 987:5: -> ^( I_STATEMENT_FORMAT21s[$start, \"I_STATEMENT_FORMAT21s\"] INSTRUCTION_FORMAT21s REGISTER integral_literal ) { - // smaliParser.g:935:8: ^( I_STATEMENT_FORMAT21s[$start, \"I_STATEMENT_FORMAT21s\"] INSTRUCTION_FORMAT21s REGISTER integral_literal ) + // smaliParser.g:987:8: ^( I_STATEMENT_FORMAT21s[$start, \"I_STATEMENT_FORMAT21s\"] INSTRUCTION_FORMAT21s REGISTER integral_literal ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT21s, (retval.start), "I_STATEMENT_FORMAT21s"), root_1); @@ -11652,46 +12781,46 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format21t" - // smaliParser.g:937:1: insn_format21t : INSTRUCTION_FORMAT21t REGISTER COMMA label_ref -> ^( I_STATEMENT_FORMAT21t[$start, \"I_STATEMENT_FORMAT21t\"] INSTRUCTION_FORMAT21t REGISTER label_ref ) ; + // smaliParser.g:989:1: insn_format21t : INSTRUCTION_FORMAT21t REGISTER COMMA label_ref -> ^( I_STATEMENT_FORMAT21t[$start, \"I_STATEMENT_FORMAT21t\"] INSTRUCTION_FORMAT21t REGISTER label_ref ) ; public final smaliParser.insn_format21t_return insn_format21t() throws RecognitionException { smaliParser.insn_format21t_return retval = new smaliParser.insn_format21t_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT21t335=null; - Token REGISTER336=null; - Token COMMA337=null; - ParserRuleReturnScope label_ref338 =null; + Token INSTRUCTION_FORMAT21t377=null; + Token REGISTER378=null; + Token COMMA379=null; + ParserRuleReturnScope label_ref380 =null; - CommonTree INSTRUCTION_FORMAT21t335_tree=null; - CommonTree REGISTER336_tree=null; - CommonTree COMMA337_tree=null; + CommonTree INSTRUCTION_FORMAT21t377_tree=null; + CommonTree REGISTER378_tree=null; + CommonTree COMMA379_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT21t=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT21t"); RewriteRuleSubtreeStream stream_label_ref=new RewriteRuleSubtreeStream(adaptor,"rule label_ref"); try { - // smaliParser.g:938:3: ( INSTRUCTION_FORMAT21t REGISTER COMMA label_ref -> ^( I_STATEMENT_FORMAT21t[$start, \"I_STATEMENT_FORMAT21t\"] INSTRUCTION_FORMAT21t REGISTER label_ref ) ) - // smaliParser.g:939:5: INSTRUCTION_FORMAT21t REGISTER COMMA label_ref + // smaliParser.g:990:3: ( INSTRUCTION_FORMAT21t REGISTER COMMA label_ref -> ^( I_STATEMENT_FORMAT21t[$start, \"I_STATEMENT_FORMAT21t\"] INSTRUCTION_FORMAT21t REGISTER label_ref ) ) + // smaliParser.g:991:5: INSTRUCTION_FORMAT21t REGISTER COMMA label_ref { - INSTRUCTION_FORMAT21t335=(Token)match(input,INSTRUCTION_FORMAT21t,FOLLOW_INSTRUCTION_FORMAT21t_in_insn_format21t4566); - stream_INSTRUCTION_FORMAT21t.add(INSTRUCTION_FORMAT21t335); + INSTRUCTION_FORMAT21t377=(Token)match(input,INSTRUCTION_FORMAT21t,FOLLOW_INSTRUCTION_FORMAT21t_in_insn_format21t4983); + stream_INSTRUCTION_FORMAT21t.add(INSTRUCTION_FORMAT21t377); - REGISTER336=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21t4568); - stream_REGISTER.add(REGISTER336); + REGISTER378=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21t4985); + stream_REGISTER.add(REGISTER378); - COMMA337=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format21t4570); - stream_COMMA.add(COMMA337); + COMMA379=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format21t4987); + stream_COMMA.add(COMMA379); - pushFollow(FOLLOW_label_ref_in_insn_format21t4572); - label_ref338=label_ref(); + pushFollow(FOLLOW_label_ref_in_insn_format21t4989); + label_ref380=label_ref(); state._fsp--; - stream_label_ref.add(label_ref338.getTree()); + stream_label_ref.add(label_ref380.getTree()); // AST REWRITE - // elements: INSTRUCTION_FORMAT21t, label_ref, REGISTER + // elements: REGISTER, INSTRUCTION_FORMAT21t, label_ref // token labels: // rule labels: retval // token list labels: @@ -11701,9 +12830,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 940:5: -> ^( I_STATEMENT_FORMAT21t[$start, \"I_STATEMENT_FORMAT21t\"] INSTRUCTION_FORMAT21t REGISTER label_ref ) + // 992:5: -> ^( I_STATEMENT_FORMAT21t[$start, \"I_STATEMENT_FORMAT21t\"] INSTRUCTION_FORMAT21t REGISTER label_ref ) { - // smaliParser.g:940:8: ^( I_STATEMENT_FORMAT21t[$start, \"I_STATEMENT_FORMAT21t\"] INSTRUCTION_FORMAT21t REGISTER label_ref ) + // smaliParser.g:992:8: ^( I_STATEMENT_FORMAT21t[$start, \"I_STATEMENT_FORMAT21t\"] INSTRUCTION_FORMAT21t REGISTER label_ref ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT21t, (retval.start), "I_STATEMENT_FORMAT21t"), root_1); @@ -11747,56 +12876,56 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format22b" - // smaliParser.g:942:1: insn_format22b : INSTRUCTION_FORMAT22b REGISTER COMMA REGISTER COMMA integral_literal -> ^( I_STATEMENT_FORMAT22b[$start, \"I_STATEMENT_FORMAT22b\"] INSTRUCTION_FORMAT22b REGISTER REGISTER integral_literal ) ; + // smaliParser.g:994:1: insn_format22b : INSTRUCTION_FORMAT22b REGISTER COMMA REGISTER COMMA integral_literal -> ^( I_STATEMENT_FORMAT22b[$start, \"I_STATEMENT_FORMAT22b\"] INSTRUCTION_FORMAT22b REGISTER REGISTER integral_literal ) ; public final smaliParser.insn_format22b_return insn_format22b() throws RecognitionException { smaliParser.insn_format22b_return retval = new smaliParser.insn_format22b_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT22b339=null; - Token REGISTER340=null; - Token COMMA341=null; - Token REGISTER342=null; - Token COMMA343=null; - ParserRuleReturnScope integral_literal344 =null; + Token INSTRUCTION_FORMAT22b381=null; + Token REGISTER382=null; + Token COMMA383=null; + Token REGISTER384=null; + Token COMMA385=null; + ParserRuleReturnScope integral_literal386 =null; - CommonTree INSTRUCTION_FORMAT22b339_tree=null; - CommonTree REGISTER340_tree=null; - CommonTree COMMA341_tree=null; - CommonTree REGISTER342_tree=null; - CommonTree COMMA343_tree=null; + CommonTree INSTRUCTION_FORMAT22b381_tree=null; + CommonTree REGISTER382_tree=null; + CommonTree COMMA383_tree=null; + CommonTree REGISTER384_tree=null; + CommonTree COMMA385_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT22b=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT22b"); RewriteRuleSubtreeStream stream_integral_literal=new RewriteRuleSubtreeStream(adaptor,"rule integral_literal"); try { - // smaliParser.g:943:3: ( INSTRUCTION_FORMAT22b REGISTER COMMA REGISTER COMMA integral_literal -> ^( I_STATEMENT_FORMAT22b[$start, \"I_STATEMENT_FORMAT22b\"] INSTRUCTION_FORMAT22b REGISTER REGISTER integral_literal ) ) - // smaliParser.g:944:5: INSTRUCTION_FORMAT22b REGISTER COMMA REGISTER COMMA integral_literal + // smaliParser.g:995:3: ( INSTRUCTION_FORMAT22b REGISTER COMMA REGISTER COMMA integral_literal -> ^( I_STATEMENT_FORMAT22b[$start, \"I_STATEMENT_FORMAT22b\"] INSTRUCTION_FORMAT22b REGISTER REGISTER integral_literal ) ) + // smaliParser.g:996:5: INSTRUCTION_FORMAT22b REGISTER COMMA REGISTER COMMA integral_literal { - INSTRUCTION_FORMAT22b339=(Token)match(input,INSTRUCTION_FORMAT22b,FOLLOW_INSTRUCTION_FORMAT22b_in_insn_format22b4604); - stream_INSTRUCTION_FORMAT22b.add(INSTRUCTION_FORMAT22b339); + INSTRUCTION_FORMAT22b381=(Token)match(input,INSTRUCTION_FORMAT22b,FOLLOW_INSTRUCTION_FORMAT22b_in_insn_format22b5021); + stream_INSTRUCTION_FORMAT22b.add(INSTRUCTION_FORMAT22b381); - REGISTER340=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22b4606); - stream_REGISTER.add(REGISTER340); + REGISTER382=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22b5023); + stream_REGISTER.add(REGISTER382); - COMMA341=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22b4608); - stream_COMMA.add(COMMA341); + COMMA383=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22b5025); + stream_COMMA.add(COMMA383); - REGISTER342=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22b4610); - stream_REGISTER.add(REGISTER342); + REGISTER384=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22b5027); + stream_REGISTER.add(REGISTER384); - COMMA343=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22b4612); - stream_COMMA.add(COMMA343); + COMMA385=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22b5029); + stream_COMMA.add(COMMA385); - pushFollow(FOLLOW_integral_literal_in_insn_format22b4614); - integral_literal344=integral_literal(); + pushFollow(FOLLOW_integral_literal_in_insn_format22b5031); + integral_literal386=integral_literal(); state._fsp--; - stream_integral_literal.add(integral_literal344.getTree()); + stream_integral_literal.add(integral_literal386.getTree()); // AST REWRITE - // elements: REGISTER, REGISTER, integral_literal, INSTRUCTION_FORMAT22b + // elements: REGISTER, INSTRUCTION_FORMAT22b, REGISTER, integral_literal // token labels: // rule labels: retval // token list labels: @@ -11806,9 +12935,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 945:5: -> ^( I_STATEMENT_FORMAT22b[$start, \"I_STATEMENT_FORMAT22b\"] INSTRUCTION_FORMAT22b REGISTER REGISTER integral_literal ) + // 997:5: -> ^( I_STATEMENT_FORMAT22b[$start, \"I_STATEMENT_FORMAT22b\"] INSTRUCTION_FORMAT22b REGISTER REGISTER integral_literal ) { - // smaliParser.g:945:8: ^( I_STATEMENT_FORMAT22b[$start, \"I_STATEMENT_FORMAT22b\"] INSTRUCTION_FORMAT22b REGISTER REGISTER integral_literal ) + // smaliParser.g:997:8: ^( I_STATEMENT_FORMAT22b[$start, \"I_STATEMENT_FORMAT22b\"] INSTRUCTION_FORMAT22b REGISTER REGISTER integral_literal ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT22b, (retval.start), "I_STATEMENT_FORMAT22b"), root_1); @@ -11853,54 +12982,54 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format22c_field" - // smaliParser.g:947:1: insn_format22c_field : INSTRUCTION_FORMAT22c_FIELD REGISTER COMMA REGISTER COMMA field_reference -> ^( I_STATEMENT_FORMAT22c_FIELD[$start, \"I_STATEMENT_FORMAT22c_FIELD\"] INSTRUCTION_FORMAT22c_FIELD REGISTER REGISTER field_reference ) ; + // smaliParser.g:999:1: insn_format22c_field : INSTRUCTION_FORMAT22c_FIELD REGISTER COMMA REGISTER COMMA field_reference -> ^( I_STATEMENT_FORMAT22c_FIELD[$start, \"I_STATEMENT_FORMAT22c_FIELD\"] INSTRUCTION_FORMAT22c_FIELD REGISTER REGISTER field_reference ) ; public final smaliParser.insn_format22c_field_return insn_format22c_field() throws RecognitionException { smaliParser.insn_format22c_field_return retval = new smaliParser.insn_format22c_field_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT22c_FIELD345=null; - Token REGISTER346=null; - Token COMMA347=null; - Token REGISTER348=null; - Token COMMA349=null; - ParserRuleReturnScope field_reference350 =null; + Token INSTRUCTION_FORMAT22c_FIELD387=null; + Token REGISTER388=null; + Token COMMA389=null; + Token REGISTER390=null; + Token COMMA391=null; + ParserRuleReturnScope field_reference392 =null; - CommonTree INSTRUCTION_FORMAT22c_FIELD345_tree=null; - CommonTree REGISTER346_tree=null; - CommonTree COMMA347_tree=null; - CommonTree REGISTER348_tree=null; - CommonTree COMMA349_tree=null; + CommonTree INSTRUCTION_FORMAT22c_FIELD387_tree=null; + CommonTree REGISTER388_tree=null; + CommonTree COMMA389_tree=null; + CommonTree REGISTER390_tree=null; + CommonTree COMMA391_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT22c_FIELD=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT22c_FIELD"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleSubtreeStream stream_field_reference=new RewriteRuleSubtreeStream(adaptor,"rule field_reference"); try { - // smaliParser.g:948:3: ( INSTRUCTION_FORMAT22c_FIELD REGISTER COMMA REGISTER COMMA field_reference -> ^( I_STATEMENT_FORMAT22c_FIELD[$start, \"I_STATEMENT_FORMAT22c_FIELD\"] INSTRUCTION_FORMAT22c_FIELD REGISTER REGISTER field_reference ) ) - // smaliParser.g:949:5: INSTRUCTION_FORMAT22c_FIELD REGISTER COMMA REGISTER COMMA field_reference + // smaliParser.g:1000:3: ( INSTRUCTION_FORMAT22c_FIELD REGISTER COMMA REGISTER COMMA field_reference -> ^( I_STATEMENT_FORMAT22c_FIELD[$start, \"I_STATEMENT_FORMAT22c_FIELD\"] INSTRUCTION_FORMAT22c_FIELD REGISTER REGISTER field_reference ) ) + // smaliParser.g:1001:5: INSTRUCTION_FORMAT22c_FIELD REGISTER COMMA REGISTER COMMA field_reference { - INSTRUCTION_FORMAT22c_FIELD345=(Token)match(input,INSTRUCTION_FORMAT22c_FIELD,FOLLOW_INSTRUCTION_FORMAT22c_FIELD_in_insn_format22c_field4648); - stream_INSTRUCTION_FORMAT22c_FIELD.add(INSTRUCTION_FORMAT22c_FIELD345); + INSTRUCTION_FORMAT22c_FIELD387=(Token)match(input,INSTRUCTION_FORMAT22c_FIELD,FOLLOW_INSTRUCTION_FORMAT22c_FIELD_in_insn_format22c_field5065); + stream_INSTRUCTION_FORMAT22c_FIELD.add(INSTRUCTION_FORMAT22c_FIELD387); - REGISTER346=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22c_field4650); - stream_REGISTER.add(REGISTER346); + REGISTER388=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22c_field5067); + stream_REGISTER.add(REGISTER388); - COMMA347=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22c_field4652); - stream_COMMA.add(COMMA347); + COMMA389=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22c_field5069); + stream_COMMA.add(COMMA389); - REGISTER348=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22c_field4654); - stream_REGISTER.add(REGISTER348); + REGISTER390=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22c_field5071); + stream_REGISTER.add(REGISTER390); - COMMA349=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22c_field4656); - stream_COMMA.add(COMMA349); + COMMA391=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22c_field5073); + stream_COMMA.add(COMMA391); - pushFollow(FOLLOW_field_reference_in_insn_format22c_field4658); - field_reference350=field_reference(); + pushFollow(FOLLOW_field_reference_in_insn_format22c_field5075); + field_reference392=field_reference(); state._fsp--; - stream_field_reference.add(field_reference350.getTree()); + stream_field_reference.add(field_reference392.getTree()); // AST REWRITE // elements: INSTRUCTION_FORMAT22c_FIELD, REGISTER, field_reference, REGISTER // token labels: @@ -11912,9 +13041,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 950:5: -> ^( I_STATEMENT_FORMAT22c_FIELD[$start, \"I_STATEMENT_FORMAT22c_FIELD\"] INSTRUCTION_FORMAT22c_FIELD REGISTER REGISTER field_reference ) + // 1002:5: -> ^( I_STATEMENT_FORMAT22c_FIELD[$start, \"I_STATEMENT_FORMAT22c_FIELD\"] INSTRUCTION_FORMAT22c_FIELD REGISTER REGISTER field_reference ) { - // smaliParser.g:950:8: ^( I_STATEMENT_FORMAT22c_FIELD[$start, \"I_STATEMENT_FORMAT22c_FIELD\"] INSTRUCTION_FORMAT22c_FIELD REGISTER REGISTER field_reference ) + // smaliParser.g:1002:8: ^( I_STATEMENT_FORMAT22c_FIELD[$start, \"I_STATEMENT_FORMAT22c_FIELD\"] INSTRUCTION_FORMAT22c_FIELD REGISTER REGISTER field_reference ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT22c_FIELD, (retval.start), "I_STATEMENT_FORMAT22c_FIELD"), root_1); @@ -11959,61 +13088,61 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format22c_field_odex" - // smaliParser.g:952:1: insn_format22c_field_odex : INSTRUCTION_FORMAT22c_FIELD_ODEX REGISTER COMMA REGISTER COMMA field_reference -> ^( I_STATEMENT_FORMAT22c_FIELD[$start, \"I_STATEMENT_FORMAT22c_FIELD\"] INSTRUCTION_FORMAT22c_FIELD_ODEX REGISTER REGISTER field_reference ) ; + // smaliParser.g:1004:1: insn_format22c_field_odex : INSTRUCTION_FORMAT22c_FIELD_ODEX REGISTER COMMA REGISTER COMMA field_reference -> ^( I_STATEMENT_FORMAT22c_FIELD[$start, \"I_STATEMENT_FORMAT22c_FIELD\"] INSTRUCTION_FORMAT22c_FIELD_ODEX REGISTER REGISTER field_reference ) ; public final smaliParser.insn_format22c_field_odex_return insn_format22c_field_odex() throws RecognitionException { smaliParser.insn_format22c_field_odex_return retval = new smaliParser.insn_format22c_field_odex_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT22c_FIELD_ODEX351=null; - Token REGISTER352=null; - Token COMMA353=null; - Token REGISTER354=null; - Token COMMA355=null; - ParserRuleReturnScope field_reference356 =null; + Token INSTRUCTION_FORMAT22c_FIELD_ODEX393=null; + Token REGISTER394=null; + Token COMMA395=null; + Token REGISTER396=null; + Token COMMA397=null; + ParserRuleReturnScope field_reference398 =null; - CommonTree INSTRUCTION_FORMAT22c_FIELD_ODEX351_tree=null; - CommonTree REGISTER352_tree=null; - CommonTree COMMA353_tree=null; - CommonTree REGISTER354_tree=null; - CommonTree COMMA355_tree=null; + CommonTree INSTRUCTION_FORMAT22c_FIELD_ODEX393_tree=null; + CommonTree REGISTER394_tree=null; + CommonTree COMMA395_tree=null; + CommonTree REGISTER396_tree=null; + CommonTree COMMA397_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT22c_FIELD_ODEX=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT22c_FIELD_ODEX"); RewriteRuleSubtreeStream stream_field_reference=new RewriteRuleSubtreeStream(adaptor,"rule field_reference"); try { - // smaliParser.g:953:3: ( INSTRUCTION_FORMAT22c_FIELD_ODEX REGISTER COMMA REGISTER COMMA field_reference -> ^( I_STATEMENT_FORMAT22c_FIELD[$start, \"I_STATEMENT_FORMAT22c_FIELD\"] INSTRUCTION_FORMAT22c_FIELD_ODEX REGISTER REGISTER field_reference ) ) - // smaliParser.g:954:5: INSTRUCTION_FORMAT22c_FIELD_ODEX REGISTER COMMA REGISTER COMMA field_reference + // smaliParser.g:1005:3: ( INSTRUCTION_FORMAT22c_FIELD_ODEX REGISTER COMMA REGISTER COMMA field_reference -> ^( I_STATEMENT_FORMAT22c_FIELD[$start, \"I_STATEMENT_FORMAT22c_FIELD\"] INSTRUCTION_FORMAT22c_FIELD_ODEX REGISTER REGISTER field_reference ) ) + // smaliParser.g:1006:5: INSTRUCTION_FORMAT22c_FIELD_ODEX REGISTER COMMA REGISTER COMMA field_reference { - INSTRUCTION_FORMAT22c_FIELD_ODEX351=(Token)match(input,INSTRUCTION_FORMAT22c_FIELD_ODEX,FOLLOW_INSTRUCTION_FORMAT22c_FIELD_ODEX_in_insn_format22c_field_odex4692); - stream_INSTRUCTION_FORMAT22c_FIELD_ODEX.add(INSTRUCTION_FORMAT22c_FIELD_ODEX351); + INSTRUCTION_FORMAT22c_FIELD_ODEX393=(Token)match(input,INSTRUCTION_FORMAT22c_FIELD_ODEX,FOLLOW_INSTRUCTION_FORMAT22c_FIELD_ODEX_in_insn_format22c_field_odex5109); + stream_INSTRUCTION_FORMAT22c_FIELD_ODEX.add(INSTRUCTION_FORMAT22c_FIELD_ODEX393); - REGISTER352=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22c_field_odex4694); - stream_REGISTER.add(REGISTER352); + REGISTER394=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22c_field_odex5111); + stream_REGISTER.add(REGISTER394); - COMMA353=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22c_field_odex4696); - stream_COMMA.add(COMMA353); + COMMA395=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22c_field_odex5113); + stream_COMMA.add(COMMA395); - REGISTER354=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22c_field_odex4698); - stream_REGISTER.add(REGISTER354); + REGISTER396=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22c_field_odex5115); + stream_REGISTER.add(REGISTER396); - COMMA355=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22c_field_odex4700); - stream_COMMA.add(COMMA355); + COMMA397=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22c_field_odex5117); + stream_COMMA.add(COMMA397); - pushFollow(FOLLOW_field_reference_in_insn_format22c_field_odex4702); - field_reference356=field_reference(); + pushFollow(FOLLOW_field_reference_in_insn_format22c_field_odex5119); + field_reference398=field_reference(); state._fsp--; - stream_field_reference.add(field_reference356.getTree()); + stream_field_reference.add(field_reference398.getTree()); - if (!allowOdex || opcodes.getOpcodeByName((INSTRUCTION_FORMAT22c_FIELD_ODEX351!=null?INSTRUCTION_FORMAT22c_FIELD_ODEX351.getText():null)) == null || apiLevel >= 14) { - throwOdexedInstructionException(input, (INSTRUCTION_FORMAT22c_FIELD_ODEX351!=null?INSTRUCTION_FORMAT22c_FIELD_ODEX351.getText():null)); + if (!allowOdex || opcodes.getOpcodeByName((INSTRUCTION_FORMAT22c_FIELD_ODEX393!=null?INSTRUCTION_FORMAT22c_FIELD_ODEX393.getText():null)) == null || apiLevel >= 14) { + throwOdexedInstructionException(input, (INSTRUCTION_FORMAT22c_FIELD_ODEX393!=null?INSTRUCTION_FORMAT22c_FIELD_ODEX393.getText():null)); } // AST REWRITE - // elements: INSTRUCTION_FORMAT22c_FIELD_ODEX, field_reference, REGISTER, REGISTER + // elements: INSTRUCTION_FORMAT22c_FIELD_ODEX, REGISTER, field_reference, REGISTER // token labels: // rule labels: retval // token list labels: @@ -12023,9 +13152,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 960:5: -> ^( I_STATEMENT_FORMAT22c_FIELD[$start, \"I_STATEMENT_FORMAT22c_FIELD\"] INSTRUCTION_FORMAT22c_FIELD_ODEX REGISTER REGISTER field_reference ) + // 1012:5: -> ^( I_STATEMENT_FORMAT22c_FIELD[$start, \"I_STATEMENT_FORMAT22c_FIELD\"] INSTRUCTION_FORMAT22c_FIELD_ODEX REGISTER REGISTER field_reference ) { - // smaliParser.g:960:8: ^( I_STATEMENT_FORMAT22c_FIELD[$start, \"I_STATEMENT_FORMAT22c_FIELD\"] INSTRUCTION_FORMAT22c_FIELD_ODEX REGISTER REGISTER field_reference ) + // smaliParser.g:1012:8: ^( I_STATEMENT_FORMAT22c_FIELD[$start, \"I_STATEMENT_FORMAT22c_FIELD\"] INSTRUCTION_FORMAT22c_FIELD_ODEX REGISTER REGISTER field_reference ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT22c_FIELD, (retval.start), "I_STATEMENT_FORMAT22c_FIELD"), root_1); @@ -12070,54 +13199,54 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format22c_type" - // smaliParser.g:962:1: insn_format22c_type : INSTRUCTION_FORMAT22c_TYPE REGISTER COMMA REGISTER COMMA nonvoid_type_descriptor -> ^( I_STATEMENT_FORMAT22c_TYPE[$start, \"I_STATEMENT_FORMAT22c_TYPE\"] INSTRUCTION_FORMAT22c_TYPE REGISTER REGISTER nonvoid_type_descriptor ) ; + // smaliParser.g:1014:1: insn_format22c_type : INSTRUCTION_FORMAT22c_TYPE REGISTER COMMA REGISTER COMMA nonvoid_type_descriptor -> ^( I_STATEMENT_FORMAT22c_TYPE[$start, \"I_STATEMENT_FORMAT22c_TYPE\"] INSTRUCTION_FORMAT22c_TYPE REGISTER REGISTER nonvoid_type_descriptor ) ; public final smaliParser.insn_format22c_type_return insn_format22c_type() throws RecognitionException { smaliParser.insn_format22c_type_return retval = new smaliParser.insn_format22c_type_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT22c_TYPE357=null; - Token REGISTER358=null; - Token COMMA359=null; - Token REGISTER360=null; - Token COMMA361=null; - ParserRuleReturnScope nonvoid_type_descriptor362 =null; + Token INSTRUCTION_FORMAT22c_TYPE399=null; + Token REGISTER400=null; + Token COMMA401=null; + Token REGISTER402=null; + Token COMMA403=null; + ParserRuleReturnScope nonvoid_type_descriptor404 =null; - CommonTree INSTRUCTION_FORMAT22c_TYPE357_tree=null; - CommonTree REGISTER358_tree=null; - CommonTree COMMA359_tree=null; - CommonTree REGISTER360_tree=null; - CommonTree COMMA361_tree=null; + CommonTree INSTRUCTION_FORMAT22c_TYPE399_tree=null; + CommonTree REGISTER400_tree=null; + CommonTree COMMA401_tree=null; + CommonTree REGISTER402_tree=null; + CommonTree COMMA403_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT22c_TYPE=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT22c_TYPE"); RewriteRuleSubtreeStream stream_nonvoid_type_descriptor=new RewriteRuleSubtreeStream(adaptor,"rule nonvoid_type_descriptor"); try { - // smaliParser.g:963:3: ( INSTRUCTION_FORMAT22c_TYPE REGISTER COMMA REGISTER COMMA nonvoid_type_descriptor -> ^( I_STATEMENT_FORMAT22c_TYPE[$start, \"I_STATEMENT_FORMAT22c_TYPE\"] INSTRUCTION_FORMAT22c_TYPE REGISTER REGISTER nonvoid_type_descriptor ) ) - // smaliParser.g:964:5: INSTRUCTION_FORMAT22c_TYPE REGISTER COMMA REGISTER COMMA nonvoid_type_descriptor + // smaliParser.g:1015:3: ( INSTRUCTION_FORMAT22c_TYPE REGISTER COMMA REGISTER COMMA nonvoid_type_descriptor -> ^( I_STATEMENT_FORMAT22c_TYPE[$start, \"I_STATEMENT_FORMAT22c_TYPE\"] INSTRUCTION_FORMAT22c_TYPE REGISTER REGISTER nonvoid_type_descriptor ) ) + // smaliParser.g:1016:5: INSTRUCTION_FORMAT22c_TYPE REGISTER COMMA REGISTER COMMA nonvoid_type_descriptor { - INSTRUCTION_FORMAT22c_TYPE357=(Token)match(input,INSTRUCTION_FORMAT22c_TYPE,FOLLOW_INSTRUCTION_FORMAT22c_TYPE_in_insn_format22c_type4742); - stream_INSTRUCTION_FORMAT22c_TYPE.add(INSTRUCTION_FORMAT22c_TYPE357); + INSTRUCTION_FORMAT22c_TYPE399=(Token)match(input,INSTRUCTION_FORMAT22c_TYPE,FOLLOW_INSTRUCTION_FORMAT22c_TYPE_in_insn_format22c_type5159); + stream_INSTRUCTION_FORMAT22c_TYPE.add(INSTRUCTION_FORMAT22c_TYPE399); - REGISTER358=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22c_type4744); - stream_REGISTER.add(REGISTER358); + REGISTER400=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22c_type5161); + stream_REGISTER.add(REGISTER400); - COMMA359=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22c_type4746); - stream_COMMA.add(COMMA359); + COMMA401=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22c_type5163); + stream_COMMA.add(COMMA401); - REGISTER360=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22c_type4748); - stream_REGISTER.add(REGISTER360); + REGISTER402=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22c_type5165); + stream_REGISTER.add(REGISTER402); - COMMA361=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22c_type4750); - stream_COMMA.add(COMMA361); + COMMA403=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22c_type5167); + stream_COMMA.add(COMMA403); - pushFollow(FOLLOW_nonvoid_type_descriptor_in_insn_format22c_type4752); - nonvoid_type_descriptor362=nonvoid_type_descriptor(); + pushFollow(FOLLOW_nonvoid_type_descriptor_in_insn_format22c_type5169); + nonvoid_type_descriptor404=nonvoid_type_descriptor(); state._fsp--; - stream_nonvoid_type_descriptor.add(nonvoid_type_descriptor362.getTree()); + stream_nonvoid_type_descriptor.add(nonvoid_type_descriptor404.getTree()); // AST REWRITE // elements: REGISTER, REGISTER, nonvoid_type_descriptor, INSTRUCTION_FORMAT22c_TYPE // token labels: @@ -12129,9 +13258,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 965:5: -> ^( I_STATEMENT_FORMAT22c_TYPE[$start, \"I_STATEMENT_FORMAT22c_TYPE\"] INSTRUCTION_FORMAT22c_TYPE REGISTER REGISTER nonvoid_type_descriptor ) + // 1017:5: -> ^( I_STATEMENT_FORMAT22c_TYPE[$start, \"I_STATEMENT_FORMAT22c_TYPE\"] INSTRUCTION_FORMAT22c_TYPE REGISTER REGISTER nonvoid_type_descriptor ) { - // smaliParser.g:965:8: ^( I_STATEMENT_FORMAT22c_TYPE[$start, \"I_STATEMENT_FORMAT22c_TYPE\"] INSTRUCTION_FORMAT22c_TYPE REGISTER REGISTER nonvoid_type_descriptor ) + // smaliParser.g:1017:8: ^( I_STATEMENT_FORMAT22c_TYPE[$start, \"I_STATEMENT_FORMAT22c_TYPE\"] INSTRUCTION_FORMAT22c_TYPE REGISTER REGISTER nonvoid_type_descriptor ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT22c_TYPE, (retval.start), "I_STATEMENT_FORMAT22c_TYPE"), root_1); @@ -12176,60 +13305,60 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format22cs_field" - // smaliParser.g:967:1: insn_format22cs_field : INSTRUCTION_FORMAT22cs_FIELD REGISTER COMMA REGISTER COMMA FIELD_OFFSET ; + // smaliParser.g:1019:1: insn_format22cs_field : INSTRUCTION_FORMAT22cs_FIELD REGISTER COMMA REGISTER COMMA FIELD_OFFSET ; public final smaliParser.insn_format22cs_field_return insn_format22cs_field() throws RecognitionException { smaliParser.insn_format22cs_field_return retval = new smaliParser.insn_format22cs_field_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT22cs_FIELD363=null; - Token REGISTER364=null; - Token COMMA365=null; - Token REGISTER366=null; - Token COMMA367=null; - Token FIELD_OFFSET368=null; + Token INSTRUCTION_FORMAT22cs_FIELD405=null; + Token REGISTER406=null; + Token COMMA407=null; + Token REGISTER408=null; + Token COMMA409=null; + Token FIELD_OFFSET410=null; - CommonTree INSTRUCTION_FORMAT22cs_FIELD363_tree=null; - CommonTree REGISTER364_tree=null; - CommonTree COMMA365_tree=null; - CommonTree REGISTER366_tree=null; - CommonTree COMMA367_tree=null; - CommonTree FIELD_OFFSET368_tree=null; + CommonTree INSTRUCTION_FORMAT22cs_FIELD405_tree=null; + CommonTree REGISTER406_tree=null; + CommonTree COMMA407_tree=null; + CommonTree REGISTER408_tree=null; + CommonTree COMMA409_tree=null; + CommonTree FIELD_OFFSET410_tree=null; try { - // smaliParser.g:968:3: ( INSTRUCTION_FORMAT22cs_FIELD REGISTER COMMA REGISTER COMMA FIELD_OFFSET ) - // smaliParser.g:969:5: INSTRUCTION_FORMAT22cs_FIELD REGISTER COMMA REGISTER COMMA FIELD_OFFSET + // smaliParser.g:1020:3: ( INSTRUCTION_FORMAT22cs_FIELD REGISTER COMMA REGISTER COMMA FIELD_OFFSET ) + // smaliParser.g:1021:5: INSTRUCTION_FORMAT22cs_FIELD REGISTER COMMA REGISTER COMMA FIELD_OFFSET { root_0 = (CommonTree)adaptor.nil(); - INSTRUCTION_FORMAT22cs_FIELD363=(Token)match(input,INSTRUCTION_FORMAT22cs_FIELD,FOLLOW_INSTRUCTION_FORMAT22cs_FIELD_in_insn_format22cs_field4786); - INSTRUCTION_FORMAT22cs_FIELD363_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT22cs_FIELD363); - adaptor.addChild(root_0, INSTRUCTION_FORMAT22cs_FIELD363_tree); + INSTRUCTION_FORMAT22cs_FIELD405=(Token)match(input,INSTRUCTION_FORMAT22cs_FIELD,FOLLOW_INSTRUCTION_FORMAT22cs_FIELD_in_insn_format22cs_field5203); + INSTRUCTION_FORMAT22cs_FIELD405_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT22cs_FIELD405); + adaptor.addChild(root_0, INSTRUCTION_FORMAT22cs_FIELD405_tree); - REGISTER364=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22cs_field4788); - REGISTER364_tree = (CommonTree)adaptor.create(REGISTER364); - adaptor.addChild(root_0, REGISTER364_tree); + REGISTER406=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22cs_field5205); + REGISTER406_tree = (CommonTree)adaptor.create(REGISTER406); + adaptor.addChild(root_0, REGISTER406_tree); - COMMA365=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22cs_field4790); - COMMA365_tree = (CommonTree)adaptor.create(COMMA365); - adaptor.addChild(root_0, COMMA365_tree); + COMMA407=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22cs_field5207); + COMMA407_tree = (CommonTree)adaptor.create(COMMA407); + adaptor.addChild(root_0, COMMA407_tree); - REGISTER366=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22cs_field4792); - REGISTER366_tree = (CommonTree)adaptor.create(REGISTER366); - adaptor.addChild(root_0, REGISTER366_tree); + REGISTER408=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22cs_field5209); + REGISTER408_tree = (CommonTree)adaptor.create(REGISTER408); + adaptor.addChild(root_0, REGISTER408_tree); - COMMA367=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22cs_field4794); - COMMA367_tree = (CommonTree)adaptor.create(COMMA367); - adaptor.addChild(root_0, COMMA367_tree); + COMMA409=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22cs_field5211); + COMMA409_tree = (CommonTree)adaptor.create(COMMA409); + adaptor.addChild(root_0, COMMA409_tree); - FIELD_OFFSET368=(Token)match(input,FIELD_OFFSET,FOLLOW_FIELD_OFFSET_in_insn_format22cs_field4796); - FIELD_OFFSET368_tree = (CommonTree)adaptor.create(FIELD_OFFSET368); - adaptor.addChild(root_0, FIELD_OFFSET368_tree); + FIELD_OFFSET410=(Token)match(input,FIELD_OFFSET,FOLLOW_FIELD_OFFSET_in_insn_format22cs_field5213); + FIELD_OFFSET410_tree = (CommonTree)adaptor.create(FIELD_OFFSET410); + adaptor.addChild(root_0, FIELD_OFFSET410_tree); - throwOdexedInstructionException(input, (INSTRUCTION_FORMAT22cs_FIELD363!=null?INSTRUCTION_FORMAT22cs_FIELD363.getText():null)); + throwOdexedInstructionException(input, (INSTRUCTION_FORMAT22cs_FIELD405!=null?INSTRUCTION_FORMAT22cs_FIELD405.getText():null)); } @@ -12260,57 +13389,57 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format22s" - // smaliParser.g:974:1: insn_format22s : instruction_format22s REGISTER COMMA REGISTER COMMA integral_literal -> ^( I_STATEMENT_FORMAT22s[$start, \"I_STATEMENT_FORMAT22s\"] instruction_format22s REGISTER REGISTER integral_literal ) ; + // smaliParser.g:1026:1: insn_format22s : instruction_format22s REGISTER COMMA REGISTER COMMA integral_literal -> ^( I_STATEMENT_FORMAT22s[$start, \"I_STATEMENT_FORMAT22s\"] instruction_format22s REGISTER REGISTER integral_literal ) ; public final smaliParser.insn_format22s_return insn_format22s() throws RecognitionException { smaliParser.insn_format22s_return retval = new smaliParser.insn_format22s_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token REGISTER370=null; - Token COMMA371=null; - Token REGISTER372=null; - Token COMMA373=null; - ParserRuleReturnScope instruction_format22s369 =null; - ParserRuleReturnScope integral_literal374 =null; + Token REGISTER412=null; + Token COMMA413=null; + Token REGISTER414=null; + Token COMMA415=null; + ParserRuleReturnScope instruction_format22s411 =null; + ParserRuleReturnScope integral_literal416 =null; - CommonTree REGISTER370_tree=null; - CommonTree COMMA371_tree=null; - CommonTree REGISTER372_tree=null; - CommonTree COMMA373_tree=null; + CommonTree REGISTER412_tree=null; + CommonTree COMMA413_tree=null; + CommonTree REGISTER414_tree=null; + CommonTree COMMA415_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleSubtreeStream stream_instruction_format22s=new RewriteRuleSubtreeStream(adaptor,"rule instruction_format22s"); RewriteRuleSubtreeStream stream_integral_literal=new RewriteRuleSubtreeStream(adaptor,"rule integral_literal"); try { - // smaliParser.g:975:3: ( instruction_format22s REGISTER COMMA REGISTER COMMA integral_literal -> ^( I_STATEMENT_FORMAT22s[$start, \"I_STATEMENT_FORMAT22s\"] instruction_format22s REGISTER REGISTER integral_literal ) ) - // smaliParser.g:976:5: instruction_format22s REGISTER COMMA REGISTER COMMA integral_literal + // smaliParser.g:1027:3: ( instruction_format22s REGISTER COMMA REGISTER COMMA integral_literal -> ^( I_STATEMENT_FORMAT22s[$start, \"I_STATEMENT_FORMAT22s\"] instruction_format22s REGISTER REGISTER integral_literal ) ) + // smaliParser.g:1028:5: instruction_format22s REGISTER COMMA REGISTER COMMA integral_literal { - pushFollow(FOLLOW_instruction_format22s_in_insn_format22s4817); - instruction_format22s369=instruction_format22s(); + pushFollow(FOLLOW_instruction_format22s_in_insn_format22s5234); + instruction_format22s411=instruction_format22s(); state._fsp--; - stream_instruction_format22s.add(instruction_format22s369.getTree()); - REGISTER370=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22s4819); - stream_REGISTER.add(REGISTER370); + stream_instruction_format22s.add(instruction_format22s411.getTree()); + REGISTER412=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22s5236); + stream_REGISTER.add(REGISTER412); - COMMA371=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22s4821); - stream_COMMA.add(COMMA371); + COMMA413=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22s5238); + stream_COMMA.add(COMMA413); - REGISTER372=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22s4823); - stream_REGISTER.add(REGISTER372); + REGISTER414=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22s5240); + stream_REGISTER.add(REGISTER414); - COMMA373=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22s4825); - stream_COMMA.add(COMMA373); + COMMA415=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22s5242); + stream_COMMA.add(COMMA415); - pushFollow(FOLLOW_integral_literal_in_insn_format22s4827); - integral_literal374=integral_literal(); + pushFollow(FOLLOW_integral_literal_in_insn_format22s5244); + integral_literal416=integral_literal(); state._fsp--; - stream_integral_literal.add(integral_literal374.getTree()); + stream_integral_literal.add(integral_literal416.getTree()); // AST REWRITE - // elements: REGISTER, REGISTER, instruction_format22s, integral_literal + // elements: instruction_format22s, REGISTER, REGISTER, integral_literal // token labels: // rule labels: retval // token list labels: @@ -12320,9 +13449,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 977:5: -> ^( I_STATEMENT_FORMAT22s[$start, \"I_STATEMENT_FORMAT22s\"] instruction_format22s REGISTER REGISTER integral_literal ) + // 1029:5: -> ^( I_STATEMENT_FORMAT22s[$start, \"I_STATEMENT_FORMAT22s\"] instruction_format22s REGISTER REGISTER integral_literal ) { - // smaliParser.g:977:8: ^( I_STATEMENT_FORMAT22s[$start, \"I_STATEMENT_FORMAT22s\"] instruction_format22s REGISTER REGISTER integral_literal ) + // smaliParser.g:1029:8: ^( I_STATEMENT_FORMAT22s[$start, \"I_STATEMENT_FORMAT22s\"] instruction_format22s REGISTER REGISTER integral_literal ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT22s, (retval.start), "I_STATEMENT_FORMAT22s"), root_1); @@ -12367,56 +13496,56 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format22t" - // smaliParser.g:979:1: insn_format22t : INSTRUCTION_FORMAT22t REGISTER COMMA REGISTER COMMA label_ref -> ^( I_STATEMENT_FORMAT22t[$start, \"I_STATEMENT_FFORMAT22t\"] INSTRUCTION_FORMAT22t REGISTER REGISTER label_ref ) ; + // smaliParser.g:1031:1: insn_format22t : INSTRUCTION_FORMAT22t REGISTER COMMA REGISTER COMMA label_ref -> ^( I_STATEMENT_FORMAT22t[$start, \"I_STATEMENT_FFORMAT22t\"] INSTRUCTION_FORMAT22t REGISTER REGISTER label_ref ) ; public final smaliParser.insn_format22t_return insn_format22t() throws RecognitionException { smaliParser.insn_format22t_return retval = new smaliParser.insn_format22t_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT22t375=null; - Token REGISTER376=null; - Token COMMA377=null; - Token REGISTER378=null; - Token COMMA379=null; - ParserRuleReturnScope label_ref380 =null; + Token INSTRUCTION_FORMAT22t417=null; + Token REGISTER418=null; + Token COMMA419=null; + Token REGISTER420=null; + Token COMMA421=null; + ParserRuleReturnScope label_ref422 =null; - CommonTree INSTRUCTION_FORMAT22t375_tree=null; - CommonTree REGISTER376_tree=null; - CommonTree COMMA377_tree=null; - CommonTree REGISTER378_tree=null; - CommonTree COMMA379_tree=null; + CommonTree INSTRUCTION_FORMAT22t417_tree=null; + CommonTree REGISTER418_tree=null; + CommonTree COMMA419_tree=null; + CommonTree REGISTER420_tree=null; + CommonTree COMMA421_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT22t=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT22t"); RewriteRuleSubtreeStream stream_label_ref=new RewriteRuleSubtreeStream(adaptor,"rule label_ref"); try { - // smaliParser.g:980:3: ( INSTRUCTION_FORMAT22t REGISTER COMMA REGISTER COMMA label_ref -> ^( I_STATEMENT_FORMAT22t[$start, \"I_STATEMENT_FFORMAT22t\"] INSTRUCTION_FORMAT22t REGISTER REGISTER label_ref ) ) - // smaliParser.g:981:5: INSTRUCTION_FORMAT22t REGISTER COMMA REGISTER COMMA label_ref + // smaliParser.g:1032:3: ( INSTRUCTION_FORMAT22t REGISTER COMMA REGISTER COMMA label_ref -> ^( I_STATEMENT_FORMAT22t[$start, \"I_STATEMENT_FFORMAT22t\"] INSTRUCTION_FORMAT22t REGISTER REGISTER label_ref ) ) + // smaliParser.g:1033:5: INSTRUCTION_FORMAT22t REGISTER COMMA REGISTER COMMA label_ref { - INSTRUCTION_FORMAT22t375=(Token)match(input,INSTRUCTION_FORMAT22t,FOLLOW_INSTRUCTION_FORMAT22t_in_insn_format22t4861); - stream_INSTRUCTION_FORMAT22t.add(INSTRUCTION_FORMAT22t375); + INSTRUCTION_FORMAT22t417=(Token)match(input,INSTRUCTION_FORMAT22t,FOLLOW_INSTRUCTION_FORMAT22t_in_insn_format22t5278); + stream_INSTRUCTION_FORMAT22t.add(INSTRUCTION_FORMAT22t417); - REGISTER376=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22t4863); - stream_REGISTER.add(REGISTER376); + REGISTER418=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22t5280); + stream_REGISTER.add(REGISTER418); - COMMA377=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22t4865); - stream_COMMA.add(COMMA377); + COMMA419=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22t5282); + stream_COMMA.add(COMMA419); - REGISTER378=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22t4867); - stream_REGISTER.add(REGISTER378); + REGISTER420=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22t5284); + stream_REGISTER.add(REGISTER420); - COMMA379=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22t4869); - stream_COMMA.add(COMMA379); + COMMA421=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22t5286); + stream_COMMA.add(COMMA421); - pushFollow(FOLLOW_label_ref_in_insn_format22t4871); - label_ref380=label_ref(); + pushFollow(FOLLOW_label_ref_in_insn_format22t5288); + label_ref422=label_ref(); state._fsp--; - stream_label_ref.add(label_ref380.getTree()); + stream_label_ref.add(label_ref422.getTree()); // AST REWRITE - // elements: REGISTER, INSTRUCTION_FORMAT22t, REGISTER, label_ref + // elements: REGISTER, label_ref, REGISTER, INSTRUCTION_FORMAT22t // token labels: // rule labels: retval // token list labels: @@ -12426,9 +13555,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 982:5: -> ^( I_STATEMENT_FORMAT22t[$start, \"I_STATEMENT_FFORMAT22t\"] INSTRUCTION_FORMAT22t REGISTER REGISTER label_ref ) + // 1034:5: -> ^( I_STATEMENT_FORMAT22t[$start, \"I_STATEMENT_FFORMAT22t\"] INSTRUCTION_FORMAT22t REGISTER REGISTER label_ref ) { - // smaliParser.g:982:8: ^( I_STATEMENT_FORMAT22t[$start, \"I_STATEMENT_FFORMAT22t\"] INSTRUCTION_FORMAT22t REGISTER REGISTER label_ref ) + // smaliParser.g:1034:8: ^( I_STATEMENT_FORMAT22t[$start, \"I_STATEMENT_FFORMAT22t\"] INSTRUCTION_FORMAT22t REGISTER REGISTER label_ref ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT22t, (retval.start), "I_STATEMENT_FFORMAT22t"), root_1); @@ -12473,44 +13602,44 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format22x" - // smaliParser.g:984:1: insn_format22x : INSTRUCTION_FORMAT22x REGISTER COMMA REGISTER -> ^( I_STATEMENT_FORMAT22x[$start, \"I_STATEMENT_FORMAT22x\"] INSTRUCTION_FORMAT22x REGISTER REGISTER ) ; + // smaliParser.g:1036:1: insn_format22x : INSTRUCTION_FORMAT22x REGISTER COMMA REGISTER -> ^( I_STATEMENT_FORMAT22x[$start, \"I_STATEMENT_FORMAT22x\"] INSTRUCTION_FORMAT22x REGISTER REGISTER ) ; public final smaliParser.insn_format22x_return insn_format22x() throws RecognitionException { smaliParser.insn_format22x_return retval = new smaliParser.insn_format22x_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT22x381=null; - Token REGISTER382=null; - Token COMMA383=null; - Token REGISTER384=null; + Token INSTRUCTION_FORMAT22x423=null; + Token REGISTER424=null; + Token COMMA425=null; + Token REGISTER426=null; - CommonTree INSTRUCTION_FORMAT22x381_tree=null; - CommonTree REGISTER382_tree=null; - CommonTree COMMA383_tree=null; - CommonTree REGISTER384_tree=null; + CommonTree INSTRUCTION_FORMAT22x423_tree=null; + CommonTree REGISTER424_tree=null; + CommonTree COMMA425_tree=null; + CommonTree REGISTER426_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT22x=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT22x"); try { - // smaliParser.g:985:3: ( INSTRUCTION_FORMAT22x REGISTER COMMA REGISTER -> ^( I_STATEMENT_FORMAT22x[$start, \"I_STATEMENT_FORMAT22x\"] INSTRUCTION_FORMAT22x REGISTER REGISTER ) ) - // smaliParser.g:986:5: INSTRUCTION_FORMAT22x REGISTER COMMA REGISTER + // smaliParser.g:1037:3: ( INSTRUCTION_FORMAT22x REGISTER COMMA REGISTER -> ^( I_STATEMENT_FORMAT22x[$start, \"I_STATEMENT_FORMAT22x\"] INSTRUCTION_FORMAT22x REGISTER REGISTER ) ) + // smaliParser.g:1038:5: INSTRUCTION_FORMAT22x REGISTER COMMA REGISTER { - INSTRUCTION_FORMAT22x381=(Token)match(input,INSTRUCTION_FORMAT22x,FOLLOW_INSTRUCTION_FORMAT22x_in_insn_format22x4905); - stream_INSTRUCTION_FORMAT22x.add(INSTRUCTION_FORMAT22x381); + INSTRUCTION_FORMAT22x423=(Token)match(input,INSTRUCTION_FORMAT22x,FOLLOW_INSTRUCTION_FORMAT22x_in_insn_format22x5322); + stream_INSTRUCTION_FORMAT22x.add(INSTRUCTION_FORMAT22x423); - REGISTER382=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22x4907); - stream_REGISTER.add(REGISTER382); + REGISTER424=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22x5324); + stream_REGISTER.add(REGISTER424); - COMMA383=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22x4909); - stream_COMMA.add(COMMA383); + COMMA425=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format22x5326); + stream_COMMA.add(COMMA425); - REGISTER384=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22x4911); - stream_REGISTER.add(REGISTER384); + REGISTER426=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22x5328); + stream_REGISTER.add(REGISTER426); // AST REWRITE - // elements: REGISTER, REGISTER, INSTRUCTION_FORMAT22x + // elements: REGISTER, INSTRUCTION_FORMAT22x, REGISTER // token labels: // rule labels: retval // token list labels: @@ -12520,9 +13649,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 987:5: -> ^( I_STATEMENT_FORMAT22x[$start, \"I_STATEMENT_FORMAT22x\"] INSTRUCTION_FORMAT22x REGISTER REGISTER ) + // 1039:5: -> ^( I_STATEMENT_FORMAT22x[$start, \"I_STATEMENT_FORMAT22x\"] INSTRUCTION_FORMAT22x REGISTER REGISTER ) { - // smaliParser.g:987:8: ^( I_STATEMENT_FORMAT22x[$start, \"I_STATEMENT_FORMAT22x\"] INSTRUCTION_FORMAT22x REGISTER REGISTER ) + // smaliParser.g:1039:8: ^( I_STATEMENT_FORMAT22x[$start, \"I_STATEMENT_FORMAT22x\"] INSTRUCTION_FORMAT22x REGISTER REGISTER ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT22x, (retval.start), "I_STATEMENT_FORMAT22x"), root_1); @@ -12566,51 +13695,51 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format23x" - // smaliParser.g:989:1: insn_format23x : INSTRUCTION_FORMAT23x REGISTER COMMA REGISTER COMMA REGISTER -> ^( I_STATEMENT_FORMAT23x[$start, \"I_STATEMENT_FORMAT23x\"] INSTRUCTION_FORMAT23x REGISTER REGISTER REGISTER ) ; + // smaliParser.g:1041:1: insn_format23x : INSTRUCTION_FORMAT23x REGISTER COMMA REGISTER COMMA REGISTER -> ^( I_STATEMENT_FORMAT23x[$start, \"I_STATEMENT_FORMAT23x\"] INSTRUCTION_FORMAT23x REGISTER REGISTER REGISTER ) ; public final smaliParser.insn_format23x_return insn_format23x() throws RecognitionException { smaliParser.insn_format23x_return retval = new smaliParser.insn_format23x_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT23x385=null; - Token REGISTER386=null; - Token COMMA387=null; - Token REGISTER388=null; - Token COMMA389=null; - Token REGISTER390=null; + Token INSTRUCTION_FORMAT23x427=null; + Token REGISTER428=null; + Token COMMA429=null; + Token REGISTER430=null; + Token COMMA431=null; + Token REGISTER432=null; - CommonTree INSTRUCTION_FORMAT23x385_tree=null; - CommonTree REGISTER386_tree=null; - CommonTree COMMA387_tree=null; - CommonTree REGISTER388_tree=null; - CommonTree COMMA389_tree=null; - CommonTree REGISTER390_tree=null; + CommonTree INSTRUCTION_FORMAT23x427_tree=null; + CommonTree REGISTER428_tree=null; + CommonTree COMMA429_tree=null; + CommonTree REGISTER430_tree=null; + CommonTree COMMA431_tree=null; + CommonTree REGISTER432_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT23x=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT23x"); try { - // smaliParser.g:990:3: ( INSTRUCTION_FORMAT23x REGISTER COMMA REGISTER COMMA REGISTER -> ^( I_STATEMENT_FORMAT23x[$start, \"I_STATEMENT_FORMAT23x\"] INSTRUCTION_FORMAT23x REGISTER REGISTER REGISTER ) ) - // smaliParser.g:991:5: INSTRUCTION_FORMAT23x REGISTER COMMA REGISTER COMMA REGISTER + // smaliParser.g:1042:3: ( INSTRUCTION_FORMAT23x REGISTER COMMA REGISTER COMMA REGISTER -> ^( I_STATEMENT_FORMAT23x[$start, \"I_STATEMENT_FORMAT23x\"] INSTRUCTION_FORMAT23x REGISTER REGISTER REGISTER ) ) + // smaliParser.g:1043:5: INSTRUCTION_FORMAT23x REGISTER COMMA REGISTER COMMA REGISTER { - INSTRUCTION_FORMAT23x385=(Token)match(input,INSTRUCTION_FORMAT23x,FOLLOW_INSTRUCTION_FORMAT23x_in_insn_format23x4943); - stream_INSTRUCTION_FORMAT23x.add(INSTRUCTION_FORMAT23x385); + INSTRUCTION_FORMAT23x427=(Token)match(input,INSTRUCTION_FORMAT23x,FOLLOW_INSTRUCTION_FORMAT23x_in_insn_format23x5360); + stream_INSTRUCTION_FORMAT23x.add(INSTRUCTION_FORMAT23x427); - REGISTER386=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format23x4945); - stream_REGISTER.add(REGISTER386); + REGISTER428=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format23x5362); + stream_REGISTER.add(REGISTER428); - COMMA387=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format23x4947); - stream_COMMA.add(COMMA387); + COMMA429=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format23x5364); + stream_COMMA.add(COMMA429); - REGISTER388=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format23x4949); - stream_REGISTER.add(REGISTER388); + REGISTER430=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format23x5366); + stream_REGISTER.add(REGISTER430); - COMMA389=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format23x4951); - stream_COMMA.add(COMMA389); + COMMA431=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format23x5368); + stream_COMMA.add(COMMA431); - REGISTER390=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format23x4953); - stream_REGISTER.add(REGISTER390); + REGISTER432=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format23x5370); + stream_REGISTER.add(REGISTER432); // AST REWRITE // elements: REGISTER, REGISTER, INSTRUCTION_FORMAT23x, REGISTER @@ -12623,9 +13752,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 992:5: -> ^( I_STATEMENT_FORMAT23x[$start, \"I_STATEMENT_FORMAT23x\"] INSTRUCTION_FORMAT23x REGISTER REGISTER REGISTER ) + // 1044:5: -> ^( I_STATEMENT_FORMAT23x[$start, \"I_STATEMENT_FORMAT23x\"] INSTRUCTION_FORMAT23x REGISTER REGISTER REGISTER ) { - // smaliParser.g:992:8: ^( I_STATEMENT_FORMAT23x[$start, \"I_STATEMENT_FORMAT23x\"] INSTRUCTION_FORMAT23x REGISTER REGISTER REGISTER ) + // smaliParser.g:1044:8: ^( I_STATEMENT_FORMAT23x[$start, \"I_STATEMENT_FORMAT23x\"] INSTRUCTION_FORMAT23x REGISTER REGISTER REGISTER ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT23x, (retval.start), "I_STATEMENT_FORMAT23x"), root_1); @@ -12670,32 +13799,32 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format30t" - // smaliParser.g:994:1: insn_format30t : INSTRUCTION_FORMAT30t label_ref -> ^( I_STATEMENT_FORMAT30t[$start, \"I_STATEMENT_FORMAT30t\"] INSTRUCTION_FORMAT30t label_ref ) ; + // smaliParser.g:1046:1: insn_format30t : INSTRUCTION_FORMAT30t label_ref -> ^( I_STATEMENT_FORMAT30t[$start, \"I_STATEMENT_FORMAT30t\"] INSTRUCTION_FORMAT30t label_ref ) ; public final smaliParser.insn_format30t_return insn_format30t() throws RecognitionException { smaliParser.insn_format30t_return retval = new smaliParser.insn_format30t_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT30t391=null; - ParserRuleReturnScope label_ref392 =null; + Token INSTRUCTION_FORMAT30t433=null; + ParserRuleReturnScope label_ref434 =null; - CommonTree INSTRUCTION_FORMAT30t391_tree=null; + CommonTree INSTRUCTION_FORMAT30t433_tree=null; RewriteRuleTokenStream stream_INSTRUCTION_FORMAT30t=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT30t"); RewriteRuleSubtreeStream stream_label_ref=new RewriteRuleSubtreeStream(adaptor,"rule label_ref"); try { - // smaliParser.g:995:3: ( INSTRUCTION_FORMAT30t label_ref -> ^( I_STATEMENT_FORMAT30t[$start, \"I_STATEMENT_FORMAT30t\"] INSTRUCTION_FORMAT30t label_ref ) ) - // smaliParser.g:996:5: INSTRUCTION_FORMAT30t label_ref + // smaliParser.g:1047:3: ( INSTRUCTION_FORMAT30t label_ref -> ^( I_STATEMENT_FORMAT30t[$start, \"I_STATEMENT_FORMAT30t\"] INSTRUCTION_FORMAT30t label_ref ) ) + // smaliParser.g:1048:5: INSTRUCTION_FORMAT30t label_ref { - INSTRUCTION_FORMAT30t391=(Token)match(input,INSTRUCTION_FORMAT30t,FOLLOW_INSTRUCTION_FORMAT30t_in_insn_format30t4987); - stream_INSTRUCTION_FORMAT30t.add(INSTRUCTION_FORMAT30t391); + INSTRUCTION_FORMAT30t433=(Token)match(input,INSTRUCTION_FORMAT30t,FOLLOW_INSTRUCTION_FORMAT30t_in_insn_format30t5404); + stream_INSTRUCTION_FORMAT30t.add(INSTRUCTION_FORMAT30t433); - pushFollow(FOLLOW_label_ref_in_insn_format30t4989); - label_ref392=label_ref(); + pushFollow(FOLLOW_label_ref_in_insn_format30t5406); + label_ref434=label_ref(); state._fsp--; - stream_label_ref.add(label_ref392.getTree()); + stream_label_ref.add(label_ref434.getTree()); // AST REWRITE // elements: INSTRUCTION_FORMAT30t, label_ref // token labels: @@ -12707,9 +13836,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 997:5: -> ^( I_STATEMENT_FORMAT30t[$start, \"I_STATEMENT_FORMAT30t\"] INSTRUCTION_FORMAT30t label_ref ) + // 1049:5: -> ^( I_STATEMENT_FORMAT30t[$start, \"I_STATEMENT_FORMAT30t\"] INSTRUCTION_FORMAT30t label_ref ) { - // smaliParser.g:997:8: ^( I_STATEMENT_FORMAT30t[$start, \"I_STATEMENT_FORMAT30t\"] INSTRUCTION_FORMAT30t label_ref ) + // smaliParser.g:1049:8: ^( I_STATEMENT_FORMAT30t[$start, \"I_STATEMENT_FORMAT30t\"] INSTRUCTION_FORMAT30t label_ref ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT30t, (retval.start), "I_STATEMENT_FORMAT30t"), root_1); @@ -12752,45 +13881,45 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format31c" - // smaliParser.g:999:1: insn_format31c : INSTRUCTION_FORMAT31c REGISTER COMMA STRING_LITERAL -> ^( I_STATEMENT_FORMAT31c[$start, \"I_STATEMENT_FORMAT31c\"] INSTRUCTION_FORMAT31c REGISTER STRING_LITERAL ) ; + // smaliParser.g:1051:1: insn_format31c : INSTRUCTION_FORMAT31c REGISTER COMMA STRING_LITERAL -> ^( I_STATEMENT_FORMAT31c[$start, \"I_STATEMENT_FORMAT31c\"] INSTRUCTION_FORMAT31c REGISTER STRING_LITERAL ) ; public final smaliParser.insn_format31c_return insn_format31c() throws RecognitionException { smaliParser.insn_format31c_return retval = new smaliParser.insn_format31c_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT31c393=null; - Token REGISTER394=null; - Token COMMA395=null; - Token STRING_LITERAL396=null; + Token INSTRUCTION_FORMAT31c435=null; + Token REGISTER436=null; + Token COMMA437=null; + Token STRING_LITERAL438=null; - CommonTree INSTRUCTION_FORMAT31c393_tree=null; - CommonTree REGISTER394_tree=null; - CommonTree COMMA395_tree=null; - CommonTree STRING_LITERAL396_tree=null; + CommonTree INSTRUCTION_FORMAT31c435_tree=null; + CommonTree REGISTER436_tree=null; + CommonTree COMMA437_tree=null; + CommonTree STRING_LITERAL438_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT31c=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT31c"); RewriteRuleTokenStream stream_STRING_LITERAL=new RewriteRuleTokenStream(adaptor,"token STRING_LITERAL"); try { - // smaliParser.g:1000:3: ( INSTRUCTION_FORMAT31c REGISTER COMMA STRING_LITERAL -> ^( I_STATEMENT_FORMAT31c[$start, \"I_STATEMENT_FORMAT31c\"] INSTRUCTION_FORMAT31c REGISTER STRING_LITERAL ) ) - // smaliParser.g:1001:5: INSTRUCTION_FORMAT31c REGISTER COMMA STRING_LITERAL + // smaliParser.g:1052:3: ( INSTRUCTION_FORMAT31c REGISTER COMMA STRING_LITERAL -> ^( I_STATEMENT_FORMAT31c[$start, \"I_STATEMENT_FORMAT31c\"] INSTRUCTION_FORMAT31c REGISTER STRING_LITERAL ) ) + // smaliParser.g:1053:5: INSTRUCTION_FORMAT31c REGISTER COMMA STRING_LITERAL { - INSTRUCTION_FORMAT31c393=(Token)match(input,INSTRUCTION_FORMAT31c,FOLLOW_INSTRUCTION_FORMAT31c_in_insn_format31c5019); - stream_INSTRUCTION_FORMAT31c.add(INSTRUCTION_FORMAT31c393); + INSTRUCTION_FORMAT31c435=(Token)match(input,INSTRUCTION_FORMAT31c,FOLLOW_INSTRUCTION_FORMAT31c_in_insn_format31c5436); + stream_INSTRUCTION_FORMAT31c.add(INSTRUCTION_FORMAT31c435); - REGISTER394=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format31c5021); - stream_REGISTER.add(REGISTER394); + REGISTER436=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format31c5438); + stream_REGISTER.add(REGISTER436); - COMMA395=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format31c5023); - stream_COMMA.add(COMMA395); + COMMA437=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format31c5440); + stream_COMMA.add(COMMA437); - STRING_LITERAL396=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_insn_format31c5025); - stream_STRING_LITERAL.add(STRING_LITERAL396); + STRING_LITERAL438=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_insn_format31c5442); + stream_STRING_LITERAL.add(STRING_LITERAL438); // AST REWRITE - // elements: REGISTER, STRING_LITERAL, INSTRUCTION_FORMAT31c + // elements: REGISTER, INSTRUCTION_FORMAT31c, STRING_LITERAL // token labels: // rule labels: retval // token list labels: @@ -12800,9 +13929,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 1002:5: -> ^( I_STATEMENT_FORMAT31c[$start, \"I_STATEMENT_FORMAT31c\"] INSTRUCTION_FORMAT31c REGISTER STRING_LITERAL ) + // 1054:5: -> ^( I_STATEMENT_FORMAT31c[$start, \"I_STATEMENT_FORMAT31c\"] INSTRUCTION_FORMAT31c REGISTER STRING_LITERAL ) { - // smaliParser.g:1002:7: ^( I_STATEMENT_FORMAT31c[$start, \"I_STATEMENT_FORMAT31c\"] INSTRUCTION_FORMAT31c REGISTER STRING_LITERAL ) + // smaliParser.g:1054:7: ^( I_STATEMENT_FORMAT31c[$start, \"I_STATEMENT_FORMAT31c\"] INSTRUCTION_FORMAT31c REGISTER STRING_LITERAL ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT31c, (retval.start), "I_STATEMENT_FORMAT31c"), root_1); @@ -12846,47 +13975,47 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format31i" - // smaliParser.g:1004:1: insn_format31i : instruction_format31i REGISTER COMMA fixed_32bit_literal -> ^( I_STATEMENT_FORMAT31i[$start, \"I_STATEMENT_FORMAT31i\"] instruction_format31i REGISTER fixed_32bit_literal ) ; + // smaliParser.g:1056:1: insn_format31i : instruction_format31i REGISTER COMMA fixed_32bit_literal -> ^( I_STATEMENT_FORMAT31i[$start, \"I_STATEMENT_FORMAT31i\"] instruction_format31i REGISTER fixed_32bit_literal ) ; public final smaliParser.insn_format31i_return insn_format31i() throws RecognitionException { smaliParser.insn_format31i_return retval = new smaliParser.insn_format31i_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token REGISTER398=null; - Token COMMA399=null; - ParserRuleReturnScope instruction_format31i397 =null; - ParserRuleReturnScope fixed_32bit_literal400 =null; + Token REGISTER440=null; + Token COMMA441=null; + ParserRuleReturnScope instruction_format31i439 =null; + ParserRuleReturnScope fixed_32bit_literal442 =null; - CommonTree REGISTER398_tree=null; - CommonTree COMMA399_tree=null; + CommonTree REGISTER440_tree=null; + CommonTree COMMA441_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleSubtreeStream stream_fixed_32bit_literal=new RewriteRuleSubtreeStream(adaptor,"rule fixed_32bit_literal"); RewriteRuleSubtreeStream stream_instruction_format31i=new RewriteRuleSubtreeStream(adaptor,"rule instruction_format31i"); try { - // smaliParser.g:1005:3: ( instruction_format31i REGISTER COMMA fixed_32bit_literal -> ^( I_STATEMENT_FORMAT31i[$start, \"I_STATEMENT_FORMAT31i\"] instruction_format31i REGISTER fixed_32bit_literal ) ) - // smaliParser.g:1006:5: instruction_format31i REGISTER COMMA fixed_32bit_literal + // smaliParser.g:1057:3: ( instruction_format31i REGISTER COMMA fixed_32bit_literal -> ^( I_STATEMENT_FORMAT31i[$start, \"I_STATEMENT_FORMAT31i\"] instruction_format31i REGISTER fixed_32bit_literal ) ) + // smaliParser.g:1058:5: instruction_format31i REGISTER COMMA fixed_32bit_literal { - pushFollow(FOLLOW_instruction_format31i_in_insn_format31i5056); - instruction_format31i397=instruction_format31i(); + pushFollow(FOLLOW_instruction_format31i_in_insn_format31i5473); + instruction_format31i439=instruction_format31i(); state._fsp--; - stream_instruction_format31i.add(instruction_format31i397.getTree()); - REGISTER398=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format31i5058); - stream_REGISTER.add(REGISTER398); + stream_instruction_format31i.add(instruction_format31i439.getTree()); + REGISTER440=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format31i5475); + stream_REGISTER.add(REGISTER440); - COMMA399=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format31i5060); - stream_COMMA.add(COMMA399); + COMMA441=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format31i5477); + stream_COMMA.add(COMMA441); - pushFollow(FOLLOW_fixed_32bit_literal_in_insn_format31i5062); - fixed_32bit_literal400=fixed_32bit_literal(); + pushFollow(FOLLOW_fixed_32bit_literal_in_insn_format31i5479); + fixed_32bit_literal442=fixed_32bit_literal(); state._fsp--; - stream_fixed_32bit_literal.add(fixed_32bit_literal400.getTree()); + stream_fixed_32bit_literal.add(fixed_32bit_literal442.getTree()); // AST REWRITE - // elements: instruction_format31i, REGISTER, fixed_32bit_literal + // elements: REGISTER, instruction_format31i, fixed_32bit_literal // token labels: // rule labels: retval // token list labels: @@ -12896,9 +14025,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 1007:5: -> ^( I_STATEMENT_FORMAT31i[$start, \"I_STATEMENT_FORMAT31i\"] instruction_format31i REGISTER fixed_32bit_literal ) + // 1059:5: -> ^( I_STATEMENT_FORMAT31i[$start, \"I_STATEMENT_FORMAT31i\"] instruction_format31i REGISTER fixed_32bit_literal ) { - // smaliParser.g:1007:8: ^( I_STATEMENT_FORMAT31i[$start, \"I_STATEMENT_FORMAT31i\"] instruction_format31i REGISTER fixed_32bit_literal ) + // smaliParser.g:1059:8: ^( I_STATEMENT_FORMAT31i[$start, \"I_STATEMENT_FORMAT31i\"] instruction_format31i REGISTER fixed_32bit_literal ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT31i, (retval.start), "I_STATEMENT_FORMAT31i"), root_1); @@ -12942,46 +14071,46 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format31t" - // smaliParser.g:1009:1: insn_format31t : INSTRUCTION_FORMAT31t REGISTER COMMA label_ref -> ^( I_STATEMENT_FORMAT31t[$start, \"I_STATEMENT_FORMAT31t\"] INSTRUCTION_FORMAT31t REGISTER label_ref ) ; + // smaliParser.g:1061:1: insn_format31t : INSTRUCTION_FORMAT31t REGISTER COMMA label_ref -> ^( I_STATEMENT_FORMAT31t[$start, \"I_STATEMENT_FORMAT31t\"] INSTRUCTION_FORMAT31t REGISTER label_ref ) ; public final smaliParser.insn_format31t_return insn_format31t() throws RecognitionException { smaliParser.insn_format31t_return retval = new smaliParser.insn_format31t_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT31t401=null; - Token REGISTER402=null; - Token COMMA403=null; - ParserRuleReturnScope label_ref404 =null; + Token INSTRUCTION_FORMAT31t443=null; + Token REGISTER444=null; + Token COMMA445=null; + ParserRuleReturnScope label_ref446 =null; - CommonTree INSTRUCTION_FORMAT31t401_tree=null; - CommonTree REGISTER402_tree=null; - CommonTree COMMA403_tree=null; + CommonTree INSTRUCTION_FORMAT31t443_tree=null; + CommonTree REGISTER444_tree=null; + CommonTree COMMA445_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT31t=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT31t"); RewriteRuleSubtreeStream stream_label_ref=new RewriteRuleSubtreeStream(adaptor,"rule label_ref"); try { - // smaliParser.g:1010:3: ( INSTRUCTION_FORMAT31t REGISTER COMMA label_ref -> ^( I_STATEMENT_FORMAT31t[$start, \"I_STATEMENT_FORMAT31t\"] INSTRUCTION_FORMAT31t REGISTER label_ref ) ) - // smaliParser.g:1011:5: INSTRUCTION_FORMAT31t REGISTER COMMA label_ref + // smaliParser.g:1062:3: ( INSTRUCTION_FORMAT31t REGISTER COMMA label_ref -> ^( I_STATEMENT_FORMAT31t[$start, \"I_STATEMENT_FORMAT31t\"] INSTRUCTION_FORMAT31t REGISTER label_ref ) ) + // smaliParser.g:1063:5: INSTRUCTION_FORMAT31t REGISTER COMMA label_ref { - INSTRUCTION_FORMAT31t401=(Token)match(input,INSTRUCTION_FORMAT31t,FOLLOW_INSTRUCTION_FORMAT31t_in_insn_format31t5094); - stream_INSTRUCTION_FORMAT31t.add(INSTRUCTION_FORMAT31t401); + INSTRUCTION_FORMAT31t443=(Token)match(input,INSTRUCTION_FORMAT31t,FOLLOW_INSTRUCTION_FORMAT31t_in_insn_format31t5511); + stream_INSTRUCTION_FORMAT31t.add(INSTRUCTION_FORMAT31t443); - REGISTER402=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format31t5096); - stream_REGISTER.add(REGISTER402); + REGISTER444=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format31t5513); + stream_REGISTER.add(REGISTER444); - COMMA403=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format31t5098); - stream_COMMA.add(COMMA403); + COMMA445=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format31t5515); + stream_COMMA.add(COMMA445); - pushFollow(FOLLOW_label_ref_in_insn_format31t5100); - label_ref404=label_ref(); + pushFollow(FOLLOW_label_ref_in_insn_format31t5517); + label_ref446=label_ref(); state._fsp--; - stream_label_ref.add(label_ref404.getTree()); + stream_label_ref.add(label_ref446.getTree()); // AST REWRITE - // elements: INSTRUCTION_FORMAT31t, REGISTER, label_ref + // elements: label_ref, INSTRUCTION_FORMAT31t, REGISTER // token labels: // rule labels: retval // token list labels: @@ -12991,9 +14120,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 1012:5: -> ^( I_STATEMENT_FORMAT31t[$start, \"I_STATEMENT_FORMAT31t\"] INSTRUCTION_FORMAT31t REGISTER label_ref ) + // 1064:5: -> ^( I_STATEMENT_FORMAT31t[$start, \"I_STATEMENT_FORMAT31t\"] INSTRUCTION_FORMAT31t REGISTER label_ref ) { - // smaliParser.g:1012:8: ^( I_STATEMENT_FORMAT31t[$start, \"I_STATEMENT_FORMAT31t\"] INSTRUCTION_FORMAT31t REGISTER label_ref ) + // smaliParser.g:1064:8: ^( I_STATEMENT_FORMAT31t[$start, \"I_STATEMENT_FORMAT31t\"] INSTRUCTION_FORMAT31t REGISTER label_ref ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT31t, (retval.start), "I_STATEMENT_FORMAT31t"), root_1); @@ -13037,44 +14166,44 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format32x" - // smaliParser.g:1014:1: insn_format32x : INSTRUCTION_FORMAT32x REGISTER COMMA REGISTER -> ^( I_STATEMENT_FORMAT32x[$start, \"I_STATEMENT_FORMAT32x\"] INSTRUCTION_FORMAT32x REGISTER REGISTER ) ; + // smaliParser.g:1066:1: insn_format32x : INSTRUCTION_FORMAT32x REGISTER COMMA REGISTER -> ^( I_STATEMENT_FORMAT32x[$start, \"I_STATEMENT_FORMAT32x\"] INSTRUCTION_FORMAT32x REGISTER REGISTER ) ; public final smaliParser.insn_format32x_return insn_format32x() throws RecognitionException { smaliParser.insn_format32x_return retval = new smaliParser.insn_format32x_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT32x405=null; - Token REGISTER406=null; - Token COMMA407=null; - Token REGISTER408=null; + Token INSTRUCTION_FORMAT32x447=null; + Token REGISTER448=null; + Token COMMA449=null; + Token REGISTER450=null; - CommonTree INSTRUCTION_FORMAT32x405_tree=null; - CommonTree REGISTER406_tree=null; - CommonTree COMMA407_tree=null; - CommonTree REGISTER408_tree=null; + CommonTree INSTRUCTION_FORMAT32x447_tree=null; + CommonTree REGISTER448_tree=null; + CommonTree COMMA449_tree=null; + CommonTree REGISTER450_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT32x=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT32x"); try { - // smaliParser.g:1015:3: ( INSTRUCTION_FORMAT32x REGISTER COMMA REGISTER -> ^( I_STATEMENT_FORMAT32x[$start, \"I_STATEMENT_FORMAT32x\"] INSTRUCTION_FORMAT32x REGISTER REGISTER ) ) - // smaliParser.g:1016:5: INSTRUCTION_FORMAT32x REGISTER COMMA REGISTER + // smaliParser.g:1067:3: ( INSTRUCTION_FORMAT32x REGISTER COMMA REGISTER -> ^( I_STATEMENT_FORMAT32x[$start, \"I_STATEMENT_FORMAT32x\"] INSTRUCTION_FORMAT32x REGISTER REGISTER ) ) + // smaliParser.g:1068:5: INSTRUCTION_FORMAT32x REGISTER COMMA REGISTER { - INSTRUCTION_FORMAT32x405=(Token)match(input,INSTRUCTION_FORMAT32x,FOLLOW_INSTRUCTION_FORMAT32x_in_insn_format32x5132); - stream_INSTRUCTION_FORMAT32x.add(INSTRUCTION_FORMAT32x405); + INSTRUCTION_FORMAT32x447=(Token)match(input,INSTRUCTION_FORMAT32x,FOLLOW_INSTRUCTION_FORMAT32x_in_insn_format32x5549); + stream_INSTRUCTION_FORMAT32x.add(INSTRUCTION_FORMAT32x447); - REGISTER406=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format32x5134); - stream_REGISTER.add(REGISTER406); + REGISTER448=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format32x5551); + stream_REGISTER.add(REGISTER448); - COMMA407=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format32x5136); - stream_COMMA.add(COMMA407); + COMMA449=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format32x5553); + stream_COMMA.add(COMMA449); - REGISTER408=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format32x5138); - stream_REGISTER.add(REGISTER408); + REGISTER450=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format32x5555); + stream_REGISTER.add(REGISTER450); // AST REWRITE - // elements: INSTRUCTION_FORMAT32x, REGISTER, REGISTER + // elements: REGISTER, INSTRUCTION_FORMAT32x, REGISTER // token labels: // rule labels: retval // token list labels: @@ -13084,9 +14213,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 1017:5: -> ^( I_STATEMENT_FORMAT32x[$start, \"I_STATEMENT_FORMAT32x\"] INSTRUCTION_FORMAT32x REGISTER REGISTER ) + // 1069:5: -> ^( I_STATEMENT_FORMAT32x[$start, \"I_STATEMENT_FORMAT32x\"] INSTRUCTION_FORMAT32x REGISTER REGISTER ) { - // smaliParser.g:1017:8: ^( I_STATEMENT_FORMAT32x[$start, \"I_STATEMENT_FORMAT32x\"] INSTRUCTION_FORMAT32x REGISTER REGISTER ) + // smaliParser.g:1069:8: ^( I_STATEMENT_FORMAT32x[$start, \"I_STATEMENT_FORMAT32x\"] INSTRUCTION_FORMAT32x REGISTER REGISTER ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT32x, (retval.start), "I_STATEMENT_FORMAT32x"), root_1); @@ -13122,6 +14251,114 @@ public class smaliParser extends Parser { // $ANTLR end "insn_format32x" + public static class insn_format35c_call_site_return extends ParserRuleReturnScope { + CommonTree tree; + @Override + public CommonTree getTree() { return tree; } + }; + + + // $ANTLR start "insn_format35c_call_site" + // smaliParser.g:1071:1: insn_format35c_call_site : INSTRUCTION_FORMAT35c_CALL_SITE OPEN_BRACE register_list CLOSE_BRACE COMMA call_site_reference -> ^( I_STATEMENT_FORMAT35c_CALL_SITE[$start, \"I_STATEMENT_FORMAT35c_CALL_SITE\"] INSTRUCTION_FORMAT35c_CALL_SITE register_list call_site_reference ) ; + public final smaliParser.insn_format35c_call_site_return insn_format35c_call_site() throws RecognitionException { + smaliParser.insn_format35c_call_site_return retval = new smaliParser.insn_format35c_call_site_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token INSTRUCTION_FORMAT35c_CALL_SITE451=null; + Token OPEN_BRACE452=null; + Token CLOSE_BRACE454=null; + Token COMMA455=null; + ParserRuleReturnScope register_list453 =null; + ParserRuleReturnScope call_site_reference456 =null; + + CommonTree INSTRUCTION_FORMAT35c_CALL_SITE451_tree=null; + CommonTree OPEN_BRACE452_tree=null; + CommonTree CLOSE_BRACE454_tree=null; + CommonTree COMMA455_tree=null; + RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); + RewriteRuleTokenStream stream_OPEN_BRACE=new RewriteRuleTokenStream(adaptor,"token OPEN_BRACE"); + RewriteRuleTokenStream stream_CLOSE_BRACE=new RewriteRuleTokenStream(adaptor,"token CLOSE_BRACE"); + RewriteRuleTokenStream stream_INSTRUCTION_FORMAT35c_CALL_SITE=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT35c_CALL_SITE"); + RewriteRuleSubtreeStream stream_register_list=new RewriteRuleSubtreeStream(adaptor,"rule register_list"); + RewriteRuleSubtreeStream stream_call_site_reference=new RewriteRuleSubtreeStream(adaptor,"rule call_site_reference"); + + try { + // smaliParser.g:1072:3: ( INSTRUCTION_FORMAT35c_CALL_SITE OPEN_BRACE register_list CLOSE_BRACE COMMA call_site_reference -> ^( I_STATEMENT_FORMAT35c_CALL_SITE[$start, \"I_STATEMENT_FORMAT35c_CALL_SITE\"] INSTRUCTION_FORMAT35c_CALL_SITE register_list call_site_reference ) ) + // smaliParser.g:1074:5: INSTRUCTION_FORMAT35c_CALL_SITE OPEN_BRACE register_list CLOSE_BRACE COMMA call_site_reference + { + INSTRUCTION_FORMAT35c_CALL_SITE451=(Token)match(input,INSTRUCTION_FORMAT35c_CALL_SITE,FOLLOW_INSTRUCTION_FORMAT35c_CALL_SITE_in_insn_format35c_call_site5592); + stream_INSTRUCTION_FORMAT35c_CALL_SITE.add(INSTRUCTION_FORMAT35c_CALL_SITE451); + + OPEN_BRACE452=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format35c_call_site5594); + stream_OPEN_BRACE.add(OPEN_BRACE452); + + pushFollow(FOLLOW_register_list_in_insn_format35c_call_site5596); + register_list453=register_list(); + state._fsp--; + + stream_register_list.add(register_list453.getTree()); + CLOSE_BRACE454=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format35c_call_site5598); + stream_CLOSE_BRACE.add(CLOSE_BRACE454); + + COMMA455=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format35c_call_site5600); + stream_COMMA.add(COMMA455); + + pushFollow(FOLLOW_call_site_reference_in_insn_format35c_call_site5602); + call_site_reference456=call_site_reference(); + state._fsp--; + + stream_call_site_reference.add(call_site_reference456.getTree()); + // AST REWRITE + // elements: register_list, call_site_reference, INSTRUCTION_FORMAT35c_CALL_SITE + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); + + root_0 = (CommonTree)adaptor.nil(); + // 1075:5: -> ^( I_STATEMENT_FORMAT35c_CALL_SITE[$start, \"I_STATEMENT_FORMAT35c_CALL_SITE\"] INSTRUCTION_FORMAT35c_CALL_SITE register_list call_site_reference ) + { + // smaliParser.g:1075:8: ^( I_STATEMENT_FORMAT35c_CALL_SITE[$start, \"I_STATEMENT_FORMAT35c_CALL_SITE\"] INSTRUCTION_FORMAT35c_CALL_SITE register_list call_site_reference ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT35c_CALL_SITE, (retval.start), "I_STATEMENT_FORMAT35c_CALL_SITE"), root_1); + adaptor.addChild(root_1, stream_INSTRUCTION_FORMAT35c_CALL_SITE.nextNode()); + adaptor.addChild(root_1, stream_register_list.nextTree()); + adaptor.addChild(root_1, stream_call_site_reference.nextTree()); + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + + retval.stop = input.LT(-1); + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + } + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "insn_format35c_call_site" + + public static class insn_format35c_method_return extends ParserRuleReturnScope { CommonTree tree; @Override @@ -13130,59 +14367,60 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format35c_method" - // smaliParser.g:1019:1: insn_format35c_method : INSTRUCTION_FORMAT35c_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference -> ^( I_STATEMENT_FORMAT35c_METHOD[$start, \"I_STATEMENT_FORMAT35c_METHOD\"] INSTRUCTION_FORMAT35c_METHOD register_list method_reference ) ; + // smaliParser.g:1077:1: insn_format35c_method : instruction_format35c_method OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference -> ^( I_STATEMENT_FORMAT35c_METHOD[$start, \"I_STATEMENT_FORMAT35c_METHOD\"] instruction_format35c_method register_list method_reference ) ; public final smaliParser.insn_format35c_method_return insn_format35c_method() throws RecognitionException { smaliParser.insn_format35c_method_return retval = new smaliParser.insn_format35c_method_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT35c_METHOD409=null; - Token OPEN_BRACE410=null; - Token CLOSE_BRACE412=null; - Token COMMA413=null; - ParserRuleReturnScope register_list411 =null; - ParserRuleReturnScope method_reference414 =null; + Token OPEN_BRACE458=null; + Token CLOSE_BRACE460=null; + Token COMMA461=null; + ParserRuleReturnScope instruction_format35c_method457 =null; + ParserRuleReturnScope register_list459 =null; + ParserRuleReturnScope method_reference462 =null; - CommonTree INSTRUCTION_FORMAT35c_METHOD409_tree=null; - CommonTree OPEN_BRACE410_tree=null; - CommonTree CLOSE_BRACE412_tree=null; - CommonTree COMMA413_tree=null; - RewriteRuleTokenStream stream_INSTRUCTION_FORMAT35c_METHOD=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT35c_METHOD"); + CommonTree OPEN_BRACE458_tree=null; + CommonTree CLOSE_BRACE460_tree=null; + CommonTree COMMA461_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_OPEN_BRACE=new RewriteRuleTokenStream(adaptor,"token OPEN_BRACE"); RewriteRuleTokenStream stream_CLOSE_BRACE=new RewriteRuleTokenStream(adaptor,"token CLOSE_BRACE"); + RewriteRuleSubtreeStream stream_instruction_format35c_method=new RewriteRuleSubtreeStream(adaptor,"rule instruction_format35c_method"); RewriteRuleSubtreeStream stream_method_reference=new RewriteRuleSubtreeStream(adaptor,"rule method_reference"); RewriteRuleSubtreeStream stream_register_list=new RewriteRuleSubtreeStream(adaptor,"rule register_list"); try { - // smaliParser.g:1020:3: ( INSTRUCTION_FORMAT35c_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference -> ^( I_STATEMENT_FORMAT35c_METHOD[$start, \"I_STATEMENT_FORMAT35c_METHOD\"] INSTRUCTION_FORMAT35c_METHOD register_list method_reference ) ) - // smaliParser.g:1021:5: INSTRUCTION_FORMAT35c_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference + // smaliParser.g:1078:3: ( instruction_format35c_method OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference -> ^( I_STATEMENT_FORMAT35c_METHOD[$start, \"I_STATEMENT_FORMAT35c_METHOD\"] instruction_format35c_method register_list method_reference ) ) + // smaliParser.g:1079:5: instruction_format35c_method OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference { - INSTRUCTION_FORMAT35c_METHOD409=(Token)match(input,INSTRUCTION_FORMAT35c_METHOD,FOLLOW_INSTRUCTION_FORMAT35c_METHOD_in_insn_format35c_method5170); - stream_INSTRUCTION_FORMAT35c_METHOD.add(INSTRUCTION_FORMAT35c_METHOD409); + pushFollow(FOLLOW_instruction_format35c_method_in_insn_format35c_method5634); + instruction_format35c_method457=instruction_format35c_method(); + state._fsp--; - OPEN_BRACE410=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format35c_method5172); - stream_OPEN_BRACE.add(OPEN_BRACE410); + stream_instruction_format35c_method.add(instruction_format35c_method457.getTree()); + OPEN_BRACE458=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format35c_method5636); + stream_OPEN_BRACE.add(OPEN_BRACE458); - pushFollow(FOLLOW_register_list_in_insn_format35c_method5174); - register_list411=register_list(); + pushFollow(FOLLOW_register_list_in_insn_format35c_method5638); + register_list459=register_list(); state._fsp--; - stream_register_list.add(register_list411.getTree()); - CLOSE_BRACE412=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format35c_method5176); - stream_CLOSE_BRACE.add(CLOSE_BRACE412); + stream_register_list.add(register_list459.getTree()); + CLOSE_BRACE460=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format35c_method5640); + stream_CLOSE_BRACE.add(CLOSE_BRACE460); - COMMA413=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format35c_method5178); - stream_COMMA.add(COMMA413); + COMMA461=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format35c_method5642); + stream_COMMA.add(COMMA461); - pushFollow(FOLLOW_method_reference_in_insn_format35c_method5180); - method_reference414=method_reference(); + pushFollow(FOLLOW_method_reference_in_insn_format35c_method5644); + method_reference462=method_reference(); state._fsp--; - stream_method_reference.add(method_reference414.getTree()); + stream_method_reference.add(method_reference462.getTree()); // AST REWRITE - // elements: INSTRUCTION_FORMAT35c_METHOD, register_list, method_reference + // elements: instruction_format35c_method, register_list, method_reference // token labels: // rule labels: retval // token list labels: @@ -13192,13 +14430,13 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 1022:5: -> ^( I_STATEMENT_FORMAT35c_METHOD[$start, \"I_STATEMENT_FORMAT35c_METHOD\"] INSTRUCTION_FORMAT35c_METHOD register_list method_reference ) + // 1080:5: -> ^( I_STATEMENT_FORMAT35c_METHOD[$start, \"I_STATEMENT_FORMAT35c_METHOD\"] instruction_format35c_method register_list method_reference ) { - // smaliParser.g:1022:8: ^( I_STATEMENT_FORMAT35c_METHOD[$start, \"I_STATEMENT_FORMAT35c_METHOD\"] INSTRUCTION_FORMAT35c_METHOD register_list method_reference ) + // smaliParser.g:1080:8: ^( I_STATEMENT_FORMAT35c_METHOD[$start, \"I_STATEMENT_FORMAT35c_METHOD\"] instruction_format35c_method register_list method_reference ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT35c_METHOD, (retval.start), "I_STATEMENT_FORMAT35c_METHOD"), root_1); - adaptor.addChild(root_1, stream_INSTRUCTION_FORMAT35c_METHOD.nextNode()); + adaptor.addChild(root_1, stream_instruction_format35c_method.nextTree()); adaptor.addChild(root_1, stream_register_list.nextTree()); adaptor.addChild(root_1, stream_method_reference.nextTree()); adaptor.addChild(root_0, root_1); @@ -13238,24 +14476,24 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format35c_type" - // smaliParser.g:1024:1: insn_format35c_type : INSTRUCTION_FORMAT35c_TYPE OPEN_BRACE register_list CLOSE_BRACE COMMA nonvoid_type_descriptor -> ^( I_STATEMENT_FORMAT35c_TYPE[$start, \"I_STATEMENT_FORMAT35c_TYPE\"] INSTRUCTION_FORMAT35c_TYPE register_list nonvoid_type_descriptor ) ; + // smaliParser.g:1082:1: insn_format35c_type : INSTRUCTION_FORMAT35c_TYPE OPEN_BRACE register_list CLOSE_BRACE COMMA nonvoid_type_descriptor -> ^( I_STATEMENT_FORMAT35c_TYPE[$start, \"I_STATEMENT_FORMAT35c_TYPE\"] INSTRUCTION_FORMAT35c_TYPE register_list nonvoid_type_descriptor ) ; public final smaliParser.insn_format35c_type_return insn_format35c_type() throws RecognitionException { smaliParser.insn_format35c_type_return retval = new smaliParser.insn_format35c_type_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT35c_TYPE415=null; - Token OPEN_BRACE416=null; - Token CLOSE_BRACE418=null; - Token COMMA419=null; - ParserRuleReturnScope register_list417 =null; - ParserRuleReturnScope nonvoid_type_descriptor420 =null; + Token INSTRUCTION_FORMAT35c_TYPE463=null; + Token OPEN_BRACE464=null; + Token CLOSE_BRACE466=null; + Token COMMA467=null; + ParserRuleReturnScope register_list465 =null; + ParserRuleReturnScope nonvoid_type_descriptor468 =null; - CommonTree INSTRUCTION_FORMAT35c_TYPE415_tree=null; - CommonTree OPEN_BRACE416_tree=null; - CommonTree CLOSE_BRACE418_tree=null; - CommonTree COMMA419_tree=null; + CommonTree INSTRUCTION_FORMAT35c_TYPE463_tree=null; + CommonTree OPEN_BRACE464_tree=null; + CommonTree CLOSE_BRACE466_tree=null; + CommonTree COMMA467_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT35c_TYPE=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT35c_TYPE"); RewriteRuleTokenStream stream_OPEN_BRACE=new RewriteRuleTokenStream(adaptor,"token OPEN_BRACE"); @@ -13264,33 +14502,33 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_nonvoid_type_descriptor=new RewriteRuleSubtreeStream(adaptor,"rule nonvoid_type_descriptor"); try { - // smaliParser.g:1025:3: ( INSTRUCTION_FORMAT35c_TYPE OPEN_BRACE register_list CLOSE_BRACE COMMA nonvoid_type_descriptor -> ^( I_STATEMENT_FORMAT35c_TYPE[$start, \"I_STATEMENT_FORMAT35c_TYPE\"] INSTRUCTION_FORMAT35c_TYPE register_list nonvoid_type_descriptor ) ) - // smaliParser.g:1026:5: INSTRUCTION_FORMAT35c_TYPE OPEN_BRACE register_list CLOSE_BRACE COMMA nonvoid_type_descriptor + // smaliParser.g:1083:3: ( INSTRUCTION_FORMAT35c_TYPE OPEN_BRACE register_list CLOSE_BRACE COMMA nonvoid_type_descriptor -> ^( I_STATEMENT_FORMAT35c_TYPE[$start, \"I_STATEMENT_FORMAT35c_TYPE\"] INSTRUCTION_FORMAT35c_TYPE register_list nonvoid_type_descriptor ) ) + // smaliParser.g:1084:5: INSTRUCTION_FORMAT35c_TYPE OPEN_BRACE register_list CLOSE_BRACE COMMA nonvoid_type_descriptor { - INSTRUCTION_FORMAT35c_TYPE415=(Token)match(input,INSTRUCTION_FORMAT35c_TYPE,FOLLOW_INSTRUCTION_FORMAT35c_TYPE_in_insn_format35c_type5212); - stream_INSTRUCTION_FORMAT35c_TYPE.add(INSTRUCTION_FORMAT35c_TYPE415); + INSTRUCTION_FORMAT35c_TYPE463=(Token)match(input,INSTRUCTION_FORMAT35c_TYPE,FOLLOW_INSTRUCTION_FORMAT35c_TYPE_in_insn_format35c_type5676); + stream_INSTRUCTION_FORMAT35c_TYPE.add(INSTRUCTION_FORMAT35c_TYPE463); - OPEN_BRACE416=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format35c_type5214); - stream_OPEN_BRACE.add(OPEN_BRACE416); + OPEN_BRACE464=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format35c_type5678); + stream_OPEN_BRACE.add(OPEN_BRACE464); - pushFollow(FOLLOW_register_list_in_insn_format35c_type5216); - register_list417=register_list(); + pushFollow(FOLLOW_register_list_in_insn_format35c_type5680); + register_list465=register_list(); state._fsp--; - stream_register_list.add(register_list417.getTree()); - CLOSE_BRACE418=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format35c_type5218); - stream_CLOSE_BRACE.add(CLOSE_BRACE418); + stream_register_list.add(register_list465.getTree()); + CLOSE_BRACE466=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format35c_type5682); + stream_CLOSE_BRACE.add(CLOSE_BRACE466); - COMMA419=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format35c_type5220); - stream_COMMA.add(COMMA419); + COMMA467=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format35c_type5684); + stream_COMMA.add(COMMA467); - pushFollow(FOLLOW_nonvoid_type_descriptor_in_insn_format35c_type5222); - nonvoid_type_descriptor420=nonvoid_type_descriptor(); + pushFollow(FOLLOW_nonvoid_type_descriptor_in_insn_format35c_type5686); + nonvoid_type_descriptor468=nonvoid_type_descriptor(); state._fsp--; - stream_nonvoid_type_descriptor.add(nonvoid_type_descriptor420.getTree()); + stream_nonvoid_type_descriptor.add(nonvoid_type_descriptor468.getTree()); // AST REWRITE - // elements: register_list, INSTRUCTION_FORMAT35c_TYPE, nonvoid_type_descriptor + // elements: INSTRUCTION_FORMAT35c_TYPE, nonvoid_type_descriptor, register_list // token labels: // rule labels: retval // token list labels: @@ -13300,9 +14538,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 1027:5: -> ^( I_STATEMENT_FORMAT35c_TYPE[$start, \"I_STATEMENT_FORMAT35c_TYPE\"] INSTRUCTION_FORMAT35c_TYPE register_list nonvoid_type_descriptor ) + // 1085:5: -> ^( I_STATEMENT_FORMAT35c_TYPE[$start, \"I_STATEMENT_FORMAT35c_TYPE\"] INSTRUCTION_FORMAT35c_TYPE register_list nonvoid_type_descriptor ) { - // smaliParser.g:1027:8: ^( I_STATEMENT_FORMAT35c_TYPE[$start, \"I_STATEMENT_FORMAT35c_TYPE\"] INSTRUCTION_FORMAT35c_TYPE register_list nonvoid_type_descriptor ) + // smaliParser.g:1085:8: ^( I_STATEMENT_FORMAT35c_TYPE[$start, \"I_STATEMENT_FORMAT35c_TYPE\"] INSTRUCTION_FORMAT35c_TYPE register_list nonvoid_type_descriptor ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT35c_TYPE, (retval.start), "I_STATEMENT_FORMAT35c_TYPE"), root_1); @@ -13346,62 +14584,62 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format35c_method_odex" - // smaliParser.g:1029:1: insn_format35c_method_odex : INSTRUCTION_FORMAT35c_METHOD_ODEX OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference ; + // smaliParser.g:1087:1: insn_format35c_method_odex : INSTRUCTION_FORMAT35c_METHOD_ODEX OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference ; public final smaliParser.insn_format35c_method_odex_return insn_format35c_method_odex() throws RecognitionException { smaliParser.insn_format35c_method_odex_return retval = new smaliParser.insn_format35c_method_odex_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT35c_METHOD_ODEX421=null; - Token OPEN_BRACE422=null; - Token CLOSE_BRACE424=null; - Token COMMA425=null; - ParserRuleReturnScope register_list423 =null; - ParserRuleReturnScope method_reference426 =null; + Token INSTRUCTION_FORMAT35c_METHOD_ODEX469=null; + Token OPEN_BRACE470=null; + Token CLOSE_BRACE472=null; + Token COMMA473=null; + ParserRuleReturnScope register_list471 =null; + ParserRuleReturnScope method_reference474 =null; - CommonTree INSTRUCTION_FORMAT35c_METHOD_ODEX421_tree=null; - CommonTree OPEN_BRACE422_tree=null; - CommonTree CLOSE_BRACE424_tree=null; - CommonTree COMMA425_tree=null; + CommonTree INSTRUCTION_FORMAT35c_METHOD_ODEX469_tree=null; + CommonTree OPEN_BRACE470_tree=null; + CommonTree CLOSE_BRACE472_tree=null; + CommonTree COMMA473_tree=null; try { - // smaliParser.g:1030:3: ( INSTRUCTION_FORMAT35c_METHOD_ODEX OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference ) - // smaliParser.g:1031:5: INSTRUCTION_FORMAT35c_METHOD_ODEX OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference + // smaliParser.g:1088:3: ( INSTRUCTION_FORMAT35c_METHOD_ODEX OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference ) + // smaliParser.g:1089:5: INSTRUCTION_FORMAT35c_METHOD_ODEX OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference { root_0 = (CommonTree)adaptor.nil(); - INSTRUCTION_FORMAT35c_METHOD_ODEX421=(Token)match(input,INSTRUCTION_FORMAT35c_METHOD_ODEX,FOLLOW_INSTRUCTION_FORMAT35c_METHOD_ODEX_in_insn_format35c_method_odex5254); - INSTRUCTION_FORMAT35c_METHOD_ODEX421_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT35c_METHOD_ODEX421); - adaptor.addChild(root_0, INSTRUCTION_FORMAT35c_METHOD_ODEX421_tree); + INSTRUCTION_FORMAT35c_METHOD_ODEX469=(Token)match(input,INSTRUCTION_FORMAT35c_METHOD_ODEX,FOLLOW_INSTRUCTION_FORMAT35c_METHOD_ODEX_in_insn_format35c_method_odex5718); + INSTRUCTION_FORMAT35c_METHOD_ODEX469_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT35c_METHOD_ODEX469); + adaptor.addChild(root_0, INSTRUCTION_FORMAT35c_METHOD_ODEX469_tree); - OPEN_BRACE422=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format35c_method_odex5256); - OPEN_BRACE422_tree = (CommonTree)adaptor.create(OPEN_BRACE422); - adaptor.addChild(root_0, OPEN_BRACE422_tree); + OPEN_BRACE470=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format35c_method_odex5720); + OPEN_BRACE470_tree = (CommonTree)adaptor.create(OPEN_BRACE470); + adaptor.addChild(root_0, OPEN_BRACE470_tree); - pushFollow(FOLLOW_register_list_in_insn_format35c_method_odex5258); - register_list423=register_list(); + pushFollow(FOLLOW_register_list_in_insn_format35c_method_odex5722); + register_list471=register_list(); state._fsp--; - adaptor.addChild(root_0, register_list423.getTree()); + adaptor.addChild(root_0, register_list471.getTree()); - CLOSE_BRACE424=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format35c_method_odex5260); - CLOSE_BRACE424_tree = (CommonTree)adaptor.create(CLOSE_BRACE424); - adaptor.addChild(root_0, CLOSE_BRACE424_tree); + CLOSE_BRACE472=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format35c_method_odex5724); + CLOSE_BRACE472_tree = (CommonTree)adaptor.create(CLOSE_BRACE472); + adaptor.addChild(root_0, CLOSE_BRACE472_tree); - COMMA425=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format35c_method_odex5262); - COMMA425_tree = (CommonTree)adaptor.create(COMMA425); - adaptor.addChild(root_0, COMMA425_tree); + COMMA473=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format35c_method_odex5726); + COMMA473_tree = (CommonTree)adaptor.create(COMMA473); + adaptor.addChild(root_0, COMMA473_tree); - pushFollow(FOLLOW_method_reference_in_insn_format35c_method_odex5264); - method_reference426=method_reference(); + pushFollow(FOLLOW_method_reference_in_insn_format35c_method_odex5728); + method_reference474=method_reference(); state._fsp--; - adaptor.addChild(root_0, method_reference426.getTree()); + adaptor.addChild(root_0, method_reference474.getTree()); - throwOdexedInstructionException(input, (INSTRUCTION_FORMAT35c_METHOD_ODEX421!=null?INSTRUCTION_FORMAT35c_METHOD_ODEX421.getText():null)); + throwOdexedInstructionException(input, (INSTRUCTION_FORMAT35c_METHOD_ODEX469!=null?INSTRUCTION_FORMAT35c_METHOD_ODEX469.getText():null)); } @@ -13432,61 +14670,61 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format35mi_method" - // smaliParser.g:1036:1: insn_format35mi_method : INSTRUCTION_FORMAT35mi_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA INLINE_INDEX ; + // smaliParser.g:1094:1: insn_format35mi_method : INSTRUCTION_FORMAT35mi_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA INLINE_INDEX ; public final smaliParser.insn_format35mi_method_return insn_format35mi_method() throws RecognitionException { smaliParser.insn_format35mi_method_return retval = new smaliParser.insn_format35mi_method_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT35mi_METHOD427=null; - Token OPEN_BRACE428=null; - Token CLOSE_BRACE430=null; - Token COMMA431=null; - Token INLINE_INDEX432=null; - ParserRuleReturnScope register_list429 =null; + Token INSTRUCTION_FORMAT35mi_METHOD475=null; + Token OPEN_BRACE476=null; + Token CLOSE_BRACE478=null; + Token COMMA479=null; + Token INLINE_INDEX480=null; + ParserRuleReturnScope register_list477 =null; - CommonTree INSTRUCTION_FORMAT35mi_METHOD427_tree=null; - CommonTree OPEN_BRACE428_tree=null; - CommonTree CLOSE_BRACE430_tree=null; - CommonTree COMMA431_tree=null; - CommonTree INLINE_INDEX432_tree=null; + CommonTree INSTRUCTION_FORMAT35mi_METHOD475_tree=null; + CommonTree OPEN_BRACE476_tree=null; + CommonTree CLOSE_BRACE478_tree=null; + CommonTree COMMA479_tree=null; + CommonTree INLINE_INDEX480_tree=null; try { - // smaliParser.g:1037:3: ( INSTRUCTION_FORMAT35mi_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA INLINE_INDEX ) - // smaliParser.g:1038:5: INSTRUCTION_FORMAT35mi_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA INLINE_INDEX + // smaliParser.g:1095:3: ( INSTRUCTION_FORMAT35mi_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA INLINE_INDEX ) + // smaliParser.g:1096:5: INSTRUCTION_FORMAT35mi_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA INLINE_INDEX { root_0 = (CommonTree)adaptor.nil(); - INSTRUCTION_FORMAT35mi_METHOD427=(Token)match(input,INSTRUCTION_FORMAT35mi_METHOD,FOLLOW_INSTRUCTION_FORMAT35mi_METHOD_in_insn_format35mi_method5285); - INSTRUCTION_FORMAT35mi_METHOD427_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT35mi_METHOD427); - adaptor.addChild(root_0, INSTRUCTION_FORMAT35mi_METHOD427_tree); + INSTRUCTION_FORMAT35mi_METHOD475=(Token)match(input,INSTRUCTION_FORMAT35mi_METHOD,FOLLOW_INSTRUCTION_FORMAT35mi_METHOD_in_insn_format35mi_method5749); + INSTRUCTION_FORMAT35mi_METHOD475_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT35mi_METHOD475); + adaptor.addChild(root_0, INSTRUCTION_FORMAT35mi_METHOD475_tree); - OPEN_BRACE428=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format35mi_method5287); - OPEN_BRACE428_tree = (CommonTree)adaptor.create(OPEN_BRACE428); - adaptor.addChild(root_0, OPEN_BRACE428_tree); + OPEN_BRACE476=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format35mi_method5751); + OPEN_BRACE476_tree = (CommonTree)adaptor.create(OPEN_BRACE476); + adaptor.addChild(root_0, OPEN_BRACE476_tree); - pushFollow(FOLLOW_register_list_in_insn_format35mi_method5289); - register_list429=register_list(); + pushFollow(FOLLOW_register_list_in_insn_format35mi_method5753); + register_list477=register_list(); state._fsp--; - adaptor.addChild(root_0, register_list429.getTree()); + adaptor.addChild(root_0, register_list477.getTree()); - CLOSE_BRACE430=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format35mi_method5291); - CLOSE_BRACE430_tree = (CommonTree)adaptor.create(CLOSE_BRACE430); - adaptor.addChild(root_0, CLOSE_BRACE430_tree); + CLOSE_BRACE478=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format35mi_method5755); + CLOSE_BRACE478_tree = (CommonTree)adaptor.create(CLOSE_BRACE478); + adaptor.addChild(root_0, CLOSE_BRACE478_tree); - COMMA431=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format35mi_method5293); - COMMA431_tree = (CommonTree)adaptor.create(COMMA431); - adaptor.addChild(root_0, COMMA431_tree); + COMMA479=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format35mi_method5757); + COMMA479_tree = (CommonTree)adaptor.create(COMMA479); + adaptor.addChild(root_0, COMMA479_tree); - INLINE_INDEX432=(Token)match(input,INLINE_INDEX,FOLLOW_INLINE_INDEX_in_insn_format35mi_method5295); - INLINE_INDEX432_tree = (CommonTree)adaptor.create(INLINE_INDEX432); - adaptor.addChild(root_0, INLINE_INDEX432_tree); + INLINE_INDEX480=(Token)match(input,INLINE_INDEX,FOLLOW_INLINE_INDEX_in_insn_format35mi_method5759); + INLINE_INDEX480_tree = (CommonTree)adaptor.create(INLINE_INDEX480); + adaptor.addChild(root_0, INLINE_INDEX480_tree); - throwOdexedInstructionException(input, (INSTRUCTION_FORMAT35mi_METHOD427!=null?INSTRUCTION_FORMAT35mi_METHOD427.getText():null)); + throwOdexedInstructionException(input, (INSTRUCTION_FORMAT35mi_METHOD475!=null?INSTRUCTION_FORMAT35mi_METHOD475.getText():null)); } @@ -13517,61 +14755,61 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format35ms_method" - // smaliParser.g:1043:1: insn_format35ms_method : INSTRUCTION_FORMAT35ms_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA VTABLE_INDEX ; + // smaliParser.g:1101:1: insn_format35ms_method : INSTRUCTION_FORMAT35ms_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA VTABLE_INDEX ; public final smaliParser.insn_format35ms_method_return insn_format35ms_method() throws RecognitionException { smaliParser.insn_format35ms_method_return retval = new smaliParser.insn_format35ms_method_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT35ms_METHOD433=null; - Token OPEN_BRACE434=null; - Token CLOSE_BRACE436=null; - Token COMMA437=null; - Token VTABLE_INDEX438=null; - ParserRuleReturnScope register_list435 =null; + Token INSTRUCTION_FORMAT35ms_METHOD481=null; + Token OPEN_BRACE482=null; + Token CLOSE_BRACE484=null; + Token COMMA485=null; + Token VTABLE_INDEX486=null; + ParserRuleReturnScope register_list483 =null; - CommonTree INSTRUCTION_FORMAT35ms_METHOD433_tree=null; - CommonTree OPEN_BRACE434_tree=null; - CommonTree CLOSE_BRACE436_tree=null; - CommonTree COMMA437_tree=null; - CommonTree VTABLE_INDEX438_tree=null; + CommonTree INSTRUCTION_FORMAT35ms_METHOD481_tree=null; + CommonTree OPEN_BRACE482_tree=null; + CommonTree CLOSE_BRACE484_tree=null; + CommonTree COMMA485_tree=null; + CommonTree VTABLE_INDEX486_tree=null; try { - // smaliParser.g:1044:3: ( INSTRUCTION_FORMAT35ms_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA VTABLE_INDEX ) - // smaliParser.g:1045:5: INSTRUCTION_FORMAT35ms_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA VTABLE_INDEX + // smaliParser.g:1102:3: ( INSTRUCTION_FORMAT35ms_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA VTABLE_INDEX ) + // smaliParser.g:1103:5: INSTRUCTION_FORMAT35ms_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA VTABLE_INDEX { root_0 = (CommonTree)adaptor.nil(); - INSTRUCTION_FORMAT35ms_METHOD433=(Token)match(input,INSTRUCTION_FORMAT35ms_METHOD,FOLLOW_INSTRUCTION_FORMAT35ms_METHOD_in_insn_format35ms_method5316); - INSTRUCTION_FORMAT35ms_METHOD433_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT35ms_METHOD433); - adaptor.addChild(root_0, INSTRUCTION_FORMAT35ms_METHOD433_tree); + INSTRUCTION_FORMAT35ms_METHOD481=(Token)match(input,INSTRUCTION_FORMAT35ms_METHOD,FOLLOW_INSTRUCTION_FORMAT35ms_METHOD_in_insn_format35ms_method5780); + INSTRUCTION_FORMAT35ms_METHOD481_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT35ms_METHOD481); + adaptor.addChild(root_0, INSTRUCTION_FORMAT35ms_METHOD481_tree); - OPEN_BRACE434=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format35ms_method5318); - OPEN_BRACE434_tree = (CommonTree)adaptor.create(OPEN_BRACE434); - adaptor.addChild(root_0, OPEN_BRACE434_tree); + OPEN_BRACE482=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format35ms_method5782); + OPEN_BRACE482_tree = (CommonTree)adaptor.create(OPEN_BRACE482); + adaptor.addChild(root_0, OPEN_BRACE482_tree); - pushFollow(FOLLOW_register_list_in_insn_format35ms_method5320); - register_list435=register_list(); + pushFollow(FOLLOW_register_list_in_insn_format35ms_method5784); + register_list483=register_list(); state._fsp--; - adaptor.addChild(root_0, register_list435.getTree()); + adaptor.addChild(root_0, register_list483.getTree()); - CLOSE_BRACE436=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format35ms_method5322); - CLOSE_BRACE436_tree = (CommonTree)adaptor.create(CLOSE_BRACE436); - adaptor.addChild(root_0, CLOSE_BRACE436_tree); + CLOSE_BRACE484=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format35ms_method5786); + CLOSE_BRACE484_tree = (CommonTree)adaptor.create(CLOSE_BRACE484); + adaptor.addChild(root_0, CLOSE_BRACE484_tree); - COMMA437=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format35ms_method5324); - COMMA437_tree = (CommonTree)adaptor.create(COMMA437); - adaptor.addChild(root_0, COMMA437_tree); + COMMA485=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format35ms_method5788); + COMMA485_tree = (CommonTree)adaptor.create(COMMA485); + adaptor.addChild(root_0, COMMA485_tree); - VTABLE_INDEX438=(Token)match(input,VTABLE_INDEX,FOLLOW_VTABLE_INDEX_in_insn_format35ms_method5326); - VTABLE_INDEX438_tree = (CommonTree)adaptor.create(VTABLE_INDEX438); - adaptor.addChild(root_0, VTABLE_INDEX438_tree); + VTABLE_INDEX486=(Token)match(input,VTABLE_INDEX,FOLLOW_VTABLE_INDEX_in_insn_format35ms_method5790); + VTABLE_INDEX486_tree = (CommonTree)adaptor.create(VTABLE_INDEX486); + adaptor.addChild(root_0, VTABLE_INDEX486_tree); - throwOdexedInstructionException(input, (INSTRUCTION_FORMAT35ms_METHOD433!=null?INSTRUCTION_FORMAT35ms_METHOD433.getText():null)); + throwOdexedInstructionException(input, (INSTRUCTION_FORMAT35ms_METHOD481!=null?INSTRUCTION_FORMAT35ms_METHOD481.getText():null)); } @@ -13594,6 +14832,114 @@ public class smaliParser extends Parser { // $ANTLR end "insn_format35ms_method" + public static class insn_format3rc_call_site_return extends ParserRuleReturnScope { + CommonTree tree; + @Override + public CommonTree getTree() { return tree; } + }; + + + // $ANTLR start "insn_format3rc_call_site" + // smaliParser.g:1108:1: insn_format3rc_call_site : INSTRUCTION_FORMAT3rc_CALL_SITE OPEN_BRACE register_range CLOSE_BRACE COMMA call_site_reference -> ^( I_STATEMENT_FORMAT3rc_CALL_SITE[$start, \"I_STATEMENT_FORMAT3rc_CALL_SITE\"] INSTRUCTION_FORMAT3rc_CALL_SITE register_range call_site_reference ) ; + public final smaliParser.insn_format3rc_call_site_return insn_format3rc_call_site() throws RecognitionException { + smaliParser.insn_format3rc_call_site_return retval = new smaliParser.insn_format3rc_call_site_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token INSTRUCTION_FORMAT3rc_CALL_SITE487=null; + Token OPEN_BRACE488=null; + Token CLOSE_BRACE490=null; + Token COMMA491=null; + ParserRuleReturnScope register_range489 =null; + ParserRuleReturnScope call_site_reference492 =null; + + CommonTree INSTRUCTION_FORMAT3rc_CALL_SITE487_tree=null; + CommonTree OPEN_BRACE488_tree=null; + CommonTree CLOSE_BRACE490_tree=null; + CommonTree COMMA491_tree=null; + RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); + RewriteRuleTokenStream stream_OPEN_BRACE=new RewriteRuleTokenStream(adaptor,"token OPEN_BRACE"); + RewriteRuleTokenStream stream_CLOSE_BRACE=new RewriteRuleTokenStream(adaptor,"token CLOSE_BRACE"); + RewriteRuleTokenStream stream_INSTRUCTION_FORMAT3rc_CALL_SITE=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT3rc_CALL_SITE"); + RewriteRuleSubtreeStream stream_register_range=new RewriteRuleSubtreeStream(adaptor,"rule register_range"); + RewriteRuleSubtreeStream stream_call_site_reference=new RewriteRuleSubtreeStream(adaptor,"rule call_site_reference"); + + try { + // smaliParser.g:1109:3: ( INSTRUCTION_FORMAT3rc_CALL_SITE OPEN_BRACE register_range CLOSE_BRACE COMMA call_site_reference -> ^( I_STATEMENT_FORMAT3rc_CALL_SITE[$start, \"I_STATEMENT_FORMAT3rc_CALL_SITE\"] INSTRUCTION_FORMAT3rc_CALL_SITE register_range call_site_reference ) ) + // smaliParser.g:1111:5: INSTRUCTION_FORMAT3rc_CALL_SITE OPEN_BRACE register_range CLOSE_BRACE COMMA call_site_reference + { + INSTRUCTION_FORMAT3rc_CALL_SITE487=(Token)match(input,INSTRUCTION_FORMAT3rc_CALL_SITE,FOLLOW_INSTRUCTION_FORMAT3rc_CALL_SITE_in_insn_format3rc_call_site5816); + stream_INSTRUCTION_FORMAT3rc_CALL_SITE.add(INSTRUCTION_FORMAT3rc_CALL_SITE487); + + OPEN_BRACE488=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format3rc_call_site5818); + stream_OPEN_BRACE.add(OPEN_BRACE488); + + pushFollow(FOLLOW_register_range_in_insn_format3rc_call_site5820); + register_range489=register_range(); + state._fsp--; + + stream_register_range.add(register_range489.getTree()); + CLOSE_BRACE490=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format3rc_call_site5822); + stream_CLOSE_BRACE.add(CLOSE_BRACE490); + + COMMA491=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format3rc_call_site5824); + stream_COMMA.add(COMMA491); + + pushFollow(FOLLOW_call_site_reference_in_insn_format3rc_call_site5826); + call_site_reference492=call_site_reference(); + state._fsp--; + + stream_call_site_reference.add(call_site_reference492.getTree()); + // AST REWRITE + // elements: call_site_reference, INSTRUCTION_FORMAT3rc_CALL_SITE, register_range + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); + + root_0 = (CommonTree)adaptor.nil(); + // 1112:5: -> ^( I_STATEMENT_FORMAT3rc_CALL_SITE[$start, \"I_STATEMENT_FORMAT3rc_CALL_SITE\"] INSTRUCTION_FORMAT3rc_CALL_SITE register_range call_site_reference ) + { + // smaliParser.g:1112:8: ^( I_STATEMENT_FORMAT3rc_CALL_SITE[$start, \"I_STATEMENT_FORMAT3rc_CALL_SITE\"] INSTRUCTION_FORMAT3rc_CALL_SITE register_range call_site_reference ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT3rc_CALL_SITE, (retval.start), "I_STATEMENT_FORMAT3rc_CALL_SITE"), root_1); + adaptor.addChild(root_1, stream_INSTRUCTION_FORMAT3rc_CALL_SITE.nextNode()); + adaptor.addChild(root_1, stream_register_range.nextTree()); + adaptor.addChild(root_1, stream_call_site_reference.nextTree()); + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + + retval.stop = input.LT(-1); + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + } + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "insn_format3rc_call_site" + + public static class insn_format3rc_method_return extends ParserRuleReturnScope { CommonTree tree; @Override @@ -13602,24 +14948,24 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format3rc_method" - // smaliParser.g:1050:1: insn_format3rc_method : INSTRUCTION_FORMAT3rc_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA method_reference -> ^( I_STATEMENT_FORMAT3rc_METHOD[$start, \"I_STATEMENT_FORMAT3rc_METHOD\"] INSTRUCTION_FORMAT3rc_METHOD register_range method_reference ) ; + // smaliParser.g:1114:1: insn_format3rc_method : INSTRUCTION_FORMAT3rc_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA method_reference -> ^( I_STATEMENT_FORMAT3rc_METHOD[$start, \"I_STATEMENT_FORMAT3rc_METHOD\"] INSTRUCTION_FORMAT3rc_METHOD register_range method_reference ) ; public final smaliParser.insn_format3rc_method_return insn_format3rc_method() throws RecognitionException { smaliParser.insn_format3rc_method_return retval = new smaliParser.insn_format3rc_method_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT3rc_METHOD439=null; - Token OPEN_BRACE440=null; - Token CLOSE_BRACE442=null; - Token COMMA443=null; - ParserRuleReturnScope register_range441 =null; - ParserRuleReturnScope method_reference444 =null; - - CommonTree INSTRUCTION_FORMAT3rc_METHOD439_tree=null; - CommonTree OPEN_BRACE440_tree=null; - CommonTree CLOSE_BRACE442_tree=null; - CommonTree COMMA443_tree=null; + Token INSTRUCTION_FORMAT3rc_METHOD493=null; + Token OPEN_BRACE494=null; + Token CLOSE_BRACE496=null; + Token COMMA497=null; + ParserRuleReturnScope register_range495 =null; + ParserRuleReturnScope method_reference498 =null; + + CommonTree INSTRUCTION_FORMAT3rc_METHOD493_tree=null; + CommonTree OPEN_BRACE494_tree=null; + CommonTree CLOSE_BRACE496_tree=null; + CommonTree COMMA497_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT3rc_METHOD=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT3rc_METHOD"); RewriteRuleTokenStream stream_OPEN_BRACE=new RewriteRuleTokenStream(adaptor,"token OPEN_BRACE"); @@ -13628,33 +14974,33 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_register_range=new RewriteRuleSubtreeStream(adaptor,"rule register_range"); try { - // smaliParser.g:1051:3: ( INSTRUCTION_FORMAT3rc_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA method_reference -> ^( I_STATEMENT_FORMAT3rc_METHOD[$start, \"I_STATEMENT_FORMAT3rc_METHOD\"] INSTRUCTION_FORMAT3rc_METHOD register_range method_reference ) ) - // smaliParser.g:1052:5: INSTRUCTION_FORMAT3rc_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA method_reference + // smaliParser.g:1115:3: ( INSTRUCTION_FORMAT3rc_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA method_reference -> ^( I_STATEMENT_FORMAT3rc_METHOD[$start, \"I_STATEMENT_FORMAT3rc_METHOD\"] INSTRUCTION_FORMAT3rc_METHOD register_range method_reference ) ) + // smaliParser.g:1116:5: INSTRUCTION_FORMAT3rc_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA method_reference { - INSTRUCTION_FORMAT3rc_METHOD439=(Token)match(input,INSTRUCTION_FORMAT3rc_METHOD,FOLLOW_INSTRUCTION_FORMAT3rc_METHOD_in_insn_format3rc_method5347); - stream_INSTRUCTION_FORMAT3rc_METHOD.add(INSTRUCTION_FORMAT3rc_METHOD439); + INSTRUCTION_FORMAT3rc_METHOD493=(Token)match(input,INSTRUCTION_FORMAT3rc_METHOD,FOLLOW_INSTRUCTION_FORMAT3rc_METHOD_in_insn_format3rc_method5858); + stream_INSTRUCTION_FORMAT3rc_METHOD.add(INSTRUCTION_FORMAT3rc_METHOD493); - OPEN_BRACE440=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format3rc_method5349); - stream_OPEN_BRACE.add(OPEN_BRACE440); + OPEN_BRACE494=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format3rc_method5860); + stream_OPEN_BRACE.add(OPEN_BRACE494); - pushFollow(FOLLOW_register_range_in_insn_format3rc_method5351); - register_range441=register_range(); + pushFollow(FOLLOW_register_range_in_insn_format3rc_method5862); + register_range495=register_range(); state._fsp--; - stream_register_range.add(register_range441.getTree()); - CLOSE_BRACE442=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format3rc_method5353); - stream_CLOSE_BRACE.add(CLOSE_BRACE442); + stream_register_range.add(register_range495.getTree()); + CLOSE_BRACE496=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format3rc_method5864); + stream_CLOSE_BRACE.add(CLOSE_BRACE496); - COMMA443=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format3rc_method5355); - stream_COMMA.add(COMMA443); + COMMA497=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format3rc_method5866); + stream_COMMA.add(COMMA497); - pushFollow(FOLLOW_method_reference_in_insn_format3rc_method5357); - method_reference444=method_reference(); + pushFollow(FOLLOW_method_reference_in_insn_format3rc_method5868); + method_reference498=method_reference(); state._fsp--; - stream_method_reference.add(method_reference444.getTree()); + stream_method_reference.add(method_reference498.getTree()); // AST REWRITE - // elements: register_range, INSTRUCTION_FORMAT3rc_METHOD, method_reference + // elements: method_reference, INSTRUCTION_FORMAT3rc_METHOD, register_range // token labels: // rule labels: retval // token list labels: @@ -13664,9 +15010,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 1053:5: -> ^( I_STATEMENT_FORMAT3rc_METHOD[$start, \"I_STATEMENT_FORMAT3rc_METHOD\"] INSTRUCTION_FORMAT3rc_METHOD register_range method_reference ) + // 1117:5: -> ^( I_STATEMENT_FORMAT3rc_METHOD[$start, \"I_STATEMENT_FORMAT3rc_METHOD\"] INSTRUCTION_FORMAT3rc_METHOD register_range method_reference ) { - // smaliParser.g:1053:8: ^( I_STATEMENT_FORMAT3rc_METHOD[$start, \"I_STATEMENT_FORMAT3rc_METHOD\"] INSTRUCTION_FORMAT3rc_METHOD register_range method_reference ) + // smaliParser.g:1117:8: ^( I_STATEMENT_FORMAT3rc_METHOD[$start, \"I_STATEMENT_FORMAT3rc_METHOD\"] INSTRUCTION_FORMAT3rc_METHOD register_range method_reference ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT3rc_METHOD, (retval.start), "I_STATEMENT_FORMAT3rc_METHOD"), root_1); @@ -13710,62 +15056,62 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format3rc_method_odex" - // smaliParser.g:1055:1: insn_format3rc_method_odex : INSTRUCTION_FORMAT3rc_METHOD_ODEX OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference ; + // smaliParser.g:1119:1: insn_format3rc_method_odex : INSTRUCTION_FORMAT3rc_METHOD_ODEX OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference ; public final smaliParser.insn_format3rc_method_odex_return insn_format3rc_method_odex() throws RecognitionException { smaliParser.insn_format3rc_method_odex_return retval = new smaliParser.insn_format3rc_method_odex_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT3rc_METHOD_ODEX445=null; - Token OPEN_BRACE446=null; - Token CLOSE_BRACE448=null; - Token COMMA449=null; - ParserRuleReturnScope register_list447 =null; - ParserRuleReturnScope method_reference450 =null; + Token INSTRUCTION_FORMAT3rc_METHOD_ODEX499=null; + Token OPEN_BRACE500=null; + Token CLOSE_BRACE502=null; + Token COMMA503=null; + ParserRuleReturnScope register_list501 =null; + ParserRuleReturnScope method_reference504 =null; - CommonTree INSTRUCTION_FORMAT3rc_METHOD_ODEX445_tree=null; - CommonTree OPEN_BRACE446_tree=null; - CommonTree CLOSE_BRACE448_tree=null; - CommonTree COMMA449_tree=null; + CommonTree INSTRUCTION_FORMAT3rc_METHOD_ODEX499_tree=null; + CommonTree OPEN_BRACE500_tree=null; + CommonTree CLOSE_BRACE502_tree=null; + CommonTree COMMA503_tree=null; try { - // smaliParser.g:1056:3: ( INSTRUCTION_FORMAT3rc_METHOD_ODEX OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference ) - // smaliParser.g:1057:5: INSTRUCTION_FORMAT3rc_METHOD_ODEX OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference + // smaliParser.g:1120:3: ( INSTRUCTION_FORMAT3rc_METHOD_ODEX OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference ) + // smaliParser.g:1121:5: INSTRUCTION_FORMAT3rc_METHOD_ODEX OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference { root_0 = (CommonTree)adaptor.nil(); - INSTRUCTION_FORMAT3rc_METHOD_ODEX445=(Token)match(input,INSTRUCTION_FORMAT3rc_METHOD_ODEX,FOLLOW_INSTRUCTION_FORMAT3rc_METHOD_ODEX_in_insn_format3rc_method_odex5389); - INSTRUCTION_FORMAT3rc_METHOD_ODEX445_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT3rc_METHOD_ODEX445); - adaptor.addChild(root_0, INSTRUCTION_FORMAT3rc_METHOD_ODEX445_tree); + INSTRUCTION_FORMAT3rc_METHOD_ODEX499=(Token)match(input,INSTRUCTION_FORMAT3rc_METHOD_ODEX,FOLLOW_INSTRUCTION_FORMAT3rc_METHOD_ODEX_in_insn_format3rc_method_odex5900); + INSTRUCTION_FORMAT3rc_METHOD_ODEX499_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT3rc_METHOD_ODEX499); + adaptor.addChild(root_0, INSTRUCTION_FORMAT3rc_METHOD_ODEX499_tree); - OPEN_BRACE446=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format3rc_method_odex5391); - OPEN_BRACE446_tree = (CommonTree)adaptor.create(OPEN_BRACE446); - adaptor.addChild(root_0, OPEN_BRACE446_tree); + OPEN_BRACE500=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format3rc_method_odex5902); + OPEN_BRACE500_tree = (CommonTree)adaptor.create(OPEN_BRACE500); + adaptor.addChild(root_0, OPEN_BRACE500_tree); - pushFollow(FOLLOW_register_list_in_insn_format3rc_method_odex5393); - register_list447=register_list(); + pushFollow(FOLLOW_register_list_in_insn_format3rc_method_odex5904); + register_list501=register_list(); state._fsp--; - adaptor.addChild(root_0, register_list447.getTree()); + adaptor.addChild(root_0, register_list501.getTree()); - CLOSE_BRACE448=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format3rc_method_odex5395); - CLOSE_BRACE448_tree = (CommonTree)adaptor.create(CLOSE_BRACE448); - adaptor.addChild(root_0, CLOSE_BRACE448_tree); + CLOSE_BRACE502=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format3rc_method_odex5906); + CLOSE_BRACE502_tree = (CommonTree)adaptor.create(CLOSE_BRACE502); + adaptor.addChild(root_0, CLOSE_BRACE502_tree); - COMMA449=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format3rc_method_odex5397); - COMMA449_tree = (CommonTree)adaptor.create(COMMA449); - adaptor.addChild(root_0, COMMA449_tree); + COMMA503=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format3rc_method_odex5908); + COMMA503_tree = (CommonTree)adaptor.create(COMMA503); + adaptor.addChild(root_0, COMMA503_tree); - pushFollow(FOLLOW_method_reference_in_insn_format3rc_method_odex5399); - method_reference450=method_reference(); + pushFollow(FOLLOW_method_reference_in_insn_format3rc_method_odex5910); + method_reference504=method_reference(); state._fsp--; - adaptor.addChild(root_0, method_reference450.getTree()); + adaptor.addChild(root_0, method_reference504.getTree()); - throwOdexedInstructionException(input, (INSTRUCTION_FORMAT3rc_METHOD_ODEX445!=null?INSTRUCTION_FORMAT3rc_METHOD_ODEX445.getText():null)); + throwOdexedInstructionException(input, (INSTRUCTION_FORMAT3rc_METHOD_ODEX499!=null?INSTRUCTION_FORMAT3rc_METHOD_ODEX499.getText():null)); } @@ -13796,24 +15142,24 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format3rc_type" - // smaliParser.g:1062:1: insn_format3rc_type : INSTRUCTION_FORMAT3rc_TYPE OPEN_BRACE register_range CLOSE_BRACE COMMA nonvoid_type_descriptor -> ^( I_STATEMENT_FORMAT3rc_TYPE[$start, \"I_STATEMENT_FORMAT3rc_TYPE\"] INSTRUCTION_FORMAT3rc_TYPE register_range nonvoid_type_descriptor ) ; + // smaliParser.g:1126:1: insn_format3rc_type : INSTRUCTION_FORMAT3rc_TYPE OPEN_BRACE register_range CLOSE_BRACE COMMA nonvoid_type_descriptor -> ^( I_STATEMENT_FORMAT3rc_TYPE[$start, \"I_STATEMENT_FORMAT3rc_TYPE\"] INSTRUCTION_FORMAT3rc_TYPE register_range nonvoid_type_descriptor ) ; public final smaliParser.insn_format3rc_type_return insn_format3rc_type() throws RecognitionException { smaliParser.insn_format3rc_type_return retval = new smaliParser.insn_format3rc_type_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT3rc_TYPE451=null; - Token OPEN_BRACE452=null; - Token CLOSE_BRACE454=null; - Token COMMA455=null; - ParserRuleReturnScope register_range453 =null; - ParserRuleReturnScope nonvoid_type_descriptor456 =null; - - CommonTree INSTRUCTION_FORMAT3rc_TYPE451_tree=null; - CommonTree OPEN_BRACE452_tree=null; - CommonTree CLOSE_BRACE454_tree=null; - CommonTree COMMA455_tree=null; + Token INSTRUCTION_FORMAT3rc_TYPE505=null; + Token OPEN_BRACE506=null; + Token CLOSE_BRACE508=null; + Token COMMA509=null; + ParserRuleReturnScope register_range507 =null; + ParserRuleReturnScope nonvoid_type_descriptor510 =null; + + CommonTree INSTRUCTION_FORMAT3rc_TYPE505_tree=null; + CommonTree OPEN_BRACE506_tree=null; + CommonTree CLOSE_BRACE508_tree=null; + CommonTree COMMA509_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_OPEN_BRACE=new RewriteRuleTokenStream(adaptor,"token OPEN_BRACE"); RewriteRuleTokenStream stream_CLOSE_BRACE=new RewriteRuleTokenStream(adaptor,"token CLOSE_BRACE"); @@ -13822,33 +15168,33 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_register_range=new RewriteRuleSubtreeStream(adaptor,"rule register_range"); try { - // smaliParser.g:1063:3: ( INSTRUCTION_FORMAT3rc_TYPE OPEN_BRACE register_range CLOSE_BRACE COMMA nonvoid_type_descriptor -> ^( I_STATEMENT_FORMAT3rc_TYPE[$start, \"I_STATEMENT_FORMAT3rc_TYPE\"] INSTRUCTION_FORMAT3rc_TYPE register_range nonvoid_type_descriptor ) ) - // smaliParser.g:1064:5: INSTRUCTION_FORMAT3rc_TYPE OPEN_BRACE register_range CLOSE_BRACE COMMA nonvoid_type_descriptor + // smaliParser.g:1127:3: ( INSTRUCTION_FORMAT3rc_TYPE OPEN_BRACE register_range CLOSE_BRACE COMMA nonvoid_type_descriptor -> ^( I_STATEMENT_FORMAT3rc_TYPE[$start, \"I_STATEMENT_FORMAT3rc_TYPE\"] INSTRUCTION_FORMAT3rc_TYPE register_range nonvoid_type_descriptor ) ) + // smaliParser.g:1128:5: INSTRUCTION_FORMAT3rc_TYPE OPEN_BRACE register_range CLOSE_BRACE COMMA nonvoid_type_descriptor { - INSTRUCTION_FORMAT3rc_TYPE451=(Token)match(input,INSTRUCTION_FORMAT3rc_TYPE,FOLLOW_INSTRUCTION_FORMAT3rc_TYPE_in_insn_format3rc_type5420); - stream_INSTRUCTION_FORMAT3rc_TYPE.add(INSTRUCTION_FORMAT3rc_TYPE451); + INSTRUCTION_FORMAT3rc_TYPE505=(Token)match(input,INSTRUCTION_FORMAT3rc_TYPE,FOLLOW_INSTRUCTION_FORMAT3rc_TYPE_in_insn_format3rc_type5931); + stream_INSTRUCTION_FORMAT3rc_TYPE.add(INSTRUCTION_FORMAT3rc_TYPE505); - OPEN_BRACE452=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format3rc_type5422); - stream_OPEN_BRACE.add(OPEN_BRACE452); + OPEN_BRACE506=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format3rc_type5933); + stream_OPEN_BRACE.add(OPEN_BRACE506); - pushFollow(FOLLOW_register_range_in_insn_format3rc_type5424); - register_range453=register_range(); + pushFollow(FOLLOW_register_range_in_insn_format3rc_type5935); + register_range507=register_range(); state._fsp--; - stream_register_range.add(register_range453.getTree()); - CLOSE_BRACE454=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format3rc_type5426); - stream_CLOSE_BRACE.add(CLOSE_BRACE454); + stream_register_range.add(register_range507.getTree()); + CLOSE_BRACE508=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format3rc_type5937); + stream_CLOSE_BRACE.add(CLOSE_BRACE508); - COMMA455=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format3rc_type5428); - stream_COMMA.add(COMMA455); + COMMA509=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format3rc_type5939); + stream_COMMA.add(COMMA509); - pushFollow(FOLLOW_nonvoid_type_descriptor_in_insn_format3rc_type5430); - nonvoid_type_descriptor456=nonvoid_type_descriptor(); + pushFollow(FOLLOW_nonvoid_type_descriptor_in_insn_format3rc_type5941); + nonvoid_type_descriptor510=nonvoid_type_descriptor(); state._fsp--; - stream_nonvoid_type_descriptor.add(nonvoid_type_descriptor456.getTree()); + stream_nonvoid_type_descriptor.add(nonvoid_type_descriptor510.getTree()); // AST REWRITE - // elements: nonvoid_type_descriptor, INSTRUCTION_FORMAT3rc_TYPE, register_range + // elements: register_range, INSTRUCTION_FORMAT3rc_TYPE, nonvoid_type_descriptor // token labels: // rule labels: retval // token list labels: @@ -13858,9 +15204,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 1065:5: -> ^( I_STATEMENT_FORMAT3rc_TYPE[$start, \"I_STATEMENT_FORMAT3rc_TYPE\"] INSTRUCTION_FORMAT3rc_TYPE register_range nonvoid_type_descriptor ) + // 1129:5: -> ^( I_STATEMENT_FORMAT3rc_TYPE[$start, \"I_STATEMENT_FORMAT3rc_TYPE\"] INSTRUCTION_FORMAT3rc_TYPE register_range nonvoid_type_descriptor ) { - // smaliParser.g:1065:8: ^( I_STATEMENT_FORMAT3rc_TYPE[$start, \"I_STATEMENT_FORMAT3rc_TYPE\"] INSTRUCTION_FORMAT3rc_TYPE register_range nonvoid_type_descriptor ) + // smaliParser.g:1129:8: ^( I_STATEMENT_FORMAT3rc_TYPE[$start, \"I_STATEMENT_FORMAT3rc_TYPE\"] INSTRUCTION_FORMAT3rc_TYPE register_range nonvoid_type_descriptor ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT3rc_TYPE, (retval.start), "I_STATEMENT_FORMAT3rc_TYPE"), root_1); @@ -13904,61 +15250,61 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format3rmi_method" - // smaliParser.g:1067:1: insn_format3rmi_method : INSTRUCTION_FORMAT3rmi_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA INLINE_INDEX ; + // smaliParser.g:1131:1: insn_format3rmi_method : INSTRUCTION_FORMAT3rmi_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA INLINE_INDEX ; public final smaliParser.insn_format3rmi_method_return insn_format3rmi_method() throws RecognitionException { smaliParser.insn_format3rmi_method_return retval = new smaliParser.insn_format3rmi_method_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT3rmi_METHOD457=null; - Token OPEN_BRACE458=null; - Token CLOSE_BRACE460=null; - Token COMMA461=null; - Token INLINE_INDEX462=null; - ParserRuleReturnScope register_range459 =null; + Token INSTRUCTION_FORMAT3rmi_METHOD511=null; + Token OPEN_BRACE512=null; + Token CLOSE_BRACE514=null; + Token COMMA515=null; + Token INLINE_INDEX516=null; + ParserRuleReturnScope register_range513 =null; - CommonTree INSTRUCTION_FORMAT3rmi_METHOD457_tree=null; - CommonTree OPEN_BRACE458_tree=null; - CommonTree CLOSE_BRACE460_tree=null; - CommonTree COMMA461_tree=null; - CommonTree INLINE_INDEX462_tree=null; + CommonTree INSTRUCTION_FORMAT3rmi_METHOD511_tree=null; + CommonTree OPEN_BRACE512_tree=null; + CommonTree CLOSE_BRACE514_tree=null; + CommonTree COMMA515_tree=null; + CommonTree INLINE_INDEX516_tree=null; try { - // smaliParser.g:1068:3: ( INSTRUCTION_FORMAT3rmi_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA INLINE_INDEX ) - // smaliParser.g:1069:5: INSTRUCTION_FORMAT3rmi_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA INLINE_INDEX + // smaliParser.g:1132:3: ( INSTRUCTION_FORMAT3rmi_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA INLINE_INDEX ) + // smaliParser.g:1133:5: INSTRUCTION_FORMAT3rmi_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA INLINE_INDEX { root_0 = (CommonTree)adaptor.nil(); - INSTRUCTION_FORMAT3rmi_METHOD457=(Token)match(input,INSTRUCTION_FORMAT3rmi_METHOD,FOLLOW_INSTRUCTION_FORMAT3rmi_METHOD_in_insn_format3rmi_method5462); - INSTRUCTION_FORMAT3rmi_METHOD457_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT3rmi_METHOD457); - adaptor.addChild(root_0, INSTRUCTION_FORMAT3rmi_METHOD457_tree); + INSTRUCTION_FORMAT3rmi_METHOD511=(Token)match(input,INSTRUCTION_FORMAT3rmi_METHOD,FOLLOW_INSTRUCTION_FORMAT3rmi_METHOD_in_insn_format3rmi_method5973); + INSTRUCTION_FORMAT3rmi_METHOD511_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT3rmi_METHOD511); + adaptor.addChild(root_0, INSTRUCTION_FORMAT3rmi_METHOD511_tree); - OPEN_BRACE458=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format3rmi_method5464); - OPEN_BRACE458_tree = (CommonTree)adaptor.create(OPEN_BRACE458); - adaptor.addChild(root_0, OPEN_BRACE458_tree); + OPEN_BRACE512=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format3rmi_method5975); + OPEN_BRACE512_tree = (CommonTree)adaptor.create(OPEN_BRACE512); + adaptor.addChild(root_0, OPEN_BRACE512_tree); - pushFollow(FOLLOW_register_range_in_insn_format3rmi_method5466); - register_range459=register_range(); + pushFollow(FOLLOW_register_range_in_insn_format3rmi_method5977); + register_range513=register_range(); state._fsp--; - adaptor.addChild(root_0, register_range459.getTree()); + adaptor.addChild(root_0, register_range513.getTree()); - CLOSE_BRACE460=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format3rmi_method5468); - CLOSE_BRACE460_tree = (CommonTree)adaptor.create(CLOSE_BRACE460); - adaptor.addChild(root_0, CLOSE_BRACE460_tree); + CLOSE_BRACE514=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format3rmi_method5979); + CLOSE_BRACE514_tree = (CommonTree)adaptor.create(CLOSE_BRACE514); + adaptor.addChild(root_0, CLOSE_BRACE514_tree); - COMMA461=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format3rmi_method5470); - COMMA461_tree = (CommonTree)adaptor.create(COMMA461); - adaptor.addChild(root_0, COMMA461_tree); + COMMA515=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format3rmi_method5981); + COMMA515_tree = (CommonTree)adaptor.create(COMMA515); + adaptor.addChild(root_0, COMMA515_tree); - INLINE_INDEX462=(Token)match(input,INLINE_INDEX,FOLLOW_INLINE_INDEX_in_insn_format3rmi_method5472); - INLINE_INDEX462_tree = (CommonTree)adaptor.create(INLINE_INDEX462); - adaptor.addChild(root_0, INLINE_INDEX462_tree); + INLINE_INDEX516=(Token)match(input,INLINE_INDEX,FOLLOW_INLINE_INDEX_in_insn_format3rmi_method5983); + INLINE_INDEX516_tree = (CommonTree)adaptor.create(INLINE_INDEX516); + adaptor.addChild(root_0, INLINE_INDEX516_tree); - throwOdexedInstructionException(input, (INSTRUCTION_FORMAT3rmi_METHOD457!=null?INSTRUCTION_FORMAT3rmi_METHOD457.getText():null)); + throwOdexedInstructionException(input, (INSTRUCTION_FORMAT3rmi_METHOD511!=null?INSTRUCTION_FORMAT3rmi_METHOD511.getText():null)); } @@ -13989,61 +15335,61 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format3rms_method" - // smaliParser.g:1074:1: insn_format3rms_method : INSTRUCTION_FORMAT3rms_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA VTABLE_INDEX ; + // smaliParser.g:1138:1: insn_format3rms_method : INSTRUCTION_FORMAT3rms_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA VTABLE_INDEX ; public final smaliParser.insn_format3rms_method_return insn_format3rms_method() throws RecognitionException { smaliParser.insn_format3rms_method_return retval = new smaliParser.insn_format3rms_method_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT3rms_METHOD463=null; - Token OPEN_BRACE464=null; - Token CLOSE_BRACE466=null; - Token COMMA467=null; - Token VTABLE_INDEX468=null; - ParserRuleReturnScope register_range465 =null; + Token INSTRUCTION_FORMAT3rms_METHOD517=null; + Token OPEN_BRACE518=null; + Token CLOSE_BRACE520=null; + Token COMMA521=null; + Token VTABLE_INDEX522=null; + ParserRuleReturnScope register_range519 =null; - CommonTree INSTRUCTION_FORMAT3rms_METHOD463_tree=null; - CommonTree OPEN_BRACE464_tree=null; - CommonTree CLOSE_BRACE466_tree=null; - CommonTree COMMA467_tree=null; - CommonTree VTABLE_INDEX468_tree=null; + CommonTree INSTRUCTION_FORMAT3rms_METHOD517_tree=null; + CommonTree OPEN_BRACE518_tree=null; + CommonTree CLOSE_BRACE520_tree=null; + CommonTree COMMA521_tree=null; + CommonTree VTABLE_INDEX522_tree=null; try { - // smaliParser.g:1075:3: ( INSTRUCTION_FORMAT3rms_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA VTABLE_INDEX ) - // smaliParser.g:1076:5: INSTRUCTION_FORMAT3rms_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA VTABLE_INDEX + // smaliParser.g:1139:3: ( INSTRUCTION_FORMAT3rms_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA VTABLE_INDEX ) + // smaliParser.g:1140:5: INSTRUCTION_FORMAT3rms_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA VTABLE_INDEX { root_0 = (CommonTree)adaptor.nil(); - INSTRUCTION_FORMAT3rms_METHOD463=(Token)match(input,INSTRUCTION_FORMAT3rms_METHOD,FOLLOW_INSTRUCTION_FORMAT3rms_METHOD_in_insn_format3rms_method5493); - INSTRUCTION_FORMAT3rms_METHOD463_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT3rms_METHOD463); - adaptor.addChild(root_0, INSTRUCTION_FORMAT3rms_METHOD463_tree); + INSTRUCTION_FORMAT3rms_METHOD517=(Token)match(input,INSTRUCTION_FORMAT3rms_METHOD,FOLLOW_INSTRUCTION_FORMAT3rms_METHOD_in_insn_format3rms_method6004); + INSTRUCTION_FORMAT3rms_METHOD517_tree = (CommonTree)adaptor.create(INSTRUCTION_FORMAT3rms_METHOD517); + adaptor.addChild(root_0, INSTRUCTION_FORMAT3rms_METHOD517_tree); - OPEN_BRACE464=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format3rms_method5495); - OPEN_BRACE464_tree = (CommonTree)adaptor.create(OPEN_BRACE464); - adaptor.addChild(root_0, OPEN_BRACE464_tree); + OPEN_BRACE518=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format3rms_method6006); + OPEN_BRACE518_tree = (CommonTree)adaptor.create(OPEN_BRACE518); + adaptor.addChild(root_0, OPEN_BRACE518_tree); - pushFollow(FOLLOW_register_range_in_insn_format3rms_method5497); - register_range465=register_range(); + pushFollow(FOLLOW_register_range_in_insn_format3rms_method6008); + register_range519=register_range(); state._fsp--; - adaptor.addChild(root_0, register_range465.getTree()); + adaptor.addChild(root_0, register_range519.getTree()); - CLOSE_BRACE466=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format3rms_method5499); - CLOSE_BRACE466_tree = (CommonTree)adaptor.create(CLOSE_BRACE466); - adaptor.addChild(root_0, CLOSE_BRACE466_tree); + CLOSE_BRACE520=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format3rms_method6010); + CLOSE_BRACE520_tree = (CommonTree)adaptor.create(CLOSE_BRACE520); + adaptor.addChild(root_0, CLOSE_BRACE520_tree); - COMMA467=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format3rms_method5501); - COMMA467_tree = (CommonTree)adaptor.create(COMMA467); - adaptor.addChild(root_0, COMMA467_tree); + COMMA521=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format3rms_method6012); + COMMA521_tree = (CommonTree)adaptor.create(COMMA521); + adaptor.addChild(root_0, COMMA521_tree); - VTABLE_INDEX468=(Token)match(input,VTABLE_INDEX,FOLLOW_VTABLE_INDEX_in_insn_format3rms_method5503); - VTABLE_INDEX468_tree = (CommonTree)adaptor.create(VTABLE_INDEX468); - adaptor.addChild(root_0, VTABLE_INDEX468_tree); + VTABLE_INDEX522=(Token)match(input,VTABLE_INDEX,FOLLOW_VTABLE_INDEX_in_insn_format3rms_method6014); + VTABLE_INDEX522_tree = (CommonTree)adaptor.create(VTABLE_INDEX522); + adaptor.addChild(root_0, VTABLE_INDEX522_tree); - throwOdexedInstructionException(input, (INSTRUCTION_FORMAT3rms_METHOD463!=null?INSTRUCTION_FORMAT3rms_METHOD463.getText():null)); + throwOdexedInstructionException(input, (INSTRUCTION_FORMAT3rms_METHOD517!=null?INSTRUCTION_FORMAT3rms_METHOD517.getText():null)); } @@ -14074,27 +15420,27 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format45cc_method" - // smaliParser.g:1081:1: insn_format45cc_method : INSTRUCTION_FORMAT45cc_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference COMMA method_prototype -> ^( I_STATEMENT_FORMAT45cc_METHOD[$start, \"I_STATEMENT_FORMAT45cc_METHOD\"] INSTRUCTION_FORMAT45cc_METHOD register_list method_reference method_prototype ) ; + // smaliParser.g:1145:1: insn_format45cc_method : INSTRUCTION_FORMAT45cc_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference COMMA method_prototype -> ^( I_STATEMENT_FORMAT45cc_METHOD[$start, \"I_STATEMENT_FORMAT45cc_METHOD\"] INSTRUCTION_FORMAT45cc_METHOD register_list method_reference method_prototype ) ; public final smaliParser.insn_format45cc_method_return insn_format45cc_method() throws RecognitionException { smaliParser.insn_format45cc_method_return retval = new smaliParser.insn_format45cc_method_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT45cc_METHOD469=null; - Token OPEN_BRACE470=null; - Token CLOSE_BRACE472=null; - Token COMMA473=null; - Token COMMA475=null; - ParserRuleReturnScope register_list471 =null; - ParserRuleReturnScope method_reference474 =null; - ParserRuleReturnScope method_prototype476 =null; - - CommonTree INSTRUCTION_FORMAT45cc_METHOD469_tree=null; - CommonTree OPEN_BRACE470_tree=null; - CommonTree CLOSE_BRACE472_tree=null; - CommonTree COMMA473_tree=null; - CommonTree COMMA475_tree=null; + Token INSTRUCTION_FORMAT45cc_METHOD523=null; + Token OPEN_BRACE524=null; + Token CLOSE_BRACE526=null; + Token COMMA527=null; + Token COMMA529=null; + ParserRuleReturnScope register_list525 =null; + ParserRuleReturnScope method_reference528 =null; + ParserRuleReturnScope method_prototype530 =null; + + CommonTree INSTRUCTION_FORMAT45cc_METHOD523_tree=null; + CommonTree OPEN_BRACE524_tree=null; + CommonTree CLOSE_BRACE526_tree=null; + CommonTree COMMA527_tree=null; + CommonTree COMMA529_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT45cc_METHOD=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT45cc_METHOD"); RewriteRuleTokenStream stream_OPEN_BRACE=new RewriteRuleTokenStream(adaptor,"token OPEN_BRACE"); @@ -14104,39 +15450,39 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_register_list=new RewriteRuleSubtreeStream(adaptor,"rule register_list"); try { - // smaliParser.g:1082:3: ( INSTRUCTION_FORMAT45cc_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference COMMA method_prototype -> ^( I_STATEMENT_FORMAT45cc_METHOD[$start, \"I_STATEMENT_FORMAT45cc_METHOD\"] INSTRUCTION_FORMAT45cc_METHOD register_list method_reference method_prototype ) ) - // smaliParser.g:1083:5: INSTRUCTION_FORMAT45cc_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference COMMA method_prototype + // smaliParser.g:1146:3: ( INSTRUCTION_FORMAT45cc_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference COMMA method_prototype -> ^( I_STATEMENT_FORMAT45cc_METHOD[$start, \"I_STATEMENT_FORMAT45cc_METHOD\"] INSTRUCTION_FORMAT45cc_METHOD register_list method_reference method_prototype ) ) + // smaliParser.g:1147:5: INSTRUCTION_FORMAT45cc_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA method_reference COMMA method_prototype { - INSTRUCTION_FORMAT45cc_METHOD469=(Token)match(input,INSTRUCTION_FORMAT45cc_METHOD,FOLLOW_INSTRUCTION_FORMAT45cc_METHOD_in_insn_format45cc_method5524); - stream_INSTRUCTION_FORMAT45cc_METHOD.add(INSTRUCTION_FORMAT45cc_METHOD469); + INSTRUCTION_FORMAT45cc_METHOD523=(Token)match(input,INSTRUCTION_FORMAT45cc_METHOD,FOLLOW_INSTRUCTION_FORMAT45cc_METHOD_in_insn_format45cc_method6035); + stream_INSTRUCTION_FORMAT45cc_METHOD.add(INSTRUCTION_FORMAT45cc_METHOD523); - OPEN_BRACE470=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format45cc_method5526); - stream_OPEN_BRACE.add(OPEN_BRACE470); + OPEN_BRACE524=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format45cc_method6037); + stream_OPEN_BRACE.add(OPEN_BRACE524); - pushFollow(FOLLOW_register_list_in_insn_format45cc_method5528); - register_list471=register_list(); + pushFollow(FOLLOW_register_list_in_insn_format45cc_method6039); + register_list525=register_list(); state._fsp--; - stream_register_list.add(register_list471.getTree()); - CLOSE_BRACE472=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format45cc_method5530); - stream_CLOSE_BRACE.add(CLOSE_BRACE472); + stream_register_list.add(register_list525.getTree()); + CLOSE_BRACE526=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format45cc_method6041); + stream_CLOSE_BRACE.add(CLOSE_BRACE526); - COMMA473=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format45cc_method5532); - stream_COMMA.add(COMMA473); + COMMA527=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format45cc_method6043); + stream_COMMA.add(COMMA527); - pushFollow(FOLLOW_method_reference_in_insn_format45cc_method5534); - method_reference474=method_reference(); + pushFollow(FOLLOW_method_reference_in_insn_format45cc_method6045); + method_reference528=method_reference(); state._fsp--; - stream_method_reference.add(method_reference474.getTree()); - COMMA475=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format45cc_method5536); - stream_COMMA.add(COMMA475); + stream_method_reference.add(method_reference528.getTree()); + COMMA529=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format45cc_method6047); + stream_COMMA.add(COMMA529); - pushFollow(FOLLOW_method_prototype_in_insn_format45cc_method5538); - method_prototype476=method_prototype(); + pushFollow(FOLLOW_method_prototype_in_insn_format45cc_method6049); + method_prototype530=method_prototype(); state._fsp--; - stream_method_prototype.add(method_prototype476.getTree()); + stream_method_prototype.add(method_prototype530.getTree()); // AST REWRITE // elements: method_reference, method_prototype, INSTRUCTION_FORMAT45cc_METHOD, register_list // token labels: @@ -14148,9 +15494,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 1084:5: -> ^( I_STATEMENT_FORMAT45cc_METHOD[$start, \"I_STATEMENT_FORMAT45cc_METHOD\"] INSTRUCTION_FORMAT45cc_METHOD register_list method_reference method_prototype ) + // 1148:5: -> ^( I_STATEMENT_FORMAT45cc_METHOD[$start, \"I_STATEMENT_FORMAT45cc_METHOD\"] INSTRUCTION_FORMAT45cc_METHOD register_list method_reference method_prototype ) { - // smaliParser.g:1084:8: ^( I_STATEMENT_FORMAT45cc_METHOD[$start, \"I_STATEMENT_FORMAT45cc_METHOD\"] INSTRUCTION_FORMAT45cc_METHOD register_list method_reference method_prototype ) + // smaliParser.g:1148:8: ^( I_STATEMENT_FORMAT45cc_METHOD[$start, \"I_STATEMENT_FORMAT45cc_METHOD\"] INSTRUCTION_FORMAT45cc_METHOD register_list method_reference method_prototype ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT45cc_METHOD, (retval.start), "I_STATEMENT_FORMAT45cc_METHOD"), root_1); @@ -14195,27 +15541,27 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format4rcc_method" - // smaliParser.g:1086:1: insn_format4rcc_method : INSTRUCTION_FORMAT4rcc_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA method_reference COMMA method_prototype -> ^( I_STATEMENT_FORMAT4rcc_METHOD[$start, \"I_STATEMENT_FORMAT4rcc_METHOD\"] INSTRUCTION_FORMAT4rcc_METHOD register_range method_reference method_prototype ) ; + // smaliParser.g:1150:1: insn_format4rcc_method : INSTRUCTION_FORMAT4rcc_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA method_reference COMMA method_prototype -> ^( I_STATEMENT_FORMAT4rcc_METHOD[$start, \"I_STATEMENT_FORMAT4rcc_METHOD\"] INSTRUCTION_FORMAT4rcc_METHOD register_range method_reference method_prototype ) ; public final smaliParser.insn_format4rcc_method_return insn_format4rcc_method() throws RecognitionException { smaliParser.insn_format4rcc_method_return retval = new smaliParser.insn_format4rcc_method_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT4rcc_METHOD477=null; - Token OPEN_BRACE478=null; - Token CLOSE_BRACE480=null; - Token COMMA481=null; - Token COMMA483=null; - ParserRuleReturnScope register_range479 =null; - ParserRuleReturnScope method_reference482 =null; - ParserRuleReturnScope method_prototype484 =null; - - CommonTree INSTRUCTION_FORMAT4rcc_METHOD477_tree=null; - CommonTree OPEN_BRACE478_tree=null; - CommonTree CLOSE_BRACE480_tree=null; - CommonTree COMMA481_tree=null; - CommonTree COMMA483_tree=null; + Token INSTRUCTION_FORMAT4rcc_METHOD531=null; + Token OPEN_BRACE532=null; + Token CLOSE_BRACE534=null; + Token COMMA535=null; + Token COMMA537=null; + ParserRuleReturnScope register_range533 =null; + ParserRuleReturnScope method_reference536 =null; + ParserRuleReturnScope method_prototype538 =null; + + CommonTree INSTRUCTION_FORMAT4rcc_METHOD531_tree=null; + CommonTree OPEN_BRACE532_tree=null; + CommonTree CLOSE_BRACE534_tree=null; + CommonTree COMMA535_tree=null; + CommonTree COMMA537_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_OPEN_BRACE=new RewriteRuleTokenStream(adaptor,"token OPEN_BRACE"); RewriteRuleTokenStream stream_CLOSE_BRACE=new RewriteRuleTokenStream(adaptor,"token CLOSE_BRACE"); @@ -14225,41 +15571,41 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_register_range=new RewriteRuleSubtreeStream(adaptor,"rule register_range"); try { - // smaliParser.g:1087:3: ( INSTRUCTION_FORMAT4rcc_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA method_reference COMMA method_prototype -> ^( I_STATEMENT_FORMAT4rcc_METHOD[$start, \"I_STATEMENT_FORMAT4rcc_METHOD\"] INSTRUCTION_FORMAT4rcc_METHOD register_range method_reference method_prototype ) ) - // smaliParser.g:1088:5: INSTRUCTION_FORMAT4rcc_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA method_reference COMMA method_prototype + // smaliParser.g:1151:3: ( INSTRUCTION_FORMAT4rcc_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA method_reference COMMA method_prototype -> ^( I_STATEMENT_FORMAT4rcc_METHOD[$start, \"I_STATEMENT_FORMAT4rcc_METHOD\"] INSTRUCTION_FORMAT4rcc_METHOD register_range method_reference method_prototype ) ) + // smaliParser.g:1152:5: INSTRUCTION_FORMAT4rcc_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA method_reference COMMA method_prototype { - INSTRUCTION_FORMAT4rcc_METHOD477=(Token)match(input,INSTRUCTION_FORMAT4rcc_METHOD,FOLLOW_INSTRUCTION_FORMAT4rcc_METHOD_in_insn_format4rcc_method5572); - stream_INSTRUCTION_FORMAT4rcc_METHOD.add(INSTRUCTION_FORMAT4rcc_METHOD477); + INSTRUCTION_FORMAT4rcc_METHOD531=(Token)match(input,INSTRUCTION_FORMAT4rcc_METHOD,FOLLOW_INSTRUCTION_FORMAT4rcc_METHOD_in_insn_format4rcc_method6083); + stream_INSTRUCTION_FORMAT4rcc_METHOD.add(INSTRUCTION_FORMAT4rcc_METHOD531); - OPEN_BRACE478=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format4rcc_method5574); - stream_OPEN_BRACE.add(OPEN_BRACE478); + OPEN_BRACE532=(Token)match(input,OPEN_BRACE,FOLLOW_OPEN_BRACE_in_insn_format4rcc_method6085); + stream_OPEN_BRACE.add(OPEN_BRACE532); - pushFollow(FOLLOW_register_range_in_insn_format4rcc_method5576); - register_range479=register_range(); + pushFollow(FOLLOW_register_range_in_insn_format4rcc_method6087); + register_range533=register_range(); state._fsp--; - stream_register_range.add(register_range479.getTree()); - CLOSE_BRACE480=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format4rcc_method5578); - stream_CLOSE_BRACE.add(CLOSE_BRACE480); + stream_register_range.add(register_range533.getTree()); + CLOSE_BRACE534=(Token)match(input,CLOSE_BRACE,FOLLOW_CLOSE_BRACE_in_insn_format4rcc_method6089); + stream_CLOSE_BRACE.add(CLOSE_BRACE534); - COMMA481=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format4rcc_method5580); - stream_COMMA.add(COMMA481); + COMMA535=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format4rcc_method6091); + stream_COMMA.add(COMMA535); - pushFollow(FOLLOW_method_reference_in_insn_format4rcc_method5582); - method_reference482=method_reference(); + pushFollow(FOLLOW_method_reference_in_insn_format4rcc_method6093); + method_reference536=method_reference(); state._fsp--; - stream_method_reference.add(method_reference482.getTree()); - COMMA483=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format4rcc_method5584); - stream_COMMA.add(COMMA483); + stream_method_reference.add(method_reference536.getTree()); + COMMA537=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format4rcc_method6095); + stream_COMMA.add(COMMA537); - pushFollow(FOLLOW_method_prototype_in_insn_format4rcc_method5586); - method_prototype484=method_prototype(); + pushFollow(FOLLOW_method_prototype_in_insn_format4rcc_method6097); + method_prototype538=method_prototype(); state._fsp--; - stream_method_prototype.add(method_prototype484.getTree()); + stream_method_prototype.add(method_prototype538.getTree()); // AST REWRITE - // elements: register_range, INSTRUCTION_FORMAT4rcc_METHOD, method_reference, method_prototype + // elements: INSTRUCTION_FORMAT4rcc_METHOD, method_prototype, method_reference, register_range // token labels: // rule labels: retval // token list labels: @@ -14269,9 +15615,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 1089:5: -> ^( I_STATEMENT_FORMAT4rcc_METHOD[$start, \"I_STATEMENT_FORMAT4rcc_METHOD\"] INSTRUCTION_FORMAT4rcc_METHOD register_range method_reference method_prototype ) + // 1153:5: -> ^( I_STATEMENT_FORMAT4rcc_METHOD[$start, \"I_STATEMENT_FORMAT4rcc_METHOD\"] INSTRUCTION_FORMAT4rcc_METHOD register_range method_reference method_prototype ) { - // smaliParser.g:1089:8: ^( I_STATEMENT_FORMAT4rcc_METHOD[$start, \"I_STATEMENT_FORMAT4rcc_METHOD\"] INSTRUCTION_FORMAT4rcc_METHOD register_range method_reference method_prototype ) + // smaliParser.g:1153:8: ^( I_STATEMENT_FORMAT4rcc_METHOD[$start, \"I_STATEMENT_FORMAT4rcc_METHOD\"] INSTRUCTION_FORMAT4rcc_METHOD register_range method_reference method_prototype ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT4rcc_METHOD, (retval.start), "I_STATEMENT_FORMAT4rcc_METHOD"), root_1); @@ -14316,46 +15662,46 @@ public class smaliParser extends Parser { // $ANTLR start "insn_format51l" - // smaliParser.g:1091:1: insn_format51l : INSTRUCTION_FORMAT51l REGISTER COMMA fixed_literal -> ^( I_STATEMENT_FORMAT51l[$start, \"I_STATEMENT_FORMAT51l\"] INSTRUCTION_FORMAT51l REGISTER fixed_literal ) ; + // smaliParser.g:1155:1: insn_format51l : INSTRUCTION_FORMAT51l REGISTER COMMA fixed_literal -> ^( I_STATEMENT_FORMAT51l[$start, \"I_STATEMENT_FORMAT51l\"] INSTRUCTION_FORMAT51l REGISTER fixed_literal ) ; public final smaliParser.insn_format51l_return insn_format51l() throws RecognitionException { smaliParser.insn_format51l_return retval = new smaliParser.insn_format51l_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token INSTRUCTION_FORMAT51l485=null; - Token REGISTER486=null; - Token COMMA487=null; - ParserRuleReturnScope fixed_literal488 =null; + Token INSTRUCTION_FORMAT51l539=null; + Token REGISTER540=null; + Token COMMA541=null; + ParserRuleReturnScope fixed_literal542 =null; - CommonTree INSTRUCTION_FORMAT51l485_tree=null; - CommonTree REGISTER486_tree=null; - CommonTree COMMA487_tree=null; + CommonTree INSTRUCTION_FORMAT51l539_tree=null; + CommonTree REGISTER540_tree=null; + CommonTree COMMA541_tree=null; RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_REGISTER=new RewriteRuleTokenStream(adaptor,"token REGISTER"); RewriteRuleTokenStream stream_INSTRUCTION_FORMAT51l=new RewriteRuleTokenStream(adaptor,"token INSTRUCTION_FORMAT51l"); RewriteRuleSubtreeStream stream_fixed_literal=new RewriteRuleSubtreeStream(adaptor,"rule fixed_literal"); try { - // smaliParser.g:1092:3: ( INSTRUCTION_FORMAT51l REGISTER COMMA fixed_literal -> ^( I_STATEMENT_FORMAT51l[$start, \"I_STATEMENT_FORMAT51l\"] INSTRUCTION_FORMAT51l REGISTER fixed_literal ) ) - // smaliParser.g:1093:5: INSTRUCTION_FORMAT51l REGISTER COMMA fixed_literal + // smaliParser.g:1156:3: ( INSTRUCTION_FORMAT51l REGISTER COMMA fixed_literal -> ^( I_STATEMENT_FORMAT51l[$start, \"I_STATEMENT_FORMAT51l\"] INSTRUCTION_FORMAT51l REGISTER fixed_literal ) ) + // smaliParser.g:1157:5: INSTRUCTION_FORMAT51l REGISTER COMMA fixed_literal { - INSTRUCTION_FORMAT51l485=(Token)match(input,INSTRUCTION_FORMAT51l,FOLLOW_INSTRUCTION_FORMAT51l_in_insn_format51l5620); - stream_INSTRUCTION_FORMAT51l.add(INSTRUCTION_FORMAT51l485); + INSTRUCTION_FORMAT51l539=(Token)match(input,INSTRUCTION_FORMAT51l,FOLLOW_INSTRUCTION_FORMAT51l_in_insn_format51l6131); + stream_INSTRUCTION_FORMAT51l.add(INSTRUCTION_FORMAT51l539); - REGISTER486=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format51l5622); - stream_REGISTER.add(REGISTER486); + REGISTER540=(Token)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format51l6133); + stream_REGISTER.add(REGISTER540); - COMMA487=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format51l5624); - stream_COMMA.add(COMMA487); + COMMA541=(Token)match(input,COMMA,FOLLOW_COMMA_in_insn_format51l6135); + stream_COMMA.add(COMMA541); - pushFollow(FOLLOW_fixed_literal_in_insn_format51l5626); - fixed_literal488=fixed_literal(); + pushFollow(FOLLOW_fixed_literal_in_insn_format51l6137); + fixed_literal542=fixed_literal(); state._fsp--; - stream_fixed_literal.add(fixed_literal488.getTree()); + stream_fixed_literal.add(fixed_literal542.getTree()); // AST REWRITE - // elements: REGISTER, INSTRUCTION_FORMAT51l, fixed_literal + // elements: INSTRUCTION_FORMAT51l, fixed_literal, REGISTER // token labels: // rule labels: retval // token list labels: @@ -14365,9 +15711,9 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 1094:5: -> ^( I_STATEMENT_FORMAT51l[$start, \"I_STATEMENT_FORMAT51l\"] INSTRUCTION_FORMAT51l REGISTER fixed_literal ) + // 1158:5: -> ^( I_STATEMENT_FORMAT51l[$start, \"I_STATEMENT_FORMAT51l\"] INSTRUCTION_FORMAT51l REGISTER fixed_literal ) { - // smaliParser.g:1094:8: ^( I_STATEMENT_FORMAT51l[$start, \"I_STATEMENT_FORMAT51l\"] INSTRUCTION_FORMAT51l REGISTER fixed_literal ) + // smaliParser.g:1158:8: ^( I_STATEMENT_FORMAT51l[$start, \"I_STATEMENT_FORMAT51l\"] INSTRUCTION_FORMAT51l REGISTER fixed_literal ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_FORMAT51l, (retval.start), "I_STATEMENT_FORMAT51l"), root_1); @@ -14411,71 +15757,71 @@ public class smaliParser extends Parser { // $ANTLR start "insn_array_data_directive" - // smaliParser.g:1096:1: insn_array_data_directive : ARRAY_DATA_DIRECTIVE parsed_integer_literal ( fixed_literal )* END_ARRAY_DATA_DIRECTIVE -> ^( I_STATEMENT_ARRAY_DATA[$start, \"I_STATEMENT_ARRAY_DATA\"] ^( I_ARRAY_ELEMENT_SIZE parsed_integer_literal ) ^( I_ARRAY_ELEMENTS ( fixed_literal )* ) ) ; + // smaliParser.g:1160:1: insn_array_data_directive : ARRAY_DATA_DIRECTIVE parsed_integer_literal ( fixed_literal )* END_ARRAY_DATA_DIRECTIVE -> ^( I_STATEMENT_ARRAY_DATA[$start, \"I_STATEMENT_ARRAY_DATA\"] ^( I_ARRAY_ELEMENT_SIZE parsed_integer_literal ) ^( I_ARRAY_ELEMENTS ( fixed_literal )* ) ) ; public final smaliParser.insn_array_data_directive_return insn_array_data_directive() throws RecognitionException { smaliParser.insn_array_data_directive_return retval = new smaliParser.insn_array_data_directive_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token ARRAY_DATA_DIRECTIVE489=null; - Token END_ARRAY_DATA_DIRECTIVE492=null; - ParserRuleReturnScope parsed_integer_literal490 =null; - ParserRuleReturnScope fixed_literal491 =null; + Token ARRAY_DATA_DIRECTIVE543=null; + Token END_ARRAY_DATA_DIRECTIVE546=null; + ParserRuleReturnScope parsed_integer_literal544 =null; + ParserRuleReturnScope fixed_literal545 =null; - CommonTree ARRAY_DATA_DIRECTIVE489_tree=null; - CommonTree END_ARRAY_DATA_DIRECTIVE492_tree=null; + CommonTree ARRAY_DATA_DIRECTIVE543_tree=null; + CommonTree END_ARRAY_DATA_DIRECTIVE546_tree=null; RewriteRuleTokenStream stream_END_ARRAY_DATA_DIRECTIVE=new RewriteRuleTokenStream(adaptor,"token END_ARRAY_DATA_DIRECTIVE"); RewriteRuleTokenStream stream_ARRAY_DATA_DIRECTIVE=new RewriteRuleTokenStream(adaptor,"token ARRAY_DATA_DIRECTIVE"); RewriteRuleSubtreeStream stream_parsed_integer_literal=new RewriteRuleSubtreeStream(adaptor,"rule parsed_integer_literal"); RewriteRuleSubtreeStream stream_fixed_literal=new RewriteRuleSubtreeStream(adaptor,"rule fixed_literal"); try { - // smaliParser.g:1097:3: ( ARRAY_DATA_DIRECTIVE parsed_integer_literal ( fixed_literal )* END_ARRAY_DATA_DIRECTIVE -> ^( I_STATEMENT_ARRAY_DATA[$start, \"I_STATEMENT_ARRAY_DATA\"] ^( I_ARRAY_ELEMENT_SIZE parsed_integer_literal ) ^( I_ARRAY_ELEMENTS ( fixed_literal )* ) ) ) - // smaliParser.g:1097:5: ARRAY_DATA_DIRECTIVE parsed_integer_literal ( fixed_literal )* END_ARRAY_DATA_DIRECTIVE + // smaliParser.g:1161:3: ( ARRAY_DATA_DIRECTIVE parsed_integer_literal ( fixed_literal )* END_ARRAY_DATA_DIRECTIVE -> ^( I_STATEMENT_ARRAY_DATA[$start, \"I_STATEMENT_ARRAY_DATA\"] ^( I_ARRAY_ELEMENT_SIZE parsed_integer_literal ) ^( I_ARRAY_ELEMENTS ( fixed_literal )* ) ) ) + // smaliParser.g:1161:5: ARRAY_DATA_DIRECTIVE parsed_integer_literal ( fixed_literal )* END_ARRAY_DATA_DIRECTIVE { - ARRAY_DATA_DIRECTIVE489=(Token)match(input,ARRAY_DATA_DIRECTIVE,FOLLOW_ARRAY_DATA_DIRECTIVE_in_insn_array_data_directive5653); - stream_ARRAY_DATA_DIRECTIVE.add(ARRAY_DATA_DIRECTIVE489); + ARRAY_DATA_DIRECTIVE543=(Token)match(input,ARRAY_DATA_DIRECTIVE,FOLLOW_ARRAY_DATA_DIRECTIVE_in_insn_array_data_directive6164); + stream_ARRAY_DATA_DIRECTIVE.add(ARRAY_DATA_DIRECTIVE543); - pushFollow(FOLLOW_parsed_integer_literal_in_insn_array_data_directive5659); - parsed_integer_literal490=parsed_integer_literal(); + pushFollow(FOLLOW_parsed_integer_literal_in_insn_array_data_directive6170); + parsed_integer_literal544=parsed_integer_literal(); state._fsp--; - stream_parsed_integer_literal.add(parsed_integer_literal490.getTree()); + stream_parsed_integer_literal.add(parsed_integer_literal544.getTree()); - int elementWidth = (parsed_integer_literal490!=null?((smaliParser.parsed_integer_literal_return)parsed_integer_literal490).value:0); + int elementWidth = (parsed_integer_literal544!=null?((smaliParser.parsed_integer_literal_return)parsed_integer_literal544).value:0); if (elementWidth != 4 && elementWidth != 8 && elementWidth != 1 && elementWidth != 2) { throw new SemanticException(input, (retval.start), "Invalid element width: %d. Must be 1, 2, 4 or 8", elementWidth); } - // smaliParser.g:1105:5: ( fixed_literal )* - loop52: + // smaliParser.g:1169:5: ( fixed_literal )* + loop55: while (true) { - int alt52=2; - int LA52_0 = input.LA(1); - if ( ((LA52_0 >= BOOL_LITERAL && LA52_0 <= BYTE_LITERAL)||LA52_0==CHAR_LITERAL||(LA52_0 >= DOUBLE_LITERAL && LA52_0 <= DOUBLE_LITERAL_OR_ID)||(LA52_0 >= FLOAT_LITERAL && LA52_0 <= FLOAT_LITERAL_OR_ID)||LA52_0==LONG_LITERAL||LA52_0==NEGATIVE_INTEGER_LITERAL||LA52_0==POSITIVE_INTEGER_LITERAL||LA52_0==SHORT_LITERAL) ) { - alt52=1; + int alt55=2; + int LA55_0 = input.LA(1); + if ( ((LA55_0 >= BOOL_LITERAL && LA55_0 <= BYTE_LITERAL)||LA55_0==CHAR_LITERAL||(LA55_0 >= DOUBLE_LITERAL && LA55_0 <= DOUBLE_LITERAL_OR_ID)||(LA55_0 >= FLOAT_LITERAL && LA55_0 <= FLOAT_LITERAL_OR_ID)||LA55_0==LONG_LITERAL||LA55_0==NEGATIVE_INTEGER_LITERAL||LA55_0==POSITIVE_INTEGER_LITERAL||LA55_0==SHORT_LITERAL) ) { + alt55=1; } - switch (alt52) { + switch (alt55) { case 1 : - // smaliParser.g:1105:5: fixed_literal + // smaliParser.g:1169:5: fixed_literal { - pushFollow(FOLLOW_fixed_literal_in_insn_array_data_directive5671); - fixed_literal491=fixed_literal(); + pushFollow(FOLLOW_fixed_literal_in_insn_array_data_directive6182); + fixed_literal545=fixed_literal(); state._fsp--; - stream_fixed_literal.add(fixed_literal491.getTree()); + stream_fixed_literal.add(fixed_literal545.getTree()); } break; default : - break loop52; + break loop55; } } - END_ARRAY_DATA_DIRECTIVE492=(Token)match(input,END_ARRAY_DATA_DIRECTIVE,FOLLOW_END_ARRAY_DATA_DIRECTIVE_in_insn_array_data_directive5674); - stream_END_ARRAY_DATA_DIRECTIVE.add(END_ARRAY_DATA_DIRECTIVE492); + END_ARRAY_DATA_DIRECTIVE546=(Token)match(input,END_ARRAY_DATA_DIRECTIVE,FOLLOW_END_ARRAY_DATA_DIRECTIVE_in_insn_array_data_directive6185); + stream_END_ARRAY_DATA_DIRECTIVE.add(END_ARRAY_DATA_DIRECTIVE546); // AST REWRITE // elements: parsed_integer_literal, fixed_literal @@ -14488,13 +15834,13 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 1107:5: -> ^( I_STATEMENT_ARRAY_DATA[$start, \"I_STATEMENT_ARRAY_DATA\"] ^( I_ARRAY_ELEMENT_SIZE parsed_integer_literal ) ^( I_ARRAY_ELEMENTS ( fixed_literal )* ) ) + // 1171:5: -> ^( I_STATEMENT_ARRAY_DATA[$start, \"I_STATEMENT_ARRAY_DATA\"] ^( I_ARRAY_ELEMENT_SIZE parsed_integer_literal ) ^( I_ARRAY_ELEMENTS ( fixed_literal )* ) ) { - // smaliParser.g:1107:8: ^( I_STATEMENT_ARRAY_DATA[$start, \"I_STATEMENT_ARRAY_DATA\"] ^( I_ARRAY_ELEMENT_SIZE parsed_integer_literal ) ^( I_ARRAY_ELEMENTS ( fixed_literal )* ) ) + // smaliParser.g:1171:8: ^( I_STATEMENT_ARRAY_DATA[$start, \"I_STATEMENT_ARRAY_DATA\"] ^( I_ARRAY_ELEMENT_SIZE parsed_integer_literal ) ^( I_ARRAY_ELEMENTS ( fixed_literal )* ) ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_ARRAY_DATA, (retval.start), "I_STATEMENT_ARRAY_DATA"), root_1); - // smaliParser.g:1107:67: ^( I_ARRAY_ELEMENT_SIZE parsed_integer_literal ) + // smaliParser.g:1171:67: ^( I_ARRAY_ELEMENT_SIZE parsed_integer_literal ) { CommonTree root_2 = (CommonTree)adaptor.nil(); root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_ARRAY_ELEMENT_SIZE, "I_ARRAY_ELEMENT_SIZE"), root_2); @@ -14502,11 +15848,11 @@ public class smaliParser extends Parser { adaptor.addChild(root_1, root_2); } - // smaliParser.g:1108:8: ^( I_ARRAY_ELEMENTS ( fixed_literal )* ) + // smaliParser.g:1172:8: ^( I_ARRAY_ELEMENTS ( fixed_literal )* ) { CommonTree root_2 = (CommonTree)adaptor.nil(); root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_ARRAY_ELEMENTS, "I_ARRAY_ELEMENTS"), root_2); - // smaliParser.g:1108:27: ( fixed_literal )* + // smaliParser.g:1172:27: ( fixed_literal )* while ( stream_fixed_literal.hasNext() ) { adaptor.addChild(root_2, stream_fixed_literal.nextTree()); } @@ -14552,68 +15898,68 @@ public class smaliParser extends Parser { // $ANTLR start "insn_packed_switch_directive" - // smaliParser.g:1110:1: insn_packed_switch_directive : PACKED_SWITCH_DIRECTIVE fixed_32bit_literal ( label_ref )* END_PACKED_SWITCH_DIRECTIVE -> ^( I_STATEMENT_PACKED_SWITCH[$start, \"I_STATEMENT_PACKED_SWITCH\"] ^( I_PACKED_SWITCH_START_KEY[$start, \"I_PACKED_SWITCH_START_KEY\"] fixed_32bit_literal ) ^( I_PACKED_SWITCH_ELEMENTS[$start, \"I_PACKED_SWITCH_ELEMENTS\"] ( label_ref )* ) ) ; + // smaliParser.g:1174:1: insn_packed_switch_directive : PACKED_SWITCH_DIRECTIVE fixed_32bit_literal ( label_ref )* END_PACKED_SWITCH_DIRECTIVE -> ^( I_STATEMENT_PACKED_SWITCH[$start, \"I_STATEMENT_PACKED_SWITCH\"] ^( I_PACKED_SWITCH_START_KEY[$start, \"I_PACKED_SWITCH_START_KEY\"] fixed_32bit_literal ) ^( I_PACKED_SWITCH_ELEMENTS[$start, \"I_PACKED_SWITCH_ELEMENTS\"] ( label_ref )* ) ) ; public final smaliParser.insn_packed_switch_directive_return insn_packed_switch_directive() throws RecognitionException { smaliParser.insn_packed_switch_directive_return retval = new smaliParser.insn_packed_switch_directive_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token PACKED_SWITCH_DIRECTIVE493=null; - Token END_PACKED_SWITCH_DIRECTIVE496=null; - ParserRuleReturnScope fixed_32bit_literal494 =null; - ParserRuleReturnScope label_ref495 =null; + Token PACKED_SWITCH_DIRECTIVE547=null; + Token END_PACKED_SWITCH_DIRECTIVE550=null; + ParserRuleReturnScope fixed_32bit_literal548 =null; + ParserRuleReturnScope label_ref549 =null; - CommonTree PACKED_SWITCH_DIRECTIVE493_tree=null; - CommonTree END_PACKED_SWITCH_DIRECTIVE496_tree=null; + CommonTree PACKED_SWITCH_DIRECTIVE547_tree=null; + CommonTree END_PACKED_SWITCH_DIRECTIVE550_tree=null; RewriteRuleTokenStream stream_END_PACKED_SWITCH_DIRECTIVE=new RewriteRuleTokenStream(adaptor,"token END_PACKED_SWITCH_DIRECTIVE"); RewriteRuleTokenStream stream_PACKED_SWITCH_DIRECTIVE=new RewriteRuleTokenStream(adaptor,"token PACKED_SWITCH_DIRECTIVE"); RewriteRuleSubtreeStream stream_fixed_32bit_literal=new RewriteRuleSubtreeStream(adaptor,"rule fixed_32bit_literal"); RewriteRuleSubtreeStream stream_label_ref=new RewriteRuleSubtreeStream(adaptor,"rule label_ref"); try { - // smaliParser.g:1111:5: ( PACKED_SWITCH_DIRECTIVE fixed_32bit_literal ( label_ref )* END_PACKED_SWITCH_DIRECTIVE -> ^( I_STATEMENT_PACKED_SWITCH[$start, \"I_STATEMENT_PACKED_SWITCH\"] ^( I_PACKED_SWITCH_START_KEY[$start, \"I_PACKED_SWITCH_START_KEY\"] fixed_32bit_literal ) ^( I_PACKED_SWITCH_ELEMENTS[$start, \"I_PACKED_SWITCH_ELEMENTS\"] ( label_ref )* ) ) ) - // smaliParser.g:1111:9: PACKED_SWITCH_DIRECTIVE fixed_32bit_literal ( label_ref )* END_PACKED_SWITCH_DIRECTIVE + // smaliParser.g:1175:5: ( PACKED_SWITCH_DIRECTIVE fixed_32bit_literal ( label_ref )* END_PACKED_SWITCH_DIRECTIVE -> ^( I_STATEMENT_PACKED_SWITCH[$start, \"I_STATEMENT_PACKED_SWITCH\"] ^( I_PACKED_SWITCH_START_KEY[$start, \"I_PACKED_SWITCH_START_KEY\"] fixed_32bit_literal ) ^( I_PACKED_SWITCH_ELEMENTS[$start, \"I_PACKED_SWITCH_ELEMENTS\"] ( label_ref )* ) ) ) + // smaliParser.g:1175:9: PACKED_SWITCH_DIRECTIVE fixed_32bit_literal ( label_ref )* END_PACKED_SWITCH_DIRECTIVE { - PACKED_SWITCH_DIRECTIVE493=(Token)match(input,PACKED_SWITCH_DIRECTIVE,FOLLOW_PACKED_SWITCH_DIRECTIVE_in_insn_packed_switch_directive5720); - stream_PACKED_SWITCH_DIRECTIVE.add(PACKED_SWITCH_DIRECTIVE493); + PACKED_SWITCH_DIRECTIVE547=(Token)match(input,PACKED_SWITCH_DIRECTIVE,FOLLOW_PACKED_SWITCH_DIRECTIVE_in_insn_packed_switch_directive6231); + stream_PACKED_SWITCH_DIRECTIVE.add(PACKED_SWITCH_DIRECTIVE547); - pushFollow(FOLLOW_fixed_32bit_literal_in_insn_packed_switch_directive5726); - fixed_32bit_literal494=fixed_32bit_literal(); + pushFollow(FOLLOW_fixed_32bit_literal_in_insn_packed_switch_directive6237); + fixed_32bit_literal548=fixed_32bit_literal(); state._fsp--; - stream_fixed_32bit_literal.add(fixed_32bit_literal494.getTree()); - // smaliParser.g:1113:5: ( label_ref )* - loop53: + stream_fixed_32bit_literal.add(fixed_32bit_literal548.getTree()); + // smaliParser.g:1177:5: ( label_ref )* + loop56: while (true) { - int alt53=2; - int LA53_0 = input.LA(1); - if ( (LA53_0==COLON) ) { - alt53=1; + int alt56=2; + int LA56_0 = input.LA(1); + if ( (LA56_0==COLON) ) { + alt56=1; } - switch (alt53) { + switch (alt56) { case 1 : - // smaliParser.g:1113:5: label_ref + // smaliParser.g:1177:5: label_ref { - pushFollow(FOLLOW_label_ref_in_insn_packed_switch_directive5732); - label_ref495=label_ref(); + pushFollow(FOLLOW_label_ref_in_insn_packed_switch_directive6243); + label_ref549=label_ref(); state._fsp--; - stream_label_ref.add(label_ref495.getTree()); + stream_label_ref.add(label_ref549.getTree()); } break; default : - break loop53; + break loop56; } } - END_PACKED_SWITCH_DIRECTIVE496=(Token)match(input,END_PACKED_SWITCH_DIRECTIVE,FOLLOW_END_PACKED_SWITCH_DIRECTIVE_in_insn_packed_switch_directive5739); - stream_END_PACKED_SWITCH_DIRECTIVE.add(END_PACKED_SWITCH_DIRECTIVE496); + END_PACKED_SWITCH_DIRECTIVE550=(Token)match(input,END_PACKED_SWITCH_DIRECTIVE,FOLLOW_END_PACKED_SWITCH_DIRECTIVE_in_insn_packed_switch_directive6250); + stream_END_PACKED_SWITCH_DIRECTIVE.add(END_PACKED_SWITCH_DIRECTIVE550); // AST REWRITE - // elements: fixed_32bit_literal, label_ref + // elements: label_ref, fixed_32bit_literal // token labels: // rule labels: retval // token list labels: @@ -14623,13 +15969,13 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 1115:5: -> ^( I_STATEMENT_PACKED_SWITCH[$start, \"I_STATEMENT_PACKED_SWITCH\"] ^( I_PACKED_SWITCH_START_KEY[$start, \"I_PACKED_SWITCH_START_KEY\"] fixed_32bit_literal ) ^( I_PACKED_SWITCH_ELEMENTS[$start, \"I_PACKED_SWITCH_ELEMENTS\"] ( label_ref )* ) ) + // 1179:5: -> ^( I_STATEMENT_PACKED_SWITCH[$start, \"I_STATEMENT_PACKED_SWITCH\"] ^( I_PACKED_SWITCH_START_KEY[$start, \"I_PACKED_SWITCH_START_KEY\"] fixed_32bit_literal ) ^( I_PACKED_SWITCH_ELEMENTS[$start, \"I_PACKED_SWITCH_ELEMENTS\"] ( label_ref )* ) ) { - // smaliParser.g:1115:8: ^( I_STATEMENT_PACKED_SWITCH[$start, \"I_STATEMENT_PACKED_SWITCH\"] ^( I_PACKED_SWITCH_START_KEY[$start, \"I_PACKED_SWITCH_START_KEY\"] fixed_32bit_literal ) ^( I_PACKED_SWITCH_ELEMENTS[$start, \"I_PACKED_SWITCH_ELEMENTS\"] ( label_ref )* ) ) + // smaliParser.g:1179:8: ^( I_STATEMENT_PACKED_SWITCH[$start, \"I_STATEMENT_PACKED_SWITCH\"] ^( I_PACKED_SWITCH_START_KEY[$start, \"I_PACKED_SWITCH_START_KEY\"] fixed_32bit_literal ) ^( I_PACKED_SWITCH_ELEMENTS[$start, \"I_PACKED_SWITCH_ELEMENTS\"] ( label_ref )* ) ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_PACKED_SWITCH, (retval.start), "I_STATEMENT_PACKED_SWITCH"), root_1); - // smaliParser.g:1116:10: ^( I_PACKED_SWITCH_START_KEY[$start, \"I_PACKED_SWITCH_START_KEY\"] fixed_32bit_literal ) + // smaliParser.g:1180:10: ^( I_PACKED_SWITCH_START_KEY[$start, \"I_PACKED_SWITCH_START_KEY\"] fixed_32bit_literal ) { CommonTree root_2 = (CommonTree)adaptor.nil(); root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_PACKED_SWITCH_START_KEY, (retval.start), "I_PACKED_SWITCH_START_KEY"), root_2); @@ -14637,11 +15983,11 @@ public class smaliParser extends Parser { adaptor.addChild(root_1, root_2); } - // smaliParser.g:1117:10: ^( I_PACKED_SWITCH_ELEMENTS[$start, \"I_PACKED_SWITCH_ELEMENTS\"] ( label_ref )* ) + // smaliParser.g:1181:10: ^( I_PACKED_SWITCH_ELEMENTS[$start, \"I_PACKED_SWITCH_ELEMENTS\"] ( label_ref )* ) { CommonTree root_2 = (CommonTree)adaptor.nil(); root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_PACKED_SWITCH_ELEMENTS, (retval.start), "I_PACKED_SWITCH_ELEMENTS"), root_2); - // smaliParser.g:1118:11: ( label_ref )* + // smaliParser.g:1182:11: ( label_ref )* while ( stream_label_ref.hasNext() ) { adaptor.addChild(root_2, stream_label_ref.nextTree()); } @@ -14687,22 +16033,22 @@ public class smaliParser extends Parser { // $ANTLR start "insn_sparse_switch_directive" - // smaliParser.g:1121:1: insn_sparse_switch_directive : SPARSE_SWITCH_DIRECTIVE ( fixed_32bit_literal ARROW label_ref )* END_SPARSE_SWITCH_DIRECTIVE -> ^( I_STATEMENT_SPARSE_SWITCH[$start, \"I_STATEMENT_SPARSE_SWITCH\"] ^( I_SPARSE_SWITCH_ELEMENTS[$start, \"I_SPARSE_SWITCH_ELEMENTS\"] ( fixed_32bit_literal label_ref )* ) ) ; + // smaliParser.g:1185:1: insn_sparse_switch_directive : SPARSE_SWITCH_DIRECTIVE ( fixed_32bit_literal ARROW label_ref )* END_SPARSE_SWITCH_DIRECTIVE -> ^( I_STATEMENT_SPARSE_SWITCH[$start, \"I_STATEMENT_SPARSE_SWITCH\"] ^( I_SPARSE_SWITCH_ELEMENTS[$start, \"I_SPARSE_SWITCH_ELEMENTS\"] ( fixed_32bit_literal label_ref )* ) ) ; public final smaliParser.insn_sparse_switch_directive_return insn_sparse_switch_directive() throws RecognitionException { smaliParser.insn_sparse_switch_directive_return retval = new smaliParser.insn_sparse_switch_directive_return(); retval.start = input.LT(1); CommonTree root_0 = null; - Token SPARSE_SWITCH_DIRECTIVE497=null; - Token ARROW499=null; - Token END_SPARSE_SWITCH_DIRECTIVE501=null; - ParserRuleReturnScope fixed_32bit_literal498 =null; - ParserRuleReturnScope label_ref500 =null; + Token SPARSE_SWITCH_DIRECTIVE551=null; + Token ARROW553=null; + Token END_SPARSE_SWITCH_DIRECTIVE555=null; + ParserRuleReturnScope fixed_32bit_literal552 =null; + ParserRuleReturnScope label_ref554 =null; - CommonTree SPARSE_SWITCH_DIRECTIVE497_tree=null; - CommonTree ARROW499_tree=null; - CommonTree END_SPARSE_SWITCH_DIRECTIVE501_tree=null; + CommonTree SPARSE_SWITCH_DIRECTIVE551_tree=null; + CommonTree ARROW553_tree=null; + CommonTree END_SPARSE_SWITCH_DIRECTIVE555_tree=null; RewriteRuleTokenStream stream_ARROW=new RewriteRuleTokenStream(adaptor,"token ARROW"); RewriteRuleTokenStream stream_SPARSE_SWITCH_DIRECTIVE=new RewriteRuleTokenStream(adaptor,"token SPARSE_SWITCH_DIRECTIVE"); RewriteRuleTokenStream stream_END_SPARSE_SWITCH_DIRECTIVE=new RewriteRuleTokenStream(adaptor,"token END_SPARSE_SWITCH_DIRECTIVE"); @@ -14710,48 +16056,48 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_label_ref=new RewriteRuleSubtreeStream(adaptor,"rule label_ref"); try { - // smaliParser.g:1122:3: ( SPARSE_SWITCH_DIRECTIVE ( fixed_32bit_literal ARROW label_ref )* END_SPARSE_SWITCH_DIRECTIVE -> ^( I_STATEMENT_SPARSE_SWITCH[$start, \"I_STATEMENT_SPARSE_SWITCH\"] ^( I_SPARSE_SWITCH_ELEMENTS[$start, \"I_SPARSE_SWITCH_ELEMENTS\"] ( fixed_32bit_literal label_ref )* ) ) ) - // smaliParser.g:1122:7: SPARSE_SWITCH_DIRECTIVE ( fixed_32bit_literal ARROW label_ref )* END_SPARSE_SWITCH_DIRECTIVE + // smaliParser.g:1186:3: ( SPARSE_SWITCH_DIRECTIVE ( fixed_32bit_literal ARROW label_ref )* END_SPARSE_SWITCH_DIRECTIVE -> ^( I_STATEMENT_SPARSE_SWITCH[$start, \"I_STATEMENT_SPARSE_SWITCH\"] ^( I_SPARSE_SWITCH_ELEMENTS[$start, \"I_SPARSE_SWITCH_ELEMENTS\"] ( fixed_32bit_literal label_ref )* ) ) ) + // smaliParser.g:1186:7: SPARSE_SWITCH_DIRECTIVE ( fixed_32bit_literal ARROW label_ref )* END_SPARSE_SWITCH_DIRECTIVE { - SPARSE_SWITCH_DIRECTIVE497=(Token)match(input,SPARSE_SWITCH_DIRECTIVE,FOLLOW_SPARSE_SWITCH_DIRECTIVE_in_insn_sparse_switch_directive5813); - stream_SPARSE_SWITCH_DIRECTIVE.add(SPARSE_SWITCH_DIRECTIVE497); + SPARSE_SWITCH_DIRECTIVE551=(Token)match(input,SPARSE_SWITCH_DIRECTIVE,FOLLOW_SPARSE_SWITCH_DIRECTIVE_in_insn_sparse_switch_directive6324); + stream_SPARSE_SWITCH_DIRECTIVE.add(SPARSE_SWITCH_DIRECTIVE551); - // smaliParser.g:1123:5: ( fixed_32bit_literal ARROW label_ref )* - loop54: + // smaliParser.g:1187:5: ( fixed_32bit_literal ARROW label_ref )* + loop57: while (true) { - int alt54=2; - int LA54_0 = input.LA(1); - if ( ((LA54_0 >= BOOL_LITERAL && LA54_0 <= BYTE_LITERAL)||LA54_0==CHAR_LITERAL||(LA54_0 >= FLOAT_LITERAL && LA54_0 <= FLOAT_LITERAL_OR_ID)||LA54_0==LONG_LITERAL||LA54_0==NEGATIVE_INTEGER_LITERAL||LA54_0==POSITIVE_INTEGER_LITERAL||LA54_0==SHORT_LITERAL) ) { - alt54=1; + int alt57=2; + int LA57_0 = input.LA(1); + if ( ((LA57_0 >= BOOL_LITERAL && LA57_0 <= BYTE_LITERAL)||LA57_0==CHAR_LITERAL||(LA57_0 >= FLOAT_LITERAL && LA57_0 <= FLOAT_LITERAL_OR_ID)||LA57_0==LONG_LITERAL||LA57_0==NEGATIVE_INTEGER_LITERAL||LA57_0==POSITIVE_INTEGER_LITERAL||LA57_0==SHORT_LITERAL) ) { + alt57=1; } - switch (alt54) { + switch (alt57) { case 1 : - // smaliParser.g:1123:6: fixed_32bit_literal ARROW label_ref + // smaliParser.g:1187:6: fixed_32bit_literal ARROW label_ref { - pushFollow(FOLLOW_fixed_32bit_literal_in_insn_sparse_switch_directive5820); - fixed_32bit_literal498=fixed_32bit_literal(); + pushFollow(FOLLOW_fixed_32bit_literal_in_insn_sparse_switch_directive6331); + fixed_32bit_literal552=fixed_32bit_literal(); state._fsp--; - stream_fixed_32bit_literal.add(fixed_32bit_literal498.getTree()); - ARROW499=(Token)match(input,ARROW,FOLLOW_ARROW_in_insn_sparse_switch_directive5822); - stream_ARROW.add(ARROW499); + stream_fixed_32bit_literal.add(fixed_32bit_literal552.getTree()); + ARROW553=(Token)match(input,ARROW,FOLLOW_ARROW_in_insn_sparse_switch_directive6333); + stream_ARROW.add(ARROW553); - pushFollow(FOLLOW_label_ref_in_insn_sparse_switch_directive5824); - label_ref500=label_ref(); + pushFollow(FOLLOW_label_ref_in_insn_sparse_switch_directive6335); + label_ref554=label_ref(); state._fsp--; - stream_label_ref.add(label_ref500.getTree()); + stream_label_ref.add(label_ref554.getTree()); } break; default : - break loop54; + break loop57; } } - END_SPARSE_SWITCH_DIRECTIVE501=(Token)match(input,END_SPARSE_SWITCH_DIRECTIVE,FOLLOW_END_SPARSE_SWITCH_DIRECTIVE_in_insn_sparse_switch_directive5832); - stream_END_SPARSE_SWITCH_DIRECTIVE.add(END_SPARSE_SWITCH_DIRECTIVE501); + END_SPARSE_SWITCH_DIRECTIVE555=(Token)match(input,END_SPARSE_SWITCH_DIRECTIVE,FOLLOW_END_SPARSE_SWITCH_DIRECTIVE_in_insn_sparse_switch_directive6343); + stream_END_SPARSE_SWITCH_DIRECTIVE.add(END_SPARSE_SWITCH_DIRECTIVE555); // AST REWRITE // elements: fixed_32bit_literal, label_ref @@ -14764,17 +16110,17 @@ public class smaliParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null); root_0 = (CommonTree)adaptor.nil(); - // 1125:5: -> ^( I_STATEMENT_SPARSE_SWITCH[$start, \"I_STATEMENT_SPARSE_SWITCH\"] ^( I_SPARSE_SWITCH_ELEMENTS[$start, \"I_SPARSE_SWITCH_ELEMENTS\"] ( fixed_32bit_literal label_ref )* ) ) + // 1189:5: -> ^( I_STATEMENT_SPARSE_SWITCH[$start, \"I_STATEMENT_SPARSE_SWITCH\"] ^( I_SPARSE_SWITCH_ELEMENTS[$start, \"I_SPARSE_SWITCH_ELEMENTS\"] ( fixed_32bit_literal label_ref )* ) ) { - // smaliParser.g:1125:8: ^( I_STATEMENT_SPARSE_SWITCH[$start, \"I_STATEMENT_SPARSE_SWITCH\"] ^( I_SPARSE_SWITCH_ELEMENTS[$start, \"I_SPARSE_SWITCH_ELEMENTS\"] ( fixed_32bit_literal label_ref )* ) ) + // smaliParser.g:1189:8: ^( I_STATEMENT_SPARSE_SWITCH[$start, \"I_STATEMENT_SPARSE_SWITCH\"] ^( I_SPARSE_SWITCH_ELEMENTS[$start, \"I_SPARSE_SWITCH_ELEMENTS\"] ( fixed_32bit_literal label_ref )* ) ) { CommonTree root_1 = (CommonTree)adaptor.nil(); root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_STATEMENT_SPARSE_SWITCH, (retval.start), "I_STATEMENT_SPARSE_SWITCH"), root_1); - // smaliParser.g:1126:8: ^( I_SPARSE_SWITCH_ELEMENTS[$start, \"I_SPARSE_SWITCH_ELEMENTS\"] ( fixed_32bit_literal label_ref )* ) + // smaliParser.g:1190:8: ^( I_SPARSE_SWITCH_ELEMENTS[$start, \"I_SPARSE_SWITCH_ELEMENTS\"] ( fixed_32bit_literal label_ref )* ) { CommonTree root_2 = (CommonTree)adaptor.nil(); root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(I_SPARSE_SWITCH_ELEMENTS, (retval.start), "I_SPARSE_SWITCH_ELEMENTS"), root_2); - // smaliParser.g:1126:71: ( fixed_32bit_literal label_ref )* + // smaliParser.g:1190:71: ( fixed_32bit_literal label_ref )* while ( stream_fixed_32bit_literal.hasNext()||stream_label_ref.hasNext() ) { adaptor.addChild(root_2, stream_fixed_32bit_literal.nextTree()); adaptor.addChild(root_2, stream_label_ref.nextTree()); @@ -14817,69 +16163,75 @@ public class smaliParser extends Parser { protected DFA30 dfa30 = new DFA30(this); - protected DFA38 dfa38 = new DFA38(this); protected DFA40 dfa40 = new DFA40(this); + protected DFA42 dfa42 = new DFA42(this); static final String DFA30_eotS = - "\55\uffff"; + "\63\uffff"; static final String DFA30_eofS = - "\55\uffff"; + "\63\uffff"; static final String DFA30_minS = - "\1\4\52\23\2\uffff"; + "\1\4\60\24\2\uffff"; static final String DFA30_maxS = - "\1\u00c6\12\u00b4\1\u00b7\37\u00b4\2\uffff"; + "\1\u00d5\12\u00c3\1\u00c6\45\u00c3\2\uffff"; static final String DFA30_acceptS = - "\53\uffff\1\1\1\2"; + "\61\uffff\1\1\1\2"; static final String DFA30_specialS = - "\55\uffff}>"; + "\63\uffff}>"; static final String[] DFA30_transitionS = { - "\1\2\1\uffff\1\16\3\uffff\1\10\14\uffff\1\7\17\uffff\1\6\2\uffff\1\17"+ - "\1\20\1\21\1\uffff\1\22\1\uffff\1\23\2\uffff\1\24\1\25\1\26\1\27\3\uffff"+ - "\1\30\1\uffff\1\31\1\32\1\33\1\34\1\uffff\1\35\1\36\1\uffff\1\37\3\uffff"+ - "\1\40\1\41\1\uffff\1\42\1\43\1\44\1\45\1\46\5\uffff\1\47\1\50\1\51\127"+ - "\uffff\1\52\1\uffff\1\5\1\11\4\uffff\1\13\1\4\1\14\1\uffff\1\12\3\uffff"+ - "\1\1\5\uffff\1\3\1\15", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54\2\uffff\1\13", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", - "\1\53\u00a0\uffff\1\54", + "\1\2\1\uffff\1\16\4\uffff\1\10\14\uffff\1\7\17\uffff\1\6\2\uffff\1\21"+ + "\1\22\1\23\1\uffff\1\24\1\uffff\1\25\2\uffff\1\26\1\27\1\30\1\31\1\32"+ + "\1\33\3\uffff\1\34\1\uffff\1\35\1\36\1\37\1\40\1\uffff\1\41\1\42\1\uffff"+ + "\1\43\3\uffff\1\44\1\45\1\uffff\1\46\1\47\1\50\1\51\1\52\1\53\1\54\6"+ + "\uffff\1\55\1\56\1\57\136\uffff\1\60\1\uffff\1\17\1\20\1\5\1\11\4\uffff"+ + "\1\13\1\4\1\14\1\uffff\1\12\3\uffff\1\1\5\uffff\1\3\1\15", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62\2\uffff\1\13", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", + "\1\61\u00ae\uffff\1\62", "", "" }; @@ -14915,138 +16267,145 @@ public class smaliParser extends Parser { } @Override public String getDescription() { - return "695:7: ( member_name COLON nonvoid_type_descriptor -> ^( I_ENCODED_FIELD ( reference_type_descriptor )? member_name nonvoid_type_descriptor ) | member_name method_prototype -> ^( I_ENCODED_METHOD ( reference_type_descriptor )? member_name method_prototype ) )"; + return "715:7: ( member_name COLON nonvoid_type_descriptor -> ^( I_ENCODED_FIELD ( reference_type_descriptor )? member_name nonvoid_type_descriptor ) | member_name method_prototype -> ^( I_ENCODED_METHOD ( reference_type_descriptor )? member_name method_prototype ) )"; } } - static final String DFA38_eotS = - "\62\uffff"; - static final String DFA38_eofS = - "\62\uffff"; - static final String DFA38_minS = - "\1\4\1\5\1\17\52\23\1\uffff\1\4\1\11\2\uffff"; - static final String DFA38_maxS = - "\1\u00c6\1\u00c1\1\u00b9\12\u00b4\1\u00b7\37\u00b4\1\uffff\1\u00c6\1\11"+ + static final String DFA40_eotS = + "\70\uffff"; + static final String DFA40_eofS = + "\70\uffff"; + static final String DFA40_minS = + "\1\4\1\5\1\20\60\24\1\uffff\1\4\1\11\2\uffff"; + static final String DFA40_maxS = + "\1\u00d5\1\u00d0\1\u00c8\12\u00c3\1\u00c6\45\u00c3\1\uffff\1\u00d5\1\11"+ "\2\uffff"; - static final String DFA38_acceptS = - "\55\uffff\1\1\2\uffff\1\2\1\3"; - static final String DFA38_specialS = - "\62\uffff}>"; - static final String[] DFA38_transitionS = { - "\1\4\1\uffff\1\20\1\uffff\1\2\1\uffff\1\12\4\uffff\1\1\7\uffff\1\11\17"+ - "\uffff\1\10\2\uffff\1\21\1\22\1\23\1\uffff\1\24\1\uffff\1\25\2\uffff"+ - "\1\26\1\27\1\30\1\31\3\uffff\1\32\1\uffff\1\33\1\34\1\35\1\36\1\uffff"+ - "\1\37\1\40\1\uffff\1\41\3\uffff\1\42\1\43\1\uffff\1\44\1\45\1\46\1\47"+ - "\1\50\5\uffff\1\51\1\52\1\53\127\uffff\1\54\1\uffff\1\7\1\13\4\uffff"+ - "\1\15\1\6\1\16\1\uffff\1\14\3\uffff\1\3\5\uffff\1\5\1\17", - "\1\55\1\uffff\1\55\1\uffff\1\56\2\uffff\2\55\5\uffff\1\55\7\uffff\2"+ - "\55\5\uffff\1\55\7\uffff\56\55\123\uffff\3\55\7\uffff\2\55\3\uffff\1"+ - "\55\1\uffff\2\55\2\uffff\2\55", - "\1\57\u00a9\uffff\1\57", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61\2\uffff\1\15", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", - "\1\60\u00a0\uffff\1\61", + static final String DFA40_acceptS = + "\63\uffff\1\1\2\uffff\1\2\1\3"; + static final String DFA40_specialS = + "\70\uffff}>"; + static final String[] DFA40_transitionS = { + "\1\4\1\uffff\1\20\1\uffff\1\2\2\uffff\1\12\4\uffff\1\1\7\uffff\1\11\17"+ + "\uffff\1\10\2\uffff\1\23\1\24\1\25\1\uffff\1\26\1\uffff\1\27\2\uffff"+ + "\1\30\1\31\1\32\1\33\1\34\1\35\3\uffff\1\36\1\uffff\1\37\1\40\1\41\1"+ + "\42\1\uffff\1\43\1\44\1\uffff\1\45\3\uffff\1\46\1\47\1\uffff\1\50\1\51"+ + "\1\52\1\53\1\54\1\55\1\56\6\uffff\1\57\1\60\1\61\136\uffff\1\62\1\uffff"+ + "\1\21\1\22\1\7\1\13\4\uffff\1\15\1\6\1\16\1\uffff\1\14\3\uffff\1\3\5"+ + "\uffff\1\5\1\17", + "\1\63\1\uffff\1\63\1\uffff\1\64\3\uffff\2\63\5\uffff\1\63\7\uffff\2"+ + "\63\5\uffff\1\63\7\uffff\63\63\132\uffff\3\63\11\uffff\2\63\3\uffff\1"+ + "\63\1\uffff\2\63\2\uffff\2\63", + "\1\65\u00b7\uffff\1\65", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67\2\uffff\1\15", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", + "\1\66\u00ae\uffff\1\67", "", - "\1\4\1\uffff\1\20\3\uffff\1\12\14\uffff\1\11\17\uffff\1\10\2\uffff\1"+ - "\21\1\22\1\23\1\uffff\1\24\1\uffff\1\25\2\uffff\1\26\1\27\1\30\1\31\3"+ - "\uffff\1\32\1\uffff\1\33\1\34\1\35\1\36\1\uffff\1\37\1\40\1\uffff\1\41"+ - "\3\uffff\1\42\1\43\1\uffff\1\44\1\45\1\46\1\47\1\50\5\uffff\1\51\1\52"+ - "\1\53\127\uffff\1\54\1\uffff\1\7\1\13\4\uffff\1\15\1\6\1\16\1\uffff\1"+ - "\14\3\uffff\1\3\5\uffff\1\5\1\17", - "\1\56", + "\1\4\1\uffff\1\20\4\uffff\1\12\14\uffff\1\11\17\uffff\1\10\2\uffff\1"+ + "\23\1\24\1\25\1\uffff\1\26\1\uffff\1\27\2\uffff\1\30\1\31\1\32\1\33\1"+ + "\34\1\35\3\uffff\1\36\1\uffff\1\37\1\40\1\41\1\42\1\uffff\1\43\1\44\1"+ + "\uffff\1\45\3\uffff\1\46\1\47\1\uffff\1\50\1\51\1\52\1\53\1\54\1\55\1"+ + "\56\6\uffff\1\57\1\60\1\61\136\uffff\1\62\1\uffff\1\21\1\22\1\7\1\13"+ + "\4\uffff\1\15\1\6\1\16\1\uffff\1\14\3\uffff\1\3\5\uffff\1\5\1\17", + "\1\64", "", "" }; - static final short[] DFA38_eot = DFA.unpackEncodedString(DFA38_eotS); - static final short[] DFA38_eof = DFA.unpackEncodedString(DFA38_eofS); - static final char[] DFA38_min = DFA.unpackEncodedStringToUnsignedChars(DFA38_minS); - static final char[] DFA38_max = DFA.unpackEncodedStringToUnsignedChars(DFA38_maxS); - static final short[] DFA38_accept = DFA.unpackEncodedString(DFA38_acceptS); - static final short[] DFA38_special = DFA.unpackEncodedString(DFA38_specialS); - static final short[][] DFA38_transition; + static final short[] DFA40_eot = DFA.unpackEncodedString(DFA40_eotS); + static final short[] DFA40_eof = DFA.unpackEncodedString(DFA40_eofS); + static final char[] DFA40_min = DFA.unpackEncodedStringToUnsignedChars(DFA40_minS); + static final char[] DFA40_max = DFA.unpackEncodedStringToUnsignedChars(DFA40_maxS); + static final short[] DFA40_accept = DFA.unpackEncodedString(DFA40_acceptS); + static final short[] DFA40_special = DFA.unpackEncodedString(DFA40_specialS); + static final short[][] DFA40_transition; static { - int numStates = DFA38_transitionS.length; - DFA38_transition = new short[numStates][]; + int numStates = DFA40_transitionS.length; + DFA40_transition = new short[numStates][]; for (int i=0; i<numStates; i++) { - DFA38_transition[i] = DFA.unpackEncodedString(DFA38_transitionS[i]); + DFA40_transition[i] = DFA.unpackEncodedString(DFA40_transitionS[i]); } } - protected class DFA38 extends DFA { + protected class DFA40 extends DFA { - public DFA38(BaseRecognizer recognizer) { + public DFA40(BaseRecognizer recognizer) { this.recognizer = recognizer; - this.decisionNumber = 38; - this.eot = DFA38_eot; - this.eof = DFA38_eof; - this.min = DFA38_min; - this.max = DFA38_max; - this.accept = DFA38_accept; - this.special = DFA38_special; - this.transition = DFA38_transition; + this.decisionNumber = 40; + this.eot = DFA40_eot; + this.eof = DFA40_eof; + this.min = DFA40_min; + this.max = DFA40_max; + this.accept = DFA40_accept; + this.special = DFA40_special; + this.transition = DFA40_transition; } @Override public String getDescription() { - return "723:1: verification_error_reference : ( CLASS_DESCRIPTOR | field_reference | method_reference );"; + return "757:1: verification_error_reference : ( CLASS_DESCRIPTOR | field_reference | method_reference );"; } } - static final String DFA40_eotS = - "\103\uffff"; - static final String DFA40_eofS = - "\103\uffff"; - static final String DFA40_minS = - "\1\5\100\uffff\1\0\1\uffff"; - static final String DFA40_maxS = - "\1\u00c1\100\uffff\1\0\1\uffff"; - static final String DFA40_acceptS = - "\1\uffff\1\2\100\uffff\1\1"; - static final String DFA40_specialS = - "\101\uffff\1\0\1\uffff}>"; - static final String[] DFA40_transitionS = { - "\1\101\1\uffff\1\1\4\uffff\2\1\5\uffff\1\1\7\uffff\2\1\1\uffff\1\1\3"+ - "\uffff\1\1\7\uffff\56\1\123\uffff\3\1\7\uffff\2\1\3\uffff\1\1\1\uffff"+ + static final String DFA42_eotS = + "\110\uffff"; + static final String DFA42_eofS = + "\110\uffff"; + static final String DFA42_minS = + "\1\5\105\uffff\1\0\1\uffff"; + static final String DFA42_maxS = + "\1\u00d0\105\uffff\1\0\1\uffff"; + static final String DFA42_acceptS = + "\1\uffff\1\2\105\uffff\1\1"; + static final String DFA42_specialS = + "\106\uffff\1\0\1\uffff}>"; + static final String[] DFA42_transitionS = { + "\1\106\1\uffff\1\1\5\uffff\2\1\5\uffff\1\1\7\uffff\2\1\1\uffff\1\1\3"+ + "\uffff\1\1\7\uffff\63\1\132\uffff\3\1\11\uffff\2\1\3\uffff\1\1\1\uffff"+ "\2\1\2\uffff\2\1", "", "", @@ -15112,42 +16471,47 @@ public class smaliParser extends Parser { "", "", "", + "", + "", + "", + "", + "", "\1\uffff", "" }; - static final short[] DFA40_eot = DFA.unpackEncodedString(DFA40_eotS); - static final short[] DFA40_eof = DFA.unpackEncodedString(DFA40_eofS); - static final char[] DFA40_min = DFA.unpackEncodedStringToUnsignedChars(DFA40_minS); - static final char[] DFA40_max = DFA.unpackEncodedStringToUnsignedChars(DFA40_maxS); - static final short[] DFA40_accept = DFA.unpackEncodedString(DFA40_acceptS); - static final short[] DFA40_special = DFA.unpackEncodedString(DFA40_specialS); - static final short[][] DFA40_transition; + static final short[] DFA42_eot = DFA.unpackEncodedString(DFA42_eotS); + static final short[] DFA42_eof = DFA.unpackEncodedString(DFA42_eofS); + static final char[] DFA42_min = DFA.unpackEncodedStringToUnsignedChars(DFA42_minS); + static final char[] DFA42_max = DFA.unpackEncodedStringToUnsignedChars(DFA42_maxS); + static final short[] DFA42_accept = DFA.unpackEncodedString(DFA42_acceptS); + static final short[] DFA42_special = DFA.unpackEncodedString(DFA42_specialS); + static final short[][] DFA42_transition; static { - int numStates = DFA40_transitionS.length; - DFA40_transition = new short[numStates][]; + int numStates = DFA42_transitionS.length; + DFA42_transition = new short[numStates][]; for (int i=0; i<numStates; i++) { - DFA40_transition[i] = DFA.unpackEncodedString(DFA40_transitionS[i]); + DFA42_transition[i] = DFA.unpackEncodedString(DFA42_transitionS[i]); } } - protected class DFA40 extends DFA { + protected class DFA42 extends DFA { - public DFA40(BaseRecognizer recognizer) { + public DFA42(BaseRecognizer recognizer) { this.recognizer = recognizer; - this.decisionNumber = 40; - this.eot = DFA40_eot; - this.eof = DFA40_eof; - this.min = DFA40_min; - this.max = DFA40_max; - this.accept = DFA40_accept; - this.special = DFA40_special; - this.transition = DFA40_transition; + this.decisionNumber = 42; + this.eot = DFA42_eot; + this.eof = DFA42_eof; + this.min = DFA42_min; + this.max = DFA42_max; + this.accept = DFA42_accept; + this.special = DFA42_special; + this.transition = DFA42_transition; } @Override public String getDescription() { - return "()* loopback of 741:5: ({...}? annotation )*"; + return "()* loopback of 775:5: ({...}? annotation )*"; } @Override public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { @@ -15155,538 +16519,592 @@ public class smaliParser extends Parser { int _s = s; switch ( s ) { case 0 : - int LA40_65 = input.LA(1); + int LA42_70 = input.LA(1); - int index40_65 = input.index(); + int index42_70 = input.index(); input.rewind(); s = -1; - if ( ((input.LA(1) == ANNOTATION_DIRECTIVE)) ) {s = 66;} + if ( ((input.LA(1) == ANNOTATION_DIRECTIVE)) ) {s = 71;} else if ( (true) ) {s = 1;} - input.seek(index40_65); + input.seek(index42_70); if ( s>=0 ) return s; break; } NoViableAltException nvae = - new NoViableAltException(getDescription(), 40, _s, input); + new NoViableAltException(getDescription(), 42, _s, input); error(nvae); throw nvae; } } - public static final BitSet FOLLOW_class_spec_in_smali_file1075 = new BitSet(new long[]{0x0000011000010020L,0x0000000000000000L,0x0001000000000000L,0x0000000000000011L}); - public static final BitSet FOLLOW_super_spec_in_smali_file1086 = new BitSet(new long[]{0x0000011000010020L,0x0000000000000000L,0x0001000000000000L,0x0000000000000011L}); - public static final BitSet FOLLOW_implements_spec_in_smali_file1094 = new BitSet(new long[]{0x0000011000010020L,0x0000000000000000L,0x0001000000000000L,0x0000000000000011L}); - public static final BitSet FOLLOW_source_spec_in_smali_file1103 = new BitSet(new long[]{0x0000011000010020L,0x0000000000000000L,0x0001000000000000L,0x0000000000000011L}); - public static final BitSet FOLLOW_method_in_smali_file1111 = new BitSet(new long[]{0x0000011000010020L,0x0000000000000000L,0x0001000000000000L,0x0000000000000011L}); - public static final BitSet FOLLOW_field_in_smali_file1117 = new BitSet(new long[]{0x0000011000010020L,0x0000000000000000L,0x0001000000000000L,0x0000000000000011L}); - public static final BitSet FOLLOW_annotation_in_smali_file1123 = new BitSet(new long[]{0x0000011000010020L,0x0000000000000000L,0x0001000000000000L,0x0000000000000011L}); - public static final BitSet FOLLOW_EOF_in_smali_file1134 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_CLASS_DIRECTIVE_in_class_spec1221 = new BitSet(new long[]{0x0000000000008010L}); - public static final BitSet FOLLOW_access_list_in_class_spec1223 = new BitSet(new long[]{0x0000000000008000L}); - public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_class_spec1225 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_SUPER_DIRECTIVE_in_super_spec1243 = new BitSet(new long[]{0x0000000000008000L}); - public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_super_spec1245 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_IMPLEMENTS_DIRECTIVE_in_implements_spec1264 = new BitSet(new long[]{0x0000000000008000L}); - public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_implements_spec1266 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_SOURCE_DIRECTIVE_in_source_spec1285 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_source_spec1287 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ACCESS_SPEC_in_access_list1306 = new BitSet(new long[]{0x0000000000000012L}); - public static final BitSet FOLLOW_FIELD_DIRECTIVE_in_field1337 = new BitSet(new long[]{0xF4795C8000800450L,0x0000000000E0FB16L,0x8B86800000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_access_list_in_field1339 = new BitSet(new long[]{0xF4795C8000800450L,0x0000000000E0FB16L,0x8B86800000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_member_name_in_field1341 = new BitSet(new long[]{0x0000000000080000L}); - public static final BitSet FOLLOW_COLON_in_field1343 = new BitSet(new long[]{0x0000000000008100L,0x0000000000000000L,0x0200000000000000L}); - public static final BitSet FOLLOW_nonvoid_type_descriptor_in_field1345 = new BitSet(new long[]{0x0000000804000022L}); - public static final BitSet FOLLOW_EQUAL_in_field1348 = new BitSet(new long[]{0xF4795CC200C0CD50L,0x0000000000E0FB16L,0xCB8EC00000000000L,0x000000000000006CL}); - public static final BitSet FOLLOW_literal_in_field1350 = new BitSet(new long[]{0x0000000004000022L}); - public static final BitSet FOLLOW_annotation_in_field1363 = new BitSet(new long[]{0x0000000004000022L}); - public static final BitSet FOLLOW_END_FIELD_DIRECTIVE_in_field1377 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_METHOD_DIRECTIVE_in_method1488 = new BitSet(new long[]{0xF4795C8000800450L,0x0000000000E0FB16L,0x8B86800000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_access_list_in_method1490 = new BitSet(new long[]{0xF4795C8000800450L,0x0000000000E0FB16L,0x8B86800000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_member_name_in_method1492 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0010000000000000L}); - public static final BitSet FOLLOW_method_prototype_in_method1494 = new BitSet(new long[]{0xFFFFFC04180830A0L,0x0000000000FFFFFFL,0x3460380000000000L,0x0000000000000003L}); - public static final BitSet FOLLOW_statements_and_directives_in_method1496 = new BitSet(new long[]{0x0000000010000000L}); - public static final BitSet FOLLOW_END_METHOD_DIRECTIVE_in_method1502 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ordered_method_item_in_statements_and_directives1547 = new BitSet(new long[]{0xFFFFFC04080830A2L,0x0000000000FFFFFFL,0x3460380000000000L,0x0000000000000003L}); - public static final BitSet FOLLOW_registers_directive_in_statements_and_directives1555 = new BitSet(new long[]{0xFFFFFC04080830A2L,0x0000000000FFFFFFL,0x3460380000000000L,0x0000000000000003L}); - public static final BitSet FOLLOW_catch_directive_in_statements_and_directives1563 = new BitSet(new long[]{0xFFFFFC04080830A2L,0x0000000000FFFFFFL,0x3460380000000000L,0x0000000000000003L}); - public static final BitSet FOLLOW_catchall_directive_in_statements_and_directives1571 = new BitSet(new long[]{0xFFFFFC04080830A2L,0x0000000000FFFFFFL,0x3460380000000000L,0x0000000000000003L}); - public static final BitSet FOLLOW_parameter_directive_in_statements_and_directives1579 = new BitSet(new long[]{0xFFFFFC04080830A2L,0x0000000000FFFFFFL,0x3460380000000000L,0x0000000000000003L}); - public static final BitSet FOLLOW_annotation_in_statements_and_directives1587 = new BitSet(new long[]{0xFFFFFC04080830A2L,0x0000000000FFFFFFL,0x3460380000000000L,0x0000000000000003L}); - public static final BitSet FOLLOW_label_in_ordered_method_item1672 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_instruction_in_ordered_method_item1678 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_debug_directive_in_ordered_method_item1684 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_REGISTERS_DIRECTIVE_in_registers_directive1704 = new BitSet(new long[]{0x0000000000004800L,0x0000000000000000L,0x4102400000000000L}); - public static final BitSet FOLLOW_integral_literal_in_registers_directive1708 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LOCALS_DIRECTIVE_in_registers_directive1728 = new BitSet(new long[]{0x0000000000004800L,0x0000000000000000L,0x4102400000000000L}); - public static final BitSet FOLLOW_integral_literal_in_registers_directive1732 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_PARAM_LIST_OR_ID_PRIMITIVE_TYPE_in_param_list_or_id1764 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0080000000000000L}); - public static final BitSet FOLLOW_SIMPLE_NAME_in_simple_name1777 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ACCESS_SPEC_in_simple_name1783 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_VERIFICATION_ERROR_TYPE_in_simple_name1794 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_POSITIVE_INTEGER_LITERAL_in_simple_name1805 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_NEGATIVE_INTEGER_LITERAL_in_simple_name1816 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_FLOAT_LITERAL_OR_ID_in_simple_name1827 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_DOUBLE_LITERAL_OR_ID_in_simple_name1838 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_BOOL_LITERAL_in_simple_name1849 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_NULL_LITERAL_in_simple_name1860 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_REGISTER_in_simple_name1871 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_param_list_or_id_in_simple_name1882 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_PRIMITIVE_TYPE_in_simple_name1892 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_VOID_TYPE_in_simple_name1903 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ANNOTATION_VISIBILITY_in_simple_name1914 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT10t_in_simple_name1925 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT10x_in_simple_name1936 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT10x_ODEX_in_simple_name1947 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT11x_in_simple_name1958 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT12x_OR_ID_in_simple_name1969 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_FIELD_in_simple_name1980 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_FIELD_ODEX_in_simple_name1991 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_STRING_in_simple_name2002 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_TYPE_in_simple_name2013 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT21t_in_simple_name2024 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT22c_FIELD_in_simple_name2035 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT22c_FIELD_ODEX_in_simple_name2046 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT22c_TYPE_in_simple_name2057 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT22cs_FIELD_in_simple_name2068 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT22s_OR_ID_in_simple_name2079 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT22t_in_simple_name2090 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT23x_in_simple_name2101 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT31i_OR_ID_in_simple_name2112 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT31t_in_simple_name2123 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT35c_METHOD_in_simple_name2134 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT35c_METHOD_ODEX_in_simple_name2145 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT35c_TYPE_in_simple_name2156 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT35mi_METHOD_in_simple_name2167 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT35ms_METHOD_in_simple_name2178 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT45cc_METHOD_in_simple_name2189 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT4rcc_METHOD_in_simple_name2200 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT51l_in_simple_name2211 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_simple_name_in_member_name2226 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_MEMBER_NAME_in_member_name2232 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_OPEN_PAREN_in_method_prototype2247 = new BitSet(new long[]{0x0000000000048100L,0x0000000000000000L,0x0280000000000000L}); - public static final BitSet FOLLOW_param_list_in_method_prototype2249 = new BitSet(new long[]{0x0000000000040000L}); - public static final BitSet FOLLOW_CLOSE_PAREN_in_method_prototype2251 = new BitSet(new long[]{0x0000000000008100L,0x0000000000000000L,0x0200000000000000L,0x0000000000000040L}); - public static final BitSet FOLLOW_type_descriptor_in_method_prototype2253 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_PARAM_LIST_OR_ID_PRIMITIVE_TYPE_in_param_list_or_id_primitive_type2283 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_param_list_or_id_primitive_type_in_param_list2298 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0080000000000000L}); - public static final BitSet FOLLOW_nonvoid_type_descriptor_in_param_list2305 = new BitSet(new long[]{0x0000000000008102L,0x0000000000000000L,0x0200000000000000L}); - public static final BitSet FOLLOW_ARRAY_TYPE_PREFIX_in_array_descriptor2316 = new BitSet(new long[]{0x0000000000008000L,0x0000000000000000L,0x0200000000000000L}); - public static final BitSet FOLLOW_set_in_array_descriptor2318 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_VOID_TYPE_in_type_descriptor2334 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_PRIMITIVE_TYPE_in_type_descriptor2340 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_type_descriptor2346 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_array_descriptor_in_type_descriptor2352 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_PRIMITIVE_TYPE_in_nonvoid_type_descriptor2362 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_nonvoid_type_descriptor2368 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_array_descriptor_in_nonvoid_type_descriptor2374 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_reference_type_descriptor2384 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_array_descriptor_in_reference_type_descriptor2390 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_POSITIVE_INTEGER_LITERAL_in_integer_literal2400 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_NEGATIVE_INTEGER_LITERAL_in_integer_literal2411 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_FLOAT_LITERAL_OR_ID_in_float_literal2426 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_FLOAT_LITERAL_in_float_literal2437 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_DOUBLE_LITERAL_OR_ID_in_double_literal2447 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_DOUBLE_LITERAL_in_double_literal2458 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LONG_LITERAL_in_literal2468 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_integer_literal_in_literal2474 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_SHORT_LITERAL_in_literal2480 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_BYTE_LITERAL_in_literal2486 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_float_literal_in_literal2492 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_double_literal_in_literal2498 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_CHAR_LITERAL_in_literal2504 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_literal2510 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_BOOL_LITERAL_in_literal2516 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_NULL_LITERAL_in_literal2522 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_array_literal_in_literal2528 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_subannotation_in_literal2534 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_type_field_method_literal_in_literal2540 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_enum_literal_in_literal2546 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_integer_literal_in_parsed_integer_literal2559 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LONG_LITERAL_in_integral_literal2571 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_integer_literal_in_integral_literal2577 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_SHORT_LITERAL_in_integral_literal2583 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_CHAR_LITERAL_in_integral_literal2589 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_BYTE_LITERAL_in_integral_literal2595 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LONG_LITERAL_in_fixed_32bit_literal2605 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_integer_literal_in_fixed_32bit_literal2611 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_SHORT_LITERAL_in_fixed_32bit_literal2617 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_BYTE_LITERAL_in_fixed_32bit_literal2623 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_float_literal_in_fixed_32bit_literal2629 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_CHAR_LITERAL_in_fixed_32bit_literal2635 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_BOOL_LITERAL_in_fixed_32bit_literal2641 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_integer_literal_in_fixed_literal2651 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LONG_LITERAL_in_fixed_literal2657 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_SHORT_LITERAL_in_fixed_literal2663 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_BYTE_LITERAL_in_fixed_literal2669 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_float_literal_in_fixed_literal2675 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_double_literal_in_fixed_literal2681 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_CHAR_LITERAL_in_fixed_literal2687 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_BOOL_LITERAL_in_fixed_literal2693 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_OPEN_BRACE_in_array_literal2703 = new BitSet(new long[]{0xF4795CC200C2CD50L,0x0000000000E0FB16L,0xCB8EC00000000000L,0x000000000000006CL}); - public static final BitSet FOLLOW_literal_in_array_literal2706 = new BitSet(new long[]{0x0000000000120000L}); - public static final BitSet FOLLOW_COMMA_in_array_literal2709 = new BitSet(new long[]{0xF4795CC200C0CD50L,0x0000000000E0FB16L,0xCB8EC00000000000L,0x000000000000006CL}); - public static final BitSet FOLLOW_literal_in_array_literal2711 = new BitSet(new long[]{0x0000000000120000L}); - public static final BitSet FOLLOW_CLOSE_BRACE_in_array_literal2719 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_simple_name_in_annotation_element2743 = new BitSet(new long[]{0x0000000800000000L}); - public static final BitSet FOLLOW_EQUAL_in_annotation_element2745 = new BitSet(new long[]{0xF4795CC200C0CD50L,0x0000000000E0FB16L,0xCB8EC00000000000L,0x000000000000006CL}); - public static final BitSet FOLLOW_literal_in_annotation_element2747 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ANNOTATION_DIRECTIVE_in_annotation2772 = new BitSet(new long[]{0x0000000000000040L}); - public static final BitSet FOLLOW_ANNOTATION_VISIBILITY_in_annotation2774 = new BitSet(new long[]{0x0000000000008000L}); - public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_annotation2776 = new BitSet(new long[]{0xF4795C8001800450L,0x0000000000E0FB16L,0x8B86000000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_annotation_element_in_annotation2782 = new BitSet(new long[]{0xF4795C8001800450L,0x0000000000E0FB16L,0x8B86000000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_END_ANNOTATION_DIRECTIVE_in_annotation2785 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_SUBANNOTATION_DIRECTIVE_in_subannotation2818 = new BitSet(new long[]{0x0000000000008000L}); - public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_subannotation2820 = new BitSet(new long[]{0xF4795C8100800450L,0x0000000000E0FB16L,0x8B86000000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_annotation_element_in_subannotation2822 = new BitSet(new long[]{0xF4795C8100800450L,0x0000000000E0FB16L,0x8B86000000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_END_SUBANNOTATION_DIRECTIVE_in_subannotation2825 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ENUM_DIRECTIVE_in_enum_literal2852 = new BitSet(new long[]{0xF4795C8000808550L,0x0000000000E0FB16L,0x8B86800000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_field_reference_in_enum_literal2854 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_reference_type_descriptor_in_type_field_method_literal2874 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_reference_type_descriptor_in_type_field_method_literal2883 = new BitSet(new long[]{0x0000000000000200L}); - public static final BitSet FOLLOW_ARROW_in_type_field_method_literal2885 = new BitSet(new long[]{0xF4795C8000800450L,0x0000000000E0FB16L,0x8B86800000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_member_name_in_type_field_method_literal2897 = new BitSet(new long[]{0x0000000000080000L}); - public static final BitSet FOLLOW_COLON_in_type_field_method_literal2899 = new BitSet(new long[]{0x0000000000008100L,0x0000000000000000L,0x0200000000000000L}); - public static final BitSet FOLLOW_nonvoid_type_descriptor_in_type_field_method_literal2901 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_member_name_in_type_field_method_literal2924 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0010000000000000L}); - public static final BitSet FOLLOW_method_prototype_in_type_field_method_literal2926 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_PRIMITIVE_TYPE_in_type_field_method_literal2959 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_VOID_TYPE_in_type_field_method_literal2965 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_reference_type_descriptor_in_method_reference2976 = new BitSet(new long[]{0x0000000000000200L}); - public static final BitSet FOLLOW_ARROW_in_method_reference2978 = new BitSet(new long[]{0xF4795C8000800450L,0x0000000000E0FB16L,0x8B86800000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_member_name_in_method_reference2982 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0010000000000000L}); - public static final BitSet FOLLOW_method_prototype_in_method_reference2984 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_reference_type_descriptor_in_field_reference3006 = new BitSet(new long[]{0x0000000000000200L}); - public static final BitSet FOLLOW_ARROW_in_field_reference3008 = new BitSet(new long[]{0xF4795C8000800450L,0x0000000000E0FB16L,0x8B86800000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_member_name_in_field_reference3012 = new BitSet(new long[]{0x0000000000080000L}); - public static final BitSet FOLLOW_COLON_in_field_reference3014 = new BitSet(new long[]{0x0000000000008100L,0x0000000000000000L,0x0200000000000000L}); - public static final BitSet FOLLOW_nonvoid_type_descriptor_in_field_reference3016 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_COLON_in_label3037 = new BitSet(new long[]{0xF4795C8000800450L,0x0000000000E0FB16L,0x8B86000000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_simple_name_in_label3039 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_COLON_in_label_ref3058 = new BitSet(new long[]{0xF4795C8000800450L,0x0000000000E0FB16L,0x8B86000000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_simple_name_in_label_ref3060 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_REGISTER_in_register_list3074 = new BitSet(new long[]{0x0000000000100002L}); - public static final BitSet FOLLOW_COMMA_in_register_list3077 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_register_list3079 = new BitSet(new long[]{0x0000000000100002L}); - public static final BitSet FOLLOW_REGISTER_in_register_range3114 = new BitSet(new long[]{0x0000000000200002L}); - public static final BitSet FOLLOW_DOTDOT_in_register_range3117 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_register_range3121 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_verification_error_reference3150 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_field_reference_in_verification_error_reference3154 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_method_reference_in_verification_error_reference3158 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_CATCH_DIRECTIVE_in_catch_directive3168 = new BitSet(new long[]{0x0000000000008100L,0x0000000000000000L,0x0200000000000000L}); - public static final BitSet FOLLOW_nonvoid_type_descriptor_in_catch_directive3170 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L}); - public static final BitSet FOLLOW_OPEN_BRACE_in_catch_directive3172 = new BitSet(new long[]{0x0000000000080000L}); - public static final BitSet FOLLOW_label_ref_in_catch_directive3176 = new BitSet(new long[]{0x0000000000200000L}); - public static final BitSet FOLLOW_DOTDOT_in_catch_directive3178 = new BitSet(new long[]{0x0000000000080000L}); - public static final BitSet FOLLOW_label_ref_in_catch_directive3182 = new BitSet(new long[]{0x0000000000020000L}); - public static final BitSet FOLLOW_CLOSE_BRACE_in_catch_directive3184 = new BitSet(new long[]{0x0000000000080000L}); - public static final BitSet FOLLOW_label_ref_in_catch_directive3188 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_CATCHALL_DIRECTIVE_in_catchall_directive3220 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L}); - public static final BitSet FOLLOW_OPEN_BRACE_in_catchall_directive3222 = new BitSet(new long[]{0x0000000000080000L}); - public static final BitSet FOLLOW_label_ref_in_catchall_directive3226 = new BitSet(new long[]{0x0000000000200000L}); - public static final BitSet FOLLOW_DOTDOT_in_catchall_directive3228 = new BitSet(new long[]{0x0000000000080000L}); - public static final BitSet FOLLOW_label_ref_in_catchall_directive3232 = new BitSet(new long[]{0x0000000000020000L}); - public static final BitSet FOLLOW_CLOSE_BRACE_in_catchall_directive3234 = new BitSet(new long[]{0x0000000000080000L}); - public static final BitSet FOLLOW_label_ref_in_catchall_directive3238 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_PARAMETER_DIRECTIVE_in_parameter_directive3277 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_parameter_directive3279 = new BitSet(new long[]{0x0000000040100022L}); - public static final BitSet FOLLOW_COMMA_in_parameter_directive3282 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_parameter_directive3284 = new BitSet(new long[]{0x0000000040000022L}); - public static final BitSet FOLLOW_annotation_in_parameter_directive3295 = new BitSet(new long[]{0x0000000040000022L}); - public static final BitSet FOLLOW_END_PARAMETER_DIRECTIVE_in_parameter_directive3308 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_line_directive_in_debug_directive3381 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_local_directive_in_debug_directive3387 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_end_local_directive_in_debug_directive3393 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_restart_local_directive_in_debug_directive3399 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_prologue_directive_in_debug_directive3405 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_epilogue_directive_in_debug_directive3411 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_source_directive_in_debug_directive3417 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LINE_DIRECTIVE_in_line_directive3427 = new BitSet(new long[]{0x0000000000004800L,0x0000000000000000L,0x4102400000000000L}); - public static final BitSet FOLLOW_integral_literal_in_line_directive3429 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LOCAL_DIRECTIVE_in_local_directive3452 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_local_directive3454 = new BitSet(new long[]{0x0000000000100002L}); - public static final BitSet FOLLOW_COMMA_in_local_directive3457 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0004000000000000L,0x0000000000000004L}); - public static final BitSet FOLLOW_NULL_LITERAL_in_local_directive3460 = new BitSet(new long[]{0x0000000000080000L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_local_directive3466 = new BitSet(new long[]{0x0000000000080000L}); - public static final BitSet FOLLOW_COLON_in_local_directive3469 = new BitSet(new long[]{0x0000000000008100L,0x0000000000000000L,0x0200000000000000L,0x0000000000000040L}); - public static final BitSet FOLLOW_VOID_TYPE_in_local_directive3472 = new BitSet(new long[]{0x0000000000100002L}); - public static final BitSet FOLLOW_nonvoid_type_descriptor_in_local_directive3476 = new BitSet(new long[]{0x0000000000100002L}); - public static final BitSet FOLLOW_COMMA_in_local_directive3510 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_local_directive3514 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_END_LOCAL_DIRECTIVE_in_end_local_directive3556 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_end_local_directive3558 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_RESTART_LOCAL_DIRECTIVE_in_restart_local_directive3581 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_restart_local_directive3583 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_PROLOGUE_DIRECTIVE_in_prologue_directive3606 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_EPILOGUE_DIRECTIVE_in_epilogue_directive3627 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_SOURCE_DIRECTIVE_in_source_directive3648 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_source_directive3650 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT12x_in_instruction_format12x3675 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT12x_OR_ID_in_instruction_format12x3681 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT22s_in_instruction_format22s3696 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT22s_OR_ID_in_instruction_format22s3702 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT31i_in_instruction_format31i3717 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT31i_OR_ID_in_instruction_format31i3723 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format10t_in_instruction3740 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format10x_in_instruction3746 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format10x_odex_in_instruction3752 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format11n_in_instruction3758 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format11x_in_instruction3764 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format12x_in_instruction3770 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format20bc_in_instruction3776 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format20t_in_instruction3782 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format21c_field_in_instruction3788 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format21c_field_odex_in_instruction3794 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format21c_string_in_instruction3800 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format21c_type_in_instruction3806 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format21ih_in_instruction3812 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format21lh_in_instruction3818 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format21s_in_instruction3824 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format21t_in_instruction3830 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format22b_in_instruction3836 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format22c_field_in_instruction3842 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format22c_field_odex_in_instruction3848 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format22c_type_in_instruction3854 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format22cs_field_in_instruction3860 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format22s_in_instruction3866 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format22t_in_instruction3872 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format22x_in_instruction3878 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format23x_in_instruction3884 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format30t_in_instruction3890 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format31c_in_instruction3896 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format31i_in_instruction3902 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format31t_in_instruction3908 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format32x_in_instruction3914 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format35c_method_in_instruction3920 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format35c_type_in_instruction3926 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format35c_method_odex_in_instruction3932 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format35mi_method_in_instruction3938 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format35ms_method_in_instruction3944 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format3rc_method_in_instruction3950 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format3rc_method_odex_in_instruction3956 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format3rc_type_in_instruction3962 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format3rmi_method_in_instruction3968 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format3rms_method_in_instruction3974 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format45cc_method_in_instruction3980 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format4rcc_method_in_instruction3986 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format51l_in_instruction3992 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_array_data_directive_in_instruction3998 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_packed_switch_directive_in_instruction4004 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_sparse_switch_directive_in_instruction4010 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT10t_in_insn_format10t4030 = new BitSet(new long[]{0x0000000000080000L}); - public static final BitSet FOLLOW_label_ref_in_insn_format10t4032 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT10x_in_insn_format10x4062 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT10x_ODEX_in_insn_format10x_odex4090 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT11n_in_insn_format11n4111 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format11n4113 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format11n4115 = new BitSet(new long[]{0x0000000000004800L,0x0000000000000000L,0x4102400000000000L}); - public static final BitSet FOLLOW_integral_literal_in_insn_format11n4117 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT11x_in_insn_format11x4149 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format11x4151 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_instruction_format12x_in_insn_format12x4181 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format12x4183 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format12x4185 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format12x4187 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT20bc_in_insn_format20bc4219 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000020L}); - public static final BitSet FOLLOW_VERIFICATION_ERROR_TYPE_in_insn_format20bc4221 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format20bc4223 = new BitSet(new long[]{0xF4795C8000808550L,0x0000000000E0FB16L,0x8B86800000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_verification_error_reference_in_insn_format20bc4225 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT20t_in_insn_format20t4262 = new BitSet(new long[]{0x0000000000080000L}); - public static final BitSet FOLLOW_label_ref_in_insn_format20t4264 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_FIELD_in_insn_format21c_field4294 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format21c_field4296 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format21c_field4298 = new BitSet(new long[]{0xF4795C8000808550L,0x0000000000E0FB16L,0x8B86800000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_field_reference_in_insn_format21c_field4300 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_FIELD_ODEX_in_insn_format21c_field_odex4332 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format21c_field_odex4334 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format21c_field_odex4336 = new BitSet(new long[]{0xF4795C8000808550L,0x0000000000E0FB16L,0x8B86800000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_field_reference_in_insn_format21c_field_odex4338 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_STRING_in_insn_format21c_string4376 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format21c_string4378 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format21c_string4380 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_insn_format21c_string4382 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_TYPE_in_insn_format21c_type4414 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format21c_type4416 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format21c_type4418 = new BitSet(new long[]{0x0000000000008100L,0x0000000000000000L,0x0200000000000000L}); - public static final BitSet FOLLOW_nonvoid_type_descriptor_in_insn_format21c_type4420 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT21ih_in_insn_format21ih4452 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format21ih4454 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format21ih4456 = new BitSet(new long[]{0x000000C000004C00L,0x0000000000000000L,0x4102400000000000L}); - public static final BitSet FOLLOW_fixed_32bit_literal_in_insn_format21ih4458 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT21lh_in_insn_format21lh4490 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format21lh4492 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format21lh4494 = new BitSet(new long[]{0x000000C000004C00L,0x0000000000000000L,0x4102400000000000L}); - public static final BitSet FOLLOW_fixed_32bit_literal_in_insn_format21lh4496 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT21s_in_insn_format21s4528 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format21s4530 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format21s4532 = new BitSet(new long[]{0x0000000000004800L,0x0000000000000000L,0x4102400000000000L}); - public static final BitSet FOLLOW_integral_literal_in_insn_format21s4534 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT21t_in_insn_format21t4566 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format21t4568 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format21t4570 = new BitSet(new long[]{0x0000000000080000L}); - public static final BitSet FOLLOW_label_ref_in_insn_format21t4572 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT22b_in_insn_format22b4604 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22b4606 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format22b4608 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22b4610 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format22b4612 = new BitSet(new long[]{0x0000000000004800L,0x0000000000000000L,0x4102400000000000L}); - public static final BitSet FOLLOW_integral_literal_in_insn_format22b4614 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT22c_FIELD_in_insn_format22c_field4648 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22c_field4650 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format22c_field4652 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22c_field4654 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format22c_field4656 = new BitSet(new long[]{0xF4795C8000808550L,0x0000000000E0FB16L,0x8B86800000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_field_reference_in_insn_format22c_field4658 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT22c_FIELD_ODEX_in_insn_format22c_field_odex4692 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22c_field_odex4694 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format22c_field_odex4696 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22c_field_odex4698 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format22c_field_odex4700 = new BitSet(new long[]{0xF4795C8000808550L,0x0000000000E0FB16L,0x8B86800000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_field_reference_in_insn_format22c_field_odex4702 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT22c_TYPE_in_insn_format22c_type4742 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22c_type4744 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format22c_type4746 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22c_type4748 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format22c_type4750 = new BitSet(new long[]{0x0000000000008100L,0x0000000000000000L,0x0200000000000000L}); - public static final BitSet FOLLOW_nonvoid_type_descriptor_in_insn_format22c_type4752 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT22cs_FIELD_in_insn_format22cs_field4786 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22cs_field4788 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format22cs_field4790 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22cs_field4792 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format22cs_field4794 = new BitSet(new long[]{0x0000002000000000L}); - public static final BitSet FOLLOW_FIELD_OFFSET_in_insn_format22cs_field4796 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_instruction_format22s_in_insn_format22s4817 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22s4819 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format22s4821 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22s4823 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format22s4825 = new BitSet(new long[]{0x0000000000004800L,0x0000000000000000L,0x4102400000000000L}); - public static final BitSet FOLLOW_integral_literal_in_insn_format22s4827 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT22t_in_insn_format22t4861 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22t4863 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format22t4865 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22t4867 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format22t4869 = new BitSet(new long[]{0x0000000000080000L}); - public static final BitSet FOLLOW_label_ref_in_insn_format22t4871 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT22x_in_insn_format22x4905 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22x4907 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format22x4909 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22x4911 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT23x_in_insn_format23x4943 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format23x4945 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format23x4947 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format23x4949 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format23x4951 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format23x4953 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT30t_in_insn_format30t4987 = new BitSet(new long[]{0x0000000000080000L}); - public static final BitSet FOLLOW_label_ref_in_insn_format30t4989 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT31c_in_insn_format31c5019 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format31c5021 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format31c5023 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_insn_format31c5025 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_instruction_format31i_in_insn_format31i5056 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format31i5058 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format31i5060 = new BitSet(new long[]{0x000000C000004C00L,0x0000000000000000L,0x4102400000000000L}); - public static final BitSet FOLLOW_fixed_32bit_literal_in_insn_format31i5062 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT31t_in_insn_format31t5094 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format31t5096 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format31t5098 = new BitSet(new long[]{0x0000000000080000L}); - public static final BitSet FOLLOW_label_ref_in_insn_format31t5100 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT32x_in_insn_format32x5132 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format32x5134 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format32x5136 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format32x5138 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT35c_METHOD_in_insn_format35c_method5170 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L}); - public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format35c_method5172 = new BitSet(new long[]{0x0000000000020000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_register_list_in_insn_format35c_method5174 = new BitSet(new long[]{0x0000000000020000L}); - public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format35c_method5176 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format35c_method5178 = new BitSet(new long[]{0xF4795C8000808550L,0x0000000000E0FB16L,0x8B86800000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_method_reference_in_insn_format35c_method5180 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT35c_TYPE_in_insn_format35c_type5212 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L}); - public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format35c_type5214 = new BitSet(new long[]{0x0000000000020000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_register_list_in_insn_format35c_type5216 = new BitSet(new long[]{0x0000000000020000L}); - public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format35c_type5218 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format35c_type5220 = new BitSet(new long[]{0x0000000000008100L,0x0000000000000000L,0x0200000000000000L}); - public static final BitSet FOLLOW_nonvoid_type_descriptor_in_insn_format35c_type5222 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT35c_METHOD_ODEX_in_insn_format35c_method_odex5254 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L}); - public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format35c_method_odex5256 = new BitSet(new long[]{0x0000000000020000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_register_list_in_insn_format35c_method_odex5258 = new BitSet(new long[]{0x0000000000020000L}); - public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format35c_method_odex5260 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format35c_method_odex5262 = new BitSet(new long[]{0xF4795C8000808550L,0x0000000000E0FB16L,0x8B86800000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_method_reference_in_insn_format35c_method_odex5264 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT35mi_METHOD_in_insn_format35mi_method5285 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L}); - public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format35mi_method5287 = new BitSet(new long[]{0x0000000000020000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_register_list_in_insn_format35mi_method5289 = new BitSet(new long[]{0x0000000000020000L}); - public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format35mi_method5291 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format35mi_method5293 = new BitSet(new long[]{0x0000020000000000L}); - public static final BitSet FOLLOW_INLINE_INDEX_in_insn_format35mi_method5295 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT35ms_METHOD_in_insn_format35ms_method5316 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L}); - public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format35ms_method5318 = new BitSet(new long[]{0x0000000000020000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_register_list_in_insn_format35ms_method5320 = new BitSet(new long[]{0x0000000000020000L}); - public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format35ms_method5322 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format35ms_method5324 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000080L}); - public static final BitSet FOLLOW_VTABLE_INDEX_in_insn_format35ms_method5326 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT3rc_METHOD_in_insn_format3rc_method5347 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L}); - public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format3rc_method5349 = new BitSet(new long[]{0x0000000000020000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_register_range_in_insn_format3rc_method5351 = new BitSet(new long[]{0x0000000000020000L}); - public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format3rc_method5353 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format3rc_method5355 = new BitSet(new long[]{0xF4795C8000808550L,0x0000000000E0FB16L,0x8B86800000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_method_reference_in_insn_format3rc_method5357 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT3rc_METHOD_ODEX_in_insn_format3rc_method_odex5389 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L}); - public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format3rc_method_odex5391 = new BitSet(new long[]{0x0000000000020000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_register_list_in_insn_format3rc_method_odex5393 = new BitSet(new long[]{0x0000000000020000L}); - public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format3rc_method_odex5395 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format3rc_method_odex5397 = new BitSet(new long[]{0xF4795C8000808550L,0x0000000000E0FB16L,0x8B86800000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_method_reference_in_insn_format3rc_method_odex5399 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT3rc_TYPE_in_insn_format3rc_type5420 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L}); - public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format3rc_type5422 = new BitSet(new long[]{0x0000000000020000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_register_range_in_insn_format3rc_type5424 = new BitSet(new long[]{0x0000000000020000L}); - public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format3rc_type5426 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format3rc_type5428 = new BitSet(new long[]{0x0000000000008100L,0x0000000000000000L,0x0200000000000000L}); - public static final BitSet FOLLOW_nonvoid_type_descriptor_in_insn_format3rc_type5430 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT3rmi_METHOD_in_insn_format3rmi_method5462 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L}); - public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format3rmi_method5464 = new BitSet(new long[]{0x0000000000020000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_register_range_in_insn_format3rmi_method5466 = new BitSet(new long[]{0x0000000000020000L}); - public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format3rmi_method5468 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format3rmi_method5470 = new BitSet(new long[]{0x0000020000000000L}); - public static final BitSet FOLLOW_INLINE_INDEX_in_insn_format3rmi_method5472 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT3rms_METHOD_in_insn_format3rms_method5493 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L}); - public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format3rms_method5495 = new BitSet(new long[]{0x0000000000020000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_register_range_in_insn_format3rms_method5497 = new BitSet(new long[]{0x0000000000020000L}); - public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format3rms_method5499 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format3rms_method5501 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000080L}); - public static final BitSet FOLLOW_VTABLE_INDEX_in_insn_format3rms_method5503 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT45cc_METHOD_in_insn_format45cc_method5524 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L}); - public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format45cc_method5526 = new BitSet(new long[]{0x0000000000020000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_register_list_in_insn_format45cc_method5528 = new BitSet(new long[]{0x0000000000020000L}); - public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format45cc_method5530 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format45cc_method5532 = new BitSet(new long[]{0xF4795C8000808550L,0x0000000000E0FB16L,0x8B86800000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_method_reference_in_insn_format45cc_method5534 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format45cc_method5536 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0010000000000000L}); - public static final BitSet FOLLOW_method_prototype_in_insn_format45cc_method5538 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT4rcc_METHOD_in_insn_format4rcc_method5572 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L}); - public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format4rcc_method5574 = new BitSet(new long[]{0x0000000000020000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_register_range_in_insn_format4rcc_method5576 = new BitSet(new long[]{0x0000000000020000L}); - public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format4rcc_method5578 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format4rcc_method5580 = new BitSet(new long[]{0xF4795C8000808550L,0x0000000000E0FB16L,0x8B86800000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_method_reference_in_insn_format4rcc_method5582 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format4rcc_method5584 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0010000000000000L}); - public static final BitSet FOLLOW_method_prototype_in_insn_format4rcc_method5586 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT51l_in_insn_format51l5620 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format51l5622 = new BitSet(new long[]{0x0000000000100000L}); - public static final BitSet FOLLOW_COMMA_in_insn_format51l5624 = new BitSet(new long[]{0x000000C000C04C00L,0x0000000000000000L,0x4102400000000000L}); - public static final BitSet FOLLOW_fixed_literal_in_insn_format51l5626 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ARRAY_DATA_DIRECTIVE_in_insn_array_data_directive5653 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0102000000000000L}); - public static final BitSet FOLLOW_parsed_integer_literal_in_insn_array_data_directive5659 = new BitSet(new long[]{0x000000C002C04C00L,0x0000000000000000L,0x4102400000000000L}); - public static final BitSet FOLLOW_fixed_literal_in_insn_array_data_directive5671 = new BitSet(new long[]{0x000000C002C04C00L,0x0000000000000000L,0x4102400000000000L}); - public static final BitSet FOLLOW_END_ARRAY_DATA_DIRECTIVE_in_insn_array_data_directive5674 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_PACKED_SWITCH_DIRECTIVE_in_insn_packed_switch_directive5720 = new BitSet(new long[]{0x000000C000004C00L,0x0000000000000000L,0x4102400000000000L}); - public static final BitSet FOLLOW_fixed_32bit_literal_in_insn_packed_switch_directive5726 = new BitSet(new long[]{0x0000000020080000L}); - public static final BitSet FOLLOW_label_ref_in_insn_packed_switch_directive5732 = new BitSet(new long[]{0x0000000020080000L}); - public static final BitSet FOLLOW_END_PACKED_SWITCH_DIRECTIVE_in_insn_packed_switch_directive5739 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_SPARSE_SWITCH_DIRECTIVE_in_insn_sparse_switch_directive5813 = new BitSet(new long[]{0x000000C080004C00L,0x0000000000000000L,0x4102400000000000L}); - public static final BitSet FOLLOW_fixed_32bit_literal_in_insn_sparse_switch_directive5820 = new BitSet(new long[]{0x0000000000000200L}); - public static final BitSet FOLLOW_ARROW_in_insn_sparse_switch_directive5822 = new BitSet(new long[]{0x0000000000080000L}); - public static final BitSet FOLLOW_label_ref_in_insn_sparse_switch_directive5824 = new BitSet(new long[]{0x000000C080004C00L,0x0000000000000000L,0x4102400000000000L}); - public static final BitSet FOLLOW_END_SPARSE_SWITCH_DIRECTIVE_in_insn_sparse_switch_directive5832 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_class_spec_in_smali_file1140 = new BitSet(new long[]{0x0000022000020020L,0x0000000000000000L,0x2000000000000000L,0x0000000000088000L}); + public static final BitSet FOLLOW_super_spec_in_smali_file1151 = new BitSet(new long[]{0x0000022000020020L,0x0000000000000000L,0x2000000000000000L,0x0000000000088000L}); + public static final BitSet FOLLOW_implements_spec_in_smali_file1159 = new BitSet(new long[]{0x0000022000020020L,0x0000000000000000L,0x2000000000000000L,0x0000000000088000L}); + public static final BitSet FOLLOW_source_spec_in_smali_file1168 = new BitSet(new long[]{0x0000022000020020L,0x0000000000000000L,0x2000000000000000L,0x0000000000088000L}); + public static final BitSet FOLLOW_method_in_smali_file1176 = new BitSet(new long[]{0x0000022000020020L,0x0000000000000000L,0x2000000000000000L,0x0000000000088000L}); + public static final BitSet FOLLOW_field_in_smali_file1182 = new BitSet(new long[]{0x0000022000020020L,0x0000000000000000L,0x2000000000000000L,0x0000000000088000L}); + public static final BitSet FOLLOW_annotation_in_smali_file1188 = new BitSet(new long[]{0x0000022000020020L,0x0000000000000000L,0x2000000000000000L,0x0000000000088000L}); + public static final BitSet FOLLOW_EOF_in_smali_file1199 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CLASS_DIRECTIVE_in_class_spec1286 = new BitSet(new long[]{0x0000000000010010L}); + public static final BitSet FOLLOW_access_list_in_class_spec1288 = new BitSet(new long[]{0x0000000000010000L}); + public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_class_spec1290 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_SUPER_DIRECTIVE_in_super_spec1308 = new BitSet(new long[]{0x0000000000010000L}); + public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_super_spec1310 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_IMPLEMENTS_DIRECTIVE_in_implements_spec1329 = new BitSet(new long[]{0x0000000000010000L}); + public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_implements_spec1331 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_SOURCE_DIRECTIVE_in_source_spec1350 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000020000L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_source_spec1352 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ACCESS_SPEC_in_access_list1371 = new BitSet(new long[]{0x0000000000000012L}); + public static final BitSet FOLLOW_FIELD_DIRECTIVE_in_field1402 = new BitSet(new long[]{0xA3F2B90001000850L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_access_list_in_field1404 = new BitSet(new long[]{0xA3F2B90001000850L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_member_name_in_field1406 = new BitSet(new long[]{0x0000000000100000L}); + public static final BitSet FOLLOW_COLON_in_field1408 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L}); + public static final BitSet FOLLOW_nonvoid_type_descriptor_in_field1410 = new BitSet(new long[]{0x0000001008000022L}); + public static final BitSet FOLLOW_EQUAL_in_field1413 = new BitSet(new long[]{0xA3F2B98401819950L,0x00000000381FD8B7L,0xD800000000000000L,0x00000000003665CFL}); + public static final BitSet FOLLOW_literal_in_field1415 = new BitSet(new long[]{0x0000000008000022L}); + public static final BitSet FOLLOW_annotation_in_field1428 = new BitSet(new long[]{0x0000000008000022L}); + public static final BitSet FOLLOW_END_FIELD_DIRECTIVE_in_field1442 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_METHOD_DIRECTIVE_in_method1553 = new BitSet(new long[]{0xA3F2B90001000850L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_access_list_in_method1555 = new BitSet(new long[]{0xA3F2B90001000850L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_member_name_in_method1557 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000008L}); + public static final BitSet FOLLOW_method_prototype_in_method1559 = new BitSet(new long[]{0xFFFFF808301060A0L,0x000000003FFFFFFFL,0x0700000000000000L,0x0000000000019A30L}); + public static final BitSet FOLLOW_statements_and_directives_in_method1561 = new BitSet(new long[]{0x0000000020000000L}); + public static final BitSet FOLLOW_END_METHOD_DIRECTIVE_in_method1567 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ordered_method_item_in_statements_and_directives1612 = new BitSet(new long[]{0xFFFFF808101060A2L,0x000000003FFFFFFFL,0x0700000000000000L,0x0000000000019A30L}); + public static final BitSet FOLLOW_registers_directive_in_statements_and_directives1620 = new BitSet(new long[]{0xFFFFF808101060A2L,0x000000003FFFFFFFL,0x0700000000000000L,0x0000000000019A30L}); + public static final BitSet FOLLOW_catch_directive_in_statements_and_directives1628 = new BitSet(new long[]{0xFFFFF808101060A2L,0x000000003FFFFFFFL,0x0700000000000000L,0x0000000000019A30L}); + public static final BitSet FOLLOW_catchall_directive_in_statements_and_directives1636 = new BitSet(new long[]{0xFFFFF808101060A2L,0x000000003FFFFFFFL,0x0700000000000000L,0x0000000000019A30L}); + public static final BitSet FOLLOW_parameter_directive_in_statements_and_directives1644 = new BitSet(new long[]{0xFFFFF808101060A2L,0x000000003FFFFFFFL,0x0700000000000000L,0x0000000000019A30L}); + public static final BitSet FOLLOW_annotation_in_statements_and_directives1652 = new BitSet(new long[]{0xFFFFF808101060A2L,0x000000003FFFFFFFL,0x0700000000000000L,0x0000000000019A30L}); + public static final BitSet FOLLOW_label_in_ordered_method_item1737 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_instruction_in_ordered_method_item1743 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_debug_directive_in_ordered_method_item1749 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_REGISTERS_DIRECTIVE_in_registers_directive1769 = new BitSet(new long[]{0x0000000000009000L,0x0000000000000000L,0x0800000000000000L,0x0000000000002081L}); + public static final BitSet FOLLOW_integral_literal_in_registers_directive1773 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LOCALS_DIRECTIVE_in_registers_directive1793 = new BitSet(new long[]{0x0000000000009000L,0x0000000000000000L,0x0800000000000000L,0x0000000000002081L}); + public static final BitSet FOLLOW_integral_literal_in_registers_directive1797 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_PARAM_LIST_OR_ID_PRIMITIVE_TYPE_in_param_list_or_id1829 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000000L,0x0000000000000040L}); + public static final BitSet FOLLOW_SIMPLE_NAME_in_simple_name1842 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ACCESS_SPEC_in_simple_name1848 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_VERIFICATION_ERROR_TYPE_in_simple_name1859 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_POSITIVE_INTEGER_LITERAL_in_simple_name1870 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_NEGATIVE_INTEGER_LITERAL_in_simple_name1881 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_FLOAT_LITERAL_OR_ID_in_simple_name1892 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DOUBLE_LITERAL_OR_ID_in_simple_name1903 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_BOOL_LITERAL_in_simple_name1914 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_NULL_LITERAL_in_simple_name1925 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_REGISTER_in_simple_name1936 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_param_list_or_id_in_simple_name1947 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_PRIMITIVE_TYPE_in_simple_name1957 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_VOID_TYPE_in_simple_name1968 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ANNOTATION_VISIBILITY_in_simple_name1979 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_METHOD_HANDLE_TYPE_FIELD_in_simple_name1990 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_METHOD_HANDLE_TYPE_METHOD_in_simple_name1996 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT10t_in_simple_name2002 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT10x_in_simple_name2013 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT10x_ODEX_in_simple_name2024 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT11x_in_simple_name2035 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT12x_OR_ID_in_simple_name2046 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_FIELD_in_simple_name2057 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_FIELD_ODEX_in_simple_name2068 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_METHOD_HANDLE_in_simple_name2079 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_METHOD_TYPE_in_simple_name2090 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_STRING_in_simple_name2101 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_TYPE_in_simple_name2112 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21t_in_simple_name2123 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT22c_FIELD_in_simple_name2134 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT22c_FIELD_ODEX_in_simple_name2145 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT22c_TYPE_in_simple_name2156 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT22cs_FIELD_in_simple_name2167 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT22s_OR_ID_in_simple_name2178 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT22t_in_simple_name2189 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT23x_in_simple_name2200 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT31i_OR_ID_in_simple_name2211 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT31t_in_simple_name2222 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT35c_CALL_SITE_in_simple_name2233 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT35c_METHOD_in_simple_name2244 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT35c_METHOD_ODEX_in_simple_name2255 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE_in_simple_name2266 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT35c_TYPE_in_simple_name2277 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT35mi_METHOD_in_simple_name2288 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT35ms_METHOD_in_simple_name2299 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT45cc_METHOD_in_simple_name2310 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT4rcc_METHOD_in_simple_name2321 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT51l_in_simple_name2332 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_simple_name_in_member_name2347 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_MEMBER_NAME_in_member_name2353 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_OPEN_PAREN_in_method_prototype2368 = new BitSet(new long[]{0x0000000000090100L,0x0000000000000000L,0x0000000000000000L,0x0000000000000140L}); + public static final BitSet FOLLOW_param_list_in_method_prototype2370 = new BitSet(new long[]{0x0000000000080000L}); + public static final BitSet FOLLOW_CLOSE_PAREN_in_method_prototype2372 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000200100L}); + public static final BitSet FOLLOW_type_descriptor_in_method_prototype2374 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_PARAM_LIST_OR_ID_PRIMITIVE_TYPE_in_param_list_or_id_primitive_type2404 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_param_list_or_id_primitive_type_in_param_list2419 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000000L,0x0000000000000040L}); + public static final BitSet FOLLOW_nonvoid_type_descriptor_in_param_list2426 = new BitSet(new long[]{0x0000000000010102L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L}); + public static final BitSet FOLLOW_ARRAY_TYPE_PREFIX_in_array_descriptor2437 = new BitSet(new long[]{0x0000000000010000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L}); + public static final BitSet FOLLOW_set_in_array_descriptor2439 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_VOID_TYPE_in_type_descriptor2455 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_PRIMITIVE_TYPE_in_type_descriptor2461 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_type_descriptor2467 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_array_descriptor_in_type_descriptor2473 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_PRIMITIVE_TYPE_in_nonvoid_type_descriptor2483 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_nonvoid_type_descriptor2489 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_array_descriptor_in_nonvoid_type_descriptor2495 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_reference_type_descriptor2505 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_array_descriptor_in_reference_type_descriptor2511 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_POSITIVE_INTEGER_LITERAL_in_integer_literal2521 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_NEGATIVE_INTEGER_LITERAL_in_integer_literal2532 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_FLOAT_LITERAL_OR_ID_in_float_literal2547 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_FLOAT_LITERAL_in_float_literal2558 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DOUBLE_LITERAL_OR_ID_in_double_literal2568 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DOUBLE_LITERAL_in_double_literal2579 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LONG_LITERAL_in_literal2589 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_integer_literal_in_literal2595 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_SHORT_LITERAL_in_literal2601 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_BYTE_LITERAL_in_literal2607 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_float_literal_in_literal2613 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_double_literal_in_literal2619 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CHAR_LITERAL_in_literal2625 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_literal2631 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_BOOL_LITERAL_in_literal2637 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_NULL_LITERAL_in_literal2643 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_array_literal_in_literal2649 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_subannotation_in_literal2655 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_type_field_method_literal_in_literal2661 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_enum_literal_in_literal2667 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_method_handle_literal_in_literal2673 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_method_prototype_in_literal2679 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_integer_literal_in_parsed_integer_literal2692 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LONG_LITERAL_in_integral_literal2704 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_integer_literal_in_integral_literal2710 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_SHORT_LITERAL_in_integral_literal2716 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CHAR_LITERAL_in_integral_literal2722 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_BYTE_LITERAL_in_integral_literal2728 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LONG_LITERAL_in_fixed_32bit_literal2738 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_integer_literal_in_fixed_32bit_literal2744 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_SHORT_LITERAL_in_fixed_32bit_literal2750 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_BYTE_LITERAL_in_fixed_32bit_literal2756 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_float_literal_in_fixed_32bit_literal2762 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CHAR_LITERAL_in_fixed_32bit_literal2768 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_BOOL_LITERAL_in_fixed_32bit_literal2774 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_integer_literal_in_fixed_literal2784 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LONG_LITERAL_in_fixed_literal2790 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_SHORT_LITERAL_in_fixed_literal2796 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_BYTE_LITERAL_in_fixed_literal2802 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_float_literal_in_fixed_literal2808 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_double_literal_in_fixed_literal2814 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CHAR_LITERAL_in_fixed_literal2820 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_BOOL_LITERAL_in_fixed_literal2826 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_OPEN_BRACE_in_array_literal2836 = new BitSet(new long[]{0xA3F2B98401859950L,0x00000000381FD8B7L,0xD800000000000000L,0x00000000003665CFL}); + public static final BitSet FOLLOW_literal_in_array_literal2839 = new BitSet(new long[]{0x0000000000240000L}); + public static final BitSet FOLLOW_COMMA_in_array_literal2842 = new BitSet(new long[]{0xA3F2B98401819950L,0x00000000381FD8B7L,0xD800000000000000L,0x00000000003665CFL}); + public static final BitSet FOLLOW_literal_in_array_literal2844 = new BitSet(new long[]{0x0000000000240000L}); + public static final BitSet FOLLOW_CLOSE_BRACE_in_array_literal2852 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_simple_name_in_annotation_element2876 = new BitSet(new long[]{0x0000001000000000L}); + public static final BitSet FOLLOW_EQUAL_in_annotation_element2878 = new BitSet(new long[]{0xA3F2B98401819950L,0x00000000381FD8B7L,0xD800000000000000L,0x00000000003665CFL}); + public static final BitSet FOLLOW_literal_in_annotation_element2880 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ANNOTATION_DIRECTIVE_in_annotation2905 = new BitSet(new long[]{0x0000000000000040L}); + public static final BitSet FOLLOW_ANNOTATION_VISIBILITY_in_annotation2907 = new BitSet(new long[]{0x0000000000010000L}); + public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_annotation2909 = new BitSet(new long[]{0xA3F2B90003000850L,0x00000000381FD8B7L,0xC000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_annotation_element_in_annotation2915 = new BitSet(new long[]{0xA3F2B90003000850L,0x00000000381FD8B7L,0xC000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_END_ANNOTATION_DIRECTIVE_in_annotation2918 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_SUBANNOTATION_DIRECTIVE_in_subannotation2951 = new BitSet(new long[]{0x0000000000010000L}); + public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_subannotation2953 = new BitSet(new long[]{0xA3F2B90201000850L,0x00000000381FD8B7L,0xC000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_annotation_element_in_subannotation2955 = new BitSet(new long[]{0xA3F2B90201000850L,0x00000000381FD8B7L,0xC000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_END_SUBANNOTATION_DIRECTIVE_in_subannotation2958 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ENUM_DIRECTIVE_in_enum_literal2985 = new BitSet(new long[]{0xA3F2B90001010950L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_field_reference_in_enum_literal2987 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_reference_type_descriptor_in_type_field_method_literal3007 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_reference_type_descriptor_in_type_field_method_literal3016 = new BitSet(new long[]{0x0000000000000200L}); + public static final BitSet FOLLOW_ARROW_in_type_field_method_literal3018 = new BitSet(new long[]{0xA3F2B90001000850L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_member_name_in_type_field_method_literal3030 = new BitSet(new long[]{0x0000000000100000L}); + public static final BitSet FOLLOW_COLON_in_type_field_method_literal3032 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L}); + public static final BitSet FOLLOW_nonvoid_type_descriptor_in_type_field_method_literal3034 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_member_name_in_type_field_method_literal3057 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000008L}); + public static final BitSet FOLLOW_method_prototype_in_type_field_method_literal3059 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_PRIMITIVE_TYPE_in_type_field_method_literal3092 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_VOID_TYPE_in_type_field_method_literal3098 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_simple_name_in_call_site_reference3108 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000008L}); + public static final BitSet FOLLOW_OPEN_PAREN_in_call_site_reference3110 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000020000L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_call_site_reference3112 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_call_site_reference3114 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000008L}); + public static final BitSet FOLLOW_method_prototype_in_call_site_reference3116 = new BitSet(new long[]{0x0000000000280000L}); + public static final BitSet FOLLOW_COMMA_in_call_site_reference3119 = new BitSet(new long[]{0xA3F2B98401819950L,0x00000000381FD8B7L,0xD800000000000000L,0x00000000003665CFL}); + public static final BitSet FOLLOW_literal_in_call_site_reference3121 = new BitSet(new long[]{0x0000000000280000L}); + public static final BitSet FOLLOW_CLOSE_PAREN_in_call_site_reference3125 = new BitSet(new long[]{0x0000000000000400L}); + public static final BitSet FOLLOW_AT_in_call_site_reference3127 = new BitSet(new long[]{0xA3F2B90001010950L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_method_reference_in_call_site_reference3129 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_METHOD_HANDLE_TYPE_FIELD_in_method_handle_reference3173 = new BitSet(new long[]{0x0000000000000400L}); + public static final BitSet FOLLOW_AT_in_method_handle_reference3175 = new BitSet(new long[]{0xA3F2B90001010950L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_field_reference_in_method_handle_reference3177 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_METHOD_HANDLE_TYPE_METHOD_in_method_handle_reference3189 = new BitSet(new long[]{0x0000000000000400L}); + public static final BitSet FOLLOW_AT_in_method_handle_reference3191 = new BitSet(new long[]{0xA3F2B90001010950L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_method_reference_in_method_handle_reference3193 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE_in_method_handle_reference3205 = new BitSet(new long[]{0x0000000000000400L}); + public static final BitSet FOLLOW_AT_in_method_handle_reference3207 = new BitSet(new long[]{0xA3F2B90001010950L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_method_reference_in_method_handle_reference3209 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_method_handle_reference_in_method_handle_literal3225 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_reference_type_descriptor_in_method_reference3246 = new BitSet(new long[]{0x0000000000000200L}); + public static final BitSet FOLLOW_ARROW_in_method_reference3248 = new BitSet(new long[]{0xA3F2B90001000850L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_member_name_in_method_reference3252 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000008L}); + public static final BitSet FOLLOW_method_prototype_in_method_reference3254 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_reference_type_descriptor_in_field_reference3276 = new BitSet(new long[]{0x0000000000000200L}); + public static final BitSet FOLLOW_ARROW_in_field_reference3278 = new BitSet(new long[]{0xA3F2B90001000850L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_member_name_in_field_reference3282 = new BitSet(new long[]{0x0000000000100000L}); + public static final BitSet FOLLOW_COLON_in_field_reference3284 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L}); + public static final BitSet FOLLOW_nonvoid_type_descriptor_in_field_reference3286 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_COLON_in_label3307 = new BitSet(new long[]{0xA3F2B90001000850L,0x00000000381FD8B7L,0xC000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_simple_name_in_label3309 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_COLON_in_label_ref3328 = new BitSet(new long[]{0xA3F2B90001000850L,0x00000000381FD8B7L,0xC000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_simple_name_in_label_ref3330 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_REGISTER_in_register_list3344 = new BitSet(new long[]{0x0000000000200002L}); + public static final BitSet FOLLOW_COMMA_in_register_list3347 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_register_list3349 = new BitSet(new long[]{0x0000000000200002L}); + public static final BitSet FOLLOW_REGISTER_in_register_range3384 = new BitSet(new long[]{0x0000000000400002L}); + public static final BitSet FOLLOW_DOTDOT_in_register_range3387 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_register_range3391 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_verification_error_reference3420 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_field_reference_in_verification_error_reference3424 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_method_reference_in_verification_error_reference3428 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CATCH_DIRECTIVE_in_catch_directive3438 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L}); + public static final BitSet FOLLOW_nonvoid_type_descriptor_in_catch_directive3440 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); + public static final BitSet FOLLOW_OPEN_BRACE_in_catch_directive3442 = new BitSet(new long[]{0x0000000000100000L}); + public static final BitSet FOLLOW_label_ref_in_catch_directive3446 = new BitSet(new long[]{0x0000000000400000L}); + public static final BitSet FOLLOW_DOTDOT_in_catch_directive3448 = new BitSet(new long[]{0x0000000000100000L}); + public static final BitSet FOLLOW_label_ref_in_catch_directive3452 = new BitSet(new long[]{0x0000000000040000L}); + public static final BitSet FOLLOW_CLOSE_BRACE_in_catch_directive3454 = new BitSet(new long[]{0x0000000000100000L}); + public static final BitSet FOLLOW_label_ref_in_catch_directive3458 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CATCHALL_DIRECTIVE_in_catchall_directive3490 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); + public static final BitSet FOLLOW_OPEN_BRACE_in_catchall_directive3492 = new BitSet(new long[]{0x0000000000100000L}); + public static final BitSet FOLLOW_label_ref_in_catchall_directive3496 = new BitSet(new long[]{0x0000000000400000L}); + public static final BitSet FOLLOW_DOTDOT_in_catchall_directive3498 = new BitSet(new long[]{0x0000000000100000L}); + public static final BitSet FOLLOW_label_ref_in_catchall_directive3502 = new BitSet(new long[]{0x0000000000040000L}); + public static final BitSet FOLLOW_CLOSE_BRACE_in_catchall_directive3504 = new BitSet(new long[]{0x0000000000100000L}); + public static final BitSet FOLLOW_label_ref_in_catchall_directive3508 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_PARAMETER_DIRECTIVE_in_parameter_directive3547 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_parameter_directive3549 = new BitSet(new long[]{0x0000000080200022L}); + public static final BitSet FOLLOW_COMMA_in_parameter_directive3552 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000020000L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_parameter_directive3554 = new BitSet(new long[]{0x0000000080000022L}); + public static final BitSet FOLLOW_annotation_in_parameter_directive3565 = new BitSet(new long[]{0x0000000080000022L}); + public static final BitSet FOLLOW_END_PARAMETER_DIRECTIVE_in_parameter_directive3578 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_line_directive_in_debug_directive3651 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_local_directive_in_debug_directive3657 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_end_local_directive_in_debug_directive3663 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_restart_local_directive_in_debug_directive3669 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_prologue_directive_in_debug_directive3675 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_epilogue_directive_in_debug_directive3681 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_source_directive_in_debug_directive3687 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LINE_DIRECTIVE_in_line_directive3697 = new BitSet(new long[]{0x0000000000009000L,0x0000000000000000L,0x0800000000000000L,0x0000000000002081L}); + public static final BitSet FOLLOW_integral_literal_in_line_directive3699 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LOCAL_DIRECTIVE_in_local_directive3722 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_local_directive3724 = new BitSet(new long[]{0x0000000000200002L}); + public static final BitSet FOLLOW_COMMA_in_local_directive3727 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000020002L}); + public static final BitSet FOLLOW_NULL_LITERAL_in_local_directive3730 = new BitSet(new long[]{0x0000000000100000L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_local_directive3736 = new BitSet(new long[]{0x0000000000100000L}); + public static final BitSet FOLLOW_COLON_in_local_directive3739 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000200100L}); + public static final BitSet FOLLOW_VOID_TYPE_in_local_directive3742 = new BitSet(new long[]{0x0000000000200002L}); + public static final BitSet FOLLOW_nonvoid_type_descriptor_in_local_directive3746 = new BitSet(new long[]{0x0000000000200002L}); + public static final BitSet FOLLOW_COMMA_in_local_directive3780 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000020000L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_local_directive3784 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_END_LOCAL_DIRECTIVE_in_end_local_directive3826 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_end_local_directive3828 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_RESTART_LOCAL_DIRECTIVE_in_restart_local_directive3851 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_restart_local_directive3853 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_PROLOGUE_DIRECTIVE_in_prologue_directive3876 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_EPILOGUE_DIRECTIVE_in_epilogue_directive3897 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_SOURCE_DIRECTIVE_in_source_directive3918 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000000L,0x0000000000020000L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_source_directive3920 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT12x_in_instruction_format12x3945 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT12x_OR_ID_in_instruction_format12x3951 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT22s_in_instruction_format22s3966 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT22s_OR_ID_in_instruction_format22s3972 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT31i_in_instruction_format31i3987 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT31i_OR_ID_in_instruction_format31i3993 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT35c_METHOD_in_instruction_format35c_method4010 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE_in_instruction_format35c_method4016 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format10t_in_instruction4031 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format10x_in_instruction4037 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format10x_odex_in_instruction4043 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format11n_in_instruction4049 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format11x_in_instruction4055 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format12x_in_instruction4061 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format20bc_in_instruction4067 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format20t_in_instruction4073 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format21c_field_in_instruction4079 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format21c_field_odex_in_instruction4085 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format21c_method_handle_in_instruction4091 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format21c_method_type_in_instruction4097 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format21c_string_in_instruction4103 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format21c_type_in_instruction4109 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format21ih_in_instruction4115 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format21lh_in_instruction4121 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format21s_in_instruction4127 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format21t_in_instruction4133 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format22b_in_instruction4139 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format22c_field_in_instruction4145 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format22c_field_odex_in_instruction4151 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format22c_type_in_instruction4157 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format22cs_field_in_instruction4163 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format22s_in_instruction4169 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format22t_in_instruction4175 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format22x_in_instruction4181 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format23x_in_instruction4187 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format30t_in_instruction4193 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format31c_in_instruction4199 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format31i_in_instruction4205 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format31t_in_instruction4211 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format32x_in_instruction4217 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format35c_call_site_in_instruction4223 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format35c_method_in_instruction4229 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format35c_type_in_instruction4235 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format35c_method_odex_in_instruction4241 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format35mi_method_in_instruction4247 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format35ms_method_in_instruction4253 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format3rc_call_site_in_instruction4259 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format3rc_method_in_instruction4265 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format3rc_method_odex_in_instruction4271 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format3rc_type_in_instruction4277 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format3rmi_method_in_instruction4283 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format3rms_method_in_instruction4289 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format45cc_method_in_instruction4295 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format4rcc_method_in_instruction4301 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format51l_in_instruction4307 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_array_data_directive_in_instruction4313 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_packed_switch_directive_in_instruction4319 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_sparse_switch_directive_in_instruction4325 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT10t_in_insn_format10t4345 = new BitSet(new long[]{0x0000000000100000L}); + public static final BitSet FOLLOW_label_ref_in_insn_format10t4347 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT10x_in_insn_format10x4377 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT10x_ODEX_in_insn_format10x_odex4405 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT11n_in_insn_format11n4426 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format11n4428 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format11n4430 = new BitSet(new long[]{0x0000000000009000L,0x0000000000000000L,0x0800000000000000L,0x0000000000002081L}); + public static final BitSet FOLLOW_integral_literal_in_insn_format11n4432 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT11x_in_insn_format11x4464 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format11x4466 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_instruction_format12x_in_insn_format12x4496 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format12x4498 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format12x4500 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format12x4502 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT20bc_in_insn_format20bc4534 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000100000L}); + public static final BitSet FOLLOW_VERIFICATION_ERROR_TYPE_in_insn_format20bc4536 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format20bc4538 = new BitSet(new long[]{0xA3F2B90001010950L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_verification_error_reference_in_insn_format20bc4540 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT20t_in_insn_format20t4577 = new BitSet(new long[]{0x0000000000100000L}); + public static final BitSet FOLLOW_label_ref_in_insn_format20t4579 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_FIELD_in_insn_format21c_field4609 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format21c_field4611 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format21c_field4613 = new BitSet(new long[]{0xA3F2B90001010950L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_field_reference_in_insn_format21c_field4615 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_FIELD_ODEX_in_insn_format21c_field_odex4647 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format21c_field_odex4649 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format21c_field_odex4651 = new BitSet(new long[]{0xA3F2B90001010950L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_field_reference_in_insn_format21c_field_odex4653 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_METHOD_HANDLE_in_insn_format21c_method_handle4691 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format21c_method_handle4693 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format21c_method_handle4695 = new BitSet(new long[]{0x0000000000000000L,0x0000000000020000L,0xC000000000000000L}); + public static final BitSet FOLLOW_method_handle_reference_in_insn_format21c_method_handle4697 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_METHOD_TYPE_in_insn_format21c_method_type4743 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format21c_method_type4745 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format21c_method_type4747 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000008L}); + public static final BitSet FOLLOW_method_prototype_in_insn_format21c_method_type4749 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_STRING_in_insn_format21c_string4793 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format21c_string4795 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format21c_string4797 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000020000L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_insn_format21c_string4799 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_TYPE_in_insn_format21c_type4831 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format21c_type4833 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format21c_type4835 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L}); + public static final BitSet FOLLOW_nonvoid_type_descriptor_in_insn_format21c_type4837 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21ih_in_insn_format21ih4869 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format21ih4871 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format21ih4873 = new BitSet(new long[]{0x0000018000009800L,0x0000000000000000L,0x0800000000000000L,0x0000000000002081L}); + public static final BitSet FOLLOW_fixed_32bit_literal_in_insn_format21ih4875 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21lh_in_insn_format21lh4907 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format21lh4909 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format21lh4911 = new BitSet(new long[]{0x0000018000009800L,0x0000000000000000L,0x0800000000000000L,0x0000000000002081L}); + public static final BitSet FOLLOW_fixed_32bit_literal_in_insn_format21lh4913 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21s_in_insn_format21s4945 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format21s4947 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format21s4949 = new BitSet(new long[]{0x0000000000009000L,0x0000000000000000L,0x0800000000000000L,0x0000000000002081L}); + public static final BitSet FOLLOW_integral_literal_in_insn_format21s4951 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21t_in_insn_format21t4983 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format21t4985 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format21t4987 = new BitSet(new long[]{0x0000000000100000L}); + public static final BitSet FOLLOW_label_ref_in_insn_format21t4989 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT22b_in_insn_format22b5021 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22b5023 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format22b5025 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22b5027 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format22b5029 = new BitSet(new long[]{0x0000000000009000L,0x0000000000000000L,0x0800000000000000L,0x0000000000002081L}); + public static final BitSet FOLLOW_integral_literal_in_insn_format22b5031 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT22c_FIELD_in_insn_format22c_field5065 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22c_field5067 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format22c_field5069 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22c_field5071 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format22c_field5073 = new BitSet(new long[]{0xA3F2B90001010950L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_field_reference_in_insn_format22c_field5075 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT22c_FIELD_ODEX_in_insn_format22c_field_odex5109 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22c_field_odex5111 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format22c_field_odex5113 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22c_field_odex5115 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format22c_field_odex5117 = new BitSet(new long[]{0xA3F2B90001010950L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_field_reference_in_insn_format22c_field_odex5119 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT22c_TYPE_in_insn_format22c_type5159 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22c_type5161 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format22c_type5163 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22c_type5165 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format22c_type5167 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L}); + public static final BitSet FOLLOW_nonvoid_type_descriptor_in_insn_format22c_type5169 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT22cs_FIELD_in_insn_format22cs_field5203 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22cs_field5205 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format22cs_field5207 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22cs_field5209 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format22cs_field5211 = new BitSet(new long[]{0x0000004000000000L}); + public static final BitSet FOLLOW_FIELD_OFFSET_in_insn_format22cs_field5213 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_instruction_format22s_in_insn_format22s5234 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22s5236 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format22s5238 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22s5240 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format22s5242 = new BitSet(new long[]{0x0000000000009000L,0x0000000000000000L,0x0800000000000000L,0x0000000000002081L}); + public static final BitSet FOLLOW_integral_literal_in_insn_format22s5244 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT22t_in_insn_format22t5278 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22t5280 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format22t5282 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22t5284 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format22t5286 = new BitSet(new long[]{0x0000000000100000L}); + public static final BitSet FOLLOW_label_ref_in_insn_format22t5288 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT22x_in_insn_format22x5322 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22x5324 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format22x5326 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22x5328 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT23x_in_insn_format23x5360 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format23x5362 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format23x5364 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format23x5366 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format23x5368 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format23x5370 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT30t_in_insn_format30t5404 = new BitSet(new long[]{0x0000000000100000L}); + public static final BitSet FOLLOW_label_ref_in_insn_format30t5406 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT31c_in_insn_format31c5436 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format31c5438 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format31c5440 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000020000L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_insn_format31c5442 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_instruction_format31i_in_insn_format31i5473 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format31i5475 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format31i5477 = new BitSet(new long[]{0x0000018000009800L,0x0000000000000000L,0x0800000000000000L,0x0000000000002081L}); + public static final BitSet FOLLOW_fixed_32bit_literal_in_insn_format31i5479 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT31t_in_insn_format31t5511 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format31t5513 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format31t5515 = new BitSet(new long[]{0x0000000000100000L}); + public static final BitSet FOLLOW_label_ref_in_insn_format31t5517 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT32x_in_insn_format32x5549 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format32x5551 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format32x5553 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format32x5555 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT35c_CALL_SITE_in_insn_format35c_call_site5592 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); + public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format35c_call_site5594 = new BitSet(new long[]{0x0000000000040000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_register_list_in_insn_format35c_call_site5596 = new BitSet(new long[]{0x0000000000040000L}); + public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format35c_call_site5598 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format35c_call_site5600 = new BitSet(new long[]{0xA3F2B90001000850L,0x00000000381FD8B7L,0xC000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_call_site_reference_in_insn_format35c_call_site5602 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_instruction_format35c_method_in_insn_format35c_method5634 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); + public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format35c_method5636 = new BitSet(new long[]{0x0000000000040000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_register_list_in_insn_format35c_method5638 = new BitSet(new long[]{0x0000000000040000L}); + public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format35c_method5640 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format35c_method5642 = new BitSet(new long[]{0xA3F2B90001010950L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_method_reference_in_insn_format35c_method5644 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT35c_TYPE_in_insn_format35c_type5676 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); + public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format35c_type5678 = new BitSet(new long[]{0x0000000000040000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_register_list_in_insn_format35c_type5680 = new BitSet(new long[]{0x0000000000040000L}); + public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format35c_type5682 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format35c_type5684 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L}); + public static final BitSet FOLLOW_nonvoid_type_descriptor_in_insn_format35c_type5686 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT35c_METHOD_ODEX_in_insn_format35c_method_odex5718 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); + public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format35c_method_odex5720 = new BitSet(new long[]{0x0000000000040000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_register_list_in_insn_format35c_method_odex5722 = new BitSet(new long[]{0x0000000000040000L}); + public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format35c_method_odex5724 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format35c_method_odex5726 = new BitSet(new long[]{0xA3F2B90001010950L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_method_reference_in_insn_format35c_method_odex5728 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT35mi_METHOD_in_insn_format35mi_method5749 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); + public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format35mi_method5751 = new BitSet(new long[]{0x0000000000040000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_register_list_in_insn_format35mi_method5753 = new BitSet(new long[]{0x0000000000040000L}); + public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format35mi_method5755 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format35mi_method5757 = new BitSet(new long[]{0x0000040000000000L}); + public static final BitSet FOLLOW_INLINE_INDEX_in_insn_format35mi_method5759 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT35ms_METHOD_in_insn_format35ms_method5780 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); + public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format35ms_method5782 = new BitSet(new long[]{0x0000000000040000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_register_list_in_insn_format35ms_method5784 = new BitSet(new long[]{0x0000000000040000L}); + public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format35ms_method5786 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format35ms_method5788 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000400000L}); + public static final BitSet FOLLOW_VTABLE_INDEX_in_insn_format35ms_method5790 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT3rc_CALL_SITE_in_insn_format3rc_call_site5816 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); + public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format3rc_call_site5818 = new BitSet(new long[]{0x0000000000040000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_register_range_in_insn_format3rc_call_site5820 = new BitSet(new long[]{0x0000000000040000L}); + public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format3rc_call_site5822 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format3rc_call_site5824 = new BitSet(new long[]{0xA3F2B90001000850L,0x00000000381FD8B7L,0xC000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_call_site_reference_in_insn_format3rc_call_site5826 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT3rc_METHOD_in_insn_format3rc_method5858 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); + public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format3rc_method5860 = new BitSet(new long[]{0x0000000000040000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_register_range_in_insn_format3rc_method5862 = new BitSet(new long[]{0x0000000000040000L}); + public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format3rc_method5864 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format3rc_method5866 = new BitSet(new long[]{0xA3F2B90001010950L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_method_reference_in_insn_format3rc_method5868 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT3rc_METHOD_ODEX_in_insn_format3rc_method_odex5900 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); + public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format3rc_method_odex5902 = new BitSet(new long[]{0x0000000000040000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_register_list_in_insn_format3rc_method_odex5904 = new BitSet(new long[]{0x0000000000040000L}); + public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format3rc_method_odex5906 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format3rc_method_odex5908 = new BitSet(new long[]{0xA3F2B90001010950L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_method_reference_in_insn_format3rc_method_odex5910 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT3rc_TYPE_in_insn_format3rc_type5931 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); + public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format3rc_type5933 = new BitSet(new long[]{0x0000000000040000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_register_range_in_insn_format3rc_type5935 = new BitSet(new long[]{0x0000000000040000L}); + public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format3rc_type5937 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format3rc_type5939 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L}); + public static final BitSet FOLLOW_nonvoid_type_descriptor_in_insn_format3rc_type5941 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT3rmi_METHOD_in_insn_format3rmi_method5973 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); + public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format3rmi_method5975 = new BitSet(new long[]{0x0000000000040000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_register_range_in_insn_format3rmi_method5977 = new BitSet(new long[]{0x0000000000040000L}); + public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format3rmi_method5979 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format3rmi_method5981 = new BitSet(new long[]{0x0000040000000000L}); + public static final BitSet FOLLOW_INLINE_INDEX_in_insn_format3rmi_method5983 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT3rms_METHOD_in_insn_format3rms_method6004 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); + public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format3rms_method6006 = new BitSet(new long[]{0x0000000000040000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_register_range_in_insn_format3rms_method6008 = new BitSet(new long[]{0x0000000000040000L}); + public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format3rms_method6010 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format3rms_method6012 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000400000L}); + public static final BitSet FOLLOW_VTABLE_INDEX_in_insn_format3rms_method6014 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT45cc_METHOD_in_insn_format45cc_method6035 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); + public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format45cc_method6037 = new BitSet(new long[]{0x0000000000040000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_register_list_in_insn_format45cc_method6039 = new BitSet(new long[]{0x0000000000040000L}); + public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format45cc_method6041 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format45cc_method6043 = new BitSet(new long[]{0xA3F2B90001010950L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_method_reference_in_insn_format45cc_method6045 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format45cc_method6047 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000008L}); + public static final BitSet FOLLOW_method_prototype_in_insn_format45cc_method6049 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT4rcc_METHOD_in_insn_format4rcc_method6083 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); + public static final BitSet FOLLOW_OPEN_BRACE_in_insn_format4rcc_method6085 = new BitSet(new long[]{0x0000000000040000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_register_range_in_insn_format4rcc_method6087 = new BitSet(new long[]{0x0000000000040000L}); + public static final BitSet FOLLOW_CLOSE_BRACE_in_insn_format4rcc_method6089 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format4rcc_method6091 = new BitSet(new long[]{0xA3F2B90001010950L,0x00000000381FD8B7L,0xD000000000000000L,0x00000000003045C3L}); + public static final BitSet FOLLOW_method_reference_in_insn_format4rcc_method6093 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format4rcc_method6095 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000008L}); + public static final BitSet FOLLOW_method_prototype_in_insn_format4rcc_method6097 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT51l_in_insn_format51l6131 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format51l6133 = new BitSet(new long[]{0x0000000000200000L}); + public static final BitSet FOLLOW_COMMA_in_insn_format51l6135 = new BitSet(new long[]{0x0000018001809800L,0x0000000000000000L,0x0800000000000000L,0x0000000000002081L}); + public static final BitSet FOLLOW_fixed_literal_in_insn_format51l6137 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ARRAY_DATA_DIRECTIVE_in_insn_array_data_directive6164 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000081L}); + public static final BitSet FOLLOW_parsed_integer_literal_in_insn_array_data_directive6170 = new BitSet(new long[]{0x0000018005809800L,0x0000000000000000L,0x0800000000000000L,0x0000000000002081L}); + public static final BitSet FOLLOW_fixed_literal_in_insn_array_data_directive6182 = new BitSet(new long[]{0x0000018005809800L,0x0000000000000000L,0x0800000000000000L,0x0000000000002081L}); + public static final BitSet FOLLOW_END_ARRAY_DATA_DIRECTIVE_in_insn_array_data_directive6185 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_PACKED_SWITCH_DIRECTIVE_in_insn_packed_switch_directive6231 = new BitSet(new long[]{0x0000018000009800L,0x0000000000000000L,0x0800000000000000L,0x0000000000002081L}); + public static final BitSet FOLLOW_fixed_32bit_literal_in_insn_packed_switch_directive6237 = new BitSet(new long[]{0x0000000040100000L}); + public static final BitSet FOLLOW_label_ref_in_insn_packed_switch_directive6243 = new BitSet(new long[]{0x0000000040100000L}); + public static final BitSet FOLLOW_END_PACKED_SWITCH_DIRECTIVE_in_insn_packed_switch_directive6250 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_SPARSE_SWITCH_DIRECTIVE_in_insn_sparse_switch_directive6324 = new BitSet(new long[]{0x0000018100009800L,0x0000000000000000L,0x0800000000000000L,0x0000000000002081L}); + public static final BitSet FOLLOW_fixed_32bit_literal_in_insn_sparse_switch_directive6331 = new BitSet(new long[]{0x0000000000000200L}); + public static final BitSet FOLLOW_ARROW_in_insn_sparse_switch_directive6333 = new BitSet(new long[]{0x0000000000100000L}); + public static final BitSet FOLLOW_label_ref_in_insn_sparse_switch_directive6335 = new BitSet(new long[]{0x0000018100009800L,0x0000000000000000L,0x0800000000000000L,0x0000000000002081L}); + public static final BitSet FOLLOW_END_SPARSE_SWITCH_DIRECTIVE_in_insn_sparse_switch_directive6343 = new BitSet(new long[]{0x0000000000000002L}); } diff --git a/smali/src/main/java/org/jf/smali/smaliTreeWalker.java b/smali/src/main/java/org/jf/smali/smaliTreeWalker.java index 30b93c46..0fecf03d 100644 --- a/smali/src/main/java/org/jf/smali/smaliTreeWalker.java +++ b/smali/src/main/java/org/jf/smali/smaliTreeWalker.java @@ -1,4 +1,4 @@ -// $ANTLR 3.5.2 smaliTreeWalker.g 2017-04-20 15:20:46 +// $ANTLR 3.5.2 smaliTreeWalker.g 2019-04-05 11:21:30 package org.jf.smali; @@ -26,7 +26,9 @@ import org.jf.dexlib2.iface.reference.MethodReference; import org.jf.dexlib2.iface.value.EncodedValue; import org.jf.dexlib2.immutable.ImmutableAnnotation; import org.jf.dexlib2.immutable.ImmutableAnnotationElement; +import org.jf.dexlib2.immutable.reference.ImmutableCallSiteReference; import org.jf.dexlib2.immutable.reference.ImmutableFieldReference; +import org.jf.dexlib2.immutable.reference.ImmutableMethodHandleReference; import org.jf.dexlib2.immutable.reference.ImmutableMethodReference; import org.jf.dexlib2.immutable.reference.ImmutableMethodProtoReference; import org.jf.dexlib2.immutable.reference.ImmutableReference; @@ -51,7 +53,7 @@ public class smaliTreeWalker extends TreeParser { public static final String[] tokenNames = new String[] { "<invalid>", "<EOR>", "<DOWN>", "<UP>", "ACCESS_SPEC", "ANNOTATION_DIRECTIVE", "ANNOTATION_VISIBILITY", "ARRAY_DATA_DIRECTIVE", "ARRAY_TYPE_PREFIX", - "ARROW", "BOOL_LITERAL", "BYTE_LITERAL", "CATCHALL_DIRECTIVE", "CATCH_DIRECTIVE", + "ARROW", "AT", "BOOL_LITERAL", "BYTE_LITERAL", "CATCHALL_DIRECTIVE", "CATCH_DIRECTIVE", "CHAR_LITERAL", "CLASS_DESCRIPTOR", "CLASS_DIRECTIVE", "CLOSE_BRACE", "CLOSE_PAREN", "COLON", "COMMA", "DOTDOT", "DOUBLE_LITERAL", "DOUBLE_LITERAL_OR_ID", "END_ANNOTATION_DIRECTIVE", "END_ARRAY_DATA_DIRECTIVE", "END_FIELD_DIRECTIVE", @@ -62,49 +64,54 @@ public class smaliTreeWalker extends TreeParser { "INSTRUCTION_FORMAT10t", "INSTRUCTION_FORMAT10x", "INSTRUCTION_FORMAT10x_ODEX", "INSTRUCTION_FORMAT11n", "INSTRUCTION_FORMAT11x", "INSTRUCTION_FORMAT12x", "INSTRUCTION_FORMAT12x_OR_ID", "INSTRUCTION_FORMAT20bc", "INSTRUCTION_FORMAT20t", - "INSTRUCTION_FORMAT21c_FIELD", "INSTRUCTION_FORMAT21c_FIELD_ODEX", "INSTRUCTION_FORMAT21c_STRING", - "INSTRUCTION_FORMAT21c_TYPE", "INSTRUCTION_FORMAT21ih", "INSTRUCTION_FORMAT21lh", - "INSTRUCTION_FORMAT21s", "INSTRUCTION_FORMAT21t", "INSTRUCTION_FORMAT22b", - "INSTRUCTION_FORMAT22c_FIELD", "INSTRUCTION_FORMAT22c_FIELD_ODEX", "INSTRUCTION_FORMAT22c_TYPE", - "INSTRUCTION_FORMAT22cs_FIELD", "INSTRUCTION_FORMAT22s", "INSTRUCTION_FORMAT22s_OR_ID", - "INSTRUCTION_FORMAT22t", "INSTRUCTION_FORMAT22x", "INSTRUCTION_FORMAT23x", - "INSTRUCTION_FORMAT30t", "INSTRUCTION_FORMAT31c", "INSTRUCTION_FORMAT31i", - "INSTRUCTION_FORMAT31i_OR_ID", "INSTRUCTION_FORMAT31t", "INSTRUCTION_FORMAT32x", - "INSTRUCTION_FORMAT35c_METHOD", "INSTRUCTION_FORMAT35c_METHOD_ODEX", "INSTRUCTION_FORMAT35c_TYPE", - "INSTRUCTION_FORMAT35mi_METHOD", "INSTRUCTION_FORMAT35ms_METHOD", "INSTRUCTION_FORMAT3rc_METHOD", - "INSTRUCTION_FORMAT3rc_METHOD_ODEX", "INSTRUCTION_FORMAT3rc_TYPE", "INSTRUCTION_FORMAT3rmi_METHOD", - "INSTRUCTION_FORMAT3rms_METHOD", "INSTRUCTION_FORMAT45cc_METHOD", "INSTRUCTION_FORMAT4rcc_METHOD", - "INSTRUCTION_FORMAT51l", "INTEGER_LITERAL", "INVALID_TOKEN", "I_ACCESS_LIST", - "I_ANNOTATION", "I_ANNOTATIONS", "I_ANNOTATION_ELEMENT", "I_ARRAY_ELEMENTS", - "I_ARRAY_ELEMENT_SIZE", "I_CATCH", "I_CATCHALL", "I_CATCHES", "I_CLASS_DEF", + "INSTRUCTION_FORMAT21c_FIELD", "INSTRUCTION_FORMAT21c_FIELD_ODEX", "INSTRUCTION_FORMAT21c_METHOD_HANDLE", + "INSTRUCTION_FORMAT21c_METHOD_TYPE", "INSTRUCTION_FORMAT21c_STRING", "INSTRUCTION_FORMAT21c_TYPE", + "INSTRUCTION_FORMAT21ih", "INSTRUCTION_FORMAT21lh", "INSTRUCTION_FORMAT21s", + "INSTRUCTION_FORMAT21t", "INSTRUCTION_FORMAT22b", "INSTRUCTION_FORMAT22c_FIELD", + "INSTRUCTION_FORMAT22c_FIELD_ODEX", "INSTRUCTION_FORMAT22c_TYPE", "INSTRUCTION_FORMAT22cs_FIELD", + "INSTRUCTION_FORMAT22s", "INSTRUCTION_FORMAT22s_OR_ID", "INSTRUCTION_FORMAT22t", + "INSTRUCTION_FORMAT22x", "INSTRUCTION_FORMAT23x", "INSTRUCTION_FORMAT30t", + "INSTRUCTION_FORMAT31c", "INSTRUCTION_FORMAT31i", "INSTRUCTION_FORMAT31i_OR_ID", + "INSTRUCTION_FORMAT31t", "INSTRUCTION_FORMAT32x", "INSTRUCTION_FORMAT35c_CALL_SITE", + "INSTRUCTION_FORMAT35c_METHOD", "INSTRUCTION_FORMAT35c_METHOD_ODEX", "INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE", + "INSTRUCTION_FORMAT35c_TYPE", "INSTRUCTION_FORMAT35mi_METHOD", "INSTRUCTION_FORMAT35ms_METHOD", + "INSTRUCTION_FORMAT3rc_CALL_SITE", "INSTRUCTION_FORMAT3rc_METHOD", "INSTRUCTION_FORMAT3rc_METHOD_ODEX", + "INSTRUCTION_FORMAT3rc_TYPE", "INSTRUCTION_FORMAT3rmi_METHOD", "INSTRUCTION_FORMAT3rms_METHOD", + "INSTRUCTION_FORMAT45cc_METHOD", "INSTRUCTION_FORMAT4rcc_METHOD", "INSTRUCTION_FORMAT51l", + "INTEGER_LITERAL", "INVALID_TOKEN", "I_ACCESS_LIST", "I_ANNOTATION", "I_ANNOTATIONS", + "I_ANNOTATION_ELEMENT", "I_ARRAY_ELEMENTS", "I_ARRAY_ELEMENT_SIZE", "I_CALL_SITE_EXTRA_ARGUMENTS", + "I_CALL_SITE_REFERENCE", "I_CATCH", "I_CATCHALL", "I_CATCHES", "I_CLASS_DEF", "I_ENCODED_ARRAY", "I_ENCODED_ENUM", "I_ENCODED_FIELD", "I_ENCODED_METHOD", - "I_END_LOCAL", "I_EPILOGUE", "I_FIELD", "I_FIELDS", "I_FIELD_INITIAL_VALUE", - "I_FIELD_TYPE", "I_IMPLEMENTS", "I_LABEL", "I_LINE", "I_LOCAL", "I_LOCALS", - "I_METHOD", "I_METHODS", "I_METHOD_PROTOTYPE", "I_METHOD_RETURN_TYPE", - "I_ORDERED_METHOD_ITEMS", "I_PACKED_SWITCH_ELEMENTS", "I_PACKED_SWITCH_START_KEY", - "I_PARAMETER", "I_PARAMETERS", "I_PARAMETER_NOT_SPECIFIED", "I_PROLOGUE", - "I_REGISTERS", "I_REGISTER_LIST", "I_REGISTER_RANGE", "I_RESTART_LOCAL", + "I_ENCODED_METHOD_HANDLE", "I_END_LOCAL", "I_EPILOGUE", "I_FIELD", "I_FIELDS", + "I_FIELD_INITIAL_VALUE", "I_FIELD_TYPE", "I_IMPLEMENTS", "I_LABEL", "I_LINE", + "I_LOCAL", "I_LOCALS", "I_METHOD", "I_METHODS", "I_METHOD_PROTOTYPE", + "I_METHOD_RETURN_TYPE", "I_ORDERED_METHOD_ITEMS", "I_PACKED_SWITCH_ELEMENTS", + "I_PACKED_SWITCH_START_KEY", "I_PARAMETER", "I_PARAMETERS", "I_PARAMETER_NOT_SPECIFIED", + "I_PROLOGUE", "I_REGISTERS", "I_REGISTER_LIST", "I_REGISTER_RANGE", "I_RESTART_LOCAL", "I_SOURCE", "I_SPARSE_SWITCH_ELEMENTS", "I_STATEMENT_ARRAY_DATA", "I_STATEMENT_FORMAT10t", "I_STATEMENT_FORMAT10x", "I_STATEMENT_FORMAT11n", "I_STATEMENT_FORMAT11x", "I_STATEMENT_FORMAT12x", "I_STATEMENT_FORMAT20bc", "I_STATEMENT_FORMAT20t", - "I_STATEMENT_FORMAT21c_FIELD", "I_STATEMENT_FORMAT21c_STRING", "I_STATEMENT_FORMAT21c_TYPE", + "I_STATEMENT_FORMAT21c_FIELD", "I_STATEMENT_FORMAT21c_METHOD_HANDLE", + "I_STATEMENT_FORMAT21c_METHOD_TYPE", "I_STATEMENT_FORMAT21c_STRING", "I_STATEMENT_FORMAT21c_TYPE", "I_STATEMENT_FORMAT21ih", "I_STATEMENT_FORMAT21lh", "I_STATEMENT_FORMAT21s", "I_STATEMENT_FORMAT21t", "I_STATEMENT_FORMAT22b", "I_STATEMENT_FORMAT22c_FIELD", "I_STATEMENT_FORMAT22c_TYPE", "I_STATEMENT_FORMAT22s", "I_STATEMENT_FORMAT22t", "I_STATEMENT_FORMAT22x", "I_STATEMENT_FORMAT23x", "I_STATEMENT_FORMAT30t", "I_STATEMENT_FORMAT31c", "I_STATEMENT_FORMAT31i", "I_STATEMENT_FORMAT31t", - "I_STATEMENT_FORMAT32x", "I_STATEMENT_FORMAT35c_METHOD", "I_STATEMENT_FORMAT35c_TYPE", - "I_STATEMENT_FORMAT3rc_METHOD", "I_STATEMENT_FORMAT3rc_TYPE", "I_STATEMENT_FORMAT45cc_METHOD", - "I_STATEMENT_FORMAT4rcc_METHOD", "I_STATEMENT_FORMAT51l", "I_STATEMENT_PACKED_SWITCH", - "I_STATEMENT_SPARSE_SWITCH", "I_SUBANNOTATION", "I_SUPER", "LINE_COMMENT", - "LINE_DIRECTIVE", "LOCALS_DIRECTIVE", "LOCAL_DIRECTIVE", "LONG_LITERAL", - "MEMBER_NAME", "METHOD_DIRECTIVE", "NEGATIVE_INTEGER_LITERAL", "NULL_LITERAL", - "OPEN_BRACE", "OPEN_PAREN", "PACKED_SWITCH_DIRECTIVE", "PARAMETER_DIRECTIVE", - "PARAM_LIST_OR_ID_PRIMITIVE_TYPE", "POSITIVE_INTEGER_LITERAL", "PRIMITIVE_TYPE", - "PROLOGUE_DIRECTIVE", "REGISTER", "REGISTERS_DIRECTIVE", "RESTART_LOCAL_DIRECTIVE", - "SHORT_LITERAL", "SIMPLE_NAME", "SOURCE_DIRECTIVE", "SPARSE_SWITCH_DIRECTIVE", - "STRING_LITERAL", "SUBANNOTATION_DIRECTIVE", "SUPER_DIRECTIVE", "VERIFICATION_ERROR_TYPE", - "VOID_TYPE", "VTABLE_INDEX", "WHITE_SPACE" + "I_STATEMENT_FORMAT32x", "I_STATEMENT_FORMAT35c_CALL_SITE", "I_STATEMENT_FORMAT35c_METHOD", + "I_STATEMENT_FORMAT35c_TYPE", "I_STATEMENT_FORMAT3rc_CALL_SITE", "I_STATEMENT_FORMAT3rc_METHOD", + "I_STATEMENT_FORMAT3rc_TYPE", "I_STATEMENT_FORMAT45cc_METHOD", "I_STATEMENT_FORMAT4rcc_METHOD", + "I_STATEMENT_FORMAT51l", "I_STATEMENT_PACKED_SWITCH", "I_STATEMENT_SPARSE_SWITCH", + "I_SUBANNOTATION", "I_SUPER", "LINE_COMMENT", "LINE_DIRECTIVE", "LOCALS_DIRECTIVE", + "LOCAL_DIRECTIVE", "LONG_LITERAL", "MEMBER_NAME", "METHOD_DIRECTIVE", + "METHOD_HANDLE_TYPE_FIELD", "METHOD_HANDLE_TYPE_METHOD", "NEGATIVE_INTEGER_LITERAL", + "NULL_LITERAL", "OPEN_BRACE", "OPEN_PAREN", "PACKED_SWITCH_DIRECTIVE", + "PARAMETER_DIRECTIVE", "PARAM_LIST_OR_ID_PRIMITIVE_TYPE", "POSITIVE_INTEGER_LITERAL", + "PRIMITIVE_TYPE", "PROLOGUE_DIRECTIVE", "REGISTER", "REGISTERS_DIRECTIVE", + "RESTART_LOCAL_DIRECTIVE", "SHORT_LITERAL", "SIMPLE_NAME", "SOURCE_DIRECTIVE", + "SPARSE_SWITCH_DIRECTIVE", "STRING_LITERAL", "SUBANNOTATION_DIRECTIVE", + "SUPER_DIRECTIVE", "VERIFICATION_ERROR_TYPE", "VOID_TYPE", "VTABLE_INDEX", + "WHITE_SPACE" }; public static final int EOF=-1; public static final int ACCESS_SPEC=4; @@ -113,197 +120,212 @@ public class smaliTreeWalker extends TreeParser { public static final int ARRAY_DATA_DIRECTIVE=7; public static final int ARRAY_TYPE_PREFIX=8; public static final int ARROW=9; - public static final int BOOL_LITERAL=10; - public static final int BYTE_LITERAL=11; - public static final int CATCHALL_DIRECTIVE=12; - public static final int CATCH_DIRECTIVE=13; - public static final int CHAR_LITERAL=14; - public static final int CLASS_DESCRIPTOR=15; - public static final int CLASS_DIRECTIVE=16; - public static final int CLOSE_BRACE=17; - public static final int CLOSE_PAREN=18; - public static final int COLON=19; - public static final int COMMA=20; - public static final int DOTDOT=21; - public static final int DOUBLE_LITERAL=22; - public static final int DOUBLE_LITERAL_OR_ID=23; - public static final int END_ANNOTATION_DIRECTIVE=24; - public static final int END_ARRAY_DATA_DIRECTIVE=25; - public static final int END_FIELD_DIRECTIVE=26; - public static final int END_LOCAL_DIRECTIVE=27; - public static final int END_METHOD_DIRECTIVE=28; - public static final int END_PACKED_SWITCH_DIRECTIVE=29; - public static final int END_PARAMETER_DIRECTIVE=30; - public static final int END_SPARSE_SWITCH_DIRECTIVE=31; - public static final int END_SUBANNOTATION_DIRECTIVE=32; - public static final int ENUM_DIRECTIVE=33; - public static final int EPILOGUE_DIRECTIVE=34; - public static final int EQUAL=35; - public static final int FIELD_DIRECTIVE=36; - public static final int FIELD_OFFSET=37; - public static final int FLOAT_LITERAL=38; - public static final int FLOAT_LITERAL_OR_ID=39; - public static final int IMPLEMENTS_DIRECTIVE=40; - public static final int INLINE_INDEX=41; - public static final int INSTRUCTION_FORMAT10t=42; - public static final int INSTRUCTION_FORMAT10x=43; - public static final int INSTRUCTION_FORMAT10x_ODEX=44; - public static final int INSTRUCTION_FORMAT11n=45; - public static final int INSTRUCTION_FORMAT11x=46; - public static final int INSTRUCTION_FORMAT12x=47; - public static final int INSTRUCTION_FORMAT12x_OR_ID=48; - public static final int INSTRUCTION_FORMAT20bc=49; - public static final int INSTRUCTION_FORMAT20t=50; - public static final int INSTRUCTION_FORMAT21c_FIELD=51; - public static final int INSTRUCTION_FORMAT21c_FIELD_ODEX=52; - public static final int INSTRUCTION_FORMAT21c_STRING=53; - public static final int INSTRUCTION_FORMAT21c_TYPE=54; - public static final int INSTRUCTION_FORMAT21ih=55; - public static final int INSTRUCTION_FORMAT21lh=56; - public static final int INSTRUCTION_FORMAT21s=57; - public static final int INSTRUCTION_FORMAT21t=58; - public static final int INSTRUCTION_FORMAT22b=59; - public static final int INSTRUCTION_FORMAT22c_FIELD=60; - public static final int INSTRUCTION_FORMAT22c_FIELD_ODEX=61; - public static final int INSTRUCTION_FORMAT22c_TYPE=62; - public static final int INSTRUCTION_FORMAT22cs_FIELD=63; - public static final int INSTRUCTION_FORMAT22s=64; - public static final int INSTRUCTION_FORMAT22s_OR_ID=65; - public static final int INSTRUCTION_FORMAT22t=66; - public static final int INSTRUCTION_FORMAT22x=67; - public static final int INSTRUCTION_FORMAT23x=68; - public static final int INSTRUCTION_FORMAT30t=69; - public static final int INSTRUCTION_FORMAT31c=70; - public static final int INSTRUCTION_FORMAT31i=71; - public static final int INSTRUCTION_FORMAT31i_OR_ID=72; - public static final int INSTRUCTION_FORMAT31t=73; - public static final int INSTRUCTION_FORMAT32x=74; - public static final int INSTRUCTION_FORMAT35c_METHOD=75; - public static final int INSTRUCTION_FORMAT35c_METHOD_ODEX=76; - public static final int INSTRUCTION_FORMAT35c_TYPE=77; - public static final int INSTRUCTION_FORMAT35mi_METHOD=78; - public static final int INSTRUCTION_FORMAT35ms_METHOD=79; - public static final int INSTRUCTION_FORMAT3rc_METHOD=80; - public static final int INSTRUCTION_FORMAT3rc_METHOD_ODEX=81; - public static final int INSTRUCTION_FORMAT3rc_TYPE=82; - public static final int INSTRUCTION_FORMAT3rmi_METHOD=83; - public static final int INSTRUCTION_FORMAT3rms_METHOD=84; - public static final int INSTRUCTION_FORMAT45cc_METHOD=85; - public static final int INSTRUCTION_FORMAT4rcc_METHOD=86; - public static final int INSTRUCTION_FORMAT51l=87; - public static final int INTEGER_LITERAL=88; - public static final int INVALID_TOKEN=89; - public static final int I_ACCESS_LIST=90; - public static final int I_ANNOTATION=91; - public static final int I_ANNOTATIONS=92; - public static final int I_ANNOTATION_ELEMENT=93; - public static final int I_ARRAY_ELEMENTS=94; - public static final int I_ARRAY_ELEMENT_SIZE=95; - public static final int I_CATCH=96; - public static final int I_CATCHALL=97; - public static final int I_CATCHES=98; - public static final int I_CLASS_DEF=99; - public static final int I_ENCODED_ARRAY=100; - public static final int I_ENCODED_ENUM=101; - public static final int I_ENCODED_FIELD=102; - public static final int I_ENCODED_METHOD=103; - public static final int I_END_LOCAL=104; - public static final int I_EPILOGUE=105; - public static final int I_FIELD=106; - public static final int I_FIELDS=107; - public static final int I_FIELD_INITIAL_VALUE=108; - public static final int I_FIELD_TYPE=109; - public static final int I_IMPLEMENTS=110; - public static final int I_LABEL=111; - public static final int I_LINE=112; - public static final int I_LOCAL=113; - public static final int I_LOCALS=114; - public static final int I_METHOD=115; - public static final int I_METHODS=116; - public static final int I_METHOD_PROTOTYPE=117; - public static final int I_METHOD_RETURN_TYPE=118; - public static final int I_ORDERED_METHOD_ITEMS=119; - public static final int I_PACKED_SWITCH_ELEMENTS=120; - public static final int I_PACKED_SWITCH_START_KEY=121; - public static final int I_PARAMETER=122; - public static final int I_PARAMETERS=123; - public static final int I_PARAMETER_NOT_SPECIFIED=124; - public static final int I_PROLOGUE=125; - public static final int I_REGISTERS=126; - public static final int I_REGISTER_LIST=127; - public static final int I_REGISTER_RANGE=128; - public static final int I_RESTART_LOCAL=129; - public static final int I_SOURCE=130; - public static final int I_SPARSE_SWITCH_ELEMENTS=131; - public static final int I_STATEMENT_ARRAY_DATA=132; - public static final int I_STATEMENT_FORMAT10t=133; - public static final int I_STATEMENT_FORMAT10x=134; - public static final int I_STATEMENT_FORMAT11n=135; - public static final int I_STATEMENT_FORMAT11x=136; - public static final int I_STATEMENT_FORMAT12x=137; - public static final int I_STATEMENT_FORMAT20bc=138; - public static final int I_STATEMENT_FORMAT20t=139; - public static final int I_STATEMENT_FORMAT21c_FIELD=140; - public static final int I_STATEMENT_FORMAT21c_STRING=141; - public static final int I_STATEMENT_FORMAT21c_TYPE=142; - public static final int I_STATEMENT_FORMAT21ih=143; - public static final int I_STATEMENT_FORMAT21lh=144; - public static final int I_STATEMENT_FORMAT21s=145; - public static final int I_STATEMENT_FORMAT21t=146; - public static final int I_STATEMENT_FORMAT22b=147; - public static final int I_STATEMENT_FORMAT22c_FIELD=148; - public static final int I_STATEMENT_FORMAT22c_TYPE=149; - public static final int I_STATEMENT_FORMAT22s=150; - public static final int I_STATEMENT_FORMAT22t=151; - public static final int I_STATEMENT_FORMAT22x=152; - public static final int I_STATEMENT_FORMAT23x=153; - public static final int I_STATEMENT_FORMAT30t=154; - public static final int I_STATEMENT_FORMAT31c=155; - public static final int I_STATEMENT_FORMAT31i=156; - public static final int I_STATEMENT_FORMAT31t=157; - public static final int I_STATEMENT_FORMAT32x=158; - public static final int I_STATEMENT_FORMAT35c_METHOD=159; - public static final int I_STATEMENT_FORMAT35c_TYPE=160; - public static final int I_STATEMENT_FORMAT3rc_METHOD=161; - public static final int I_STATEMENT_FORMAT3rc_TYPE=162; - public static final int I_STATEMENT_FORMAT45cc_METHOD=163; - public static final int I_STATEMENT_FORMAT4rcc_METHOD=164; - public static final int I_STATEMENT_FORMAT51l=165; - public static final int I_STATEMENT_PACKED_SWITCH=166; - public static final int I_STATEMENT_SPARSE_SWITCH=167; - public static final int I_SUBANNOTATION=168; - public static final int I_SUPER=169; - public static final int LINE_COMMENT=170; - public static final int LINE_DIRECTIVE=171; - public static final int LOCALS_DIRECTIVE=172; - public static final int LOCAL_DIRECTIVE=173; - public static final int LONG_LITERAL=174; - public static final int MEMBER_NAME=175; - public static final int METHOD_DIRECTIVE=176; - public static final int NEGATIVE_INTEGER_LITERAL=177; - public static final int NULL_LITERAL=178; - public static final int OPEN_BRACE=179; - public static final int OPEN_PAREN=180; - public static final int PACKED_SWITCH_DIRECTIVE=181; - public static final int PARAMETER_DIRECTIVE=182; - public static final int PARAM_LIST_OR_ID_PRIMITIVE_TYPE=183; - public static final int POSITIVE_INTEGER_LITERAL=184; - public static final int PRIMITIVE_TYPE=185; - public static final int PROLOGUE_DIRECTIVE=186; - public static final int REGISTER=187; - public static final int REGISTERS_DIRECTIVE=188; - public static final int RESTART_LOCAL_DIRECTIVE=189; - public static final int SHORT_LITERAL=190; - public static final int SIMPLE_NAME=191; - public static final int SOURCE_DIRECTIVE=192; - public static final int SPARSE_SWITCH_DIRECTIVE=193; - public static final int STRING_LITERAL=194; - public static final int SUBANNOTATION_DIRECTIVE=195; - public static final int SUPER_DIRECTIVE=196; - public static final int VERIFICATION_ERROR_TYPE=197; - public static final int VOID_TYPE=198; - public static final int VTABLE_INDEX=199; - public static final int WHITE_SPACE=200; + public static final int AT=10; + public static final int BOOL_LITERAL=11; + public static final int BYTE_LITERAL=12; + public static final int CATCHALL_DIRECTIVE=13; + public static final int CATCH_DIRECTIVE=14; + public static final int CHAR_LITERAL=15; + public static final int CLASS_DESCRIPTOR=16; + public static final int CLASS_DIRECTIVE=17; + public static final int CLOSE_BRACE=18; + public static final int CLOSE_PAREN=19; + public static final int COLON=20; + public static final int COMMA=21; + public static final int DOTDOT=22; + public static final int DOUBLE_LITERAL=23; + public static final int DOUBLE_LITERAL_OR_ID=24; + public static final int END_ANNOTATION_DIRECTIVE=25; + public static final int END_ARRAY_DATA_DIRECTIVE=26; + public static final int END_FIELD_DIRECTIVE=27; + public static final int END_LOCAL_DIRECTIVE=28; + public static final int END_METHOD_DIRECTIVE=29; + public static final int END_PACKED_SWITCH_DIRECTIVE=30; + public static final int END_PARAMETER_DIRECTIVE=31; + public static final int END_SPARSE_SWITCH_DIRECTIVE=32; + public static final int END_SUBANNOTATION_DIRECTIVE=33; + public static final int ENUM_DIRECTIVE=34; + public static final int EPILOGUE_DIRECTIVE=35; + public static final int EQUAL=36; + public static final int FIELD_DIRECTIVE=37; + public static final int FIELD_OFFSET=38; + public static final int FLOAT_LITERAL=39; + public static final int FLOAT_LITERAL_OR_ID=40; + public static final int IMPLEMENTS_DIRECTIVE=41; + public static final int INLINE_INDEX=42; + public static final int INSTRUCTION_FORMAT10t=43; + public static final int INSTRUCTION_FORMAT10x=44; + public static final int INSTRUCTION_FORMAT10x_ODEX=45; + public static final int INSTRUCTION_FORMAT11n=46; + public static final int INSTRUCTION_FORMAT11x=47; + public static final int INSTRUCTION_FORMAT12x=48; + public static final int INSTRUCTION_FORMAT12x_OR_ID=49; + public static final int INSTRUCTION_FORMAT20bc=50; + public static final int INSTRUCTION_FORMAT20t=51; + public static final int INSTRUCTION_FORMAT21c_FIELD=52; + public static final int INSTRUCTION_FORMAT21c_FIELD_ODEX=53; + public static final int INSTRUCTION_FORMAT21c_METHOD_HANDLE=54; + public static final int INSTRUCTION_FORMAT21c_METHOD_TYPE=55; + public static final int INSTRUCTION_FORMAT21c_STRING=56; + public static final int INSTRUCTION_FORMAT21c_TYPE=57; + public static final int INSTRUCTION_FORMAT21ih=58; + public static final int INSTRUCTION_FORMAT21lh=59; + public static final int INSTRUCTION_FORMAT21s=60; + public static final int INSTRUCTION_FORMAT21t=61; + public static final int INSTRUCTION_FORMAT22b=62; + public static final int INSTRUCTION_FORMAT22c_FIELD=63; + public static final int INSTRUCTION_FORMAT22c_FIELD_ODEX=64; + public static final int INSTRUCTION_FORMAT22c_TYPE=65; + public static final int INSTRUCTION_FORMAT22cs_FIELD=66; + public static final int INSTRUCTION_FORMAT22s=67; + public static final int INSTRUCTION_FORMAT22s_OR_ID=68; + public static final int INSTRUCTION_FORMAT22t=69; + public static final int INSTRUCTION_FORMAT22x=70; + public static final int INSTRUCTION_FORMAT23x=71; + public static final int INSTRUCTION_FORMAT30t=72; + public static final int INSTRUCTION_FORMAT31c=73; + public static final int INSTRUCTION_FORMAT31i=74; + public static final int INSTRUCTION_FORMAT31i_OR_ID=75; + public static final int INSTRUCTION_FORMAT31t=76; + public static final int INSTRUCTION_FORMAT32x=77; + public static final int INSTRUCTION_FORMAT35c_CALL_SITE=78; + public static final int INSTRUCTION_FORMAT35c_METHOD=79; + public static final int INSTRUCTION_FORMAT35c_METHOD_ODEX=80; + public static final int INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE=81; + public static final int INSTRUCTION_FORMAT35c_TYPE=82; + public static final int INSTRUCTION_FORMAT35mi_METHOD=83; + public static final int INSTRUCTION_FORMAT35ms_METHOD=84; + public static final int INSTRUCTION_FORMAT3rc_CALL_SITE=85; + public static final int INSTRUCTION_FORMAT3rc_METHOD=86; + public static final int INSTRUCTION_FORMAT3rc_METHOD_ODEX=87; + public static final int INSTRUCTION_FORMAT3rc_TYPE=88; + public static final int INSTRUCTION_FORMAT3rmi_METHOD=89; + public static final int INSTRUCTION_FORMAT3rms_METHOD=90; + public static final int INSTRUCTION_FORMAT45cc_METHOD=91; + public static final int INSTRUCTION_FORMAT4rcc_METHOD=92; + public static final int INSTRUCTION_FORMAT51l=93; + public static final int INTEGER_LITERAL=94; + public static final int INVALID_TOKEN=95; + public static final int I_ACCESS_LIST=96; + public static final int I_ANNOTATION=97; + public static final int I_ANNOTATIONS=98; + public static final int I_ANNOTATION_ELEMENT=99; + public static final int I_ARRAY_ELEMENTS=100; + public static final int I_ARRAY_ELEMENT_SIZE=101; + public static final int I_CALL_SITE_EXTRA_ARGUMENTS=102; + public static final int I_CALL_SITE_REFERENCE=103; + public static final int I_CATCH=104; + public static final int I_CATCHALL=105; + public static final int I_CATCHES=106; + public static final int I_CLASS_DEF=107; + public static final int I_ENCODED_ARRAY=108; + public static final int I_ENCODED_ENUM=109; + public static final int I_ENCODED_FIELD=110; + public static final int I_ENCODED_METHOD=111; + public static final int I_ENCODED_METHOD_HANDLE=112; + public static final int I_END_LOCAL=113; + public static final int I_EPILOGUE=114; + public static final int I_FIELD=115; + public static final int I_FIELDS=116; + public static final int I_FIELD_INITIAL_VALUE=117; + public static final int I_FIELD_TYPE=118; + public static final int I_IMPLEMENTS=119; + public static final int I_LABEL=120; + public static final int I_LINE=121; + public static final int I_LOCAL=122; + public static final int I_LOCALS=123; + public static final int I_METHOD=124; + public static final int I_METHODS=125; + public static final int I_METHOD_PROTOTYPE=126; + public static final int I_METHOD_RETURN_TYPE=127; + public static final int I_ORDERED_METHOD_ITEMS=128; + public static final int I_PACKED_SWITCH_ELEMENTS=129; + public static final int I_PACKED_SWITCH_START_KEY=130; + public static final int I_PARAMETER=131; + public static final int I_PARAMETERS=132; + public static final int I_PARAMETER_NOT_SPECIFIED=133; + public static final int I_PROLOGUE=134; + public static final int I_REGISTERS=135; + public static final int I_REGISTER_LIST=136; + public static final int I_REGISTER_RANGE=137; + public static final int I_RESTART_LOCAL=138; + public static final int I_SOURCE=139; + public static final int I_SPARSE_SWITCH_ELEMENTS=140; + public static final int I_STATEMENT_ARRAY_DATA=141; + public static final int I_STATEMENT_FORMAT10t=142; + public static final int I_STATEMENT_FORMAT10x=143; + public static final int I_STATEMENT_FORMAT11n=144; + public static final int I_STATEMENT_FORMAT11x=145; + public static final int I_STATEMENT_FORMAT12x=146; + public static final int I_STATEMENT_FORMAT20bc=147; + public static final int I_STATEMENT_FORMAT20t=148; + public static final int I_STATEMENT_FORMAT21c_FIELD=149; + public static final int I_STATEMENT_FORMAT21c_METHOD_HANDLE=150; + public static final int I_STATEMENT_FORMAT21c_METHOD_TYPE=151; + public static final int I_STATEMENT_FORMAT21c_STRING=152; + public static final int I_STATEMENT_FORMAT21c_TYPE=153; + public static final int I_STATEMENT_FORMAT21ih=154; + public static final int I_STATEMENT_FORMAT21lh=155; + public static final int I_STATEMENT_FORMAT21s=156; + public static final int I_STATEMENT_FORMAT21t=157; + public static final int I_STATEMENT_FORMAT22b=158; + public static final int I_STATEMENT_FORMAT22c_FIELD=159; + public static final int I_STATEMENT_FORMAT22c_TYPE=160; + public static final int I_STATEMENT_FORMAT22s=161; + public static final int I_STATEMENT_FORMAT22t=162; + public static final int I_STATEMENT_FORMAT22x=163; + public static final int I_STATEMENT_FORMAT23x=164; + public static final int I_STATEMENT_FORMAT30t=165; + public static final int I_STATEMENT_FORMAT31c=166; + public static final int I_STATEMENT_FORMAT31i=167; + public static final int I_STATEMENT_FORMAT31t=168; + public static final int I_STATEMENT_FORMAT32x=169; + public static final int I_STATEMENT_FORMAT35c_CALL_SITE=170; + public static final int I_STATEMENT_FORMAT35c_METHOD=171; + public static final int I_STATEMENT_FORMAT35c_TYPE=172; + public static final int I_STATEMENT_FORMAT3rc_CALL_SITE=173; + public static final int I_STATEMENT_FORMAT3rc_METHOD=174; + public static final int I_STATEMENT_FORMAT3rc_TYPE=175; + public static final int I_STATEMENT_FORMAT45cc_METHOD=176; + public static final int I_STATEMENT_FORMAT4rcc_METHOD=177; + public static final int I_STATEMENT_FORMAT51l=178; + public static final int I_STATEMENT_PACKED_SWITCH=179; + public static final int I_STATEMENT_SPARSE_SWITCH=180; + public static final int I_SUBANNOTATION=181; + public static final int I_SUPER=182; + public static final int LINE_COMMENT=183; + public static final int LINE_DIRECTIVE=184; + public static final int LOCALS_DIRECTIVE=185; + public static final int LOCAL_DIRECTIVE=186; + public static final int LONG_LITERAL=187; + public static final int MEMBER_NAME=188; + public static final int METHOD_DIRECTIVE=189; + public static final int METHOD_HANDLE_TYPE_FIELD=190; + public static final int METHOD_HANDLE_TYPE_METHOD=191; + public static final int NEGATIVE_INTEGER_LITERAL=192; + public static final int NULL_LITERAL=193; + public static final int OPEN_BRACE=194; + public static final int OPEN_PAREN=195; + public static final int PACKED_SWITCH_DIRECTIVE=196; + public static final int PARAMETER_DIRECTIVE=197; + public static final int PARAM_LIST_OR_ID_PRIMITIVE_TYPE=198; + public static final int POSITIVE_INTEGER_LITERAL=199; + public static final int PRIMITIVE_TYPE=200; + public static final int PROLOGUE_DIRECTIVE=201; + public static final int REGISTER=202; + public static final int REGISTERS_DIRECTIVE=203; + public static final int RESTART_LOCAL_DIRECTIVE=204; + public static final int SHORT_LITERAL=205; + public static final int SIMPLE_NAME=206; + public static final int SOURCE_DIRECTIVE=207; + public static final int SPARSE_SWITCH_DIRECTIVE=208; + public static final int STRING_LITERAL=209; + public static final int SUBANNOTATION_DIRECTIVE=210; + public static final int SUPER_DIRECTIVE=211; + public static final int VERIFICATION_ERROR_TYPE=212; + public static final int VOID_TYPE=213; + public static final int VTABLE_INDEX=214; + public static final int WHITE_SPACE=215; // delegates public TreeParser[] getDelegates() { @@ -329,6 +351,7 @@ public class smaliTreeWalker extends TreeParser { private int apiLevel = 15; private Opcodes opcodes = Opcodes.forApi(apiLevel); private DexBuilder dexBuilder; + private int callSiteNameIndex = 0; public void setDexBuilder(DexBuilder dexBuilder) { this.dexBuilder = dexBuilder; @@ -408,7 +431,7 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "smali_file" - // smaliTreeWalker.g:160:1: smali_file returns [ClassDef classDef] : ^( I_CLASS_DEF header methods fields annotations ) ; + // smaliTreeWalker.g:163:1: smali_file returns [ClassDef classDef] : ^( I_CLASS_DEF header methods fields annotations ) ; public final ClassDef smali_file() throws RecognitionException { ClassDef classDef = null; @@ -419,8 +442,8 @@ public class smaliTreeWalker extends TreeParser { List<BuilderMethod> methods4 =null; try { - // smaliTreeWalker.g:161:3: ( ^( I_CLASS_DEF header methods fields annotations ) ) - // smaliTreeWalker.g:161:5: ^( I_CLASS_DEF header methods fields annotations ) + // smaliTreeWalker.g:164:3: ( ^( I_CLASS_DEF header methods fields annotations ) ) + // smaliTreeWalker.g:164:5: ^( I_CLASS_DEF header methods fields annotations ) { match(input,I_CLASS_DEF,FOLLOW_I_CLASS_DEF_in_smali_file52); match(input, Token.DOWN, null); @@ -476,7 +499,7 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "header" - // smaliTreeWalker.g:174:1: header returns [String classType, int accessFlags, String superType, List<String> implementsList, String sourceSpec] : class_spec ( super_spec )? implements_list source_spec ; + // smaliTreeWalker.g:177:1: header returns [String classType, int accessFlags, String superType, List<String> implementsList, String sourceSpec] : class_spec ( super_spec )? implements_list source_spec ; public final smaliTreeWalker.header_return header() throws RecognitionException { smaliTreeWalker.header_return retval = new smaliTreeWalker.header_return(); retval.start = input.LT(1); @@ -487,14 +510,14 @@ public class smaliTreeWalker extends TreeParser { String source_spec8 =null; try { - // smaliTreeWalker.g:175:3: ( class_spec ( super_spec )? implements_list source_spec ) - // smaliTreeWalker.g:175:3: class_spec ( super_spec )? implements_list source_spec + // smaliTreeWalker.g:178:3: ( class_spec ( super_spec )? implements_list source_spec ) + // smaliTreeWalker.g:178:3: class_spec ( super_spec )? implements_list source_spec { pushFollow(FOLLOW_class_spec_in_header85); class_spec5=class_spec(); state._fsp--; - // smaliTreeWalker.g:175:14: ( super_spec )? + // smaliTreeWalker.g:178:14: ( super_spec )? int alt1=2; int LA1_0 = input.LA(1); if ( (LA1_0==I_SUPER) ) { @@ -502,7 +525,7 @@ public class smaliTreeWalker extends TreeParser { } switch (alt1) { case 1 : - // smaliTreeWalker.g:175:14: super_spec + // smaliTreeWalker.g:178:14: super_spec { pushFollow(FOLLOW_super_spec_in_header87); super_spec6=super_spec(); @@ -551,7 +574,7 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "class_spec" - // smaliTreeWalker.g:186:1: class_spec returns [String type, int accessFlags] : CLASS_DESCRIPTOR access_list ; + // smaliTreeWalker.g:189:1: class_spec returns [String type, int accessFlags] : CLASS_DESCRIPTOR access_list ; public final smaliTreeWalker.class_spec_return class_spec() throws RecognitionException { smaliTreeWalker.class_spec_return retval = new smaliTreeWalker.class_spec_return(); retval.start = input.LT(1); @@ -560,8 +583,8 @@ public class smaliTreeWalker extends TreeParser { int access_list10 =0; try { - // smaliTreeWalker.g:187:3: ( CLASS_DESCRIPTOR access_list ) - // smaliTreeWalker.g:187:5: CLASS_DESCRIPTOR access_list + // smaliTreeWalker.g:190:3: ( CLASS_DESCRIPTOR access_list ) + // smaliTreeWalker.g:190:5: CLASS_DESCRIPTOR access_list { CLASS_DESCRIPTOR9=(CommonTree)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_class_spec110); pushFollow(FOLLOW_access_list_in_class_spec112); @@ -589,7 +612,7 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "super_spec" - // smaliTreeWalker.g:193:1: super_spec returns [String type] : ^( I_SUPER CLASS_DESCRIPTOR ) ; + // smaliTreeWalker.g:196:1: super_spec returns [String type] : ^( I_SUPER CLASS_DESCRIPTOR ) ; public final String super_spec() throws RecognitionException { String type = null; @@ -597,8 +620,8 @@ public class smaliTreeWalker extends TreeParser { CommonTree CLASS_DESCRIPTOR11=null; try { - // smaliTreeWalker.g:194:3: ( ^( I_SUPER CLASS_DESCRIPTOR ) ) - // smaliTreeWalker.g:194:5: ^( I_SUPER CLASS_DESCRIPTOR ) + // smaliTreeWalker.g:197:3: ( ^( I_SUPER CLASS_DESCRIPTOR ) ) + // smaliTreeWalker.g:197:5: ^( I_SUPER CLASS_DESCRIPTOR ) { match(input,I_SUPER,FOLLOW_I_SUPER_in_super_spec130); match(input, Token.DOWN, null); @@ -625,7 +648,7 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "implements_spec" - // smaliTreeWalker.g:200:1: implements_spec returns [String type] : ^( I_IMPLEMENTS CLASS_DESCRIPTOR ) ; + // smaliTreeWalker.g:203:1: implements_spec returns [String type] : ^( I_IMPLEMENTS CLASS_DESCRIPTOR ) ; public final String implements_spec() throws RecognitionException { String type = null; @@ -633,8 +656,8 @@ public class smaliTreeWalker extends TreeParser { CommonTree CLASS_DESCRIPTOR12=null; try { - // smaliTreeWalker.g:201:3: ( ^( I_IMPLEMENTS CLASS_DESCRIPTOR ) ) - // smaliTreeWalker.g:201:5: ^( I_IMPLEMENTS CLASS_DESCRIPTOR ) + // smaliTreeWalker.g:204:3: ( ^( I_IMPLEMENTS CLASS_DESCRIPTOR ) ) + // smaliTreeWalker.g:204:5: ^( I_IMPLEMENTS CLASS_DESCRIPTOR ) { match(input,I_IMPLEMENTS,FOLLOW_I_IMPLEMENTS_in_implements_spec152); match(input, Token.DOWN, null); @@ -661,7 +684,7 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "implements_list" - // smaliTreeWalker.g:206:1: implements_list returns [List<String> implementsList] : ( implements_spec )* ; + // smaliTreeWalker.g:209:1: implements_list returns [List<String> implementsList] : ( implements_spec )* ; public final List<String> implements_list() throws RecognitionException { List<String> implementsList = null; @@ -670,11 +693,11 @@ public class smaliTreeWalker extends TreeParser { List<String> typeList; try { - // smaliTreeWalker.g:208:3: ( ( implements_spec )* ) - // smaliTreeWalker.g:208:5: ( implements_spec )* + // smaliTreeWalker.g:211:3: ( ( implements_spec )* ) + // smaliTreeWalker.g:211:5: ( implements_spec )* { typeList = Lists.newArrayList(); - // smaliTreeWalker.g:209:5: ( implements_spec )* + // smaliTreeWalker.g:212:5: ( implements_spec )* loop2: while (true) { int alt2=2; @@ -685,7 +708,7 @@ public class smaliTreeWalker extends TreeParser { switch (alt2) { case 1 : - // smaliTreeWalker.g:209:6: implements_spec + // smaliTreeWalker.g:212:6: implements_spec { pushFollow(FOLLOW_implements_spec_in_implements_list184); implements_spec13=implements_spec(); @@ -724,7 +747,7 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "source_spec" - // smaliTreeWalker.g:218:1: source_spec returns [String source] : ( ^( I_SOURCE string_literal ) |); + // smaliTreeWalker.g:221:1: source_spec returns [String source] : ( ^( I_SOURCE string_literal ) |); public final String source_spec() throws RecognitionException { String source = null; @@ -732,7 +755,7 @@ public class smaliTreeWalker extends TreeParser { String string_literal14 =null; try { - // smaliTreeWalker.g:219:3: ( ^( I_SOURCE string_literal ) |) + // smaliTreeWalker.g:222:3: ( ^( I_SOURCE string_literal ) |) int alt3=2; int LA3_0 = input.LA(1); if ( (LA3_0==I_SOURCE) ) { @@ -750,7 +773,7 @@ public class smaliTreeWalker extends TreeParser { switch (alt3) { case 1 : - // smaliTreeWalker.g:219:5: ^( I_SOURCE string_literal ) + // smaliTreeWalker.g:222:5: ^( I_SOURCE string_literal ) { source = null; match(input,I_SOURCE,FOLLOW_I_SOURCE_in_source_spec213); @@ -765,7 +788,7 @@ public class smaliTreeWalker extends TreeParser { } break; case 2 : - // smaliTreeWalker.g:221:16: + // smaliTreeWalker.g:224:16: { } break; @@ -786,7 +809,7 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "access_list" - // smaliTreeWalker.g:223:1: access_list returns [int value] : ^( I_ACCESS_LIST ( ACCESS_SPEC )* ) ; + // smaliTreeWalker.g:226:1: access_list returns [int value] : ^( I_ACCESS_LIST ( ACCESS_SPEC )* ) ; public final int access_list() throws RecognitionException { int value = 0; @@ -797,13 +820,13 @@ public class smaliTreeWalker extends TreeParser { value = 0; try { - // smaliTreeWalker.g:228:3: ( ^( I_ACCESS_LIST ( ACCESS_SPEC )* ) ) - // smaliTreeWalker.g:228:5: ^( I_ACCESS_LIST ( ACCESS_SPEC )* ) + // smaliTreeWalker.g:231:3: ( ^( I_ACCESS_LIST ( ACCESS_SPEC )* ) ) + // smaliTreeWalker.g:231:5: ^( I_ACCESS_LIST ( ACCESS_SPEC )* ) { match(input,I_ACCESS_LIST,FOLLOW_I_ACCESS_LIST_in_access_list248); if ( input.LA(1)==Token.DOWN ) { match(input, Token.DOWN, null); - // smaliTreeWalker.g:229:7: ( ACCESS_SPEC )* + // smaliTreeWalker.g:232:7: ( ACCESS_SPEC )* loop4: while (true) { int alt4=2; @@ -814,7 +837,7 @@ public class smaliTreeWalker extends TreeParser { switch (alt4) { case 1 : - // smaliTreeWalker.g:230:9: ACCESS_SPEC + // smaliTreeWalker.g:233:9: ACCESS_SPEC { ACCESS_SPEC15=(CommonTree)match(input,ACCESS_SPEC,FOLLOW_ACCESS_SPEC_in_access_list266); @@ -848,7 +871,7 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "fields" - // smaliTreeWalker.g:237:1: fields returns [List<BuilderField> fields] : ^( I_FIELDS ( field )* ) ; + // smaliTreeWalker.g:240:1: fields returns [List<BuilderField> fields] : ^( I_FIELDS ( field )* ) ; public final List<BuilderField> fields() throws RecognitionException { List<BuilderField> fields = null; @@ -857,13 +880,13 @@ public class smaliTreeWalker extends TreeParser { fields = Lists.newArrayList(); try { - // smaliTreeWalker.g:239:3: ( ^( I_FIELDS ( field )* ) ) - // smaliTreeWalker.g:239:5: ^( I_FIELDS ( field )* ) + // smaliTreeWalker.g:242:3: ( ^( I_FIELDS ( field )* ) ) + // smaliTreeWalker.g:242:5: ^( I_FIELDS ( field )* ) { match(input,I_FIELDS,FOLLOW_I_FIELDS_in_fields308); if ( input.LA(1)==Token.DOWN ) { match(input, Token.DOWN, null); - // smaliTreeWalker.g:240:7: ( field )* + // smaliTreeWalker.g:243:7: ( field )* loop5: while (true) { int alt5=2; @@ -874,7 +897,7 @@ public class smaliTreeWalker extends TreeParser { switch (alt5) { case 1 : - // smaliTreeWalker.g:240:8: field + // smaliTreeWalker.g:243:8: field { pushFollow(FOLLOW_field_in_fields317); field16=field(); @@ -911,7 +934,7 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "methods" - // smaliTreeWalker.g:245:1: methods returns [List<BuilderMethod> methods] : ^( I_METHODS ( method )* ) ; + // smaliTreeWalker.g:248:1: methods returns [List<BuilderMethod> methods] : ^( I_METHODS ( method )* ) ; public final List<BuilderMethod> methods() throws RecognitionException { List<BuilderMethod> methods = null; @@ -920,13 +943,13 @@ public class smaliTreeWalker extends TreeParser { methods = Lists.newArrayList(); try { - // smaliTreeWalker.g:247:3: ( ^( I_METHODS ( method )* ) ) - // smaliTreeWalker.g:247:5: ^( I_METHODS ( method )* ) + // smaliTreeWalker.g:250:3: ( ^( I_METHODS ( method )* ) ) + // smaliTreeWalker.g:250:5: ^( I_METHODS ( method )* ) { match(input,I_METHODS,FOLLOW_I_METHODS_in_methods349); if ( input.LA(1)==Token.DOWN ) { match(input, Token.DOWN, null); - // smaliTreeWalker.g:248:7: ( method )* + // smaliTreeWalker.g:251:7: ( method )* loop6: while (true) { int alt6=2; @@ -937,7 +960,7 @@ public class smaliTreeWalker extends TreeParser { switch (alt6) { case 1 : - // smaliTreeWalker.g:248:8: method + // smaliTreeWalker.g:251:8: method { pushFollow(FOLLOW_method_in_methods358); method17=method(); @@ -974,7 +997,7 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "field" - // smaliTreeWalker.g:253:1: field returns [BuilderField field] : ^( I_FIELD SIMPLE_NAME access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) field_initial_value ( annotations )? ) ; + // smaliTreeWalker.g:256:1: field returns [BuilderField field] : ^( I_FIELD SIMPLE_NAME access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) field_initial_value ( annotations )? ) ; public final BuilderField field() throws RecognitionException { BuilderField field = null; @@ -986,8 +1009,8 @@ public class smaliTreeWalker extends TreeParser { Set<Annotation> annotations22 =null; try { - // smaliTreeWalker.g:254:3: ( ^( I_FIELD SIMPLE_NAME access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) field_initial_value ( annotations )? ) ) - // smaliTreeWalker.g:254:4: ^( I_FIELD SIMPLE_NAME access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) field_initial_value ( annotations )? ) + // smaliTreeWalker.g:257:3: ( ^( I_FIELD SIMPLE_NAME access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) field_initial_value ( annotations )? ) ) + // smaliTreeWalker.g:257:4: ^( I_FIELD SIMPLE_NAME access_list ^( I_FIELD_TYPE nonvoid_type_descriptor ) field_initial_value ( annotations )? ) { match(input,I_FIELD,FOLLOW_I_FIELD_in_field383); match(input, Token.DOWN, null); @@ -1008,7 +1031,7 @@ public class smaliTreeWalker extends TreeParser { field_initial_value19=field_initial_value(); state._fsp--; - // smaliTreeWalker.g:254:98: ( annotations )? + // smaliTreeWalker.g:257:98: ( annotations )? int alt7=2; int LA7_0 = input.LA(1); if ( (LA7_0==I_ANNOTATIONS) ) { @@ -1016,7 +1039,7 @@ public class smaliTreeWalker extends TreeParser { } switch (alt7) { case 1 : - // smaliTreeWalker.g:254:98: annotations + // smaliTreeWalker.g:257:98: annotations { pushFollow(FOLLOW_annotations_in_field397); annotations22=annotations(); @@ -1057,15 +1080,15 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "field_initial_value" - // smaliTreeWalker.g:268:1: field_initial_value returns [EncodedValue encodedValue] : ( ^( I_FIELD_INITIAL_VALUE literal ) |); + // smaliTreeWalker.g:271:1: field_initial_value returns [EncodedValue encodedValue] : ( ^( I_FIELD_INITIAL_VALUE literal ) |); public final EncodedValue field_initial_value() throws RecognitionException { EncodedValue encodedValue = null; - EncodedValue literal23 =null; + ImmutableEncodedValue literal23 =null; try { - // smaliTreeWalker.g:269:3: ( ^( I_FIELD_INITIAL_VALUE literal ) |) + // smaliTreeWalker.g:272:3: ( ^( I_FIELD_INITIAL_VALUE literal ) |) int alt8=2; int LA8_0 = input.LA(1); if ( (LA8_0==I_FIELD_INITIAL_VALUE) ) { @@ -1083,7 +1106,7 @@ public class smaliTreeWalker extends TreeParser { switch (alt8) { case 1 : - // smaliTreeWalker.g:269:5: ^( I_FIELD_INITIAL_VALUE literal ) + // smaliTreeWalker.g:272:5: ^( I_FIELD_INITIAL_VALUE literal ) { match(input,I_FIELD_INITIAL_VALUE,FOLLOW_I_FIELD_INITIAL_VALUE_in_field_initial_value418); match(input, Token.DOWN, null); @@ -1097,7 +1120,7 @@ public class smaliTreeWalker extends TreeParser { } break; case 2 : - // smaliTreeWalker.g:270:16: + // smaliTreeWalker.g:273:16: { } break; @@ -1118,9 +1141,9 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "literal" - // smaliTreeWalker.g:272:1: literal returns [EncodedValue encodedValue] : ( integer_literal | long_literal | short_literal | byte_literal | float_literal | double_literal | char_literal | string_literal | bool_literal | NULL_LITERAL | type_descriptor | array_literal | subannotation | field_literal | method_literal | enum_literal ); - public final EncodedValue literal() throws RecognitionException { - EncodedValue encodedValue = null; + // smaliTreeWalker.g:275:1: literal returns [ImmutableEncodedValue encodedValue] : ( integer_literal | long_literal | short_literal | byte_literal | float_literal | double_literal | char_literal | string_literal | bool_literal | NULL_LITERAL | type_descriptor | array_literal | subannotation | field_literal | method_literal | enum_literal | method_handle_literal | method_prototype ); + public final ImmutableEncodedValue literal() throws RecognitionException { + ImmutableEncodedValue encodedValue = null; int integer_literal24 =0; @@ -1135,13 +1158,15 @@ public class smaliTreeWalker extends TreeParser { String type_descriptor33 =null; List<EncodedValue> array_literal34 =null; TreeRuleReturnScope subannotation35 =null; - FieldReference field_literal36 =null; - MethodReference method_literal37 =null; - FieldReference enum_literal38 =null; + ImmutableFieldReference field_literal36 =null; + ImmutableMethodReference method_literal37 =null; + ImmutableFieldReference enum_literal38 =null; + ImmutableMethodHandleReference method_handle_literal39 =null; + ImmutableMethodProtoReference method_prototype40 =null; try { - // smaliTreeWalker.g:273:3: ( integer_literal | long_literal | short_literal | byte_literal | float_literal | double_literal | char_literal | string_literal | bool_literal | NULL_LITERAL | type_descriptor | array_literal | subannotation | field_literal | method_literal | enum_literal ) - int alt9=16; + // smaliTreeWalker.g:276:3: ( integer_literal | long_literal | short_literal | byte_literal | float_literal | double_literal | char_literal | string_literal | bool_literal | NULL_LITERAL | type_descriptor | array_literal | subannotation | field_literal | method_literal | enum_literal | method_handle_literal | method_prototype ) + int alt9=18; switch ( input.LA(1) ) { case INTEGER_LITERAL: { @@ -1226,6 +1251,16 @@ public class smaliTreeWalker extends TreeParser { alt9=16; } break; + case I_ENCODED_METHOD_HANDLE: + { + alt9=17; + } + break; + case I_METHOD_PROTOTYPE: + { + alt9=18; + } + break; default: NoViableAltException nvae = new NoViableAltException("", 9, 0, input); @@ -1233,7 +1268,7 @@ public class smaliTreeWalker extends TreeParser { } switch (alt9) { case 1 : - // smaliTreeWalker.g:273:5: integer_literal + // smaliTreeWalker.g:276:5: integer_literal { pushFollow(FOLLOW_integer_literal_in_literal442); integer_literal24=integer_literal(); @@ -1243,7 +1278,7 @@ public class smaliTreeWalker extends TreeParser { } break; case 2 : - // smaliTreeWalker.g:274:5: long_literal + // smaliTreeWalker.g:277:5: long_literal { pushFollow(FOLLOW_long_literal_in_literal450); long_literal25=long_literal(); @@ -1253,7 +1288,7 @@ public class smaliTreeWalker extends TreeParser { } break; case 3 : - // smaliTreeWalker.g:275:5: short_literal + // smaliTreeWalker.g:278:5: short_literal { pushFollow(FOLLOW_short_literal_in_literal458); short_literal26=short_literal(); @@ -1263,7 +1298,7 @@ public class smaliTreeWalker extends TreeParser { } break; case 4 : - // smaliTreeWalker.g:276:5: byte_literal + // smaliTreeWalker.g:279:5: byte_literal { pushFollow(FOLLOW_byte_literal_in_literal466); byte_literal27=byte_literal(); @@ -1273,7 +1308,7 @@ public class smaliTreeWalker extends TreeParser { } break; case 5 : - // smaliTreeWalker.g:277:5: float_literal + // smaliTreeWalker.g:280:5: float_literal { pushFollow(FOLLOW_float_literal_in_literal474); float_literal28=float_literal(); @@ -1283,7 +1318,7 @@ public class smaliTreeWalker extends TreeParser { } break; case 6 : - // smaliTreeWalker.g:278:5: double_literal + // smaliTreeWalker.g:281:5: double_literal { pushFollow(FOLLOW_double_literal_in_literal482); double_literal29=double_literal(); @@ -1293,7 +1328,7 @@ public class smaliTreeWalker extends TreeParser { } break; case 7 : - // smaliTreeWalker.g:279:5: char_literal + // smaliTreeWalker.g:282:5: char_literal { pushFollow(FOLLOW_char_literal_in_literal490); char_literal30=char_literal(); @@ -1303,7 +1338,7 @@ public class smaliTreeWalker extends TreeParser { } break; case 8 : - // smaliTreeWalker.g:280:5: string_literal + // smaliTreeWalker.g:283:5: string_literal { pushFollow(FOLLOW_string_literal_in_literal498); string_literal31=string_literal(); @@ -1313,7 +1348,7 @@ public class smaliTreeWalker extends TreeParser { } break; case 9 : - // smaliTreeWalker.g:281:5: bool_literal + // smaliTreeWalker.g:284:5: bool_literal { pushFollow(FOLLOW_bool_literal_in_literal506); bool_literal32=bool_literal(); @@ -1323,14 +1358,14 @@ public class smaliTreeWalker extends TreeParser { } break; case 10 : - // smaliTreeWalker.g:282:5: NULL_LITERAL + // smaliTreeWalker.g:285:5: NULL_LITERAL { match(input,NULL_LITERAL,FOLLOW_NULL_LITERAL_in_literal514); encodedValue = ImmutableNullEncodedValue.INSTANCE; } break; case 11 : - // smaliTreeWalker.g:283:5: type_descriptor + // smaliTreeWalker.g:286:5: type_descriptor { pushFollow(FOLLOW_type_descriptor_in_literal522); type_descriptor33=type_descriptor(); @@ -1340,7 +1375,7 @@ public class smaliTreeWalker extends TreeParser { } break; case 12 : - // smaliTreeWalker.g:284:5: array_literal + // smaliTreeWalker.g:287:5: array_literal { pushFollow(FOLLOW_array_literal_in_literal530); array_literal34=array_literal(); @@ -1350,7 +1385,7 @@ public class smaliTreeWalker extends TreeParser { } break; case 13 : - // smaliTreeWalker.g:285:5: subannotation + // smaliTreeWalker.g:288:5: subannotation { pushFollow(FOLLOW_subannotation_in_literal538); subannotation35=subannotation(); @@ -1360,7 +1395,7 @@ public class smaliTreeWalker extends TreeParser { } break; case 14 : - // smaliTreeWalker.g:286:5: field_literal + // smaliTreeWalker.g:289:5: field_literal { pushFollow(FOLLOW_field_literal_in_literal546); field_literal36=field_literal(); @@ -1370,7 +1405,7 @@ public class smaliTreeWalker extends TreeParser { } break; case 15 : - // smaliTreeWalker.g:287:5: method_literal + // smaliTreeWalker.g:290:5: method_literal { pushFollow(FOLLOW_method_literal_in_literal554); method_literal37=method_literal(); @@ -1380,7 +1415,7 @@ public class smaliTreeWalker extends TreeParser { } break; case 16 : - // smaliTreeWalker.g:288:5: enum_literal + // smaliTreeWalker.g:291:5: enum_literal { pushFollow(FOLLOW_enum_literal_in_literal562); enum_literal38=enum_literal(); @@ -1389,6 +1424,26 @@ public class smaliTreeWalker extends TreeParser { encodedValue = new ImmutableEnumEncodedValue(enum_literal38); } break; + case 17 : + // smaliTreeWalker.g:292:5: method_handle_literal + { + pushFollow(FOLLOW_method_handle_literal_in_literal570); + method_handle_literal39=method_handle_literal(); + state._fsp--; + + encodedValue = new ImmutableMethodHandleEncodedValue(method_handle_literal39); + } + break; + case 18 : + // smaliTreeWalker.g:293:5: method_prototype + { + pushFollow(FOLLOW_method_prototype_in_literal578); + method_prototype40=method_prototype(); + state._fsp--; + + encodedValue = new ImmutableMethodTypeEncodedValue(method_prototype40); + } + break; } } @@ -1406,22 +1461,22 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "fixed_64bit_literal_number" - // smaliTreeWalker.g:291:1: fixed_64bit_literal_number returns [Number value] : ( integer_literal | long_literal | short_literal | byte_literal | float_literal | double_literal | char_literal | bool_literal ); + // smaliTreeWalker.g:296:1: fixed_64bit_literal_number returns [Number value] : ( integer_literal | long_literal | short_literal | byte_literal | float_literal | double_literal | char_literal | bool_literal ); public final Number fixed_64bit_literal_number() throws RecognitionException { Number value = null; - int integer_literal39 =0; - long long_literal40 =0; - short short_literal41 =0; - byte byte_literal42 =0; - float float_literal43 =0.0f; - double double_literal44 =0.0; - char char_literal45 =0; - boolean bool_literal46 =false; + int integer_literal41 =0; + long long_literal42 =0; + short short_literal43 =0; + byte byte_literal44 =0; + float float_literal45 =0.0f; + double double_literal46 =0.0; + char char_literal47 =0; + boolean bool_literal48 =false; try { - // smaliTreeWalker.g:292:3: ( integer_literal | long_literal | short_literal | byte_literal | float_literal | double_literal | char_literal | bool_literal ) + // smaliTreeWalker.g:297:3: ( integer_literal | long_literal | short_literal | byte_literal | float_literal | double_literal | char_literal | bool_literal ) int alt10=8; switch ( input.LA(1) ) { case INTEGER_LITERAL: @@ -1471,83 +1526,83 @@ public class smaliTreeWalker extends TreeParser { } switch (alt10) { case 1 : - // smaliTreeWalker.g:292:5: integer_literal + // smaliTreeWalker.g:297:5: integer_literal { - pushFollow(FOLLOW_integer_literal_in_fixed_64bit_literal_number578); - integer_literal39=integer_literal(); + pushFollow(FOLLOW_integer_literal_in_fixed_64bit_literal_number594); + integer_literal41=integer_literal(); state._fsp--; - value = integer_literal39; + value = integer_literal41; } break; case 2 : - // smaliTreeWalker.g:293:5: long_literal + // smaliTreeWalker.g:298:5: long_literal { - pushFollow(FOLLOW_long_literal_in_fixed_64bit_literal_number586); - long_literal40=long_literal(); + pushFollow(FOLLOW_long_literal_in_fixed_64bit_literal_number602); + long_literal42=long_literal(); state._fsp--; - value = long_literal40; + value = long_literal42; } break; case 3 : - // smaliTreeWalker.g:294:5: short_literal + // smaliTreeWalker.g:299:5: short_literal { - pushFollow(FOLLOW_short_literal_in_fixed_64bit_literal_number594); - short_literal41=short_literal(); + pushFollow(FOLLOW_short_literal_in_fixed_64bit_literal_number610); + short_literal43=short_literal(); state._fsp--; - value = short_literal41; + value = short_literal43; } break; case 4 : - // smaliTreeWalker.g:295:5: byte_literal + // smaliTreeWalker.g:300:5: byte_literal { - pushFollow(FOLLOW_byte_literal_in_fixed_64bit_literal_number602); - byte_literal42=byte_literal(); + pushFollow(FOLLOW_byte_literal_in_fixed_64bit_literal_number618); + byte_literal44=byte_literal(); state._fsp--; - value = byte_literal42; + value = byte_literal44; } break; case 5 : - // smaliTreeWalker.g:296:5: float_literal + // smaliTreeWalker.g:301:5: float_literal { - pushFollow(FOLLOW_float_literal_in_fixed_64bit_literal_number610); - float_literal43=float_literal(); + pushFollow(FOLLOW_float_literal_in_fixed_64bit_literal_number626); + float_literal45=float_literal(); state._fsp--; - value = Float.floatToRawIntBits(float_literal43); + value = Float.floatToRawIntBits(float_literal45); } break; case 6 : - // smaliTreeWalker.g:297:5: double_literal + // smaliTreeWalker.g:302:5: double_literal { - pushFollow(FOLLOW_double_literal_in_fixed_64bit_literal_number618); - double_literal44=double_literal(); + pushFollow(FOLLOW_double_literal_in_fixed_64bit_literal_number634); + double_literal46=double_literal(); state._fsp--; - value = Double.doubleToRawLongBits(double_literal44); + value = Double.doubleToRawLongBits(double_literal46); } break; case 7 : - // smaliTreeWalker.g:298:5: char_literal + // smaliTreeWalker.g:303:5: char_literal { - pushFollow(FOLLOW_char_literal_in_fixed_64bit_literal_number626); - char_literal45=char_literal(); + pushFollow(FOLLOW_char_literal_in_fixed_64bit_literal_number642); + char_literal47=char_literal(); state._fsp--; - value = (int)char_literal45; + value = (int)char_literal47; } break; case 8 : - // smaliTreeWalker.g:299:5: bool_literal + // smaliTreeWalker.g:304:5: bool_literal { - pushFollow(FOLLOW_bool_literal_in_fixed_64bit_literal_number634); - bool_literal46=bool_literal(); + pushFollow(FOLLOW_bool_literal_in_fixed_64bit_literal_number650); + bool_literal48=bool_literal(); state._fsp--; - value = bool_literal46?1:0; + value = bool_literal48?1:0; } break; @@ -1567,22 +1622,22 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "fixed_64bit_literal" - // smaliTreeWalker.g:301:1: fixed_64bit_literal returns [long value] : ( integer_literal | long_literal | short_literal | byte_literal | float_literal | double_literal | char_literal | bool_literal ); + // smaliTreeWalker.g:306:1: fixed_64bit_literal returns [long value] : ( integer_literal | long_literal | short_literal | byte_literal | float_literal | double_literal | char_literal | bool_literal ); public final long fixed_64bit_literal() throws RecognitionException { long value = 0; - int integer_literal47 =0; - long long_literal48 =0; - short short_literal49 =0; - byte byte_literal50 =0; - float float_literal51 =0.0f; - double double_literal52 =0.0; - char char_literal53 =0; - boolean bool_literal54 =false; + int integer_literal49 =0; + long long_literal50 =0; + short short_literal51 =0; + byte byte_literal52 =0; + float float_literal53 =0.0f; + double double_literal54 =0.0; + char char_literal55 =0; + boolean bool_literal56 =false; try { - // smaliTreeWalker.g:302:3: ( integer_literal | long_literal | short_literal | byte_literal | float_literal | double_literal | char_literal | bool_literal ) + // smaliTreeWalker.g:307:3: ( integer_literal | long_literal | short_literal | byte_literal | float_literal | double_literal | char_literal | bool_literal ) int alt11=8; switch ( input.LA(1) ) { case INTEGER_LITERAL: @@ -1632,83 +1687,83 @@ public class smaliTreeWalker extends TreeParser { } switch (alt11) { case 1 : - // smaliTreeWalker.g:302:5: integer_literal + // smaliTreeWalker.g:307:5: integer_literal { - pushFollow(FOLLOW_integer_literal_in_fixed_64bit_literal649); - integer_literal47=integer_literal(); + pushFollow(FOLLOW_integer_literal_in_fixed_64bit_literal665); + integer_literal49=integer_literal(); state._fsp--; - value = integer_literal47; + value = integer_literal49; } break; case 2 : - // smaliTreeWalker.g:303:5: long_literal + // smaliTreeWalker.g:308:5: long_literal { - pushFollow(FOLLOW_long_literal_in_fixed_64bit_literal657); - long_literal48=long_literal(); + pushFollow(FOLLOW_long_literal_in_fixed_64bit_literal673); + long_literal50=long_literal(); state._fsp--; - value = long_literal48; + value = long_literal50; } break; case 3 : - // smaliTreeWalker.g:304:5: short_literal + // smaliTreeWalker.g:309:5: short_literal { - pushFollow(FOLLOW_short_literal_in_fixed_64bit_literal665); - short_literal49=short_literal(); + pushFollow(FOLLOW_short_literal_in_fixed_64bit_literal681); + short_literal51=short_literal(); state._fsp--; - value = short_literal49; + value = short_literal51; } break; case 4 : - // smaliTreeWalker.g:305:5: byte_literal + // smaliTreeWalker.g:310:5: byte_literal { - pushFollow(FOLLOW_byte_literal_in_fixed_64bit_literal673); - byte_literal50=byte_literal(); + pushFollow(FOLLOW_byte_literal_in_fixed_64bit_literal689); + byte_literal52=byte_literal(); state._fsp--; - value = byte_literal50; + value = byte_literal52; } break; case 5 : - // smaliTreeWalker.g:306:5: float_literal + // smaliTreeWalker.g:311:5: float_literal { - pushFollow(FOLLOW_float_literal_in_fixed_64bit_literal681); - float_literal51=float_literal(); + pushFollow(FOLLOW_float_literal_in_fixed_64bit_literal697); + float_literal53=float_literal(); state._fsp--; - value = Float.floatToRawIntBits(float_literal51); + value = Float.floatToRawIntBits(float_literal53); } break; case 6 : - // smaliTreeWalker.g:307:5: double_literal + // smaliTreeWalker.g:312:5: double_literal { - pushFollow(FOLLOW_double_literal_in_fixed_64bit_literal689); - double_literal52=double_literal(); + pushFollow(FOLLOW_double_literal_in_fixed_64bit_literal705); + double_literal54=double_literal(); state._fsp--; - value = Double.doubleToRawLongBits(double_literal52); + value = Double.doubleToRawLongBits(double_literal54); } break; case 7 : - // smaliTreeWalker.g:308:5: char_literal + // smaliTreeWalker.g:313:5: char_literal { - pushFollow(FOLLOW_char_literal_in_fixed_64bit_literal697); - char_literal53=char_literal(); + pushFollow(FOLLOW_char_literal_in_fixed_64bit_literal713); + char_literal55=char_literal(); state._fsp--; - value = char_literal53; + value = char_literal55; } break; case 8 : - // smaliTreeWalker.g:309:5: bool_literal + // smaliTreeWalker.g:314:5: bool_literal { - pushFollow(FOLLOW_bool_literal_in_fixed_64bit_literal705); - bool_literal54=bool_literal(); + pushFollow(FOLLOW_bool_literal_in_fixed_64bit_literal721); + bool_literal56=bool_literal(); state._fsp--; - value = bool_literal54?1:0; + value = bool_literal56?1:0; } break; @@ -1728,21 +1783,21 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "fixed_32bit_literal" - // smaliTreeWalker.g:313:1: fixed_32bit_literal returns [int value] : ( integer_literal | long_literal | short_literal | byte_literal | float_literal | char_literal | bool_literal ); + // smaliTreeWalker.g:318:1: fixed_32bit_literal returns [int value] : ( integer_literal | long_literal | short_literal | byte_literal | float_literal | char_literal | bool_literal ); public final int fixed_32bit_literal() throws RecognitionException { int value = 0; - int integer_literal55 =0; - long long_literal56 =0; - short short_literal57 =0; - byte byte_literal58 =0; - float float_literal59 =0.0f; - char char_literal60 =0; - boolean bool_literal61 =false; + int integer_literal57 =0; + long long_literal58 =0; + short short_literal59 =0; + byte byte_literal60 =0; + float float_literal61 =0.0f; + char char_literal62 =0; + boolean bool_literal63 =false; try { - // smaliTreeWalker.g:314:3: ( integer_literal | long_literal | short_literal | byte_literal | float_literal | char_literal | bool_literal ) + // smaliTreeWalker.g:319:3: ( integer_literal | long_literal | short_literal | byte_literal | float_literal | char_literal | bool_literal ) int alt12=7; switch ( input.LA(1) ) { case INTEGER_LITERAL: @@ -1787,73 +1842,73 @@ public class smaliTreeWalker extends TreeParser { } switch (alt12) { case 1 : - // smaliTreeWalker.g:314:5: integer_literal + // smaliTreeWalker.g:319:5: integer_literal { - pushFollow(FOLLOW_integer_literal_in_fixed_32bit_literal722); - integer_literal55=integer_literal(); + pushFollow(FOLLOW_integer_literal_in_fixed_32bit_literal738); + integer_literal57=integer_literal(); state._fsp--; - value = integer_literal55; + value = integer_literal57; } break; case 2 : - // smaliTreeWalker.g:315:5: long_literal + // smaliTreeWalker.g:320:5: long_literal { - pushFollow(FOLLOW_long_literal_in_fixed_32bit_literal730); - long_literal56=long_literal(); + pushFollow(FOLLOW_long_literal_in_fixed_32bit_literal746); + long_literal58=long_literal(); state._fsp--; - LiteralTools.checkInt(long_literal56); value = (int)long_literal56; + LiteralTools.checkInt(long_literal58); value = (int)long_literal58; } break; case 3 : - // smaliTreeWalker.g:316:5: short_literal + // smaliTreeWalker.g:321:5: short_literal { - pushFollow(FOLLOW_short_literal_in_fixed_32bit_literal738); - short_literal57=short_literal(); + pushFollow(FOLLOW_short_literal_in_fixed_32bit_literal754); + short_literal59=short_literal(); state._fsp--; - value = short_literal57; + value = short_literal59; } break; case 4 : - // smaliTreeWalker.g:317:5: byte_literal + // smaliTreeWalker.g:322:5: byte_literal { - pushFollow(FOLLOW_byte_literal_in_fixed_32bit_literal746); - byte_literal58=byte_literal(); + pushFollow(FOLLOW_byte_literal_in_fixed_32bit_literal762); + byte_literal60=byte_literal(); state._fsp--; - value = byte_literal58; + value = byte_literal60; } break; case 5 : - // smaliTreeWalker.g:318:5: float_literal + // smaliTreeWalker.g:323:5: float_literal { - pushFollow(FOLLOW_float_literal_in_fixed_32bit_literal754); - float_literal59=float_literal(); + pushFollow(FOLLOW_float_literal_in_fixed_32bit_literal770); + float_literal61=float_literal(); state._fsp--; - value = Float.floatToRawIntBits(float_literal59); + value = Float.floatToRawIntBits(float_literal61); } break; case 6 : - // smaliTreeWalker.g:319:5: char_literal + // smaliTreeWalker.g:324:5: char_literal { - pushFollow(FOLLOW_char_literal_in_fixed_32bit_literal762); - char_literal60=char_literal(); + pushFollow(FOLLOW_char_literal_in_fixed_32bit_literal778); + char_literal62=char_literal(); state._fsp--; - value = char_literal60; + value = char_literal62; } break; case 7 : - // smaliTreeWalker.g:320:5: bool_literal + // smaliTreeWalker.g:325:5: bool_literal { - pushFollow(FOLLOW_bool_literal_in_fixed_32bit_literal770); - bool_literal61=bool_literal(); + pushFollow(FOLLOW_bool_literal_in_fixed_32bit_literal786); + bool_literal63=bool_literal(); state._fsp--; - value = bool_literal61?1:0; + value = bool_literal63?1:0; } break; @@ -1873,22 +1928,22 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "array_elements" - // smaliTreeWalker.g:322:1: array_elements returns [List<Number> elements] : ^( I_ARRAY_ELEMENTS ( fixed_64bit_literal_number )* ) ; + // smaliTreeWalker.g:327:1: array_elements returns [List<Number> elements] : ^( I_ARRAY_ELEMENTS ( fixed_64bit_literal_number )* ) ; public final List<Number> array_elements() throws RecognitionException { List<Number> elements = null; - Number fixed_64bit_literal_number62 =null; + Number fixed_64bit_literal_number64 =null; try { - // smaliTreeWalker.g:323:3: ( ^( I_ARRAY_ELEMENTS ( fixed_64bit_literal_number )* ) ) - // smaliTreeWalker.g:323:5: ^( I_ARRAY_ELEMENTS ( fixed_64bit_literal_number )* ) + // smaliTreeWalker.g:328:3: ( ^( I_ARRAY_ELEMENTS ( fixed_64bit_literal_number )* ) ) + // smaliTreeWalker.g:328:5: ^( I_ARRAY_ELEMENTS ( fixed_64bit_literal_number )* ) { elements = Lists.newArrayList(); - match(input,I_ARRAY_ELEMENTS,FOLLOW_I_ARRAY_ELEMENTS_in_array_elements792); + match(input,I_ARRAY_ELEMENTS,FOLLOW_I_ARRAY_ELEMENTS_in_array_elements808); if ( input.LA(1)==Token.DOWN ) { match(input, Token.DOWN, null); - // smaliTreeWalker.g:325:7: ( fixed_64bit_literal_number )* + // smaliTreeWalker.g:330:7: ( fixed_64bit_literal_number )* loop13: while (true) { int alt13=2; @@ -1899,14 +1954,14 @@ public class smaliTreeWalker extends TreeParser { switch (alt13) { case 1 : - // smaliTreeWalker.g:325:8: fixed_64bit_literal_number + // smaliTreeWalker.g:330:8: fixed_64bit_literal_number { - pushFollow(FOLLOW_fixed_64bit_literal_number_in_array_elements801); - fixed_64bit_literal_number62=fixed_64bit_literal_number(); + pushFollow(FOLLOW_fixed_64bit_literal_number_in_array_elements817); + fixed_64bit_literal_number64=fixed_64bit_literal_number(); state._fsp--; - elements.add(fixed_64bit_literal_number62); + elements.add(fixed_64bit_literal_number64); } break; @@ -1936,22 +1991,22 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "packed_switch_elements" - // smaliTreeWalker.g:330:1: packed_switch_elements returns [List<Label> elements] : ^( I_PACKED_SWITCH_ELEMENTS ( label_ref )* ) ; + // smaliTreeWalker.g:335:1: packed_switch_elements returns [List<Label> elements] : ^( I_PACKED_SWITCH_ELEMENTS ( label_ref )* ) ; public final List<Label> packed_switch_elements() throws RecognitionException { List<Label> elements = null; - Label label_ref63 =null; + Label label_ref65 =null; elements = Lists.newArrayList(); try { - // smaliTreeWalker.g:332:3: ( ^( I_PACKED_SWITCH_ELEMENTS ( label_ref )* ) ) - // smaliTreeWalker.g:333:5: ^( I_PACKED_SWITCH_ELEMENTS ( label_ref )* ) + // smaliTreeWalker.g:337:3: ( ^( I_PACKED_SWITCH_ELEMENTS ( label_ref )* ) ) + // smaliTreeWalker.g:338:5: ^( I_PACKED_SWITCH_ELEMENTS ( label_ref )* ) { - match(input,I_PACKED_SWITCH_ELEMENTS,FOLLOW_I_PACKED_SWITCH_ELEMENTS_in_packed_switch_elements837); + match(input,I_PACKED_SWITCH_ELEMENTS,FOLLOW_I_PACKED_SWITCH_ELEMENTS_in_packed_switch_elements853); if ( input.LA(1)==Token.DOWN ) { match(input, Token.DOWN, null); - // smaliTreeWalker.g:334:7: ( label_ref )* + // smaliTreeWalker.g:339:7: ( label_ref )* loop14: while (true) { int alt14=2; @@ -1962,13 +2017,13 @@ public class smaliTreeWalker extends TreeParser { switch (alt14) { case 1 : - // smaliTreeWalker.g:334:8: label_ref + // smaliTreeWalker.g:339:8: label_ref { - pushFollow(FOLLOW_label_ref_in_packed_switch_elements846); - label_ref63=label_ref(); + pushFollow(FOLLOW_label_ref_in_packed_switch_elements862); + label_ref65=label_ref(); state._fsp--; - elements.add(label_ref63); + elements.add(label_ref65); } break; @@ -1997,23 +2052,23 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "sparse_switch_elements" - // smaliTreeWalker.g:337:1: sparse_switch_elements returns [List<SwitchLabelElement> elements] : ^( I_SPARSE_SWITCH_ELEMENTS ( fixed_32bit_literal label_ref )* ) ; + // smaliTreeWalker.g:342:1: sparse_switch_elements returns [List<SwitchLabelElement> elements] : ^( I_SPARSE_SWITCH_ELEMENTS ( fixed_32bit_literal label_ref )* ) ; public final List<SwitchLabelElement> sparse_switch_elements() throws RecognitionException { List<SwitchLabelElement> elements = null; - int fixed_32bit_literal64 =0; - Label label_ref65 =null; + int fixed_32bit_literal66 =0; + Label label_ref67 =null; elements = Lists.newArrayList(); try { - // smaliTreeWalker.g:339:3: ( ^( I_SPARSE_SWITCH_ELEMENTS ( fixed_32bit_literal label_ref )* ) ) - // smaliTreeWalker.g:340:5: ^( I_SPARSE_SWITCH_ELEMENTS ( fixed_32bit_literal label_ref )* ) + // smaliTreeWalker.g:344:3: ( ^( I_SPARSE_SWITCH_ELEMENTS ( fixed_32bit_literal label_ref )* ) ) + // smaliTreeWalker.g:345:5: ^( I_SPARSE_SWITCH_ELEMENTS ( fixed_32bit_literal label_ref )* ) { - match(input,I_SPARSE_SWITCH_ELEMENTS,FOLLOW_I_SPARSE_SWITCH_ELEMENTS_in_sparse_switch_elements881); + match(input,I_SPARSE_SWITCH_ELEMENTS,FOLLOW_I_SPARSE_SWITCH_ELEMENTS_in_sparse_switch_elements897); if ( input.LA(1)==Token.DOWN ) { match(input, Token.DOWN, null); - // smaliTreeWalker.g:341:8: ( fixed_32bit_literal label_ref )* + // smaliTreeWalker.g:346:8: ( fixed_32bit_literal label_ref )* loop15: while (true) { int alt15=2; @@ -2024,18 +2079,18 @@ public class smaliTreeWalker extends TreeParser { switch (alt15) { case 1 : - // smaliTreeWalker.g:341:9: fixed_32bit_literal label_ref + // smaliTreeWalker.g:346:9: fixed_32bit_literal label_ref { - pushFollow(FOLLOW_fixed_32bit_literal_in_sparse_switch_elements891); - fixed_32bit_literal64=fixed_32bit_literal(); + pushFollow(FOLLOW_fixed_32bit_literal_in_sparse_switch_elements907); + fixed_32bit_literal66=fixed_32bit_literal(); state._fsp--; - pushFollow(FOLLOW_label_ref_in_sparse_switch_elements893); - label_ref65=label_ref(); + pushFollow(FOLLOW_label_ref_in_sparse_switch_elements909); + label_ref67=label_ref(); state._fsp--; - elements.add(new SwitchLabelElement(fixed_32bit_literal64, label_ref65)); + elements.add(new SwitchLabelElement(fixed_32bit_literal66, label_ref67)); } break; @@ -2073,18 +2128,18 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "method" - // smaliTreeWalker.g:347:1: method returns [BuilderMethod ret] : ^( I_METHOD method_name_and_prototype access_list ( ( registers_directive ) |) ordered_method_items catches parameters[$method_name_and_prototype.parameters] annotations ) ; + // smaliTreeWalker.g:352:1: method returns [BuilderMethod ret] : ^( I_METHOD method_name_and_prototype access_list ( ( registers_directive ) |) ordered_method_items catches parameters[$method_name_and_prototype.parameters] annotations ) ; public final BuilderMethod method() throws RecognitionException { method_stack.push(new method_scope()); BuilderMethod ret = null; - CommonTree I_METHOD70=null; - int access_list66 =0; - TreeRuleReturnScope method_name_and_prototype67 =null; - TreeRuleReturnScope registers_directive68 =null; - List<BuilderTryBlock> catches69 =null; - Set<Annotation> annotations71 =null; + CommonTree I_METHOD72=null; + int access_list68 =0; + TreeRuleReturnScope method_name_and_prototype69 =null; + TreeRuleReturnScope registers_directive70 =null; + List<BuilderTryBlock> catches71 =null; + Set<Annotation> annotations73 =null; method_stack.peek().totalMethodRegisters = 0; @@ -2093,26 +2148,26 @@ public class smaliTreeWalker extends TreeParser { method_stack.peek().isStatic = false; try { - // smaliTreeWalker.g:362:3: ( ^( I_METHOD method_name_and_prototype access_list ( ( registers_directive ) |) ordered_method_items catches parameters[$method_name_and_prototype.parameters] annotations ) ) - // smaliTreeWalker.g:363:5: ^( I_METHOD method_name_and_prototype access_list ( ( registers_directive ) |) ordered_method_items catches parameters[$method_name_and_prototype.parameters] annotations ) + // smaliTreeWalker.g:367:3: ( ^( I_METHOD method_name_and_prototype access_list ( ( registers_directive ) |) ordered_method_items catches parameters[$method_name_and_prototype.parameters] annotations ) ) + // smaliTreeWalker.g:368:5: ^( I_METHOD method_name_and_prototype access_list ( ( registers_directive ) |) ordered_method_items catches parameters[$method_name_and_prototype.parameters] annotations ) { - I_METHOD70=(CommonTree)match(input,I_METHOD,FOLLOW_I_METHOD_in_method945); + I_METHOD72=(CommonTree)match(input,I_METHOD,FOLLOW_I_METHOD_in_method961); match(input, Token.DOWN, null); - pushFollow(FOLLOW_method_name_and_prototype_in_method953); - method_name_and_prototype67=method_name_and_prototype(); + pushFollow(FOLLOW_method_name_and_prototype_in_method969); + method_name_and_prototype69=method_name_and_prototype(); state._fsp--; - pushFollow(FOLLOW_access_list_in_method961); - access_list66=access_list(); + pushFollow(FOLLOW_access_list_in_method977); + access_list68=access_list(); state._fsp--; - accessFlags = access_list66; + accessFlags = access_list68; method_stack.peek().isStatic = AccessFlags.STATIC.isSet(accessFlags); method_stack.peek().methodParameterRegisters = - MethodUtil.getParameterRegisterCount((method_name_and_prototype67!=null?((smaliTreeWalker.method_name_and_prototype_return)method_name_and_prototype67).parameters:null), method_stack.peek().isStatic); + MethodUtil.getParameterRegisterCount((method_name_and_prototype69!=null?((smaliTreeWalker.method_name_and_prototype_return)method_name_and_prototype69).parameters:null), method_stack.peek().isStatic); - // smaliTreeWalker.g:372:7: ( ( registers_directive ) |) + // smaliTreeWalker.g:377:7: ( ( registers_directive ) |) int alt16=2; int LA16_0 = input.LA(1); if ( (LA16_0==I_LOCALS||LA16_0==I_REGISTERS) ) { @@ -2130,20 +2185,20 @@ public class smaliTreeWalker extends TreeParser { switch (alt16) { case 1 : - // smaliTreeWalker.g:373:9: ( registers_directive ) + // smaliTreeWalker.g:378:9: ( registers_directive ) { - // smaliTreeWalker.g:373:9: ( registers_directive ) - // smaliTreeWalker.g:373:10: registers_directive + // smaliTreeWalker.g:378:9: ( registers_directive ) + // smaliTreeWalker.g:378:10: registers_directive { - pushFollow(FOLLOW_registers_directive_in_method988); - registers_directive68=registers_directive(); + pushFollow(FOLLOW_registers_directive_in_method1004); + registers_directive70=registers_directive(); state._fsp--; - if ((registers_directive68!=null?((smaliTreeWalker.registers_directive_return)registers_directive68).isLocalsDirective:false)) { - method_stack.peek().totalMethodRegisters = (registers_directive68!=null?((smaliTreeWalker.registers_directive_return)registers_directive68).registers:0) + method_stack.peek().methodParameterRegisters; + if ((registers_directive70!=null?((smaliTreeWalker.registers_directive_return)registers_directive70).isLocalsDirective:false)) { + method_stack.peek().totalMethodRegisters = (registers_directive70!=null?((smaliTreeWalker.registers_directive_return)registers_directive70).registers:0) + method_stack.peek().methodParameterRegisters; } else { - method_stack.peek().totalMethodRegisters = (registers_directive68!=null?((smaliTreeWalker.registers_directive_return)registers_directive68).registers:0); + method_stack.peek().totalMethodRegisters = (registers_directive70!=null?((smaliTreeWalker.registers_directive_return)registers_directive70).registers:0); } method_stack.peek().methodBuilder = new MethodImplementationBuilder(method_stack.peek().totalMethodRegisters); @@ -2154,7 +2209,7 @@ public class smaliTreeWalker extends TreeParser { } break; case 2 : - // smaliTreeWalker.g:386:9: + // smaliTreeWalker.g:391:9: { method_stack.peek().methodBuilder = new MethodImplementationBuilder(0); @@ -2164,27 +2219,27 @@ public class smaliTreeWalker extends TreeParser { } - pushFollow(FOLLOW_ordered_method_items_in_method1045); + pushFollow(FOLLOW_ordered_method_items_in_method1061); ordered_method_items(); state._fsp--; - pushFollow(FOLLOW_catches_in_method1053); - catches69=catches(); + pushFollow(FOLLOW_catches_in_method1069); + catches71=catches(); state._fsp--; - pushFollow(FOLLOW_parameters_in_method1061); - parameters((method_name_and_prototype67!=null?((smaliTreeWalker.method_name_and_prototype_return)method_name_and_prototype67).parameters:null)); + pushFollow(FOLLOW_parameters_in_method1077); + parameters((method_name_and_prototype69!=null?((smaliTreeWalker.method_name_and_prototype_return)method_name_and_prototype69).parameters:null)); state._fsp--; - pushFollow(FOLLOW_annotations_in_method1070); - annotations71=annotations(); + pushFollow(FOLLOW_annotations_in_method1086); + annotations73=annotations(); state._fsp--; match(input, Token.UP, null); MethodImplementation methodImplementation = null; - List<BuilderTryBlock> tryBlocks = catches69; + List<BuilderTryBlock> tryBlocks = catches71; boolean isAbstract = false; boolean isNative = false; @@ -2199,7 +2254,7 @@ public class smaliTreeWalker extends TreeParser { if (Iterables.isEmpty(methodImplementation.getInstructions())) { if (!isAbstract && !isNative) { - throw new SemanticException(input, I_METHOD70, "A non-abstract/non-native method must have at least 1 instruction"); + throw new SemanticException(input, I_METHOD72, "A non-abstract/non-native method must have at least 1 instruction"); } String methodType; @@ -2209,37 +2264,37 @@ public class smaliTreeWalker extends TreeParser { methodType = "a native"; } - if ((registers_directive68!=null?((CommonTree)registers_directive68.start):null) != null) { - if ((registers_directive68!=null?((smaliTreeWalker.registers_directive_return)registers_directive68).isLocalsDirective:false)) { - throw new SemanticException(input, (registers_directive68!=null?((CommonTree)registers_directive68.start):null), "A .locals directive is not valid in %s method", methodType); + if ((registers_directive70!=null?((CommonTree)registers_directive70.start):null) != null) { + if ((registers_directive70!=null?((smaliTreeWalker.registers_directive_return)registers_directive70).isLocalsDirective:false)) { + throw new SemanticException(input, (registers_directive70!=null?((CommonTree)registers_directive70.start):null), "A .locals directive is not valid in %s method", methodType); } else { - throw new SemanticException(input, (registers_directive68!=null?((CommonTree)registers_directive68.start):null), "A .registers directive is not valid in %s method", methodType); + throw new SemanticException(input, (registers_directive70!=null?((CommonTree)registers_directive70.start):null), "A .registers directive is not valid in %s method", methodType); } } if (methodImplementation.getTryBlocks().size() > 0) { - throw new SemanticException(input, I_METHOD70, "try/catch blocks cannot be present in %s method", methodType); + throw new SemanticException(input, I_METHOD72, "try/catch blocks cannot be present in %s method", methodType); } if (!Iterables.isEmpty(methodImplementation.getDebugItems())) { - throw new SemanticException(input, I_METHOD70, "debug directives cannot be present in %s method", methodType); + throw new SemanticException(input, I_METHOD72, "debug directives cannot be present in %s method", methodType); } methodImplementation = null; } else { if (isAbstract) { - throw new SemanticException(input, I_METHOD70, "An abstract method cannot have any instructions"); + throw new SemanticException(input, I_METHOD72, "An abstract method cannot have any instructions"); } if (isNative) { - throw new SemanticException(input, I_METHOD70, "A native method cannot have any instructions"); + throw new SemanticException(input, I_METHOD72, "A native method cannot have any instructions"); } - if ((registers_directive68!=null?((CommonTree)registers_directive68.start):null) == null) { - throw new SemanticException(input, I_METHOD70, "A .registers or .locals directive must be present for a non-abstract/non-final method"); + if ((registers_directive70!=null?((CommonTree)registers_directive70.start):null) == null) { + throw new SemanticException(input, I_METHOD72, "A .registers or .locals directive must be present for a non-abstract/non-final method"); } if (method_stack.peek().totalMethodRegisters < method_stack.peek().methodParameterRegisters) { - throw new SemanticException(input, (registers_directive68!=null?((CommonTree)registers_directive68.start):null), "This method requires at least " + + throw new SemanticException(input, (registers_directive70!=null?((CommonTree)registers_directive70.start):null), "This method requires at least " + Integer.toString(method_stack.peek().methodParameterRegisters) + " registers, for the method parameters"); } @@ -2247,11 +2302,11 @@ public class smaliTreeWalker extends TreeParser { ret = dexBuilder.internMethod( classType, - (method_name_and_prototype67!=null?((smaliTreeWalker.method_name_and_prototype_return)method_name_and_prototype67).name:null), - (method_name_and_prototype67!=null?((smaliTreeWalker.method_name_and_prototype_return)method_name_and_prototype67).parameters:null), - (method_name_and_prototype67!=null?((smaliTreeWalker.method_name_and_prototype_return)method_name_and_prototype67).returnType:null), + (method_name_and_prototype69!=null?((smaliTreeWalker.method_name_and_prototype_return)method_name_and_prototype69).name:null), + (method_name_and_prototype69!=null?((smaliTreeWalker.method_name_and_prototype_return)method_name_and_prototype69).parameters:null), + (method_name_and_prototype69!=null?((smaliTreeWalker.method_name_and_prototype_return)method_name_and_prototype69).returnType:null), accessFlags, - annotations71, + annotations73, methodImplementation); } @@ -2270,44 +2325,40 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR end "method" - public static class method_prototype_return extends TreeRuleReturnScope { - public List<String> parameters; - public String returnType; - }; - // $ANTLR start "method_prototype" - // smaliTreeWalker.g:468:1: method_prototype returns [List<String> parameters, String returnType] : ^( I_METHOD_PROTOTYPE ^( I_METHOD_RETURN_TYPE type_descriptor ) method_type_list ) ; - public final smaliTreeWalker.method_prototype_return method_prototype() throws RecognitionException { - smaliTreeWalker.method_prototype_return retval = new smaliTreeWalker.method_prototype_return(); - retval.start = input.LT(1); + // smaliTreeWalker.g:473:1: method_prototype returns [ImmutableMethodProtoReference proto] : ^( I_METHOD_PROTOTYPE ^( I_METHOD_RETURN_TYPE type_descriptor ) method_type_list ) ; + public final ImmutableMethodProtoReference method_prototype() throws RecognitionException { + ImmutableMethodProtoReference proto = null; + - String type_descriptor72 =null; - List<String> method_type_list73 =null; + String type_descriptor74 =null; + List<String> method_type_list75 =null; try { - // smaliTreeWalker.g:469:3: ( ^( I_METHOD_PROTOTYPE ^( I_METHOD_RETURN_TYPE type_descriptor ) method_type_list ) ) - // smaliTreeWalker.g:469:5: ^( I_METHOD_PROTOTYPE ^( I_METHOD_RETURN_TYPE type_descriptor ) method_type_list ) + // smaliTreeWalker.g:474:3: ( ^( I_METHOD_PROTOTYPE ^( I_METHOD_RETURN_TYPE type_descriptor ) method_type_list ) ) + // smaliTreeWalker.g:474:5: ^( I_METHOD_PROTOTYPE ^( I_METHOD_RETURN_TYPE type_descriptor ) method_type_list ) { - match(input,I_METHOD_PROTOTYPE,FOLLOW_I_METHOD_PROTOTYPE_in_method_prototype1094); + match(input,I_METHOD_PROTOTYPE,FOLLOW_I_METHOD_PROTOTYPE_in_method_prototype1110); match(input, Token.DOWN, null); - match(input,I_METHOD_RETURN_TYPE,FOLLOW_I_METHOD_RETURN_TYPE_in_method_prototype1097); + match(input,I_METHOD_RETURN_TYPE,FOLLOW_I_METHOD_RETURN_TYPE_in_method_prototype1113); match(input, Token.DOWN, null); - pushFollow(FOLLOW_type_descriptor_in_method_prototype1099); - type_descriptor72=type_descriptor(); + pushFollow(FOLLOW_type_descriptor_in_method_prototype1115); + type_descriptor74=type_descriptor(); state._fsp--; match(input, Token.UP, null); - pushFollow(FOLLOW_method_type_list_in_method_prototype1102); - method_type_list73=method_type_list(); + pushFollow(FOLLOW_method_type_list_in_method_prototype1118); + method_type_list75=method_type_list(); state._fsp--; match(input, Token.UP, null); - retval.returnType = type_descriptor72; - retval.parameters = method_type_list73; + String returnType = type_descriptor74; + List<String> parameters = method_type_list75; + proto = new ImmutableMethodProtoReference(parameters, returnType); } @@ -2319,7 +2370,7 @@ public class smaliTreeWalker extends TreeParser { finally { // do for sure before leaving } - return retval; + return proto; } // $ANTLR end "method_prototype" @@ -2332,36 +2383,36 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "method_name_and_prototype" - // smaliTreeWalker.g:475:1: method_name_and_prototype returns [String name, List<SmaliMethodParameter> parameters, String returnType] : SIMPLE_NAME method_prototype ; + // smaliTreeWalker.g:481:1: method_name_and_prototype returns [String name, List<SmaliMethodParameter> parameters, String returnType] : SIMPLE_NAME method_prototype ; public final smaliTreeWalker.method_name_and_prototype_return method_name_and_prototype() throws RecognitionException { smaliTreeWalker.method_name_and_prototype_return retval = new smaliTreeWalker.method_name_and_prototype_return(); retval.start = input.LT(1); - CommonTree SIMPLE_NAME74=null; - TreeRuleReturnScope method_prototype75 =null; + CommonTree SIMPLE_NAME76=null; + ImmutableMethodProtoReference method_prototype77 =null; try { - // smaliTreeWalker.g:476:3: ( SIMPLE_NAME method_prototype ) - // smaliTreeWalker.g:476:5: SIMPLE_NAME method_prototype + // smaliTreeWalker.g:482:3: ( SIMPLE_NAME method_prototype ) + // smaliTreeWalker.g:482:5: SIMPLE_NAME method_prototype { - SIMPLE_NAME74=(CommonTree)match(input,SIMPLE_NAME,FOLLOW_SIMPLE_NAME_in_method_name_and_prototype1120); - pushFollow(FOLLOW_method_prototype_in_method_name_and_prototype1122); - method_prototype75=method_prototype(); + SIMPLE_NAME76=(CommonTree)match(input,SIMPLE_NAME,FOLLOW_SIMPLE_NAME_in_method_name_and_prototype1136); + pushFollow(FOLLOW_method_prototype_in_method_name_and_prototype1138); + method_prototype77=method_prototype(); state._fsp--; - retval.name = (SIMPLE_NAME74!=null?SIMPLE_NAME74.getText():null); + retval.name = (SIMPLE_NAME76!=null?SIMPLE_NAME76.getText():null); retval.parameters = Lists.newArrayList(); int paramRegister = 0; - for (String type: (method_prototype75!=null?((smaliTreeWalker.method_prototype_return)method_prototype75).parameters:null)) { - retval.parameters.add(new SmaliMethodParameter(paramRegister++, type)); + for (CharSequence type: method_prototype77.getParameterTypes()) { + retval.parameters.add(new SmaliMethodParameter(paramRegister++, type.toString())); char c = type.charAt(0); if (c == 'D' || c == 'J') { paramRegister++; } } - retval.returnType = (method_prototype75!=null?((smaliTreeWalker.method_prototype_return)method_prototype75).returnType:null); + retval.returnType = method_prototype77.getReturnType(); } @@ -2380,21 +2431,21 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "method_type_list" - // smaliTreeWalker.g:492:1: method_type_list returns [List<String> types] : ( nonvoid_type_descriptor )* ; + // smaliTreeWalker.g:498:1: method_type_list returns [List<String> types] : ( nonvoid_type_descriptor )* ; public final List<String> method_type_list() throws RecognitionException { List<String> types = null; - TreeRuleReturnScope nonvoid_type_descriptor76 =null; + TreeRuleReturnScope nonvoid_type_descriptor78 =null; types = Lists.newArrayList(); try { - // smaliTreeWalker.g:497:3: ( ( nonvoid_type_descriptor )* ) - // smaliTreeWalker.g:497:5: ( nonvoid_type_descriptor )* + // smaliTreeWalker.g:503:3: ( ( nonvoid_type_descriptor )* ) + // smaliTreeWalker.g:503:5: ( nonvoid_type_descriptor )* { - // smaliTreeWalker.g:497:5: ( nonvoid_type_descriptor )* + // smaliTreeWalker.g:503:5: ( nonvoid_type_descriptor )* loop17: while (true) { int alt17=2; @@ -2405,14 +2456,14 @@ public class smaliTreeWalker extends TreeParser { switch (alt17) { case 1 : - // smaliTreeWalker.g:498:7: nonvoid_type_descriptor + // smaliTreeWalker.g:504:7: nonvoid_type_descriptor { - pushFollow(FOLLOW_nonvoid_type_descriptor_in_method_type_list1156); - nonvoid_type_descriptor76=nonvoid_type_descriptor(); + pushFollow(FOLLOW_nonvoid_type_descriptor_in_method_type_list1172); + nonvoid_type_descriptor78=nonvoid_type_descriptor(); state._fsp--; - types.add((nonvoid_type_descriptor76!=null?((smaliTreeWalker.nonvoid_type_descriptor_return)nonvoid_type_descriptor76).type:null)); + types.add((nonvoid_type_descriptor78!=null?((smaliTreeWalker.nonvoid_type_descriptor_return)nonvoid_type_descriptor78).type:null)); } break; @@ -2438,32 +2489,417 @@ public class smaliTreeWalker extends TreeParser { + // $ANTLR start "call_site_reference" + // smaliTreeWalker.g:510:1: call_site_reference returns [ImmutableCallSiteReference callSiteReference] : ^( I_CALL_SITE_REFERENCE call_site_name= SIMPLE_NAME method_name= string_literal method_prototype call_site_extra_arguments method_reference ) ; + public final ImmutableCallSiteReference call_site_reference() throws RecognitionException { + ImmutableCallSiteReference callSiteReference = null; + + + CommonTree call_site_name=null; + String method_name =null; + ImmutableMethodReference method_reference79 =null; + ImmutableMethodProtoReference method_prototype80 =null; + List<ImmutableEncodedValue> call_site_extra_arguments81 =null; + + try { + // smaliTreeWalker.g:511:3: ( ^( I_CALL_SITE_REFERENCE call_site_name= SIMPLE_NAME method_name= string_literal method_prototype call_site_extra_arguments method_reference ) ) + // smaliTreeWalker.g:512:3: ^( I_CALL_SITE_REFERENCE call_site_name= SIMPLE_NAME method_name= string_literal method_prototype call_site_extra_arguments method_reference ) + { + match(input,I_CALL_SITE_REFERENCE,FOLLOW_I_CALL_SITE_REFERENCE_in_call_site_reference1203); + match(input, Token.DOWN, null); + call_site_name=(CommonTree)match(input,SIMPLE_NAME,FOLLOW_SIMPLE_NAME_in_call_site_reference1207); + pushFollow(FOLLOW_string_literal_in_call_site_reference1211); + method_name=string_literal(); + state._fsp--; + + pushFollow(FOLLOW_method_prototype_in_call_site_reference1213); + method_prototype80=method_prototype(); + state._fsp--; + + pushFollow(FOLLOW_call_site_extra_arguments_in_call_site_reference1223); + call_site_extra_arguments81=call_site_extra_arguments(); + state._fsp--; + + pushFollow(FOLLOW_method_reference_in_call_site_reference1225); + method_reference79=method_reference(); + state._fsp--; + + match(input, Token.UP, null); + + + String callSiteName = (call_site_name!=null?call_site_name.getText():null); + ImmutableMethodHandleReference methodHandleReference = + new ImmutableMethodHandleReference(MethodHandleType.INVOKE_STATIC, + method_reference79); + callSiteReference = new ImmutableCallSiteReference( + callSiteName, methodHandleReference, method_name, method_prototype80, + call_site_extra_arguments81); + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + // do for sure before leaving + } + return callSiteReference; + } + // $ANTLR end "call_site_reference" + + + public static class method_handle_type_return extends TreeRuleReturnScope { + public int methodHandleType; + }; + + + // $ANTLR start "method_handle_type" + // smaliTreeWalker.g:524:1: method_handle_type returns [int methodHandleType] : ( METHOD_HANDLE_TYPE_FIELD | METHOD_HANDLE_TYPE_METHOD | INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE ) ; + public final smaliTreeWalker.method_handle_type_return method_handle_type() throws RecognitionException { + smaliTreeWalker.method_handle_type_return retval = new smaliTreeWalker.method_handle_type_return(); + retval.start = input.LT(1); + + try { + // smaliTreeWalker.g:525:3: ( ( METHOD_HANDLE_TYPE_FIELD | METHOD_HANDLE_TYPE_METHOD | INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE ) ) + // smaliTreeWalker.g:525:5: ( METHOD_HANDLE_TYPE_FIELD | METHOD_HANDLE_TYPE_METHOD | INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE ) + { + if ( input.LA(1)==INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE||(input.LA(1) >= METHOD_HANDLE_TYPE_FIELD && input.LA(1) <= METHOD_HANDLE_TYPE_METHOD) ) { + input.consume(); + state.errorRecovery=false; + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + throw mse; + } + + retval.methodHandleType = MethodHandleType.getMethodHandleType(input.getTokenStream().toString(input.getTreeAdaptor().getTokenStartIndex(retval.start),input.getTreeAdaptor().getTokenStopIndex(retval.start))); + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "method_handle_type" + + + + // $ANTLR start "method_handle_reference" + // smaliTreeWalker.g:529:1: method_handle_reference returns [ImmutableMethodHandleReference methodHandle] : method_handle_type ( field_reference | method_reference ) ; + public final ImmutableMethodHandleReference method_handle_reference() throws RecognitionException { + ImmutableMethodHandleReference methodHandle = null; + + + TreeRuleReturnScope field_reference82 =null; + ImmutableMethodReference method_reference83 =null; + TreeRuleReturnScope method_handle_type84 =null; + + try { + // smaliTreeWalker.g:530:3: ( method_handle_type ( field_reference | method_reference ) ) + // smaliTreeWalker.g:530:5: method_handle_type ( field_reference | method_reference ) + { + pushFollow(FOLLOW_method_handle_type_in_method_handle_reference1270); + method_handle_type84=method_handle_type(); + state._fsp--; + + // smaliTreeWalker.g:530:24: ( field_reference | method_reference ) + int alt18=2; + switch ( input.LA(1) ) { + case CLASS_DESCRIPTOR: + { + int LA18_1 = input.LA(2); + if ( (LA18_1==SIMPLE_NAME) ) { + int LA18_3 = input.LA(3); + if ( (LA18_3==ARRAY_TYPE_PREFIX||LA18_3==CLASS_DESCRIPTOR||LA18_3==PRIMITIVE_TYPE) ) { + alt18=1; + } + else if ( (LA18_3==I_METHOD_PROTOTYPE) ) { + alt18=2; + } + + else { + int nvaeMark = input.mark(); + try { + for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) { + input.consume(); + } + NoViableAltException nvae = + new NoViableAltException("", 18, 3, input); + throw nvae; + } finally { + input.rewind(nvaeMark); + } + } + + } + + else { + int nvaeMark = input.mark(); + try { + input.consume(); + NoViableAltException nvae = + new NoViableAltException("", 18, 1, input); + throw nvae; + } finally { + input.rewind(nvaeMark); + } + } + + } + break; + case ARRAY_TYPE_PREFIX: + { + int LA18_2 = input.LA(2); + if ( (LA18_2==PRIMITIVE_TYPE) ) { + int LA18_4 = input.LA(3); + if ( (LA18_4==SIMPLE_NAME) ) { + int LA18_3 = input.LA(4); + if ( (LA18_3==ARRAY_TYPE_PREFIX||LA18_3==CLASS_DESCRIPTOR||LA18_3==PRIMITIVE_TYPE) ) { + alt18=1; + } + else if ( (LA18_3==I_METHOD_PROTOTYPE) ) { + alt18=2; + } + + else { + int nvaeMark = input.mark(); + try { + for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) { + input.consume(); + } + NoViableAltException nvae = + new NoViableAltException("", 18, 3, input); + throw nvae; + } finally { + input.rewind(nvaeMark); + } + } + + } + + else { + int nvaeMark = input.mark(); + try { + for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) { + input.consume(); + } + NoViableAltException nvae = + new NoViableAltException("", 18, 4, input); + throw nvae; + } finally { + input.rewind(nvaeMark); + } + } + + } + else if ( (LA18_2==CLASS_DESCRIPTOR) ) { + int LA18_5 = input.LA(3); + if ( (LA18_5==SIMPLE_NAME) ) { + int LA18_3 = input.LA(4); + if ( (LA18_3==ARRAY_TYPE_PREFIX||LA18_3==CLASS_DESCRIPTOR||LA18_3==PRIMITIVE_TYPE) ) { + alt18=1; + } + else if ( (LA18_3==I_METHOD_PROTOTYPE) ) { + alt18=2; + } + + else { + int nvaeMark = input.mark(); + try { + for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) { + input.consume(); + } + NoViableAltException nvae = + new NoViableAltException("", 18, 3, input); + throw nvae; + } finally { + input.rewind(nvaeMark); + } + } + + } + + else { + int nvaeMark = input.mark(); + try { + for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) { + input.consume(); + } + NoViableAltException nvae = + new NoViableAltException("", 18, 5, input); + throw nvae; + } finally { + input.rewind(nvaeMark); + } + } + + } + + else { + int nvaeMark = input.mark(); + try { + input.consume(); + NoViableAltException nvae = + new NoViableAltException("", 18, 2, input); + throw nvae; + } finally { + input.rewind(nvaeMark); + } + } + + } + break; + case SIMPLE_NAME: + { + int LA18_3 = input.LA(2); + if ( (LA18_3==ARRAY_TYPE_PREFIX||LA18_3==CLASS_DESCRIPTOR||LA18_3==PRIMITIVE_TYPE) ) { + alt18=1; + } + else if ( (LA18_3==I_METHOD_PROTOTYPE) ) { + alt18=2; + } + + else { + int nvaeMark = input.mark(); + try { + input.consume(); + NoViableAltException nvae = + new NoViableAltException("", 18, 3, input); + throw nvae; + } finally { + input.rewind(nvaeMark); + } + } + + } + break; + default: + NoViableAltException nvae = + new NoViableAltException("", 18, 0, input); + throw nvae; + } + switch (alt18) { + case 1 : + // smaliTreeWalker.g:530:25: field_reference + { + pushFollow(FOLLOW_field_reference_in_method_handle_reference1273); + field_reference82=field_reference(); + state._fsp--; + + } + break; + case 2 : + // smaliTreeWalker.g:530:43: method_reference + { + pushFollow(FOLLOW_method_reference_in_method_handle_reference1277); + method_reference83=method_reference(); + state._fsp--; + + } + break; + + } + + + ImmutableReference reference; + if ((field_reference82!=null?(input.getTokenStream().toString(input.getTreeAdaptor().getTokenStartIndex(field_reference82.start),input.getTreeAdaptor().getTokenStopIndex(field_reference82.start))):null) != null) { + reference = (field_reference82!=null?((smaliTreeWalker.field_reference_return)field_reference82).fieldReference:null); + } else { + reference = method_reference83; + } + methodHandle = new ImmutableMethodHandleReference((method_handle_type84!=null?((smaliTreeWalker.method_handle_type_return)method_handle_type84).methodHandleType:0), reference); + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + // do for sure before leaving + } + return methodHandle; + } + // $ANTLR end "method_handle_reference" + + + + // $ANTLR start "method_handle_literal" + // smaliTreeWalker.g:540:1: method_handle_literal returns [ImmutableMethodHandleReference value] : ( I_ENCODED_METHOD_HANDLE method_handle_reference ) ; + public final ImmutableMethodHandleReference method_handle_literal() throws RecognitionException { + ImmutableMethodHandleReference value = null; + + + ImmutableMethodHandleReference method_handle_reference85 =null; + + try { + // smaliTreeWalker.g:541:3: ( ( I_ENCODED_METHOD_HANDLE method_handle_reference ) ) + // smaliTreeWalker.g:541:5: ( I_ENCODED_METHOD_HANDLE method_handle_reference ) + { + // smaliTreeWalker.g:541:5: ( I_ENCODED_METHOD_HANDLE method_handle_reference ) + // smaliTreeWalker.g:541:6: I_ENCODED_METHOD_HANDLE method_handle_reference + { + match(input,I_ENCODED_METHOD_HANDLE,FOLLOW_I_ENCODED_METHOD_HANDLE_in_method_handle_literal1294); + pushFollow(FOLLOW_method_handle_reference_in_method_handle_literal1296); + method_handle_reference85=method_handle_reference(); + state._fsp--; + + } + + + value = method_handle_reference85; + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + // do for sure before leaving + } + return value; + } + // $ANTLR end "method_handle_literal" + + + // $ANTLR start "method_reference" - // smaliTreeWalker.g:505:1: method_reference returns [ImmutableMethodReference methodReference] : ( reference_type_descriptor )? SIMPLE_NAME method_prototype ; + // smaliTreeWalker.g:545:1: method_reference returns [ImmutableMethodReference methodReference] : ( reference_type_descriptor )? SIMPLE_NAME method_prototype ; public final ImmutableMethodReference method_reference() throws RecognitionException { ImmutableMethodReference methodReference = null; - CommonTree SIMPLE_NAME78=null; - TreeRuleReturnScope reference_type_descriptor77 =null; - TreeRuleReturnScope method_prototype79 =null; + CommonTree SIMPLE_NAME87=null; + TreeRuleReturnScope reference_type_descriptor86 =null; + ImmutableMethodProtoReference method_prototype88 =null; try { - // smaliTreeWalker.g:506:3: ( ( reference_type_descriptor )? SIMPLE_NAME method_prototype ) - // smaliTreeWalker.g:506:5: ( reference_type_descriptor )? SIMPLE_NAME method_prototype + // smaliTreeWalker.g:546:3: ( ( reference_type_descriptor )? SIMPLE_NAME method_prototype ) + // smaliTreeWalker.g:546:5: ( reference_type_descriptor )? SIMPLE_NAME method_prototype { - // smaliTreeWalker.g:506:5: ( reference_type_descriptor )? - int alt18=2; - int LA18_0 = input.LA(1); - if ( (LA18_0==ARRAY_TYPE_PREFIX||LA18_0==CLASS_DESCRIPTOR) ) { - alt18=1; + // smaliTreeWalker.g:546:5: ( reference_type_descriptor )? + int alt19=2; + int LA19_0 = input.LA(1); + if ( (LA19_0==ARRAY_TYPE_PREFIX||LA19_0==CLASS_DESCRIPTOR) ) { + alt19=1; } - switch (alt18) { + switch (alt19) { case 1 : - // smaliTreeWalker.g:506:5: reference_type_descriptor + // smaliTreeWalker.g:546:5: reference_type_descriptor { - pushFollow(FOLLOW_reference_type_descriptor_in_method_reference1185); - reference_type_descriptor77=reference_type_descriptor(); + pushFollow(FOLLOW_reference_type_descriptor_in_method_reference1312); + reference_type_descriptor86=reference_type_descriptor(); state._fsp--; } @@ -2471,20 +2907,20 @@ public class smaliTreeWalker extends TreeParser { } - SIMPLE_NAME78=(CommonTree)match(input,SIMPLE_NAME,FOLLOW_SIMPLE_NAME_in_method_reference1188); - pushFollow(FOLLOW_method_prototype_in_method_reference1190); - method_prototype79=method_prototype(); + SIMPLE_NAME87=(CommonTree)match(input,SIMPLE_NAME,FOLLOW_SIMPLE_NAME_in_method_reference1315); + pushFollow(FOLLOW_method_prototype_in_method_reference1317); + method_prototype88=method_prototype(); state._fsp--; String type; - if ((reference_type_descriptor77!=null?((smaliTreeWalker.reference_type_descriptor_return)reference_type_descriptor77).type:null) == null) { + if ((reference_type_descriptor86!=null?((smaliTreeWalker.reference_type_descriptor_return)reference_type_descriptor86).type:null) == null) { type = classType; } else { - type = (reference_type_descriptor77!=null?((smaliTreeWalker.reference_type_descriptor_return)reference_type_descriptor77).type:null); + type = (reference_type_descriptor86!=null?((smaliTreeWalker.reference_type_descriptor_return)reference_type_descriptor86).type:null); } - methodReference = new ImmutableMethodReference(type, (SIMPLE_NAME78!=null?SIMPLE_NAME78.getText():null), - (method_prototype79!=null?((smaliTreeWalker.method_prototype_return)method_prototype79).parameters:null), (method_prototype79!=null?((smaliTreeWalker.method_prototype_return)method_prototype79).returnType:null)); + methodReference = new ImmutableMethodReference(type, (SIMPLE_NAME87!=null?SIMPLE_NAME87.getText():null), + method_prototype88.getParameterTypes(), method_prototype88.getReturnType()); } @@ -2501,33 +2937,37 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR end "method_reference" + public static class field_reference_return extends TreeRuleReturnScope { + public ImmutableFieldReference fieldReference; + }; + // $ANTLR start "field_reference" - // smaliTreeWalker.g:518:1: field_reference returns [ImmutableFieldReference fieldReference] : ( reference_type_descriptor )? SIMPLE_NAME nonvoid_type_descriptor ; - public final ImmutableFieldReference field_reference() throws RecognitionException { - ImmutableFieldReference fieldReference = null; - + // smaliTreeWalker.g:558:1: field_reference returns [ImmutableFieldReference fieldReference] : ( reference_type_descriptor )? SIMPLE_NAME nonvoid_type_descriptor ; + public final smaliTreeWalker.field_reference_return field_reference() throws RecognitionException { + smaliTreeWalker.field_reference_return retval = new smaliTreeWalker.field_reference_return(); + retval.start = input.LT(1); - CommonTree SIMPLE_NAME81=null; - TreeRuleReturnScope reference_type_descriptor80 =null; - TreeRuleReturnScope nonvoid_type_descriptor82 =null; + CommonTree SIMPLE_NAME90=null; + TreeRuleReturnScope reference_type_descriptor89 =null; + TreeRuleReturnScope nonvoid_type_descriptor91 =null; try { - // smaliTreeWalker.g:519:3: ( ( reference_type_descriptor )? SIMPLE_NAME nonvoid_type_descriptor ) - // smaliTreeWalker.g:519:5: ( reference_type_descriptor )? SIMPLE_NAME nonvoid_type_descriptor + // smaliTreeWalker.g:559:3: ( ( reference_type_descriptor )? SIMPLE_NAME nonvoid_type_descriptor ) + // smaliTreeWalker.g:559:5: ( reference_type_descriptor )? SIMPLE_NAME nonvoid_type_descriptor { - // smaliTreeWalker.g:519:5: ( reference_type_descriptor )? - int alt19=2; - int LA19_0 = input.LA(1); - if ( (LA19_0==ARRAY_TYPE_PREFIX||LA19_0==CLASS_DESCRIPTOR) ) { - alt19=1; + // smaliTreeWalker.g:559:5: ( reference_type_descriptor )? + int alt20=2; + int LA20_0 = input.LA(1); + if ( (LA20_0==ARRAY_TYPE_PREFIX||LA20_0==CLASS_DESCRIPTOR) ) { + alt20=1; } - switch (alt19) { + switch (alt20) { case 1 : - // smaliTreeWalker.g:519:5: reference_type_descriptor + // smaliTreeWalker.g:559:5: reference_type_descriptor { - pushFollow(FOLLOW_reference_type_descriptor_in_field_reference1207); - reference_type_descriptor80=reference_type_descriptor(); + pushFollow(FOLLOW_reference_type_descriptor_in_field_reference1334); + reference_type_descriptor89=reference_type_descriptor(); state._fsp--; } @@ -2535,20 +2975,20 @@ public class smaliTreeWalker extends TreeParser { } - SIMPLE_NAME81=(CommonTree)match(input,SIMPLE_NAME,FOLLOW_SIMPLE_NAME_in_field_reference1210); - pushFollow(FOLLOW_nonvoid_type_descriptor_in_field_reference1212); - nonvoid_type_descriptor82=nonvoid_type_descriptor(); + SIMPLE_NAME90=(CommonTree)match(input,SIMPLE_NAME,FOLLOW_SIMPLE_NAME_in_field_reference1337); + pushFollow(FOLLOW_nonvoid_type_descriptor_in_field_reference1339); + nonvoid_type_descriptor91=nonvoid_type_descriptor(); state._fsp--; String type; - if ((reference_type_descriptor80!=null?((smaliTreeWalker.reference_type_descriptor_return)reference_type_descriptor80).type:null) == null) { + if ((reference_type_descriptor89!=null?((smaliTreeWalker.reference_type_descriptor_return)reference_type_descriptor89).type:null) == null) { type = classType; } else { - type = (reference_type_descriptor80!=null?((smaliTreeWalker.reference_type_descriptor_return)reference_type_descriptor80).type:null); + type = (reference_type_descriptor89!=null?((smaliTreeWalker.reference_type_descriptor_return)reference_type_descriptor89).type:null); } - fieldReference = new ImmutableFieldReference(type, (SIMPLE_NAME81!=null?SIMPLE_NAME81.getText():null), - (nonvoid_type_descriptor82!=null?((smaliTreeWalker.nonvoid_type_descriptor_return)nonvoid_type_descriptor82).type:null)); + retval.fieldReference = new ImmutableFieldReference(type, (SIMPLE_NAME90!=null?SIMPLE_NAME90.getText():null), + (nonvoid_type_descriptor91!=null?((smaliTreeWalker.nonvoid_type_descriptor_return)nonvoid_type_descriptor91).type:null)); } @@ -2560,7 +3000,7 @@ public class smaliTreeWalker extends TreeParser { finally { // do for sure before leaving } - return fieldReference; + return retval; } // $ANTLR end "field_reference" @@ -2572,46 +3012,46 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "registers_directive" - // smaliTreeWalker.g:531:1: registers_directive returns [boolean isLocalsDirective, int registers] : ^( ( I_REGISTERS | I_LOCALS ) short_integral_literal ) ; + // smaliTreeWalker.g:571:1: registers_directive returns [boolean isLocalsDirective, int registers] : ^( ( I_REGISTERS | I_LOCALS ) short_integral_literal ) ; public final smaliTreeWalker.registers_directive_return registers_directive() throws RecognitionException { smaliTreeWalker.registers_directive_return retval = new smaliTreeWalker.registers_directive_return(); retval.start = input.LT(1); - short short_integral_literal83 =0; + short short_integral_literal92 =0; try { - // smaliTreeWalker.g:532:3: ( ^( ( I_REGISTERS | I_LOCALS ) short_integral_literal ) ) - // smaliTreeWalker.g:532:5: ^( ( I_REGISTERS | I_LOCALS ) short_integral_literal ) + // smaliTreeWalker.g:572:3: ( ^( ( I_REGISTERS | I_LOCALS ) short_integral_literal ) ) + // smaliTreeWalker.g:572:5: ^( ( I_REGISTERS | I_LOCALS ) short_integral_literal ) { retval.registers = 0; - // smaliTreeWalker.g:533:7: ( I_REGISTERS | I_LOCALS ) - int alt20=2; - int LA20_0 = input.LA(1); - if ( (LA20_0==I_REGISTERS) ) { - alt20=1; + // smaliTreeWalker.g:573:7: ( I_REGISTERS | I_LOCALS ) + int alt21=2; + int LA21_0 = input.LA(1); + if ( (LA21_0==I_REGISTERS) ) { + alt21=1; } - else if ( (LA20_0==I_LOCALS) ) { - alt20=2; + else if ( (LA21_0==I_LOCALS) ) { + alt21=2; } else { NoViableAltException nvae = - new NoViableAltException("", 20, 0, input); + new NoViableAltException("", 21, 0, input); throw nvae; } - switch (alt20) { + switch (alt21) { case 1 : - // smaliTreeWalker.g:533:9: I_REGISTERS + // smaliTreeWalker.g:573:9: I_REGISTERS { - match(input,I_REGISTERS,FOLLOW_I_REGISTERS_in_registers_directive1238); + match(input,I_REGISTERS,FOLLOW_I_REGISTERS_in_registers_directive1365); retval.isLocalsDirective = false; } break; case 2 : - // smaliTreeWalker.g:534:9: I_LOCALS + // smaliTreeWalker.g:574:9: I_LOCALS { - match(input,I_LOCALS,FOLLOW_I_LOCALS_in_registers_directive1250); + match(input,I_LOCALS,FOLLOW_I_LOCALS_in_registers_directive1377); retval.isLocalsDirective = true; } break; @@ -2619,11 +3059,11 @@ public class smaliTreeWalker extends TreeParser { } match(input, Token.DOWN, null); - pushFollow(FOLLOW_short_integral_literal_in_registers_directive1268); - short_integral_literal83=short_integral_literal(); + pushFollow(FOLLOW_short_integral_literal_in_registers_directive1395); + short_integral_literal92=short_integral_literal(); state._fsp--; - retval.registers = short_integral_literal83 & 0xFFFF; + retval.registers = short_integral_literal92 & 0xFFFF; match(input, Token.UP, null); } @@ -2643,21 +3083,21 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "label_def" - // smaliTreeWalker.g:539:1: label_def : ^( I_LABEL SIMPLE_NAME ) ; + // smaliTreeWalker.g:579:1: label_def : ^( I_LABEL SIMPLE_NAME ) ; public final void label_def() throws RecognitionException { - CommonTree SIMPLE_NAME84=null; + CommonTree SIMPLE_NAME93=null; try { - // smaliTreeWalker.g:540:3: ( ^( I_LABEL SIMPLE_NAME ) ) - // smaliTreeWalker.g:540:5: ^( I_LABEL SIMPLE_NAME ) + // smaliTreeWalker.g:580:3: ( ^( I_LABEL SIMPLE_NAME ) ) + // smaliTreeWalker.g:580:5: ^( I_LABEL SIMPLE_NAME ) { - match(input,I_LABEL,FOLLOW_I_LABEL_in_label_def1288); + match(input,I_LABEL,FOLLOW_I_LABEL_in_label_def1415); match(input, Token.DOWN, null); - SIMPLE_NAME84=(CommonTree)match(input,SIMPLE_NAME,FOLLOW_SIMPLE_NAME_in_label_def1290); + SIMPLE_NAME93=(CommonTree)match(input,SIMPLE_NAME,FOLLOW_SIMPLE_NAME_in_label_def1417); match(input, Token.UP, null); - method_stack.peek().methodBuilder.addLabel((SIMPLE_NAME84!=null?SIMPLE_NAME84.getText():null)); + method_stack.peek().methodBuilder.addLabel((SIMPLE_NAME93!=null?SIMPLE_NAME93.getText():null)); } @@ -2675,33 +3115,33 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "catches" - // smaliTreeWalker.g:545:1: catches returns [List<BuilderTryBlock> tryBlocks] : ^( I_CATCHES ( catch_directive )* ( catchall_directive )* ) ; + // smaliTreeWalker.g:585:1: catches returns [List<BuilderTryBlock> tryBlocks] : ^( I_CATCHES ( catch_directive )* ( catchall_directive )* ) ; public final List<BuilderTryBlock> catches() throws RecognitionException { List<BuilderTryBlock> tryBlocks = null; tryBlocks = Lists.newArrayList(); try { - // smaliTreeWalker.g:547:3: ( ^( I_CATCHES ( catch_directive )* ( catchall_directive )* ) ) - // smaliTreeWalker.g:547:5: ^( I_CATCHES ( catch_directive )* ( catchall_directive )* ) + // smaliTreeWalker.g:587:3: ( ^( I_CATCHES ( catch_directive )* ( catchall_directive )* ) ) + // smaliTreeWalker.g:587:5: ^( I_CATCHES ( catch_directive )* ( catchall_directive )* ) { - match(input,I_CATCHES,FOLLOW_I_CATCHES_in_catches1316); + match(input,I_CATCHES,FOLLOW_I_CATCHES_in_catches1443); if ( input.LA(1)==Token.DOWN ) { match(input, Token.DOWN, null); - // smaliTreeWalker.g:547:17: ( catch_directive )* - loop21: + // smaliTreeWalker.g:587:17: ( catch_directive )* + loop22: while (true) { - int alt21=2; - int LA21_0 = input.LA(1); - if ( (LA21_0==I_CATCH) ) { - alt21=1; + int alt22=2; + int LA22_0 = input.LA(1); + if ( (LA22_0==I_CATCH) ) { + alt22=1; } - switch (alt21) { + switch (alt22) { case 1 : - // smaliTreeWalker.g:547:17: catch_directive + // smaliTreeWalker.g:587:17: catch_directive { - pushFollow(FOLLOW_catch_directive_in_catches1318); + pushFollow(FOLLOW_catch_directive_in_catches1445); catch_directive(); state._fsp--; @@ -2709,24 +3149,24 @@ public class smaliTreeWalker extends TreeParser { break; default : - break loop21; + break loop22; } } - // smaliTreeWalker.g:547:34: ( catchall_directive )* - loop22: + // smaliTreeWalker.g:587:34: ( catchall_directive )* + loop23: while (true) { - int alt22=2; - int LA22_0 = input.LA(1); - if ( (LA22_0==I_CATCHALL) ) { - alt22=1; + int alt23=2; + int LA23_0 = input.LA(1); + if ( (LA23_0==I_CATCHALL) ) { + alt23=1; } - switch (alt22) { + switch (alt23) { case 1 : - // smaliTreeWalker.g:547:34: catchall_directive + // smaliTreeWalker.g:587:34: catchall_directive { - pushFollow(FOLLOW_catchall_directive_in_catches1321); + pushFollow(FOLLOW_catchall_directive_in_catches1448); catchall_directive(); state._fsp--; @@ -2734,7 +3174,7 @@ public class smaliTreeWalker extends TreeParser { break; default : - break loop22; + break loop23; } } @@ -2758,39 +3198,39 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "catch_directive" - // smaliTreeWalker.g:549:1: catch_directive : ^( I_CATCH nonvoid_type_descriptor from= label_ref to= label_ref using= label_ref ) ; + // smaliTreeWalker.g:589:1: catch_directive : ^( I_CATCH nonvoid_type_descriptor from= label_ref to= label_ref using= label_ref ) ; public final void catch_directive() throws RecognitionException { Label from =null; Label to =null; Label using =null; - TreeRuleReturnScope nonvoid_type_descriptor85 =null; + TreeRuleReturnScope nonvoid_type_descriptor94 =null; try { - // smaliTreeWalker.g:550:3: ( ^( I_CATCH nonvoid_type_descriptor from= label_ref to= label_ref using= label_ref ) ) - // smaliTreeWalker.g:550:5: ^( I_CATCH nonvoid_type_descriptor from= label_ref to= label_ref using= label_ref ) + // smaliTreeWalker.g:590:3: ( ^( I_CATCH nonvoid_type_descriptor from= label_ref to= label_ref using= label_ref ) ) + // smaliTreeWalker.g:590:5: ^( I_CATCH nonvoid_type_descriptor from= label_ref to= label_ref using= label_ref ) { - match(input,I_CATCH,FOLLOW_I_CATCH_in_catch_directive1334); + match(input,I_CATCH,FOLLOW_I_CATCH_in_catch_directive1461); match(input, Token.DOWN, null); - pushFollow(FOLLOW_nonvoid_type_descriptor_in_catch_directive1336); - nonvoid_type_descriptor85=nonvoid_type_descriptor(); + pushFollow(FOLLOW_nonvoid_type_descriptor_in_catch_directive1463); + nonvoid_type_descriptor94=nonvoid_type_descriptor(); state._fsp--; - pushFollow(FOLLOW_label_ref_in_catch_directive1340); + pushFollow(FOLLOW_label_ref_in_catch_directive1467); from=label_ref(); state._fsp--; - pushFollow(FOLLOW_label_ref_in_catch_directive1344); + pushFollow(FOLLOW_label_ref_in_catch_directive1471); to=label_ref(); state._fsp--; - pushFollow(FOLLOW_label_ref_in_catch_directive1348); + pushFollow(FOLLOW_label_ref_in_catch_directive1475); using=label_ref(); state._fsp--; match(input, Token.UP, null); - method_stack.peek().methodBuilder.addCatch(dexBuilder.internTypeReference((nonvoid_type_descriptor85!=null?((smaliTreeWalker.nonvoid_type_descriptor_return)nonvoid_type_descriptor85).type:null)), + method_stack.peek().methodBuilder.addCatch(dexBuilder.internTypeReference((nonvoid_type_descriptor94!=null?((smaliTreeWalker.nonvoid_type_descriptor_return)nonvoid_type_descriptor94).type:null)), from, to, using); } @@ -2809,27 +3249,27 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "catchall_directive" - // smaliTreeWalker.g:556:1: catchall_directive : ^( I_CATCHALL from= label_ref to= label_ref using= label_ref ) ; + // smaliTreeWalker.g:596:1: catchall_directive : ^( I_CATCHALL from= label_ref to= label_ref using= label_ref ) ; public final void catchall_directive() throws RecognitionException { Label from =null; Label to =null; Label using =null; try { - // smaliTreeWalker.g:557:3: ( ^( I_CATCHALL from= label_ref to= label_ref using= label_ref ) ) - // smaliTreeWalker.g:557:5: ^( I_CATCHALL from= label_ref to= label_ref using= label_ref ) + // smaliTreeWalker.g:597:3: ( ^( I_CATCHALL from= label_ref to= label_ref using= label_ref ) ) + // smaliTreeWalker.g:597:5: ^( I_CATCHALL from= label_ref to= label_ref using= label_ref ) { - match(input,I_CATCHALL,FOLLOW_I_CATCHALL_in_catchall_directive1364); + match(input,I_CATCHALL,FOLLOW_I_CATCHALL_in_catchall_directive1491); match(input, Token.DOWN, null); - pushFollow(FOLLOW_label_ref_in_catchall_directive1368); + pushFollow(FOLLOW_label_ref_in_catchall_directive1495); from=label_ref(); state._fsp--; - pushFollow(FOLLOW_label_ref_in_catchall_directive1372); + pushFollow(FOLLOW_label_ref_in_catchall_directive1499); to=label_ref(); state._fsp--; - pushFollow(FOLLOW_label_ref_in_catchall_directive1376); + pushFollow(FOLLOW_label_ref_in_catchall_directive1503); using=label_ref(); state._fsp--; @@ -2854,29 +3294,29 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "parameters" - // smaliTreeWalker.g:562:1: parameters[List<SmaliMethodParameter> parameters] : ^( I_PARAMETERS ( parameter[parameters] )* ) ; + // smaliTreeWalker.g:602:1: parameters[List<SmaliMethodParameter> parameters] : ^( I_PARAMETERS ( parameter[parameters] )* ) ; public final void parameters(List<SmaliMethodParameter> parameters) throws RecognitionException { try { - // smaliTreeWalker.g:563:3: ( ^( I_PARAMETERS ( parameter[parameters] )* ) ) - // smaliTreeWalker.g:563:5: ^( I_PARAMETERS ( parameter[parameters] )* ) + // smaliTreeWalker.g:603:3: ( ^( I_PARAMETERS ( parameter[parameters] )* ) ) + // smaliTreeWalker.g:603:5: ^( I_PARAMETERS ( parameter[parameters] )* ) { - match(input,I_PARAMETERS,FOLLOW_I_PARAMETERS_in_parameters1393); + match(input,I_PARAMETERS,FOLLOW_I_PARAMETERS_in_parameters1520); if ( input.LA(1)==Token.DOWN ) { match(input, Token.DOWN, null); - // smaliTreeWalker.g:563:20: ( parameter[parameters] )* - loop23: + // smaliTreeWalker.g:603:20: ( parameter[parameters] )* + loop24: while (true) { - int alt23=2; - int LA23_0 = input.LA(1); - if ( (LA23_0==I_PARAMETER) ) { - alt23=1; + int alt24=2; + int LA24_0 = input.LA(1); + if ( (LA24_0==I_PARAMETER) ) { + alt24=1; } - switch (alt23) { + switch (alt24) { case 1 : - // smaliTreeWalker.g:563:21: parameter[parameters] + // smaliTreeWalker.g:603:21: parameter[parameters] { - pushFollow(FOLLOW_parameter_in_parameters1396); + pushFollow(FOLLOW_parameter_in_parameters1523); parameter(parameters); state._fsp--; @@ -2884,7 +3324,7 @@ public class smaliTreeWalker extends TreeParser { break; default : - break loop23; + break loop24; } } @@ -2907,32 +3347,32 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "parameter" - // smaliTreeWalker.g:565:1: parameter[List<SmaliMethodParameter> parameters] : ^( I_PARAMETER REGISTER ( string_literal )? annotations ) ; + // smaliTreeWalker.g:605:1: parameter[List<SmaliMethodParameter> parameters] : ^( I_PARAMETER REGISTER ( string_literal )? annotations ) ; public final void parameter(List<SmaliMethodParameter> parameters) throws RecognitionException { - CommonTree REGISTER86=null; - CommonTree I_PARAMETER87=null; - String string_literal88 =null; - Set<Annotation> annotations89 =null; + CommonTree REGISTER95=null; + CommonTree I_PARAMETER96=null; + String string_literal97 =null; + Set<Annotation> annotations98 =null; try { - // smaliTreeWalker.g:566:3: ( ^( I_PARAMETER REGISTER ( string_literal )? annotations ) ) - // smaliTreeWalker.g:566:5: ^( I_PARAMETER REGISTER ( string_literal )? annotations ) + // smaliTreeWalker.g:606:3: ( ^( I_PARAMETER REGISTER ( string_literal )? annotations ) ) + // smaliTreeWalker.g:606:5: ^( I_PARAMETER REGISTER ( string_literal )? annotations ) { - I_PARAMETER87=(CommonTree)match(input,I_PARAMETER,FOLLOW_I_PARAMETER_in_parameter1412); + I_PARAMETER96=(CommonTree)match(input,I_PARAMETER,FOLLOW_I_PARAMETER_in_parameter1539); match(input, Token.DOWN, null); - REGISTER86=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_parameter1414); - // smaliTreeWalker.g:566:28: ( string_literal )? - int alt24=2; - int LA24_0 = input.LA(1); - if ( (LA24_0==STRING_LITERAL) ) { - alt24=1; - } - switch (alt24) { + REGISTER95=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_parameter1541); + // smaliTreeWalker.g:606:28: ( string_literal )? + int alt25=2; + int LA25_0 = input.LA(1); + if ( (LA25_0==STRING_LITERAL) ) { + alt25=1; + } + switch (alt25) { case 1 : - // smaliTreeWalker.g:566:28: string_literal + // smaliTreeWalker.g:606:28: string_literal { - pushFollow(FOLLOW_string_literal_in_parameter1416); - string_literal88=string_literal(); + pushFollow(FOLLOW_string_literal_in_parameter1543); + string_literal97=string_literal(); state._fsp--; } @@ -2940,26 +3380,26 @@ public class smaliTreeWalker extends TreeParser { } - pushFollow(FOLLOW_annotations_in_parameter1419); - annotations89=annotations(); + pushFollow(FOLLOW_annotations_in_parameter1546); + annotations98=annotations(); state._fsp--; match(input, Token.UP, null); - final int registerNumber = parseRegister_short((REGISTER86!=null?REGISTER86.getText():null)); + final int registerNumber = parseRegister_short((REGISTER95!=null?REGISTER95.getText():null)); int totalMethodRegisters = method_stack.peek().totalMethodRegisters; int methodParameterRegisters = method_stack.peek().methodParameterRegisters; if (registerNumber >= totalMethodRegisters) { - throw new SemanticException(input, I_PARAMETER87, "Register %s is larger than the maximum register v%d " + - "for this method", (REGISTER86!=null?REGISTER86.getText():null), totalMethodRegisters-1); + throw new SemanticException(input, I_PARAMETER96, "Register %s is larger than the maximum register v%d " + + "for this method", (REGISTER95!=null?REGISTER95.getText():null), totalMethodRegisters-1); } final int indexGuess = registerNumber - (totalMethodRegisters - methodParameterRegisters) - (method_stack.peek().isStatic?0:1); if (indexGuess < 0) { - throw new SemanticException(input, I_PARAMETER87, "Register %s is not a parameter register.", - (REGISTER86!=null?REGISTER86.getText():null)); + throw new SemanticException(input, I_PARAMETER96, "Register %s is not a parameter register.", + (REGISTER95!=null?REGISTER95.getText():null)); } int parameterIndex = LinearSearch.linearSearch(parameters, SmaliMethodParameter.COMPARATOR, @@ -2967,14 +3407,14 @@ public class smaliTreeWalker extends TreeParser { indexGuess); if (parameterIndex < 0) { - throw new SemanticException(input, I_PARAMETER87, "Register %s is the second half of a wide parameter.", - (REGISTER86!=null?REGISTER86.getText():null)); + throw new SemanticException(input, I_PARAMETER96, "Register %s is the second half of a wide parameter.", + (REGISTER95!=null?REGISTER95.getText():null)); } SmaliMethodParameter methodParameter = parameters.get(parameterIndex); - methodParameter.name = string_literal88; - if (annotations89 != null && annotations89.size() > 0) { - methodParameter.annotations = annotations89; + methodParameter.name = string_literal97; + if (annotations98 != null && annotations98.size() > 0) { + methodParameter.annotations = annotations98; } } @@ -2993,111 +3433,111 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "debug_directive" - // smaliTreeWalker.g:599:1: debug_directive : ( line | local | end_local | restart_local | prologue | epilogue | source ); + // smaliTreeWalker.g:639:1: debug_directive : ( line | local | end_local | restart_local | prologue | epilogue | source ); public final void debug_directive() throws RecognitionException { try { - // smaliTreeWalker.g:600:3: ( line | local | end_local | restart_local | prologue | epilogue | source ) - int alt25=7; + // smaliTreeWalker.g:640:3: ( line | local | end_local | restart_local | prologue | epilogue | source ) + int alt26=7; switch ( input.LA(1) ) { case I_LINE: { - alt25=1; + alt26=1; } break; case I_LOCAL: { - alt25=2; + alt26=2; } break; case I_END_LOCAL: { - alt25=3; + alt26=3; } break; case I_RESTART_LOCAL: { - alt25=4; + alt26=4; } break; case I_PROLOGUE: { - alt25=5; + alt26=5; } break; case I_EPILOGUE: { - alt25=6; + alt26=6; } break; case I_SOURCE: { - alt25=7; + alt26=7; } break; default: NoViableAltException nvae = - new NoViableAltException("", 25, 0, input); + new NoViableAltException("", 26, 0, input); throw nvae; } - switch (alt25) { + switch (alt26) { case 1 : - // smaliTreeWalker.g:600:5: line + // smaliTreeWalker.g:640:5: line { - pushFollow(FOLLOW_line_in_debug_directive1436); + pushFollow(FOLLOW_line_in_debug_directive1563); line(); state._fsp--; } break; case 2 : - // smaliTreeWalker.g:601:5: local + // smaliTreeWalker.g:641:5: local { - pushFollow(FOLLOW_local_in_debug_directive1442); + pushFollow(FOLLOW_local_in_debug_directive1569); local(); state._fsp--; } break; case 3 : - // smaliTreeWalker.g:602:5: end_local + // smaliTreeWalker.g:642:5: end_local { - pushFollow(FOLLOW_end_local_in_debug_directive1448); + pushFollow(FOLLOW_end_local_in_debug_directive1575); end_local(); state._fsp--; } break; case 4 : - // smaliTreeWalker.g:603:5: restart_local + // smaliTreeWalker.g:643:5: restart_local { - pushFollow(FOLLOW_restart_local_in_debug_directive1454); + pushFollow(FOLLOW_restart_local_in_debug_directive1581); restart_local(); state._fsp--; } break; case 5 : - // smaliTreeWalker.g:604:5: prologue + // smaliTreeWalker.g:644:5: prologue { - pushFollow(FOLLOW_prologue_in_debug_directive1460); + pushFollow(FOLLOW_prologue_in_debug_directive1587); prologue(); state._fsp--; } break; case 6 : - // smaliTreeWalker.g:605:5: epilogue + // smaliTreeWalker.g:645:5: epilogue { - pushFollow(FOLLOW_epilogue_in_debug_directive1466); + pushFollow(FOLLOW_epilogue_in_debug_directive1593); epilogue(); state._fsp--; } break; case 7 : - // smaliTreeWalker.g:606:5: source + // smaliTreeWalker.g:646:5: source { - pushFollow(FOLLOW_source_in_debug_directive1472); + pushFollow(FOLLOW_source_in_debug_directive1599); source(); state._fsp--; @@ -3119,24 +3559,24 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "line" - // smaliTreeWalker.g:608:1: line : ^( I_LINE integral_literal ) ; + // smaliTreeWalker.g:648:1: line : ^( I_LINE integral_literal ) ; public final void line() throws RecognitionException { - int integral_literal90 =0; + int integral_literal99 =0; try { - // smaliTreeWalker.g:609:3: ( ^( I_LINE integral_literal ) ) - // smaliTreeWalker.g:609:5: ^( I_LINE integral_literal ) + // smaliTreeWalker.g:649:3: ( ^( I_LINE integral_literal ) ) + // smaliTreeWalker.g:649:5: ^( I_LINE integral_literal ) { - match(input,I_LINE,FOLLOW_I_LINE_in_line1483); + match(input,I_LINE,FOLLOW_I_LINE_in_line1610); match(input, Token.DOWN, null); - pushFollow(FOLLOW_integral_literal_in_line1485); - integral_literal90=integral_literal(); + pushFollow(FOLLOW_integral_literal_in_line1612); + integral_literal99=integral_literal(); state._fsp--; match(input, Token.UP, null); - method_stack.peek().methodBuilder.addLineNumber(integral_literal90); + method_stack.peek().methodBuilder.addLineNumber(integral_literal99); } @@ -3154,57 +3594,57 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "local" - // smaliTreeWalker.g:614:1: local : ^( I_LOCAL REGISTER ( ( NULL_LITERAL |name= string_literal ) ( nonvoid_type_descriptor )? (signature= string_literal )? )? ) ; + // smaliTreeWalker.g:654:1: local : ^( I_LOCAL REGISTER ( ( NULL_LITERAL |name= string_literal ) ( nonvoid_type_descriptor )? (signature= string_literal )? )? ) ; public final void local() throws RecognitionException { - CommonTree REGISTER91=null; + CommonTree REGISTER100=null; String name =null; String signature =null; - TreeRuleReturnScope nonvoid_type_descriptor92 =null; + TreeRuleReturnScope nonvoid_type_descriptor101 =null; try { - // smaliTreeWalker.g:615:3: ( ^( I_LOCAL REGISTER ( ( NULL_LITERAL |name= string_literal ) ( nonvoid_type_descriptor )? (signature= string_literal )? )? ) ) - // smaliTreeWalker.g:615:5: ^( I_LOCAL REGISTER ( ( NULL_LITERAL |name= string_literal ) ( nonvoid_type_descriptor )? (signature= string_literal )? )? ) + // smaliTreeWalker.g:655:3: ( ^( I_LOCAL REGISTER ( ( NULL_LITERAL |name= string_literal ) ( nonvoid_type_descriptor )? (signature= string_literal )? )? ) ) + // smaliTreeWalker.g:655:5: ^( I_LOCAL REGISTER ( ( NULL_LITERAL |name= string_literal ) ( nonvoid_type_descriptor )? (signature= string_literal )? )? ) { - match(input,I_LOCAL,FOLLOW_I_LOCAL_in_local1503); + match(input,I_LOCAL,FOLLOW_I_LOCAL_in_local1630); match(input, Token.DOWN, null); - REGISTER91=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_local1505); - // smaliTreeWalker.g:615:24: ( ( NULL_LITERAL |name= string_literal ) ( nonvoid_type_descriptor )? (signature= string_literal )? )? - int alt29=2; - int LA29_0 = input.LA(1); - if ( (LA29_0==NULL_LITERAL||LA29_0==STRING_LITERAL) ) { - alt29=1; - } - switch (alt29) { + REGISTER100=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_local1632); + // smaliTreeWalker.g:655:24: ( ( NULL_LITERAL |name= string_literal ) ( nonvoid_type_descriptor )? (signature= string_literal )? )? + int alt30=2; + int LA30_0 = input.LA(1); + if ( (LA30_0==NULL_LITERAL||LA30_0==STRING_LITERAL) ) { + alt30=1; + } + switch (alt30) { case 1 : - // smaliTreeWalker.g:615:25: ( NULL_LITERAL |name= string_literal ) ( nonvoid_type_descriptor )? (signature= string_literal )? + // smaliTreeWalker.g:655:25: ( NULL_LITERAL |name= string_literal ) ( nonvoid_type_descriptor )? (signature= string_literal )? { - // smaliTreeWalker.g:615:25: ( NULL_LITERAL |name= string_literal ) - int alt26=2; - int LA26_0 = input.LA(1); - if ( (LA26_0==NULL_LITERAL) ) { - alt26=1; + // smaliTreeWalker.g:655:25: ( NULL_LITERAL |name= string_literal ) + int alt27=2; + int LA27_0 = input.LA(1); + if ( (LA27_0==NULL_LITERAL) ) { + alt27=1; } - else if ( (LA26_0==STRING_LITERAL) ) { - alt26=2; + else if ( (LA27_0==STRING_LITERAL) ) { + alt27=2; } else { NoViableAltException nvae = - new NoViableAltException("", 26, 0, input); + new NoViableAltException("", 27, 0, input); throw nvae; } - switch (alt26) { + switch (alt27) { case 1 : - // smaliTreeWalker.g:615:26: NULL_LITERAL + // smaliTreeWalker.g:655:26: NULL_LITERAL { - match(input,NULL_LITERAL,FOLLOW_NULL_LITERAL_in_local1509); + match(input,NULL_LITERAL,FOLLOW_NULL_LITERAL_in_local1636); } break; case 2 : - // smaliTreeWalker.g:615:41: name= string_literal + // smaliTreeWalker.g:655:41: name= string_literal { - pushFollow(FOLLOW_string_literal_in_local1515); + pushFollow(FOLLOW_string_literal_in_local1642); name=string_literal(); state._fsp--; @@ -3213,18 +3653,18 @@ public class smaliTreeWalker extends TreeParser { } - // smaliTreeWalker.g:615:62: ( nonvoid_type_descriptor )? - int alt27=2; - int LA27_0 = input.LA(1); - if ( (LA27_0==ARRAY_TYPE_PREFIX||LA27_0==CLASS_DESCRIPTOR||LA27_0==PRIMITIVE_TYPE) ) { - alt27=1; + // smaliTreeWalker.g:655:62: ( nonvoid_type_descriptor )? + int alt28=2; + int LA28_0 = input.LA(1); + if ( (LA28_0==ARRAY_TYPE_PREFIX||LA28_0==CLASS_DESCRIPTOR||LA28_0==PRIMITIVE_TYPE) ) { + alt28=1; } - switch (alt27) { + switch (alt28) { case 1 : - // smaliTreeWalker.g:615:62: nonvoid_type_descriptor + // smaliTreeWalker.g:655:62: nonvoid_type_descriptor { - pushFollow(FOLLOW_nonvoid_type_descriptor_in_local1518); - nonvoid_type_descriptor92=nonvoid_type_descriptor(); + pushFollow(FOLLOW_nonvoid_type_descriptor_in_local1645); + nonvoid_type_descriptor101=nonvoid_type_descriptor(); state._fsp--; } @@ -3232,17 +3672,17 @@ public class smaliTreeWalker extends TreeParser { } - // smaliTreeWalker.g:615:96: (signature= string_literal )? - int alt28=2; - int LA28_0 = input.LA(1); - if ( (LA28_0==STRING_LITERAL) ) { - alt28=1; + // smaliTreeWalker.g:655:96: (signature= string_literal )? + int alt29=2; + int LA29_0 = input.LA(1); + if ( (LA29_0==STRING_LITERAL) ) { + alt29=1; } - switch (alt28) { + switch (alt29) { case 1 : - // smaliTreeWalker.g:615:96: signature= string_literal + // smaliTreeWalker.g:655:96: signature= string_literal { - pushFollow(FOLLOW_string_literal_in_local1523); + pushFollow(FOLLOW_string_literal_in_local1650); signature=string_literal(); state._fsp--; @@ -3259,10 +3699,10 @@ public class smaliTreeWalker extends TreeParser { match(input, Token.UP, null); - int registerNumber = parseRegister_short((REGISTER91!=null?REGISTER91.getText():null)); + int registerNumber = parseRegister_short((REGISTER100!=null?REGISTER100.getText():null)); method_stack.peek().methodBuilder.addStartLocal(registerNumber, dexBuilder.internNullableStringReference(name), - dexBuilder.internNullableTypeReference((nonvoid_type_descriptor92!=null?((smaliTreeWalker.nonvoid_type_descriptor_return)nonvoid_type_descriptor92).type:null)), + dexBuilder.internNullableTypeReference((nonvoid_type_descriptor101!=null?((smaliTreeWalker.nonvoid_type_descriptor_return)nonvoid_type_descriptor101).type:null)), dexBuilder.internNullableStringReference(signature)); } @@ -3281,21 +3721,21 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "end_local" - // smaliTreeWalker.g:624:1: end_local : ^( I_END_LOCAL REGISTER ) ; + // smaliTreeWalker.g:664:1: end_local : ^( I_END_LOCAL REGISTER ) ; public final void end_local() throws RecognitionException { - CommonTree REGISTER93=null; + CommonTree REGISTER102=null; try { - // smaliTreeWalker.g:625:3: ( ^( I_END_LOCAL REGISTER ) ) - // smaliTreeWalker.g:625:5: ^( I_END_LOCAL REGISTER ) + // smaliTreeWalker.g:665:3: ( ^( I_END_LOCAL REGISTER ) ) + // smaliTreeWalker.g:665:5: ^( I_END_LOCAL REGISTER ) { - match(input,I_END_LOCAL,FOLLOW_I_END_LOCAL_in_end_local1544); + match(input,I_END_LOCAL,FOLLOW_I_END_LOCAL_in_end_local1671); match(input, Token.DOWN, null); - REGISTER93=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_end_local1546); + REGISTER102=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_end_local1673); match(input, Token.UP, null); - int registerNumber = parseRegister_short((REGISTER93!=null?REGISTER93.getText():null)); + int registerNumber = parseRegister_short((REGISTER102!=null?REGISTER102.getText():null)); method_stack.peek().methodBuilder.addEndLocal(registerNumber); } @@ -3314,21 +3754,21 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "restart_local" - // smaliTreeWalker.g:631:1: restart_local : ^( I_RESTART_LOCAL REGISTER ) ; + // smaliTreeWalker.g:671:1: restart_local : ^( I_RESTART_LOCAL REGISTER ) ; public final void restart_local() throws RecognitionException { - CommonTree REGISTER94=null; + CommonTree REGISTER103=null; try { - // smaliTreeWalker.g:632:3: ( ^( I_RESTART_LOCAL REGISTER ) ) - // smaliTreeWalker.g:632:5: ^( I_RESTART_LOCAL REGISTER ) + // smaliTreeWalker.g:672:3: ( ^( I_RESTART_LOCAL REGISTER ) ) + // smaliTreeWalker.g:672:5: ^( I_RESTART_LOCAL REGISTER ) { - match(input,I_RESTART_LOCAL,FOLLOW_I_RESTART_LOCAL_in_restart_local1564); + match(input,I_RESTART_LOCAL,FOLLOW_I_RESTART_LOCAL_in_restart_local1691); match(input, Token.DOWN, null); - REGISTER94=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_restart_local1566); + REGISTER103=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_restart_local1693); match(input, Token.UP, null); - int registerNumber = parseRegister_short((REGISTER94!=null?REGISTER94.getText():null)); + int registerNumber = parseRegister_short((REGISTER103!=null?REGISTER103.getText():null)); method_stack.peek().methodBuilder.addRestartLocal(registerNumber); } @@ -3347,13 +3787,13 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "prologue" - // smaliTreeWalker.g:638:1: prologue : I_PROLOGUE ; + // smaliTreeWalker.g:678:1: prologue : I_PROLOGUE ; public final void prologue() throws RecognitionException { try { - // smaliTreeWalker.g:639:3: ( I_PROLOGUE ) - // smaliTreeWalker.g:639:5: I_PROLOGUE + // smaliTreeWalker.g:679:3: ( I_PROLOGUE ) + // smaliTreeWalker.g:679:5: I_PROLOGUE { - match(input,I_PROLOGUE,FOLLOW_I_PROLOGUE_in_prologue1583); + match(input,I_PROLOGUE,FOLLOW_I_PROLOGUE_in_prologue1710); method_stack.peek().methodBuilder.addPrologue(); @@ -3373,13 +3813,13 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "epilogue" - // smaliTreeWalker.g:644:1: epilogue : I_EPILOGUE ; + // smaliTreeWalker.g:684:1: epilogue : I_EPILOGUE ; public final void epilogue() throws RecognitionException { try { - // smaliTreeWalker.g:645:3: ( I_EPILOGUE ) - // smaliTreeWalker.g:645:5: I_EPILOGUE + // smaliTreeWalker.g:685:3: ( I_EPILOGUE ) + // smaliTreeWalker.g:685:5: I_EPILOGUE { - match(input,I_EPILOGUE,FOLLOW_I_EPILOGUE_in_epilogue1599); + match(input,I_EPILOGUE,FOLLOW_I_EPILOGUE_in_epilogue1726); method_stack.peek().methodBuilder.addEpilogue(); @@ -3399,29 +3839,29 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "source" - // smaliTreeWalker.g:650:1: source : ^( I_SOURCE ( string_literal )? ) ; + // smaliTreeWalker.g:690:1: source : ^( I_SOURCE ( string_literal )? ) ; public final void source() throws RecognitionException { - String string_literal95 =null; + String string_literal104 =null; try { - // smaliTreeWalker.g:651:3: ( ^( I_SOURCE ( string_literal )? ) ) - // smaliTreeWalker.g:651:5: ^( I_SOURCE ( string_literal )? ) + // smaliTreeWalker.g:691:3: ( ^( I_SOURCE ( string_literal )? ) ) + // smaliTreeWalker.g:691:5: ^( I_SOURCE ( string_literal )? ) { - match(input,I_SOURCE,FOLLOW_I_SOURCE_in_source1616); + match(input,I_SOURCE,FOLLOW_I_SOURCE_in_source1743); if ( input.LA(1)==Token.DOWN ) { match(input, Token.DOWN, null); - // smaliTreeWalker.g:651:16: ( string_literal )? - int alt30=2; - int LA30_0 = input.LA(1); - if ( (LA30_0==STRING_LITERAL) ) { - alt30=1; + // smaliTreeWalker.g:691:16: ( string_literal )? + int alt31=2; + int LA31_0 = input.LA(1); + if ( (LA31_0==STRING_LITERAL) ) { + alt31=1; } - switch (alt30) { + switch (alt31) { case 1 : - // smaliTreeWalker.g:651:16: string_literal + // smaliTreeWalker.g:691:16: string_literal { - pushFollow(FOLLOW_string_literal_in_source1618); - string_literal95=string_literal(); + pushFollow(FOLLOW_string_literal_in_source1745); + string_literal104=string_literal(); state._fsp--; } @@ -3433,7 +3873,7 @@ public class smaliTreeWalker extends TreeParser { } - method_stack.peek().methodBuilder.addSetSourceFile(dexBuilder.internNullableStringReference(string_literal95)); + method_stack.peek().methodBuilder.addSetSourceFile(dexBuilder.internNullableStringReference(string_literal104)); } @@ -3450,24 +3890,85 @@ public class smaliTreeWalker extends TreeParser { + // $ANTLR start "call_site_extra_arguments" + // smaliTreeWalker.g:696:1: call_site_extra_arguments returns [List<ImmutableEncodedValue> extraArguments] : ^( I_CALL_SITE_EXTRA_ARGUMENTS ( literal )* ) ; + public final List<ImmutableEncodedValue> call_site_extra_arguments() throws RecognitionException { + List<ImmutableEncodedValue> extraArguments = null; + + + ImmutableEncodedValue literal105 =null; + + try { + // smaliTreeWalker.g:697:3: ( ^( I_CALL_SITE_EXTRA_ARGUMENTS ( literal )* ) ) + // smaliTreeWalker.g:697:5: ^( I_CALL_SITE_EXTRA_ARGUMENTS ( literal )* ) + { + extraArguments = Lists.newArrayList(); + match(input,I_CALL_SITE_EXTRA_ARGUMENTS,FOLLOW_I_CALL_SITE_EXTRA_ARGUMENTS_in_call_site_extra_arguments1771); + if ( input.LA(1)==Token.DOWN ) { + match(input, Token.DOWN, null); + // smaliTreeWalker.g:698:33: ( literal )* + loop32: + while (true) { + int alt32=2; + int LA32_0 = input.LA(1); + if ( (LA32_0==ARRAY_TYPE_PREFIX||(LA32_0 >= BOOL_LITERAL && LA32_0 <= BYTE_LITERAL)||(LA32_0 >= CHAR_LITERAL && LA32_0 <= CLASS_DESCRIPTOR)||LA32_0==DOUBLE_LITERAL||LA32_0==FLOAT_LITERAL||LA32_0==INTEGER_LITERAL||(LA32_0 >= I_ENCODED_ARRAY && LA32_0 <= I_ENCODED_METHOD_HANDLE)||LA32_0==I_METHOD_PROTOTYPE||LA32_0==I_SUBANNOTATION||LA32_0==LONG_LITERAL||LA32_0==NULL_LITERAL||LA32_0==PRIMITIVE_TYPE||LA32_0==SHORT_LITERAL||LA32_0==STRING_LITERAL||LA32_0==VOID_TYPE) ) { + alt32=1; + } + + switch (alt32) { + case 1 : + // smaliTreeWalker.g:698:34: literal + { + pushFollow(FOLLOW_literal_in_call_site_extra_arguments1774); + literal105=literal(); + state._fsp--; + + extraArguments.add(literal105); + } + break; + + default : + break loop32; + } + } + + match(input, Token.UP, null); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + // do for sure before leaving + } + return extraArguments; + } + // $ANTLR end "call_site_extra_arguments" + + + // $ANTLR start "ordered_method_items" - // smaliTreeWalker.g:656:1: ordered_method_items : ^( I_ORDERED_METHOD_ITEMS ( label_def | instruction | debug_directive )* ) ; + // smaliTreeWalker.g:700:1: ordered_method_items : ^( I_ORDERED_METHOD_ITEMS ( label_def | instruction | debug_directive )* ) ; public final void ordered_method_items() throws RecognitionException { try { - // smaliTreeWalker.g:657:3: ( ^( I_ORDERED_METHOD_ITEMS ( label_def | instruction | debug_directive )* ) ) - // smaliTreeWalker.g:657:5: ^( I_ORDERED_METHOD_ITEMS ( label_def | instruction | debug_directive )* ) + // smaliTreeWalker.g:701:3: ( ^( I_ORDERED_METHOD_ITEMS ( label_def | instruction | debug_directive )* ) ) + // smaliTreeWalker.g:701:5: ^( I_ORDERED_METHOD_ITEMS ( label_def | instruction | debug_directive )* ) { - match(input,I_ORDERED_METHOD_ITEMS,FOLLOW_I_ORDERED_METHOD_ITEMS_in_ordered_method_items1637); + match(input,I_ORDERED_METHOD_ITEMS,FOLLOW_I_ORDERED_METHOD_ITEMS_in_ordered_method_items1790); if ( input.LA(1)==Token.DOWN ) { match(input, Token.DOWN, null); - // smaliTreeWalker.g:657:30: ( label_def | instruction | debug_directive )* - loop31: + // smaliTreeWalker.g:701:30: ( label_def | instruction | debug_directive )* + loop33: while (true) { - int alt31=4; + int alt33=4; switch ( input.LA(1) ) { case I_LABEL: { - alt31=1; + alt33=1; } break; case I_STATEMENT_ARRAY_DATA: @@ -3479,6 +3980,8 @@ public class smaliTreeWalker extends TreeParser { case I_STATEMENT_FORMAT20bc: case I_STATEMENT_FORMAT20t: case I_STATEMENT_FORMAT21c_FIELD: + case I_STATEMENT_FORMAT21c_METHOD_HANDLE: + case I_STATEMENT_FORMAT21c_METHOD_TYPE: case I_STATEMENT_FORMAT21c_STRING: case I_STATEMENT_FORMAT21c_TYPE: case I_STATEMENT_FORMAT21ih: @@ -3497,8 +4000,10 @@ public class smaliTreeWalker extends TreeParser { case I_STATEMENT_FORMAT31i: case I_STATEMENT_FORMAT31t: case I_STATEMENT_FORMAT32x: + case I_STATEMENT_FORMAT35c_CALL_SITE: case I_STATEMENT_FORMAT35c_METHOD: case I_STATEMENT_FORMAT35c_TYPE: + case I_STATEMENT_FORMAT3rc_CALL_SITE: case I_STATEMENT_FORMAT3rc_METHOD: case I_STATEMENT_FORMAT3rc_TYPE: case I_STATEMENT_FORMAT45cc_METHOD: @@ -3507,7 +4012,7 @@ public class smaliTreeWalker extends TreeParser { case I_STATEMENT_PACKED_SWITCH: case I_STATEMENT_SPARSE_SWITCH: { - alt31=2; + alt33=2; } break; case I_END_LOCAL: @@ -3518,33 +4023,33 @@ public class smaliTreeWalker extends TreeParser { case I_RESTART_LOCAL: case I_SOURCE: { - alt31=3; + alt33=3; } break; } - switch (alt31) { + switch (alt33) { case 1 : - // smaliTreeWalker.g:657:31: label_def + // smaliTreeWalker.g:701:31: label_def { - pushFollow(FOLLOW_label_def_in_ordered_method_items1640); + pushFollow(FOLLOW_label_def_in_ordered_method_items1793); label_def(); state._fsp--; } break; case 2 : - // smaliTreeWalker.g:657:43: instruction + // smaliTreeWalker.g:701:43: instruction { - pushFollow(FOLLOW_instruction_in_ordered_method_items1644); + pushFollow(FOLLOW_instruction_in_ordered_method_items1797); instruction(); state._fsp--; } break; case 3 : - // smaliTreeWalker.g:657:57: debug_directive + // smaliTreeWalker.g:701:57: debug_directive { - pushFollow(FOLLOW_debug_directive_in_ordered_method_items1648); + pushFollow(FOLLOW_debug_directive_in_ordered_method_items1801); debug_directive(); state._fsp--; @@ -3552,7 +4057,7 @@ public class smaliTreeWalker extends TreeParser { break; default : - break loop31; + break loop33; } } @@ -3575,19 +4080,19 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "label_ref" - // smaliTreeWalker.g:659:1: label_ref returns [Label label] : SIMPLE_NAME ; + // smaliTreeWalker.g:703:1: label_ref returns [Label label] : SIMPLE_NAME ; public final Label label_ref() throws RecognitionException { Label label = null; - CommonTree SIMPLE_NAME96=null; + CommonTree SIMPLE_NAME106=null; try { - // smaliTreeWalker.g:660:3: ( SIMPLE_NAME ) - // smaliTreeWalker.g:660:5: SIMPLE_NAME + // smaliTreeWalker.g:704:3: ( SIMPLE_NAME ) + // smaliTreeWalker.g:704:5: SIMPLE_NAME { - SIMPLE_NAME96=(CommonTree)match(input,SIMPLE_NAME,FOLLOW_SIMPLE_NAME_in_label_ref1664); - label = method_stack.peek().methodBuilder.getLabel((SIMPLE_NAME96!=null?SIMPLE_NAME96.getText():null)); + SIMPLE_NAME106=(CommonTree)match(input,SIMPLE_NAME,FOLLOW_SIMPLE_NAME_in_label_ref1817); + label = method_stack.peek().methodBuilder.getLabel((SIMPLE_NAME106!=null?SIMPLE_NAME106.getText():null)); } } @@ -3610,51 +4115,51 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "register_list" - // smaliTreeWalker.g:662:1: register_list returns [byte[] registers, byte registerCount] : ^( I_REGISTER_LIST ( REGISTER )* ) ; + // smaliTreeWalker.g:706:1: register_list returns [byte[] registers, byte registerCount] : ^( I_REGISTER_LIST ( REGISTER )* ) ; public final smaliTreeWalker.register_list_return register_list() throws RecognitionException { smaliTreeWalker.register_list_return retval = new smaliTreeWalker.register_list_return(); retval.start = input.LT(1); - CommonTree I_REGISTER_LIST97=null; - CommonTree REGISTER98=null; + CommonTree I_REGISTER_LIST107=null; + CommonTree REGISTER108=null; retval.registers = new byte[5]; retval.registerCount = 0; try { - // smaliTreeWalker.g:668:3: ( ^( I_REGISTER_LIST ( REGISTER )* ) ) - // smaliTreeWalker.g:668:5: ^( I_REGISTER_LIST ( REGISTER )* ) + // smaliTreeWalker.g:712:3: ( ^( I_REGISTER_LIST ( REGISTER )* ) ) + // smaliTreeWalker.g:712:5: ^( I_REGISTER_LIST ( REGISTER )* ) { - I_REGISTER_LIST97=(CommonTree)match(input,I_REGISTER_LIST,FOLLOW_I_REGISTER_LIST_in_register_list1689); + I_REGISTER_LIST107=(CommonTree)match(input,I_REGISTER_LIST,FOLLOW_I_REGISTER_LIST_in_register_list1842); if ( input.LA(1)==Token.DOWN ) { match(input, Token.DOWN, null); - // smaliTreeWalker.g:669:7: ( REGISTER )* - loop32: + // smaliTreeWalker.g:713:7: ( REGISTER )* + loop34: while (true) { - int alt32=2; - int LA32_0 = input.LA(1); - if ( (LA32_0==REGISTER) ) { - alt32=1; + int alt34=2; + int LA34_0 = input.LA(1); + if ( (LA34_0==REGISTER) ) { + alt34=1; } - switch (alt32) { + switch (alt34) { case 1 : - // smaliTreeWalker.g:669:8: REGISTER + // smaliTreeWalker.g:713:8: REGISTER { - REGISTER98=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_register_list1698); + REGISTER108=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_register_list1851); if (retval.registerCount == 5) { - throw new SemanticException(input, I_REGISTER_LIST97, "A list of registers can only have a maximum of 5 " + + throw new SemanticException(input, I_REGISTER_LIST107, "A list of registers can only have a maximum of 5 " + "registers. Use the <op>/range alternate opcode instead."); } - retval.registers[retval.registerCount++] = parseRegister_nibble((REGISTER98!=null?REGISTER98.getText():null)); + retval.registers[retval.registerCount++] = parseRegister_nibble((REGISTER108!=null?REGISTER108.getText():null)); } break; default : - break loop32; + break loop34; } } @@ -3683,44 +4188,44 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "register_range" - // smaliTreeWalker.g:678:1: register_range returns [int startRegister, int endRegister] : ^( I_REGISTER_RANGE (startReg= REGISTER (endReg= REGISTER )? )? ) ; + // smaliTreeWalker.g:722:1: register_range returns [int startRegister, int endRegister] : ^( I_REGISTER_RANGE (startReg= REGISTER (endReg= REGISTER )? )? ) ; public final smaliTreeWalker.register_range_return register_range() throws RecognitionException { smaliTreeWalker.register_range_return retval = new smaliTreeWalker.register_range_return(); retval.start = input.LT(1); CommonTree startReg=null; CommonTree endReg=null; - CommonTree I_REGISTER_RANGE99=null; + CommonTree I_REGISTER_RANGE109=null; try { - // smaliTreeWalker.g:679:3: ( ^( I_REGISTER_RANGE (startReg= REGISTER (endReg= REGISTER )? )? ) ) - // smaliTreeWalker.g:679:5: ^( I_REGISTER_RANGE (startReg= REGISTER (endReg= REGISTER )? )? ) + // smaliTreeWalker.g:723:3: ( ^( I_REGISTER_RANGE (startReg= REGISTER (endReg= REGISTER )? )? ) ) + // smaliTreeWalker.g:723:5: ^( I_REGISTER_RANGE (startReg= REGISTER (endReg= REGISTER )? )? ) { - I_REGISTER_RANGE99=(CommonTree)match(input,I_REGISTER_RANGE,FOLLOW_I_REGISTER_RANGE_in_register_range1723); + I_REGISTER_RANGE109=(CommonTree)match(input,I_REGISTER_RANGE,FOLLOW_I_REGISTER_RANGE_in_register_range1876); if ( input.LA(1)==Token.DOWN ) { match(input, Token.DOWN, null); - // smaliTreeWalker.g:679:24: (startReg= REGISTER (endReg= REGISTER )? )? - int alt34=2; - int LA34_0 = input.LA(1); - if ( (LA34_0==REGISTER) ) { - alt34=1; + // smaliTreeWalker.g:723:24: (startReg= REGISTER (endReg= REGISTER )? )? + int alt36=2; + int LA36_0 = input.LA(1); + if ( (LA36_0==REGISTER) ) { + alt36=1; } - switch (alt34) { + switch (alt36) { case 1 : - // smaliTreeWalker.g:679:25: startReg= REGISTER (endReg= REGISTER )? + // smaliTreeWalker.g:723:25: startReg= REGISTER (endReg= REGISTER )? { - startReg=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_register_range1728); - // smaliTreeWalker.g:679:49: (endReg= REGISTER )? - int alt33=2; - int LA33_0 = input.LA(1); - if ( (LA33_0==REGISTER) ) { - alt33=1; + startReg=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_register_range1881); + // smaliTreeWalker.g:723:49: (endReg= REGISTER )? + int alt35=2; + int LA35_0 = input.LA(1); + if ( (LA35_0==REGISTER) ) { + alt35=1; } - switch (alt33) { + switch (alt35) { case 1 : - // smaliTreeWalker.g:679:49: endReg= REGISTER + // smaliTreeWalker.g:723:49: endReg= REGISTER { - endReg=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_register_range1732); + endReg=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_register_range1885); } break; @@ -3748,7 +4253,7 @@ public class smaliTreeWalker extends TreeParser { int registerCount = retval.endRegister-retval.startRegister+1; if (registerCount < 1) { - throw new SemanticException(input, I_REGISTER_RANGE99, "A register range must have the lower register listed first"); + throw new SemanticException(input, I_REGISTER_RANGE109, "A register range must have the lower register listed first"); } } @@ -3769,32 +4274,32 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "verification_error_reference" - // smaliTreeWalker.g:699:1: verification_error_reference returns [ImmutableReference reference] : ( CLASS_DESCRIPTOR | field_reference | method_reference ); + // smaliTreeWalker.g:743:1: verification_error_reference returns [ImmutableReference reference] : ( CLASS_DESCRIPTOR | field_reference | method_reference ); public final ImmutableReference verification_error_reference() throws RecognitionException { ImmutableReference reference = null; - CommonTree CLASS_DESCRIPTOR100=null; - ImmutableFieldReference field_reference101 =null; - ImmutableMethodReference method_reference102 =null; + CommonTree CLASS_DESCRIPTOR110=null; + TreeRuleReturnScope field_reference111 =null; + ImmutableMethodReference method_reference112 =null; try { - // smaliTreeWalker.g:700:3: ( CLASS_DESCRIPTOR | field_reference | method_reference ) - int alt35=3; + // smaliTreeWalker.g:744:3: ( CLASS_DESCRIPTOR | field_reference | method_reference ) + int alt37=3; switch ( input.LA(1) ) { case CLASS_DESCRIPTOR: { - int LA35_1 = input.LA(2); - if ( (LA35_1==UP) ) { - alt35=1; + int LA37_1 = input.LA(2); + if ( (LA37_1==UP) ) { + alt37=1; } - else if ( (LA35_1==SIMPLE_NAME) ) { - int LA35_3 = input.LA(3); - if ( (LA35_3==ARRAY_TYPE_PREFIX||LA35_3==CLASS_DESCRIPTOR||LA35_3==PRIMITIVE_TYPE) ) { - alt35=2; + else if ( (LA37_1==SIMPLE_NAME) ) { + int LA37_3 = input.LA(3); + if ( (LA37_3==ARRAY_TYPE_PREFIX||LA37_3==CLASS_DESCRIPTOR||LA37_3==PRIMITIVE_TYPE) ) { + alt37=2; } - else if ( (LA35_3==I_METHOD_PROTOTYPE) ) { - alt35=3; + else if ( (LA37_3==I_METHOD_PROTOTYPE) ) { + alt37=3; } else { @@ -3804,7 +4309,7 @@ public class smaliTreeWalker extends TreeParser { input.consume(); } NoViableAltException nvae = - new NoViableAltException("", 35, 3, input); + new NoViableAltException("", 37, 3, input); throw nvae; } finally { input.rewind(nvaeMark); @@ -3818,7 +4323,7 @@ public class smaliTreeWalker extends TreeParser { try { input.consume(); NoViableAltException nvae = - new NoViableAltException("", 35, 1, input); + new NoViableAltException("", 37, 1, input); throw nvae; } finally { input.rewind(nvaeMark); @@ -3829,16 +4334,16 @@ public class smaliTreeWalker extends TreeParser { break; case ARRAY_TYPE_PREFIX: { - int LA35_2 = input.LA(2); - if ( (LA35_2==PRIMITIVE_TYPE) ) { - int LA35_5 = input.LA(3); - if ( (LA35_5==SIMPLE_NAME) ) { - int LA35_3 = input.LA(4); - if ( (LA35_3==ARRAY_TYPE_PREFIX||LA35_3==CLASS_DESCRIPTOR||LA35_3==PRIMITIVE_TYPE) ) { - alt35=2; + int LA37_2 = input.LA(2); + if ( (LA37_2==PRIMITIVE_TYPE) ) { + int LA37_5 = input.LA(3); + if ( (LA37_5==SIMPLE_NAME) ) { + int LA37_3 = input.LA(4); + if ( (LA37_3==ARRAY_TYPE_PREFIX||LA37_3==CLASS_DESCRIPTOR||LA37_3==PRIMITIVE_TYPE) ) { + alt37=2; } - else if ( (LA35_3==I_METHOD_PROTOTYPE) ) { - alt35=3; + else if ( (LA37_3==I_METHOD_PROTOTYPE) ) { + alt37=3; } else { @@ -3848,7 +4353,7 @@ public class smaliTreeWalker extends TreeParser { input.consume(); } NoViableAltException nvae = - new NoViableAltException("", 35, 3, input); + new NoViableAltException("", 37, 3, input); throw nvae; } finally { input.rewind(nvaeMark); @@ -3864,7 +4369,7 @@ public class smaliTreeWalker extends TreeParser { input.consume(); } NoViableAltException nvae = - new NoViableAltException("", 35, 5, input); + new NoViableAltException("", 37, 5, input); throw nvae; } finally { input.rewind(nvaeMark); @@ -3872,15 +4377,15 @@ public class smaliTreeWalker extends TreeParser { } } - else if ( (LA35_2==CLASS_DESCRIPTOR) ) { - int LA35_6 = input.LA(3); - if ( (LA35_6==SIMPLE_NAME) ) { - int LA35_3 = input.LA(4); - if ( (LA35_3==ARRAY_TYPE_PREFIX||LA35_3==CLASS_DESCRIPTOR||LA35_3==PRIMITIVE_TYPE) ) { - alt35=2; + else if ( (LA37_2==CLASS_DESCRIPTOR) ) { + int LA37_6 = input.LA(3); + if ( (LA37_6==SIMPLE_NAME) ) { + int LA37_3 = input.LA(4); + if ( (LA37_3==ARRAY_TYPE_PREFIX||LA37_3==CLASS_DESCRIPTOR||LA37_3==PRIMITIVE_TYPE) ) { + alt37=2; } - else if ( (LA35_3==I_METHOD_PROTOTYPE) ) { - alt35=3; + else if ( (LA37_3==I_METHOD_PROTOTYPE) ) { + alt37=3; } else { @@ -3890,7 +4395,7 @@ public class smaliTreeWalker extends TreeParser { input.consume(); } NoViableAltException nvae = - new NoViableAltException("", 35, 3, input); + new NoViableAltException("", 37, 3, input); throw nvae; } finally { input.rewind(nvaeMark); @@ -3906,7 +4411,7 @@ public class smaliTreeWalker extends TreeParser { input.consume(); } NoViableAltException nvae = - new NoViableAltException("", 35, 6, input); + new NoViableAltException("", 37, 6, input); throw nvae; } finally { input.rewind(nvaeMark); @@ -3920,7 +4425,7 @@ public class smaliTreeWalker extends TreeParser { try { input.consume(); NoViableAltException nvae = - new NoViableAltException("", 35, 2, input); + new NoViableAltException("", 37, 2, input); throw nvae; } finally { input.rewind(nvaeMark); @@ -3931,12 +4436,12 @@ public class smaliTreeWalker extends TreeParser { break; case SIMPLE_NAME: { - int LA35_3 = input.LA(2); - if ( (LA35_3==ARRAY_TYPE_PREFIX||LA35_3==CLASS_DESCRIPTOR||LA35_3==PRIMITIVE_TYPE) ) { - alt35=2; + int LA37_3 = input.LA(2); + if ( (LA37_3==ARRAY_TYPE_PREFIX||LA37_3==CLASS_DESCRIPTOR||LA37_3==PRIMITIVE_TYPE) ) { + alt37=2; } - else if ( (LA35_3==I_METHOD_PROTOTYPE) ) { - alt35=3; + else if ( (LA37_3==I_METHOD_PROTOTYPE) ) { + alt37=3; } else { @@ -3944,7 +4449,7 @@ public class smaliTreeWalker extends TreeParser { try { input.consume(); NoViableAltException nvae = - new NoViableAltException("", 35, 3, input); + new NoViableAltException("", 37, 3, input); throw nvae; } finally { input.rewind(nvaeMark); @@ -3955,40 +4460,40 @@ public class smaliTreeWalker extends TreeParser { break; default: NoViableAltException nvae = - new NoViableAltException("", 35, 0, input); + new NoViableAltException("", 37, 0, input); throw nvae; } - switch (alt35) { + switch (alt37) { case 1 : - // smaliTreeWalker.g:700:5: CLASS_DESCRIPTOR + // smaliTreeWalker.g:744:5: CLASS_DESCRIPTOR { - CLASS_DESCRIPTOR100=(CommonTree)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_verification_error_reference1755); + CLASS_DESCRIPTOR110=(CommonTree)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_verification_error_reference1908); - reference = new ImmutableTypeReference((CLASS_DESCRIPTOR100!=null?CLASS_DESCRIPTOR100.getText():null)); + reference = new ImmutableTypeReference((CLASS_DESCRIPTOR110!=null?CLASS_DESCRIPTOR110.getText():null)); } break; case 2 : - // smaliTreeWalker.g:704:5: field_reference + // smaliTreeWalker.g:748:5: field_reference { - pushFollow(FOLLOW_field_reference_in_verification_error_reference1765); - field_reference101=field_reference(); + pushFollow(FOLLOW_field_reference_in_verification_error_reference1918); + field_reference111=field_reference(); state._fsp--; - reference = field_reference101; + reference = (field_reference111!=null?((smaliTreeWalker.field_reference_return)field_reference111).fieldReference:null); } break; case 3 : - // smaliTreeWalker.g:708:5: method_reference + // smaliTreeWalker.g:752:5: method_reference { - pushFollow(FOLLOW_method_reference_in_verification_error_reference1775); - method_reference102=method_reference(); + pushFollow(FOLLOW_method_reference_in_verification_error_reference1928); + method_reference112=method_reference(); state._fsp--; - reference = method_reference102; + reference = method_reference112; } break; @@ -4009,20 +4514,20 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "verification_error_type" - // smaliTreeWalker.g:713:1: verification_error_type returns [int verificationError] : VERIFICATION_ERROR_TYPE ; + // smaliTreeWalker.g:757:1: verification_error_type returns [int verificationError] : VERIFICATION_ERROR_TYPE ; public final int verification_error_type() throws RecognitionException { int verificationError = 0; - CommonTree VERIFICATION_ERROR_TYPE103=null; + CommonTree VERIFICATION_ERROR_TYPE113=null; try { - // smaliTreeWalker.g:714:3: ( VERIFICATION_ERROR_TYPE ) - // smaliTreeWalker.g:714:5: VERIFICATION_ERROR_TYPE + // smaliTreeWalker.g:758:3: ( VERIFICATION_ERROR_TYPE ) + // smaliTreeWalker.g:758:5: VERIFICATION_ERROR_TYPE { - VERIFICATION_ERROR_TYPE103=(CommonTree)match(input,VERIFICATION_ERROR_TYPE,FOLLOW_VERIFICATION_ERROR_TYPE_in_verification_error_type1792); + VERIFICATION_ERROR_TYPE113=(CommonTree)match(input,VERIFICATION_ERROR_TYPE,FOLLOW_VERIFICATION_ERROR_TYPE_in_verification_error_type1945); - verificationError = VerificationError.getVerificationError((VERIFICATION_ERROR_TYPE103!=null?VERIFICATION_ERROR_TYPE103.getText():null)); + verificationError = VerificationError.getVerificationError((VERIFICATION_ERROR_TYPE113!=null?VERIFICATION_ERROR_TYPE113.getText():null)); } @@ -4044,520 +4549,576 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "instruction" - // smaliTreeWalker.g:719:1: instruction : ( insn_format10t | insn_format10x | insn_format11n | insn_format11x | insn_format12x | insn_format20bc | insn_format20t | insn_format21c_field | insn_format21c_string | insn_format21c_type | insn_format21ih | insn_format21lh | insn_format21s | insn_format21t | insn_format22b | insn_format22c_field | insn_format22c_type | insn_format22s | insn_format22t | insn_format22x | insn_format23x | insn_format30t | insn_format31c | insn_format31i | insn_format31t | insn_format32x | insn_format35c_method | insn_format35c_type | insn_format3rc_method | insn_format3rc_type | insn_format45cc_method | insn_format4rcc_method | insn_format51l_type | insn_array_data_directive | insn_packed_switch_directive | insn_sparse_switch_directive ); + // smaliTreeWalker.g:763:1: instruction : ( insn_format10t | insn_format10x | insn_format11n | insn_format11x | insn_format12x | insn_format20bc | insn_format20t | insn_format21c_field | insn_format21c_method_handle | insn_format21c_method_type | insn_format21c_string | insn_format21c_type | insn_format21ih | insn_format21lh | insn_format21s | insn_format21t | insn_format22b | insn_format22c_field | insn_format22c_type | insn_format22s | insn_format22t | insn_format22x | insn_format23x | insn_format30t | insn_format31c | insn_format31i | insn_format31t | insn_format32x | insn_format35c_call_site | insn_format35c_method | insn_format35c_type | insn_format3rc_call_site | insn_format3rc_method | insn_format3rc_type | insn_format45cc_method | insn_format4rcc_method | insn_format51l_type | insn_array_data_directive | insn_packed_switch_directive | insn_sparse_switch_directive ); public final smaliTreeWalker.instruction_return instruction() throws RecognitionException { smaliTreeWalker.instruction_return retval = new smaliTreeWalker.instruction_return(); retval.start = input.LT(1); try { - // smaliTreeWalker.g:720:3: ( insn_format10t | insn_format10x | insn_format11n | insn_format11x | insn_format12x | insn_format20bc | insn_format20t | insn_format21c_field | insn_format21c_string | insn_format21c_type | insn_format21ih | insn_format21lh | insn_format21s | insn_format21t | insn_format22b | insn_format22c_field | insn_format22c_type | insn_format22s | insn_format22t | insn_format22x | insn_format23x | insn_format30t | insn_format31c | insn_format31i | insn_format31t | insn_format32x | insn_format35c_method | insn_format35c_type | insn_format3rc_method | insn_format3rc_type | insn_format45cc_method | insn_format4rcc_method | insn_format51l_type | insn_array_data_directive | insn_packed_switch_directive | insn_sparse_switch_directive ) - int alt36=36; + // smaliTreeWalker.g:764:3: ( insn_format10t | insn_format10x | insn_format11n | insn_format11x | insn_format12x | insn_format20bc | insn_format20t | insn_format21c_field | insn_format21c_method_handle | insn_format21c_method_type | insn_format21c_string | insn_format21c_type | insn_format21ih | insn_format21lh | insn_format21s | insn_format21t | insn_format22b | insn_format22c_field | insn_format22c_type | insn_format22s | insn_format22t | insn_format22x | insn_format23x | insn_format30t | insn_format31c | insn_format31i | insn_format31t | insn_format32x | insn_format35c_call_site | insn_format35c_method | insn_format35c_type | insn_format3rc_call_site | insn_format3rc_method | insn_format3rc_type | insn_format45cc_method | insn_format4rcc_method | insn_format51l_type | insn_array_data_directive | insn_packed_switch_directive | insn_sparse_switch_directive ) + int alt38=40; switch ( input.LA(1) ) { case I_STATEMENT_FORMAT10t: { - alt36=1; + alt38=1; } break; case I_STATEMENT_FORMAT10x: { - alt36=2; + alt38=2; } break; case I_STATEMENT_FORMAT11n: { - alt36=3; + alt38=3; } break; case I_STATEMENT_FORMAT11x: { - alt36=4; + alt38=4; } break; case I_STATEMENT_FORMAT12x: { - alt36=5; + alt38=5; } break; case I_STATEMENT_FORMAT20bc: { - alt36=6; + alt38=6; } break; case I_STATEMENT_FORMAT20t: { - alt36=7; + alt38=7; } break; case I_STATEMENT_FORMAT21c_FIELD: { - alt36=8; + alt38=8; + } + break; + case I_STATEMENT_FORMAT21c_METHOD_HANDLE: + { + alt38=9; + } + break; + case I_STATEMENT_FORMAT21c_METHOD_TYPE: + { + alt38=10; } break; case I_STATEMENT_FORMAT21c_STRING: { - alt36=9; + alt38=11; } break; case I_STATEMENT_FORMAT21c_TYPE: { - alt36=10; + alt38=12; } break; case I_STATEMENT_FORMAT21ih: { - alt36=11; + alt38=13; } break; case I_STATEMENT_FORMAT21lh: { - alt36=12; + alt38=14; } break; case I_STATEMENT_FORMAT21s: { - alt36=13; + alt38=15; } break; case I_STATEMENT_FORMAT21t: { - alt36=14; + alt38=16; } break; case I_STATEMENT_FORMAT22b: { - alt36=15; + alt38=17; } break; case I_STATEMENT_FORMAT22c_FIELD: { - alt36=16; + alt38=18; } break; case I_STATEMENT_FORMAT22c_TYPE: { - alt36=17; + alt38=19; } break; case I_STATEMENT_FORMAT22s: { - alt36=18; + alt38=20; } break; case I_STATEMENT_FORMAT22t: { - alt36=19; + alt38=21; } break; case I_STATEMENT_FORMAT22x: { - alt36=20; + alt38=22; } break; case I_STATEMENT_FORMAT23x: { - alt36=21; + alt38=23; } break; case I_STATEMENT_FORMAT30t: { - alt36=22; + alt38=24; } break; case I_STATEMENT_FORMAT31c: { - alt36=23; + alt38=25; } break; case I_STATEMENT_FORMAT31i: { - alt36=24; + alt38=26; } break; case I_STATEMENT_FORMAT31t: { - alt36=25; + alt38=27; } break; case I_STATEMENT_FORMAT32x: { - alt36=26; + alt38=28; + } + break; + case I_STATEMENT_FORMAT35c_CALL_SITE: + { + alt38=29; } break; case I_STATEMENT_FORMAT35c_METHOD: { - alt36=27; + alt38=30; } break; case I_STATEMENT_FORMAT35c_TYPE: { - alt36=28; + alt38=31; + } + break; + case I_STATEMENT_FORMAT3rc_CALL_SITE: + { + alt38=32; } break; case I_STATEMENT_FORMAT3rc_METHOD: { - alt36=29; + alt38=33; } break; case I_STATEMENT_FORMAT3rc_TYPE: { - alt36=30; + alt38=34; } break; case I_STATEMENT_FORMAT45cc_METHOD: { - alt36=31; + alt38=35; } break; case I_STATEMENT_FORMAT4rcc_METHOD: { - alt36=32; + alt38=36; } break; case I_STATEMENT_FORMAT51l: { - alt36=33; + alt38=37; } break; case I_STATEMENT_ARRAY_DATA: { - alt36=34; + alt38=38; } break; case I_STATEMENT_PACKED_SWITCH: { - alt36=35; + alt38=39; } break; case I_STATEMENT_SPARSE_SWITCH: { - alt36=36; + alt38=40; } break; default: NoViableAltException nvae = - new NoViableAltException("", 36, 0, input); + new NoViableAltException("", 38, 0, input); throw nvae; } - switch (alt36) { + switch (alt38) { case 1 : - // smaliTreeWalker.g:720:5: insn_format10t + // smaliTreeWalker.g:764:5: insn_format10t { - pushFollow(FOLLOW_insn_format10t_in_instruction1806); + pushFollow(FOLLOW_insn_format10t_in_instruction1959); insn_format10t(); state._fsp--; } break; case 2 : - // smaliTreeWalker.g:721:5: insn_format10x + // smaliTreeWalker.g:765:5: insn_format10x { - pushFollow(FOLLOW_insn_format10x_in_instruction1812); + pushFollow(FOLLOW_insn_format10x_in_instruction1965); insn_format10x(); state._fsp--; } break; case 3 : - // smaliTreeWalker.g:722:5: insn_format11n + // smaliTreeWalker.g:766:5: insn_format11n { - pushFollow(FOLLOW_insn_format11n_in_instruction1818); + pushFollow(FOLLOW_insn_format11n_in_instruction1971); insn_format11n(); state._fsp--; } break; case 4 : - // smaliTreeWalker.g:723:5: insn_format11x + // smaliTreeWalker.g:767:5: insn_format11x { - pushFollow(FOLLOW_insn_format11x_in_instruction1824); + pushFollow(FOLLOW_insn_format11x_in_instruction1977); insn_format11x(); state._fsp--; } break; case 5 : - // smaliTreeWalker.g:724:5: insn_format12x + // smaliTreeWalker.g:768:5: insn_format12x { - pushFollow(FOLLOW_insn_format12x_in_instruction1830); + pushFollow(FOLLOW_insn_format12x_in_instruction1983); insn_format12x(); state._fsp--; } break; case 6 : - // smaliTreeWalker.g:725:5: insn_format20bc + // smaliTreeWalker.g:769:5: insn_format20bc { - pushFollow(FOLLOW_insn_format20bc_in_instruction1836); + pushFollow(FOLLOW_insn_format20bc_in_instruction1989); insn_format20bc(); state._fsp--; } break; case 7 : - // smaliTreeWalker.g:726:5: insn_format20t + // smaliTreeWalker.g:770:5: insn_format20t { - pushFollow(FOLLOW_insn_format20t_in_instruction1842); + pushFollow(FOLLOW_insn_format20t_in_instruction1995); insn_format20t(); state._fsp--; } break; case 8 : - // smaliTreeWalker.g:727:5: insn_format21c_field + // smaliTreeWalker.g:771:5: insn_format21c_field { - pushFollow(FOLLOW_insn_format21c_field_in_instruction1848); + pushFollow(FOLLOW_insn_format21c_field_in_instruction2001); insn_format21c_field(); state._fsp--; } break; case 9 : - // smaliTreeWalker.g:728:5: insn_format21c_string + // smaliTreeWalker.g:772:5: insn_format21c_method_handle { - pushFollow(FOLLOW_insn_format21c_string_in_instruction1854); - insn_format21c_string(); + pushFollow(FOLLOW_insn_format21c_method_handle_in_instruction2007); + insn_format21c_method_handle(); state._fsp--; } break; case 10 : - // smaliTreeWalker.g:729:5: insn_format21c_type + // smaliTreeWalker.g:773:5: insn_format21c_method_type { - pushFollow(FOLLOW_insn_format21c_type_in_instruction1860); - insn_format21c_type(); + pushFollow(FOLLOW_insn_format21c_method_type_in_instruction2013); + insn_format21c_method_type(); state._fsp--; } break; case 11 : - // smaliTreeWalker.g:730:5: insn_format21ih + // smaliTreeWalker.g:774:5: insn_format21c_string { - pushFollow(FOLLOW_insn_format21ih_in_instruction1866); - insn_format21ih(); + pushFollow(FOLLOW_insn_format21c_string_in_instruction2019); + insn_format21c_string(); state._fsp--; } break; case 12 : - // smaliTreeWalker.g:731:5: insn_format21lh + // smaliTreeWalker.g:775:5: insn_format21c_type { - pushFollow(FOLLOW_insn_format21lh_in_instruction1872); - insn_format21lh(); + pushFollow(FOLLOW_insn_format21c_type_in_instruction2025); + insn_format21c_type(); state._fsp--; } break; case 13 : - // smaliTreeWalker.g:732:5: insn_format21s + // smaliTreeWalker.g:776:5: insn_format21ih { - pushFollow(FOLLOW_insn_format21s_in_instruction1878); - insn_format21s(); + pushFollow(FOLLOW_insn_format21ih_in_instruction2031); + insn_format21ih(); state._fsp--; } break; case 14 : - // smaliTreeWalker.g:733:5: insn_format21t + // smaliTreeWalker.g:777:5: insn_format21lh { - pushFollow(FOLLOW_insn_format21t_in_instruction1884); - insn_format21t(); + pushFollow(FOLLOW_insn_format21lh_in_instruction2037); + insn_format21lh(); state._fsp--; } break; case 15 : - // smaliTreeWalker.g:734:5: insn_format22b + // smaliTreeWalker.g:778:5: insn_format21s { - pushFollow(FOLLOW_insn_format22b_in_instruction1890); - insn_format22b(); + pushFollow(FOLLOW_insn_format21s_in_instruction2043); + insn_format21s(); state._fsp--; } break; case 16 : - // smaliTreeWalker.g:735:5: insn_format22c_field + // smaliTreeWalker.g:779:5: insn_format21t { - pushFollow(FOLLOW_insn_format22c_field_in_instruction1896); - insn_format22c_field(); + pushFollow(FOLLOW_insn_format21t_in_instruction2049); + insn_format21t(); state._fsp--; } break; case 17 : - // smaliTreeWalker.g:736:5: insn_format22c_type + // smaliTreeWalker.g:780:5: insn_format22b { - pushFollow(FOLLOW_insn_format22c_type_in_instruction1902); - insn_format22c_type(); + pushFollow(FOLLOW_insn_format22b_in_instruction2055); + insn_format22b(); state._fsp--; } break; case 18 : - // smaliTreeWalker.g:737:5: insn_format22s + // smaliTreeWalker.g:781:5: insn_format22c_field { - pushFollow(FOLLOW_insn_format22s_in_instruction1908); - insn_format22s(); + pushFollow(FOLLOW_insn_format22c_field_in_instruction2061); + insn_format22c_field(); state._fsp--; } break; case 19 : - // smaliTreeWalker.g:738:5: insn_format22t + // smaliTreeWalker.g:782:5: insn_format22c_type { - pushFollow(FOLLOW_insn_format22t_in_instruction1914); - insn_format22t(); + pushFollow(FOLLOW_insn_format22c_type_in_instruction2067); + insn_format22c_type(); state._fsp--; } break; case 20 : - // smaliTreeWalker.g:739:5: insn_format22x + // smaliTreeWalker.g:783:5: insn_format22s { - pushFollow(FOLLOW_insn_format22x_in_instruction1920); - insn_format22x(); + pushFollow(FOLLOW_insn_format22s_in_instruction2073); + insn_format22s(); state._fsp--; } break; case 21 : - // smaliTreeWalker.g:740:5: insn_format23x + // smaliTreeWalker.g:784:5: insn_format22t { - pushFollow(FOLLOW_insn_format23x_in_instruction1926); - insn_format23x(); + pushFollow(FOLLOW_insn_format22t_in_instruction2079); + insn_format22t(); state._fsp--; } break; case 22 : - // smaliTreeWalker.g:741:5: insn_format30t + // smaliTreeWalker.g:785:5: insn_format22x { - pushFollow(FOLLOW_insn_format30t_in_instruction1932); - insn_format30t(); + pushFollow(FOLLOW_insn_format22x_in_instruction2085); + insn_format22x(); state._fsp--; } break; case 23 : - // smaliTreeWalker.g:742:5: insn_format31c + // smaliTreeWalker.g:786:5: insn_format23x { - pushFollow(FOLLOW_insn_format31c_in_instruction1938); - insn_format31c(); + pushFollow(FOLLOW_insn_format23x_in_instruction2091); + insn_format23x(); state._fsp--; } break; case 24 : - // smaliTreeWalker.g:743:5: insn_format31i + // smaliTreeWalker.g:787:5: insn_format30t { - pushFollow(FOLLOW_insn_format31i_in_instruction1944); - insn_format31i(); + pushFollow(FOLLOW_insn_format30t_in_instruction2097); + insn_format30t(); state._fsp--; } break; case 25 : - // smaliTreeWalker.g:744:5: insn_format31t + // smaliTreeWalker.g:788:5: insn_format31c { - pushFollow(FOLLOW_insn_format31t_in_instruction1950); - insn_format31t(); + pushFollow(FOLLOW_insn_format31c_in_instruction2103); + insn_format31c(); state._fsp--; } break; case 26 : - // smaliTreeWalker.g:745:5: insn_format32x + // smaliTreeWalker.g:789:5: insn_format31i { - pushFollow(FOLLOW_insn_format32x_in_instruction1956); - insn_format32x(); + pushFollow(FOLLOW_insn_format31i_in_instruction2109); + insn_format31i(); state._fsp--; } break; case 27 : - // smaliTreeWalker.g:746:5: insn_format35c_method + // smaliTreeWalker.g:790:5: insn_format31t { - pushFollow(FOLLOW_insn_format35c_method_in_instruction1962); - insn_format35c_method(); + pushFollow(FOLLOW_insn_format31t_in_instruction2115); + insn_format31t(); state._fsp--; } break; case 28 : - // smaliTreeWalker.g:747:5: insn_format35c_type + // smaliTreeWalker.g:791:5: insn_format32x { - pushFollow(FOLLOW_insn_format35c_type_in_instruction1968); - insn_format35c_type(); + pushFollow(FOLLOW_insn_format32x_in_instruction2121); + insn_format32x(); state._fsp--; } break; case 29 : - // smaliTreeWalker.g:748:5: insn_format3rc_method + // smaliTreeWalker.g:792:5: insn_format35c_call_site { - pushFollow(FOLLOW_insn_format3rc_method_in_instruction1974); - insn_format3rc_method(); + pushFollow(FOLLOW_insn_format35c_call_site_in_instruction2127); + insn_format35c_call_site(); state._fsp--; } break; case 30 : - // smaliTreeWalker.g:749:5: insn_format3rc_type + // smaliTreeWalker.g:793:5: insn_format35c_method { - pushFollow(FOLLOW_insn_format3rc_type_in_instruction1980); - insn_format3rc_type(); + pushFollow(FOLLOW_insn_format35c_method_in_instruction2133); + insn_format35c_method(); state._fsp--; } break; case 31 : - // smaliTreeWalker.g:750:5: insn_format45cc_method + // smaliTreeWalker.g:794:5: insn_format35c_type { - pushFollow(FOLLOW_insn_format45cc_method_in_instruction1986); - insn_format45cc_method(); + pushFollow(FOLLOW_insn_format35c_type_in_instruction2139); + insn_format35c_type(); state._fsp--; } break; case 32 : - // smaliTreeWalker.g:751:5: insn_format4rcc_method + // smaliTreeWalker.g:795:5: insn_format3rc_call_site { - pushFollow(FOLLOW_insn_format4rcc_method_in_instruction1992); - insn_format4rcc_method(); + pushFollow(FOLLOW_insn_format3rc_call_site_in_instruction2145); + insn_format3rc_call_site(); state._fsp--; } break; case 33 : - // smaliTreeWalker.g:752:5: insn_format51l_type + // smaliTreeWalker.g:796:5: insn_format3rc_method { - pushFollow(FOLLOW_insn_format51l_type_in_instruction1998); - insn_format51l_type(); + pushFollow(FOLLOW_insn_format3rc_method_in_instruction2151); + insn_format3rc_method(); state._fsp--; } break; case 34 : - // smaliTreeWalker.g:753:5: insn_array_data_directive + // smaliTreeWalker.g:797:5: insn_format3rc_type { - pushFollow(FOLLOW_insn_array_data_directive_in_instruction2004); - insn_array_data_directive(); + pushFollow(FOLLOW_insn_format3rc_type_in_instruction2157); + insn_format3rc_type(); state._fsp--; } break; case 35 : - // smaliTreeWalker.g:754:5: insn_packed_switch_directive + // smaliTreeWalker.g:798:5: insn_format45cc_method { - pushFollow(FOLLOW_insn_packed_switch_directive_in_instruction2010); - insn_packed_switch_directive(); + pushFollow(FOLLOW_insn_format45cc_method_in_instruction2163); + insn_format45cc_method(); state._fsp--; } break; case 36 : - // smaliTreeWalker.g:755:5: insn_sparse_switch_directive + // smaliTreeWalker.g:799:5: insn_format4rcc_method + { + pushFollow(FOLLOW_insn_format4rcc_method_in_instruction2169); + insn_format4rcc_method(); + state._fsp--; + + } + break; + case 37 : + // smaliTreeWalker.g:800:5: insn_format51l_type + { + pushFollow(FOLLOW_insn_format51l_type_in_instruction2175); + insn_format51l_type(); + state._fsp--; + + } + break; + case 38 : + // smaliTreeWalker.g:801:5: insn_array_data_directive + { + pushFollow(FOLLOW_insn_array_data_directive_in_instruction2181); + insn_array_data_directive(); + state._fsp--; + + } + break; + case 39 : + // smaliTreeWalker.g:802:5: insn_packed_switch_directive { - pushFollow(FOLLOW_insn_sparse_switch_directive_in_instruction2016); + pushFollow(FOLLOW_insn_packed_switch_directive_in_instruction2187); + insn_packed_switch_directive(); + state._fsp--; + + } + break; + case 40 : + // smaliTreeWalker.g:803:5: insn_sparse_switch_directive + { + pushFollow(FOLLOW_insn_sparse_switch_directive_in_instruction2193); insn_sparse_switch_directive(); state._fsp--; @@ -4583,27 +5144,27 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format10t" - // smaliTreeWalker.g:761:1: insn_format10t : ^( I_STATEMENT_FORMAT10t INSTRUCTION_FORMAT10t label_ref ) ; + // smaliTreeWalker.g:809:1: insn_format10t : ^( I_STATEMENT_FORMAT10t INSTRUCTION_FORMAT10t label_ref ) ; public final void insn_format10t() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT10t104=null; - Label label_ref105 =null; + CommonTree INSTRUCTION_FORMAT10t114=null; + Label label_ref115 =null; try { - // smaliTreeWalker.g:762:3: ( ^( I_STATEMENT_FORMAT10t INSTRUCTION_FORMAT10t label_ref ) ) - // smaliTreeWalker.g:763:5: ^( I_STATEMENT_FORMAT10t INSTRUCTION_FORMAT10t label_ref ) + // smaliTreeWalker.g:810:3: ( ^( I_STATEMENT_FORMAT10t INSTRUCTION_FORMAT10t label_ref ) ) + // smaliTreeWalker.g:811:5: ^( I_STATEMENT_FORMAT10t INSTRUCTION_FORMAT10t label_ref ) { - match(input,I_STATEMENT_FORMAT10t,FOLLOW_I_STATEMENT_FORMAT10t_in_insn_format10t2040); + match(input,I_STATEMENT_FORMAT10t,FOLLOW_I_STATEMENT_FORMAT10t_in_insn_format10t2217); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT10t104=(CommonTree)match(input,INSTRUCTION_FORMAT10t,FOLLOW_INSTRUCTION_FORMAT10t_in_insn_format10t2042); - pushFollow(FOLLOW_label_ref_in_insn_format10t2044); - label_ref105=label_ref(); + INSTRUCTION_FORMAT10t114=(CommonTree)match(input,INSTRUCTION_FORMAT10t,FOLLOW_INSTRUCTION_FORMAT10t_in_insn_format10t2219); + pushFollow(FOLLOW_label_ref_in_insn_format10t2221); + label_ref115=label_ref(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT10t104!=null?INSTRUCTION_FORMAT10t104.getText():null)); - method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction10t(opcode, label_ref105)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT10t114!=null?INSTRUCTION_FORMAT10t114.getText():null)); + method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction10t(opcode, label_ref115)); } @@ -4621,21 +5182,21 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format10x" - // smaliTreeWalker.g:769:1: insn_format10x : ^( I_STATEMENT_FORMAT10x INSTRUCTION_FORMAT10x ) ; + // smaliTreeWalker.g:817:1: insn_format10x : ^( I_STATEMENT_FORMAT10x INSTRUCTION_FORMAT10x ) ; public final void insn_format10x() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT10x106=null; + CommonTree INSTRUCTION_FORMAT10x116=null; try { - // smaliTreeWalker.g:770:3: ( ^( I_STATEMENT_FORMAT10x INSTRUCTION_FORMAT10x ) ) - // smaliTreeWalker.g:771:5: ^( I_STATEMENT_FORMAT10x INSTRUCTION_FORMAT10x ) + // smaliTreeWalker.g:818:3: ( ^( I_STATEMENT_FORMAT10x INSTRUCTION_FORMAT10x ) ) + // smaliTreeWalker.g:819:5: ^( I_STATEMENT_FORMAT10x INSTRUCTION_FORMAT10x ) { - match(input,I_STATEMENT_FORMAT10x,FOLLOW_I_STATEMENT_FORMAT10x_in_insn_format10x2067); + match(input,I_STATEMENT_FORMAT10x,FOLLOW_I_STATEMENT_FORMAT10x_in_insn_format10x2244); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT10x106=(CommonTree)match(input,INSTRUCTION_FORMAT10x,FOLLOW_INSTRUCTION_FORMAT10x_in_insn_format10x2069); + INSTRUCTION_FORMAT10x116=(CommonTree)match(input,INSTRUCTION_FORMAT10x,FOLLOW_INSTRUCTION_FORMAT10x_in_insn_format10x2246); match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT10x106!=null?INSTRUCTION_FORMAT10x106.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT10x116!=null?INSTRUCTION_FORMAT10x116.getText():null)); method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction10x(opcode)); } @@ -4654,31 +5215,31 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format11n" - // smaliTreeWalker.g:777:1: insn_format11n : ^( I_STATEMENT_FORMAT11n INSTRUCTION_FORMAT11n REGISTER short_integral_literal ) ; + // smaliTreeWalker.g:825:1: insn_format11n : ^( I_STATEMENT_FORMAT11n INSTRUCTION_FORMAT11n REGISTER short_integral_literal ) ; public final void insn_format11n() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT11n107=null; - CommonTree REGISTER108=null; - short short_integral_literal109 =0; + CommonTree INSTRUCTION_FORMAT11n117=null; + CommonTree REGISTER118=null; + short short_integral_literal119 =0; try { - // smaliTreeWalker.g:778:3: ( ^( I_STATEMENT_FORMAT11n INSTRUCTION_FORMAT11n REGISTER short_integral_literal ) ) - // smaliTreeWalker.g:779:5: ^( I_STATEMENT_FORMAT11n INSTRUCTION_FORMAT11n REGISTER short_integral_literal ) + // smaliTreeWalker.g:826:3: ( ^( I_STATEMENT_FORMAT11n INSTRUCTION_FORMAT11n REGISTER short_integral_literal ) ) + // smaliTreeWalker.g:827:5: ^( I_STATEMENT_FORMAT11n INSTRUCTION_FORMAT11n REGISTER short_integral_literal ) { - match(input,I_STATEMENT_FORMAT11n,FOLLOW_I_STATEMENT_FORMAT11n_in_insn_format11n2092); + match(input,I_STATEMENT_FORMAT11n,FOLLOW_I_STATEMENT_FORMAT11n_in_insn_format11n2269); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT11n107=(CommonTree)match(input,INSTRUCTION_FORMAT11n,FOLLOW_INSTRUCTION_FORMAT11n_in_insn_format11n2094); - REGISTER108=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format11n2096); - pushFollow(FOLLOW_short_integral_literal_in_insn_format11n2098); - short_integral_literal109=short_integral_literal(); + INSTRUCTION_FORMAT11n117=(CommonTree)match(input,INSTRUCTION_FORMAT11n,FOLLOW_INSTRUCTION_FORMAT11n_in_insn_format11n2271); + REGISTER118=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format11n2273); + pushFollow(FOLLOW_short_integral_literal_in_insn_format11n2275); + short_integral_literal119=short_integral_literal(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT11n107!=null?INSTRUCTION_FORMAT11n107.getText():null)); - byte regA = parseRegister_nibble((REGISTER108!=null?REGISTER108.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT11n117!=null?INSTRUCTION_FORMAT11n117.getText():null)); + byte regA = parseRegister_nibble((REGISTER118!=null?REGISTER118.getText():null)); - short litB = short_integral_literal109; + short litB = short_integral_literal119; LiteralTools.checkNibble(litB); method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction11n(opcode, regA, litB)); @@ -4699,24 +5260,24 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format11x" - // smaliTreeWalker.g:790:1: insn_format11x : ^( I_STATEMENT_FORMAT11x INSTRUCTION_FORMAT11x REGISTER ) ; + // smaliTreeWalker.g:838:1: insn_format11x : ^( I_STATEMENT_FORMAT11x INSTRUCTION_FORMAT11x REGISTER ) ; public final void insn_format11x() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT11x110=null; - CommonTree REGISTER111=null; + CommonTree INSTRUCTION_FORMAT11x120=null; + CommonTree REGISTER121=null; try { - // smaliTreeWalker.g:791:3: ( ^( I_STATEMENT_FORMAT11x INSTRUCTION_FORMAT11x REGISTER ) ) - // smaliTreeWalker.g:792:5: ^( I_STATEMENT_FORMAT11x INSTRUCTION_FORMAT11x REGISTER ) + // smaliTreeWalker.g:839:3: ( ^( I_STATEMENT_FORMAT11x INSTRUCTION_FORMAT11x REGISTER ) ) + // smaliTreeWalker.g:840:5: ^( I_STATEMENT_FORMAT11x INSTRUCTION_FORMAT11x REGISTER ) { - match(input,I_STATEMENT_FORMAT11x,FOLLOW_I_STATEMENT_FORMAT11x_in_insn_format11x2121); + match(input,I_STATEMENT_FORMAT11x,FOLLOW_I_STATEMENT_FORMAT11x_in_insn_format11x2298); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT11x110=(CommonTree)match(input,INSTRUCTION_FORMAT11x,FOLLOW_INSTRUCTION_FORMAT11x_in_insn_format11x2123); - REGISTER111=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format11x2125); + INSTRUCTION_FORMAT11x120=(CommonTree)match(input,INSTRUCTION_FORMAT11x,FOLLOW_INSTRUCTION_FORMAT11x_in_insn_format11x2300); + REGISTER121=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format11x2302); match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT11x110!=null?INSTRUCTION_FORMAT11x110.getText():null)); - short regA = parseRegister_byte((REGISTER111!=null?REGISTER111.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT11x120!=null?INSTRUCTION_FORMAT11x120.getText():null)); + short regA = parseRegister_byte((REGISTER121!=null?REGISTER121.getText():null)); method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction11x(opcode, regA)); @@ -4736,25 +5297,25 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format12x" - // smaliTreeWalker.g:800:1: insn_format12x : ^( I_STATEMENT_FORMAT12x INSTRUCTION_FORMAT12x registerA= REGISTER registerB= REGISTER ) ; + // smaliTreeWalker.g:848:1: insn_format12x : ^( I_STATEMENT_FORMAT12x INSTRUCTION_FORMAT12x registerA= REGISTER registerB= REGISTER ) ; public final void insn_format12x() throws RecognitionException { CommonTree registerA=null; CommonTree registerB=null; - CommonTree INSTRUCTION_FORMAT12x112=null; + CommonTree INSTRUCTION_FORMAT12x122=null; try { - // smaliTreeWalker.g:801:3: ( ^( I_STATEMENT_FORMAT12x INSTRUCTION_FORMAT12x registerA= REGISTER registerB= REGISTER ) ) - // smaliTreeWalker.g:802:5: ^( I_STATEMENT_FORMAT12x INSTRUCTION_FORMAT12x registerA= REGISTER registerB= REGISTER ) + // smaliTreeWalker.g:849:3: ( ^( I_STATEMENT_FORMAT12x INSTRUCTION_FORMAT12x registerA= REGISTER registerB= REGISTER ) ) + // smaliTreeWalker.g:850:5: ^( I_STATEMENT_FORMAT12x INSTRUCTION_FORMAT12x registerA= REGISTER registerB= REGISTER ) { - match(input,I_STATEMENT_FORMAT12x,FOLLOW_I_STATEMENT_FORMAT12x_in_insn_format12x2148); + match(input,I_STATEMENT_FORMAT12x,FOLLOW_I_STATEMENT_FORMAT12x_in_insn_format12x2325); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT12x112=(CommonTree)match(input,INSTRUCTION_FORMAT12x,FOLLOW_INSTRUCTION_FORMAT12x_in_insn_format12x2150); - registerA=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format12x2154); - registerB=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format12x2158); + INSTRUCTION_FORMAT12x122=(CommonTree)match(input,INSTRUCTION_FORMAT12x,FOLLOW_INSTRUCTION_FORMAT12x_in_insn_format12x2327); + registerA=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format12x2331); + registerB=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format12x2335); match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT12x112!=null?INSTRUCTION_FORMAT12x112.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT12x122!=null?INSTRUCTION_FORMAT12x122.getText():null)); byte regA = parseRegister_nibble((registerA!=null?registerA.getText():null)); byte regB = parseRegister_nibble((registerB!=null?registerB.getText():null)); @@ -4776,34 +5337,34 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format20bc" - // smaliTreeWalker.g:811:1: insn_format20bc : ^( I_STATEMENT_FORMAT20bc INSTRUCTION_FORMAT20bc verification_error_type verification_error_reference ) ; + // smaliTreeWalker.g:859:1: insn_format20bc : ^( I_STATEMENT_FORMAT20bc INSTRUCTION_FORMAT20bc verification_error_type verification_error_reference ) ; public final void insn_format20bc() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT20bc113=null; - int verification_error_type114 =0; - ImmutableReference verification_error_reference115 =null; + CommonTree INSTRUCTION_FORMAT20bc123=null; + int verification_error_type124 =0; + ImmutableReference verification_error_reference125 =null; try { - // smaliTreeWalker.g:812:3: ( ^( I_STATEMENT_FORMAT20bc INSTRUCTION_FORMAT20bc verification_error_type verification_error_reference ) ) - // smaliTreeWalker.g:813:5: ^( I_STATEMENT_FORMAT20bc INSTRUCTION_FORMAT20bc verification_error_type verification_error_reference ) + // smaliTreeWalker.g:860:3: ( ^( I_STATEMENT_FORMAT20bc INSTRUCTION_FORMAT20bc verification_error_type verification_error_reference ) ) + // smaliTreeWalker.g:861:5: ^( I_STATEMENT_FORMAT20bc INSTRUCTION_FORMAT20bc verification_error_type verification_error_reference ) { - match(input,I_STATEMENT_FORMAT20bc,FOLLOW_I_STATEMENT_FORMAT20bc_in_insn_format20bc2181); + match(input,I_STATEMENT_FORMAT20bc,FOLLOW_I_STATEMENT_FORMAT20bc_in_insn_format20bc2358); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT20bc113=(CommonTree)match(input,INSTRUCTION_FORMAT20bc,FOLLOW_INSTRUCTION_FORMAT20bc_in_insn_format20bc2183); - pushFollow(FOLLOW_verification_error_type_in_insn_format20bc2185); - verification_error_type114=verification_error_type(); + INSTRUCTION_FORMAT20bc123=(CommonTree)match(input,INSTRUCTION_FORMAT20bc,FOLLOW_INSTRUCTION_FORMAT20bc_in_insn_format20bc2360); + pushFollow(FOLLOW_verification_error_type_in_insn_format20bc2362); + verification_error_type124=verification_error_type(); state._fsp--; - pushFollow(FOLLOW_verification_error_reference_in_insn_format20bc2187); - verification_error_reference115=verification_error_reference(); + pushFollow(FOLLOW_verification_error_reference_in_insn_format20bc2364); + verification_error_reference125=verification_error_reference(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT20bc113!=null?INSTRUCTION_FORMAT20bc113.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT20bc123!=null?INSTRUCTION_FORMAT20bc123.getText():null)); - int verificationError = verification_error_type114; - ImmutableReference referencedItem = verification_error_reference115; + int verificationError = verification_error_type124; + ImmutableReference referencedItem = verification_error_reference125; method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction20bc(opcode, verificationError, dexBuilder.internReference(referencedItem))); @@ -4824,27 +5385,27 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format20t" - // smaliTreeWalker.g:824:1: insn_format20t : ^( I_STATEMENT_FORMAT20t INSTRUCTION_FORMAT20t label_ref ) ; + // smaliTreeWalker.g:872:1: insn_format20t : ^( I_STATEMENT_FORMAT20t INSTRUCTION_FORMAT20t label_ref ) ; public final void insn_format20t() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT20t116=null; - Label label_ref117 =null; + CommonTree INSTRUCTION_FORMAT20t126=null; + Label label_ref127 =null; try { - // smaliTreeWalker.g:825:3: ( ^( I_STATEMENT_FORMAT20t INSTRUCTION_FORMAT20t label_ref ) ) - // smaliTreeWalker.g:826:5: ^( I_STATEMENT_FORMAT20t INSTRUCTION_FORMAT20t label_ref ) + // smaliTreeWalker.g:873:3: ( ^( I_STATEMENT_FORMAT20t INSTRUCTION_FORMAT20t label_ref ) ) + // smaliTreeWalker.g:874:5: ^( I_STATEMENT_FORMAT20t INSTRUCTION_FORMAT20t label_ref ) { - match(input,I_STATEMENT_FORMAT20t,FOLLOW_I_STATEMENT_FORMAT20t_in_insn_format20t2210); + match(input,I_STATEMENT_FORMAT20t,FOLLOW_I_STATEMENT_FORMAT20t_in_insn_format20t2387); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT20t116=(CommonTree)match(input,INSTRUCTION_FORMAT20t,FOLLOW_INSTRUCTION_FORMAT20t_in_insn_format20t2212); - pushFollow(FOLLOW_label_ref_in_insn_format20t2214); - label_ref117=label_ref(); + INSTRUCTION_FORMAT20t126=(CommonTree)match(input,INSTRUCTION_FORMAT20t,FOLLOW_INSTRUCTION_FORMAT20t_in_insn_format20t2389); + pushFollow(FOLLOW_label_ref_in_insn_format20t2391); + label_ref127=label_ref(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT20t116!=null?INSTRUCTION_FORMAT20t116.getText():null)); - method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction20t(opcode, label_ref117)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT20t126!=null?INSTRUCTION_FORMAT20t126.getText():null)); + method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction20t(opcode, label_ref127)); } @@ -4862,17 +5423,17 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format21c_field" - // smaliTreeWalker.g:832:1: insn_format21c_field : ^( I_STATEMENT_FORMAT21c_FIELD inst= ( INSTRUCTION_FORMAT21c_FIELD | INSTRUCTION_FORMAT21c_FIELD_ODEX ) REGISTER field_reference ) ; + // smaliTreeWalker.g:880:1: insn_format21c_field : ^( I_STATEMENT_FORMAT21c_FIELD inst= ( INSTRUCTION_FORMAT21c_FIELD | INSTRUCTION_FORMAT21c_FIELD_ODEX ) REGISTER field_reference ) ; public final void insn_format21c_field() throws RecognitionException { CommonTree inst=null; - CommonTree REGISTER118=null; - ImmutableFieldReference field_reference119 =null; + CommonTree REGISTER128=null; + TreeRuleReturnScope field_reference129 =null; try { - // smaliTreeWalker.g:833:3: ( ^( I_STATEMENT_FORMAT21c_FIELD inst= ( INSTRUCTION_FORMAT21c_FIELD | INSTRUCTION_FORMAT21c_FIELD_ODEX ) REGISTER field_reference ) ) - // smaliTreeWalker.g:834:5: ^( I_STATEMENT_FORMAT21c_FIELD inst= ( INSTRUCTION_FORMAT21c_FIELD | INSTRUCTION_FORMAT21c_FIELD_ODEX ) REGISTER field_reference ) + // smaliTreeWalker.g:881:3: ( ^( I_STATEMENT_FORMAT21c_FIELD inst= ( INSTRUCTION_FORMAT21c_FIELD | INSTRUCTION_FORMAT21c_FIELD_ODEX ) REGISTER field_reference ) ) + // smaliTreeWalker.g:882:5: ^( I_STATEMENT_FORMAT21c_FIELD inst= ( INSTRUCTION_FORMAT21c_FIELD | INSTRUCTION_FORMAT21c_FIELD_ODEX ) REGISTER field_reference ) { - match(input,I_STATEMENT_FORMAT21c_FIELD,FOLLOW_I_STATEMENT_FORMAT21c_FIELD_in_insn_format21c_field2237); + match(input,I_STATEMENT_FORMAT21c_FIELD,FOLLOW_I_STATEMENT_FORMAT21c_FIELD_in_insn_format21c_field2414); match(input, Token.DOWN, null); inst=(CommonTree)input.LT(1); if ( (input.LA(1) >= INSTRUCTION_FORMAT21c_FIELD && input.LA(1) <= INSTRUCTION_FORMAT21c_FIELD_ODEX) ) { @@ -4883,18 +5444,18 @@ public class smaliTreeWalker extends TreeParser { MismatchedSetException mse = new MismatchedSetException(null,input); throw mse; } - REGISTER118=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21c_field2249); - pushFollow(FOLLOW_field_reference_in_insn_format21c_field2251); - field_reference119=field_reference(); + REGISTER128=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21c_field2426); + pushFollow(FOLLOW_field_reference_in_insn_format21c_field2428); + field_reference129=field_reference(); state._fsp--; match(input, Token.UP, null); Opcode opcode = opcodes.getOpcodeByName((inst!=null?inst.getText():null)); - short regA = parseRegister_byte((REGISTER118!=null?REGISTER118.getText():null)); + short regA = parseRegister_byte((REGISTER128!=null?REGISTER128.getText():null)); - ImmutableFieldReference fieldReference = field_reference119; + ImmutableFieldReference fieldReference = (field_reference129!=null?((smaliTreeWalker.field_reference_return)field_reference129).fieldReference:null); method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction21c(opcode, regA, dexBuilder.internFieldReference(fieldReference))); @@ -4914,33 +5475,133 @@ public class smaliTreeWalker extends TreeParser { + // $ANTLR start "insn_format21c_method_handle" + // smaliTreeWalker.g:893:1: insn_format21c_method_handle : ^( I_STATEMENT_FORMAT21c_METHOD_HANDLE inst= ( INSTRUCTION_FORMAT21c_METHOD_HANDLE ) REGISTER method_handle_reference ) ; + public final void insn_format21c_method_handle() throws RecognitionException { + CommonTree inst=null; + CommonTree REGISTER130=null; + ImmutableMethodHandleReference method_handle_reference131 =null; + + try { + // smaliTreeWalker.g:894:3: ( ^( I_STATEMENT_FORMAT21c_METHOD_HANDLE inst= ( INSTRUCTION_FORMAT21c_METHOD_HANDLE ) REGISTER method_handle_reference ) ) + // smaliTreeWalker.g:895:5: ^( I_STATEMENT_FORMAT21c_METHOD_HANDLE inst= ( INSTRUCTION_FORMAT21c_METHOD_HANDLE ) REGISTER method_handle_reference ) + { + match(input,I_STATEMENT_FORMAT21c_METHOD_HANDLE,FOLLOW_I_STATEMENT_FORMAT21c_METHOD_HANDLE_in_insn_format21c_method_handle2451); + match(input, Token.DOWN, null); + // smaliTreeWalker.g:895:48: ( INSTRUCTION_FORMAT21c_METHOD_HANDLE ) + // smaliTreeWalker.g:895:49: INSTRUCTION_FORMAT21c_METHOD_HANDLE + { + inst=(CommonTree)match(input,INSTRUCTION_FORMAT21c_METHOD_HANDLE,FOLLOW_INSTRUCTION_FORMAT21c_METHOD_HANDLE_in_insn_format21c_method_handle2456); + } + + REGISTER130=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21c_method_handle2459); + pushFollow(FOLLOW_method_handle_reference_in_insn_format21c_method_handle2461); + method_handle_reference131=method_handle_reference(); + state._fsp--; + + match(input, Token.UP, null); + + + Opcode opcode = opcodes.getOpcodeByName((inst!=null?inst.getText():null)); + short regA = parseRegister_byte((REGISTER130!=null?REGISTER130.getText():null)); + + ImmutableMethodHandleReference methodHandleReference = method_handle_reference131; + + method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction21c(opcode, regA, + dexBuilder.internMethodHandle(methodHandleReference))); + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "insn_format21c_method_handle" + + + + // $ANTLR start "insn_format21c_method_type" + // smaliTreeWalker.g:906:1: insn_format21c_method_type : ^( I_STATEMENT_FORMAT21c_METHOD_TYPE inst= ( INSTRUCTION_FORMAT21c_METHOD_TYPE ) REGISTER method_prototype ) ; + public final void insn_format21c_method_type() throws RecognitionException { + CommonTree inst=null; + CommonTree REGISTER132=null; + ImmutableMethodProtoReference method_prototype133 =null; + + try { + // smaliTreeWalker.g:907:3: ( ^( I_STATEMENT_FORMAT21c_METHOD_TYPE inst= ( INSTRUCTION_FORMAT21c_METHOD_TYPE ) REGISTER method_prototype ) ) + // smaliTreeWalker.g:908:5: ^( I_STATEMENT_FORMAT21c_METHOD_TYPE inst= ( INSTRUCTION_FORMAT21c_METHOD_TYPE ) REGISTER method_prototype ) + { + match(input,I_STATEMENT_FORMAT21c_METHOD_TYPE,FOLLOW_I_STATEMENT_FORMAT21c_METHOD_TYPE_in_insn_format21c_method_type2484); + match(input, Token.DOWN, null); + // smaliTreeWalker.g:908:46: ( INSTRUCTION_FORMAT21c_METHOD_TYPE ) + // smaliTreeWalker.g:908:47: INSTRUCTION_FORMAT21c_METHOD_TYPE + { + inst=(CommonTree)match(input,INSTRUCTION_FORMAT21c_METHOD_TYPE,FOLLOW_INSTRUCTION_FORMAT21c_METHOD_TYPE_in_insn_format21c_method_type2489); + } + + REGISTER132=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21c_method_type2492); + pushFollow(FOLLOW_method_prototype_in_insn_format21c_method_type2494); + method_prototype133=method_prototype(); + state._fsp--; + + match(input, Token.UP, null); + + + Opcode opcode = opcodes.getOpcodeByName((inst!=null?inst.getText():null)); + short regA = parseRegister_byte((REGISTER132!=null?REGISTER132.getText():null)); + + ImmutableMethodProtoReference methodProtoReference = method_prototype133; + + method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction21c(opcode, regA, + dexBuilder.internMethodProtoReference(methodProtoReference))); + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "insn_format21c_method_type" + + + // $ANTLR start "insn_format21c_string" - // smaliTreeWalker.g:845:1: insn_format21c_string : ^( I_STATEMENT_FORMAT21c_STRING INSTRUCTION_FORMAT21c_STRING REGISTER string_literal ) ; + // smaliTreeWalker.g:919:1: insn_format21c_string : ^( I_STATEMENT_FORMAT21c_STRING INSTRUCTION_FORMAT21c_STRING REGISTER string_literal ) ; public final void insn_format21c_string() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT21c_STRING120=null; - CommonTree REGISTER121=null; - String string_literal122 =null; + CommonTree INSTRUCTION_FORMAT21c_STRING134=null; + CommonTree REGISTER135=null; + String string_literal136 =null; try { - // smaliTreeWalker.g:846:3: ( ^( I_STATEMENT_FORMAT21c_STRING INSTRUCTION_FORMAT21c_STRING REGISTER string_literal ) ) - // smaliTreeWalker.g:847:5: ^( I_STATEMENT_FORMAT21c_STRING INSTRUCTION_FORMAT21c_STRING REGISTER string_literal ) + // smaliTreeWalker.g:920:3: ( ^( I_STATEMENT_FORMAT21c_STRING INSTRUCTION_FORMAT21c_STRING REGISTER string_literal ) ) + // smaliTreeWalker.g:921:5: ^( I_STATEMENT_FORMAT21c_STRING INSTRUCTION_FORMAT21c_STRING REGISTER string_literal ) { - match(input,I_STATEMENT_FORMAT21c_STRING,FOLLOW_I_STATEMENT_FORMAT21c_STRING_in_insn_format21c_string2274); + match(input,I_STATEMENT_FORMAT21c_STRING,FOLLOW_I_STATEMENT_FORMAT21c_STRING_in_insn_format21c_string2517); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT21c_STRING120=(CommonTree)match(input,INSTRUCTION_FORMAT21c_STRING,FOLLOW_INSTRUCTION_FORMAT21c_STRING_in_insn_format21c_string2276); - REGISTER121=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21c_string2278); - pushFollow(FOLLOW_string_literal_in_insn_format21c_string2280); - string_literal122=string_literal(); + INSTRUCTION_FORMAT21c_STRING134=(CommonTree)match(input,INSTRUCTION_FORMAT21c_STRING,FOLLOW_INSTRUCTION_FORMAT21c_STRING_in_insn_format21c_string2519); + REGISTER135=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21c_string2521); + pushFollow(FOLLOW_string_literal_in_insn_format21c_string2523); + string_literal136=string_literal(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT21c_STRING120!=null?INSTRUCTION_FORMAT21c_STRING120.getText():null)); - short regA = parseRegister_byte((REGISTER121!=null?REGISTER121.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT21c_STRING134!=null?INSTRUCTION_FORMAT21c_STRING134.getText():null)); + short regA = parseRegister_byte((REGISTER135!=null?REGISTER135.getText():null)); method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction21c(opcode, regA, - dexBuilder.internStringReference(string_literal122))); + dexBuilder.internStringReference(string_literal136))); } @@ -4958,32 +5619,32 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format21c_type" - // smaliTreeWalker.g:856:1: insn_format21c_type : ^( I_STATEMENT_FORMAT21c_TYPE INSTRUCTION_FORMAT21c_TYPE REGISTER nonvoid_type_descriptor ) ; + // smaliTreeWalker.g:930:1: insn_format21c_type : ^( I_STATEMENT_FORMAT21c_TYPE INSTRUCTION_FORMAT21c_TYPE REGISTER nonvoid_type_descriptor ) ; public final void insn_format21c_type() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT21c_TYPE123=null; - CommonTree REGISTER124=null; - TreeRuleReturnScope nonvoid_type_descriptor125 =null; + CommonTree INSTRUCTION_FORMAT21c_TYPE137=null; + CommonTree REGISTER138=null; + TreeRuleReturnScope nonvoid_type_descriptor139 =null; try { - // smaliTreeWalker.g:857:3: ( ^( I_STATEMENT_FORMAT21c_TYPE INSTRUCTION_FORMAT21c_TYPE REGISTER nonvoid_type_descriptor ) ) - // smaliTreeWalker.g:858:5: ^( I_STATEMENT_FORMAT21c_TYPE INSTRUCTION_FORMAT21c_TYPE REGISTER nonvoid_type_descriptor ) + // smaliTreeWalker.g:931:3: ( ^( I_STATEMENT_FORMAT21c_TYPE INSTRUCTION_FORMAT21c_TYPE REGISTER nonvoid_type_descriptor ) ) + // smaliTreeWalker.g:932:5: ^( I_STATEMENT_FORMAT21c_TYPE INSTRUCTION_FORMAT21c_TYPE REGISTER nonvoid_type_descriptor ) { - match(input,I_STATEMENT_FORMAT21c_TYPE,FOLLOW_I_STATEMENT_FORMAT21c_TYPE_in_insn_format21c_type2303); + match(input,I_STATEMENT_FORMAT21c_TYPE,FOLLOW_I_STATEMENT_FORMAT21c_TYPE_in_insn_format21c_type2546); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT21c_TYPE123=(CommonTree)match(input,INSTRUCTION_FORMAT21c_TYPE,FOLLOW_INSTRUCTION_FORMAT21c_TYPE_in_insn_format21c_type2305); - REGISTER124=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21c_type2307); - pushFollow(FOLLOW_nonvoid_type_descriptor_in_insn_format21c_type2309); - nonvoid_type_descriptor125=nonvoid_type_descriptor(); + INSTRUCTION_FORMAT21c_TYPE137=(CommonTree)match(input,INSTRUCTION_FORMAT21c_TYPE,FOLLOW_INSTRUCTION_FORMAT21c_TYPE_in_insn_format21c_type2548); + REGISTER138=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21c_type2550); + pushFollow(FOLLOW_nonvoid_type_descriptor_in_insn_format21c_type2552); + nonvoid_type_descriptor139=nonvoid_type_descriptor(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT21c_TYPE123!=null?INSTRUCTION_FORMAT21c_TYPE123.getText():null)); - short regA = parseRegister_byte((REGISTER124!=null?REGISTER124.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT21c_TYPE137!=null?INSTRUCTION_FORMAT21c_TYPE137.getText():null)); + short regA = parseRegister_byte((REGISTER138!=null?REGISTER138.getText():null)); method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction21c(opcode, regA, - dexBuilder.internTypeReference((nonvoid_type_descriptor125!=null?((smaliTreeWalker.nonvoid_type_descriptor_return)nonvoid_type_descriptor125).type:null)))); + dexBuilder.internTypeReference((nonvoid_type_descriptor139!=null?((smaliTreeWalker.nonvoid_type_descriptor_return)nonvoid_type_descriptor139).type:null)))); } @@ -5001,31 +5662,31 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format21ih" - // smaliTreeWalker.g:867:1: insn_format21ih : ^( I_STATEMENT_FORMAT21ih INSTRUCTION_FORMAT21ih REGISTER fixed_32bit_literal ) ; + // smaliTreeWalker.g:941:1: insn_format21ih : ^( I_STATEMENT_FORMAT21ih INSTRUCTION_FORMAT21ih REGISTER fixed_32bit_literal ) ; public final void insn_format21ih() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT21ih126=null; - CommonTree REGISTER127=null; - int fixed_32bit_literal128 =0; + CommonTree INSTRUCTION_FORMAT21ih140=null; + CommonTree REGISTER141=null; + int fixed_32bit_literal142 =0; try { - // smaliTreeWalker.g:868:3: ( ^( I_STATEMENT_FORMAT21ih INSTRUCTION_FORMAT21ih REGISTER fixed_32bit_literal ) ) - // smaliTreeWalker.g:869:5: ^( I_STATEMENT_FORMAT21ih INSTRUCTION_FORMAT21ih REGISTER fixed_32bit_literal ) + // smaliTreeWalker.g:942:3: ( ^( I_STATEMENT_FORMAT21ih INSTRUCTION_FORMAT21ih REGISTER fixed_32bit_literal ) ) + // smaliTreeWalker.g:943:5: ^( I_STATEMENT_FORMAT21ih INSTRUCTION_FORMAT21ih REGISTER fixed_32bit_literal ) { - match(input,I_STATEMENT_FORMAT21ih,FOLLOW_I_STATEMENT_FORMAT21ih_in_insn_format21ih2332); + match(input,I_STATEMENT_FORMAT21ih,FOLLOW_I_STATEMENT_FORMAT21ih_in_insn_format21ih2575); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT21ih126=(CommonTree)match(input,INSTRUCTION_FORMAT21ih,FOLLOW_INSTRUCTION_FORMAT21ih_in_insn_format21ih2334); - REGISTER127=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21ih2336); - pushFollow(FOLLOW_fixed_32bit_literal_in_insn_format21ih2338); - fixed_32bit_literal128=fixed_32bit_literal(); + INSTRUCTION_FORMAT21ih140=(CommonTree)match(input,INSTRUCTION_FORMAT21ih,FOLLOW_INSTRUCTION_FORMAT21ih_in_insn_format21ih2577); + REGISTER141=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21ih2579); + pushFollow(FOLLOW_fixed_32bit_literal_in_insn_format21ih2581); + fixed_32bit_literal142=fixed_32bit_literal(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT21ih126!=null?INSTRUCTION_FORMAT21ih126.getText():null)); - short regA = parseRegister_byte((REGISTER127!=null?REGISTER127.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT21ih140!=null?INSTRUCTION_FORMAT21ih140.getText():null)); + short regA = parseRegister_byte((REGISTER141!=null?REGISTER141.getText():null)); - int litB = fixed_32bit_literal128; + int litB = fixed_32bit_literal142; method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction21ih(opcode, regA, litB)); @@ -5045,31 +5706,31 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format21lh" - // smaliTreeWalker.g:879:1: insn_format21lh : ^( I_STATEMENT_FORMAT21lh INSTRUCTION_FORMAT21lh REGISTER fixed_64bit_literal ) ; + // smaliTreeWalker.g:953:1: insn_format21lh : ^( I_STATEMENT_FORMAT21lh INSTRUCTION_FORMAT21lh REGISTER fixed_64bit_literal ) ; public final void insn_format21lh() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT21lh129=null; - CommonTree REGISTER130=null; - long fixed_64bit_literal131 =0; + CommonTree INSTRUCTION_FORMAT21lh143=null; + CommonTree REGISTER144=null; + long fixed_64bit_literal145 =0; try { - // smaliTreeWalker.g:880:3: ( ^( I_STATEMENT_FORMAT21lh INSTRUCTION_FORMAT21lh REGISTER fixed_64bit_literal ) ) - // smaliTreeWalker.g:881:5: ^( I_STATEMENT_FORMAT21lh INSTRUCTION_FORMAT21lh REGISTER fixed_64bit_literal ) + // smaliTreeWalker.g:954:3: ( ^( I_STATEMENT_FORMAT21lh INSTRUCTION_FORMAT21lh REGISTER fixed_64bit_literal ) ) + // smaliTreeWalker.g:955:5: ^( I_STATEMENT_FORMAT21lh INSTRUCTION_FORMAT21lh REGISTER fixed_64bit_literal ) { - match(input,I_STATEMENT_FORMAT21lh,FOLLOW_I_STATEMENT_FORMAT21lh_in_insn_format21lh2361); + match(input,I_STATEMENT_FORMAT21lh,FOLLOW_I_STATEMENT_FORMAT21lh_in_insn_format21lh2604); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT21lh129=(CommonTree)match(input,INSTRUCTION_FORMAT21lh,FOLLOW_INSTRUCTION_FORMAT21lh_in_insn_format21lh2363); - REGISTER130=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21lh2365); - pushFollow(FOLLOW_fixed_64bit_literal_in_insn_format21lh2367); - fixed_64bit_literal131=fixed_64bit_literal(); + INSTRUCTION_FORMAT21lh143=(CommonTree)match(input,INSTRUCTION_FORMAT21lh,FOLLOW_INSTRUCTION_FORMAT21lh_in_insn_format21lh2606); + REGISTER144=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21lh2608); + pushFollow(FOLLOW_fixed_64bit_literal_in_insn_format21lh2610); + fixed_64bit_literal145=fixed_64bit_literal(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT21lh129!=null?INSTRUCTION_FORMAT21lh129.getText():null)); - short regA = parseRegister_byte((REGISTER130!=null?REGISTER130.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT21lh143!=null?INSTRUCTION_FORMAT21lh143.getText():null)); + short regA = parseRegister_byte((REGISTER144!=null?REGISTER144.getText():null)); - long litB = fixed_64bit_literal131; + long litB = fixed_64bit_literal145; method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction21lh(opcode, regA, litB)); @@ -5089,31 +5750,31 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format21s" - // smaliTreeWalker.g:891:1: insn_format21s : ^( I_STATEMENT_FORMAT21s INSTRUCTION_FORMAT21s REGISTER short_integral_literal ) ; + // smaliTreeWalker.g:965:1: insn_format21s : ^( I_STATEMENT_FORMAT21s INSTRUCTION_FORMAT21s REGISTER short_integral_literal ) ; public final void insn_format21s() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT21s132=null; - CommonTree REGISTER133=null; - short short_integral_literal134 =0; + CommonTree INSTRUCTION_FORMAT21s146=null; + CommonTree REGISTER147=null; + short short_integral_literal148 =0; try { - // smaliTreeWalker.g:892:3: ( ^( I_STATEMENT_FORMAT21s INSTRUCTION_FORMAT21s REGISTER short_integral_literal ) ) - // smaliTreeWalker.g:893:5: ^( I_STATEMENT_FORMAT21s INSTRUCTION_FORMAT21s REGISTER short_integral_literal ) + // smaliTreeWalker.g:966:3: ( ^( I_STATEMENT_FORMAT21s INSTRUCTION_FORMAT21s REGISTER short_integral_literal ) ) + // smaliTreeWalker.g:967:5: ^( I_STATEMENT_FORMAT21s INSTRUCTION_FORMAT21s REGISTER short_integral_literal ) { - match(input,I_STATEMENT_FORMAT21s,FOLLOW_I_STATEMENT_FORMAT21s_in_insn_format21s2390); + match(input,I_STATEMENT_FORMAT21s,FOLLOW_I_STATEMENT_FORMAT21s_in_insn_format21s2633); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT21s132=(CommonTree)match(input,INSTRUCTION_FORMAT21s,FOLLOW_INSTRUCTION_FORMAT21s_in_insn_format21s2392); - REGISTER133=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21s2394); - pushFollow(FOLLOW_short_integral_literal_in_insn_format21s2396); - short_integral_literal134=short_integral_literal(); + INSTRUCTION_FORMAT21s146=(CommonTree)match(input,INSTRUCTION_FORMAT21s,FOLLOW_INSTRUCTION_FORMAT21s_in_insn_format21s2635); + REGISTER147=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21s2637); + pushFollow(FOLLOW_short_integral_literal_in_insn_format21s2639); + short_integral_literal148=short_integral_literal(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT21s132!=null?INSTRUCTION_FORMAT21s132.getText():null)); - short regA = parseRegister_byte((REGISTER133!=null?REGISTER133.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT21s146!=null?INSTRUCTION_FORMAT21s146.getText():null)); + short regA = parseRegister_byte((REGISTER147!=null?REGISTER147.getText():null)); - short litB = short_integral_literal134; + short litB = short_integral_literal148; method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction21s(opcode, regA, litB)); @@ -5133,31 +5794,31 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format21t" - // smaliTreeWalker.g:903:1: insn_format21t : ^( I_STATEMENT_FORMAT21t INSTRUCTION_FORMAT21t REGISTER label_ref ) ; + // smaliTreeWalker.g:977:1: insn_format21t : ^( I_STATEMENT_FORMAT21t INSTRUCTION_FORMAT21t REGISTER label_ref ) ; public final void insn_format21t() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT21t135=null; - CommonTree REGISTER136=null; - Label label_ref137 =null; + CommonTree INSTRUCTION_FORMAT21t149=null; + CommonTree REGISTER150=null; + Label label_ref151 =null; try { - // smaliTreeWalker.g:904:3: ( ^( I_STATEMENT_FORMAT21t INSTRUCTION_FORMAT21t REGISTER label_ref ) ) - // smaliTreeWalker.g:905:5: ^( I_STATEMENT_FORMAT21t INSTRUCTION_FORMAT21t REGISTER label_ref ) + // smaliTreeWalker.g:978:3: ( ^( I_STATEMENT_FORMAT21t INSTRUCTION_FORMAT21t REGISTER label_ref ) ) + // smaliTreeWalker.g:979:5: ^( I_STATEMENT_FORMAT21t INSTRUCTION_FORMAT21t REGISTER label_ref ) { - match(input,I_STATEMENT_FORMAT21t,FOLLOW_I_STATEMENT_FORMAT21t_in_insn_format21t2419); + match(input,I_STATEMENT_FORMAT21t,FOLLOW_I_STATEMENT_FORMAT21t_in_insn_format21t2662); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT21t135=(CommonTree)match(input,INSTRUCTION_FORMAT21t,FOLLOW_INSTRUCTION_FORMAT21t_in_insn_format21t2421); - REGISTER136=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21t2423); - pushFollow(FOLLOW_label_ref_in_insn_format21t2425); - label_ref137=label_ref(); + INSTRUCTION_FORMAT21t149=(CommonTree)match(input,INSTRUCTION_FORMAT21t,FOLLOW_INSTRUCTION_FORMAT21t_in_insn_format21t2664); + REGISTER150=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format21t2666); + pushFollow(FOLLOW_label_ref_in_insn_format21t2668); + label_ref151=label_ref(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT21t135!=null?INSTRUCTION_FORMAT21t135.getText():null)); - short regA = parseRegister_byte((REGISTER136!=null?REGISTER136.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT21t149!=null?INSTRUCTION_FORMAT21t149.getText():null)); + short regA = parseRegister_byte((REGISTER150!=null?REGISTER150.getText():null)); - method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction21t(opcode, regA, label_ref137)); + method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction21t(opcode, regA, label_ref151)); } @@ -5175,34 +5836,34 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format22b" - // smaliTreeWalker.g:913:1: insn_format22b : ^( I_STATEMENT_FORMAT22b INSTRUCTION_FORMAT22b registerA= REGISTER registerB= REGISTER short_integral_literal ) ; + // smaliTreeWalker.g:987:1: insn_format22b : ^( I_STATEMENT_FORMAT22b INSTRUCTION_FORMAT22b registerA= REGISTER registerB= REGISTER short_integral_literal ) ; public final void insn_format22b() throws RecognitionException { CommonTree registerA=null; CommonTree registerB=null; - CommonTree INSTRUCTION_FORMAT22b138=null; - short short_integral_literal139 =0; + CommonTree INSTRUCTION_FORMAT22b152=null; + short short_integral_literal153 =0; try { - // smaliTreeWalker.g:914:3: ( ^( I_STATEMENT_FORMAT22b INSTRUCTION_FORMAT22b registerA= REGISTER registerB= REGISTER short_integral_literal ) ) - // smaliTreeWalker.g:915:5: ^( I_STATEMENT_FORMAT22b INSTRUCTION_FORMAT22b registerA= REGISTER registerB= REGISTER short_integral_literal ) + // smaliTreeWalker.g:988:3: ( ^( I_STATEMENT_FORMAT22b INSTRUCTION_FORMAT22b registerA= REGISTER registerB= REGISTER short_integral_literal ) ) + // smaliTreeWalker.g:989:5: ^( I_STATEMENT_FORMAT22b INSTRUCTION_FORMAT22b registerA= REGISTER registerB= REGISTER short_integral_literal ) { - match(input,I_STATEMENT_FORMAT22b,FOLLOW_I_STATEMENT_FORMAT22b_in_insn_format22b2448); + match(input,I_STATEMENT_FORMAT22b,FOLLOW_I_STATEMENT_FORMAT22b_in_insn_format22b2691); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT22b138=(CommonTree)match(input,INSTRUCTION_FORMAT22b,FOLLOW_INSTRUCTION_FORMAT22b_in_insn_format22b2450); - registerA=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22b2454); - registerB=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22b2458); - pushFollow(FOLLOW_short_integral_literal_in_insn_format22b2460); - short_integral_literal139=short_integral_literal(); + INSTRUCTION_FORMAT22b152=(CommonTree)match(input,INSTRUCTION_FORMAT22b,FOLLOW_INSTRUCTION_FORMAT22b_in_insn_format22b2693); + registerA=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22b2697); + registerB=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22b2701); + pushFollow(FOLLOW_short_integral_literal_in_insn_format22b2703); + short_integral_literal153=short_integral_literal(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT22b138!=null?INSTRUCTION_FORMAT22b138.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT22b152!=null?INSTRUCTION_FORMAT22b152.getText():null)); short regA = parseRegister_byte((registerA!=null?registerA.getText():null)); short regB = parseRegister_byte((registerB!=null?registerB.getText():null)); - short litC = short_integral_literal139; + short litC = short_integral_literal153; LiteralTools.checkByte(litC); method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction22b(opcode, regA, regB, litC)); @@ -5223,18 +5884,18 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format22c_field" - // smaliTreeWalker.g:927:1: insn_format22c_field : ^( I_STATEMENT_FORMAT22c_FIELD inst= ( INSTRUCTION_FORMAT22c_FIELD | INSTRUCTION_FORMAT22c_FIELD_ODEX ) registerA= REGISTER registerB= REGISTER field_reference ) ; + // smaliTreeWalker.g:1001:1: insn_format22c_field : ^( I_STATEMENT_FORMAT22c_FIELD inst= ( INSTRUCTION_FORMAT22c_FIELD | INSTRUCTION_FORMAT22c_FIELD_ODEX ) registerA= REGISTER registerB= REGISTER field_reference ) ; public final void insn_format22c_field() throws RecognitionException { CommonTree inst=null; CommonTree registerA=null; CommonTree registerB=null; - ImmutableFieldReference field_reference140 =null; + TreeRuleReturnScope field_reference154 =null; try { - // smaliTreeWalker.g:928:3: ( ^( I_STATEMENT_FORMAT22c_FIELD inst= ( INSTRUCTION_FORMAT22c_FIELD | INSTRUCTION_FORMAT22c_FIELD_ODEX ) registerA= REGISTER registerB= REGISTER field_reference ) ) - // smaliTreeWalker.g:929:5: ^( I_STATEMENT_FORMAT22c_FIELD inst= ( INSTRUCTION_FORMAT22c_FIELD | INSTRUCTION_FORMAT22c_FIELD_ODEX ) registerA= REGISTER registerB= REGISTER field_reference ) + // smaliTreeWalker.g:1002:3: ( ^( I_STATEMENT_FORMAT22c_FIELD inst= ( INSTRUCTION_FORMAT22c_FIELD | INSTRUCTION_FORMAT22c_FIELD_ODEX ) registerA= REGISTER registerB= REGISTER field_reference ) ) + // smaliTreeWalker.g:1003:5: ^( I_STATEMENT_FORMAT22c_FIELD inst= ( INSTRUCTION_FORMAT22c_FIELD | INSTRUCTION_FORMAT22c_FIELD_ODEX ) registerA= REGISTER registerB= REGISTER field_reference ) { - match(input,I_STATEMENT_FORMAT22c_FIELD,FOLLOW_I_STATEMENT_FORMAT22c_FIELD_in_insn_format22c_field2483); + match(input,I_STATEMENT_FORMAT22c_FIELD,FOLLOW_I_STATEMENT_FORMAT22c_FIELD_in_insn_format22c_field2726); match(input, Token.DOWN, null); inst=(CommonTree)input.LT(1); if ( (input.LA(1) >= INSTRUCTION_FORMAT22c_FIELD && input.LA(1) <= INSTRUCTION_FORMAT22c_FIELD_ODEX) ) { @@ -5245,10 +5906,10 @@ public class smaliTreeWalker extends TreeParser { MismatchedSetException mse = new MismatchedSetException(null,input); throw mse; } - registerA=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22c_field2497); - registerB=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22c_field2501); - pushFollow(FOLLOW_field_reference_in_insn_format22c_field2503); - field_reference140=field_reference(); + registerA=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22c_field2740); + registerB=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22c_field2744); + pushFollow(FOLLOW_field_reference_in_insn_format22c_field2746); + field_reference154=field_reference(); state._fsp--; match(input, Token.UP, null); @@ -5258,7 +5919,7 @@ public class smaliTreeWalker extends TreeParser { byte regA = parseRegister_nibble((registerA!=null?registerA.getText():null)); byte regB = parseRegister_nibble((registerB!=null?registerB.getText():null)); - ImmutableFieldReference fieldReference = field_reference140; + ImmutableFieldReference fieldReference = (field_reference154!=null?((smaliTreeWalker.field_reference_return)field_reference154).fieldReference:null); method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction22c(opcode, regA, regB, dexBuilder.internFieldReference(fieldReference))); @@ -5279,35 +5940,35 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format22c_type" - // smaliTreeWalker.g:941:1: insn_format22c_type : ^( I_STATEMENT_FORMAT22c_TYPE INSTRUCTION_FORMAT22c_TYPE registerA= REGISTER registerB= REGISTER nonvoid_type_descriptor ) ; + // smaliTreeWalker.g:1015:1: insn_format22c_type : ^( I_STATEMENT_FORMAT22c_TYPE INSTRUCTION_FORMAT22c_TYPE registerA= REGISTER registerB= REGISTER nonvoid_type_descriptor ) ; public final void insn_format22c_type() throws RecognitionException { CommonTree registerA=null; CommonTree registerB=null; - CommonTree INSTRUCTION_FORMAT22c_TYPE141=null; - TreeRuleReturnScope nonvoid_type_descriptor142 =null; + CommonTree INSTRUCTION_FORMAT22c_TYPE155=null; + TreeRuleReturnScope nonvoid_type_descriptor156 =null; try { - // smaliTreeWalker.g:942:3: ( ^( I_STATEMENT_FORMAT22c_TYPE INSTRUCTION_FORMAT22c_TYPE registerA= REGISTER registerB= REGISTER nonvoid_type_descriptor ) ) - // smaliTreeWalker.g:943:5: ^( I_STATEMENT_FORMAT22c_TYPE INSTRUCTION_FORMAT22c_TYPE registerA= REGISTER registerB= REGISTER nonvoid_type_descriptor ) + // smaliTreeWalker.g:1016:3: ( ^( I_STATEMENT_FORMAT22c_TYPE INSTRUCTION_FORMAT22c_TYPE registerA= REGISTER registerB= REGISTER nonvoid_type_descriptor ) ) + // smaliTreeWalker.g:1017:5: ^( I_STATEMENT_FORMAT22c_TYPE INSTRUCTION_FORMAT22c_TYPE registerA= REGISTER registerB= REGISTER nonvoid_type_descriptor ) { - match(input,I_STATEMENT_FORMAT22c_TYPE,FOLLOW_I_STATEMENT_FORMAT22c_TYPE_in_insn_format22c_type2526); + match(input,I_STATEMENT_FORMAT22c_TYPE,FOLLOW_I_STATEMENT_FORMAT22c_TYPE_in_insn_format22c_type2769); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT22c_TYPE141=(CommonTree)match(input,INSTRUCTION_FORMAT22c_TYPE,FOLLOW_INSTRUCTION_FORMAT22c_TYPE_in_insn_format22c_type2528); - registerA=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22c_type2532); - registerB=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22c_type2536); - pushFollow(FOLLOW_nonvoid_type_descriptor_in_insn_format22c_type2538); - nonvoid_type_descriptor142=nonvoid_type_descriptor(); + INSTRUCTION_FORMAT22c_TYPE155=(CommonTree)match(input,INSTRUCTION_FORMAT22c_TYPE,FOLLOW_INSTRUCTION_FORMAT22c_TYPE_in_insn_format22c_type2771); + registerA=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22c_type2775); + registerB=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22c_type2779); + pushFollow(FOLLOW_nonvoid_type_descriptor_in_insn_format22c_type2781); + nonvoid_type_descriptor156=nonvoid_type_descriptor(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT22c_TYPE141!=null?INSTRUCTION_FORMAT22c_TYPE141.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT22c_TYPE155!=null?INSTRUCTION_FORMAT22c_TYPE155.getText():null)); byte regA = parseRegister_nibble((registerA!=null?registerA.getText():null)); byte regB = parseRegister_nibble((registerB!=null?registerB.getText():null)); method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction22c(opcode, regA, regB, - dexBuilder.internTypeReference((nonvoid_type_descriptor142!=null?((smaliTreeWalker.nonvoid_type_descriptor_return)nonvoid_type_descriptor142).type:null)))); + dexBuilder.internTypeReference((nonvoid_type_descriptor156!=null?((smaliTreeWalker.nonvoid_type_descriptor_return)nonvoid_type_descriptor156).type:null)))); } @@ -5325,34 +5986,34 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format22s" - // smaliTreeWalker.g:953:1: insn_format22s : ^( I_STATEMENT_FORMAT22s INSTRUCTION_FORMAT22s registerA= REGISTER registerB= REGISTER short_integral_literal ) ; + // smaliTreeWalker.g:1027:1: insn_format22s : ^( I_STATEMENT_FORMAT22s INSTRUCTION_FORMAT22s registerA= REGISTER registerB= REGISTER short_integral_literal ) ; public final void insn_format22s() throws RecognitionException { CommonTree registerA=null; CommonTree registerB=null; - CommonTree INSTRUCTION_FORMAT22s143=null; - short short_integral_literal144 =0; + CommonTree INSTRUCTION_FORMAT22s157=null; + short short_integral_literal158 =0; try { - // smaliTreeWalker.g:954:3: ( ^( I_STATEMENT_FORMAT22s INSTRUCTION_FORMAT22s registerA= REGISTER registerB= REGISTER short_integral_literal ) ) - // smaliTreeWalker.g:955:5: ^( I_STATEMENT_FORMAT22s INSTRUCTION_FORMAT22s registerA= REGISTER registerB= REGISTER short_integral_literal ) + // smaliTreeWalker.g:1028:3: ( ^( I_STATEMENT_FORMAT22s INSTRUCTION_FORMAT22s registerA= REGISTER registerB= REGISTER short_integral_literal ) ) + // smaliTreeWalker.g:1029:5: ^( I_STATEMENT_FORMAT22s INSTRUCTION_FORMAT22s registerA= REGISTER registerB= REGISTER short_integral_literal ) { - match(input,I_STATEMENT_FORMAT22s,FOLLOW_I_STATEMENT_FORMAT22s_in_insn_format22s2561); + match(input,I_STATEMENT_FORMAT22s,FOLLOW_I_STATEMENT_FORMAT22s_in_insn_format22s2804); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT22s143=(CommonTree)match(input,INSTRUCTION_FORMAT22s,FOLLOW_INSTRUCTION_FORMAT22s_in_insn_format22s2563); - registerA=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22s2567); - registerB=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22s2571); - pushFollow(FOLLOW_short_integral_literal_in_insn_format22s2573); - short_integral_literal144=short_integral_literal(); + INSTRUCTION_FORMAT22s157=(CommonTree)match(input,INSTRUCTION_FORMAT22s,FOLLOW_INSTRUCTION_FORMAT22s_in_insn_format22s2806); + registerA=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22s2810); + registerB=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22s2814); + pushFollow(FOLLOW_short_integral_literal_in_insn_format22s2816); + short_integral_literal158=short_integral_literal(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT22s143!=null?INSTRUCTION_FORMAT22s143.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT22s157!=null?INSTRUCTION_FORMAT22s157.getText():null)); byte regA = parseRegister_nibble((registerA!=null?registerA.getText():null)); byte regB = parseRegister_nibble((registerB!=null?registerB.getText():null)); - short litC = short_integral_literal144; + short litC = short_integral_literal158; method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction22s(opcode, regA, regB, litC)); @@ -5372,34 +6033,34 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format22t" - // smaliTreeWalker.g:966:1: insn_format22t : ^( I_STATEMENT_FORMAT22t INSTRUCTION_FORMAT22t registerA= REGISTER registerB= REGISTER label_ref ) ; + // smaliTreeWalker.g:1040:1: insn_format22t : ^( I_STATEMENT_FORMAT22t INSTRUCTION_FORMAT22t registerA= REGISTER registerB= REGISTER label_ref ) ; public final void insn_format22t() throws RecognitionException { CommonTree registerA=null; CommonTree registerB=null; - CommonTree INSTRUCTION_FORMAT22t145=null; - Label label_ref146 =null; + CommonTree INSTRUCTION_FORMAT22t159=null; + Label label_ref160 =null; try { - // smaliTreeWalker.g:967:3: ( ^( I_STATEMENT_FORMAT22t INSTRUCTION_FORMAT22t registerA= REGISTER registerB= REGISTER label_ref ) ) - // smaliTreeWalker.g:968:5: ^( I_STATEMENT_FORMAT22t INSTRUCTION_FORMAT22t registerA= REGISTER registerB= REGISTER label_ref ) + // smaliTreeWalker.g:1041:3: ( ^( I_STATEMENT_FORMAT22t INSTRUCTION_FORMAT22t registerA= REGISTER registerB= REGISTER label_ref ) ) + // smaliTreeWalker.g:1042:5: ^( I_STATEMENT_FORMAT22t INSTRUCTION_FORMAT22t registerA= REGISTER registerB= REGISTER label_ref ) { - match(input,I_STATEMENT_FORMAT22t,FOLLOW_I_STATEMENT_FORMAT22t_in_insn_format22t2596); + match(input,I_STATEMENT_FORMAT22t,FOLLOW_I_STATEMENT_FORMAT22t_in_insn_format22t2839); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT22t145=(CommonTree)match(input,INSTRUCTION_FORMAT22t,FOLLOW_INSTRUCTION_FORMAT22t_in_insn_format22t2598); - registerA=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22t2602); - registerB=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22t2606); - pushFollow(FOLLOW_label_ref_in_insn_format22t2608); - label_ref146=label_ref(); + INSTRUCTION_FORMAT22t159=(CommonTree)match(input,INSTRUCTION_FORMAT22t,FOLLOW_INSTRUCTION_FORMAT22t_in_insn_format22t2841); + registerA=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22t2845); + registerB=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22t2849); + pushFollow(FOLLOW_label_ref_in_insn_format22t2851); + label_ref160=label_ref(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT22t145!=null?INSTRUCTION_FORMAT22t145.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT22t159!=null?INSTRUCTION_FORMAT22t159.getText():null)); byte regA = parseRegister_nibble((registerA!=null?registerA.getText():null)); byte regB = parseRegister_nibble((registerB!=null?registerB.getText():null)); - method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction22t(opcode, regA, regB, label_ref146)); + method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction22t(opcode, regA, regB, label_ref160)); } @@ -5417,25 +6078,25 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format22x" - // smaliTreeWalker.g:977:1: insn_format22x : ^( I_STATEMENT_FORMAT22x INSTRUCTION_FORMAT22x registerA= REGISTER registerB= REGISTER ) ; + // smaliTreeWalker.g:1051:1: insn_format22x : ^( I_STATEMENT_FORMAT22x INSTRUCTION_FORMAT22x registerA= REGISTER registerB= REGISTER ) ; public final void insn_format22x() throws RecognitionException { CommonTree registerA=null; CommonTree registerB=null; - CommonTree INSTRUCTION_FORMAT22x147=null; + CommonTree INSTRUCTION_FORMAT22x161=null; try { - // smaliTreeWalker.g:978:3: ( ^( I_STATEMENT_FORMAT22x INSTRUCTION_FORMAT22x registerA= REGISTER registerB= REGISTER ) ) - // smaliTreeWalker.g:979:5: ^( I_STATEMENT_FORMAT22x INSTRUCTION_FORMAT22x registerA= REGISTER registerB= REGISTER ) + // smaliTreeWalker.g:1052:3: ( ^( I_STATEMENT_FORMAT22x INSTRUCTION_FORMAT22x registerA= REGISTER registerB= REGISTER ) ) + // smaliTreeWalker.g:1053:5: ^( I_STATEMENT_FORMAT22x INSTRUCTION_FORMAT22x registerA= REGISTER registerB= REGISTER ) { - match(input,I_STATEMENT_FORMAT22x,FOLLOW_I_STATEMENT_FORMAT22x_in_insn_format22x2631); + match(input,I_STATEMENT_FORMAT22x,FOLLOW_I_STATEMENT_FORMAT22x_in_insn_format22x2874); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT22x147=(CommonTree)match(input,INSTRUCTION_FORMAT22x,FOLLOW_INSTRUCTION_FORMAT22x_in_insn_format22x2633); - registerA=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22x2637); - registerB=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22x2641); + INSTRUCTION_FORMAT22x161=(CommonTree)match(input,INSTRUCTION_FORMAT22x,FOLLOW_INSTRUCTION_FORMAT22x_in_insn_format22x2876); + registerA=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22x2880); + registerB=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format22x2884); match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT22x147!=null?INSTRUCTION_FORMAT22x147.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT22x161!=null?INSTRUCTION_FORMAT22x161.getText():null)); short regA = parseRegister_byte((registerA!=null?registerA.getText():null)); int regB = parseRegister_short((registerB!=null?registerB.getText():null)); @@ -5457,27 +6118,27 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format23x" - // smaliTreeWalker.g:988:1: insn_format23x : ^( I_STATEMENT_FORMAT23x INSTRUCTION_FORMAT23x registerA= REGISTER registerB= REGISTER registerC= REGISTER ) ; + // smaliTreeWalker.g:1062:1: insn_format23x : ^( I_STATEMENT_FORMAT23x INSTRUCTION_FORMAT23x registerA= REGISTER registerB= REGISTER registerC= REGISTER ) ; public final void insn_format23x() throws RecognitionException { CommonTree registerA=null; CommonTree registerB=null; CommonTree registerC=null; - CommonTree INSTRUCTION_FORMAT23x148=null; + CommonTree INSTRUCTION_FORMAT23x162=null; try { - // smaliTreeWalker.g:989:3: ( ^( I_STATEMENT_FORMAT23x INSTRUCTION_FORMAT23x registerA= REGISTER registerB= REGISTER registerC= REGISTER ) ) - // smaliTreeWalker.g:990:5: ^( I_STATEMENT_FORMAT23x INSTRUCTION_FORMAT23x registerA= REGISTER registerB= REGISTER registerC= REGISTER ) + // smaliTreeWalker.g:1063:3: ( ^( I_STATEMENT_FORMAT23x INSTRUCTION_FORMAT23x registerA= REGISTER registerB= REGISTER registerC= REGISTER ) ) + // smaliTreeWalker.g:1064:5: ^( I_STATEMENT_FORMAT23x INSTRUCTION_FORMAT23x registerA= REGISTER registerB= REGISTER registerC= REGISTER ) { - match(input,I_STATEMENT_FORMAT23x,FOLLOW_I_STATEMENT_FORMAT23x_in_insn_format23x2664); + match(input,I_STATEMENT_FORMAT23x,FOLLOW_I_STATEMENT_FORMAT23x_in_insn_format23x2907); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT23x148=(CommonTree)match(input,INSTRUCTION_FORMAT23x,FOLLOW_INSTRUCTION_FORMAT23x_in_insn_format23x2666); - registerA=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format23x2670); - registerB=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format23x2674); - registerC=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format23x2678); + INSTRUCTION_FORMAT23x162=(CommonTree)match(input,INSTRUCTION_FORMAT23x,FOLLOW_INSTRUCTION_FORMAT23x_in_insn_format23x2909); + registerA=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format23x2913); + registerB=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format23x2917); + registerC=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format23x2921); match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT23x148!=null?INSTRUCTION_FORMAT23x148.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT23x162!=null?INSTRUCTION_FORMAT23x162.getText():null)); short regA = parseRegister_byte((registerA!=null?registerA.getText():null)); short regB = parseRegister_byte((registerB!=null?registerB.getText():null)); short regC = parseRegister_byte((registerC!=null?registerC.getText():null)); @@ -5500,28 +6161,28 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format30t" - // smaliTreeWalker.g:1000:1: insn_format30t : ^( I_STATEMENT_FORMAT30t INSTRUCTION_FORMAT30t label_ref ) ; + // smaliTreeWalker.g:1074:1: insn_format30t : ^( I_STATEMENT_FORMAT30t INSTRUCTION_FORMAT30t label_ref ) ; public final void insn_format30t() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT30t149=null; - Label label_ref150 =null; + CommonTree INSTRUCTION_FORMAT30t163=null; + Label label_ref164 =null; try { - // smaliTreeWalker.g:1001:3: ( ^( I_STATEMENT_FORMAT30t INSTRUCTION_FORMAT30t label_ref ) ) - // smaliTreeWalker.g:1002:5: ^( I_STATEMENT_FORMAT30t INSTRUCTION_FORMAT30t label_ref ) + // smaliTreeWalker.g:1075:3: ( ^( I_STATEMENT_FORMAT30t INSTRUCTION_FORMAT30t label_ref ) ) + // smaliTreeWalker.g:1076:5: ^( I_STATEMENT_FORMAT30t INSTRUCTION_FORMAT30t label_ref ) { - match(input,I_STATEMENT_FORMAT30t,FOLLOW_I_STATEMENT_FORMAT30t_in_insn_format30t2701); + match(input,I_STATEMENT_FORMAT30t,FOLLOW_I_STATEMENT_FORMAT30t_in_insn_format30t2944); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT30t149=(CommonTree)match(input,INSTRUCTION_FORMAT30t,FOLLOW_INSTRUCTION_FORMAT30t_in_insn_format30t2703); - pushFollow(FOLLOW_label_ref_in_insn_format30t2705); - label_ref150=label_ref(); + INSTRUCTION_FORMAT30t163=(CommonTree)match(input,INSTRUCTION_FORMAT30t,FOLLOW_INSTRUCTION_FORMAT30t_in_insn_format30t2946); + pushFollow(FOLLOW_label_ref_in_insn_format30t2948); + label_ref164=label_ref(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT30t149!=null?INSTRUCTION_FORMAT30t149.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT30t163!=null?INSTRUCTION_FORMAT30t163.getText():null)); - method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction30t(opcode, label_ref150)); + method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction30t(opcode, label_ref164)); } @@ -5539,32 +6200,32 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format31c" - // smaliTreeWalker.g:1009:1: insn_format31c : ^( I_STATEMENT_FORMAT31c INSTRUCTION_FORMAT31c REGISTER string_literal ) ; + // smaliTreeWalker.g:1083:1: insn_format31c : ^( I_STATEMENT_FORMAT31c INSTRUCTION_FORMAT31c REGISTER string_literal ) ; public final void insn_format31c() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT31c151=null; - CommonTree REGISTER152=null; - String string_literal153 =null; + CommonTree INSTRUCTION_FORMAT31c165=null; + CommonTree REGISTER166=null; + String string_literal167 =null; try { - // smaliTreeWalker.g:1010:3: ( ^( I_STATEMENT_FORMAT31c INSTRUCTION_FORMAT31c REGISTER string_literal ) ) - // smaliTreeWalker.g:1011:5: ^( I_STATEMENT_FORMAT31c INSTRUCTION_FORMAT31c REGISTER string_literal ) + // smaliTreeWalker.g:1084:3: ( ^( I_STATEMENT_FORMAT31c INSTRUCTION_FORMAT31c REGISTER string_literal ) ) + // smaliTreeWalker.g:1085:5: ^( I_STATEMENT_FORMAT31c INSTRUCTION_FORMAT31c REGISTER string_literal ) { - match(input,I_STATEMENT_FORMAT31c,FOLLOW_I_STATEMENT_FORMAT31c_in_insn_format31c2728); + match(input,I_STATEMENT_FORMAT31c,FOLLOW_I_STATEMENT_FORMAT31c_in_insn_format31c2971); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT31c151=(CommonTree)match(input,INSTRUCTION_FORMAT31c,FOLLOW_INSTRUCTION_FORMAT31c_in_insn_format31c2730); - REGISTER152=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format31c2732); - pushFollow(FOLLOW_string_literal_in_insn_format31c2734); - string_literal153=string_literal(); + INSTRUCTION_FORMAT31c165=(CommonTree)match(input,INSTRUCTION_FORMAT31c,FOLLOW_INSTRUCTION_FORMAT31c_in_insn_format31c2973); + REGISTER166=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format31c2975); + pushFollow(FOLLOW_string_literal_in_insn_format31c2977); + string_literal167=string_literal(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT31c151!=null?INSTRUCTION_FORMAT31c151.getText():null)); - short regA = parseRegister_byte((REGISTER152!=null?REGISTER152.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT31c165!=null?INSTRUCTION_FORMAT31c165.getText():null)); + short regA = parseRegister_byte((REGISTER166!=null?REGISTER166.getText():null)); method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction31c(opcode, regA, - dexBuilder.internStringReference(string_literal153))); + dexBuilder.internStringReference(string_literal167))); } @@ -5582,31 +6243,31 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format31i" - // smaliTreeWalker.g:1020:1: insn_format31i : ^( I_STATEMENT_FORMAT31i INSTRUCTION_FORMAT31i REGISTER fixed_32bit_literal ) ; + // smaliTreeWalker.g:1094:1: insn_format31i : ^( I_STATEMENT_FORMAT31i INSTRUCTION_FORMAT31i REGISTER fixed_32bit_literal ) ; public final void insn_format31i() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT31i154=null; - CommonTree REGISTER155=null; - int fixed_32bit_literal156 =0; + CommonTree INSTRUCTION_FORMAT31i168=null; + CommonTree REGISTER169=null; + int fixed_32bit_literal170 =0; try { - // smaliTreeWalker.g:1021:3: ( ^( I_STATEMENT_FORMAT31i INSTRUCTION_FORMAT31i REGISTER fixed_32bit_literal ) ) - // smaliTreeWalker.g:1022:5: ^( I_STATEMENT_FORMAT31i INSTRUCTION_FORMAT31i REGISTER fixed_32bit_literal ) + // smaliTreeWalker.g:1095:3: ( ^( I_STATEMENT_FORMAT31i INSTRUCTION_FORMAT31i REGISTER fixed_32bit_literal ) ) + // smaliTreeWalker.g:1096:5: ^( I_STATEMENT_FORMAT31i INSTRUCTION_FORMAT31i REGISTER fixed_32bit_literal ) { - match(input,I_STATEMENT_FORMAT31i,FOLLOW_I_STATEMENT_FORMAT31i_in_insn_format31i2757); + match(input,I_STATEMENT_FORMAT31i,FOLLOW_I_STATEMENT_FORMAT31i_in_insn_format31i3000); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT31i154=(CommonTree)match(input,INSTRUCTION_FORMAT31i,FOLLOW_INSTRUCTION_FORMAT31i_in_insn_format31i2759); - REGISTER155=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format31i2761); - pushFollow(FOLLOW_fixed_32bit_literal_in_insn_format31i2763); - fixed_32bit_literal156=fixed_32bit_literal(); + INSTRUCTION_FORMAT31i168=(CommonTree)match(input,INSTRUCTION_FORMAT31i,FOLLOW_INSTRUCTION_FORMAT31i_in_insn_format31i3002); + REGISTER169=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format31i3004); + pushFollow(FOLLOW_fixed_32bit_literal_in_insn_format31i3006); + fixed_32bit_literal170=fixed_32bit_literal(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT31i154!=null?INSTRUCTION_FORMAT31i154.getText():null)); - short regA = parseRegister_byte((REGISTER155!=null?REGISTER155.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT31i168!=null?INSTRUCTION_FORMAT31i168.getText():null)); + short regA = parseRegister_byte((REGISTER169!=null?REGISTER169.getText():null)); - int litB = fixed_32bit_literal156; + int litB = fixed_32bit_literal170; method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction31i(opcode, regA, litB)); @@ -5626,32 +6287,32 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format31t" - // smaliTreeWalker.g:1032:1: insn_format31t : ^( I_STATEMENT_FORMAT31t INSTRUCTION_FORMAT31t REGISTER label_ref ) ; + // smaliTreeWalker.g:1106:1: insn_format31t : ^( I_STATEMENT_FORMAT31t INSTRUCTION_FORMAT31t REGISTER label_ref ) ; public final void insn_format31t() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT31t157=null; - CommonTree REGISTER158=null; - Label label_ref159 =null; + CommonTree INSTRUCTION_FORMAT31t171=null; + CommonTree REGISTER172=null; + Label label_ref173 =null; try { - // smaliTreeWalker.g:1033:3: ( ^( I_STATEMENT_FORMAT31t INSTRUCTION_FORMAT31t REGISTER label_ref ) ) - // smaliTreeWalker.g:1034:5: ^( I_STATEMENT_FORMAT31t INSTRUCTION_FORMAT31t REGISTER label_ref ) + // smaliTreeWalker.g:1107:3: ( ^( I_STATEMENT_FORMAT31t INSTRUCTION_FORMAT31t REGISTER label_ref ) ) + // smaliTreeWalker.g:1108:5: ^( I_STATEMENT_FORMAT31t INSTRUCTION_FORMAT31t REGISTER label_ref ) { - match(input,I_STATEMENT_FORMAT31t,FOLLOW_I_STATEMENT_FORMAT31t_in_insn_format31t2786); + match(input,I_STATEMENT_FORMAT31t,FOLLOW_I_STATEMENT_FORMAT31t_in_insn_format31t3029); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT31t157=(CommonTree)match(input,INSTRUCTION_FORMAT31t,FOLLOW_INSTRUCTION_FORMAT31t_in_insn_format31t2788); - REGISTER158=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format31t2790); - pushFollow(FOLLOW_label_ref_in_insn_format31t2792); - label_ref159=label_ref(); + INSTRUCTION_FORMAT31t171=(CommonTree)match(input,INSTRUCTION_FORMAT31t,FOLLOW_INSTRUCTION_FORMAT31t_in_insn_format31t3031); + REGISTER172=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format31t3033); + pushFollow(FOLLOW_label_ref_in_insn_format31t3035); + label_ref173=label_ref(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT31t157!=null?INSTRUCTION_FORMAT31t157.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT31t171!=null?INSTRUCTION_FORMAT31t171.getText():null)); - short regA = parseRegister_byte((REGISTER158!=null?REGISTER158.getText():null)); + short regA = parseRegister_byte((REGISTER172!=null?REGISTER172.getText():null)); - method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction31t(opcode, regA, label_ref159)); + method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction31t(opcode, regA, label_ref173)); } @@ -5669,25 +6330,25 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format32x" - // smaliTreeWalker.g:1043:1: insn_format32x : ^( I_STATEMENT_FORMAT32x INSTRUCTION_FORMAT32x registerA= REGISTER registerB= REGISTER ) ; + // smaliTreeWalker.g:1117:1: insn_format32x : ^( I_STATEMENT_FORMAT32x INSTRUCTION_FORMAT32x registerA= REGISTER registerB= REGISTER ) ; public final void insn_format32x() throws RecognitionException { CommonTree registerA=null; CommonTree registerB=null; - CommonTree INSTRUCTION_FORMAT32x160=null; + CommonTree INSTRUCTION_FORMAT32x174=null; try { - // smaliTreeWalker.g:1044:3: ( ^( I_STATEMENT_FORMAT32x INSTRUCTION_FORMAT32x registerA= REGISTER registerB= REGISTER ) ) - // smaliTreeWalker.g:1045:5: ^( I_STATEMENT_FORMAT32x INSTRUCTION_FORMAT32x registerA= REGISTER registerB= REGISTER ) + // smaliTreeWalker.g:1118:3: ( ^( I_STATEMENT_FORMAT32x INSTRUCTION_FORMAT32x registerA= REGISTER registerB= REGISTER ) ) + // smaliTreeWalker.g:1119:5: ^( I_STATEMENT_FORMAT32x INSTRUCTION_FORMAT32x registerA= REGISTER registerB= REGISTER ) { - match(input,I_STATEMENT_FORMAT32x,FOLLOW_I_STATEMENT_FORMAT32x_in_insn_format32x2815); + match(input,I_STATEMENT_FORMAT32x,FOLLOW_I_STATEMENT_FORMAT32x_in_insn_format32x3058); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT32x160=(CommonTree)match(input,INSTRUCTION_FORMAT32x,FOLLOW_INSTRUCTION_FORMAT32x_in_insn_format32x2817); - registerA=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format32x2821); - registerB=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format32x2825); + INSTRUCTION_FORMAT32x174=(CommonTree)match(input,INSTRUCTION_FORMAT32x,FOLLOW_INSTRUCTION_FORMAT32x_in_insn_format32x3060); + registerA=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format32x3064); + registerB=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format32x3068); match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT32x160!=null?INSTRUCTION_FORMAT32x160.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT32x174!=null?INSTRUCTION_FORMAT32x174.getText():null)); int regA = parseRegister_short((registerA!=null?registerA.getText():null)); int regB = parseRegister_short((registerB!=null?registerB.getText():null)); @@ -5708,38 +6369,89 @@ public class smaliTreeWalker extends TreeParser { + // $ANTLR start "insn_format35c_call_site" + // smaliTreeWalker.g:1128:1: insn_format35c_call_site : ^( I_STATEMENT_FORMAT35c_CALL_SITE INSTRUCTION_FORMAT35c_CALL_SITE register_list call_site_reference ) ; + public final void insn_format35c_call_site() throws RecognitionException { + CommonTree INSTRUCTION_FORMAT35c_CALL_SITE175=null; + TreeRuleReturnScope register_list176 =null; + ImmutableCallSiteReference call_site_reference177 =null; + + try { + // smaliTreeWalker.g:1129:3: ( ^( I_STATEMENT_FORMAT35c_CALL_SITE INSTRUCTION_FORMAT35c_CALL_SITE register_list call_site_reference ) ) + // smaliTreeWalker.g:1131:5: ^( I_STATEMENT_FORMAT35c_CALL_SITE INSTRUCTION_FORMAT35c_CALL_SITE register_list call_site_reference ) + { + match(input,I_STATEMENT_FORMAT35c_CALL_SITE,FOLLOW_I_STATEMENT_FORMAT35c_CALL_SITE_in_insn_format35c_call_site3096); + match(input, Token.DOWN, null); + INSTRUCTION_FORMAT35c_CALL_SITE175=(CommonTree)match(input,INSTRUCTION_FORMAT35c_CALL_SITE,FOLLOW_INSTRUCTION_FORMAT35c_CALL_SITE_in_insn_format35c_call_site3098); + pushFollow(FOLLOW_register_list_in_insn_format35c_call_site3100); + register_list176=register_list(); + state._fsp--; + + pushFollow(FOLLOW_call_site_reference_in_insn_format35c_call_site3102); + call_site_reference177=call_site_reference(); + state._fsp--; + + match(input, Token.UP, null); + + + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT35c_CALL_SITE175!=null?INSTRUCTION_FORMAT35c_CALL_SITE175.getText():null)); + + //this depends on the fact that register_list returns a byte[5] + byte[] registers = (register_list176!=null?((smaliTreeWalker.register_list_return)register_list176).registers:null); + byte registerCount = (register_list176!=null?((smaliTreeWalker.register_list_return)register_list176).registerCount:0); + + ImmutableCallSiteReference callSiteReference = call_site_reference177; + + method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction35c(opcode, registerCount, registers[0], + registers[1], registers[2], registers[3], registers[4], dexBuilder.internCallSite(callSiteReference))); + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "insn_format35c_call_site" + + + // $ANTLR start "insn_format35c_method" - // smaliTreeWalker.g:1054:1: insn_format35c_method : ^( I_STATEMENT_FORMAT35c_METHOD INSTRUCTION_FORMAT35c_METHOD register_list method_reference ) ; + // smaliTreeWalker.g:1145:1: insn_format35c_method : ^( I_STATEMENT_FORMAT35c_METHOD INSTRUCTION_FORMAT35c_METHOD register_list method_reference ) ; public final void insn_format35c_method() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT35c_METHOD161=null; - TreeRuleReturnScope register_list162 =null; - ImmutableMethodReference method_reference163 =null; + CommonTree INSTRUCTION_FORMAT35c_METHOD178=null; + TreeRuleReturnScope register_list179 =null; + ImmutableMethodReference method_reference180 =null; try { - // smaliTreeWalker.g:1055:3: ( ^( I_STATEMENT_FORMAT35c_METHOD INSTRUCTION_FORMAT35c_METHOD register_list method_reference ) ) - // smaliTreeWalker.g:1056:5: ^( I_STATEMENT_FORMAT35c_METHOD INSTRUCTION_FORMAT35c_METHOD register_list method_reference ) + // smaliTreeWalker.g:1146:3: ( ^( I_STATEMENT_FORMAT35c_METHOD INSTRUCTION_FORMAT35c_METHOD register_list method_reference ) ) + // smaliTreeWalker.g:1147:5: ^( I_STATEMENT_FORMAT35c_METHOD INSTRUCTION_FORMAT35c_METHOD register_list method_reference ) { - match(input,I_STATEMENT_FORMAT35c_METHOD,FOLLOW_I_STATEMENT_FORMAT35c_METHOD_in_insn_format35c_method2848); + match(input,I_STATEMENT_FORMAT35c_METHOD,FOLLOW_I_STATEMENT_FORMAT35c_METHOD_in_insn_format35c_method3125); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT35c_METHOD161=(CommonTree)match(input,INSTRUCTION_FORMAT35c_METHOD,FOLLOW_INSTRUCTION_FORMAT35c_METHOD_in_insn_format35c_method2850); - pushFollow(FOLLOW_register_list_in_insn_format35c_method2852); - register_list162=register_list(); + INSTRUCTION_FORMAT35c_METHOD178=(CommonTree)match(input,INSTRUCTION_FORMAT35c_METHOD,FOLLOW_INSTRUCTION_FORMAT35c_METHOD_in_insn_format35c_method3127); + pushFollow(FOLLOW_register_list_in_insn_format35c_method3129); + register_list179=register_list(); state._fsp--; - pushFollow(FOLLOW_method_reference_in_insn_format35c_method2854); - method_reference163=method_reference(); + pushFollow(FOLLOW_method_reference_in_insn_format35c_method3131); + method_reference180=method_reference(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT35c_METHOD161!=null?INSTRUCTION_FORMAT35c_METHOD161.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT35c_METHOD178!=null?INSTRUCTION_FORMAT35c_METHOD178.getText():null)); //this depends on the fact that register_list returns a byte[5] - byte[] registers = (register_list162!=null?((smaliTreeWalker.register_list_return)register_list162).registers:null); - byte registerCount = (register_list162!=null?((smaliTreeWalker.register_list_return)register_list162).registerCount:0); + byte[] registers = (register_list179!=null?((smaliTreeWalker.register_list_return)register_list179).registers:null); + byte registerCount = (register_list179!=null?((smaliTreeWalker.register_list_return)register_list179).registerCount:0); - ImmutableMethodReference methodReference = method_reference163; + ImmutableMethodReference methodReference = method_reference180; method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction35c(opcode, registerCount, registers[0], registers[1], registers[2], registers[3], registers[4], dexBuilder.internMethodReference(methodReference))); @@ -5760,38 +6472,38 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format35c_type" - // smaliTreeWalker.g:1070:1: insn_format35c_type : ^( I_STATEMENT_FORMAT35c_TYPE INSTRUCTION_FORMAT35c_TYPE register_list nonvoid_type_descriptor ) ; + // smaliTreeWalker.g:1161:1: insn_format35c_type : ^( I_STATEMENT_FORMAT35c_TYPE INSTRUCTION_FORMAT35c_TYPE register_list nonvoid_type_descriptor ) ; public final void insn_format35c_type() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT35c_TYPE164=null; - TreeRuleReturnScope register_list165 =null; - TreeRuleReturnScope nonvoid_type_descriptor166 =null; + CommonTree INSTRUCTION_FORMAT35c_TYPE181=null; + TreeRuleReturnScope register_list182 =null; + TreeRuleReturnScope nonvoid_type_descriptor183 =null; try { - // smaliTreeWalker.g:1071:3: ( ^( I_STATEMENT_FORMAT35c_TYPE INSTRUCTION_FORMAT35c_TYPE register_list nonvoid_type_descriptor ) ) - // smaliTreeWalker.g:1072:5: ^( I_STATEMENT_FORMAT35c_TYPE INSTRUCTION_FORMAT35c_TYPE register_list nonvoid_type_descriptor ) + // smaliTreeWalker.g:1162:3: ( ^( I_STATEMENT_FORMAT35c_TYPE INSTRUCTION_FORMAT35c_TYPE register_list nonvoid_type_descriptor ) ) + // smaliTreeWalker.g:1163:5: ^( I_STATEMENT_FORMAT35c_TYPE INSTRUCTION_FORMAT35c_TYPE register_list nonvoid_type_descriptor ) { - match(input,I_STATEMENT_FORMAT35c_TYPE,FOLLOW_I_STATEMENT_FORMAT35c_TYPE_in_insn_format35c_type2877); + match(input,I_STATEMENT_FORMAT35c_TYPE,FOLLOW_I_STATEMENT_FORMAT35c_TYPE_in_insn_format35c_type3154); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT35c_TYPE164=(CommonTree)match(input,INSTRUCTION_FORMAT35c_TYPE,FOLLOW_INSTRUCTION_FORMAT35c_TYPE_in_insn_format35c_type2879); - pushFollow(FOLLOW_register_list_in_insn_format35c_type2881); - register_list165=register_list(); + INSTRUCTION_FORMAT35c_TYPE181=(CommonTree)match(input,INSTRUCTION_FORMAT35c_TYPE,FOLLOW_INSTRUCTION_FORMAT35c_TYPE_in_insn_format35c_type3156); + pushFollow(FOLLOW_register_list_in_insn_format35c_type3158); + register_list182=register_list(); state._fsp--; - pushFollow(FOLLOW_nonvoid_type_descriptor_in_insn_format35c_type2883); - nonvoid_type_descriptor166=nonvoid_type_descriptor(); + pushFollow(FOLLOW_nonvoid_type_descriptor_in_insn_format35c_type3160); + nonvoid_type_descriptor183=nonvoid_type_descriptor(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT35c_TYPE164!=null?INSTRUCTION_FORMAT35c_TYPE164.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT35c_TYPE181!=null?INSTRUCTION_FORMAT35c_TYPE181.getText():null)); //this depends on the fact that register_list returns a byte[5] - byte[] registers = (register_list165!=null?((smaliTreeWalker.register_list_return)register_list165).registers:null); - byte registerCount = (register_list165!=null?((smaliTreeWalker.register_list_return)register_list165).registerCount:0); + byte[] registers = (register_list182!=null?((smaliTreeWalker.register_list_return)register_list182).registers:null); + byte registerCount = (register_list182!=null?((smaliTreeWalker.register_list_return)register_list182).registerCount:0); method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction35c(opcode, registerCount, registers[0], registers[1], - registers[2], registers[3], registers[4], dexBuilder.internTypeReference((nonvoid_type_descriptor166!=null?((smaliTreeWalker.nonvoid_type_descriptor_return)nonvoid_type_descriptor166).type:null)))); + registers[2], registers[3], registers[4], dexBuilder.internTypeReference((nonvoid_type_descriptor183!=null?((smaliTreeWalker.nonvoid_type_descriptor_return)nonvoid_type_descriptor183).type:null)))); } @@ -5808,38 +6520,89 @@ public class smaliTreeWalker extends TreeParser { + // $ANTLR start "insn_format3rc_call_site" + // smaliTreeWalker.g:1175:1: insn_format3rc_call_site : ^( I_STATEMENT_FORMAT3rc_CALL_SITE INSTRUCTION_FORMAT3rc_CALL_SITE register_range call_site_reference ) ; + public final void insn_format3rc_call_site() throws RecognitionException { + CommonTree INSTRUCTION_FORMAT3rc_CALL_SITE184=null; + TreeRuleReturnScope register_range185 =null; + ImmutableCallSiteReference call_site_reference186 =null; + + try { + // smaliTreeWalker.g:1176:3: ( ^( I_STATEMENT_FORMAT3rc_CALL_SITE INSTRUCTION_FORMAT3rc_CALL_SITE register_range call_site_reference ) ) + // smaliTreeWalker.g:1178:5: ^( I_STATEMENT_FORMAT3rc_CALL_SITE INSTRUCTION_FORMAT3rc_CALL_SITE register_range call_site_reference ) + { + match(input,I_STATEMENT_FORMAT3rc_CALL_SITE,FOLLOW_I_STATEMENT_FORMAT3rc_CALL_SITE_in_insn_format3rc_call_site3188); + match(input, Token.DOWN, null); + INSTRUCTION_FORMAT3rc_CALL_SITE184=(CommonTree)match(input,INSTRUCTION_FORMAT3rc_CALL_SITE,FOLLOW_INSTRUCTION_FORMAT3rc_CALL_SITE_in_insn_format3rc_call_site3190); + pushFollow(FOLLOW_register_range_in_insn_format3rc_call_site3192); + register_range185=register_range(); + state._fsp--; + + pushFollow(FOLLOW_call_site_reference_in_insn_format3rc_call_site3194); + call_site_reference186=call_site_reference(); + state._fsp--; + + match(input, Token.UP, null); + + + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT3rc_CALL_SITE184!=null?INSTRUCTION_FORMAT3rc_CALL_SITE184.getText():null)); + int startRegister = (register_range185!=null?((smaliTreeWalker.register_range_return)register_range185).startRegister:0); + int endRegister = (register_range185!=null?((smaliTreeWalker.register_range_return)register_range185).endRegister:0); + + int registerCount = endRegister - startRegister + 1; + + ImmutableCallSiteReference callSiteReference = call_site_reference186; + + method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction3rc(opcode, startRegister, registerCount, + dexBuilder.internCallSite(callSiteReference))); + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "insn_format3rc_call_site" + + + // $ANTLR start "insn_format3rc_method" - // smaliTreeWalker.g:1084:1: insn_format3rc_method : ^( I_STATEMENT_FORMAT3rc_METHOD INSTRUCTION_FORMAT3rc_METHOD register_range method_reference ) ; + // smaliTreeWalker.g:1192:1: insn_format3rc_method : ^( I_STATEMENT_FORMAT3rc_METHOD INSTRUCTION_FORMAT3rc_METHOD register_range method_reference ) ; public final void insn_format3rc_method() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT3rc_METHOD167=null; - TreeRuleReturnScope register_range168 =null; - ImmutableMethodReference method_reference169 =null; + CommonTree INSTRUCTION_FORMAT3rc_METHOD187=null; + TreeRuleReturnScope register_range188 =null; + ImmutableMethodReference method_reference189 =null; try { - // smaliTreeWalker.g:1085:3: ( ^( I_STATEMENT_FORMAT3rc_METHOD INSTRUCTION_FORMAT3rc_METHOD register_range method_reference ) ) - // smaliTreeWalker.g:1086:5: ^( I_STATEMENT_FORMAT3rc_METHOD INSTRUCTION_FORMAT3rc_METHOD register_range method_reference ) + // smaliTreeWalker.g:1193:3: ( ^( I_STATEMENT_FORMAT3rc_METHOD INSTRUCTION_FORMAT3rc_METHOD register_range method_reference ) ) + // smaliTreeWalker.g:1194:5: ^( I_STATEMENT_FORMAT3rc_METHOD INSTRUCTION_FORMAT3rc_METHOD register_range method_reference ) { - match(input,I_STATEMENT_FORMAT3rc_METHOD,FOLLOW_I_STATEMENT_FORMAT3rc_METHOD_in_insn_format3rc_method2906); + match(input,I_STATEMENT_FORMAT3rc_METHOD,FOLLOW_I_STATEMENT_FORMAT3rc_METHOD_in_insn_format3rc_method3217); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT3rc_METHOD167=(CommonTree)match(input,INSTRUCTION_FORMAT3rc_METHOD,FOLLOW_INSTRUCTION_FORMAT3rc_METHOD_in_insn_format3rc_method2908); - pushFollow(FOLLOW_register_range_in_insn_format3rc_method2910); - register_range168=register_range(); + INSTRUCTION_FORMAT3rc_METHOD187=(CommonTree)match(input,INSTRUCTION_FORMAT3rc_METHOD,FOLLOW_INSTRUCTION_FORMAT3rc_METHOD_in_insn_format3rc_method3219); + pushFollow(FOLLOW_register_range_in_insn_format3rc_method3221); + register_range188=register_range(); state._fsp--; - pushFollow(FOLLOW_method_reference_in_insn_format3rc_method2912); - method_reference169=method_reference(); + pushFollow(FOLLOW_method_reference_in_insn_format3rc_method3223); + method_reference189=method_reference(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT3rc_METHOD167!=null?INSTRUCTION_FORMAT3rc_METHOD167.getText():null)); - int startRegister = (register_range168!=null?((smaliTreeWalker.register_range_return)register_range168).startRegister:0); - int endRegister = (register_range168!=null?((smaliTreeWalker.register_range_return)register_range168).endRegister:0); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT3rc_METHOD187!=null?INSTRUCTION_FORMAT3rc_METHOD187.getText():null)); + int startRegister = (register_range188!=null?((smaliTreeWalker.register_range_return)register_range188).startRegister:0); + int endRegister = (register_range188!=null?((smaliTreeWalker.register_range_return)register_range188).endRegister:0); int registerCount = endRegister-startRegister+1; - ImmutableMethodReference methodReference = method_reference169; + ImmutableMethodReference methodReference = method_reference189; method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction3rc(opcode, startRegister, registerCount, dexBuilder.internMethodReference(methodReference))); @@ -5860,38 +6623,38 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format3rc_type" - // smaliTreeWalker.g:1100:1: insn_format3rc_type : ^( I_STATEMENT_FORMAT3rc_TYPE INSTRUCTION_FORMAT3rc_TYPE register_range nonvoid_type_descriptor ) ; + // smaliTreeWalker.g:1208:1: insn_format3rc_type : ^( I_STATEMENT_FORMAT3rc_TYPE INSTRUCTION_FORMAT3rc_TYPE register_range nonvoid_type_descriptor ) ; public final void insn_format3rc_type() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT3rc_TYPE170=null; - TreeRuleReturnScope register_range171 =null; - TreeRuleReturnScope nonvoid_type_descriptor172 =null; + CommonTree INSTRUCTION_FORMAT3rc_TYPE190=null; + TreeRuleReturnScope register_range191 =null; + TreeRuleReturnScope nonvoid_type_descriptor192 =null; try { - // smaliTreeWalker.g:1101:3: ( ^( I_STATEMENT_FORMAT3rc_TYPE INSTRUCTION_FORMAT3rc_TYPE register_range nonvoid_type_descriptor ) ) - // smaliTreeWalker.g:1102:5: ^( I_STATEMENT_FORMAT3rc_TYPE INSTRUCTION_FORMAT3rc_TYPE register_range nonvoid_type_descriptor ) + // smaliTreeWalker.g:1209:3: ( ^( I_STATEMENT_FORMAT3rc_TYPE INSTRUCTION_FORMAT3rc_TYPE register_range nonvoid_type_descriptor ) ) + // smaliTreeWalker.g:1210:5: ^( I_STATEMENT_FORMAT3rc_TYPE INSTRUCTION_FORMAT3rc_TYPE register_range nonvoid_type_descriptor ) { - match(input,I_STATEMENT_FORMAT3rc_TYPE,FOLLOW_I_STATEMENT_FORMAT3rc_TYPE_in_insn_format3rc_type2935); + match(input,I_STATEMENT_FORMAT3rc_TYPE,FOLLOW_I_STATEMENT_FORMAT3rc_TYPE_in_insn_format3rc_type3246); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT3rc_TYPE170=(CommonTree)match(input,INSTRUCTION_FORMAT3rc_TYPE,FOLLOW_INSTRUCTION_FORMAT3rc_TYPE_in_insn_format3rc_type2937); - pushFollow(FOLLOW_register_range_in_insn_format3rc_type2939); - register_range171=register_range(); + INSTRUCTION_FORMAT3rc_TYPE190=(CommonTree)match(input,INSTRUCTION_FORMAT3rc_TYPE,FOLLOW_INSTRUCTION_FORMAT3rc_TYPE_in_insn_format3rc_type3248); + pushFollow(FOLLOW_register_range_in_insn_format3rc_type3250); + register_range191=register_range(); state._fsp--; - pushFollow(FOLLOW_nonvoid_type_descriptor_in_insn_format3rc_type2941); - nonvoid_type_descriptor172=nonvoid_type_descriptor(); + pushFollow(FOLLOW_nonvoid_type_descriptor_in_insn_format3rc_type3252); + nonvoid_type_descriptor192=nonvoid_type_descriptor(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT3rc_TYPE170!=null?INSTRUCTION_FORMAT3rc_TYPE170.getText():null)); - int startRegister = (register_range171!=null?((smaliTreeWalker.register_range_return)register_range171).startRegister:0); - int endRegister = (register_range171!=null?((smaliTreeWalker.register_range_return)register_range171).endRegister:0); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT3rc_TYPE190!=null?INSTRUCTION_FORMAT3rc_TYPE190.getText():null)); + int startRegister = (register_range191!=null?((smaliTreeWalker.register_range_return)register_range191).startRegister:0); + int endRegister = (register_range191!=null?((smaliTreeWalker.register_range_return)register_range191).endRegister:0); int registerCount = endRegister-startRegister+1; method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction3rc(opcode, startRegister, registerCount, - dexBuilder.internTypeReference((nonvoid_type_descriptor172!=null?((smaliTreeWalker.nonvoid_type_descriptor_return)nonvoid_type_descriptor172).type:null)))); + dexBuilder.internTypeReference((nonvoid_type_descriptor192!=null?((smaliTreeWalker.nonvoid_type_descriptor_return)nonvoid_type_descriptor192).type:null)))); } @@ -5909,50 +6672,47 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format45cc_method" - // smaliTreeWalker.g:1114:1: insn_format45cc_method : ^( I_STATEMENT_FORMAT45cc_METHOD INSTRUCTION_FORMAT45cc_METHOD register_list method_reference method_prototype ) ; + // smaliTreeWalker.g:1222:1: insn_format45cc_method : ^( I_STATEMENT_FORMAT45cc_METHOD INSTRUCTION_FORMAT45cc_METHOD register_list method_reference method_prototype ) ; public final void insn_format45cc_method() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT45cc_METHOD173=null; - TreeRuleReturnScope register_list174 =null; - ImmutableMethodReference method_reference175 =null; - TreeRuleReturnScope method_prototype176 =null; + CommonTree INSTRUCTION_FORMAT45cc_METHOD193=null; + TreeRuleReturnScope register_list194 =null; + ImmutableMethodReference method_reference195 =null; + ImmutableMethodProtoReference method_prototype196 =null; try { - // smaliTreeWalker.g:1115:3: ( ^( I_STATEMENT_FORMAT45cc_METHOD INSTRUCTION_FORMAT45cc_METHOD register_list method_reference method_prototype ) ) - // smaliTreeWalker.g:1116:5: ^( I_STATEMENT_FORMAT45cc_METHOD INSTRUCTION_FORMAT45cc_METHOD register_list method_reference method_prototype ) + // smaliTreeWalker.g:1223:3: ( ^( I_STATEMENT_FORMAT45cc_METHOD INSTRUCTION_FORMAT45cc_METHOD register_list method_reference method_prototype ) ) + // smaliTreeWalker.g:1224:5: ^( I_STATEMENT_FORMAT45cc_METHOD INSTRUCTION_FORMAT45cc_METHOD register_list method_reference method_prototype ) { - match(input,I_STATEMENT_FORMAT45cc_METHOD,FOLLOW_I_STATEMENT_FORMAT45cc_METHOD_in_insn_format45cc_method2964); + match(input,I_STATEMENT_FORMAT45cc_METHOD,FOLLOW_I_STATEMENT_FORMAT45cc_METHOD_in_insn_format45cc_method3275); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT45cc_METHOD173=(CommonTree)match(input,INSTRUCTION_FORMAT45cc_METHOD,FOLLOW_INSTRUCTION_FORMAT45cc_METHOD_in_insn_format45cc_method2966); - pushFollow(FOLLOW_register_list_in_insn_format45cc_method2968); - register_list174=register_list(); + INSTRUCTION_FORMAT45cc_METHOD193=(CommonTree)match(input,INSTRUCTION_FORMAT45cc_METHOD,FOLLOW_INSTRUCTION_FORMAT45cc_METHOD_in_insn_format45cc_method3277); + pushFollow(FOLLOW_register_list_in_insn_format45cc_method3279); + register_list194=register_list(); state._fsp--; - pushFollow(FOLLOW_method_reference_in_insn_format45cc_method2970); - method_reference175=method_reference(); + pushFollow(FOLLOW_method_reference_in_insn_format45cc_method3281); + method_reference195=method_reference(); state._fsp--; - pushFollow(FOLLOW_method_prototype_in_insn_format45cc_method2972); - method_prototype176=method_prototype(); + pushFollow(FOLLOW_method_prototype_in_insn_format45cc_method3283); + method_prototype196=method_prototype(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT45cc_METHOD173!=null?INSTRUCTION_FORMAT45cc_METHOD173.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT45cc_METHOD193!=null?INSTRUCTION_FORMAT45cc_METHOD193.getText():null)); //this depends on the fact that register_list returns a byte[5] - byte[] registers = (register_list174!=null?((smaliTreeWalker.register_list_return)register_list174).registers:null); - byte registerCount = (register_list174!=null?((smaliTreeWalker.register_list_return)register_list174).registerCount:0); + byte[] registers = (register_list194!=null?((smaliTreeWalker.register_list_return)register_list194).registers:null); + byte registerCount = (register_list194!=null?((smaliTreeWalker.register_list_return)register_list194).registerCount:0); - ImmutableMethodReference methodReference = method_reference175; - ImmutableMethodProtoReference methodProtoReference = new ImmutableMethodProtoReference( - (method_prototype176!=null?((smaliTreeWalker.method_prototype_return)method_prototype176).parameters:null), - (method_prototype176!=null?((smaliTreeWalker.method_prototype_return)method_prototype176).returnType:null)); + ImmutableMethodReference methodReference = method_reference195; method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction45cc(opcode, registerCount, registers[0], registers[1], registers[2], registers[3], registers[4], dexBuilder.internMethodReference(methodReference), - dexBuilder.internMethodProtoReference(methodProtoReference))); + dexBuilder.internMethodProtoReference(method_prototype196))); } @@ -5970,49 +6730,46 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format4rcc_method" - // smaliTreeWalker.g:1135:1: insn_format4rcc_method : ^( I_STATEMENT_FORMAT4rcc_METHOD INSTRUCTION_FORMAT4rcc_METHOD register_range method_reference method_prototype ) ; + // smaliTreeWalker.g:1240:1: insn_format4rcc_method : ^( I_STATEMENT_FORMAT4rcc_METHOD INSTRUCTION_FORMAT4rcc_METHOD register_range method_reference method_prototype ) ; public final void insn_format4rcc_method() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT4rcc_METHOD177=null; - TreeRuleReturnScope register_range178 =null; - ImmutableMethodReference method_reference179 =null; - TreeRuleReturnScope method_prototype180 =null; + CommonTree INSTRUCTION_FORMAT4rcc_METHOD197=null; + TreeRuleReturnScope register_range198 =null; + ImmutableMethodReference method_reference199 =null; + ImmutableMethodProtoReference method_prototype200 =null; try { - // smaliTreeWalker.g:1136:3: ( ^( I_STATEMENT_FORMAT4rcc_METHOD INSTRUCTION_FORMAT4rcc_METHOD register_range method_reference method_prototype ) ) - // smaliTreeWalker.g:1137:5: ^( I_STATEMENT_FORMAT4rcc_METHOD INSTRUCTION_FORMAT4rcc_METHOD register_range method_reference method_prototype ) + // smaliTreeWalker.g:1241:3: ( ^( I_STATEMENT_FORMAT4rcc_METHOD INSTRUCTION_FORMAT4rcc_METHOD register_range method_reference method_prototype ) ) + // smaliTreeWalker.g:1242:5: ^( I_STATEMENT_FORMAT4rcc_METHOD INSTRUCTION_FORMAT4rcc_METHOD register_range method_reference method_prototype ) { - match(input,I_STATEMENT_FORMAT4rcc_METHOD,FOLLOW_I_STATEMENT_FORMAT4rcc_METHOD_in_insn_format4rcc_method2995); + match(input,I_STATEMENT_FORMAT4rcc_METHOD,FOLLOW_I_STATEMENT_FORMAT4rcc_METHOD_in_insn_format4rcc_method3306); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT4rcc_METHOD177=(CommonTree)match(input,INSTRUCTION_FORMAT4rcc_METHOD,FOLLOW_INSTRUCTION_FORMAT4rcc_METHOD_in_insn_format4rcc_method2997); - pushFollow(FOLLOW_register_range_in_insn_format4rcc_method2999); - register_range178=register_range(); + INSTRUCTION_FORMAT4rcc_METHOD197=(CommonTree)match(input,INSTRUCTION_FORMAT4rcc_METHOD,FOLLOW_INSTRUCTION_FORMAT4rcc_METHOD_in_insn_format4rcc_method3308); + pushFollow(FOLLOW_register_range_in_insn_format4rcc_method3310); + register_range198=register_range(); state._fsp--; - pushFollow(FOLLOW_method_reference_in_insn_format4rcc_method3001); - method_reference179=method_reference(); + pushFollow(FOLLOW_method_reference_in_insn_format4rcc_method3312); + method_reference199=method_reference(); state._fsp--; - pushFollow(FOLLOW_method_prototype_in_insn_format4rcc_method3003); - method_prototype180=method_prototype(); + pushFollow(FOLLOW_method_prototype_in_insn_format4rcc_method3314); + method_prototype200=method_prototype(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT4rcc_METHOD177!=null?INSTRUCTION_FORMAT4rcc_METHOD177.getText():null)); - int startRegister = (register_range178!=null?((smaliTreeWalker.register_range_return)register_range178).startRegister:0); - int endRegister = (register_range178!=null?((smaliTreeWalker.register_range_return)register_range178).endRegister:0); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT4rcc_METHOD197!=null?INSTRUCTION_FORMAT4rcc_METHOD197.getText():null)); + int startRegister = (register_range198!=null?((smaliTreeWalker.register_range_return)register_range198).startRegister:0); + int endRegister = (register_range198!=null?((smaliTreeWalker.register_range_return)register_range198).endRegister:0); int registerCount = endRegister-startRegister+1; - ImmutableMethodReference methodReference = method_reference179; - ImmutableMethodProtoReference methodProtoReference = new ImmutableMethodProtoReference( - (method_prototype180!=null?((smaliTreeWalker.method_prototype_return)method_prototype180).parameters:null), - (method_prototype180!=null?((smaliTreeWalker.method_prototype_return)method_prototype180).returnType:null)); + ImmutableMethodReference methodReference = method_reference199; method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction4rcc(opcode, startRegister, registerCount, dexBuilder.internMethodReference(methodReference), - dexBuilder.internMethodProtoReference(methodProtoReference))); + dexBuilder.internMethodProtoReference(method_prototype200))); } @@ -6030,31 +6787,31 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_format51l_type" - // smaliTreeWalker.g:1155:1: insn_format51l_type : ^( I_STATEMENT_FORMAT51l INSTRUCTION_FORMAT51l REGISTER fixed_64bit_literal ) ; + // smaliTreeWalker.g:1257:1: insn_format51l_type : ^( I_STATEMENT_FORMAT51l INSTRUCTION_FORMAT51l REGISTER fixed_64bit_literal ) ; public final void insn_format51l_type() throws RecognitionException { - CommonTree INSTRUCTION_FORMAT51l181=null; - CommonTree REGISTER182=null; - long fixed_64bit_literal183 =0; + CommonTree INSTRUCTION_FORMAT51l201=null; + CommonTree REGISTER202=null; + long fixed_64bit_literal203 =0; try { - // smaliTreeWalker.g:1156:3: ( ^( I_STATEMENT_FORMAT51l INSTRUCTION_FORMAT51l REGISTER fixed_64bit_literal ) ) - // smaliTreeWalker.g:1157:5: ^( I_STATEMENT_FORMAT51l INSTRUCTION_FORMAT51l REGISTER fixed_64bit_literal ) + // smaliTreeWalker.g:1258:3: ( ^( I_STATEMENT_FORMAT51l INSTRUCTION_FORMAT51l REGISTER fixed_64bit_literal ) ) + // smaliTreeWalker.g:1259:5: ^( I_STATEMENT_FORMAT51l INSTRUCTION_FORMAT51l REGISTER fixed_64bit_literal ) { - match(input,I_STATEMENT_FORMAT51l,FOLLOW_I_STATEMENT_FORMAT51l_in_insn_format51l_type3026); + match(input,I_STATEMENT_FORMAT51l,FOLLOW_I_STATEMENT_FORMAT51l_in_insn_format51l_type3337); match(input, Token.DOWN, null); - INSTRUCTION_FORMAT51l181=(CommonTree)match(input,INSTRUCTION_FORMAT51l,FOLLOW_INSTRUCTION_FORMAT51l_in_insn_format51l_type3028); - REGISTER182=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format51l_type3030); - pushFollow(FOLLOW_fixed_64bit_literal_in_insn_format51l_type3032); - fixed_64bit_literal183=fixed_64bit_literal(); + INSTRUCTION_FORMAT51l201=(CommonTree)match(input,INSTRUCTION_FORMAT51l,FOLLOW_INSTRUCTION_FORMAT51l_in_insn_format51l_type3339); + REGISTER202=(CommonTree)match(input,REGISTER,FOLLOW_REGISTER_in_insn_format51l_type3341); + pushFollow(FOLLOW_fixed_64bit_literal_in_insn_format51l_type3343); + fixed_64bit_literal203=fixed_64bit_literal(); state._fsp--; match(input, Token.UP, null); - Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT51l181!=null?INSTRUCTION_FORMAT51l181.getText():null)); - short regA = parseRegister_byte((REGISTER182!=null?REGISTER182.getText():null)); + Opcode opcode = opcodes.getOpcodeByName((INSTRUCTION_FORMAT51l201!=null?INSTRUCTION_FORMAT51l201.getText():null)); + short regA = parseRegister_byte((REGISTER202!=null?REGISTER202.getText():null)); - long litB = fixed_64bit_literal183; + long litB = fixed_64bit_literal203; method_stack.peek().methodBuilder.addInstruction(new BuilderInstruction51l(opcode, regA, litB)); @@ -6074,36 +6831,36 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_array_data_directive" - // smaliTreeWalker.g:1167:1: insn_array_data_directive : ^( I_STATEMENT_ARRAY_DATA ^( I_ARRAY_ELEMENT_SIZE short_integral_literal ) array_elements ) ; + // smaliTreeWalker.g:1269:1: insn_array_data_directive : ^( I_STATEMENT_ARRAY_DATA ^( I_ARRAY_ELEMENT_SIZE short_integral_literal ) array_elements ) ; public final void insn_array_data_directive() throws RecognitionException { - short short_integral_literal184 =0; - List<Number> array_elements185 =null; + short short_integral_literal204 =0; + List<Number> array_elements205 =null; try { - // smaliTreeWalker.g:1168:3: ( ^( I_STATEMENT_ARRAY_DATA ^( I_ARRAY_ELEMENT_SIZE short_integral_literal ) array_elements ) ) - // smaliTreeWalker.g:1169:5: ^( I_STATEMENT_ARRAY_DATA ^( I_ARRAY_ELEMENT_SIZE short_integral_literal ) array_elements ) + // smaliTreeWalker.g:1270:3: ( ^( I_STATEMENT_ARRAY_DATA ^( I_ARRAY_ELEMENT_SIZE short_integral_literal ) array_elements ) ) + // smaliTreeWalker.g:1271:5: ^( I_STATEMENT_ARRAY_DATA ^( I_ARRAY_ELEMENT_SIZE short_integral_literal ) array_elements ) { - match(input,I_STATEMENT_ARRAY_DATA,FOLLOW_I_STATEMENT_ARRAY_DATA_in_insn_array_data_directive3055); + match(input,I_STATEMENT_ARRAY_DATA,FOLLOW_I_STATEMENT_ARRAY_DATA_in_insn_array_data_directive3366); match(input, Token.DOWN, null); - match(input,I_ARRAY_ELEMENT_SIZE,FOLLOW_I_ARRAY_ELEMENT_SIZE_in_insn_array_data_directive3058); + match(input,I_ARRAY_ELEMENT_SIZE,FOLLOW_I_ARRAY_ELEMENT_SIZE_in_insn_array_data_directive3369); match(input, Token.DOWN, null); - pushFollow(FOLLOW_short_integral_literal_in_insn_array_data_directive3060); - short_integral_literal184=short_integral_literal(); + pushFollow(FOLLOW_short_integral_literal_in_insn_array_data_directive3371); + short_integral_literal204=short_integral_literal(); state._fsp--; match(input, Token.UP, null); - pushFollow(FOLLOW_array_elements_in_insn_array_data_directive3063); - array_elements185=array_elements(); + pushFollow(FOLLOW_array_elements_in_insn_array_data_directive3374); + array_elements205=array_elements(); state._fsp--; match(input, Token.UP, null); - int elementWidth = short_integral_literal184; - List<Number> elements = array_elements185; + int elementWidth = short_integral_literal204; + List<Number> elements = array_elements205; - method_stack.peek().methodBuilder.addInstruction(new BuilderArrayPayload(elementWidth, array_elements185)); + method_stack.peek().methodBuilder.addInstruction(new BuilderArrayPayload(elementWidth, array_elements205)); } @@ -6121,35 +6878,35 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_packed_switch_directive" - // smaliTreeWalker.g:1177:1: insn_packed_switch_directive : ^( I_STATEMENT_PACKED_SWITCH ^( I_PACKED_SWITCH_START_KEY fixed_32bit_literal ) packed_switch_elements ) ; + // smaliTreeWalker.g:1279:1: insn_packed_switch_directive : ^( I_STATEMENT_PACKED_SWITCH ^( I_PACKED_SWITCH_START_KEY fixed_32bit_literal ) packed_switch_elements ) ; public final void insn_packed_switch_directive() throws RecognitionException { - int fixed_32bit_literal186 =0; - List<Label> packed_switch_elements187 =null; + int fixed_32bit_literal206 =0; + List<Label> packed_switch_elements207 =null; try { - // smaliTreeWalker.g:1178:3: ( ^( I_STATEMENT_PACKED_SWITCH ^( I_PACKED_SWITCH_START_KEY fixed_32bit_literal ) packed_switch_elements ) ) - // smaliTreeWalker.g:1179:5: ^( I_STATEMENT_PACKED_SWITCH ^( I_PACKED_SWITCH_START_KEY fixed_32bit_literal ) packed_switch_elements ) + // smaliTreeWalker.g:1280:3: ( ^( I_STATEMENT_PACKED_SWITCH ^( I_PACKED_SWITCH_START_KEY fixed_32bit_literal ) packed_switch_elements ) ) + // smaliTreeWalker.g:1281:5: ^( I_STATEMENT_PACKED_SWITCH ^( I_PACKED_SWITCH_START_KEY fixed_32bit_literal ) packed_switch_elements ) { - match(input,I_STATEMENT_PACKED_SWITCH,FOLLOW_I_STATEMENT_PACKED_SWITCH_in_insn_packed_switch_directive3085); + match(input,I_STATEMENT_PACKED_SWITCH,FOLLOW_I_STATEMENT_PACKED_SWITCH_in_insn_packed_switch_directive3396); match(input, Token.DOWN, null); - match(input,I_PACKED_SWITCH_START_KEY,FOLLOW_I_PACKED_SWITCH_START_KEY_in_insn_packed_switch_directive3088); + match(input,I_PACKED_SWITCH_START_KEY,FOLLOW_I_PACKED_SWITCH_START_KEY_in_insn_packed_switch_directive3399); match(input, Token.DOWN, null); - pushFollow(FOLLOW_fixed_32bit_literal_in_insn_packed_switch_directive3090); - fixed_32bit_literal186=fixed_32bit_literal(); + pushFollow(FOLLOW_fixed_32bit_literal_in_insn_packed_switch_directive3401); + fixed_32bit_literal206=fixed_32bit_literal(); state._fsp--; match(input, Token.UP, null); - pushFollow(FOLLOW_packed_switch_elements_in_insn_packed_switch_directive3093); - packed_switch_elements187=packed_switch_elements(); + pushFollow(FOLLOW_packed_switch_elements_in_insn_packed_switch_directive3404); + packed_switch_elements207=packed_switch_elements(); state._fsp--; match(input, Token.UP, null); - int startKey = fixed_32bit_literal186; + int startKey = fixed_32bit_literal206; method_stack.peek().methodBuilder.addInstruction(new BuilderPackedSwitchPayload(startKey, - packed_switch_elements187)); + packed_switch_elements207)); } @@ -6167,24 +6924,24 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "insn_sparse_switch_directive" - // smaliTreeWalker.g:1186:1: insn_sparse_switch_directive : ^( I_STATEMENT_SPARSE_SWITCH sparse_switch_elements ) ; + // smaliTreeWalker.g:1288:1: insn_sparse_switch_directive : ^( I_STATEMENT_SPARSE_SWITCH sparse_switch_elements ) ; public final void insn_sparse_switch_directive() throws RecognitionException { - List<SwitchLabelElement> sparse_switch_elements188 =null; + List<SwitchLabelElement> sparse_switch_elements208 =null; try { - // smaliTreeWalker.g:1187:3: ( ^( I_STATEMENT_SPARSE_SWITCH sparse_switch_elements ) ) - // smaliTreeWalker.g:1188:5: ^( I_STATEMENT_SPARSE_SWITCH sparse_switch_elements ) + // smaliTreeWalker.g:1289:3: ( ^( I_STATEMENT_SPARSE_SWITCH sparse_switch_elements ) ) + // smaliTreeWalker.g:1290:5: ^( I_STATEMENT_SPARSE_SWITCH sparse_switch_elements ) { - match(input,I_STATEMENT_SPARSE_SWITCH,FOLLOW_I_STATEMENT_SPARSE_SWITCH_in_insn_sparse_switch_directive3117); + match(input,I_STATEMENT_SPARSE_SWITCH,FOLLOW_I_STATEMENT_SPARSE_SWITCH_in_insn_sparse_switch_directive3428); match(input, Token.DOWN, null); - pushFollow(FOLLOW_sparse_switch_elements_in_insn_sparse_switch_directive3119); - sparse_switch_elements188=sparse_switch_elements(); + pushFollow(FOLLOW_sparse_switch_elements_in_insn_sparse_switch_directive3430); + sparse_switch_elements208=sparse_switch_elements(); state._fsp--; match(input, Token.UP, null); - method_stack.peek().methodBuilder.addInstruction(new BuilderSparseSwitchPayload(sparse_switch_elements188)); + method_stack.peek().methodBuilder.addInstruction(new BuilderSparseSwitchPayload(sparse_switch_elements208)); } @@ -6202,49 +6959,49 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "array_descriptor" - // smaliTreeWalker.g:1193:1: array_descriptor returns [String type] : ARRAY_TYPE_PREFIX ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR ) ; + // smaliTreeWalker.g:1295:1: array_descriptor returns [String type] : ARRAY_TYPE_PREFIX ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR ) ; public final String array_descriptor() throws RecognitionException { String type = null; - CommonTree ARRAY_TYPE_PREFIX189=null; - CommonTree PRIMITIVE_TYPE190=null; - CommonTree CLASS_DESCRIPTOR191=null; + CommonTree ARRAY_TYPE_PREFIX209=null; + CommonTree PRIMITIVE_TYPE210=null; + CommonTree CLASS_DESCRIPTOR211=null; try { - // smaliTreeWalker.g:1194:3: ( ARRAY_TYPE_PREFIX ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR ) ) - // smaliTreeWalker.g:1194:5: ARRAY_TYPE_PREFIX ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR ) + // smaliTreeWalker.g:1296:3: ( ARRAY_TYPE_PREFIX ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR ) ) + // smaliTreeWalker.g:1296:5: ARRAY_TYPE_PREFIX ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR ) { - ARRAY_TYPE_PREFIX189=(CommonTree)match(input,ARRAY_TYPE_PREFIX,FOLLOW_ARRAY_TYPE_PREFIX_in_array_descriptor3140); - // smaliTreeWalker.g:1194:23: ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR ) - int alt37=2; - int LA37_0 = input.LA(1); - if ( (LA37_0==PRIMITIVE_TYPE) ) { - alt37=1; + ARRAY_TYPE_PREFIX209=(CommonTree)match(input,ARRAY_TYPE_PREFIX,FOLLOW_ARRAY_TYPE_PREFIX_in_array_descriptor3451); + // smaliTreeWalker.g:1296:23: ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR ) + int alt39=2; + int LA39_0 = input.LA(1); + if ( (LA39_0==PRIMITIVE_TYPE) ) { + alt39=1; } - else if ( (LA37_0==CLASS_DESCRIPTOR) ) { - alt37=2; + else if ( (LA39_0==CLASS_DESCRIPTOR) ) { + alt39=2; } else { NoViableAltException nvae = - new NoViableAltException("", 37, 0, input); + new NoViableAltException("", 39, 0, input); throw nvae; } - switch (alt37) { + switch (alt39) { case 1 : - // smaliTreeWalker.g:1194:25: PRIMITIVE_TYPE + // smaliTreeWalker.g:1296:25: PRIMITIVE_TYPE { - PRIMITIVE_TYPE190=(CommonTree)match(input,PRIMITIVE_TYPE,FOLLOW_PRIMITIVE_TYPE_in_array_descriptor3144); - type = (ARRAY_TYPE_PREFIX189!=null?ARRAY_TYPE_PREFIX189.getText():null) + (PRIMITIVE_TYPE190!=null?PRIMITIVE_TYPE190.getText():null); + PRIMITIVE_TYPE210=(CommonTree)match(input,PRIMITIVE_TYPE,FOLLOW_PRIMITIVE_TYPE_in_array_descriptor3455); + type = (ARRAY_TYPE_PREFIX209!=null?ARRAY_TYPE_PREFIX209.getText():null) + (PRIMITIVE_TYPE210!=null?PRIMITIVE_TYPE210.getText():null); } break; case 2 : - // smaliTreeWalker.g:1195:25: CLASS_DESCRIPTOR + // smaliTreeWalker.g:1297:25: CLASS_DESCRIPTOR { - CLASS_DESCRIPTOR191=(CommonTree)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_array_descriptor3172); - type = (ARRAY_TYPE_PREFIX189!=null?ARRAY_TYPE_PREFIX189.getText():null) + (CLASS_DESCRIPTOR191!=null?CLASS_DESCRIPTOR191.getText():null); + CLASS_DESCRIPTOR211=(CommonTree)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_array_descriptor3483); + type = (ARRAY_TYPE_PREFIX209!=null?ARRAY_TYPE_PREFIX209.getText():null) + (CLASS_DESCRIPTOR211!=null?CLASS_DESCRIPTOR211.getText():null); } break; @@ -6271,63 +7028,63 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "nonvoid_type_descriptor" - // smaliTreeWalker.g:1197:1: nonvoid_type_descriptor returns [String type] : ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR | array_descriptor ) ; + // smaliTreeWalker.g:1299:1: nonvoid_type_descriptor returns [String type] : ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR | array_descriptor ) ; public final smaliTreeWalker.nonvoid_type_descriptor_return nonvoid_type_descriptor() throws RecognitionException { smaliTreeWalker.nonvoid_type_descriptor_return retval = new smaliTreeWalker.nonvoid_type_descriptor_return(); retval.start = input.LT(1); - String array_descriptor192 =null; + String array_descriptor212 =null; try { - // smaliTreeWalker.g:1198:3: ( ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR | array_descriptor ) ) - // smaliTreeWalker.g:1198:5: ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR | array_descriptor ) + // smaliTreeWalker.g:1300:3: ( ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR | array_descriptor ) ) + // smaliTreeWalker.g:1300:5: ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR | array_descriptor ) { - // smaliTreeWalker.g:1198:5: ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR | array_descriptor ) - int alt38=3; + // smaliTreeWalker.g:1300:5: ( PRIMITIVE_TYPE | CLASS_DESCRIPTOR | array_descriptor ) + int alt40=3; switch ( input.LA(1) ) { case PRIMITIVE_TYPE: { - alt38=1; + alt40=1; } break; case CLASS_DESCRIPTOR: { - alt38=2; + alt40=2; } break; case ARRAY_TYPE_PREFIX: { - alt38=3; + alt40=3; } break; default: NoViableAltException nvae = - new NoViableAltException("", 38, 0, input); + new NoViableAltException("", 40, 0, input); throw nvae; } - switch (alt38) { + switch (alt40) { case 1 : - // smaliTreeWalker.g:1198:6: PRIMITIVE_TYPE + // smaliTreeWalker.g:1300:6: PRIMITIVE_TYPE { - match(input,PRIMITIVE_TYPE,FOLLOW_PRIMITIVE_TYPE_in_nonvoid_type_descriptor3190); + match(input,PRIMITIVE_TYPE,FOLLOW_PRIMITIVE_TYPE_in_nonvoid_type_descriptor3501); retval.type = input.getTokenStream().toString(input.getTreeAdaptor().getTokenStartIndex(retval.start),input.getTreeAdaptor().getTokenStopIndex(retval.start)); } break; case 2 : - // smaliTreeWalker.g:1199:5: CLASS_DESCRIPTOR + // smaliTreeWalker.g:1301:5: CLASS_DESCRIPTOR { - match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_nonvoid_type_descriptor3198); + match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_nonvoid_type_descriptor3509); retval.type = input.getTokenStream().toString(input.getTreeAdaptor().getTokenStartIndex(retval.start),input.getTreeAdaptor().getTokenStopIndex(retval.start)); } break; case 3 : - // smaliTreeWalker.g:1200:5: array_descriptor + // smaliTreeWalker.g:1302:5: array_descriptor { - pushFollow(FOLLOW_array_descriptor_in_nonvoid_type_descriptor3206); - array_descriptor192=array_descriptor(); + pushFollow(FOLLOW_array_descriptor_in_nonvoid_type_descriptor3517); + array_descriptor212=array_descriptor(); state._fsp--; - retval.type = array_descriptor192; + retval.type = array_descriptor212; } break; @@ -6354,49 +7111,49 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "reference_type_descriptor" - // smaliTreeWalker.g:1203:1: reference_type_descriptor returns [String type] : ( CLASS_DESCRIPTOR | array_descriptor ) ; + // smaliTreeWalker.g:1305:1: reference_type_descriptor returns [String type] : ( CLASS_DESCRIPTOR | array_descriptor ) ; public final smaliTreeWalker.reference_type_descriptor_return reference_type_descriptor() throws RecognitionException { smaliTreeWalker.reference_type_descriptor_return retval = new smaliTreeWalker.reference_type_descriptor_return(); retval.start = input.LT(1); - String array_descriptor193 =null; + String array_descriptor213 =null; try { - // smaliTreeWalker.g:1204:3: ( ( CLASS_DESCRIPTOR | array_descriptor ) ) - // smaliTreeWalker.g:1204:5: ( CLASS_DESCRIPTOR | array_descriptor ) + // smaliTreeWalker.g:1306:3: ( ( CLASS_DESCRIPTOR | array_descriptor ) ) + // smaliTreeWalker.g:1306:5: ( CLASS_DESCRIPTOR | array_descriptor ) { - // smaliTreeWalker.g:1204:5: ( CLASS_DESCRIPTOR | array_descriptor ) - int alt39=2; - int LA39_0 = input.LA(1); - if ( (LA39_0==CLASS_DESCRIPTOR) ) { - alt39=1; + // smaliTreeWalker.g:1306:5: ( CLASS_DESCRIPTOR | array_descriptor ) + int alt41=2; + int LA41_0 = input.LA(1); + if ( (LA41_0==CLASS_DESCRIPTOR) ) { + alt41=1; } - else if ( (LA39_0==ARRAY_TYPE_PREFIX) ) { - alt39=2; + else if ( (LA41_0==ARRAY_TYPE_PREFIX) ) { + alt41=2; } else { NoViableAltException nvae = - new NoViableAltException("", 39, 0, input); + new NoViableAltException("", 41, 0, input); throw nvae; } - switch (alt39) { + switch (alt41) { case 1 : - // smaliTreeWalker.g:1204:6: CLASS_DESCRIPTOR + // smaliTreeWalker.g:1306:6: CLASS_DESCRIPTOR { - match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_reference_type_descriptor3227); + match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_reference_type_descriptor3538); retval.type = input.getTokenStream().toString(input.getTreeAdaptor().getTokenStartIndex(retval.start),input.getTreeAdaptor().getTokenStopIndex(retval.start)); } break; case 2 : - // smaliTreeWalker.g:1205:5: array_descriptor + // smaliTreeWalker.g:1307:5: array_descriptor { - pushFollow(FOLLOW_array_descriptor_in_reference_type_descriptor3235); - array_descriptor193=array_descriptor(); + pushFollow(FOLLOW_array_descriptor_in_reference_type_descriptor3546); + array_descriptor213=array_descriptor(); state._fsp--; - retval.type = array_descriptor193; + retval.type = array_descriptor213; } break; @@ -6419,46 +7176,46 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "type_descriptor" - // smaliTreeWalker.g:1208:1: type_descriptor returns [String type] : ( VOID_TYPE | nonvoid_type_descriptor ); + // smaliTreeWalker.g:1310:1: type_descriptor returns [String type] : ( VOID_TYPE | nonvoid_type_descriptor ); public final String type_descriptor() throws RecognitionException { String type = null; - TreeRuleReturnScope nonvoid_type_descriptor194 =null; + TreeRuleReturnScope nonvoid_type_descriptor214 =null; try { - // smaliTreeWalker.g:1209:3: ( VOID_TYPE | nonvoid_type_descriptor ) - int alt40=2; - int LA40_0 = input.LA(1); - if ( (LA40_0==VOID_TYPE) ) { - alt40=1; + // smaliTreeWalker.g:1311:3: ( VOID_TYPE | nonvoid_type_descriptor ) + int alt42=2; + int LA42_0 = input.LA(1); + if ( (LA42_0==VOID_TYPE) ) { + alt42=1; } - else if ( (LA40_0==ARRAY_TYPE_PREFIX||LA40_0==CLASS_DESCRIPTOR||LA40_0==PRIMITIVE_TYPE) ) { - alt40=2; + else if ( (LA42_0==ARRAY_TYPE_PREFIX||LA42_0==CLASS_DESCRIPTOR||LA42_0==PRIMITIVE_TYPE) ) { + alt42=2; } else { NoViableAltException nvae = - new NoViableAltException("", 40, 0, input); + new NoViableAltException("", 42, 0, input); throw nvae; } - switch (alt40) { + switch (alt42) { case 1 : - // smaliTreeWalker.g:1209:5: VOID_TYPE + // smaliTreeWalker.g:1311:5: VOID_TYPE { - match(input,VOID_TYPE,FOLLOW_VOID_TYPE_in_type_descriptor3255); + match(input,VOID_TYPE,FOLLOW_VOID_TYPE_in_type_descriptor3566); type = "V"; } break; case 2 : - // smaliTreeWalker.g:1210:5: nonvoid_type_descriptor + // smaliTreeWalker.g:1312:5: nonvoid_type_descriptor { - pushFollow(FOLLOW_nonvoid_type_descriptor_in_type_descriptor3263); - nonvoid_type_descriptor194=nonvoid_type_descriptor(); + pushFollow(FOLLOW_nonvoid_type_descriptor_in_type_descriptor3574); + nonvoid_type_descriptor214=nonvoid_type_descriptor(); state._fsp--; - type = (nonvoid_type_descriptor194!=null?((smaliTreeWalker.nonvoid_type_descriptor_return)nonvoid_type_descriptor194).type:null); + type = (nonvoid_type_descriptor214!=null?((smaliTreeWalker.nonvoid_type_descriptor_return)nonvoid_type_descriptor214).type:null); } break; @@ -6478,106 +7235,106 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "short_integral_literal" - // smaliTreeWalker.g:1213:1: short_integral_literal returns [short value] : ( long_literal | integer_literal | short_literal | char_literal | byte_literal ); + // smaliTreeWalker.g:1315:1: short_integral_literal returns [short value] : ( long_literal | integer_literal | short_literal | char_literal | byte_literal ); public final short short_integral_literal() throws RecognitionException { short value = 0; - long long_literal195 =0; - int integer_literal196 =0; - short short_literal197 =0; - char char_literal198 =0; - byte byte_literal199 =0; + long long_literal215 =0; + int integer_literal216 =0; + short short_literal217 =0; + char char_literal218 =0; + byte byte_literal219 =0; try { - // smaliTreeWalker.g:1214:3: ( long_literal | integer_literal | short_literal | char_literal | byte_literal ) - int alt41=5; + // smaliTreeWalker.g:1316:3: ( long_literal | integer_literal | short_literal | char_literal | byte_literal ) + int alt43=5; switch ( input.LA(1) ) { case LONG_LITERAL: { - alt41=1; + alt43=1; } break; case INTEGER_LITERAL: { - alt41=2; + alt43=2; } break; case SHORT_LITERAL: { - alt41=3; + alt43=3; } break; case CHAR_LITERAL: { - alt41=4; + alt43=4; } break; case BYTE_LITERAL: { - alt41=5; + alt43=5; } break; default: NoViableAltException nvae = - new NoViableAltException("", 41, 0, input); + new NoViableAltException("", 43, 0, input); throw nvae; } - switch (alt41) { + switch (alt43) { case 1 : - // smaliTreeWalker.g:1214:5: long_literal + // smaliTreeWalker.g:1316:5: long_literal { - pushFollow(FOLLOW_long_literal_in_short_integral_literal3281); - long_literal195=long_literal(); + pushFollow(FOLLOW_long_literal_in_short_integral_literal3592); + long_literal215=long_literal(); state._fsp--; - LiteralTools.checkShort(long_literal195); - value = (short)long_literal195; + LiteralTools.checkShort(long_literal215); + value = (short)long_literal215; } break; case 2 : - // smaliTreeWalker.g:1219:5: integer_literal + // smaliTreeWalker.g:1321:5: integer_literal { - pushFollow(FOLLOW_integer_literal_in_short_integral_literal3293); - integer_literal196=integer_literal(); + pushFollow(FOLLOW_integer_literal_in_short_integral_literal3604); + integer_literal216=integer_literal(); state._fsp--; - LiteralTools.checkShort(integer_literal196); - value = (short)integer_literal196; + LiteralTools.checkShort(integer_literal216); + value = (short)integer_literal216; } break; case 3 : - // smaliTreeWalker.g:1224:5: short_literal + // smaliTreeWalker.g:1326:5: short_literal { - pushFollow(FOLLOW_short_literal_in_short_integral_literal3305); - short_literal197=short_literal(); + pushFollow(FOLLOW_short_literal_in_short_integral_literal3616); + short_literal217=short_literal(); state._fsp--; - value = short_literal197; + value = short_literal217; } break; case 4 : - // smaliTreeWalker.g:1225:5: char_literal + // smaliTreeWalker.g:1327:5: char_literal { - pushFollow(FOLLOW_char_literal_in_short_integral_literal3313); - char_literal198=char_literal(); + pushFollow(FOLLOW_char_literal_in_short_integral_literal3624); + char_literal218=char_literal(); state._fsp--; - value = (short)char_literal198; + value = (short)char_literal218; } break; case 5 : - // smaliTreeWalker.g:1226:5: byte_literal + // smaliTreeWalker.g:1328:5: byte_literal { - pushFollow(FOLLOW_byte_literal_in_short_integral_literal3321); - byte_literal199=byte_literal(); + pushFollow(FOLLOW_byte_literal_in_short_integral_literal3632); + byte_literal219=byte_literal(); state._fsp--; - value = byte_literal199; + value = byte_literal219; } break; @@ -6597,87 +7354,87 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "integral_literal" - // smaliTreeWalker.g:1228:1: integral_literal returns [int value] : ( long_literal | integer_literal | short_literal | byte_literal ); + // smaliTreeWalker.g:1330:1: integral_literal returns [int value] : ( long_literal | integer_literal | short_literal | byte_literal ); public final int integral_literal() throws RecognitionException { int value = 0; - long long_literal200 =0; - int integer_literal201 =0; - short short_literal202 =0; - byte byte_literal203 =0; + long long_literal220 =0; + int integer_literal221 =0; + short short_literal222 =0; + byte byte_literal223 =0; try { - // smaliTreeWalker.g:1229:3: ( long_literal | integer_literal | short_literal | byte_literal ) - int alt42=4; + // smaliTreeWalker.g:1331:3: ( long_literal | integer_literal | short_literal | byte_literal ) + int alt44=4; switch ( input.LA(1) ) { case LONG_LITERAL: { - alt42=1; + alt44=1; } break; case INTEGER_LITERAL: { - alt42=2; + alt44=2; } break; case SHORT_LITERAL: { - alt42=3; + alt44=3; } break; case BYTE_LITERAL: { - alt42=4; + alt44=4; } break; default: NoViableAltException nvae = - new NoViableAltException("", 42, 0, input); + new NoViableAltException("", 44, 0, input); throw nvae; } - switch (alt42) { + switch (alt44) { case 1 : - // smaliTreeWalker.g:1229:5: long_literal + // smaliTreeWalker.g:1331:5: long_literal { - pushFollow(FOLLOW_long_literal_in_integral_literal3336); - long_literal200=long_literal(); + pushFollow(FOLLOW_long_literal_in_integral_literal3647); + long_literal220=long_literal(); state._fsp--; - LiteralTools.checkInt(long_literal200); - value = (int)long_literal200; + LiteralTools.checkInt(long_literal220); + value = (int)long_literal220; } break; case 2 : - // smaliTreeWalker.g:1234:5: integer_literal + // smaliTreeWalker.g:1336:5: integer_literal { - pushFollow(FOLLOW_integer_literal_in_integral_literal3348); - integer_literal201=integer_literal(); + pushFollow(FOLLOW_integer_literal_in_integral_literal3659); + integer_literal221=integer_literal(); state._fsp--; - value = integer_literal201; + value = integer_literal221; } break; case 3 : - // smaliTreeWalker.g:1235:5: short_literal + // smaliTreeWalker.g:1337:5: short_literal { - pushFollow(FOLLOW_short_literal_in_integral_literal3356); - short_literal202=short_literal(); + pushFollow(FOLLOW_short_literal_in_integral_literal3667); + short_literal222=short_literal(); state._fsp--; - value = short_literal202; + value = short_literal222; } break; case 4 : - // smaliTreeWalker.g:1236:5: byte_literal + // smaliTreeWalker.g:1338:5: byte_literal { - pushFollow(FOLLOW_byte_literal_in_integral_literal3364); - byte_literal203=byte_literal(); + pushFollow(FOLLOW_byte_literal_in_integral_literal3675); + byte_literal223=byte_literal(); state._fsp--; - value = byte_literal203; + value = byte_literal223; } break; @@ -6697,19 +7454,19 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "integer_literal" - // smaliTreeWalker.g:1239:1: integer_literal returns [int value] : INTEGER_LITERAL ; + // smaliTreeWalker.g:1341:1: integer_literal returns [int value] : INTEGER_LITERAL ; public final int integer_literal() throws RecognitionException { int value = 0; - CommonTree INTEGER_LITERAL204=null; + CommonTree INTEGER_LITERAL224=null; try { - // smaliTreeWalker.g:1240:3: ( INTEGER_LITERAL ) - // smaliTreeWalker.g:1240:5: INTEGER_LITERAL + // smaliTreeWalker.g:1342:3: ( INTEGER_LITERAL ) + // smaliTreeWalker.g:1342:5: INTEGER_LITERAL { - INTEGER_LITERAL204=(CommonTree)match(input,INTEGER_LITERAL,FOLLOW_INTEGER_LITERAL_in_integer_literal3380); - value = LiteralTools.parseInt((INTEGER_LITERAL204!=null?INTEGER_LITERAL204.getText():null)); + INTEGER_LITERAL224=(CommonTree)match(input,INTEGER_LITERAL,FOLLOW_INTEGER_LITERAL_in_integer_literal3691); + value = LiteralTools.parseInt((INTEGER_LITERAL224!=null?INTEGER_LITERAL224.getText():null)); } } @@ -6727,19 +7484,19 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "long_literal" - // smaliTreeWalker.g:1242:1: long_literal returns [long value] : LONG_LITERAL ; + // smaliTreeWalker.g:1344:1: long_literal returns [long value] : LONG_LITERAL ; public final long long_literal() throws RecognitionException { long value = 0; - CommonTree LONG_LITERAL205=null; + CommonTree LONG_LITERAL225=null; try { - // smaliTreeWalker.g:1243:3: ( LONG_LITERAL ) - // smaliTreeWalker.g:1243:5: LONG_LITERAL + // smaliTreeWalker.g:1345:3: ( LONG_LITERAL ) + // smaliTreeWalker.g:1345:5: LONG_LITERAL { - LONG_LITERAL205=(CommonTree)match(input,LONG_LITERAL,FOLLOW_LONG_LITERAL_in_long_literal3395); - value = LiteralTools.parseLong((LONG_LITERAL205!=null?LONG_LITERAL205.getText():null)); + LONG_LITERAL225=(CommonTree)match(input,LONG_LITERAL,FOLLOW_LONG_LITERAL_in_long_literal3706); + value = LiteralTools.parseLong((LONG_LITERAL225!=null?LONG_LITERAL225.getText():null)); } } @@ -6757,19 +7514,19 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "short_literal" - // smaliTreeWalker.g:1245:1: short_literal returns [short value] : SHORT_LITERAL ; + // smaliTreeWalker.g:1347:1: short_literal returns [short value] : SHORT_LITERAL ; public final short short_literal() throws RecognitionException { short value = 0; - CommonTree SHORT_LITERAL206=null; + CommonTree SHORT_LITERAL226=null; try { - // smaliTreeWalker.g:1246:3: ( SHORT_LITERAL ) - // smaliTreeWalker.g:1246:5: SHORT_LITERAL + // smaliTreeWalker.g:1348:3: ( SHORT_LITERAL ) + // smaliTreeWalker.g:1348:5: SHORT_LITERAL { - SHORT_LITERAL206=(CommonTree)match(input,SHORT_LITERAL,FOLLOW_SHORT_LITERAL_in_short_literal3410); - value = LiteralTools.parseShort((SHORT_LITERAL206!=null?SHORT_LITERAL206.getText():null)); + SHORT_LITERAL226=(CommonTree)match(input,SHORT_LITERAL,FOLLOW_SHORT_LITERAL_in_short_literal3721); + value = LiteralTools.parseShort((SHORT_LITERAL226!=null?SHORT_LITERAL226.getText():null)); } } @@ -6787,19 +7544,19 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "byte_literal" - // smaliTreeWalker.g:1248:1: byte_literal returns [byte value] : BYTE_LITERAL ; + // smaliTreeWalker.g:1350:1: byte_literal returns [byte value] : BYTE_LITERAL ; public final byte byte_literal() throws RecognitionException { byte value = 0; - CommonTree BYTE_LITERAL207=null; + CommonTree BYTE_LITERAL227=null; try { - // smaliTreeWalker.g:1249:3: ( BYTE_LITERAL ) - // smaliTreeWalker.g:1249:5: BYTE_LITERAL + // smaliTreeWalker.g:1351:3: ( BYTE_LITERAL ) + // smaliTreeWalker.g:1351:5: BYTE_LITERAL { - BYTE_LITERAL207=(CommonTree)match(input,BYTE_LITERAL,FOLLOW_BYTE_LITERAL_in_byte_literal3425); - value = LiteralTools.parseByte((BYTE_LITERAL207!=null?BYTE_LITERAL207.getText():null)); + BYTE_LITERAL227=(CommonTree)match(input,BYTE_LITERAL,FOLLOW_BYTE_LITERAL_in_byte_literal3736); + value = LiteralTools.parseByte((BYTE_LITERAL227!=null?BYTE_LITERAL227.getText():null)); } } @@ -6817,19 +7574,19 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "float_literal" - // smaliTreeWalker.g:1251:1: float_literal returns [float value] : FLOAT_LITERAL ; + // smaliTreeWalker.g:1353:1: float_literal returns [float value] : FLOAT_LITERAL ; public final float float_literal() throws RecognitionException { float value = 0.0f; - CommonTree FLOAT_LITERAL208=null; + CommonTree FLOAT_LITERAL228=null; try { - // smaliTreeWalker.g:1252:3: ( FLOAT_LITERAL ) - // smaliTreeWalker.g:1252:5: FLOAT_LITERAL + // smaliTreeWalker.g:1354:3: ( FLOAT_LITERAL ) + // smaliTreeWalker.g:1354:5: FLOAT_LITERAL { - FLOAT_LITERAL208=(CommonTree)match(input,FLOAT_LITERAL,FOLLOW_FLOAT_LITERAL_in_float_literal3440); - value = LiteralTools.parseFloat((FLOAT_LITERAL208!=null?FLOAT_LITERAL208.getText():null)); + FLOAT_LITERAL228=(CommonTree)match(input,FLOAT_LITERAL,FOLLOW_FLOAT_LITERAL_in_float_literal3751); + value = LiteralTools.parseFloat((FLOAT_LITERAL228!=null?FLOAT_LITERAL228.getText():null)); } } @@ -6847,19 +7604,19 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "double_literal" - // smaliTreeWalker.g:1254:1: double_literal returns [double value] : DOUBLE_LITERAL ; + // smaliTreeWalker.g:1356:1: double_literal returns [double value] : DOUBLE_LITERAL ; public final double double_literal() throws RecognitionException { double value = 0.0; - CommonTree DOUBLE_LITERAL209=null; + CommonTree DOUBLE_LITERAL229=null; try { - // smaliTreeWalker.g:1255:3: ( DOUBLE_LITERAL ) - // smaliTreeWalker.g:1255:5: DOUBLE_LITERAL + // smaliTreeWalker.g:1357:3: ( DOUBLE_LITERAL ) + // smaliTreeWalker.g:1357:5: DOUBLE_LITERAL { - DOUBLE_LITERAL209=(CommonTree)match(input,DOUBLE_LITERAL,FOLLOW_DOUBLE_LITERAL_in_double_literal3455); - value = LiteralTools.parseDouble((DOUBLE_LITERAL209!=null?DOUBLE_LITERAL209.getText():null)); + DOUBLE_LITERAL229=(CommonTree)match(input,DOUBLE_LITERAL,FOLLOW_DOUBLE_LITERAL_in_double_literal3766); + value = LiteralTools.parseDouble((DOUBLE_LITERAL229!=null?DOUBLE_LITERAL229.getText():null)); } } @@ -6877,19 +7634,19 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "char_literal" - // smaliTreeWalker.g:1257:1: char_literal returns [char value] : CHAR_LITERAL ; + // smaliTreeWalker.g:1359:1: char_literal returns [char value] : CHAR_LITERAL ; public final char char_literal() throws RecognitionException { char value = 0; - CommonTree CHAR_LITERAL210=null; + CommonTree CHAR_LITERAL230=null; try { - // smaliTreeWalker.g:1258:3: ( CHAR_LITERAL ) - // smaliTreeWalker.g:1258:5: CHAR_LITERAL + // smaliTreeWalker.g:1360:3: ( CHAR_LITERAL ) + // smaliTreeWalker.g:1360:5: CHAR_LITERAL { - CHAR_LITERAL210=(CommonTree)match(input,CHAR_LITERAL,FOLLOW_CHAR_LITERAL_in_char_literal3470); - value = (CHAR_LITERAL210!=null?CHAR_LITERAL210.getText():null).charAt(1); + CHAR_LITERAL230=(CommonTree)match(input,CHAR_LITERAL,FOLLOW_CHAR_LITERAL_in_char_literal3781); + value = (CHAR_LITERAL230!=null?CHAR_LITERAL230.getText():null).charAt(1); } } @@ -6907,20 +7664,20 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "string_literal" - // smaliTreeWalker.g:1260:1: string_literal returns [String value] : STRING_LITERAL ; + // smaliTreeWalker.g:1362:1: string_literal returns [String value] : STRING_LITERAL ; public final String string_literal() throws RecognitionException { String value = null; - CommonTree STRING_LITERAL211=null; + CommonTree STRING_LITERAL231=null; try { - // smaliTreeWalker.g:1261:3: ( STRING_LITERAL ) - // smaliTreeWalker.g:1261:5: STRING_LITERAL + // smaliTreeWalker.g:1363:3: ( STRING_LITERAL ) + // smaliTreeWalker.g:1363:5: STRING_LITERAL { - STRING_LITERAL211=(CommonTree)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_string_literal3485); + STRING_LITERAL231=(CommonTree)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_string_literal3796); - value = (STRING_LITERAL211!=null?STRING_LITERAL211.getText():null); + value = (STRING_LITERAL231!=null?STRING_LITERAL231.getText():null); value = value.substring(1,value.length()-1); } @@ -6940,19 +7697,19 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "bool_literal" - // smaliTreeWalker.g:1267:1: bool_literal returns [boolean value] : BOOL_LITERAL ; + // smaliTreeWalker.g:1369:1: bool_literal returns [boolean value] : BOOL_LITERAL ; public final boolean bool_literal() throws RecognitionException { boolean value = false; - CommonTree BOOL_LITERAL212=null; + CommonTree BOOL_LITERAL232=null; try { - // smaliTreeWalker.g:1268:3: ( BOOL_LITERAL ) - // smaliTreeWalker.g:1268:5: BOOL_LITERAL + // smaliTreeWalker.g:1370:3: ( BOOL_LITERAL ) + // smaliTreeWalker.g:1370:5: BOOL_LITERAL { - BOOL_LITERAL212=(CommonTree)match(input,BOOL_LITERAL,FOLLOW_BOOL_LITERAL_in_bool_literal3504); - value = Boolean.parseBoolean((BOOL_LITERAL212!=null?BOOL_LITERAL212.getText():null)); + BOOL_LITERAL232=(CommonTree)match(input,BOOL_LITERAL,FOLLOW_BOOL_LITERAL_in_bool_literal3815); + value = Boolean.parseBoolean((BOOL_LITERAL232!=null?BOOL_LITERAL232.getText():null)); } } @@ -6970,44 +7727,44 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "array_literal" - // smaliTreeWalker.g:1270:1: array_literal returns [List<EncodedValue> elements] : ^( I_ENCODED_ARRAY ( literal )* ) ; + // smaliTreeWalker.g:1372:1: array_literal returns [List<EncodedValue> elements] : ^( I_ENCODED_ARRAY ( literal )* ) ; public final List<EncodedValue> array_literal() throws RecognitionException { List<EncodedValue> elements = null; - EncodedValue literal213 =null; + ImmutableEncodedValue literal233 =null; try { - // smaliTreeWalker.g:1271:3: ( ^( I_ENCODED_ARRAY ( literal )* ) ) - // smaliTreeWalker.g:1271:5: ^( I_ENCODED_ARRAY ( literal )* ) + // smaliTreeWalker.g:1373:3: ( ^( I_ENCODED_ARRAY ( literal )* ) ) + // smaliTreeWalker.g:1373:5: ^( I_ENCODED_ARRAY ( literal )* ) { elements = Lists.newArrayList(); - match(input,I_ENCODED_ARRAY,FOLLOW_I_ENCODED_ARRAY_in_array_literal3526); + match(input,I_ENCODED_ARRAY,FOLLOW_I_ENCODED_ARRAY_in_array_literal3837); if ( input.LA(1)==Token.DOWN ) { match(input, Token.DOWN, null); - // smaliTreeWalker.g:1272:23: ( literal )* - loop43: + // smaliTreeWalker.g:1374:23: ( literal )* + loop45: while (true) { - int alt43=2; - int LA43_0 = input.LA(1); - if ( (LA43_0==ARRAY_TYPE_PREFIX||(LA43_0 >= BOOL_LITERAL && LA43_0 <= BYTE_LITERAL)||(LA43_0 >= CHAR_LITERAL && LA43_0 <= CLASS_DESCRIPTOR)||LA43_0==DOUBLE_LITERAL||LA43_0==FLOAT_LITERAL||LA43_0==INTEGER_LITERAL||(LA43_0 >= I_ENCODED_ARRAY && LA43_0 <= I_ENCODED_METHOD)||LA43_0==I_SUBANNOTATION||LA43_0==LONG_LITERAL||LA43_0==NULL_LITERAL||LA43_0==PRIMITIVE_TYPE||LA43_0==SHORT_LITERAL||LA43_0==STRING_LITERAL||LA43_0==VOID_TYPE) ) { - alt43=1; + int alt45=2; + int LA45_0 = input.LA(1); + if ( (LA45_0==ARRAY_TYPE_PREFIX||(LA45_0 >= BOOL_LITERAL && LA45_0 <= BYTE_LITERAL)||(LA45_0 >= CHAR_LITERAL && LA45_0 <= CLASS_DESCRIPTOR)||LA45_0==DOUBLE_LITERAL||LA45_0==FLOAT_LITERAL||LA45_0==INTEGER_LITERAL||(LA45_0 >= I_ENCODED_ARRAY && LA45_0 <= I_ENCODED_METHOD_HANDLE)||LA45_0==I_METHOD_PROTOTYPE||LA45_0==I_SUBANNOTATION||LA45_0==LONG_LITERAL||LA45_0==NULL_LITERAL||LA45_0==PRIMITIVE_TYPE||LA45_0==SHORT_LITERAL||LA45_0==STRING_LITERAL||LA45_0==VOID_TYPE) ) { + alt45=1; } - switch (alt43) { + switch (alt45) { case 1 : - // smaliTreeWalker.g:1272:24: literal + // smaliTreeWalker.g:1374:24: literal { - pushFollow(FOLLOW_literal_in_array_literal3529); - literal213=literal(); + pushFollow(FOLLOW_literal_in_array_literal3840); + literal233=literal(); state._fsp--; - elements.add(literal213); + elements.add(literal233); } break; default : - break loop43; + break loop45; } } @@ -7031,40 +7788,40 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "annotations" - // smaliTreeWalker.g:1274:1: annotations returns [Set<Annotation> annotations] : ^( I_ANNOTATIONS ( annotation )* ) ; + // smaliTreeWalker.g:1376:1: annotations returns [Set<Annotation> annotations] : ^( I_ANNOTATIONS ( annotation )* ) ; public final Set<Annotation> annotations() throws RecognitionException { Set<Annotation> annotations = null; - Annotation annotation214 =null; + Annotation annotation234 =null; try { - // smaliTreeWalker.g:1275:3: ( ^( I_ANNOTATIONS ( annotation )* ) ) - // smaliTreeWalker.g:1275:5: ^( I_ANNOTATIONS ( annotation )* ) + // smaliTreeWalker.g:1377:3: ( ^( I_ANNOTATIONS ( annotation )* ) ) + // smaliTreeWalker.g:1377:5: ^( I_ANNOTATIONS ( annotation )* ) { HashMap<String, Annotation> annotationMap = Maps.newHashMap(); - match(input,I_ANNOTATIONS,FOLLOW_I_ANNOTATIONS_in_annotations3554); + match(input,I_ANNOTATIONS,FOLLOW_I_ANNOTATIONS_in_annotations3865); if ( input.LA(1)==Token.DOWN ) { match(input, Token.DOWN, null); - // smaliTreeWalker.g:1276:21: ( annotation )* - loop44: + // smaliTreeWalker.g:1378:21: ( annotation )* + loop46: while (true) { - int alt44=2; - int LA44_0 = input.LA(1); - if ( (LA44_0==I_ANNOTATION) ) { - alt44=1; + int alt46=2; + int LA46_0 = input.LA(1); + if ( (LA46_0==I_ANNOTATION) ) { + alt46=1; } - switch (alt44) { + switch (alt46) { case 1 : - // smaliTreeWalker.g:1276:22: annotation + // smaliTreeWalker.g:1378:22: annotation { - pushFollow(FOLLOW_annotation_in_annotations3557); - annotation214=annotation(); + pushFollow(FOLLOW_annotation_in_annotations3868); + annotation234=annotation(); state._fsp--; - Annotation anno = annotation214; + Annotation anno = annotation234; Annotation old = annotationMap.put(anno.getType(), anno); if (old != null) { throw new SemanticException(input, "Multiple annotations of type %s", anno.getType()); @@ -7074,7 +7831,7 @@ public class smaliTreeWalker extends TreeParser { break; default : - break loop44; + break loop46; } } @@ -7082,9 +7839,7 @@ public class smaliTreeWalker extends TreeParser { } - if (annotationMap.size() > 0) { annotations = ImmutableSet.copyOf(annotationMap.values()); - } } @@ -7103,30 +7858,30 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "annotation" - // smaliTreeWalker.g:1290:1: annotation returns [Annotation annotation] : ^( I_ANNOTATION ANNOTATION_VISIBILITY subannotation ) ; + // smaliTreeWalker.g:1390:1: annotation returns [Annotation annotation] : ^( I_ANNOTATION ANNOTATION_VISIBILITY subannotation ) ; public final Annotation annotation() throws RecognitionException { Annotation annotation = null; - CommonTree ANNOTATION_VISIBILITY215=null; - TreeRuleReturnScope subannotation216 =null; + CommonTree ANNOTATION_VISIBILITY235=null; + TreeRuleReturnScope subannotation236 =null; try { - // smaliTreeWalker.g:1291:3: ( ^( I_ANNOTATION ANNOTATION_VISIBILITY subannotation ) ) - // smaliTreeWalker.g:1291:5: ^( I_ANNOTATION ANNOTATION_VISIBILITY subannotation ) + // smaliTreeWalker.g:1391:3: ( ^( I_ANNOTATION ANNOTATION_VISIBILITY subannotation ) ) + // smaliTreeWalker.g:1391:5: ^( I_ANNOTATION ANNOTATION_VISIBILITY subannotation ) { - match(input,I_ANNOTATION,FOLLOW_I_ANNOTATION_in_annotation3586); + match(input,I_ANNOTATION,FOLLOW_I_ANNOTATION_in_annotation3897); match(input, Token.DOWN, null); - ANNOTATION_VISIBILITY215=(CommonTree)match(input,ANNOTATION_VISIBILITY,FOLLOW_ANNOTATION_VISIBILITY_in_annotation3588); - pushFollow(FOLLOW_subannotation_in_annotation3590); - subannotation216=subannotation(); + ANNOTATION_VISIBILITY235=(CommonTree)match(input,ANNOTATION_VISIBILITY,FOLLOW_ANNOTATION_VISIBILITY_in_annotation3899); + pushFollow(FOLLOW_subannotation_in_annotation3901); + subannotation236=subannotation(); state._fsp--; match(input, Token.UP, null); - int visibility = AnnotationVisibility.getVisibility((ANNOTATION_VISIBILITY215!=null?ANNOTATION_VISIBILITY215.getText():null)); - annotation = new ImmutableAnnotation(visibility, (subannotation216!=null?((smaliTreeWalker.subannotation_return)subannotation216).annotationType:null), (subannotation216!=null?((smaliTreeWalker.subannotation_return)subannotation216).elements:null)); + int visibility = AnnotationVisibility.getVisibility((ANNOTATION_VISIBILITY235!=null?ANNOTATION_VISIBILITY235.getText():null)); + annotation = new ImmutableAnnotation(visibility, (subannotation236!=null?((smaliTreeWalker.subannotation_return)subannotation236).annotationType:null), (subannotation236!=null?((smaliTreeWalker.subannotation_return)subannotation236).elements:null)); } @@ -7145,29 +7900,29 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "annotation_element" - // smaliTreeWalker.g:1297:1: annotation_element returns [AnnotationElement element] : ^( I_ANNOTATION_ELEMENT SIMPLE_NAME literal ) ; + // smaliTreeWalker.g:1397:1: annotation_element returns [AnnotationElement element] : ^( I_ANNOTATION_ELEMENT SIMPLE_NAME literal ) ; public final AnnotationElement annotation_element() throws RecognitionException { AnnotationElement element = null; - CommonTree SIMPLE_NAME217=null; - EncodedValue literal218 =null; + CommonTree SIMPLE_NAME237=null; + ImmutableEncodedValue literal238 =null; try { - // smaliTreeWalker.g:1298:3: ( ^( I_ANNOTATION_ELEMENT SIMPLE_NAME literal ) ) - // smaliTreeWalker.g:1298:5: ^( I_ANNOTATION_ELEMENT SIMPLE_NAME literal ) + // smaliTreeWalker.g:1398:3: ( ^( I_ANNOTATION_ELEMENT SIMPLE_NAME literal ) ) + // smaliTreeWalker.g:1398:5: ^( I_ANNOTATION_ELEMENT SIMPLE_NAME literal ) { - match(input,I_ANNOTATION_ELEMENT,FOLLOW_I_ANNOTATION_ELEMENT_in_annotation_element3611); + match(input,I_ANNOTATION_ELEMENT,FOLLOW_I_ANNOTATION_ELEMENT_in_annotation_element3922); match(input, Token.DOWN, null); - SIMPLE_NAME217=(CommonTree)match(input,SIMPLE_NAME,FOLLOW_SIMPLE_NAME_in_annotation_element3613); - pushFollow(FOLLOW_literal_in_annotation_element3615); - literal218=literal(); + SIMPLE_NAME237=(CommonTree)match(input,SIMPLE_NAME,FOLLOW_SIMPLE_NAME_in_annotation_element3924); + pushFollow(FOLLOW_literal_in_annotation_element3926); + literal238=literal(); state._fsp--; match(input, Token.UP, null); - element = new ImmutableAnnotationElement((SIMPLE_NAME217!=null?SIMPLE_NAME217.getText():null), literal218); + element = new ImmutableAnnotationElement((SIMPLE_NAME237!=null?SIMPLE_NAME237.getText():null), literal238); } @@ -7191,54 +7946,54 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "subannotation" - // smaliTreeWalker.g:1303:1: subannotation returns [String annotationType, List<AnnotationElement> elements] : ^( I_SUBANNOTATION CLASS_DESCRIPTOR ( annotation_element )* ) ; + // smaliTreeWalker.g:1403:1: subannotation returns [String annotationType, List<AnnotationElement> elements] : ^( I_SUBANNOTATION CLASS_DESCRIPTOR ( annotation_element )* ) ; public final smaliTreeWalker.subannotation_return subannotation() throws RecognitionException { smaliTreeWalker.subannotation_return retval = new smaliTreeWalker.subannotation_return(); retval.start = input.LT(1); - CommonTree CLASS_DESCRIPTOR220=null; - AnnotationElement annotation_element219 =null; + CommonTree CLASS_DESCRIPTOR240=null; + AnnotationElement annotation_element239 =null; try { - // smaliTreeWalker.g:1304:3: ( ^( I_SUBANNOTATION CLASS_DESCRIPTOR ( annotation_element )* ) ) - // smaliTreeWalker.g:1304:5: ^( I_SUBANNOTATION CLASS_DESCRIPTOR ( annotation_element )* ) + // smaliTreeWalker.g:1404:3: ( ^( I_SUBANNOTATION CLASS_DESCRIPTOR ( annotation_element )* ) ) + // smaliTreeWalker.g:1404:5: ^( I_SUBANNOTATION CLASS_DESCRIPTOR ( annotation_element )* ) { ArrayList<AnnotationElement> elements = Lists.newArrayList(); - match(input,I_SUBANNOTATION,FOLLOW_I_SUBANNOTATION_in_subannotation3642); + match(input,I_SUBANNOTATION,FOLLOW_I_SUBANNOTATION_in_subannotation3953); match(input, Token.DOWN, null); - CLASS_DESCRIPTOR220=(CommonTree)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_subannotation3652); - // smaliTreeWalker.g:1307:9: ( annotation_element )* - loop45: + CLASS_DESCRIPTOR240=(CommonTree)match(input,CLASS_DESCRIPTOR,FOLLOW_CLASS_DESCRIPTOR_in_subannotation3963); + // smaliTreeWalker.g:1407:9: ( annotation_element )* + loop47: while (true) { - int alt45=2; - int LA45_0 = input.LA(1); - if ( (LA45_0==I_ANNOTATION_ELEMENT) ) { - alt45=1; + int alt47=2; + int LA47_0 = input.LA(1); + if ( (LA47_0==I_ANNOTATION_ELEMENT) ) { + alt47=1; } - switch (alt45) { + switch (alt47) { case 1 : - // smaliTreeWalker.g:1307:10: annotation_element + // smaliTreeWalker.g:1407:10: annotation_element { - pushFollow(FOLLOW_annotation_element_in_subannotation3663); - annotation_element219=annotation_element(); + pushFollow(FOLLOW_annotation_element_in_subannotation3974); + annotation_element239=annotation_element(); state._fsp--; - elements.add(annotation_element219); + elements.add(annotation_element239); } break; default : - break loop45; + break loop47; } } match(input, Token.UP, null); - retval.annotationType = (CLASS_DESCRIPTOR220!=null?CLASS_DESCRIPTOR220.getText():null); + retval.annotationType = (CLASS_DESCRIPTOR240!=null?CLASS_DESCRIPTOR240.getText():null); retval.elements = elements; } @@ -7258,27 +8013,27 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "field_literal" - // smaliTreeWalker.g:1317:1: field_literal returns [FieldReference value] : ^( I_ENCODED_FIELD field_reference ) ; - public final FieldReference field_literal() throws RecognitionException { - FieldReference value = null; + // smaliTreeWalker.g:1417:1: field_literal returns [ImmutableFieldReference value] : ^( I_ENCODED_FIELD field_reference ) ; + public final ImmutableFieldReference field_literal() throws RecognitionException { + ImmutableFieldReference value = null; - ImmutableFieldReference field_reference221 =null; + TreeRuleReturnScope field_reference241 =null; try { - // smaliTreeWalker.g:1318:3: ( ^( I_ENCODED_FIELD field_reference ) ) - // smaliTreeWalker.g:1318:5: ^( I_ENCODED_FIELD field_reference ) + // smaliTreeWalker.g:1418:3: ( ^( I_ENCODED_FIELD field_reference ) ) + // smaliTreeWalker.g:1418:5: ^( I_ENCODED_FIELD field_reference ) { - match(input,I_ENCODED_FIELD,FOLLOW_I_ENCODED_FIELD_in_field_literal3702); + match(input,I_ENCODED_FIELD,FOLLOW_I_ENCODED_FIELD_in_field_literal4013); match(input, Token.DOWN, null); - pushFollow(FOLLOW_field_reference_in_field_literal3704); - field_reference221=field_reference(); + pushFollow(FOLLOW_field_reference_in_field_literal4015); + field_reference241=field_reference(); state._fsp--; match(input, Token.UP, null); - value = field_reference221; + value = (field_reference241!=null?((smaliTreeWalker.field_reference_return)field_reference241).fieldReference:null); } @@ -7297,27 +8052,27 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "method_literal" - // smaliTreeWalker.g:1323:1: method_literal returns [MethodReference value] : ^( I_ENCODED_METHOD method_reference ) ; - public final MethodReference method_literal() throws RecognitionException { - MethodReference value = null; + // smaliTreeWalker.g:1423:1: method_literal returns [ImmutableMethodReference value] : ^( I_ENCODED_METHOD method_reference ) ; + public final ImmutableMethodReference method_literal() throws RecognitionException { + ImmutableMethodReference value = null; - ImmutableMethodReference method_reference222 =null; + ImmutableMethodReference method_reference242 =null; try { - // smaliTreeWalker.g:1324:3: ( ^( I_ENCODED_METHOD method_reference ) ) - // smaliTreeWalker.g:1324:5: ^( I_ENCODED_METHOD method_reference ) + // smaliTreeWalker.g:1424:3: ( ^( I_ENCODED_METHOD method_reference ) ) + // smaliTreeWalker.g:1424:5: ^( I_ENCODED_METHOD method_reference ) { - match(input,I_ENCODED_METHOD,FOLLOW_I_ENCODED_METHOD_in_method_literal3725); + match(input,I_ENCODED_METHOD,FOLLOW_I_ENCODED_METHOD_in_method_literal4036); match(input, Token.DOWN, null); - pushFollow(FOLLOW_method_reference_in_method_literal3727); - method_reference222=method_reference(); + pushFollow(FOLLOW_method_reference_in_method_literal4038); + method_reference242=method_reference(); state._fsp--; match(input, Token.UP, null); - value = method_reference222; + value = method_reference242; } @@ -7336,27 +8091,27 @@ public class smaliTreeWalker extends TreeParser { // $ANTLR start "enum_literal" - // smaliTreeWalker.g:1329:1: enum_literal returns [FieldReference value] : ^( I_ENCODED_ENUM field_reference ) ; - public final FieldReference enum_literal() throws RecognitionException { - FieldReference value = null; + // smaliTreeWalker.g:1429:1: enum_literal returns [ImmutableFieldReference value] : ^( I_ENCODED_ENUM field_reference ) ; + public final ImmutableFieldReference enum_literal() throws RecognitionException { + ImmutableFieldReference value = null; - ImmutableFieldReference field_reference223 =null; + TreeRuleReturnScope field_reference243 =null; try { - // smaliTreeWalker.g:1330:3: ( ^( I_ENCODED_ENUM field_reference ) ) - // smaliTreeWalker.g:1330:5: ^( I_ENCODED_ENUM field_reference ) + // smaliTreeWalker.g:1430:3: ( ^( I_ENCODED_ENUM field_reference ) ) + // smaliTreeWalker.g:1430:5: ^( I_ENCODED_ENUM field_reference ) { - match(input,I_ENCODED_ENUM,FOLLOW_I_ENCODED_ENUM_in_enum_literal3748); + match(input,I_ENCODED_ENUM,FOLLOW_I_ENCODED_ENUM_in_enum_literal4059); match(input, Token.DOWN, null); - pushFollow(FOLLOW_field_reference_in_enum_literal3750); - field_reference223=field_reference(); + pushFollow(FOLLOW_field_reference_in_enum_literal4061); + field_reference243=field_reference(); state._fsp--; match(input, Token.UP, null); - value = field_reference223; + value = (field_reference243!=null?((smaliTreeWalker.field_reference_return)field_reference243).fieldReference:null); } @@ -7377,35 +8132,35 @@ public class smaliTreeWalker extends TreeParser { public static final BitSet FOLLOW_I_CLASS_DEF_in_smali_file52 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_header_in_smali_file54 = new BitSet(new long[]{0x0000000000000000L,0x0010000000000000L}); - public static final BitSet FOLLOW_methods_in_smali_file56 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L}); - public static final BitSet FOLLOW_fields_in_smali_file58 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L}); + public static final BitSet FOLLOW_header_in_smali_file54 = new BitSet(new long[]{0x0000000000000000L,0x2000000000000000L}); + public static final BitSet FOLLOW_methods_in_smali_file56 = new BitSet(new long[]{0x0000000000000000L,0x0010000000000000L}); + public static final BitSet FOLLOW_fields_in_smali_file58 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L}); public static final BitSet FOLLOW_annotations_in_smali_file60 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_class_spec_in_header85 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L,0x0000020000000004L}); - public static final BitSet FOLLOW_super_spec_in_header87 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L,0x0000000000000004L}); - public static final BitSet FOLLOW_implements_list_in_header90 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); + public static final BitSet FOLLOW_class_spec_in_header85 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L,0x0040000000000800L}); + public static final BitSet FOLLOW_super_spec_in_header87 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L,0x0000000000000800L}); + public static final BitSet FOLLOW_implements_list_in_header90 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000800L}); public static final BitSet FOLLOW_source_spec_in_header92 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_class_spec110 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L}); + public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_class_spec110 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L}); public static final BitSet FOLLOW_access_list_in_class_spec112 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_I_SUPER_in_super_spec130 = new BitSet(new long[]{0x0000000000000004L}); public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_super_spec132 = new BitSet(new long[]{0x0000000000000008L}); public static final BitSet FOLLOW_I_IMPLEMENTS_in_implements_spec152 = new BitSet(new long[]{0x0000000000000004L}); public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_implements_spec154 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_implements_spec_in_implements_list184 = new BitSet(new long[]{0x0000000000000002L,0x0000400000000000L}); + public static final BitSet FOLLOW_implements_spec_in_implements_list184 = new BitSet(new long[]{0x0000000000000002L,0x0080000000000000L}); public static final BitSet FOLLOW_I_SOURCE_in_source_spec213 = new BitSet(new long[]{0x0000000000000004L}); public static final BitSet FOLLOW_string_literal_in_source_spec215 = new BitSet(new long[]{0x0000000000000008L}); public static final BitSet FOLLOW_I_ACCESS_LIST_in_access_list248 = new BitSet(new long[]{0x0000000000000004L}); public static final BitSet FOLLOW_ACCESS_SPEC_in_access_list266 = new BitSet(new long[]{0x0000000000000018L}); public static final BitSet FOLLOW_I_FIELDS_in_fields308 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_field_in_fields317 = new BitSet(new long[]{0x0000000000000008L,0x0000040000000000L}); + public static final BitSet FOLLOW_field_in_fields317 = new BitSet(new long[]{0x0000000000000008L,0x0008000000000000L}); public static final BitSet FOLLOW_I_METHODS_in_methods349 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_method_in_methods358 = new BitSet(new long[]{0x0000000000000008L,0x0008000000000000L}); + public static final BitSet FOLLOW_method_in_methods358 = new BitSet(new long[]{0x0000000000000008L,0x1000000000000000L}); public static final BitSet FOLLOW_I_FIELD_in_field383 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_SIMPLE_NAME_in_field385 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L}); - public static final BitSet FOLLOW_access_list_in_field387 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L}); + public static final BitSet FOLLOW_SIMPLE_NAME_in_field385 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L}); + public static final BitSet FOLLOW_access_list_in_field387 = new BitSet(new long[]{0x0000000000000000L,0x0040000000000000L}); public static final BitSet FOLLOW_I_FIELD_TYPE_in_field390 = new BitSet(new long[]{0x0000000000000004L}); public static final BitSet FOLLOW_nonvoid_type_descriptor_in_field392 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_field_initial_value_in_field395 = new BitSet(new long[]{0x0000000000000008L,0x0000000010000000L}); + public static final BitSet FOLLOW_field_initial_value_in_field395 = new BitSet(new long[]{0x0000000000000008L,0x0000000400000000L}); public static final BitSet FOLLOW_annotations_in_field397 = new BitSet(new long[]{0x0000000000000008L}); public static final BitSet FOLLOW_I_FIELD_INITIAL_VALUE_in_field_initial_value418 = new BitSet(new long[]{0x0000000000000004L}); public static final BitSet FOLLOW_literal_in_field_initial_value420 = new BitSet(new long[]{0x0000000000000008L}); @@ -7425,342 +8180,378 @@ public class smaliTreeWalker extends TreeParser { public static final BitSet FOLLOW_field_literal_in_literal546 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_method_literal_in_literal554 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_enum_literal_in_literal562 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_integer_literal_in_fixed_64bit_literal_number578 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_long_literal_in_fixed_64bit_literal_number586 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_short_literal_in_fixed_64bit_literal_number594 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_byte_literal_in_fixed_64bit_literal_number602 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_float_literal_in_fixed_64bit_literal_number610 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_double_literal_in_fixed_64bit_literal_number618 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_char_literal_in_fixed_64bit_literal_number626 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_bool_literal_in_fixed_64bit_literal_number634 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_integer_literal_in_fixed_64bit_literal649 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_long_literal_in_fixed_64bit_literal657 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_short_literal_in_fixed_64bit_literal665 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_byte_literal_in_fixed_64bit_literal673 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_float_literal_in_fixed_64bit_literal681 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_double_literal_in_fixed_64bit_literal689 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_char_literal_in_fixed_64bit_literal697 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_bool_literal_in_fixed_64bit_literal705 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_integer_literal_in_fixed_32bit_literal722 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_long_literal_in_fixed_32bit_literal730 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_short_literal_in_fixed_32bit_literal738 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_byte_literal_in_fixed_32bit_literal746 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_float_literal_in_fixed_32bit_literal754 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_char_literal_in_fixed_32bit_literal762 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_bool_literal_in_fixed_32bit_literal770 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_I_ARRAY_ELEMENTS_in_array_elements792 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_fixed_64bit_literal_number_in_array_elements801 = new BitSet(new long[]{0x0000004000404C08L,0x0000000001000000L,0x4000400000000000L}); - public static final BitSet FOLLOW_I_PACKED_SWITCH_ELEMENTS_in_packed_switch_elements837 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_label_ref_in_packed_switch_elements846 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_I_SPARSE_SWITCH_ELEMENTS_in_sparse_switch_elements881 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_fixed_32bit_literal_in_sparse_switch_elements891 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_label_ref_in_sparse_switch_elements893 = new BitSet(new long[]{0x0000004000004C08L,0x0000000001000000L,0x4000400000000000L}); - public static final BitSet FOLLOW_I_METHOD_in_method945 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_method_name_and_prototype_in_method953 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L}); - public static final BitSet FOLLOW_access_list_in_method961 = new BitSet(new long[]{0x0000000000000000L,0x4084000000000000L}); - public static final BitSet FOLLOW_registers_directive_in_method988 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L}); - public static final BitSet FOLLOW_ordered_method_items_in_method1045 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L}); - public static final BitSet FOLLOW_catches_in_method1053 = new BitSet(new long[]{0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_parameters_in_method1061 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L}); - public static final BitSet FOLLOW_annotations_in_method1070 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_METHOD_PROTOTYPE_in_method_prototype1094 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_I_METHOD_RETURN_TYPE_in_method_prototype1097 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_type_descriptor_in_method_prototype1099 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_method_type_list_in_method_prototype1102 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_SIMPLE_NAME_in_method_name_and_prototype1120 = new BitSet(new long[]{0x0000000000000000L,0x0020000000000000L}); - public static final BitSet FOLLOW_method_prototype_in_method_name_and_prototype1122 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_nonvoid_type_descriptor_in_method_type_list1156 = new BitSet(new long[]{0x0000000000008102L,0x0000000000000000L,0x0200000000000000L}); - public static final BitSet FOLLOW_reference_type_descriptor_in_method_reference1185 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_SIMPLE_NAME_in_method_reference1188 = new BitSet(new long[]{0x0000000000000000L,0x0020000000000000L}); - public static final BitSet FOLLOW_method_prototype_in_method_reference1190 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_reference_type_descriptor_in_field_reference1207 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_SIMPLE_NAME_in_field_reference1210 = new BitSet(new long[]{0x0000000000008100L,0x0000000000000000L,0x0200000000000000L}); - public static final BitSet FOLLOW_nonvoid_type_descriptor_in_field_reference1212 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_I_REGISTERS_in_registers_directive1238 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_I_LOCALS_in_registers_directive1250 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_short_integral_literal_in_registers_directive1268 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_LABEL_in_label_def1288 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_SIMPLE_NAME_in_label_def1290 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_CATCHES_in_catches1316 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_catch_directive_in_catches1318 = new BitSet(new long[]{0x0000000000000008L,0x0000000300000000L}); - public static final BitSet FOLLOW_catchall_directive_in_catches1321 = new BitSet(new long[]{0x0000000000000008L,0x0000000200000000L}); - public static final BitSet FOLLOW_I_CATCH_in_catch_directive1334 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_nonvoid_type_descriptor_in_catch_directive1336 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_label_ref_in_catch_directive1340 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_label_ref_in_catch_directive1344 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_label_ref_in_catch_directive1348 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_CATCHALL_in_catchall_directive1364 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_label_ref_in_catchall_directive1368 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_label_ref_in_catchall_directive1372 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_label_ref_in_catchall_directive1376 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_PARAMETERS_in_parameters1393 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_parameter_in_parameters1396 = new BitSet(new long[]{0x0000000000000008L,0x0400000000000000L}); - public static final BitSet FOLLOW_I_PARAMETER_in_parameter1412 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_REGISTER_in_parameter1414 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L,0x0000000000000000L,0x0000000000000004L}); - public static final BitSet FOLLOW_string_literal_in_parameter1416 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L}); - public static final BitSet FOLLOW_annotations_in_parameter1419 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_line_in_debug_directive1436 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_local_in_debug_directive1442 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_end_local_in_debug_directive1448 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_restart_local_in_debug_directive1454 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_prologue_in_debug_directive1460 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_epilogue_in_debug_directive1466 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_source_in_debug_directive1472 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_I_LINE_in_line1483 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_integral_literal_in_line1485 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_LOCAL_in_local1503 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_REGISTER_in_local1505 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0004000000000000L,0x0000000000000004L}); - public static final BitSet FOLLOW_NULL_LITERAL_in_local1509 = new BitSet(new long[]{0x0000000000008108L,0x0000000000000000L,0x0200000000000000L,0x0000000000000004L}); - public static final BitSet FOLLOW_string_literal_in_local1515 = new BitSet(new long[]{0x0000000000008108L,0x0000000000000000L,0x0200000000000000L,0x0000000000000004L}); - public static final BitSet FOLLOW_nonvoid_type_descriptor_in_local1518 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); - public static final BitSet FOLLOW_string_literal_in_local1523 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_END_LOCAL_in_end_local1544 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_REGISTER_in_end_local1546 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_RESTART_LOCAL_in_restart_local1564 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_REGISTER_in_restart_local1566 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_PROLOGUE_in_prologue1583 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_I_EPILOGUE_in_epilogue1599 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_I_SOURCE_in_source1616 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_string_literal_in_source1618 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_ORDERED_METHOD_ITEMS_in_ordered_method_items1637 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_label_def_in_ordered_method_items1640 = new BitSet(new long[]{0x0000000000000008L,0x2003830000000000L,0x000000FFFFFFFFF6L}); - public static final BitSet FOLLOW_instruction_in_ordered_method_items1644 = new BitSet(new long[]{0x0000000000000008L,0x2003830000000000L,0x000000FFFFFFFFF6L}); - public static final BitSet FOLLOW_debug_directive_in_ordered_method_items1648 = new BitSet(new long[]{0x0000000000000008L,0x2003830000000000L,0x000000FFFFFFFFF6L}); - public static final BitSet FOLLOW_SIMPLE_NAME_in_label_ref1664 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_I_REGISTER_LIST_in_register_list1689 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_REGISTER_in_register_list1698 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_I_REGISTER_RANGE_in_register_range1723 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_REGISTER_in_register_range1728 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_register_range1732 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_verification_error_reference1755 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_field_reference_in_verification_error_reference1765 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_method_reference_in_verification_error_reference1775 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_VERIFICATION_ERROR_TYPE_in_verification_error_type1792 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format10t_in_instruction1806 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format10x_in_instruction1812 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format11n_in_instruction1818 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format11x_in_instruction1824 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format12x_in_instruction1830 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format20bc_in_instruction1836 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format20t_in_instruction1842 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format21c_field_in_instruction1848 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format21c_string_in_instruction1854 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format21c_type_in_instruction1860 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format21ih_in_instruction1866 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format21lh_in_instruction1872 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format21s_in_instruction1878 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format21t_in_instruction1884 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format22b_in_instruction1890 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format22c_field_in_instruction1896 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format22c_type_in_instruction1902 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format22s_in_instruction1908 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format22t_in_instruction1914 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format22x_in_instruction1920 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format23x_in_instruction1926 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format30t_in_instruction1932 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format31c_in_instruction1938 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format31i_in_instruction1944 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format31t_in_instruction1950 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format32x_in_instruction1956 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format35c_method_in_instruction1962 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format35c_type_in_instruction1968 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format3rc_method_in_instruction1974 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format3rc_type_in_instruction1980 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format45cc_method_in_instruction1986 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format4rcc_method_in_instruction1992 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_format51l_type_in_instruction1998 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_array_data_directive_in_instruction2004 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_packed_switch_directive_in_instruction2010 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_insn_sparse_switch_directive_in_instruction2016 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT10t_in_insn_format10t2040 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT10t_in_insn_format10t2042 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_label_ref_in_insn_format10t2044 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT10x_in_insn_format10x2067 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT10x_in_insn_format10x2069 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT11n_in_insn_format11n2092 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT11n_in_insn_format11n2094 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format11n2096 = new BitSet(new long[]{0x0000000000004800L,0x0000000001000000L,0x4000400000000000L}); - public static final BitSet FOLLOW_short_integral_literal_in_insn_format11n2098 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT11x_in_insn_format11x2121 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT11x_in_insn_format11x2123 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format11x2125 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT12x_in_insn_format12x2148 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT12x_in_insn_format12x2150 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format12x2154 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format12x2158 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT20bc_in_insn_format20bc2181 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT20bc_in_insn_format20bc2183 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000020L}); - public static final BitSet FOLLOW_verification_error_type_in_insn_format20bc2185 = new BitSet(new long[]{0x0000000000008100L,0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_verification_error_reference_in_insn_format20bc2187 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT20t_in_insn_format20t2210 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT20t_in_insn_format20t2212 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_label_ref_in_insn_format20t2214 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT21c_FIELD_in_insn_format21c_field2237 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_set_in_insn_format21c_field2241 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format21c_field2249 = new BitSet(new long[]{0x0000000000008100L,0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_field_reference_in_insn_format21c_field2251 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT21c_STRING_in_insn_format21c_string2274 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_STRING_in_insn_format21c_string2276 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format21c_string2278 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); - public static final BitSet FOLLOW_string_literal_in_insn_format21c_string2280 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT21c_TYPE_in_insn_format21c_type2303 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_TYPE_in_insn_format21c_type2305 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format21c_type2307 = new BitSet(new long[]{0x0000000000008100L,0x0000000000000000L,0x0200000000000000L}); - public static final BitSet FOLLOW_nonvoid_type_descriptor_in_insn_format21c_type2309 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT21ih_in_insn_format21ih2332 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT21ih_in_insn_format21ih2334 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format21ih2336 = new BitSet(new long[]{0x0000004000004C00L,0x0000000001000000L,0x4000400000000000L}); - public static final BitSet FOLLOW_fixed_32bit_literal_in_insn_format21ih2338 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT21lh_in_insn_format21lh2361 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT21lh_in_insn_format21lh2363 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format21lh2365 = new BitSet(new long[]{0x0000004000404C00L,0x0000000001000000L,0x4000400000000000L}); - public static final BitSet FOLLOW_fixed_64bit_literal_in_insn_format21lh2367 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT21s_in_insn_format21s2390 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT21s_in_insn_format21s2392 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format21s2394 = new BitSet(new long[]{0x0000000000004800L,0x0000000001000000L,0x4000400000000000L}); - public static final BitSet FOLLOW_short_integral_literal_in_insn_format21s2396 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT21t_in_insn_format21t2419 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT21t_in_insn_format21t2421 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format21t2423 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_label_ref_in_insn_format21t2425 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT22b_in_insn_format22b2448 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT22b_in_insn_format22b2450 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22b2454 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22b2458 = new BitSet(new long[]{0x0000000000004800L,0x0000000001000000L,0x4000400000000000L}); - public static final BitSet FOLLOW_short_integral_literal_in_insn_format22b2460 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT22c_FIELD_in_insn_format22c_field2483 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_set_in_insn_format22c_field2487 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22c_field2497 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22c_field2501 = new BitSet(new long[]{0x0000000000008100L,0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_field_reference_in_insn_format22c_field2503 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT22c_TYPE_in_insn_format22c_type2526 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT22c_TYPE_in_insn_format22c_type2528 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22c_type2532 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22c_type2536 = new BitSet(new long[]{0x0000000000008100L,0x0000000000000000L,0x0200000000000000L}); - public static final BitSet FOLLOW_nonvoid_type_descriptor_in_insn_format22c_type2538 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT22s_in_insn_format22s2561 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT22s_in_insn_format22s2563 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22s2567 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22s2571 = new BitSet(new long[]{0x0000000000004800L,0x0000000001000000L,0x4000400000000000L}); - public static final BitSet FOLLOW_short_integral_literal_in_insn_format22s2573 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT22t_in_insn_format22t2596 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT22t_in_insn_format22t2598 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22t2602 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22t2606 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_label_ref_in_insn_format22t2608 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT22x_in_insn_format22x2631 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT22x_in_insn_format22x2633 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22x2637 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format22x2641 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT23x_in_insn_format23x2664 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT23x_in_insn_format23x2666 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format23x2670 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format23x2674 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format23x2678 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT30t_in_insn_format30t2701 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT30t_in_insn_format30t2703 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_label_ref_in_insn_format30t2705 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT31c_in_insn_format31c2728 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT31c_in_insn_format31c2730 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format31c2732 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L}); - public static final BitSet FOLLOW_string_literal_in_insn_format31c2734 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT31i_in_insn_format31i2757 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT31i_in_insn_format31i2759 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format31i2761 = new BitSet(new long[]{0x0000004000004C00L,0x0000000001000000L,0x4000400000000000L}); - public static final BitSet FOLLOW_fixed_32bit_literal_in_insn_format31i2763 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT31t_in_insn_format31t2786 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT31t_in_insn_format31t2788 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format31t2790 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_label_ref_in_insn_format31t2792 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT32x_in_insn_format32x2815 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT32x_in_insn_format32x2817 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format32x2821 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format32x2825 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT35c_METHOD_in_insn_format35c_method2848 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT35c_METHOD_in_insn_format35c_method2850 = new BitSet(new long[]{0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_register_list_in_insn_format35c_method2852 = new BitSet(new long[]{0x0000000000008100L,0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_method_reference_in_insn_format35c_method2854 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT35c_TYPE_in_insn_format35c_type2877 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT35c_TYPE_in_insn_format35c_type2879 = new BitSet(new long[]{0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_register_list_in_insn_format35c_type2881 = new BitSet(new long[]{0x0000000000008100L,0x0000000000000000L,0x0200000000000000L}); - public static final BitSet FOLLOW_nonvoid_type_descriptor_in_insn_format35c_type2883 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT3rc_METHOD_in_insn_format3rc_method2906 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT3rc_METHOD_in_insn_format3rc_method2908 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000001L}); - public static final BitSet FOLLOW_register_range_in_insn_format3rc_method2910 = new BitSet(new long[]{0x0000000000008100L,0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_method_reference_in_insn_format3rc_method2912 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT3rc_TYPE_in_insn_format3rc_type2935 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT3rc_TYPE_in_insn_format3rc_type2937 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000001L}); - public static final BitSet FOLLOW_register_range_in_insn_format3rc_type2939 = new BitSet(new long[]{0x0000000000008100L,0x0000000000000000L,0x0200000000000000L}); - public static final BitSet FOLLOW_nonvoid_type_descriptor_in_insn_format3rc_type2941 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT45cc_METHOD_in_insn_format45cc_method2964 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT45cc_METHOD_in_insn_format45cc_method2966 = new BitSet(new long[]{0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_register_list_in_insn_format45cc_method2968 = new BitSet(new long[]{0x0000000000008100L,0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_method_reference_in_insn_format45cc_method2970 = new BitSet(new long[]{0x0000000000000000L,0x0020000000000000L}); - public static final BitSet FOLLOW_method_prototype_in_insn_format45cc_method2972 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT4rcc_METHOD_in_insn_format4rcc_method2995 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT4rcc_METHOD_in_insn_format4rcc_method2997 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000001L}); - public static final BitSet FOLLOW_register_range_in_insn_format4rcc_method2999 = new BitSet(new long[]{0x0000000000008100L,0x0000000000000000L,0x8000000000000000L}); - public static final BitSet FOLLOW_method_reference_in_insn_format4rcc_method3001 = new BitSet(new long[]{0x0000000000000000L,0x0020000000000000L}); - public static final BitSet FOLLOW_method_prototype_in_insn_format4rcc_method3003 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_FORMAT51l_in_insn_format51l_type3026 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_INSTRUCTION_FORMAT51l_in_insn_format51l_type3028 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L}); - public static final BitSet FOLLOW_REGISTER_in_insn_format51l_type3030 = new BitSet(new long[]{0x0000004000404C00L,0x0000000001000000L,0x4000400000000000L}); - public static final BitSet FOLLOW_fixed_64bit_literal_in_insn_format51l_type3032 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_ARRAY_DATA_in_insn_array_data_directive3055 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_I_ARRAY_ELEMENT_SIZE_in_insn_array_data_directive3058 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_short_integral_literal_in_insn_array_data_directive3060 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_array_elements_in_insn_array_data_directive3063 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_PACKED_SWITCH_in_insn_packed_switch_directive3085 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_I_PACKED_SWITCH_START_KEY_in_insn_packed_switch_directive3088 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_fixed_32bit_literal_in_insn_packed_switch_directive3090 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_packed_switch_elements_in_insn_packed_switch_directive3093 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_STATEMENT_SPARSE_SWITCH_in_insn_sparse_switch_directive3117 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_sparse_switch_elements_in_insn_sparse_switch_directive3119 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_ARRAY_TYPE_PREFIX_in_array_descriptor3140 = new BitSet(new long[]{0x0000000000008000L,0x0000000000000000L,0x0200000000000000L}); - public static final BitSet FOLLOW_PRIMITIVE_TYPE_in_array_descriptor3144 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_array_descriptor3172 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_PRIMITIVE_TYPE_in_nonvoid_type_descriptor3190 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_nonvoid_type_descriptor3198 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_array_descriptor_in_nonvoid_type_descriptor3206 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_reference_type_descriptor3227 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_array_descriptor_in_reference_type_descriptor3235 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_VOID_TYPE_in_type_descriptor3255 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_nonvoid_type_descriptor_in_type_descriptor3263 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_long_literal_in_short_integral_literal3281 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_integer_literal_in_short_integral_literal3293 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_short_literal_in_short_integral_literal3305 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_char_literal_in_short_integral_literal3313 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_byte_literal_in_short_integral_literal3321 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_long_literal_in_integral_literal3336 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_integer_literal_in_integral_literal3348 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_short_literal_in_integral_literal3356 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_byte_literal_in_integral_literal3364 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INTEGER_LITERAL_in_integer_literal3380 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LONG_LITERAL_in_long_literal3395 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_SHORT_LITERAL_in_short_literal3410 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_BYTE_LITERAL_in_byte_literal3425 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_FLOAT_LITERAL_in_float_literal3440 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_DOUBLE_LITERAL_in_double_literal3455 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_CHAR_LITERAL_in_char_literal3470 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_STRING_LITERAL_in_string_literal3485 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_BOOL_LITERAL_in_bool_literal3504 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_I_ENCODED_ARRAY_in_array_literal3526 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_literal_in_array_literal3529 = new BitSet(new long[]{0x000000400040CD08L,0x000000F001000000L,0x4204410000000000L,0x0000000000000044L}); - public static final BitSet FOLLOW_I_ANNOTATIONS_in_annotations3554 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_annotation_in_annotations3557 = new BitSet(new long[]{0x0000000000000008L,0x0000000008000000L}); - public static final BitSet FOLLOW_I_ANNOTATION_in_annotation3586 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_ANNOTATION_VISIBILITY_in_annotation3588 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000010000000000L}); - public static final BitSet FOLLOW_subannotation_in_annotation3590 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_ANNOTATION_ELEMENT_in_annotation_element3611 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_SIMPLE_NAME_in_annotation_element3613 = new BitSet(new long[]{0x000000400040CD00L,0x000000F001000000L,0x4204410000000000L,0x0000000000000044L}); - public static final BitSet FOLLOW_literal_in_annotation_element3615 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_SUBANNOTATION_in_subannotation3642 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_subannotation3652 = new BitSet(new long[]{0x0000000000000008L,0x0000000020000000L}); - public static final BitSet FOLLOW_annotation_element_in_subannotation3663 = new BitSet(new long[]{0x0000000000000008L,0x0000000020000000L}); - public static final BitSet FOLLOW_I_ENCODED_FIELD_in_field_literal3702 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_field_reference_in_field_literal3704 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_ENCODED_METHOD_in_method_literal3725 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_method_reference_in_method_literal3727 = new BitSet(new long[]{0x0000000000000008L}); - public static final BitSet FOLLOW_I_ENCODED_ENUM_in_enum_literal3748 = new BitSet(new long[]{0x0000000000000004L}); - public static final BitSet FOLLOW_field_reference_in_enum_literal3750 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_method_handle_literal_in_literal570 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_method_prototype_in_literal578 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_integer_literal_in_fixed_64bit_literal_number594 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_long_literal_in_fixed_64bit_literal_number602 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_short_literal_in_fixed_64bit_literal_number610 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_byte_literal_in_fixed_64bit_literal_number618 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_float_literal_in_fixed_64bit_literal_number626 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_double_literal_in_fixed_64bit_literal_number634 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_char_literal_in_fixed_64bit_literal_number642 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_bool_literal_in_fixed_64bit_literal_number650 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_integer_literal_in_fixed_64bit_literal665 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_long_literal_in_fixed_64bit_literal673 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_short_literal_in_fixed_64bit_literal681 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_byte_literal_in_fixed_64bit_literal689 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_float_literal_in_fixed_64bit_literal697 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_double_literal_in_fixed_64bit_literal705 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_char_literal_in_fixed_64bit_literal713 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_bool_literal_in_fixed_64bit_literal721 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_integer_literal_in_fixed_32bit_literal738 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_long_literal_in_fixed_32bit_literal746 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_short_literal_in_fixed_32bit_literal754 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_byte_literal_in_fixed_32bit_literal762 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_float_literal_in_fixed_32bit_literal770 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_char_literal_in_fixed_32bit_literal778 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_bool_literal_in_fixed_32bit_literal786 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_I_ARRAY_ELEMENTS_in_array_elements808 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_fixed_64bit_literal_number_in_array_elements817 = new BitSet(new long[]{0x0000008000809808L,0x0000000040000000L,0x0800000000000000L,0x0000000000002000L}); + public static final BitSet FOLLOW_I_PACKED_SWITCH_ELEMENTS_in_packed_switch_elements853 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_label_ref_in_packed_switch_elements862 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_I_SPARSE_SWITCH_ELEMENTS_in_sparse_switch_elements897 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_fixed_32bit_literal_in_sparse_switch_elements907 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_label_ref_in_sparse_switch_elements909 = new BitSet(new long[]{0x0000008000009808L,0x0000000040000000L,0x0800000000000000L,0x0000000000002000L}); + public static final BitSet FOLLOW_I_METHOD_in_method961 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_method_name_and_prototype_in_method969 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L}); + public static final BitSet FOLLOW_access_list_in_method977 = new BitSet(new long[]{0x0000000000000000L,0x0800000000000000L,0x0000000000000081L}); + public static final BitSet FOLLOW_registers_directive_in_method1004 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000001L}); + public static final BitSet FOLLOW_ordered_method_items_in_method1061 = new BitSet(new long[]{0x0000000000000000L,0x0000040000000000L}); + public static final BitSet FOLLOW_catches_in_method1069 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000010L}); + public static final BitSet FOLLOW_parameters_in_method1077 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L}); + public static final BitSet FOLLOW_annotations_in_method1086 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_METHOD_PROTOTYPE_in_method_prototype1110 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_I_METHOD_RETURN_TYPE_in_method_prototype1113 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_type_descriptor_in_method_prototype1115 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_method_type_list_in_method_prototype1118 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_SIMPLE_NAME_in_method_name_and_prototype1136 = new BitSet(new long[]{0x0000000000000000L,0x4000000000000000L}); + public static final BitSet FOLLOW_method_prototype_in_method_name_and_prototype1138 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_nonvoid_type_descriptor_in_method_type_list1172 = new BitSet(new long[]{0x0000000000010102L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L}); + public static final BitSet FOLLOW_I_CALL_SITE_REFERENCE_in_call_site_reference1203 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_SIMPLE_NAME_in_call_site_reference1207 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000020000L}); + public static final BitSet FOLLOW_string_literal_in_call_site_reference1211 = new BitSet(new long[]{0x0000000000000000L,0x4000000000000000L}); + public static final BitSet FOLLOW_method_prototype_in_call_site_reference1213 = new BitSet(new long[]{0x0000000000000000L,0x0000004000000000L}); + public static final BitSet FOLLOW_call_site_extra_arguments_in_call_site_reference1223 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_method_reference_in_call_site_reference1225 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_set_in_method_handle_type1245 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_method_handle_type_in_method_handle_reference1270 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_field_reference_in_method_handle_reference1273 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_method_reference_in_method_handle_reference1277 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_I_ENCODED_METHOD_HANDLE_in_method_handle_literal1294 = new BitSet(new long[]{0x0000000000000000L,0x0000000000020000L,0xC000000000000000L}); + public static final BitSet FOLLOW_method_handle_reference_in_method_handle_literal1296 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_reference_type_descriptor_in_method_reference1312 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_SIMPLE_NAME_in_method_reference1315 = new BitSet(new long[]{0x0000000000000000L,0x4000000000000000L}); + public static final BitSet FOLLOW_method_prototype_in_method_reference1317 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_reference_type_descriptor_in_field_reference1334 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_SIMPLE_NAME_in_field_reference1337 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L}); + public static final BitSet FOLLOW_nonvoid_type_descriptor_in_field_reference1339 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_I_REGISTERS_in_registers_directive1365 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_I_LOCALS_in_registers_directive1377 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_short_integral_literal_in_registers_directive1395 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_LABEL_in_label_def1415 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_SIMPLE_NAME_in_label_def1417 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_CATCHES_in_catches1443 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_catch_directive_in_catches1445 = new BitSet(new long[]{0x0000000000000008L,0x0000030000000000L}); + public static final BitSet FOLLOW_catchall_directive_in_catches1448 = new BitSet(new long[]{0x0000000000000008L,0x0000020000000000L}); + public static final BitSet FOLLOW_I_CATCH_in_catch_directive1461 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_nonvoid_type_descriptor_in_catch_directive1463 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_label_ref_in_catch_directive1467 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_label_ref_in_catch_directive1471 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_label_ref_in_catch_directive1475 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_CATCHALL_in_catchall_directive1491 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_label_ref_in_catchall_directive1495 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_label_ref_in_catchall_directive1499 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_label_ref_in_catchall_directive1503 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_PARAMETERS_in_parameters1520 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_parameter_in_parameters1523 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000000000000008L}); + public static final BitSet FOLLOW_I_PARAMETER_in_parameter1539 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_REGISTER_in_parameter1541 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L,0x0000000000000000L,0x0000000000020000L}); + public static final BitSet FOLLOW_string_literal_in_parameter1543 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L}); + public static final BitSet FOLLOW_annotations_in_parameter1546 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_line_in_debug_directive1563 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_local_in_debug_directive1569 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_end_local_in_debug_directive1575 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_restart_local_in_debug_directive1581 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_prologue_in_debug_directive1587 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_epilogue_in_debug_directive1593 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_source_in_debug_directive1599 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_I_LINE_in_line1610 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_integral_literal_in_line1612 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_LOCAL_in_local1630 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_REGISTER_in_local1632 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000000000000000L,0x0000000000020002L}); + public static final BitSet FOLLOW_NULL_LITERAL_in_local1636 = new BitSet(new long[]{0x0000000000010108L,0x0000000000000000L,0x0000000000000000L,0x0000000000020100L}); + public static final BitSet FOLLOW_string_literal_in_local1642 = new BitSet(new long[]{0x0000000000010108L,0x0000000000000000L,0x0000000000000000L,0x0000000000020100L}); + public static final BitSet FOLLOW_nonvoid_type_descriptor_in_local1645 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000000000000000L,0x0000000000020000L}); + public static final BitSet FOLLOW_string_literal_in_local1650 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_END_LOCAL_in_end_local1671 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_REGISTER_in_end_local1673 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_RESTART_LOCAL_in_restart_local1691 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_REGISTER_in_restart_local1693 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_PROLOGUE_in_prologue1710 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_I_EPILOGUE_in_epilogue1726 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_I_SOURCE_in_source1743 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_string_literal_in_source1745 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_CALL_SITE_EXTRA_ARGUMENTS_in_call_site_extra_arguments1771 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_literal_in_call_site_extra_arguments1774 = new BitSet(new long[]{0x0000008000819908L,0x4001F00040000000L,0x0820000000000000L,0x0000000000222102L}); + public static final BitSet FOLLOW_I_ORDERED_METHOD_ITEMS_in_ordered_method_items1790 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_label_def_in_ordered_method_items1793 = new BitSet(new long[]{0x0000000000000008L,0x0706000000000000L,0x001FFFFFFFFFEC40L}); + public static final BitSet FOLLOW_instruction_in_ordered_method_items1797 = new BitSet(new long[]{0x0000000000000008L,0x0706000000000000L,0x001FFFFFFFFFEC40L}); + public static final BitSet FOLLOW_debug_directive_in_ordered_method_items1801 = new BitSet(new long[]{0x0000000000000008L,0x0706000000000000L,0x001FFFFFFFFFEC40L}); + public static final BitSet FOLLOW_SIMPLE_NAME_in_label_ref1817 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_I_REGISTER_LIST_in_register_list1842 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_REGISTER_in_register_list1851 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_I_REGISTER_RANGE_in_register_range1876 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_REGISTER_in_register_range1881 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_register_range1885 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_verification_error_reference1908 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_field_reference_in_verification_error_reference1918 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_method_reference_in_verification_error_reference1928 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_VERIFICATION_ERROR_TYPE_in_verification_error_type1945 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format10t_in_instruction1959 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format10x_in_instruction1965 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format11n_in_instruction1971 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format11x_in_instruction1977 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format12x_in_instruction1983 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format20bc_in_instruction1989 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format20t_in_instruction1995 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format21c_field_in_instruction2001 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format21c_method_handle_in_instruction2007 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format21c_method_type_in_instruction2013 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format21c_string_in_instruction2019 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format21c_type_in_instruction2025 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format21ih_in_instruction2031 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format21lh_in_instruction2037 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format21s_in_instruction2043 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format21t_in_instruction2049 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format22b_in_instruction2055 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format22c_field_in_instruction2061 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format22c_type_in_instruction2067 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format22s_in_instruction2073 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format22t_in_instruction2079 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format22x_in_instruction2085 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format23x_in_instruction2091 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format30t_in_instruction2097 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format31c_in_instruction2103 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format31i_in_instruction2109 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format31t_in_instruction2115 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format32x_in_instruction2121 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format35c_call_site_in_instruction2127 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format35c_method_in_instruction2133 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format35c_type_in_instruction2139 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format3rc_call_site_in_instruction2145 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format3rc_method_in_instruction2151 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format3rc_type_in_instruction2157 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format45cc_method_in_instruction2163 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format4rcc_method_in_instruction2169 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_format51l_type_in_instruction2175 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_array_data_directive_in_instruction2181 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_packed_switch_directive_in_instruction2187 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_insn_sparse_switch_directive_in_instruction2193 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT10t_in_insn_format10t2217 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT10t_in_insn_format10t2219 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_label_ref_in_insn_format10t2221 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT10x_in_insn_format10x2244 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT10x_in_insn_format10x2246 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT11n_in_insn_format11n2269 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT11n_in_insn_format11n2271 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format11n2273 = new BitSet(new long[]{0x0000000000009000L,0x0000000040000000L,0x0800000000000000L,0x0000000000002000L}); + public static final BitSet FOLLOW_short_integral_literal_in_insn_format11n2275 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT11x_in_insn_format11x2298 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT11x_in_insn_format11x2300 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format11x2302 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT12x_in_insn_format12x2325 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT12x_in_insn_format12x2327 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format12x2331 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format12x2335 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT20bc_in_insn_format20bc2358 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT20bc_in_insn_format20bc2360 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000100000L}); + public static final BitSet FOLLOW_verification_error_type_in_insn_format20bc2362 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_verification_error_reference_in_insn_format20bc2364 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT20t_in_insn_format20t2387 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT20t_in_insn_format20t2389 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_label_ref_in_insn_format20t2391 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT21c_FIELD_in_insn_format21c_field2414 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_set_in_insn_format21c_field2418 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format21c_field2426 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_field_reference_in_insn_format21c_field2428 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT21c_METHOD_HANDLE_in_insn_format21c_method_handle2451 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_METHOD_HANDLE_in_insn_format21c_method_handle2456 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format21c_method_handle2459 = new BitSet(new long[]{0x0000000000000000L,0x0000000000020000L,0xC000000000000000L}); + public static final BitSet FOLLOW_method_handle_reference_in_insn_format21c_method_handle2461 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT21c_METHOD_TYPE_in_insn_format21c_method_type2484 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_METHOD_TYPE_in_insn_format21c_method_type2489 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format21c_method_type2492 = new BitSet(new long[]{0x0000000000000000L,0x4000000000000000L}); + public static final BitSet FOLLOW_method_prototype_in_insn_format21c_method_type2494 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT21c_STRING_in_insn_format21c_string2517 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_STRING_in_insn_format21c_string2519 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format21c_string2521 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000020000L}); + public static final BitSet FOLLOW_string_literal_in_insn_format21c_string2523 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT21c_TYPE_in_insn_format21c_type2546 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21c_TYPE_in_insn_format21c_type2548 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format21c_type2550 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L}); + public static final BitSet FOLLOW_nonvoid_type_descriptor_in_insn_format21c_type2552 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT21ih_in_insn_format21ih2575 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21ih_in_insn_format21ih2577 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format21ih2579 = new BitSet(new long[]{0x0000008000009800L,0x0000000040000000L,0x0800000000000000L,0x0000000000002000L}); + public static final BitSet FOLLOW_fixed_32bit_literal_in_insn_format21ih2581 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT21lh_in_insn_format21lh2604 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21lh_in_insn_format21lh2606 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format21lh2608 = new BitSet(new long[]{0x0000008000809800L,0x0000000040000000L,0x0800000000000000L,0x0000000000002000L}); + public static final BitSet FOLLOW_fixed_64bit_literal_in_insn_format21lh2610 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT21s_in_insn_format21s2633 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21s_in_insn_format21s2635 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format21s2637 = new BitSet(new long[]{0x0000000000009000L,0x0000000040000000L,0x0800000000000000L,0x0000000000002000L}); + public static final BitSet FOLLOW_short_integral_literal_in_insn_format21s2639 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT21t_in_insn_format21t2662 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT21t_in_insn_format21t2664 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format21t2666 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_label_ref_in_insn_format21t2668 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT22b_in_insn_format22b2691 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT22b_in_insn_format22b2693 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22b2697 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22b2701 = new BitSet(new long[]{0x0000000000009000L,0x0000000040000000L,0x0800000000000000L,0x0000000000002000L}); + public static final BitSet FOLLOW_short_integral_literal_in_insn_format22b2703 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT22c_FIELD_in_insn_format22c_field2726 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_set_in_insn_format22c_field2730 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22c_field2740 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22c_field2744 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_field_reference_in_insn_format22c_field2746 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT22c_TYPE_in_insn_format22c_type2769 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT22c_TYPE_in_insn_format22c_type2771 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22c_type2775 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22c_type2779 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L}); + public static final BitSet FOLLOW_nonvoid_type_descriptor_in_insn_format22c_type2781 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT22s_in_insn_format22s2804 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT22s_in_insn_format22s2806 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22s2810 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22s2814 = new BitSet(new long[]{0x0000000000009000L,0x0000000040000000L,0x0800000000000000L,0x0000000000002000L}); + public static final BitSet FOLLOW_short_integral_literal_in_insn_format22s2816 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT22t_in_insn_format22t2839 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT22t_in_insn_format22t2841 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22t2845 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22t2849 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_label_ref_in_insn_format22t2851 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT22x_in_insn_format22x2874 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT22x_in_insn_format22x2876 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22x2880 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format22x2884 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT23x_in_insn_format23x2907 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT23x_in_insn_format23x2909 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format23x2913 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format23x2917 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format23x2921 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT30t_in_insn_format30t2944 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT30t_in_insn_format30t2946 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_label_ref_in_insn_format30t2948 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT31c_in_insn_format31c2971 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT31c_in_insn_format31c2973 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format31c2975 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000020000L}); + public static final BitSet FOLLOW_string_literal_in_insn_format31c2977 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT31i_in_insn_format31i3000 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT31i_in_insn_format31i3002 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format31i3004 = new BitSet(new long[]{0x0000008000009800L,0x0000000040000000L,0x0800000000000000L,0x0000000000002000L}); + public static final BitSet FOLLOW_fixed_32bit_literal_in_insn_format31i3006 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT31t_in_insn_format31t3029 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT31t_in_insn_format31t3031 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format31t3033 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_label_ref_in_insn_format31t3035 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT32x_in_insn_format32x3058 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT32x_in_insn_format32x3060 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format32x3064 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format32x3068 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT35c_CALL_SITE_in_insn_format35c_call_site3096 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT35c_CALL_SITE_in_insn_format35c_call_site3098 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000100L}); + public static final BitSet FOLLOW_register_list_in_insn_format35c_call_site3100 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L}); + public static final BitSet FOLLOW_call_site_reference_in_insn_format35c_call_site3102 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT35c_METHOD_in_insn_format35c_method3125 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT35c_METHOD_in_insn_format35c_method3127 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000100L}); + public static final BitSet FOLLOW_register_list_in_insn_format35c_method3129 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_method_reference_in_insn_format35c_method3131 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT35c_TYPE_in_insn_format35c_type3154 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT35c_TYPE_in_insn_format35c_type3156 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000100L}); + public static final BitSet FOLLOW_register_list_in_insn_format35c_type3158 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L}); + public static final BitSet FOLLOW_nonvoid_type_descriptor_in_insn_format35c_type3160 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT3rc_CALL_SITE_in_insn_format3rc_call_site3188 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT3rc_CALL_SITE_in_insn_format3rc_call_site3190 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000200L}); + public static final BitSet FOLLOW_register_range_in_insn_format3rc_call_site3192 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L}); + public static final BitSet FOLLOW_call_site_reference_in_insn_format3rc_call_site3194 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT3rc_METHOD_in_insn_format3rc_method3217 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT3rc_METHOD_in_insn_format3rc_method3219 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000200L}); + public static final BitSet FOLLOW_register_range_in_insn_format3rc_method3221 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_method_reference_in_insn_format3rc_method3223 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT3rc_TYPE_in_insn_format3rc_type3246 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT3rc_TYPE_in_insn_format3rc_type3248 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000200L}); + public static final BitSet FOLLOW_register_range_in_insn_format3rc_type3250 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L}); + public static final BitSet FOLLOW_nonvoid_type_descriptor_in_insn_format3rc_type3252 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT45cc_METHOD_in_insn_format45cc_method3275 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT45cc_METHOD_in_insn_format45cc_method3277 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000100L}); + public static final BitSet FOLLOW_register_list_in_insn_format45cc_method3279 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_method_reference_in_insn_format45cc_method3281 = new BitSet(new long[]{0x0000000000000000L,0x4000000000000000L}); + public static final BitSet FOLLOW_method_prototype_in_insn_format45cc_method3283 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT4rcc_METHOD_in_insn_format4rcc_method3306 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT4rcc_METHOD_in_insn_format4rcc_method3308 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000200L}); + public static final BitSet FOLLOW_register_range_in_insn_format4rcc_method3310 = new BitSet(new long[]{0x0000000000010100L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L}); + public static final BitSet FOLLOW_method_reference_in_insn_format4rcc_method3312 = new BitSet(new long[]{0x0000000000000000L,0x4000000000000000L}); + public static final BitSet FOLLOW_method_prototype_in_insn_format4rcc_method3314 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_FORMAT51l_in_insn_format51l_type3337 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_INSTRUCTION_FORMAT51l_in_insn_format51l_type3339 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_REGISTER_in_insn_format51l_type3341 = new BitSet(new long[]{0x0000008000809800L,0x0000000040000000L,0x0800000000000000L,0x0000000000002000L}); + public static final BitSet FOLLOW_fixed_64bit_literal_in_insn_format51l_type3343 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_ARRAY_DATA_in_insn_array_data_directive3366 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_I_ARRAY_ELEMENT_SIZE_in_insn_array_data_directive3369 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_short_integral_literal_in_insn_array_data_directive3371 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_array_elements_in_insn_array_data_directive3374 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_PACKED_SWITCH_in_insn_packed_switch_directive3396 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_I_PACKED_SWITCH_START_KEY_in_insn_packed_switch_directive3399 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_fixed_32bit_literal_in_insn_packed_switch_directive3401 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_packed_switch_elements_in_insn_packed_switch_directive3404 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_STATEMENT_SPARSE_SWITCH_in_insn_sparse_switch_directive3428 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_sparse_switch_elements_in_insn_sparse_switch_directive3430 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_ARRAY_TYPE_PREFIX_in_array_descriptor3451 = new BitSet(new long[]{0x0000000000010000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L}); + public static final BitSet FOLLOW_PRIMITIVE_TYPE_in_array_descriptor3455 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_array_descriptor3483 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_PRIMITIVE_TYPE_in_nonvoid_type_descriptor3501 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_nonvoid_type_descriptor3509 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_array_descriptor_in_nonvoid_type_descriptor3517 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_reference_type_descriptor3538 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_array_descriptor_in_reference_type_descriptor3546 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_VOID_TYPE_in_type_descriptor3566 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_nonvoid_type_descriptor_in_type_descriptor3574 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_long_literal_in_short_integral_literal3592 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_integer_literal_in_short_integral_literal3604 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_short_literal_in_short_integral_literal3616 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_char_literal_in_short_integral_literal3624 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_byte_literal_in_short_integral_literal3632 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_long_literal_in_integral_literal3647 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_integer_literal_in_integral_literal3659 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_short_literal_in_integral_literal3667 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_byte_literal_in_integral_literal3675 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INTEGER_LITERAL_in_integer_literal3691 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LONG_LITERAL_in_long_literal3706 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_SHORT_LITERAL_in_short_literal3721 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_BYTE_LITERAL_in_byte_literal3736 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_FLOAT_LITERAL_in_float_literal3751 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DOUBLE_LITERAL_in_double_literal3766 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CHAR_LITERAL_in_char_literal3781 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_string_literal3796 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_BOOL_LITERAL_in_bool_literal3815 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_I_ENCODED_ARRAY_in_array_literal3837 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_literal_in_array_literal3840 = new BitSet(new long[]{0x0000008000819908L,0x4001F00040000000L,0x0820000000000000L,0x0000000000222102L}); + public static final BitSet FOLLOW_I_ANNOTATIONS_in_annotations3865 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_annotation_in_annotations3868 = new BitSet(new long[]{0x0000000000000008L,0x0000000200000000L}); + public static final BitSet FOLLOW_I_ANNOTATION_in_annotation3897 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_ANNOTATION_VISIBILITY_in_annotation3899 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0020000000000000L}); + public static final BitSet FOLLOW_subannotation_in_annotation3901 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_ANNOTATION_ELEMENT_in_annotation_element3922 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_SIMPLE_NAME_in_annotation_element3924 = new BitSet(new long[]{0x0000008000819900L,0x4001F00040000000L,0x0820000000000000L,0x0000000000222102L}); + public static final BitSet FOLLOW_literal_in_annotation_element3926 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_SUBANNOTATION_in_subannotation3953 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_CLASS_DESCRIPTOR_in_subannotation3963 = new BitSet(new long[]{0x0000000000000008L,0x0000000800000000L}); + public static final BitSet FOLLOW_annotation_element_in_subannotation3974 = new BitSet(new long[]{0x0000000000000008L,0x0000000800000000L}); + public static final BitSet FOLLOW_I_ENCODED_FIELD_in_field_literal4013 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_field_reference_in_field_literal4015 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_ENCODED_METHOD_in_method_literal4036 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_method_reference_in_method_literal4038 = new BitSet(new long[]{0x0000000000000008L}); + public static final BitSet FOLLOW_I_ENCODED_ENUM_in_enum_literal4059 = new BitSet(new long[]{0x0000000000000004L}); + public static final BitSet FOLLOW_field_reference_in_enum_literal4061 = new BitSet(new long[]{0x0000000000000008L}); } diff --git a/util/src/main/java/org/jf/util/BlankReader.java b/smali/src/main/java/org/jf/smali/util/BlankReader.java index ca55dd0f..2d3e9c98 100644 --- a/util/src/main/java/org/jf/util/BlankReader.java +++ b/smali/src/main/java/org/jf/smali/util/BlankReader.java @@ -1,18 +1,18 @@ /* - * Copyright 2014, Google Inc. + * Copyright 2018, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * - * * Redistributions of source code must retain the above copyright + * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above + * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. - * * Neither the name of Google Inc. nor the names of its + * Neither the name of Google Inc. nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * @@ -29,7 +29,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package org.jf.util; +package org.jf.smali.util; import javax.annotation.Nonnull; import java.io.IOException; diff --git a/smali/src/main/jflex/smaliLexer.jflex b/smali/src/main/jflex/smaliLexer.jflex index 2cf3c869..1bae56e1 100644 --- a/smali/src/main/jflex/smaliLexer.jflex +++ b/smali/src/main/jflex/smaliLexer.jflex @@ -2,6 +2,7 @@ package org.jf.smali; import java.io.*; import org.antlr.runtime.*; +import org.jf.smali.util.*; import org.jf.util.*; import static org.jf.smali.smaliParser.*; @@ -408,6 +409,14 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayPrefix} ({ClassDescriptor} | "vtable@0x" {HexDigit}+ { return newToken(VTABLE_INDEX); } "field@0x" {HexDigit}+ { return newToken(FIELD_OFFSET); } + "static-put" | "static-get" | "instance-put" | "instance-get" { + return newToken(METHOD_HANDLE_TYPE_FIELD); + } + + "invoke-instance" | "invoke-constructor" { + return newToken(METHOD_HANDLE_TYPE_METHOD); + } + # [^\r\n]* { return newToken(LINE_COMMENT, true); } } @@ -476,6 +485,14 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayPrefix} ({ClassDescriptor} | return newToken(INSTRUCTION_FORMAT21c_TYPE); } + "const-method-handle" { + return newToken(INSTRUCTION_FORMAT21c_METHOD_HANDLE); + } + + "const-method-type" { + return newToken(INSTRUCTION_FORMAT21c_METHOD_TYPE); + } + "const/high16" { return newToken(INSTRUCTION_FORMAT21ih); } @@ -567,9 +584,17 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayPrefix} ({ClassDescriptor} | return newToken(INSTRUCTION_FORMAT32x); } - "invoke-virtual" | "invoke-super" | "invoke-direct" | "invoke-static" | "invoke-interface" { + "invoke-custom" { + return newToken(INSTRUCTION_FORMAT35c_CALL_SITE); + } + + "invoke-virtual" | "invoke-super" { return newToken(INSTRUCTION_FORMAT35c_METHOD); } + + "invoke-direct" | "invoke-static" | "invoke-interface" { + return newToken(INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE); + } "invoke-direct-empty" { return newToken(INSTRUCTION_FORMAT35c_METHOD_ODEX); @@ -587,6 +612,10 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayPrefix} ({ClassDescriptor} | return newToken(INSTRUCTION_FORMAT35ms_METHOD); } + "invoke-custom/range" { + return newToken(INSTRUCTION_FORMAT3rc_CALL_SITE); + } + "invoke-virtual/range" | "invoke-super/range" | "invoke-direct/range" | "invoke-static/range" | "invoke-interface/range" { return newToken(INSTRUCTION_FORMAT3rc_METHOD); @@ -668,6 +697,7 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayPrefix} ({ClassDescriptor} | "}" { return newToken(CLOSE_BRACE); } "(" { return newToken(OPEN_PAREN); } ")" { return newToken(CLOSE_PAREN); } + "@" { return newToken(AT); } [\r\n\t ]+ { return newToken(WHITE_SPACE, true); } <<EOF>> { return newToken(EOF); } } diff --git a/smali/src/test/java/org/jf/smali/ImplicitReferenceTest.java b/smali/src/test/java/org/jf/smali/ImplicitReferenceTest.java index 83046536..becb01cd 100644 --- a/smali/src/test/java/org/jf/smali/ImplicitReferenceTest.java +++ b/smali/src/test/java/org/jf/smali/ImplicitReferenceTest.java @@ -29,7 +29,9 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package org.jf.smali;import com.google.common.collect.Lists; +package org.jf.smali; + +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import junit.framework.Assert; import org.antlr.runtime.RecognitionException; @@ -47,7 +49,6 @@ import org.jf.dexlib2.iface.reference.MethodReference; import org.jf.dexlib2.iface.value.FieldEncodedValue; import org.jf.dexlib2.iface.value.MethodEncodedValue; import org.jf.dexlib2.iface.value.TypeEncodedValue; -import org.jf.smali.SmaliTestUtils; import org.junit.Test; import java.io.IOException; diff --git a/smali/src/test/resources/LexerTest/DirectiveTest.tokens b/smali/src/test/resources/LexerTest/DirectiveTest.tokens index 06f4da73..9b822202 100644 --- a/smali/src/test/resources/LexerTest/DirectiveTest.tokens +++ b/smali/src/test/resources/LexerTest/DirectiveTest.tokens @@ -53,7 +53,7 @@ INVALID_TOKEN(".end blah") INVALID_TOKEN(".local1234") INVALID_TOKEN(".super1234") SUPER_DIRECTIVE(".super") -INVALID_TOKEN("@") +AT("@") SUPER_DIRECTIVE(".super") SUPER_DIRECTIVE(".super") INVALID_TOKEN(".supeer") diff --git a/smali/src/test/resources/LexerTest/InstructionTest.smali b/smali/src/test/resources/LexerTest/InstructionTest.smali index 62e51006..a682926d 100644 --- a/smali/src/test/resources/LexerTest/InstructionTest.smali +++ b/smali/src/test/resources/LexerTest/InstructionTest.smali @@ -85,6 +85,8 @@ const-string check-cast new-instance const-class +const-method-handle +const-method-type const/high16 const-wide/high16 const/16 @@ -209,6 +211,7 @@ sparse-switch move/16 move-wide/16 move-object/16 +invoke-custom invoke-virtual invoke-super invoke-direct @@ -221,6 +224,7 @@ throw-verification-error execute-inline invoke-virtual-quick invoke-super-quick +invoke-custom/range invoke-virtual/range invoke-super/range invoke-direct/range diff --git a/smali/src/test/resources/LexerTest/InstructionTest.tokens b/smali/src/test/resources/LexerTest/InstructionTest.tokens index dfbd584b..c6166399 100644 --- a/smali/src/test/resources/LexerTest/InstructionTest.tokens +++ b/smali/src/test/resources/LexerTest/InstructionTest.tokens @@ -85,6 +85,8 @@ INSTRUCTION_FORMAT21c_STRING("const-string") INSTRUCTION_FORMAT21c_TYPE("check-cast") INSTRUCTION_FORMAT21c_TYPE("new-instance") INSTRUCTION_FORMAT21c_TYPE("const-class") +INSTRUCTION_FORMAT21c_METHOD_HANDLE("const-method-handle") +INSTRUCTION_FORMAT21c_METHOD_TYPE("const-method-type") INSTRUCTION_FORMAT21ih("const/high16") INSTRUCTION_FORMAT21lh("const-wide/high16") INSTRUCTION_FORMAT21s("const/16") @@ -209,11 +211,12 @@ INSTRUCTION_FORMAT31t("sparse-switch") INSTRUCTION_FORMAT32x("move/16") INSTRUCTION_FORMAT32x("move-wide/16") INSTRUCTION_FORMAT32x("move-object/16") +INSTRUCTION_FORMAT35c_CALL_SITE("invoke-custom") INSTRUCTION_FORMAT35c_METHOD("invoke-virtual") INSTRUCTION_FORMAT35c_METHOD("invoke-super") -INSTRUCTION_FORMAT35c_METHOD("invoke-direct") -INSTRUCTION_FORMAT35c_METHOD("invoke-static") -INSTRUCTION_FORMAT35c_METHOD("invoke-interface") +INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE("invoke-direct") +INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE("invoke-static") +INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE("invoke-interface") INSTRUCTION_FORMAT35c_TYPE("filled-new-array") INSTRUCTION_FORMAT35c_METHOD_ODEX("invoke-direct-empty") INSTRUCTION_FORMAT3rc_METHOD_ODEX("invoke-object-init/range") @@ -221,6 +224,7 @@ INSTRUCTION_FORMAT20bc("throw-verification-error") INSTRUCTION_FORMAT35mi_METHOD("execute-inline") INSTRUCTION_FORMAT35ms_METHOD("invoke-virtual-quick") INSTRUCTION_FORMAT35ms_METHOD("invoke-super-quick") +INSTRUCTION_FORMAT3rc_CALL_SITE("invoke-custom/range") INSTRUCTION_FORMAT3rc_METHOD("invoke-virtual/range") INSTRUCTION_FORMAT3rc_METHOD("invoke-super/range") INSTRUCTION_FORMAT3rc_METHOD("invoke-direct/range") diff --git a/smali/src/test/resources/LexerTest/MiscTest.smali b/smali/src/test/resources/LexerTest/MiscTest.smali index 32bbd272..0255d6af 100644 --- a/smali/src/test/resources/LexerTest/MiscTest.smali +++ b/smali/src/test/resources/LexerTest/MiscTest.smali @@ -45,6 +45,16 @@ illegal-method-access class-change-error instantiation-error +invoke-static +invoke-instance +invoke-constructor +invoke-direct +invoke-interface +static-put +static-get +instance-put +instance-get + inline@0xABCD inline@0x0123 inline@0x0123ABCD diff --git a/smali/src/test/resources/LexerTest/MiscTest.tokens b/smali/src/test/resources/LexerTest/MiscTest.tokens index ed5142d8..6f59df5a 100644 --- a/smali/src/test/resources/LexerTest/MiscTest.tokens +++ b/smali/src/test/resources/LexerTest/MiscTest.tokens @@ -45,6 +45,16 @@ VERIFICATION_ERROR_TYPE("illegal-method-access") VERIFICATION_ERROR_TYPE("class-change-error") VERIFICATION_ERROR_TYPE("instantiation-error") +INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE("invoke-static") +METHOD_HANDLE_TYPE_METHOD("invoke-instance") +METHOD_HANDLE_TYPE_METHOD("invoke-constructor") +INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE("invoke-direct") +INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE("invoke-interface") +METHOD_HANDLE_TYPE_FIELD("static-put") +METHOD_HANDLE_TYPE_FIELD("static-get") +METHOD_HANDLE_TYPE_FIELD("instance-put") +METHOD_HANDLE_TYPE_FIELD("instance-get") + INLINE_INDEX("inline@0xABCD") INLINE_INDEX("inline@0x0123") INLINE_INDEX("inline@0x0123ABCD") @@ -57,15 +67,15 @@ FIELD_OFFSET("field@0xABCD") FIELD_OFFSET("field@0x0123") FIELD_OFFSET("field@0x0123ABCD") -SIMPLE_NAME("inline") INVALID_TOKEN("@") -SIMPLE_NAME("inline") INVALID_TOKEN("@") SIMPLE_NAME("zzz") -SIMPLE_NAME("inline") INVALID_TOKEN("@") SIMPLE_NAME("abcd") -SIMPLE_NAME("vtable") INVALID_TOKEN("@") -SIMPLE_NAME("vtable") INVALID_TOKEN("@") SIMPLE_NAME("zzz") -SIMPLE_NAME("vtable") INVALID_TOKEN("@") SIMPLE_NAME("abcd") -SIMPLE_NAME("field") INVALID_TOKEN("@") -SIMPLE_NAME("field") INVALID_TOKEN("@") SIMPLE_NAME("zzz") -SIMPLE_NAME("field") INVALID_TOKEN("@") SIMPLE_NAME("abcd") +SIMPLE_NAME("inline") AT("@") +SIMPLE_NAME("inline") AT("@") SIMPLE_NAME("zzz") +SIMPLE_NAME("inline") AT("@") SIMPLE_NAME("abcd") +SIMPLE_NAME("vtable") AT("@") +SIMPLE_NAME("vtable") AT("@") SIMPLE_NAME("zzz") +SIMPLE_NAME("vtable") AT("@") SIMPLE_NAME("abcd") +SIMPLE_NAME("field") AT("@") +SIMPLE_NAME("field") AT("@") SIMPLE_NAME("zzz") +SIMPLE_NAME("field") AT("@") SIMPLE_NAME("abcd") INVALID_TOKEN("+") POSITIVE_INTEGER_LITERAL("0") INVALID_TOKEN("+") POSITIVE_INTEGER_LITERAL("10") diff --git a/smali/src/test/resources/LexerTest/RealSmaliFileTest.tokens b/smali/src/test/resources/LexerTest/RealSmaliFileTest.tokens index f9b096fb..d7e438aa 100644 --- a/smali/src/test/resources/LexerTest/RealSmaliFileTest.tokens +++ b/smali/src/test/resources/LexerTest/RealSmaliFileTest.tokens @@ -206,7 +206,7 @@ INSTRUCTION_FORMAT21c_TYPE("new-instance") REGISTER("v0") COMMA(",") CLASS_DESCRIPTOR("Lcom/android/internal/os/BatteryStatsImpl$1;") -INSTRUCTION_FORMAT35c_METHOD("invoke-direct") +INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE("invoke-direct") OPEN_BRACE("{") REGISTER("v0") CLOSE_BRACE("}") @@ -275,7 +275,7 @@ SIMPLE_NAME("phone") PROLOGUE_DIRECTIVE(".prologue") LINE_DIRECTIVE(".line") POSITIVE_INTEGER_LITERAL("42") -INSTRUCTION_FORMAT35c_METHOD("invoke-direct") +INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE("invoke-direct") OPEN_BRACE("{") REGISTER("p0") COMMA(",") @@ -397,7 +397,7 @@ INSTRUCTION_FORMAT21c_TYPE("new-instance") REGISTER("v2") COMMA(",") CLASS_DESCRIPTOR("Ljava/lang/StringBuilder;") -INSTRUCTION_FORMAT35c_METHOD("invoke-direct") +INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE("invoke-direct") OPEN_BRACE("{") REGISTER("v2") CLOSE_BRACE("}") @@ -457,7 +457,7 @@ CLOSE_PAREN(")") CLASS_DESCRIPTOR("Ljava/lang/String;") INSTRUCTION_FORMAT11x("move-result-object") REGISTER("v2") -INSTRUCTION_FORMAT35c_METHOD("invoke-direct") +INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE("invoke-direct") OPEN_BRACE("{") REGISTER("v1") COMMA(",") @@ -594,7 +594,7 @@ COMMA(",") POSITIVE_INTEGER_LITERAL("0x0") LINE_DIRECTIVE(".line") POSITIVE_INTEGER_LITERAL("981") -INSTRUCTION_FORMAT35c_METHOD("invoke-direct") +INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE("invoke-direct") OPEN_BRACE("{") REGISTER("p0") COMMA(",") @@ -615,7 +615,7 @@ REGISTER("v0") COMMA(",") COLON(":") SIMPLE_NAME("cond_28") -INSTRUCTION_FORMAT35c_METHOD("invoke-direct") +INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE("invoke-direct") OPEN_BRACE("{") REGISTER("p0") COMMA(",") diff --git a/smali/src/test/resources/LexerTest/SymbolTest.smali b/smali/src/test/resources/LexerTest/SymbolTest.smali index 6b11061b..d443a652 100644 --- a/smali/src/test/resources/LexerTest/SymbolTest.smali +++ b/smali/src/test/resources/LexerTest/SymbolTest.smali @@ -9,6 +9,7 @@ } ( ) +@ diff --git a/smali/src/test/resources/LexerTest/SymbolTest.tokens b/smali/src/test/resources/LexerTest/SymbolTest.tokens index 009c9324..9d967f77 100644 --- a/smali/src/test/resources/LexerTest/SymbolTest.tokens +++ b/smali/src/test/resources/LexerTest/SymbolTest.tokens @@ -8,5 +8,6 @@ OPEN_BRACE("{") WHITE_SPACE(" ") CLOSE_BRACE("}") WHITE_SPACE(" ") OPEN_PAREN("( OPEN_BRACE("{") WHITE_SPACE("\n") CLOSE_BRACE("}") WHITE_SPACE("\n") OPEN_PAREN("(") WHITE_SPACE("\n") -CLOSE_PAREN(")") +CLOSE_PAREN(")") WHITE_SPACE("\n") +AT("@") WHITE_SPACE("\n \n\t\n\t \n\t \n\t \t\n \t\n \t\n\r\r")
\ No newline at end of file diff --git a/smalidea/src/main/antlr/smalideaParser.g b/smalidea/src/main/antlr/smalideaParser.g index 0da263f2..f0eaf0e1 100644 --- a/smalidea/src/main/antlr/smalideaParser.g +++ b/smalidea/src/main/antlr/smalideaParser.g @@ -400,6 +400,7 @@ simple_name | INSTRUCTION_FORMAT31t | INSTRUCTION_FORMAT35c_METHOD | INSTRUCTION_FORMAT35c_METHOD_ODEX + | INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE | INSTRUCTION_FORMAT35c_TYPE | INSTRUCTION_FORMAT35mi_METHOD | INSTRUCTION_FORMAT35ms_METHOD @@ -1253,7 +1254,7 @@ insn_format32x insn_format35c_method : //e.g. invoke-virtual {v0,v1} java/io/PrintStream/print(Ljava/lang/Stream;)V - INSTRUCTION_FORMAT35c_METHOD register_list comma fully_qualified_method; + (INSTRUCTION_FORMAT35c_METHOD | INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE) register_list comma fully_qualified_method; insn_format35c_type : //e.g. filled-new-array {v0,v1}, I diff --git a/smalidea/src/main/java/org/jf/smalidea/SmaliLexer.java b/smalidea/src/main/java/org/jf/smalidea/SmaliLexer.java index 67e5945f..515749fa 100644 --- a/smalidea/src/main/java/org/jf/smalidea/SmaliLexer.java +++ b/smalidea/src/main/java/org/jf/smalidea/SmaliLexer.java @@ -38,7 +38,7 @@ import org.antlr.runtime.CommonToken; import org.jetbrains.annotations.NotNull; import org.jf.smali.smaliFlexLexer; import org.jf.smali.smaliParser; -import org.jf.util.BlankReader; +import org.jf.smali.util.BlankReader; public class SmaliLexer extends LexerBase { private final smaliFlexLexer lexer = new smaliFlexLexer(BlankReader.INSTANCE); diff --git a/smalidea/src/main/java/org/jf/smalidea/SmaliTokens.java b/smalidea/src/main/java/org/jf/smalidea/SmaliTokens.java index 83327649..248c5bdb 100644 --- a/smalidea/src/main/java/org/jf/smalidea/SmaliTokens.java +++ b/smalidea/src/main/java/org/jf/smalidea/SmaliTokens.java @@ -120,6 +120,7 @@ public class SmaliTokens { @SuppressWarnings({"UnusedDeclaration"}) public static IElementType INSTRUCTION_FORMAT32x; @SuppressWarnings({"UnusedDeclaration"}) public static IElementType INSTRUCTION_FORMAT35c_METHOD; @SuppressWarnings({"UnusedDeclaration"}) public static IElementType INSTRUCTION_FORMAT35c_METHOD_ODEX; + @SuppressWarnings({"UnusedDeclaration"}) public static IElementType INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE; @SuppressWarnings({"UnusedDeclaration"}) public static IElementType INSTRUCTION_FORMAT35c_TYPE; @SuppressWarnings({"UnusedDeclaration"}) public static IElementType INSTRUCTION_FORMAT35mi_METHOD; @SuppressWarnings({"UnusedDeclaration"}) public static IElementType INSTRUCTION_FORMAT35ms_METHOD; @@ -238,6 +239,7 @@ public class SmaliTokens { tokenColors.put("INSTRUCTION_FORMAT32x", SmaliHighlightingColors.INSTRUCTION); tokenColors.put("INSTRUCTION_FORMAT35c_METHOD", SmaliHighlightingColors.INSTRUCTION); tokenColors.put("INSTRUCTION_FORMAT35c_METHOD_ODEX", SmaliHighlightingColors.INSTRUCTION); + tokenColors.put("INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE", SmaliHighlightingColors.INSTRUCTION); tokenColors.put("INSTRUCTION_FORMAT35c_TYPE", SmaliHighlightingColors.INSTRUCTION); tokenColors.put("INSTRUCTION_FORMAT35mi_METHOD", SmaliHighlightingColors.INSTRUCTION); tokenColors.put("INSTRUCTION_FORMAT35ms_METHOD", SmaliHighlightingColors.INSTRUCTION); @@ -343,6 +345,7 @@ public class SmaliTokens { INSTRUCTION_FORMAT32x, INSTRUCTION_FORMAT35c_METHOD, INSTRUCTION_FORMAT35c_METHOD_ODEX, + INSTRUCTION_FORMAT35c_METHOD_OR_METHOD_HANDLE_TYPE, INSTRUCTION_FORMAT35c_TYPE, INSTRUCTION_FORMAT35mi_METHOD, INSTRUCTION_FORMAT35ms_METHOD, diff --git a/smalidea/src/test/java/org/jf/smalidea/dexlib/SmalideaMethodTest.java b/smalidea/src/test/java/org/jf/smalidea/dexlib/SmalideaMethodTest.java index 515c9bb7..e9aa35fc 100644 --- a/smalidea/src/test/java/org/jf/smalidea/dexlib/SmalideaMethodTest.java +++ b/smalidea/src/test/java/org/jf/smalidea/dexlib/SmalideaMethodTest.java @@ -428,10 +428,10 @@ public class SmalideaMethodTest extends LightCodeInsightFixtureTestCase { List<? extends SwitchElement> switchElements = packedSwitchPayload.getSwitchElements(); Assert.assertEquals(4, switchElements.size()); - checkSwitchElement(switchElements.get(0), 10, 6); - checkSwitchElement(switchElements.get(1), 11, 14); - checkSwitchElement(switchElements.get(2), 12, 22); - checkSwitchElement(switchElements.get(3), 13, 24); + checkSwitchElement(switchElements.get(0), 10, 3); + checkSwitchElement(switchElements.get(1), 11, 7); + checkSwitchElement(switchElements.get(2), 12, 11); + checkSwitchElement(switchElements.get(3), 13, 12); } public void testSparseSwitch() { @@ -494,11 +494,11 @@ public class SmalideaMethodTest extends LightCodeInsightFixtureTestCase { List<? extends SwitchElement> switchElements = sparseSwitchPayload.getSwitchElements(); Assert.assertEquals(5, switchElements.size()); - checkSwitchElement(switchElements.get(0), 10, 6); - checkSwitchElement(switchElements.get(1), 13, 30); - checkSwitchElement(switchElements.get(2), 15, 22); - checkSwitchElement(switchElements.get(3), 20, 14); - checkSwitchElement(switchElements.get(4), 99, 32); + checkSwitchElement(switchElements.get(0), 10, 3); + checkSwitchElement(switchElements.get(1), 13, 15); + checkSwitchElement(switchElements.get(2), 15, 11); + checkSwitchElement(switchElements.get(3), 20, 7); + checkSwitchElement(switchElements.get(4), 99, 16); } public void testArrayData() { diff --git a/smalidea/src/test/java/org/jf/smalidea/findUsages/FieldUsageTypeTest.java b/smalidea/src/test/java/org/jf/smalidea/findUsages/FieldUsageTypeTest.java index 128c97b5..ffc2f207 100644 --- a/smalidea/src/test/java/org/jf/smalidea/findUsages/FieldUsageTypeTest.java +++ b/smalidea/src/test/java/org/jf/smalidea/findUsages/FieldUsageTypeTest.java @@ -58,7 +58,9 @@ public class FieldUsageTypeTest extends UsageTypeTest { " sput-byte v0, Lblah;->bl<ref:35>ah:Lblah;\n" + " sput-char v0, Lblah;->bl<ref:36>ah:Lblah;\n" + " sput-object v0, Lblah;->bl<ref:37>ah:Lblah;\n" + - " sput-object-volatile v0, Lblah;->bl<ref:38>ah:Lblah;\n" + + // TODO: sput object volatile is no longer supported at default api level, + // thus disable his usage until Smalidea supports to define an api level + // " sput-object-volatile v0, Lblah;->bl<ref:38>ah:Lblah;\n" + " sput-short v0, Lblah;->bl<ref:39>ah:Lblah;\n" + " sput-volatile v0, Lblah;->bl<ref:40>ah:Lblah;\n" + " sput-wide v0, Lblah;->bl<ref:41>ah:Lblah;\n" + @@ -105,7 +107,9 @@ public class FieldUsageTypeTest extends UsageTypeTest { 35, UsageType.WRITE, 36, UsageType.WRITE, 37, UsageType.WRITE, - 38, UsageType.WRITE, + // TODO: sput object volatile is no longer supported at default api level, + // thus disable his usage until Smalidea supports to define an api level + //38, UsageType.WRITE, 39, UsageType.WRITE, 40, UsageType.WRITE, 41, UsageType.WRITE, diff --git a/util/Android.bp b/util/Android.bp index dc945c23..55f89eb9 100644 --- a/util/Android.bp +++ b/util/Android.bp @@ -16,6 +16,7 @@ java_library_host { name: "smali-util", srcs: ["src/main/java/**/*.java"], libs: [ + "dexlib2", "guava", "jcommander", "jsr305", diff --git a/util/build.gradle b/util/build.gradle index 23d6a3af..296e861c 100644 --- a/util/build.gradle +++ b/util/build.gradle @@ -30,6 +30,7 @@ */ dependencies { + compile project(':dexlib2') compile depends.findbugs compile depends.guava compile depends.jcommander diff --git a/util/src/main/java/org/jf/util/AlignmentUtils.java b/util/src/main/java/org/jf/util/AlignmentUtils.java deleted file mode 100644 index 45823614..00000000 --- a/util/src/main/java/org/jf/util/AlignmentUtils.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * [The "BSD licence"] - * Copyright (c) 2010 Ben Gruver (JesusFreke) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package org.jf.util; - -public abstract class AlignmentUtils { - public static int alignOffset(int offset, int alignment) { - int mask = alignment - 1; - assert (alignment >= 0) && ((mask & alignment) == 0); - return (offset + mask) & ~mask; - } - - public static boolean isAligned(int offset, int alignment) { - return (offset % alignment) == 0; - } -} diff --git a/util/src/main/java/org/jf/util/OldWrappedIndentingWriter.java b/util/src/main/java/org/jf/util/OldWrappedIndentingWriter.java deleted file mode 100644 index f4577179..00000000 --- a/util/src/main/java/org/jf/util/OldWrappedIndentingWriter.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright 2013, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package org.jf.util; - -import java.io.FilterWriter; -import java.io.IOException; -import java.io.Writer; - -/** - * Writer that wraps another writer and passes width-limited and - * optionally-prefixed output to its subordinate. When lines are - * wrapped they are automatically indented based on the start of the - * line. - */ -public final class OldWrappedIndentingWriter extends FilterWriter { - /** null-ok; optional prefix for every line */ - private final String prefix; - - /** > 0; the maximum output width */ - private final int width; - - /** > 0; the maximum indent */ - private final int maxIndent; - - /** >= 0; current output column (zero-based) */ - private int column; - - /** whether indent spaces are currently being collected */ - private boolean collectingIndent; - - /** >= 0; current indent amount */ - private int indent; - - /** - * Constructs an instance. - * - * @param out non-null; writer to send final output to - * @param width >= 0; the maximum output width (not including - * <code>prefix</code>), or <code>0</code> for no maximum - * @param prefix non-null; the prefix for each line - */ - public OldWrappedIndentingWriter(Writer out, int width, String prefix) { - super(out); - - if (out == null) { - throw new NullPointerException("out == null"); - } - - if (width < 0) { - throw new IllegalArgumentException("width < 0"); - } - - if (prefix == null) { - throw new NullPointerException("prefix == null"); - } - - this.width = (width != 0) ? width : Integer.MAX_VALUE; - this.maxIndent = width >> 1; - this.prefix = (prefix.length() == 0) ? null : prefix; - - bol(); - } - - /** - * Constructs a no-prefix instance. - * - * @param out non-null; writer to send final output to - * @param width >= 0; the maximum output width (not including - * <code>prefix</code>), or <code>0</code> for no maximum - */ - public OldWrappedIndentingWriter(Writer out, int width) { - this(out, width, ""); - } - - /** {@inheritDoc} */ - @Override - public void write(int c) throws IOException { - synchronized (lock) { - if (collectingIndent) { - if (c == ' ') { - indent++; - if (indent >= maxIndent) { - indent = maxIndent; - collectingIndent = false; - } - } else { - collectingIndent = false; - } - } - - if ((column == width) && (c != '\n')) { - out.write('\n'); - column = 0; - /* - * Note: No else, so this should fall through to the next - * if statement. - */ - } - - if (column == 0) { - if (prefix != null) { - out.write(prefix); - } - - if (!collectingIndent) { - for (int i = 0; i < indent; i++) { - out.write(' '); - } - column = indent; - } - } - - out.write(c); - - if (c == '\n') { - bol(); - } else { - column++; - } - } - } - - /** {@inheritDoc} */ - @Override - public void write(char[] cbuf, int off, int len) throws IOException { - synchronized (lock) { - while (len > 0) { - write(cbuf[off]); - off++; - len--; - } - } - } - - /** {@inheritDoc} */ - @Override - public void write(String str, int off, int len) throws IOException { - synchronized (lock) { - while (len > 0) { - write(str.charAt(off)); - off++; - len--; - } - } - } - - /** - * Indicates that output is at the beginning of a line. - */ - private void bol() { - column = 0; - collectingIndent = (maxIndent != 0); - indent = 0; - } -} diff --git a/util/src/main/java/org/jf/util/TextUtils.java b/util/src/main/java/org/jf/util/TextUtils.java deleted file mode 100644 index 66a1082d..00000000 --- a/util/src/main/java/org/jf/util/TextUtils.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2014, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package org.jf.util; - -import javax.annotation.Nonnull; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class TextUtils { - private static String newline = System.getProperty("line.separator"); - - @Nonnull - public static String normalizeNewlines(@Nonnull String source) { - return normalizeNewlines(source, newline); - } - - @Nonnull - public static String normalizeNewlines(@Nonnull String source, String newlineValue) { - return source.replace("\r", "").replace("\n", newlineValue); - } - - @Nonnull - public static String normalizeWhitespace(@Nonnull String source) { - // Go to native system new lines so that ^/$ work correctly - source = normalizeNewlines(source); - - // Remove all suffix/prefix whitespace - Pattern pattern = Pattern.compile("((^[ \t]+)|([ \t]+$))", Pattern.MULTILINE); - Matcher matcher = pattern.matcher(source); - source = matcher.replaceAll(""); - - // Remove all empty lines - Pattern pattern2 = Pattern.compile("^\r?\n?", Pattern.MULTILINE); - Matcher matcher2 = pattern2.matcher(source); - source = matcher2.replaceAll(""); - - // Remove a trailing new line, if present - Pattern pattern3 = Pattern.compile("\r?\n?$"); - Matcher matcher3 = pattern3.matcher(source); - source = matcher3.replaceAll(""); - - // Go back to unix-style \n newlines - source = normalizeNewlines(source, "\n"); - return source; - } - - @Nonnull - public static String stripComments(@Nonnull String source) { - Pattern pattern = Pattern.compile("#(.*)"); - Matcher matcher = pattern.matcher(source); - return matcher.replaceAll(""); - } -} diff --git a/util/src/main/java/org/jf/util/jcommander/HelpFormatter.java b/util/src/main/java/org/jf/util/jcommander/HelpFormatter.java index e807d5fe..662167eb 100644 --- a/util/src/main/java/org/jf/util/jcommander/HelpFormatter.java +++ b/util/src/main/java/org/jf/util/jcommander/HelpFormatter.java @@ -34,9 +34,9 @@ package org.jf.util.jcommander; import com.beust.jcommander.JCommander; import com.beust.jcommander.ParameterDescription; import com.beust.jcommander.Parameters; -import com.beust.jcommander.internal.Lists; import com.google.common.base.Joiner; import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; import org.jf.util.WrappedIndentingWriter; import javax.annotation.Nonnull; |