diff --git a/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/editing/DebuggerStateEditingPluginIntegrationTest.java b/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/editing/DebuggerStateEditingPluginIntegrationTest.java index d4be04f87d..a2051b465e 100644 --- a/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/editing/DebuggerStateEditingPluginIntegrationTest.java +++ b/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/editing/DebuggerStateEditingPluginIntegrationTest.java @@ -105,14 +105,14 @@ public class DebuggerStateEditingPluginIntegrationTest extends AbstractGhidraHea assertTrue( helper.patchInstructionAction.isAddToPopup(listingProvider.getActionContext(null))); Instruction ins = - helper.patchInstructionAt(tb.addr(0x00400123), "imm r0,#0x0", "imm r0,#1234"); + helper.patchInstructionAt(tb.addr(0x00400123), "imm r0,#0x0", "imm r0,#0x3d2"); assertEquals(2, ins.getLength()); long snap = traceManager.getCurrent().getViewSnap(); assertTrue(DBTraceUtils.isScratch(snap)); byte[] bytes = new byte[2]; view.getMemory().getBytes(tb.addr(0x00400123), bytes); - assertArrayEquals(tb.arr(0x40, 1234), bytes); + assertArrayEquals(tb.arr(0x30, 0xd2), bytes); } @Test diff --git a/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/pcode/DebuggerPcodeStepperProviderTest.java b/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/pcode/DebuggerPcodeStepperProviderTest.java index d90195a8e6..1a896c8ce1 100644 --- a/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/pcode/DebuggerPcodeStepperProviderTest.java +++ b/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/pcode/DebuggerPcodeStepperProviderTest.java @@ -86,8 +86,8 @@ public class DebuggerPcodeStepperProviderTest extends AbstractGhidraHeadedDebugg Assembler asm = Assemblers.getAssembler(tb.trace.getFixedProgramView(0)); iit = asm.assemble(start, - "imm r0, #1234", - "imm r1, #2045"); // 11 bits unsigned + "imm r0, #0x3d2", + "imm r1, #911"); // 10 bits unsigned } imm1234 = iit.next(); diff --git a/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/pcode/exec/trace/TracePcodeEmulatorTest.java b/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/pcode/exec/trace/TracePcodeEmulatorTest.java index 8405873dbd..6ac86dc668 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/pcode/exec/trace/TracePcodeEmulatorTest.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/pcode/exec/trace/TracePcodeEmulatorTest.java @@ -309,7 +309,7 @@ public class TracePcodeEmulatorTest extends AbstractGhidraHeadlessIntegrationTes "pc = 0x00400000;", "sp = 0x00110000;"), List.of( - "imm r0, #1234")); // decimal + "imm r0, #911")); // decimal TracePcodeEmulator emu = new TracePcodeEmulator(tb.trace, 0); PcodeThread emuThread = emu.newThread(thread.getPath()); @@ -324,7 +324,7 @@ public class TracePcodeEmulatorTest extends AbstractGhidraHeadlessIntegrationTes TraceSleighUtils.evaluate("sp", tb.trace, 1, thread, 0)); assertEquals(BigInteger.valueOf(0x00400002), TraceSleighUtils.evaluate("pc", tb.trace, 1, thread, 0)); - assertEquals(BigInteger.valueOf(1234), + assertEquals(BigInteger.valueOf(911), TraceSleighUtils.evaluate("r0", tb.trace, 1, thread, 0)); } } @@ -341,9 +341,9 @@ public class TracePcodeEmulatorTest extends AbstractGhidraHeadlessIntegrationTes "sp = 0x00110000;"), List.of( "brds 0x00400006", - "imm r0, #1234", // decimal - "imm r0, #2020", - "imm r1, #2021")); + "imm r0, #911", // decimal + "imm r0, #860", + "imm r1, #861")); TracePcodeEmulator emu = new TracePcodeEmulator(tb.trace, 0); PcodeThread emuThread = emu.newThread(thread.getPath()); @@ -357,9 +357,9 @@ public class TracePcodeEmulatorTest extends AbstractGhidraHeadlessIntegrationTes assertEquals(BigInteger.valueOf(0x00400008), TraceSleighUtils.evaluate("pc", tb.trace, 1, thread, 0)); - assertEquals(BigInteger.valueOf(1234), + assertEquals(BigInteger.valueOf(911), TraceSleighUtils.evaluate("r0", tb.trace, 1, thread, 0)); - assertEquals(BigInteger.valueOf(2021), + assertEquals(BigInteger.valueOf(861), TraceSleighUtils.evaluate("r1", tb.trace, 1, thread, 0)); } } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/pcode/AbstractPcodeFormatter.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/pcode/AbstractPcodeFormatter.java index fd51a8fb93..b09254dccf 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/pcode/AbstractPcodeFormatter.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/pcode/AbstractPcodeFormatter.java @@ -176,6 +176,9 @@ public abstract class AbstractPcodeFormatter> else if (offset.getType() == ConstTpl.J_NEXT) { appender.appendLabel("inst_next"); } + else if (offset.getType() == ConstTpl.J_NEXT2) { + appender.appendLabel("inst_next2"); + } else { formatAddress(appender, null, offset, size); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/test/ToyProgramBuilder.java b/Ghidra/Features/Base/src/main/java/ghidra/test/ToyProgramBuilder.java index 00ce20c00f..261bf44e37 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/test/ToyProgramBuilder.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/test/ToyProgramBuilder.java @@ -494,6 +494,27 @@ public class ToyProgramBuilder extends ProgramBuilder { addInstructionWords(address, (short) (0xe000 | (relDest << 4))); // breq rel } + /** + * Add conditional skip (consumes 2-bytes) + * @param offset instruction address offset + * @throws MemoryAccessException + */ + public void addBytesSkipConditional(long offset) + throws MemoryAccessException { + addBytesSkipConditional(toHex(offset)); + } + + /** + * Add conditional skip (consumes 2-bytes) + * @param addr instruction address + * @throws MemoryAccessException + */ + public void addBytesSkipConditional(String addr) + throws MemoryAccessException { + Address address = addr(addr); + addInstructionWords(address, (short) (0x8000)); // skeq + } + /** * Add branch w/ delay slot (consumes 4-bytes) * @param offset instruction address offset diff --git a/Ghidra/Features/Base/src/test/java/ghidra/app/plugin/core/assembler/AssemblerPluginTest.java b/Ghidra/Features/Base/src/test/java/ghidra/app/plugin/core/assembler/AssemblerPluginTest.java index a7a5fba626..6f5e22fe6a 100644 --- a/Ghidra/Features/Base/src/test/java/ghidra/app/plugin/core/assembler/AssemblerPluginTest.java +++ b/Ghidra/Features/Base/src/test/java/ghidra/app/plugin/core/assembler/AssemblerPluginTest.java @@ -15,7 +15,7 @@ */ package ghidra.app.plugin.core.assembler; -import static org.junit.Assert.assertEquals; +import static org.junit.Assert.*; import org.junit.*; @@ -90,8 +90,8 @@ public class AssemblerPluginTest extends AbstractGhidraHeadedIntegrationTest { @Test public void testActionPatchInstructionNoExisting() throws Exception { Address address = space.getAddress(0x00400000); - Instruction ins = helper.patchInstructionAt(address, "", "imm r0, #1234"); - assertEquals("imm r0,#0x4d2", ins.toString()); + Instruction ins = helper.patchInstructionAt(address, "", "imm r0, #911"); + assertEquals("imm r0,#0x38f", ins.toString()); } @Test @@ -99,11 +99,11 @@ public class AssemblerPluginTest extends AbstractGhidraHeadedIntegrationTest { Address address = space.getAddress(0x00400000); Assembler asm = Assemblers.getAssembler(program); try (ProgramTransaction trans = ProgramTransaction.open(program, "Assemble pre-existing")) { - asm.assemble(address, "imm r0,#0x4d2"); + asm.assemble(address, "imm r0,#0x3d2"); trans.commit(); } - Instruction ins = helper.patchInstructionAt(address, "imm r0,#0x4d2", "imm r0, #123"); + Instruction ins = helper.patchInstructionAt(address, "imm r0,#0x3d2", "imm r0, #123"); assertEquals("imm r0,#0x7b", ins.toString()); } diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/context.hh b/Ghidra/Features/Decompiler/src/decompile/cpp/context.hh index 3372e5ac55..650e1e78dc 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/context.hh +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/context.hh @@ -106,6 +106,7 @@ public: void applyCommits(void); const Address &getAddr(void) const { return addr; } const Address &getNaddr(void) const { return naddr; } + const Address &getN2addr(void) const { return naddr; /* inst_next2 not supported */ } const Address &getDestAddr(void) const { return calladdr; } const Address &getRefAddr(void) const { return calladdr; } AddrSpace *getCurSpace(void) const { return addr.getSpace(); } @@ -147,6 +148,7 @@ public: AddrSpace *getConstSpace(void) const { return const_context->getConstSpace(); } const Address &getAddr(void) const { if (cross_context != (const ParserContext *)0) { return cross_context->getAddr(); } return const_context->getAddr(); } const Address &getNaddr(void) const { if (cross_context != (const ParserContext *)0) { return cross_context->getNaddr();} return const_context->getNaddr(); } + const Address &getN2addr(void) const { if (cross_context != (const ParserContext *)0) { return cross_context->getN2addr();} return const_context->getN2addr(); } const Address &getRefAddr(void) const { if (cross_context != (const ParserContext *)0) { return cross_context->getRefAddr();} return const_context->getRefAddr(); } const Address &getDestAddr(void) const { if (cross_context != (const ParserContext *)0) { return cross_context->getDestAddr();} return const_context->getDestAddr(); } int4 getLength(void) const { return const_context->getLength(); } diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/funcdata.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/funcdata.cc index 02229662d5..f187cdd571 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/funcdata.cc +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/funcdata.cc @@ -791,7 +791,7 @@ void Funcdata::doLiveInject(InjectPayload *payload,const Address &addr,BlockBasi emitter.setFuncdata(this); context.clear(); - context.baseaddr = addr; // Shouldn't be using inst_next and inst_start here + context.baseaddr = addr; // Shouldn't be using inst_next, inst_next2 or inst_start here context.nextaddr = addr; list::const_iterator deaditer = obank.endDead(); diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/pcodeinject.hh b/Ghidra/Features/Decompiler/src/decompile/cpp/pcodeinject.hh index 86821b222e..d57215bc7c 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/pcodeinject.hh +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/pcodeinject.hh @@ -69,6 +69,7 @@ public: /// concrete Varnodes. This class contains the context dependent data to resolve: /// - inst_start -- the address where the injection occurs /// - inst_next -- the address of the instruction following (the instruction being injected) +/// - inst_next2 -- the address of the instruction after the next instruction (Not Supported) /// - inst_dest -- Original destination of CALL being injected /// - inst_ref -- Target of reference on injected instruction /// - \ -- Input Varnode of the injection referenced by name diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/pcodeparse.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/pcodeparse.cc index 1b3236d101..c562c0f834 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/pcodeparse.cc +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/pcodeparse.cc @@ -75,17 +75,17 @@ /* Substitute the variable and function names. */ -#define yyparse pcodeparseparse -#define yylex pcodeparselex -#define yyerror pcodeparseerror -#define yydebug pcodeparsedebug -#define yynerrs pcodeparsenerrs +#define yyparse pcodeparse +#define yylex pcodelex +#define yyerror pcodeerror +#define yydebug pcodedebug +#define yynerrs pcodenerrs -#define yylval pcodeparselval -#define yychar pcodeparsechar +#define yylval pcodelval +#define yychar pcodechar /* Copy the first part of user declarations. */ -#line 16 "src/decompile/cpp/pcodeparse.y" /* yacc.c:339 */ +#line 16 "pcodeparse.y" /* yacc.c:339 */ #include "pcodeparse.hh" @@ -95,7 +95,7 @@ extern int yydebug; extern int yyerror(const char *str ); -#line 84 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:339 */ +#line 84 "pcodeparse.cc" /* yacc.c:339 */ # ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus @@ -119,7 +119,7 @@ # define YYDEBUG 0 #endif #if YYDEBUG -extern int pcodeparsedebug; +extern int pcodedebug; #endif /* Token type. */ @@ -184,7 +184,8 @@ extern int pcodeparsedebug; OPERANDSYM = 312, STARTSYM = 313, ENDSYM = 314, - LABELSYM = 315 + NEXT2SYM = 315, + LABELSYM = 316 }; #endif @@ -193,7 +194,7 @@ extern int pcodeparsedebug; union YYSTYPE { -#line 26 "src/decompile/cpp/pcodeparse.y" /* yacc.c:355 */ +#line 26 "pcodeparse.y" /* yacc.c:355 */ uintb *i; string *str; @@ -209,11 +210,12 @@ union YYSTYPE LabelSymbol *labelsym; StartSymbol *startsym; EndSymbol *endsym; + Next2Symbol *next2sym; OperandSymbol *operandsym; VarnodeSymbol *varsym; SpecificSymbol *specsym; -#line 202 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:355 */ +#line 204 "pcodeparse.cc" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -222,15 +224,15 @@ typedef union YYSTYPE YYSTYPE; #endif -extern YYSTYPE pcodeparselval; +extern YYSTYPE pcodelval; -int pcodeparseparse (void); +int pcodeparse (void); /* Copy the second part of user declarations. */ -#line 219 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:358 */ +#line 221 "pcodeparse.cc" /* yacc.c:358 */ #ifdef short # undef short @@ -472,21 +474,21 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 1919 +#define YYLAST 1968 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 81 +#define YYNTOKENS 82 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 13 /* YYNRULES -- Number of rules. */ -#define YYNRULES 118 +#define YYNRULES 120 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 296 +#define YYNSTATES 298 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 315 +#define YYMAXUTOK 316 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -499,12 +501,12 @@ static const yytype_uint8 yytranslate[] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 40, 2, 2, 2, 35, 9, 2, - 76, 77, 33, 29, 79, 30, 2, 34, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 74, 7, - 14, 75, 15, 2, 2, 2, 2, 2, 2, 2, + 77, 78, 33, 29, 80, 30, 2, 34, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 75, 7, + 14, 76, 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 78, 2, 80, 8, 2, 2, 2, 2, 2, + 2, 79, 2, 81, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 2, 41, 2, 2, 2, @@ -526,25 +528,26 @@ static const yytype_uint8 yytranslate[] = 36, 37, 38, 39, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, 73 + 68, 69, 70, 71, 72, 73, 74 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { - 0, 100, 100, 102, 103, 104, 105, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 188, 189, 191, - 192, 193, 194, 196, 197, 198, 199, 200, 201, 202, - 204, 205, 206, 208, 209, 210, 211, 212, 214, 215, - 217, 218, 220, 221, 222, 223, 225, 226, 227 + 0, 102, 102, 104, 105, 106, 107, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 193, + 194, 195, 196, 198, 199, 200, 201, 202, 203, 204, + 205, 207, 208, 209, 211, 212, 213, 214, 215, 217, + 218, 220, 221, 223, 224, 225, 226, 227, 229, 230, + 231 }; #endif @@ -565,9 +568,9 @@ static const char *const yytname[] = "OP_ROUND", "OP_INT2FLOAT", "OP_FLOAT2FLOAT", "OP_TRUNC", "OP_NEW", "BADINTEGER", "GOTO_KEY", "CALL_KEY", "RETURN_KEY", "IF_KEY", "ENDOFSTREAM", "LOCAL_KEY", "INTEGER", "STRING", "SPACESYM", "USEROPSYM", - "VARSYM", "OPERANDSYM", "STARTSYM", "ENDSYM", "LABELSYM", "':'", "'='", - "'('", "')'", "'['", "','", "']'", "$accept", "rtl", "rtlmid", - "statement", "expr", "sizedstar", "jumpdest", "varnode", + "VARSYM", "OPERANDSYM", "STARTSYM", "ENDSYM", "NEXT2SYM", "LABELSYM", + "':'", "'='", "'('", "')'", "'['", "','", "']'", "$accept", "rtl", + "rtlmid", "statement", "expr", "sizedstar", "jumpdest", "varnode", "integervarnode", "lhsvarnode", "label", "specificsymbol", "paramlist", YY_NULLPTR }; #endif @@ -584,55 +587,55 @@ static const yytype_uint16 yytoknum[] = 33, 126, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 58, 61, 40, 41, 91, 44, - 93 + 312, 313, 314, 315, 316, 58, 61, 40, 41, 91, + 44, 93 }; # endif -#define YYPACT_NINF -67 +#define YYPACT_NINF -68 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-67))) + (!!((Yystate) == (-68))) -#define YYTABLE_NINF -110 +#define YYTABLE_NINF -111 #define yytable_value_is_error(Yytable_value) \ - (!!((Yytable_value) == (-110))) + (!!((Yytable_value) == (-111))) /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { - -67, 9, 203, -67, -2, -39, -43, -67, 135, 137, - -1, 1490, -67, -18, -66, -46, -50, -67, -67, -67, - -67, -67, 1490, 76, -67, 67, -67, 68, -67, -10, - -67, -67, 34, 35, 11, -6, -67, -13, -67, -67, - -67, 1490, 75, -67, 1490, 79, -67, 1490, 1490, 1490, - 1490, 1490, 7, 27, 28, 65, 71, 78, 84, 118, - 122, 123, 138, 140, 143, 145, 146, 147, 1490, 1564, - 1490, -67, -16, 5, 12, 159, 161, 1490, 1490, 1459, - 162, 164, 1490, 165, 187, -67, -67, -67, 151, 167, - 153, -67, 275, -67, 312, -67, -67, -67, -67, 1490, - 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, - 1490, 1490, 1490, 1490, 1490, 603, 1490, 1490, 1490, 1490, - 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, - 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, - 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, - 1490, 1490, 139, -67, 170, 16, 172, -67, 173, 1490, - -67, -67, 157, 1621, 1880, -4, 1490, 166, 169, 1658, - 160, -67, 174, 171, 237, 240, 242, 640, 422, 710, - 494, 531, 747, 817, 854, 924, 961, 1031, 1068, 1138, - 1175, 385, 141, -67, 348, 457, 457, 566, 672, 778, - 881, 881, 881, 881, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, -15, -15, -15, 8, - 8, 8, 8, -67, -67, -67, -67, -67, -67, -67, - 243, -67, 178, 191, 3, 1695, 1490, -67, 269, 1490, - 1732, -67, -67, -67, 212, 254, -67, -67, -67, -67, - -67, 1490, -67, 1490, 1490, -67, -67, -67, -67, -67, - -67, -67, -67, -67, -67, 1490, -67, -67, -67, 364, - -67, 1490, -67, 1769, -67, 1880, -67, 458, -67, 1245, - 1282, 1352, 1389, 491, 1806, -67, 497, -67, -67, -67, - -67, -67, -67, 1490, 1843, -67 + -68, 9, 1480, -68, 459, -40, -46, -68, 564, 672, + -1, 1430, -68, -23, -45, -48, -41, -68, -68, -68, + -68, -68, -68, 1430, -67, -68, -22, -68, -12, -68, + -28, -68, -68, 29, 30, -13, -5, -68, -7, -68, + -68, -68, -68, 1430, 58, -68, 1430, 59, -68, 1430, + 1430, 1430, 1430, 1430, -3, 5, 8, 11, 12, 28, + 66, 67, 68, 70, 71, 72, 74, 75, 117, 151, + 1430, 1551, 1430, -68, -24, 4, -6, 10, 16, 1430, + 1430, 1398, 19, 41, 1430, 164, 785, -68, -68, -68, + -4, 172, 150, -68, 187, -68, 277, -68, -68, -68, + -68, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, + 1430, 1430, 1430, 1430, 1430, 1430, 1430, 534, 1430, 1430, + 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, + 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, + 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, + 1430, 1430, 1430, 1430, 888, -68, 175, -2, 176, -68, + 178, 1430, -68, -68, 170, 1608, 1867, -20, 1430, 171, + 173, 1645, 168, -68, 174, 169, 69, 245, 246, 571, + 351, 642, 424, 461, 679, 750, 787, 858, 895, 966, + 1003, 1074, 1111, 314, -9, -68, 1903, 387, 387, 1037, + 1144, 1251, 1355, 1355, 1355, 1355, 1929, 1929, 1929, 1929, + 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, -14, -14, + -14, 199, 199, 199, 199, -68, -68, -68, -68, -68, + -68, -68, 247, -68, 177, 179, 7, 1682, 1430, -68, + 250, 1430, 1719, -68, -68, -68, 193, 195, -68, -68, + -68, -68, -68, 1430, -68, 1430, 1430, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, 1430, -68, -68, + -68, 196, -68, 1430, -68, 1756, -68, 1867, -68, 182, + -68, 1182, 1219, 1290, 1327, 183, 1793, -68, 189, -68, + -68, -68, -68, -68, -68, 1430, 1830, -68 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -640,50 +643,50 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 3, 0, 0, 1, 0, 0, 92, 104, 0, 0, - 0, 0, 2, 0, 103, 102, 0, 112, 113, 114, - 115, 4, 0, 0, 101, 0, 25, 100, 102, 0, - 106, 100, 0, 0, 0, 0, 96, 95, 99, 93, - 94, 0, 0, 98, 0, 0, 23, 0, 0, 0, + 3, 0, 0, 1, 0, 0, 92, 105, 0, 0, + 0, 0, 2, 0, 104, 103, 0, 113, 114, 115, + 116, 117, 4, 0, 0, 102, 0, 25, 101, 103, + 0, 107, 101, 0, 0, 0, 0, 97, 96, 100, + 93, 94, 95, 0, 0, 99, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 26, 100, 0, 0, 0, 0, 0, 116, 0, - 0, 0, 0, 0, 0, 111, 110, 91, 0, 0, - 0, 18, 0, 21, 0, 41, 68, 54, 42, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, + 0, 0, 0, 26, 101, 0, 0, 0, 0, 0, + 118, 0, 0, 0, 0, 0, 0, 112, 111, 91, + 0, 0, 0, 18, 0, 21, 0, 41, 68, 54, + 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 27, 0, 0, 0, 5, 0, 0, - 12, 105, 0, 0, 117, 0, 0, 0, 0, 0, - 0, 107, 90, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 27, 0, 0, 0, 5, + 0, 0, 12, 106, 0, 0, 119, 0, 0, 0, + 0, 0, 0, 108, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 28, 57, 56, 55, 45, 43, 44, - 31, 32, 58, 59, 33, 36, 34, 35, 37, 38, - 39, 40, 60, 61, 62, 63, 46, 47, 48, 29, - 30, 64, 65, 49, 50, 52, 51, 53, 66, 67, - 0, 86, 0, 0, 0, 0, 0, 9, 0, 0, - 0, 16, 17, 7, 0, 0, 97, 20, 22, 24, - 72, 0, 71, 0, 0, 78, 69, 70, 80, 81, - 82, 77, 76, 79, 83, 0, 88, 19, 85, 0, - 6, 0, 8, 0, 14, 118, 13, 0, 89, 0, - 0, 0, 0, 0, 0, 11, 0, 73, 74, 75, - 84, 87, 10, 0, 0, 15 + 0, 0, 0, 0, 0, 28, 57, 56, 55, 45, + 43, 44, 31, 32, 58, 59, 33, 36, 34, 35, + 37, 38, 39, 40, 60, 61, 62, 63, 46, 47, + 48, 29, 30, 64, 65, 49, 50, 52, 51, 53, + 66, 67, 0, 86, 0, 0, 0, 0, 0, 9, + 0, 0, 0, 16, 17, 7, 0, 0, 98, 20, + 22, 24, 72, 0, 71, 0, 0, 78, 69, 70, + 80, 81, 82, 77, 76, 79, 83, 0, 88, 19, + 85, 0, 6, 0, 8, 0, 14, 120, 13, 0, + 89, 0, 0, 0, 0, 0, 0, 11, 0, 73, + 74, 75, 84, 87, 10, 0, 0, 15 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -67, -67, -67, -67, -11, 645, -8, 1, 557, -67, - 752, 0, 704 + -68, -68, -68, -68, -11, 264, -8, 1, 110, -68, + 267, 0, 154 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 2, 21, 164, 70, 42, 71, 24, 25, - 43, 72, 165 + -1, 1, 2, 22, 166, 72, 44, 73, 25, 26, + 45, 74, 167 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -691,369 +694,369 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 69, 45, 27, 23, 31, 30, 46, 4, 75, 3, - 270, 79, 157, 74, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 151, 4, 78, 32, 76, 77, - 90, 34, -109, 92, 33, 35, 94, 95, 96, 97, - 98, 145, 146, 147, 148, 149, 150, 151, 73, 85, - 86, 17, 18, 19, 20, 84, 7, 115, 154, 153, - 155, 88, 156, 14, 28, 89, 163, 17, 18, 19, - 20, 169, 29, 238, 7, 239, 87, 47, 271, 158, - 159, 14, 91, 99, 31, 171, 93, 160, 177, 178, + 71, 47, 28, 24, 32, 31, 48, 4, 82, 3, + 83, 159, 81, 76, 272, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 33, 78, 79, 35, + 77, -110, 92, 36, 34, 94, 80, 86, 96, 97, + 98, 99, 100, 75, 87, 88, 17, 18, 19, 20, + 21, 156, 89, 157, 84, 158, 7, 85, 240, 117, + 241, 155, 90, 14, -109, 93, 95, -109, 165, 268, + 162, 241, 91, 171, 101, 163, 249, 174, 49, 160, + 161, 164, 102, 273, 169, 103, 32, 173, 104, 105, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, - 189, 190, 191, 100, 101, 194, 195, 196, 197, 198, + 189, 190, 191, 192, 193, 106, 170, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 102, 82, -108, 230, 83, -108, 103, 235, 5, - 80, 5, 81, 5, 104, 240, 116, 117, 118, 119, - 105, 120, 121, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 36, 106, 36, 4, 36, 107, 108, - 37, 38, 37, 38, 37, 38, 39, 40, 39, 40, - 39, 40, 4, 41, 109, 44, 110, 5, 266, 111, - 239, 112, 113, 114, 161, 273, 162, 167, 275, 168, - 170, 172, 236, 174, 173, 231, 6, 233, 234, 244, - 279, 241, 280, 281, 247, 7, 242, 248, 245, 249, - 267, 246, 14, 28, 282, 268, 17, 18, 19, 20, - 284, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 269, 16, 17, 18, 19, 20, 274, 277, 116, 117, - 118, 119, 294, 120, 121, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 151, 116, 117, 118, 119, 278, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 117, 118, 119, 175, 120, 121, 122, 123, + 229, 230, 231, 107, 108, 109, 232, 110, 111, 112, + 237, 113, 114, 118, 119, 120, 121, 242, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 116, 117, - 118, 119, 176, 120, 121, 122, 123, 124, 125, 126, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 118, 119, 120, 121, 115, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 151, 116, 117, 118, 119, 283, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 147, 148, 149, 150, 151, 152, 153, 275, 116, 172, + 277, 176, 147, 148, 149, 150, 151, 152, 153, 175, + 233, 235, 281, 236, 282, 283, 238, 243, 246, 247, + 248, 244, 250, 251, 269, 270, 284, 276, 279, 271, + 280, 285, 286, 288, 293, 295, 23, 234, 177, 27, + 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 118, 119, 120, 121, 296, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 118, 119, 120, + 121, 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 264, 119, 265, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 116, 117, 118, - 119, 251, 120, 121, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 116, 117, 118, 119, 286, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 291, 293, 253, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 116, 117, 118, 119, - 254, 120, 121, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 116, 117, 118, 119, 22, 120, 121, + 150, 151, 152, 153, 118, 119, 120, 121, 178, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 0, 266, 121, 267, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 118, 119, 120, + 121, 253, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 118, 119, 120, 121, 4, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 0, 0, 0, 255, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 14, 29, 0, 0, 17, 18, + 19, 20, 21, 0, 30, 0, 0, 118, 119, 120, + 121, 256, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 118, 119, 120, 121, 5, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 0, 195, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, + 39, 0, 0, 0, 0, 40, 41, 42, 0, 0, + 0, 0, 0, 43, 0, 118, 119, 120, 121, 252, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, - 193, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 152, 153, 118, 119, 120, 121, 5, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 0, + 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 38, 39, 0, + 0, 0, 0, 40, 41, 42, 0, 0, 0, 0, + 0, 46, 0, 118, 119, 120, 121, 257, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 118, 119, 120, 121, 4, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 0, 258, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, + 14, 29, 0, 0, 17, 18, 19, 20, 21, 0, + 0, 118, 119, 120, 121, 259, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 118, 119, + 120, 121, 5, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 0, 260, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, + 0, 0, 0, 38, 39, 0, 0, 0, 0, 40, + 41, 42, 0, 0, 0, 0, 0, 0, 0, 118, + 119, 120, 121, 261, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 118, 119, 120, 121, + 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 0, 262, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 118, 119, 120, + 121, 263, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 232, 116, 117, 118, 119, 250, 120, 121, + 150, 151, 152, 153, 118, 119, 120, 121, 0, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 0, 264, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 0, 118, 119, 120, 121, 265, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, - 116, 117, 118, 119, 26, 120, 121, 122, 123, 124, + 152, 153, 118, 119, 120, 121, 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 252, 122, 123, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 0, + 289, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 0, 0, 118, 119, 120, 121, 290, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 192, 0, - 116, 117, 118, 119, 255, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 116, 117, 118, - 119, 0, 120, 121, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 256, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 0, 0, 0, 0, 0, 0, 116, 117, 118, - 119, 257, 120, 121, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 116, 117, 118, 119, 0, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 258, -110, -110, -110, -110, -110, -110, -110, -110, - -110, -110, -110, -110, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 0, 0, - 0, 0, 0, 0, 116, 117, 118, 119, 259, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 116, 117, 118, 119, 0, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 260, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 116, 117, 118, 119, 261, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 116, 117, - 118, 119, 0, 120, 121, 122, 123, 124, 125, 126, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 118, 119, 120, 121, 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 151, 262, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 116, 117, - 118, 119, 263, 120, 121, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 151, 116, 117, 118, 119, 0, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 287, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 116, 117, 118, 119, 288, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 116, 117, 118, 119, 0, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 149, 150, 151, 289, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 116, 117, 118, 119, 290, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 149, 150, 151, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 0, 49, 6, 0, 0, 0, 0, 0, 0, - 50, 51, 52, 53, 166, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 7, 0, - 0, 0, 0, 0, 0, 14, 28, 0, 67, 17, - 18, 19, 20, 0, 0, 0, 68, 116, 117, 118, - 119, 0, 120, 121, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 152, 116, 117, 118, 119, 237, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 116, 117, 118, 119, 243, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 116, 117, - 118, 119, 272, 120, 121, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 151, 116, 117, 118, 119, 276, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 116, 117, 118, 119, 285, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 149, 150, 151, 116, - 117, 118, 119, 292, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 116, 117, 118, 119, - 295, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 147, 148, 149, 150, 151, 152, 153, 0, 291, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 116, 117, 118, 119, 0, 120, 121, + 149, 150, 151, 152, 153, 0, 0, 0, 0, 0, + 0, 118, 119, 120, 121, 292, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 0, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 50, 0, 51, 6, 0, 0, 0, 0, 0, 0, + 52, 53, 54, 55, 168, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 7, 4, + 0, 0, 0, 0, 5, 14, 29, 0, 69, 17, + 18, 19, 20, 21, 0, 0, 0, 70, 0, 0, + 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 0, 16, 17, + 18, 19, 20, 21, 118, 119, 120, 121, 0, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 154, 118, 119, 120, 121, 239, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 118, 119, + 120, 121, 245, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 118, 119, 120, 121, 274, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, - 142, 143, 144, 145, 146, 147, 148, 149, 150, 151 + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 118, 119, 120, 121, 278, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 118, + 119, 120, 121, 287, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 118, 119, 120, 121, + 294, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 118, 119, 120, 121, 297, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 118, 119, 120, 121, 0, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 119, 120, 121, + 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153 }; static const yytype_int16 yycheck[] = { - 11, 9, 2, 2, 4, 4, 7, 9, 74, 0, - 7, 22, 7, 13, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 9, 76, 66, 74, 75, - 41, 74, 78, 44, 73, 78, 47, 48, 49, 50, - 51, 33, 34, 35, 36, 37, 38, 39, 66, 15, - 15, 69, 70, 71, 72, 65, 58, 68, 74, 70, - 76, 67, 78, 65, 66, 78, 77, 69, 70, 71, - 72, 82, 74, 77, 58, 79, 65, 78, 75, 74, - 75, 65, 7, 76, 84, 84, 7, 75, 99, 100, + 11, 9, 2, 2, 4, 4, 7, 9, 75, 0, + 77, 7, 23, 13, 7, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 66, 75, 76, 75, + 75, 79, 43, 79, 74, 46, 77, 65, 49, 50, + 51, 52, 53, 66, 15, 15, 69, 70, 71, 72, + 73, 75, 65, 77, 76, 79, 58, 79, 78, 70, + 80, 72, 67, 65, 76, 7, 7, 79, 79, 78, + 76, 80, 79, 84, 77, 65, 7, 81, 79, 75, + 76, 65, 77, 76, 65, 77, 86, 86, 77, 77, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 76, 76, 116, 117, 118, 119, 120, + 111, 112, 113, 114, 115, 77, 65, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 76, 75, 75, 152, 78, 78, 76, 159, 14, - 74, 14, 76, 14, 76, 166, 3, 4, 5, 6, - 76, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 58, 76, 58, 9, 58, 76, 76, - 65, 66, 65, 66, 65, 66, 71, 72, 71, 72, - 71, 72, 9, 78, 76, 78, 76, 14, 77, 76, - 79, 76, 76, 76, 65, 236, 65, 65, 239, 65, - 65, 80, 75, 80, 67, 65, 33, 65, 65, 79, - 251, 75, 253, 254, 7, 58, 77, 7, 74, 7, - 7, 80, 65, 66, 265, 77, 69, 70, 71, 72, - 271, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 79, 68, 69, 70, 71, 72, 7, 65, 3, 4, - 5, 6, 293, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 3, 4, 5, 6, 65, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 4, 5, 6, 80, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 3, 4, - 5, 6, 80, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 3, 4, 5, 6, 65, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 77, 6, 79, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 3, 4, 5, - 6, 79, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 3, 4, 5, 6, 80, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 80, 75, 79, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 3, 4, 5, 6, - 79, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 3, 4, 5, 6, 2, 8, 9, + 151, 152, 153, 77, 77, 77, 154, 77, 77, 77, + 161, 77, 77, 3, 4, 5, 6, 168, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 77, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 155, 3, 4, 5, 6, 77, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 3, 4, 5, 6, 2, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 77, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 114, -1, 3, 4, 5, 6, 77, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 238, 77, 65, + 241, 81, 33, 34, 35, 36, 37, 38, 39, 67, + 65, 65, 253, 65, 255, 256, 76, 76, 80, 75, + 81, 78, 7, 7, 7, 78, 267, 7, 65, 80, + 65, 65, 273, 81, 81, 76, 2, 157, 81, 2, + 116, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3, 4, 5, 6, 295, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 3, 4, 5, 6, -1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 77, 14, 15, 16, 17, 18, + 36, 37, 38, 39, 3, 4, 5, 6, 81, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, -1, -1, -1, -1, -1, -1, 3, 4, 5, - 6, 77, 8, 9, 10, 11, 12, 13, 14, 15, + 39, -1, 78, 6, 80, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 3, 4, 5, + 6, 80, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 3, 4, 5, 6, 9, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, -1, -1, -1, 80, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 58, -1, -1, + -1, -1, -1, -1, 65, 66, -1, -1, 69, 70, + 71, 72, 73, -1, 75, -1, -1, 3, 4, 5, + 6, 80, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 3, 4, 5, 6, 14, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, -1, 78, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 58, -1, -1, -1, -1, -1, -1, 65, + 66, -1, -1, -1, -1, 71, 72, 73, -1, -1, + -1, -1, -1, 79, -1, 3, 4, 5, 6, 78, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 3, 4, 5, 6, 14, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, -1, + 78, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 58, -1, -1, -1, -1, -1, -1, 65, 66, -1, + -1, -1, -1, 71, 72, 73, -1, -1, -1, -1, + -1, 79, -1, 3, 4, 5, 6, 78, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 3, 4, 5, 6, 9, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, -1, 78, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 58, -1, -1, -1, -1, -1, -1, + 65, 66, -1, -1, 69, 70, 71, 72, 73, -1, + -1, 3, 4, 5, 6, 78, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 3, 4, + 5, 6, 14, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, -1, 78, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 58, -1, -1, -1, + -1, -1, -1, 65, 66, -1, -1, -1, -1, 71, + 72, 73, -1, -1, -1, -1, -1, -1, -1, 3, + 4, 5, 6, 78, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 3, 4, 5, 6, + -1, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, -1, 78, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 3, 4, 5, + 6, 78, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 3, 4, 5, 6, -1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 77, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, -1, -1, - -1, -1, -1, -1, 3, 4, 5, 6, 77, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 3, 4, 5, 6, -1, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 77, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 3, 4, 5, 6, 77, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 3, 4, - 5, 6, -1, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 77, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, - 5, 6, 77, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 3, 4, 5, 6, -1, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 77, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 3, 4, 5, 6, 77, + 39, -1, 78, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, -1, 3, 4, 5, 6, 78, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 3, 4, 5, 6, -1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 77, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 3, 4, 5, 6, 77, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 9, + 31, 32, 33, 34, 35, 36, 37, 38, 39, -1, + 78, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, -1, -1, 3, 4, 5, 6, 78, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 3, 4, 5, 6, -1, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, -1, 78, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, -1, -1, -1, -1, -1, + -1, 3, 4, 5, 6, 78, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, -1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 30, -1, 32, 33, -1, -1, -1, -1, -1, -1, - 40, 41, 42, 43, 75, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, -1, - -1, -1, -1, -1, -1, 65, 66, -1, 68, 69, - 70, 71, 72, -1, -1, -1, 76, 3, 4, 5, - 6, -1, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, -1, -1, -1, -1, -1, -1, + 40, 41, 42, 43, 76, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 9, + -1, -1, -1, -1, 14, 65, 66, -1, 68, 69, + 70, 71, 72, 73, -1, -1, -1, 77, -1, -1, + -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 59, 3, 4, 5, 6, 7, 8, + -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, + 60, 61, 62, 63, 64, 65, 66, -1, 68, 69, + 70, 71, 72, 73, 3, 4, 5, 6, -1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 39, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 59, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 3, 4, @@ -1075,63 +1078,74 @@ static const yytype_int16 yycheck[] = 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 3, 4, 5, 6, -1, 8, 9, + 37, 38, 39, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39 + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 3, 4, 5, 6, -1, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 4, 5, 6, + -1, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { - 0, 82, 83, 0, 9, 14, 33, 58, 59, 60, + 0, 83, 84, 0, 9, 14, 33, 58, 59, 60, 61, 62, 63, 64, 65, 66, 68, 69, 70, 71, - 72, 84, 86, 88, 89, 90, 91, 92, 66, 74, - 88, 92, 66, 73, 74, 78, 58, 65, 66, 71, - 72, 78, 87, 91, 78, 87, 7, 78, 30, 32, - 40, 41, 42, 43, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 68, 76, 85, - 86, 88, 92, 66, 92, 74, 74, 75, 76, 85, - 74, 76, 75, 78, 65, 15, 15, 65, 67, 78, - 85, 7, 85, 7, 85, 85, 85, 85, 85, 76, - 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 85, 3, 4, 5, 6, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 59, 85, 74, 76, 78, 7, 74, 75, - 75, 65, 65, 85, 85, 93, 75, 65, 65, 85, - 65, 88, 80, 67, 80, 80, 80, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 93, 77, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 87, 65, 89, 65, 65, 85, 75, 7, 77, 79, - 85, 75, 77, 7, 79, 74, 80, 7, 7, 7, - 77, 79, 77, 79, 79, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 79, 77, 7, 77, 79, - 7, 75, 7, 85, 7, 85, 7, 65, 65, 85, - 85, 85, 85, 65, 85, 7, 80, 77, 77, 77, - 77, 80, 7, 75, 85, 7 + 72, 73, 85, 87, 89, 90, 91, 92, 93, 66, + 75, 89, 93, 66, 74, 75, 79, 58, 65, 66, + 71, 72, 73, 79, 88, 92, 79, 88, 7, 79, + 30, 32, 40, 41, 42, 43, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 68, + 77, 86, 87, 89, 93, 66, 93, 75, 75, 76, + 77, 86, 75, 77, 76, 79, 65, 15, 15, 65, + 67, 79, 86, 7, 86, 7, 86, 86, 86, 86, + 86, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 86, 3, 4, + 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 59, 86, 75, 77, 79, 7, + 75, 76, 76, 65, 65, 86, 86, 94, 76, 65, + 65, 86, 65, 89, 81, 67, 81, 81, 81, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 94, 78, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 88, 65, 90, 65, 65, 86, 76, 7, + 78, 80, 86, 76, 78, 7, 80, 75, 81, 7, + 7, 7, 78, 80, 78, 80, 80, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 80, 78, 7, + 78, 80, 7, 76, 7, 86, 7, 86, 7, 65, + 65, 86, 86, 86, 86, 65, 86, 7, 81, 78, + 78, 78, 78, 81, 7, 76, 86, 7 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 81, 82, 83, 83, 83, 83, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, + 0, 82, 83, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, - 86, 86, 86, 87, 87, 87, 87, 87, 87, 87, - 88, 88, 88, 89, 89, 89, 89, 89, 90, 90, - 91, 91, 92, 92, 92, 92, 93, 93, 93 + 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 87, + 87, 87, 87, 88, 88, 88, 88, 88, 88, 88, + 88, 89, 89, 89, 90, 90, 90, 90, 90, 91, + 91, 92, 92, 93, 93, 93, 93, 93, 94, 94, + 94 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1146,9 +1160,10 @@ static const yytype_uint8 yyr2[] = 3, 3, 3, 3, 3, 3, 3, 3, 2, 4, 4, 4, 4, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, 6, 4, 3, 6, 4, 6, - 4, 3, 1, 1, 1, 1, 1, 4, 1, 1, - 1, 1, 1, 1, 1, 3, 2, 4, 1, 1, - 3, 3, 1, 1, 1, 1, 0, 1, 3 + 4, 3, 1, 1, 1, 1, 1, 1, 4, 1, + 1, 1, 1, 1, 1, 1, 3, 2, 4, 1, + 1, 3, 3, 1, 1, 1, 1, 1, 0, 1, + 3 }; @@ -1572,69 +1587,69 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) switch (yytype) { case 65: /* INTEGER */ -#line 90 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1257 */ +#line 92 "pcodeparse.y" /* yacc.c:1257 */ { delete ((*yyvaluep).i); } -#line 1563 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1257 */ +#line 1578 "pcodeparse.cc" /* yacc.c:1257 */ break; case 66: /* STRING */ -#line 91 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1257 */ +#line 93 "pcodeparse.y" /* yacc.c:1257 */ { delete ((*yyvaluep).str); } -#line 1569 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1257 */ +#line 1584 "pcodeparse.cc" /* yacc.c:1257 */ break; - case 83: /* rtlmid */ -#line 93 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1257 */ + case 84: /* rtlmid */ +#line 95 "pcodeparse.y" /* yacc.c:1257 */ { delete ((*yyvaluep).sem); } -#line 1575 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1257 */ +#line 1590 "pcodeparse.cc" /* yacc.c:1257 */ break; - case 84: /* statement */ -#line 94 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1257 */ + case 85: /* statement */ +#line 96 "pcodeparse.y" /* yacc.c:1257 */ { if (((*yyvaluep).stmt) != (vector *)0) { for(int4 i=0;i<((*yyvaluep).stmt)->size();++i) delete (*((*yyvaluep).stmt))[i]; delete ((*yyvaluep).stmt);} } -#line 1581 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1257 */ +#line 1596 "pcodeparse.cc" /* yacc.c:1257 */ break; - case 85: /* expr */ -#line 95 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1257 */ + case 86: /* expr */ +#line 97 "pcodeparse.y" /* yacc.c:1257 */ { delete ((*yyvaluep).tree); } -#line 1587 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1257 */ +#line 1602 "pcodeparse.cc" /* yacc.c:1257 */ break; - case 86: /* sizedstar */ -#line 97 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1257 */ + case 87: /* sizedstar */ +#line 99 "pcodeparse.y" /* yacc.c:1257 */ { delete ((*yyvaluep).starqual); } -#line 1593 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1257 */ +#line 1608 "pcodeparse.cc" /* yacc.c:1257 */ break; - case 87: /* jumpdest */ -#line 96 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1257 */ + case 88: /* jumpdest */ +#line 98 "pcodeparse.y" /* yacc.c:1257 */ { if (((*yyvaluep).varnode) != (VarnodeTpl *)0) delete ((*yyvaluep).varnode); } -#line 1599 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1257 */ +#line 1614 "pcodeparse.cc" /* yacc.c:1257 */ break; - case 88: /* varnode */ -#line 96 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1257 */ + case 89: /* varnode */ +#line 98 "pcodeparse.y" /* yacc.c:1257 */ { if (((*yyvaluep).varnode) != (VarnodeTpl *)0) delete ((*yyvaluep).varnode); } -#line 1605 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1257 */ +#line 1620 "pcodeparse.cc" /* yacc.c:1257 */ break; - case 89: /* integervarnode */ -#line 96 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1257 */ + case 90: /* integervarnode */ +#line 98 "pcodeparse.y" /* yacc.c:1257 */ { if (((*yyvaluep).varnode) != (VarnodeTpl *)0) delete ((*yyvaluep).varnode); } -#line 1611 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1257 */ +#line 1626 "pcodeparse.cc" /* yacc.c:1257 */ break; - case 90: /* lhsvarnode */ -#line 96 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1257 */ + case 91: /* lhsvarnode */ +#line 98 "pcodeparse.y" /* yacc.c:1257 */ { if (((*yyvaluep).varnode) != (VarnodeTpl *)0) delete ((*yyvaluep).varnode); } -#line 1617 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1257 */ +#line 1632 "pcodeparse.cc" /* yacc.c:1257 */ break; - case 93: /* paramlist */ -#line 92 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1257 */ + case 94: /* paramlist */ +#line 94 "pcodeparse.y" /* yacc.c:1257 */ { for(int4 i=0;i<((*yyvaluep).param)->size();++i) delete (*((*yyvaluep).param))[i]; delete ((*yyvaluep).param); } -#line 1623 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1257 */ +#line 1638 "pcodeparse.cc" /* yacc.c:1257 */ break; @@ -1896,709 +1911,721 @@ yyreduce: switch (yyn) { case 2: -#line 100 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 102 "pcodeparse.y" /* yacc.c:1646 */ { pcode->setResult((yyvsp[-1].sem)); } -#line 1887 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 1902 "pcodeparse.cc" /* yacc.c:1646 */ break; case 3: -#line 102 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 104 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.sem) = new ConstructTpl(); } -#line 1893 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 1908 "pcodeparse.cc" /* yacc.c:1646 */ break; case 4: -#line 103 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 105 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.sem) = (yyvsp[-1].sem); if (!(yyval.sem)->addOpList(*(yyvsp[0].stmt))) { delete (yyvsp[0].stmt); yyerror("Multiple delayslot declarations"); YYERROR; } delete (yyvsp[0].stmt); } -#line 1899 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 1914 "pcodeparse.cc" /* yacc.c:1646 */ break; case 5: -#line 104 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 106 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.sem) = (yyvsp[-3].sem); pcode->newLocalDefinition((yyvsp[-1].str)); } -#line 1905 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 1920 "pcodeparse.cc" /* yacc.c:1646 */ break; case 6: -#line 105 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 107 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.sem) = (yyvsp[-5].sem); pcode->newLocalDefinition((yyvsp[-3].str),*(yyvsp[-1].i)); delete (yyvsp[-1].i); } -#line 1911 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 1926 "pcodeparse.cc" /* yacc.c:1646 */ break; case 7: -#line 107 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 109 "pcodeparse.y" /* yacc.c:1646 */ { (yyvsp[-1].tree)->setOutput((yyvsp[-3].varnode)); (yyval.stmt) = ExprTree::toVector((yyvsp[-1].tree)); } -#line 1917 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 1932 "pcodeparse.cc" /* yacc.c:1646 */ break; case 8: -#line 108 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 110 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.stmt) = pcode->newOutput(true,(yyvsp[-1].tree),(yyvsp[-3].str)); } -#line 1923 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 1938 "pcodeparse.cc" /* yacc.c:1646 */ break; case 9: -#line 109 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 111 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.stmt) = pcode->newOutput(false,(yyvsp[-1].tree),(yyvsp[-3].str)); } -#line 1929 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 1944 "pcodeparse.cc" /* yacc.c:1646 */ break; case 10: -#line 110 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 112 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.stmt) = pcode->newOutput(true,(yyvsp[-1].tree),(yyvsp[-5].str),*(yyvsp[-3].i)); delete (yyvsp[-3].i); } -#line 1935 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 1950 "pcodeparse.cc" /* yacc.c:1646 */ break; case 11: -#line 111 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 113 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.stmt) = pcode->newOutput(true,(yyvsp[-1].tree),(yyvsp[-5].str),*(yyvsp[-3].i)); delete (yyvsp[-3].i); } -#line 1941 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 1956 "pcodeparse.cc" /* yacc.c:1646 */ break; case 12: -#line 112 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 114 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.stmt) = (vector *)0; string errmsg = "Redefinition of symbol: "+(yyvsp[-1].specsym)->getName(); yyerror(errmsg.c_str()); YYERROR; } -#line 1947 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 1962 "pcodeparse.cc" /* yacc.c:1646 */ break; case 13: -#line 113 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 115 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.stmt) = pcode->createStore((yyvsp[-4].starqual),(yyvsp[-3].tree),(yyvsp[-1].tree)); } -#line 1953 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 1968 "pcodeparse.cc" /* yacc.c:1646 */ break; case 14: -#line 114 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 116 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.stmt) = pcode->createUserOpNoOut((yyvsp[-4].useropsym),(yyvsp[-2].param)); } -#line 1959 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 1974 "pcodeparse.cc" /* yacc.c:1646 */ break; case 15: -#line 115 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 117 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.stmt) = pcode->assignBitRange((yyvsp[-8].varnode),(uint4)*(yyvsp[-6].i),(uint4)*(yyvsp[-4].i),(yyvsp[-1].tree)); delete (yyvsp[-6].i), delete (yyvsp[-4].i); } -#line 1965 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 1980 "pcodeparse.cc" /* yacc.c:1646 */ break; case 16: -#line 116 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 118 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.stmt) = (vector *)0; delete (yyvsp[-3].varnode); delete (yyvsp[-1].i); yyerror("Illegal truncation on left-hand side of assignment"); YYERROR; } -#line 1971 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 1986 "pcodeparse.cc" /* yacc.c:1646 */ break; case 17: -#line 117 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 119 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.stmt) = (vector *)0; delete (yyvsp[-3].varnode); delete (yyvsp[-1].i); yyerror("Illegal subpiece on left-hand side of assignment"); YYERROR; } -#line 1977 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 1992 "pcodeparse.cc" /* yacc.c:1646 */ break; case 18: -#line 118 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 120 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.stmt) = pcode->createOpNoOut(CPUI_BRANCH,new ExprTree((yyvsp[-1].varnode))); } -#line 1983 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 1998 "pcodeparse.cc" /* yacc.c:1646 */ break; case 19: -#line 119 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 121 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.stmt) = pcode->createOpNoOut(CPUI_CBRANCH,new ExprTree((yyvsp[-1].varnode)),(yyvsp[-3].tree)); } -#line 1989 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2004 "pcodeparse.cc" /* yacc.c:1646 */ break; case 20: -#line 120 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 122 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.stmt) = pcode->createOpNoOut(CPUI_BRANCHIND,(yyvsp[-2].tree)); } -#line 1995 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2010 "pcodeparse.cc" /* yacc.c:1646 */ break; case 21: -#line 121 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 123 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.stmt) = pcode->createOpNoOut(CPUI_CALL,new ExprTree((yyvsp[-1].varnode))); } -#line 2001 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2016 "pcodeparse.cc" /* yacc.c:1646 */ break; case 22: -#line 122 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 124 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.stmt) = pcode->createOpNoOut(CPUI_CALLIND,(yyvsp[-2].tree)); } -#line 2007 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2022 "pcodeparse.cc" /* yacc.c:1646 */ break; case 23: -#line 123 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 125 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.stmt) = (vector *)0; yyerror("Must specify an indirect parameter for return"); YYERROR; } -#line 2013 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2028 "pcodeparse.cc" /* yacc.c:1646 */ break; case 24: -#line 124 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 126 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.stmt) = pcode->createOpNoOut(CPUI_RETURN,(yyvsp[-2].tree)); } -#line 2019 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2034 "pcodeparse.cc" /* yacc.c:1646 */ break; case 25: -#line 125 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 127 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.stmt) = pcode->placeLabel( (yyvsp[0].labelsym) ); } -#line 2025 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2040 "pcodeparse.cc" /* yacc.c:1646 */ break; case 26: -#line 127 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 129 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = new ExprTree((yyvsp[0].varnode)); } -#line 2031 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2046 "pcodeparse.cc" /* yacc.c:1646 */ break; case 27: -#line 128 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 130 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createLoad((yyvsp[-1].starqual),(yyvsp[0].tree)); } -#line 2037 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2052 "pcodeparse.cc" /* yacc.c:1646 */ break; case 28: -#line 129 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 131 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = (yyvsp[-1].tree); } -#line 2043 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2058 "pcodeparse.cc" /* yacc.c:1646 */ break; case 29: -#line 130 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 132 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_ADD,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2049 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2064 "pcodeparse.cc" /* yacc.c:1646 */ break; case 30: -#line 131 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 133 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_SUB,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2055 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2070 "pcodeparse.cc" /* yacc.c:1646 */ break; case 31: -#line 132 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 134 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_EQUAL,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2061 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2076 "pcodeparse.cc" /* yacc.c:1646 */ break; case 32: -#line 133 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 135 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_NOTEQUAL,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2067 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2082 "pcodeparse.cc" /* yacc.c:1646 */ break; case 33: -#line 134 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 136 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_LESS,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2073 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2088 "pcodeparse.cc" /* yacc.c:1646 */ break; case 34: -#line 135 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 137 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_LESSEQUAL,(yyvsp[0].tree),(yyvsp[-2].tree)); } -#line 2079 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2094 "pcodeparse.cc" /* yacc.c:1646 */ break; case 35: -#line 136 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 138 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_LESSEQUAL,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2085 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2100 "pcodeparse.cc" /* yacc.c:1646 */ break; case 36: -#line 137 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 139 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_LESS,(yyvsp[0].tree),(yyvsp[-2].tree)); } -#line 2091 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2106 "pcodeparse.cc" /* yacc.c:1646 */ break; case 37: -#line 138 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 140 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_SLESS,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2097 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2112 "pcodeparse.cc" /* yacc.c:1646 */ break; case 38: -#line 139 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 141 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_SLESSEQUAL,(yyvsp[0].tree),(yyvsp[-2].tree)); } -#line 2103 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2118 "pcodeparse.cc" /* yacc.c:1646 */ break; case 39: -#line 140 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 142 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_SLESSEQUAL,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2109 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2124 "pcodeparse.cc" /* yacc.c:1646 */ break; case 40: -#line 141 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 143 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_SLESS,(yyvsp[0].tree),(yyvsp[-2].tree)); } -#line 2115 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2130 "pcodeparse.cc" /* yacc.c:1646 */ break; case 41: -#line 142 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 144 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_2COMP,(yyvsp[0].tree)); } -#line 2121 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2136 "pcodeparse.cc" /* yacc.c:1646 */ break; case 42: -#line 143 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 145 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_NEGATE,(yyvsp[0].tree)); } -#line 2127 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2142 "pcodeparse.cc" /* yacc.c:1646 */ break; case 43: -#line 144 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 146 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_XOR,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2133 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2148 "pcodeparse.cc" /* yacc.c:1646 */ break; case 44: -#line 145 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 147 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_AND,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2139 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2154 "pcodeparse.cc" /* yacc.c:1646 */ break; case 45: -#line 146 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 148 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_OR,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2145 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2160 "pcodeparse.cc" /* yacc.c:1646 */ break; case 46: -#line 147 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 149 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_LEFT,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2151 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2166 "pcodeparse.cc" /* yacc.c:1646 */ break; case 47: -#line 148 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 150 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_RIGHT,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2157 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2172 "pcodeparse.cc" /* yacc.c:1646 */ break; case 48: -#line 149 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 151 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_SRIGHT,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2163 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2178 "pcodeparse.cc" /* yacc.c:1646 */ break; case 49: -#line 150 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 152 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_MULT,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2169 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2184 "pcodeparse.cc" /* yacc.c:1646 */ break; case 50: -#line 151 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 153 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_DIV,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2175 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2190 "pcodeparse.cc" /* yacc.c:1646 */ break; case 51: -#line 152 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 154 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_SDIV,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2181 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2196 "pcodeparse.cc" /* yacc.c:1646 */ break; case 52: -#line 153 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 155 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_REM,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2187 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2202 "pcodeparse.cc" /* yacc.c:1646 */ break; case 53: -#line 154 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 156 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_SREM,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2193 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2208 "pcodeparse.cc" /* yacc.c:1646 */ break; case 54: -#line 155 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 157 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_BOOL_NEGATE,(yyvsp[0].tree)); } -#line 2199 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2214 "pcodeparse.cc" /* yacc.c:1646 */ break; case 55: -#line 156 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 158 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_BOOL_XOR,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2205 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2220 "pcodeparse.cc" /* yacc.c:1646 */ break; case 56: -#line 157 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 159 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_BOOL_AND,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2211 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2226 "pcodeparse.cc" /* yacc.c:1646 */ break; case 57: -#line 158 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 160 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_BOOL_OR,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2217 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2232 "pcodeparse.cc" /* yacc.c:1646 */ break; case 58: -#line 159 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 161 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_FLOAT_EQUAL,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2223 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2238 "pcodeparse.cc" /* yacc.c:1646 */ break; case 59: -#line 160 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 162 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_FLOAT_NOTEQUAL,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2229 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2244 "pcodeparse.cc" /* yacc.c:1646 */ break; case 60: -#line 161 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 163 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_FLOAT_LESS,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2235 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2250 "pcodeparse.cc" /* yacc.c:1646 */ break; case 61: -#line 162 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 164 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_FLOAT_LESS,(yyvsp[0].tree),(yyvsp[-2].tree)); } -#line 2241 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2256 "pcodeparse.cc" /* yacc.c:1646 */ break; case 62: -#line 163 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 165 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_FLOAT_LESSEQUAL,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2247 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2262 "pcodeparse.cc" /* yacc.c:1646 */ break; case 63: -#line 164 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 166 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_FLOAT_LESSEQUAL,(yyvsp[0].tree),(yyvsp[-2].tree)); } -#line 2253 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2268 "pcodeparse.cc" /* yacc.c:1646 */ break; case 64: -#line 165 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 167 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_FLOAT_ADD,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2259 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2274 "pcodeparse.cc" /* yacc.c:1646 */ break; case 65: -#line 166 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 168 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_FLOAT_SUB,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2265 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2280 "pcodeparse.cc" /* yacc.c:1646 */ break; case 66: -#line 167 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 169 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_FLOAT_MULT,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2271 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2286 "pcodeparse.cc" /* yacc.c:1646 */ break; case 67: -#line 168 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 170 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_FLOAT_DIV,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 2277 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2292 "pcodeparse.cc" /* yacc.c:1646 */ break; case 68: -#line 169 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 171 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_FLOAT_NEG,(yyvsp[0].tree)); } -#line 2283 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2298 "pcodeparse.cc" /* yacc.c:1646 */ break; case 69: -#line 170 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 172 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_FLOAT_ABS,(yyvsp[-1].tree)); } -#line 2289 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2304 "pcodeparse.cc" /* yacc.c:1646 */ break; case 70: -#line 171 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 173 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_FLOAT_SQRT,(yyvsp[-1].tree)); } -#line 2295 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2310 "pcodeparse.cc" /* yacc.c:1646 */ break; case 71: -#line 172 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 174 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_SEXT,(yyvsp[-1].tree)); } -#line 2301 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2316 "pcodeparse.cc" /* yacc.c:1646 */ break; case 72: -#line 173 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 175 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_ZEXT,(yyvsp[-1].tree)); } -#line 2307 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2322 "pcodeparse.cc" /* yacc.c:1646 */ break; case 73: -#line 174 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 176 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_CARRY,(yyvsp[-3].tree),(yyvsp[-1].tree)); } -#line 2313 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2328 "pcodeparse.cc" /* yacc.c:1646 */ break; case 74: -#line 175 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 177 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_SCARRY,(yyvsp[-3].tree),(yyvsp[-1].tree)); } -#line 2319 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2334 "pcodeparse.cc" /* yacc.c:1646 */ break; case 75: -#line 176 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 178 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_INT_SBORROW,(yyvsp[-3].tree),(yyvsp[-1].tree)); } -#line 2325 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2340 "pcodeparse.cc" /* yacc.c:1646 */ break; case 76: -#line 177 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 179 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_FLOAT_FLOAT2FLOAT,(yyvsp[-1].tree)); } -#line 2331 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2346 "pcodeparse.cc" /* yacc.c:1646 */ break; case 77: -#line 178 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 180 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_FLOAT_INT2FLOAT,(yyvsp[-1].tree)); } -#line 2337 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2352 "pcodeparse.cc" /* yacc.c:1646 */ break; case 78: -#line 179 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 181 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_FLOAT_NAN,(yyvsp[-1].tree)); } -#line 2343 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2358 "pcodeparse.cc" /* yacc.c:1646 */ break; case 79: -#line 180 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 182 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_FLOAT_TRUNC,(yyvsp[-1].tree)); } -#line 2349 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2364 "pcodeparse.cc" /* yacc.c:1646 */ break; case 80: -#line 181 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 183 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_FLOAT_CEIL,(yyvsp[-1].tree)); } -#line 2355 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2370 "pcodeparse.cc" /* yacc.c:1646 */ break; case 81: -#line 182 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 184 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_FLOAT_FLOOR,(yyvsp[-1].tree)); } -#line 2361 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2376 "pcodeparse.cc" /* yacc.c:1646 */ break; case 82: -#line 183 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 185 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_FLOAT_ROUND,(yyvsp[-1].tree)); } -#line 2367 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2382 "pcodeparse.cc" /* yacc.c:1646 */ break; case 83: -#line 184 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 186 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_NEW,(yyvsp[-1].tree)); } -#line 2373 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2388 "pcodeparse.cc" /* yacc.c:1646 */ break; case 84: -#line 185 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 187 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_NEW,(yyvsp[-3].tree),(yyvsp[-1].tree)); } -#line 2379 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2394 "pcodeparse.cc" /* yacc.c:1646 */ break; case 85: -#line 186 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 188 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createOp(CPUI_SUBPIECE,new ExprTree((yyvsp[-3].specsym)->getVarnode()),new ExprTree((yyvsp[-1].varnode))); } -#line 2385 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2400 "pcodeparse.cc" /* yacc.c:1646 */ break; case 86: -#line 187 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 189 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createBitRange((yyvsp[-2].specsym),0,(uint4)(*(yyvsp[0].i) * 8)); delete (yyvsp[0].i); } -#line 2391 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2406 "pcodeparse.cc" /* yacc.c:1646 */ break; case 87: -#line 188 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 190 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createBitRange((yyvsp[-5].specsym),(uint4)*(yyvsp[-3].i),(uint4)*(yyvsp[-1].i)); delete (yyvsp[-3].i), delete (yyvsp[-1].i); } -#line 2397 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2412 "pcodeparse.cc" /* yacc.c:1646 */ break; case 88: -#line 189 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 191 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.tree) = pcode->createUserOp((yyvsp[-3].useropsym),(yyvsp[-1].param)); } -#line 2403 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2418 "pcodeparse.cc" /* yacc.c:1646 */ break; case 89: -#line 191 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 193 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.starqual) = new StarQuality; (yyval.starqual)->size = *(yyvsp[0].i); delete (yyvsp[0].i); (yyval.starqual)->id=ConstTpl((yyvsp[-3].spacesym)->getSpace()); } -#line 2409 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2424 "pcodeparse.cc" /* yacc.c:1646 */ break; case 90: -#line 192 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 194 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.starqual) = new StarQuality; (yyval.starqual)->size = 0; (yyval.starqual)->id=ConstTpl((yyvsp[-1].spacesym)->getSpace()); } -#line 2415 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2430 "pcodeparse.cc" /* yacc.c:1646 */ break; case 91: -#line 193 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 195 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.starqual) = new StarQuality; (yyval.starqual)->size = *(yyvsp[0].i); delete (yyvsp[0].i); (yyval.starqual)->id=ConstTpl(pcode->getDefaultSpace()); } -#line 2421 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2436 "pcodeparse.cc" /* yacc.c:1646 */ break; case 92: -#line 194 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 196 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.starqual) = new StarQuality; (yyval.starqual)->size = 0; (yyval.starqual)->id=ConstTpl(pcode->getDefaultSpace()); } -#line 2427 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2442 "pcodeparse.cc" /* yacc.c:1646 */ break; case 93: -#line 196 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 198 "pcodeparse.y" /* yacc.c:1646 */ { VarnodeTpl *sym = (yyvsp[0].startsym)->getVarnode(); (yyval.varnode) = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),sym->getOffset(),ConstTpl(ConstTpl::j_curspace_size)); delete sym; } -#line 2433 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2448 "pcodeparse.cc" /* yacc.c:1646 */ break; case 94: -#line 197 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 199 "pcodeparse.y" /* yacc.c:1646 */ { VarnodeTpl *sym = (yyvsp[0].endsym)->getVarnode(); (yyval.varnode) = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),sym->getOffset(),ConstTpl(ConstTpl::j_curspace_size)); delete sym; } -#line 2439 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2454 "pcodeparse.cc" /* yacc.c:1646 */ break; case 95: -#line 198 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),ConstTpl(ConstTpl::real,*(yyvsp[0].i)),ConstTpl(ConstTpl::j_curspace_size)); delete (yyvsp[0].i); } -#line 2445 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 200 "pcodeparse.y" /* yacc.c:1646 */ + { VarnodeTpl *sym = (yyvsp[0].next2sym)->getVarnode(); (yyval.varnode) = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),sym->getOffset(),ConstTpl(ConstTpl::j_curspace_size)); delete sym; } +#line 2460 "pcodeparse.cc" /* yacc.c:1646 */ break; case 96: -#line 199 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),ConstTpl(ConstTpl::real,0),ConstTpl(ConstTpl::j_curspace_size)); yyerror("Parsed integer is too big (overflow)"); } -#line 2451 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 201 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),ConstTpl(ConstTpl::real,*(yyvsp[0].i)),ConstTpl(ConstTpl::j_curspace_size)); delete (yyvsp[0].i); } +#line 2466 "pcodeparse.cc" /* yacc.c:1646 */ break; case 97: -#line 200 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { AddrSpace *spc = (yyvsp[-1].spacesym)->getSpace(); (yyval.varnode) = new VarnodeTpl(ConstTpl(spc),ConstTpl(ConstTpl::real,*(yyvsp[-3].i)),ConstTpl(ConstTpl::real,spc->getAddrSize())); delete (yyvsp[-3].i); } -#line 2457 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 202 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),ConstTpl(ConstTpl::real,0),ConstTpl(ConstTpl::j_curspace_size)); yyerror("Parsed integer is too big (overflow)"); } +#line 2472 "pcodeparse.cc" /* yacc.c:1646 */ break; case 98: -#line 201 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = new VarnodeTpl(ConstTpl(pcode->getConstantSpace()),ConstTpl(ConstTpl::j_relative,(yyvsp[0].labelsym)->getIndex()),ConstTpl(ConstTpl::real,sizeof(uintm))); (yyvsp[0].labelsym)->incrementRefCount(); } -#line 2463 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 203 "pcodeparse.y" /* yacc.c:1646 */ + { AddrSpace *spc = (yyvsp[-1].spacesym)->getSpace(); (yyval.varnode) = new VarnodeTpl(ConstTpl(spc),ConstTpl(ConstTpl::real,*(yyvsp[-3].i)),ConstTpl(ConstTpl::real,spc->getAddrSize())); delete (yyvsp[-3].i); } +#line 2478 "pcodeparse.cc" /* yacc.c:1646 */ break; case 99: -#line 202 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = (VarnodeTpl *)0; string errmsg = "Unknown jump destination: "+*(yyvsp[0].str); delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } -#line 2469 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 204 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = new VarnodeTpl(ConstTpl(pcode->getConstantSpace()),ConstTpl(ConstTpl::j_relative,(yyvsp[0].labelsym)->getIndex()),ConstTpl(ConstTpl::real,sizeof(uintm))); (yyvsp[0].labelsym)->incrementRefCount(); } +#line 2484 "pcodeparse.cc" /* yacc.c:1646 */ break; case 100: -#line 204 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = (yyvsp[0].specsym)->getVarnode(); } -#line 2475 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 205 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = (VarnodeTpl *)0; string errmsg = "Unknown jump destination: "+*(yyvsp[0].str); delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } +#line 2490 "pcodeparse.cc" /* yacc.c:1646 */ break; case 101: -#line 205 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = (yyvsp[0].varnode); } -#line 2481 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 207 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = (yyvsp[0].specsym)->getVarnode(); } +#line 2496 "pcodeparse.cc" /* yacc.c:1646 */ break; case 102: -#line 206 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = (VarnodeTpl *)0; string errmsg = "Unknown varnode parameter: "+*(yyvsp[0].str); delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } -#line 2487 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 208 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = (yyvsp[0].varnode); } +#line 2502 "pcodeparse.cc" /* yacc.c:1646 */ break; case 103: -#line 208 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = new VarnodeTpl(ConstTpl(pcode->getConstantSpace()),ConstTpl(ConstTpl::real,*(yyvsp[0].i)),ConstTpl(ConstTpl::real,0)); delete (yyvsp[0].i); } -#line 2493 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 209 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = (VarnodeTpl *)0; string errmsg = "Unknown varnode parameter: "+*(yyvsp[0].str); delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } +#line 2508 "pcodeparse.cc" /* yacc.c:1646 */ break; case 104: -#line 209 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = new VarnodeTpl(ConstTpl(pcode->getConstantSpace()),ConstTpl(ConstTpl::real,0),ConstTpl(ConstTpl::real,0)); yyerror("Parsed integer is too big (overflow)"); } -#line 2499 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 211 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = new VarnodeTpl(ConstTpl(pcode->getConstantSpace()),ConstTpl(ConstTpl::real,*(yyvsp[0].i)),ConstTpl(ConstTpl::real,0)); delete (yyvsp[0].i); } +#line 2514 "pcodeparse.cc" /* yacc.c:1646 */ break; case 105: -#line 210 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = new VarnodeTpl(ConstTpl(pcode->getConstantSpace()),ConstTpl(ConstTpl::real,*(yyvsp[-2].i)),ConstTpl(ConstTpl::real,*(yyvsp[0].i))); delete (yyvsp[-2].i); delete (yyvsp[0].i); } -#line 2505 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 212 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = new VarnodeTpl(ConstTpl(pcode->getConstantSpace()),ConstTpl(ConstTpl::real,0),ConstTpl(ConstTpl::real,0)); yyerror("Parsed integer is too big (overflow)"); } +#line 2520 "pcodeparse.cc" /* yacc.c:1646 */ break; case 106: -#line 211 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = pcode->addressOf((yyvsp[0].varnode),0); } -#line 2511 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 213 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = new VarnodeTpl(ConstTpl(pcode->getConstantSpace()),ConstTpl(ConstTpl::real,*(yyvsp[-2].i)),ConstTpl(ConstTpl::real,*(yyvsp[0].i))); delete (yyvsp[-2].i); delete (yyvsp[0].i); } +#line 2526 "pcodeparse.cc" /* yacc.c:1646 */ break; case 107: -#line 212 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = pcode->addressOf((yyvsp[0].varnode),*(yyvsp[-1].i)); delete (yyvsp[-1].i); } -#line 2517 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 214 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = pcode->addressOf((yyvsp[0].varnode),0); } +#line 2532 "pcodeparse.cc" /* yacc.c:1646 */ break; case 108: -#line 214 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = (yyvsp[0].specsym)->getVarnode(); } -#line 2523 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 215 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = pcode->addressOf((yyvsp[0].varnode),*(yyvsp[-1].i)); delete (yyvsp[-1].i); } +#line 2538 "pcodeparse.cc" /* yacc.c:1646 */ break; case 109: -#line 215 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = (VarnodeTpl *)0; string errmsg = "Unknown assignment varnode: "+*(yyvsp[0].str); delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } -#line 2529 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 217 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = (yyvsp[0].specsym)->getVarnode(); } +#line 2544 "pcodeparse.cc" /* yacc.c:1646 */ break; case 110: -#line 217 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { (yyval.labelsym) = (yyvsp[-1].labelsym); } -#line 2535 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 218 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = (VarnodeTpl *)0; string errmsg = "Unknown assignment varnode: "+*(yyvsp[0].str); delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } +#line 2550 "pcodeparse.cc" /* yacc.c:1646 */ break; case 111: -#line 218 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { (yyval.labelsym) = pcode->defineLabel( (yyvsp[-1].str) ); } -#line 2541 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 220 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.labelsym) = (yyvsp[-1].labelsym); } +#line 2556 "pcodeparse.cc" /* yacc.c:1646 */ break; case 112: -#line 220 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { (yyval.specsym) = (yyvsp[0].varsym); } -#line 2547 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 221 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.labelsym) = pcode->defineLabel( (yyvsp[-1].str) ); } +#line 2562 "pcodeparse.cc" /* yacc.c:1646 */ break; case 113: -#line 221 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { (yyval.specsym) = (yyvsp[0].operandsym); } -#line 2553 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 223 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.specsym) = (yyvsp[0].varsym); } +#line 2568 "pcodeparse.cc" /* yacc.c:1646 */ break; case 114: -#line 222 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { (yyval.specsym) = (yyvsp[0].startsym); } -#line 2559 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 224 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.specsym) = (yyvsp[0].operandsym); } +#line 2574 "pcodeparse.cc" /* yacc.c:1646 */ break; case 115: -#line 223 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { (yyval.specsym) = (yyvsp[0].endsym); } -#line 2565 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 225 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.specsym) = (yyvsp[0].startsym); } +#line 2580 "pcodeparse.cc" /* yacc.c:1646 */ break; case 116: -#line 225 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { (yyval.param) = new vector; } -#line 2571 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 226 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.specsym) = (yyvsp[0].endsym); } +#line 2586 "pcodeparse.cc" /* yacc.c:1646 */ break; case 117: -#line 226 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ - { (yyval.param) = new vector; (yyval.param)->push_back((yyvsp[0].tree)); } -#line 2577 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 227 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.specsym) = (yyvsp[0].next2sym); } +#line 2592 "pcodeparse.cc" /* yacc.c:1646 */ break; case 118: -#line 227 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1646 */ +#line 229 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.param) = new vector; } +#line 2598 "pcodeparse.cc" /* yacc.c:1646 */ + break; + + case 119: +#line 230 "pcodeparse.y" /* yacc.c:1646 */ + { (yyval.param) = new vector; (yyval.param)->push_back((yyvsp[0].tree)); } +#line 2604 "pcodeparse.cc" /* yacc.c:1646 */ + break; + + case 120: +#line 231 "pcodeparse.y" /* yacc.c:1646 */ { (yyval.param) = (yyvsp[-2].param); (yyval.param)->push_back((yyvsp[0].tree)); } -#line 2583 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2610 "pcodeparse.cc" /* yacc.c:1646 */ break; -#line 2587 "src/decompile/cpp/pcodeparse.cc" /* yacc.c:1646 */ +#line 2614 "pcodeparse.cc" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -2826,7 +2853,7 @@ yyreturn: #endif return yyresult; } -#line 229 "src/decompile/cpp/pcodeparse.y" /* yacc.c:1906 */ +#line 233 "pcodeparse.y" /* yacc.c:1906 */ #define IDENTREC_SIZE 46 @@ -3350,6 +3377,9 @@ int4 PcodeSnippet::lex(void) case SleighSymbol::end_symbol: yylval.endsym = (EndSymbol *)sym; return ENDSYM; + case SleighSymbol::next2_symbol: + yylval.next2sym = (Next2Symbol *)sym; + return NEXT2SYM; case SleighSymbol::label_symbol: yylval.labelsym = (LabelSymbol *)sym; return LABELSYM; diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/pcodeparse.y b/Ghidra/Features/Decompiler/src/decompile/cpp/pcodeparse.y index 454d7c3877..c858fa148c 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/pcodeparse.y +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/pcodeparse.y @@ -38,6 +38,7 @@ LabelSymbol *labelsym; StartSymbol *startsym; EndSymbol *endsym; + Next2Symbol *next2sym; OperandSymbol *operandsym; VarnodeSymbol *varsym; SpecificSymbol *specsym; @@ -76,6 +77,7 @@ %token OPERANDSYM %token STARTSYM %token ENDSYM +%token NEXT2SYM %token LABELSYM %type paramlist @@ -195,6 +197,7 @@ sizedstar: '*' '[' SPACESYM ']' ':' INTEGER { $$ = new StarQuality; $$->size = * ; jumpdest: STARTSYM { VarnodeTpl *sym = $1->getVarnode(); $$ = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),sym->getOffset(),ConstTpl(ConstTpl::j_curspace_size)); delete sym; } | ENDSYM { VarnodeTpl *sym = $1->getVarnode(); $$ = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),sym->getOffset(),ConstTpl(ConstTpl::j_curspace_size)); delete sym; } + | NEXT2SYM { VarnodeTpl *sym = $1->getVarnode(); $$ = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),sym->getOffset(),ConstTpl(ConstTpl::j_curspace_size)); delete sym; } | INTEGER { $$ = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),ConstTpl(ConstTpl::real,*$1),ConstTpl(ConstTpl::j_curspace_size)); delete $1; } | BADINTEGER { $$ = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),ConstTpl(ConstTpl::real,0),ConstTpl(ConstTpl::j_curspace_size)); yyerror("Parsed integer is too big (overflow)"); } | INTEGER '[' SPACESYM ']' { AddrSpace *spc = $3->getSpace(); $$ = new VarnodeTpl(ConstTpl(spc),ConstTpl(ConstTpl::real,*$1),ConstTpl(ConstTpl::real,spc->getAddrSize())); delete $1; } @@ -221,6 +224,7 @@ specificsymbol: VARSYM { $$ = $1; } | OPERANDSYM { $$ = $1; } | STARTSYM { $$ = $1; } | ENDSYM { $$ = $1; } + | NEXT2SYM { $$ = $1; } ; paramlist: /* EMPTY */ { $$ = new vector; } | expr { $$ = new vector; $$->push_back($1); } @@ -749,6 +753,9 @@ int4 PcodeSnippet::lex(void) case SleighSymbol::end_symbol: yylval.endsym = (EndSymbol *)sym; return ENDSYM; + case SleighSymbol::next2_symbol: + yylval.next2sym = (Next2Symbol *)sym; + return NEXT2SYM; case SleighSymbol::label_symbol: yylval.labelsym = (LabelSymbol *)sym; return LABELSYM; diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.cc index f8c1580a8e..ecebc09704 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.cc +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.cc @@ -121,6 +121,8 @@ uintb ConstTpl::fix(const ParserWalker &walker) const return walker.getAddr().getOffset(); // Fill in starting address placeholder with real address case j_next: return walker.getNaddr().getOffset(); // Fill in next address placeholder with real address + case j_next2: + return walker.getN2addr().getOffset(); // Fill in next2 address placeholder with real address case j_flowref: return walker.getRefAddr().getOffset(); case j_flowref_size: @@ -349,6 +351,9 @@ void ConstTpl::saveXml(ostream &s) const case j_next: s << "next\"/>"; break; + case j_next2: + s << "next2\"/>"; + break; case j_curspace: s << "curspace\"/>"; break; @@ -404,6 +409,9 @@ void ConstTpl::restoreXml(const Element *el,const AddrSpaceManager *manage) else if (typestring=="next") { type = j_next; } + else if (typestring=="next2") { + type = j_next2; + } else if (typestring=="curspace") { type = j_curspace; } diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.hh b/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.hh index dccf0437d7..3b836244c6 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.hh +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.hh @@ -30,9 +30,9 @@ class Translate; // Forward declaration class HandleTpl; // Forward declaration class ConstTpl { public: - enum const_type { real=0, handle=1, j_start=2, j_next=3, j_curspace=4, - j_curspace_size=5, spaceid=6, j_relative=7, - j_flowref=8, j_flowref_size=9, j_flowdest=10, j_flowdest_size=11 }; + enum const_type { real=0, handle=1, j_start=2, j_next=3, j_next2=4, j_curspace=5, + j_curspace_size=6, spaceid=7, j_relative=8, + j_flowref=9, j_flowref_size=10, j_flowdest=11, j_flowdest_size=12 }; enum v_field { v_space=0, v_offset=1, v_size=2, v_offset_plus=3 }; private: const_type type; diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/slgh_compile.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/slgh_compile.cc index 4a8b301c34..c26cd468fd 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/slgh_compile.cc +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/slgh_compile.cc @@ -1789,7 +1789,7 @@ SleighCompile::SleighCompile(void) } /// Create the address spaces: \b const, \b unique, and \b other. -/// Define the special symbols: \b inst_start, \b inst_next, \b epsilon. +/// Define the special symbols: \b inst_start, \b inst_next, \b inst_next2, \b epsilon. /// Define the root subtable symbol: \b instruction void SleighCompile::predefinedSymbols(void) @@ -1813,6 +1813,8 @@ void SleighCompile::predefinedSymbols(void) symtab.addSymbol(startsym); EndSymbol *endsym = new EndSymbol("inst_next",getConstantSpace()); symtab.addSymbol(endsym); + Next2Symbol *next2sym = new Next2Symbol("inst_next2",getConstantSpace()); + symtab.addSymbol(next2sym); EpsilonSymbol *epsilon = new EpsilonSymbol("epsilon",getConstantSpace()); symtab.addSymbol(epsilon); pcode.setConstantSpace(getConstantSpace()); @@ -2907,20 +2909,23 @@ ConstructTpl *SleighCompile::setResultStarVarnode(ConstructTpl *ct,StarQuality * /// The new change operation is added to the current list. /// When executed, the change operation will assign a new value to the given context variable /// using the specified expression. The change only applies within the parsing of a single instruction. -/// Because we are in the middle of parsing, the \b inst_next value has not been computed yet -/// So we check to make sure the value expression doesn't use this symbol. +/// Because we are in the middle of parsing, the \b inst_next and \b inst_next2 values have not +/// been computed yet. So we check to make sure the value expression doesn't use this symbol. /// \param vec is the current list of change operations /// \param sym is the given context variable affected by the operation /// \param pe is the specified expression -/// \return \b true if the expression does not use the \b inst_next symbol +/// \return \b true if the expression does not use the \b inst_next or \b inst_next2 symbol bool SleighCompile::contextMod(vector *vec,ContextSymbol *sym,PatternExpression *pe) { vector vallist; pe->listValues(vallist); - for(uint4 i=0;i(vallist[i]) != (const EndInstructionValue *)0) return false; + if (dynamic_cast(vallist[i]) != (const Next2InstructionValue *)0) + return false; + } // Otherwise we generate a "temporary" change to context instruction (ContextOp) ContextField *field = (ContextField *)sym->getPatternValue(); ContextOp *op = new ContextOp(field->getStartBit(),field->getEndBit(),pe); diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/slghparse.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/slghparse.cc index 116bbac27d..746d70a815 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/slghparse.cc +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/slghparse.cc @@ -77,7 +77,7 @@ /* Copy the first part of user declarations. */ -#line 16 "src/decompile/cpp/slghparse.y" /* yacc.c:339 */ +#line 16 "slghparse.y" /* yacc.c:339 */ #include "slgh_compile.hh" @@ -90,7 +90,7 @@ extern int yylex(void); extern int yyerror(const char *str ); -#line 79 "src/decompile/cpp/slghparse.cc" /* yacc.c:339 */ +#line 79 "slghparse.cc" /* yacc.c:339 */ # ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus @@ -110,8 +110,8 @@ /* In a future release of Bison, this section will be replaced by #include "slghparse.hh". */ -#ifndef YY_YY_SRC_DECOMPILE_CPP_SLGHPARSE_HH_INCLUDED -# define YY_YY_SRC_DECOMPILE_CPP_SLGHPARSE_HH_INCLUDED +#ifndef YY_YY_SLGHPARSE_HH_INCLUDED +# define YY_YY_SLGHPARSE_HH_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 @@ -233,9 +233,10 @@ extern int yydebug; OPERANDSYM = 363, STARTSYM = 364, ENDSYM = 365, - MACROSYM = 366, - LABELSYM = 367, - SUBTABLESYM = 368 + NEXT2SYM = 366, + MACROSYM = 367, + LABELSYM = 368, + SUBTABLESYM = 369 }; #endif @@ -244,7 +245,7 @@ extern int yydebug; union YYSTYPE { -#line 29 "src/decompile/cpp/slghparse.y" /* yacc.c:355 */ +#line 29 "slghparse.y" /* yacc.c:355 */ char ch; uintb *i; @@ -277,6 +278,7 @@ union YYSTYPE SubtableSymbol *subtablesym; StartSymbol *startsym; EndSymbol *endsym; + Next2Symbol *next2sym; OperandSymbol *operandsym; VarnodeListSymbol *varlistsym; VarnodeSymbol *varsym; @@ -288,7 +290,7 @@ union YYSTYPE FamilySymbol *famsym; SpecificSymbol *specsym; -#line 277 "src/decompile/cpp/slghparse.cc" /* yacc.c:355 */ +#line 279 "slghparse.cc" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -301,11 +303,11 @@ extern YYSTYPE yylval; int yyparse (void); -#endif /* !YY_YY_SRC_DECOMPILE_CPP_SLGHPARSE_HH_INCLUDED */ +#endif /* !YY_YY_SLGHPARSE_HH_INCLUDED */ /* Copy the second part of user declarations. */ -#line 294 "src/decompile/cpp/slghparse.cc" /* yacc.c:358 */ +#line 296 "slghparse.cc" /* yacc.c:358 */ #ifdef short # undef short @@ -547,21 +549,21 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 5 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 2654 +#define YYLAST 2617 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 137 +#define YYNTOKENS 138 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 71 /* YYNRULES -- Number of rules. */ -#define YYNRULES 338 +#define YYNRULES 341 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 713 +#define YYNSTATES 716 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 368 +#define YYMAXUTOK 369 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -573,16 +575,16 @@ static const yytype_uint8 yytranslate[] = 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 136, 43, 2, 2, 2, 38, 11, 2, - 129, 130, 36, 32, 131, 33, 2, 37, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 135, 8, - 17, 128, 18, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 137, 43, 2, 2, 2, 38, 11, 2, + 130, 131, 36, 32, 132, 33, 2, 37, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 136, 8, + 17, 129, 18, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 132, 2, 133, 9, 2, 2, 2, 2, 2, + 2, 133, 2, 134, 9, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 134, 6, 127, 44, 2, 2, 2, + 2, 2, 2, 135, 6, 128, 44, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -606,47 +608,48 @@ static const yytype_uint8 yytranslate[] = 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 126 + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 156, 156, 157, 158, 159, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 172, 173, 174, 175, - 177, 178, 180, 182, 184, 185, 186, 187, 188, 190, - 192, 193, 196, 197, 198, 199, 200, 202, 203, 204, - 205, 206, 207, 209, 211, 212, 213, 214, 215, 216, - 217, 219, 221, 223, 225, 226, 228, 231, 233, 235, - 237, 239, 242, 244, 245, 246, 248, 250, 251, 252, - 255, 256, 259, 261, 262, 263, 265, 266, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 278, 279, 280, - 281, 283, 285, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 302, 303, 304, 305, - 307, 308, 310, 311, 313, 314, 316, 317, 318, 319, - 320, 321, 322, 325, 326, 327, 328, 330, 331, 333, - 334, 335, 336, 337, 338, 340, 341, 343, 345, 346, - 348, 349, 350, 351, 352, 354, 355, 356, 357, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, - 380, 381, 382, 383, 385, 386, 387, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 452, 453, 454, 455, 457, 458, 459, 460, 461, 462, - 463, 464, 466, 467, 468, 469, 471, 472, 473, 474, - 475, 477, 478, 479, 481, 482, 484, 485, 486, 487, - 488, 489, 491, 492, 493, 494, 495, 497, 498, 499, - 500, 501, 503, 504, 506, 507, 508, 510, 511, 512, - 514, 515, 516, 519, 520, 522, 523, 524, 526, 528, - 529, 530, 531, 533, 534, 535, 537, 538, 539, 540, - 541, 543, 544, 546, 547, 549, 550, 553, 554, 555, - 557, 558, 559, 561, 562, 563, 564, 565, 566, 567, - 568, 569, 570, 571, 572, 573, 574, 575, 576 + 0, 158, 158, 159, 160, 161, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, + 179, 180, 182, 184, 186, 187, 188, 189, 190, 192, + 194, 195, 198, 199, 200, 201, 202, 204, 205, 206, + 207, 208, 209, 211, 213, 214, 215, 216, 217, 218, + 219, 221, 223, 225, 227, 228, 230, 233, 235, 237, + 239, 241, 244, 246, 247, 248, 250, 252, 253, 254, + 257, 258, 261, 263, 264, 265, 267, 268, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 280, 281, 282, + 283, 285, 287, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 304, 305, 306, 307, + 309, 310, 312, 313, 315, 316, 318, 319, 320, 321, + 322, 323, 324, 327, 328, 329, 330, 332, 333, 335, + 336, 337, 338, 339, 340, 342, 343, 345, 347, 348, + 350, 351, 352, 353, 354, 356, 357, 358, 359, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 454, 455, 456, 457, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 469, 470, 471, 472, 474, 475, 476, + 477, 478, 480, 481, 482, 484, 485, 487, 488, 489, + 490, 491, 492, 494, 495, 496, 497, 498, 500, 501, + 502, 503, 504, 505, 507, 508, 510, 511, 512, 514, + 515, 516, 518, 519, 520, 523, 524, 526, 527, 528, + 530, 532, 533, 534, 535, 537, 538, 539, 541, 542, + 543, 544, 545, 547, 548, 550, 551, 553, 554, 557, + 558, 559, 561, 562, 563, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, + 580, 581 }; #endif @@ -677,14 +680,14 @@ static const char *const yytname[] = "BITRANGE_KEY", "CHAR", "INTEGER", "INTB", "STRING", "SYMBOLSTRING", "SPACESYM", "SECTIONSYM", "TOKENSYM", "USEROPSYM", "VALUESYM", "VALUEMAPSYM", "CONTEXTSYM", "NAMESYM", "VARSYM", "BITSYM", "SPECSYM", - "VARLISTSYM", "OPERANDSYM", "STARTSYM", "ENDSYM", "MACROSYM", "LABELSYM", - "SUBTABLESYM", "'}'", "'='", "'('", "')'", "','", "'['", "']'", "'{'", - "':'", "' '", "$accept", "spec", "definition", "constructorlike", - "endiandef", "aligndef", "tokendef", "tokenprop", "contextdef", - "contextprop", "fielddef", "contextfielddef", "spacedef", "spaceprop", - "varnodedef", "bitrangedef", "bitrangelist", "bitrangesingle", - "pcodeopdef", "valueattach", "nameattach", "varattach", "macrodef", - "withblockstart", "withblockmid", "withblock", "id_or_nil", + "VARLISTSYM", "OPERANDSYM", "STARTSYM", "ENDSYM", "NEXT2SYM", "MACROSYM", + "LABELSYM", "SUBTABLESYM", "'}'", "'='", "'('", "')'", "','", "'['", + "']'", "'{'", "':'", "' '", "$accept", "spec", "definition", + "constructorlike", "endiandef", "aligndef", "tokendef", "tokenprop", + "contextdef", "contextprop", "fielddef", "contextfielddef", "spacedef", + "spaceprop", "varnodedef", "bitrangedef", "bitrangelist", + "bitrangesingle", "pcodeopdef", "valueattach", "nameattach", "varattach", + "macrodef", "withblockstart", "withblockmid", "withblock", "id_or_nil", "bitpat_or_nil", "macrostart", "rtlbody", "constructor", "constructprint", "subtablestart", "pexpression", "pequation", "elleq", "ellrt", "atomic", "constraint", "contextblock", "contextlist", @@ -714,97 +717,97 @@ static const yytype_uint16 yytoknum[] = 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 125, 61, 40, - 41, 44, 91, 93, 123, 58, 32 + 362, 363, 364, 365, 366, 367, 368, 369, 125, 61, + 40, 41, 44, 91, 93, 123, 58, 32 }; # endif -#define YYPACT_NINF -313 +#define YYPACT_NINF -316 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-313))) + (!!((Yystate) == (-316))) -#define YYTABLE_NINF -271 +#define YYTABLE_NINF -272 #define yytable_value_is_error(Yytable_value) \ - (!!((Yytable_value) == (-271))) + (!!((Yytable_value) == (-272))) /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { - -42, 58, 3, -313, -37, -313, 5, -41, -5, 42, - 50, 25, 44, -313, -313, -313, -313, -313, 388, -313, - 419, -313, 317, -313, -313, -313, -313, -313, -313, -313, - -313, 37, -313, 59, -313, 23, 87, -45, -313, -313, - 2492, 71, 2510, -78, 90, 172, 197, 33, 33, 33, - 163, -313, -313, 182, -313, -313, -313, 200, -313, -313, - -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, - -313, -313, -313, -313, 351, 254, -313, 256, 291, 267, - -313, 269, -313, 290, 293, 308, -313, -313, -313, -313, - -313, 2336, -313, -313, -313, -313, 276, -313, 2336, -313, - -313, -313, 276, 417, 423, -313, -313, 331, 310, -313, - -313, 330, 444, -313, 327, 8, -313, 328, -313, -313, - 159, 322, -12, -84, 350, 2336, 329, -313, -313, -313, - 333, 334, -313, -313, -313, -313, 336, 249, 361, 362, - 341, 1662, 1481, -313, -313, -313, -313, -313, -313, 349, - -313, 2336, 4, -313, -313, 368, -313, 64, -313, 4, - -313, -313, 472, 376, -313, 2362, -313, 365, -313, -313, - -44, -313, -313, -57, 2528, 476, 381, -313, 16, 482, - -313, 54, 485, -313, -32, 364, 315, 389, 408, 418, - 420, -313, -313, -313, -313, -313, 264, -30, 179, -313, - 271, 1668, 1, 1530, 353, 393, 1561, 366, 406, 409, - 141, 428, -313, 430, -313, -313, -313, -313, 431, 74, - -313, 1530, -65, -313, 157, -313, 166, -313, 1689, 17, - 2336, 2336, 2336, -313, -59, -313, 1689, 1689, 1689, 1689, - 1689, 1689, -59, -313, 429, -313, -313, -313, 438, -313, - 474, -313, -313, -313, -313, -313, 2387, -313, -313, -313, - 466, -313, -313, -15, -313, -313, -313, 45, -313, -313, - 468, 439, 480, 484, 519, 520, -313, -313, 505, -313, - -313, 595, 635, 546, 581, -313, 559, -313, -313, -313, - -313, 1530, 686, -313, 1530, 723, -313, 1530, 1530, 1530, - 1530, 1530, 605, 638, 639, 647, 649, 680, 685, 688, - 690, 725, 728, 730, 765, 770, 805, 806, 810, 845, - -313, 1530, 1810, 1530, -313, -10, 0, 564, 627, 764, - 307, 840, 971, -313, 161, 1006, -313, 1011, 910, 1530, - 949, 1530, 1530, 1530, 1487, 950, 954, 1530, 989, 1689, - 1689, -313, 1689, 2369, -313, -313, -313, 325, 1084, -313, - 75, -313, -313, -313, 2369, 2369, 2369, 2369, 2369, 2369, - -313, 1023, 1029, 1046, -313, -313, -313, -313, 1030, -313, - -313, -313, -313, -313, -313, -313, -313, 1034, 1070, 1074, - 1109, 1561, -313, -313, 1082, -313, 1110, 326, -313, 563, - -313, 603, -313, -313, -313, -313, 1530, 1530, 1530, 1530, - 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, - 1530, 1530, 1530, 1530, 807, 1530, 1530, 1530, 1530, 1530, - 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, - 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, - 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, - 1530, 1627, -313, 11, 1149, 1150, -313, 1530, 1154, -313, - 1164, 299, 1190, -313, 1194, 1326, -313, 1331, -313, -313, - -313, -313, 1862, 1246, 2182, 36, 1902, 43, 1530, 1205, - 1251, 1942, 1244, -313, -313, 283, 1689, 1689, 1689, 1689, - 1689, 1689, 1689, 1689, 1689, 1285, -313, 1291, 1366, -313, - -313, -313, -18, 1371, 1284, 1349, -313, 1325, 1329, 1365, - 1402, -313, 1399, 1403, 1531, 1532, 1534, 847, 684, 887, - 724, 766, 927, 967, 1007, 1047, 1087, 1127, 1167, 1207, - 1247, 96, 643, 1287, 136, -313, 2221, 2258, 2258, 2292, - 2324, 2394, 2504, 2504, 2504, 2504, 2530, 2530, 2530, 2530, - 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 514, 514, - 514, 479, 479, 479, 479, -313, -313, -313, -313, -313, - -313, -313, 1535, 1408, 1413, -313, 1982, 9, 1537, 1538, - 1539, 1561, -313, -313, -313, 1530, 1540, 1530, -313, 1541, - 2022, -313, -313, -313, 1445, -313, 2431, 2561, 168, 383, - 383, 29, 29, -313, -313, 1622, 1689, 1689, 1597, 300, - -313, -313, 27, 1446, -78, -313, -313, -313, -313, 1449, - -313, -313, -313, -313, -313, 1530, -313, 1530, 1530, -313, - -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, - 1530, -313, -313, -313, -313, 1452, -313, -313, 1530, -313, - -313, -313, -313, 2062, -313, 2182, -313, -313, 1425, 1430, - 1431, 1523, 2360, -313, -313, 1568, 1569, -313, -313, 1434, - 1556, -313, 1327, 1367, 1407, 1447, 1435, 2102, -313, 1441, - 1455, 1456, -313, -313, -313, -313, -313, -313, -313, -313, - -313, -313, -313, -313, 1530, 1473, 1474, 2142, 1598, 1601, - -313, -313, -313 + -39, -23, 8, -316, -41, -316, 2, 88, 245, 0, + -38, -37, -14, -316, -316, -316, -316, -316, 426, -316, + 453, -316, 62, -316, -316, -316, -316, -316, -316, -316, + -316, 49, -316, 10, -316, 16, 191, 123, -316, -316, + 2427, 70, 2446, -21, 111, 189, 204, -61, -61, -61, + 173, -316, -316, 171, -316, -316, -316, 182, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, 203, 185, -316, 193, 186, + 210, -316, 213, -316, 217, 231, 220, -316, -316, -316, + -316, -316, 211, -316, -316, -316, -316, 214, -316, 211, + -316, -316, -316, 214, 336, 347, -316, -316, 289, 267, + -316, -316, 297, 400, -316, 284, 55, -316, 295, -316, + -316, 159, 299, 47, -24, 315, 211, 308, -316, -316, + -316, 310, 349, -316, -316, -316, -316, 353, 215, 372, + 373, 364, 1692, 1754, -316, -316, -316, -316, -316, -316, + 369, -316, 211, 15, -316, -316, 395, -316, 26, -316, + 15, -316, -316, 492, 401, -316, 2302, -316, 396, -316, + -316, -57, -316, -316, -34, 2467, 497, 409, -316, 9, + 507, -316, -85, 509, -316, 261, 385, 190, 414, 415, + 417, 418, -316, -316, -316, -316, -316, 293, -70, 21, + -316, 388, 1613, 5, 1556, 226, 399, 1577, 304, 424, + 394, 50, 422, -316, 425, -316, -316, -316, -316, -316, + 429, -58, -316, 1556, -40, -316, 41, -316, 60, -316, + 1662, 27, 211, 211, 211, -316, -51, -316, 1662, 1662, + 1662, 1662, 1662, 1662, -51, -316, 441, -316, -316, -316, + 446, -316, 468, -316, -316, -316, -316, -316, 2328, -316, + -316, -316, 451, -316, -316, -13, -316, -316, -316, -43, + -316, -316, 450, 455, 449, 459, 461, 463, -316, -316, + 525, -316, -316, 613, 615, 526, 565, -316, 538, -316, + -316, -316, -316, -316, 1556, 665, -316, 1556, 667, -316, + 1556, 1556, 1556, 1556, 1556, 576, 577, 582, 585, 622, + 625, 658, 659, 669, 704, 709, 744, 749, 784, 785, + 820, 825, 826, -316, 1556, 1822, 1556, -316, 54, 3, + 584, 648, 703, 380, 661, 909, -316, 367, 952, -316, + 987, 770, 1556, 891, 1556, 1556, 1556, 1512, 895, 930, + 1556, 931, 1662, 1662, -316, 1662, 423, -316, -316, -316, + 167, 1029, -316, 187, -316, -316, -316, 423, 423, 423, + 423, 423, 423, -316, 995, 971, 992, -316, -316, -316, + -316, 972, -316, -316, -316, -316, -316, -316, -316, -316, + 976, 1011, 1012, 1051, 1577, -316, -316, 1023, -316, 1052, + 348, -316, 583, -316, 623, -316, -316, -316, -316, 1556, + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 827, 1556, 1556, + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, + 1556, 1556, 1556, 1556, 1700, -316, -8, 1087, 1092, -316, + 1556, 1093, -316, 1071, 85, 1132, -316, 1133, 1234, -316, + 1269, -316, -316, -316, -316, 1874, 1153, 2194, 271, 1914, + 275, 1556, 1147, 1184, 1954, 1186, -316, -316, 29, 1662, + 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1189, -316, + 1194, 1229, -316, -316, -316, 39, 1274, 1227, 1258, -316, + 1267, 1268, 1303, 1308, -316, 1304, 1310, 1471, 1476, 1511, + 867, 705, 907, 745, 787, 948, 988, 1028, 1069, 1109, + 1149, 1190, 1230, 1270, 287, 663, 1311, 305, -316, 2233, + 2270, 2270, 2304, 2336, 2366, 2465, 2465, 2465, 2465, 2491, + 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491, + 2491, 2575, 2575, 2575, 408, 408, 408, 408, -316, -316, + -316, -316, -316, -316, -316, 1516, 1349, 1388, -316, 1994, + 4, 1549, 1551, 1553, 1577, -316, -316, -316, 1556, 1554, + 1556, -316, 1557, 2034, -316, -316, -316, 1459, -316, 2444, + 2435, 495, 273, 273, 421, 421, -316, -316, 2482, 1662, + 1662, 1626, 117, -316, -316, 387, 1461, -21, -316, -316, + -316, -316, 1463, -316, -316, -316, -316, -316, 1556, -316, + 1556, 1556, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, 1556, -316, -316, -316, -316, 1464, -316, + -316, 1556, -316, -316, -316, -316, 2074, -316, 2194, -316, + -316, 1436, 1439, 1440, 1548, 1615, -316, -316, 1543, 1544, + -316, -316, 1441, 1568, -316, 1351, 1391, 1432, 1472, 1445, + 2114, -316, 1453, 1468, 1475, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, 1556, 1455, 1456, + 2154, 1585, 1586, -316, -316, -316 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -817,99 +820,99 @@ static const yytype_uint16 yydefact[] = 0, 8, 0, 9, 10, 11, 12, 13, 14, 17, 63, 0, 18, 0, 16, 0, 0, 0, 15, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 69, 68, 0, 88, 87, 23, 0, 323, 324, - 325, 326, 329, 330, 331, 332, 333, 338, 334, 335, - 336, 337, 327, 328, 27, 0, 29, 0, 31, 0, - 43, 0, 50, 0, 0, 0, 66, 64, 65, 145, - 82, 0, 282, 83, 86, 85, 84, 81, 0, 78, - 80, 90, 79, 0, 0, 44, 45, 0, 0, 28, - 294, 0, 0, 30, 0, 0, 54, 0, 304, 305, - 0, 0, 0, 0, 320, 70, 0, 34, 35, 36, - 0, 0, 39, 40, 41, 42, 0, 0, 0, 0, - 0, 140, 0, 272, 273, 274, 275, 124, 276, 123, - 126, 0, 127, 106, 111, 113, 114, 125, 283, 127, - 20, 21, 0, 0, 295, 0, 57, 0, 53, 55, - 0, 306, 307, 0, 0, 0, 0, 285, 0, 0, - 312, 0, 0, 321, 0, 127, 71, 0, 0, 0, - 0, 46, 47, 48, 49, 61, 0, 0, 243, 257, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, - 254, 0, 277, 0, 278, 279, 280, 281, 0, 255, - 146, 0, 0, 253, 0, 173, 252, 110, 0, 0, - 0, 0, 0, 129, 0, 112, 0, 0, 0, 0, - 0, 0, 0, 22, 0, 296, 293, 297, 0, 52, - 0, 310, 308, 309, 303, 299, 0, 300, 59, 286, - 0, 287, 289, 0, 58, 314, 313, 0, 60, 72, - 0, 0, 0, 0, 0, 0, 254, 255, 0, 259, - 252, 0, 0, 0, 0, 247, 246, 251, 248, 244, - 245, 0, 0, 250, 0, 0, 170, 0, 0, 0, + 0, 69, 68, 0, 88, 87, 23, 0, 325, 326, + 327, 328, 331, 332, 333, 334, 335, 341, 336, 337, + 338, 339, 340, 329, 330, 27, 0, 29, 0, 31, + 0, 43, 0, 50, 0, 0, 0, 66, 64, 65, + 145, 82, 0, 284, 83, 86, 85, 84, 81, 0, + 78, 80, 90, 79, 0, 0, 44, 45, 0, 0, + 28, 296, 0, 0, 30, 0, 0, 54, 0, 306, + 307, 0, 0, 0, 0, 322, 70, 0, 34, 35, + 36, 0, 0, 39, 40, 41, 42, 0, 0, 0, + 0, 0, 140, 0, 273, 274, 275, 276, 124, 277, + 123, 126, 0, 127, 106, 111, 113, 114, 125, 285, + 127, 20, 21, 0, 0, 297, 0, 57, 0, 53, + 55, 0, 308, 309, 0, 0, 0, 0, 287, 0, + 0, 314, 0, 0, 323, 0, 127, 71, 0, 0, + 0, 0, 46, 47, 48, 49, 61, 0, 0, 243, + 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 257, 255, 0, 278, 0, 279, 280, 281, 282, 283, + 0, 256, 146, 0, 0, 254, 0, 173, 253, 110, + 0, 0, 0, 0, 0, 129, 0, 112, 0, 0, + 0, 0, 0, 0, 0, 22, 0, 298, 295, 299, + 0, 52, 0, 312, 310, 311, 305, 301, 0, 302, + 59, 288, 0, 289, 291, 0, 58, 316, 315, 0, + 60, 72, 0, 0, 0, 0, 0, 0, 255, 256, + 0, 260, 253, 0, 0, 0, 0, 248, 247, 252, + 249, 244, 245, 246, 0, 0, 251, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 237, 0, 0, 0, 174, 252, 0, 0, 0, 0, - 0, 0, 143, 271, 0, 0, 266, 0, 0, 0, - 0, 317, 0, 317, 0, 0, 0, 0, 0, 0, - 0, 91, 0, 122, 92, 93, 115, 108, 109, 107, - 0, 75, 145, 76, 117, 118, 120, 121, 119, 116, - 77, 24, 0, 0, 301, 298, 302, 288, 0, 290, - 292, 284, 316, 315, 311, 322, 62, 0, 0, 0, - 0, 0, 265, 264, 0, 242, 0, 0, 165, 0, - 168, 0, 189, 216, 202, 190, 0, 0, 0, 0, + 0, 0, 0, 237, 0, 0, 0, 174, 253, 0, + 0, 0, 0, 0, 0, 143, 272, 0, 0, 267, + 0, 0, 0, 0, 319, 0, 319, 0, 0, 0, + 0, 0, 0, 0, 91, 0, 122, 92, 93, 115, + 108, 109, 107, 0, 75, 145, 76, 117, 118, 120, + 121, 119, 116, 77, 24, 0, 0, 303, 300, 304, + 290, 0, 292, 294, 286, 318, 317, 313, 324, 62, + 0, 0, 0, 0, 0, 266, 265, 0, 242, 0, + 0, 165, 0, 168, 0, 189, 216, 202, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 317, 0, 0, 317, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 319, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 175, 0, 0, 0, 147, 0, 0, 154, - 0, 0, 0, 267, 0, 144, 263, 0, 261, 141, - 161, 258, 0, 0, 318, 0, 0, 0, 0, 0, - 0, 0, 0, 104, 105, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 134, 0, 0, 128, - 138, 145, 0, 0, 0, 0, 291, 0, 0, 0, - 0, 260, 241, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 175, 0, 0, 0, 147, + 0, 0, 154, 0, 0, 0, 268, 0, 144, 264, + 0, 262, 141, 161, 259, 0, 0, 320, 0, 0, + 0, 0, 0, 0, 0, 0, 104, 105, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, + 0, 0, 128, 138, 145, 0, 0, 0, 0, 293, + 0, 0, 0, 0, 261, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 176, 205, 204, 203, 193, - 191, 192, 179, 180, 206, 207, 181, 184, 182, 183, - 185, 186, 187, 188, 208, 209, 210, 211, 194, 195, - 196, 177, 178, 212, 213, 197, 198, 200, 199, 201, - 214, 215, 0, 0, 0, 235, 0, 0, 0, 0, - 0, 0, 269, 142, 151, 0, 0, 0, 158, 0, - 0, 160, 159, 149, 0, 94, 101, 102, 100, 98, - 99, 95, 96, 97, 103, 0, 0, 0, 0, 0, - 73, 137, 0, 0, 0, 32, 33, 37, 38, 0, - 249, 167, 169, 171, 220, 0, 219, 0, 0, 226, - 217, 218, 228, 229, 230, 225, 224, 227, 239, 231, - 0, 233, 238, 166, 234, 0, 150, 148, 0, 164, - 163, 162, 268, 0, 156, 319, 172, 155, 0, 0, - 0, 0, 0, 74, 139, 0, 0, 26, 25, 0, - 0, 240, 0, 0, 0, 0, 0, 0, 153, 0, - 0, 0, 130, 133, 135, 136, 56, 51, 221, 222, - 223, 232, 236, 152, 0, 0, 0, 0, 0, 0, - 157, 131, 132 + 0, 0, 0, 0, 0, 0, 0, 0, 176, 205, + 204, 203, 193, 191, 192, 179, 180, 206, 207, 181, + 184, 182, 183, 185, 186, 187, 188, 208, 209, 210, + 211, 194, 195, 196, 177, 178, 212, 213, 197, 198, + 200, 199, 201, 214, 215, 0, 0, 0, 235, 0, + 0, 0, 0, 0, 0, 270, 142, 151, 0, 0, + 0, 158, 0, 0, 160, 159, 149, 0, 94, 101, + 102, 100, 98, 99, 95, 96, 97, 103, 0, 0, + 0, 0, 0, 73, 137, 0, 0, 0, 32, 33, + 37, 38, 0, 250, 167, 169, 171, 220, 0, 219, + 0, 0, 226, 217, 218, 228, 229, 230, 225, 224, + 227, 239, 231, 0, 233, 238, 166, 234, 0, 150, + 148, 0, 164, 163, 162, 269, 0, 156, 321, 172, + 155, 0, 0, 0, 0, 0, 74, 139, 0, 0, + 26, 25, 0, 0, 240, 0, 0, 0, 0, 0, + 0, 153, 0, 0, 0, 130, 133, 135, 136, 56, + 51, 221, 222, 223, 232, 236, 152, 0, 0, 0, + 0, 0, 0, 157, 131, 132 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -313, -313, 1574, 1580, -313, -313, -313, -313, -313, -313, - -313, -313, -313, -313, -313, -313, -313, 1497, -313, -313, - -313, -313, -313, -313, -313, -313, -313, -313, -313, 1374, - -313, -313, -313, -194, -62, -313, 1471, -313, -313, -132, - -313, 999, -313, -313, 1256, 1108, -313, -197, -140, -196, - -127, 1157, 1288, -139, -313, -91, -53, 1585, -313, -313, - 1001, -313, -313, -313, 252, -313, -313, -313, -312, -313, - 15 + -316, -316, 1564, 1565, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, 1481, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, 1354, + -316, -316, -316, -224, -69, -316, 1477, -316, -316, -73, + -316, 1000, -316, -316, 1259, 1112, -316, -199, -141, -198, + -60, 1162, 1292, -140, -316, -92, -36, 1595, -316, -316, + 1005, -316, -316, -316, 427, -316, -316, -316, -315, -316, + 7 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 2, 14, 15, 3, 16, 17, 18, 19, 20, - 74, 78, 21, 22, 23, 24, 115, 116, 25, 26, - 27, 28, 29, 30, 31, 32, 53, 185, 33, 363, - 34, 35, 36, 353, 152, 153, 154, 155, 156, 234, - 360, 621, 510, 511, 140, 141, 220, 484, 323, 292, - 324, 223, 224, 293, 335, 354, 325, 96, 179, 263, - 112, 165, 175, 256, 121, 173, 182, 267, 485, 184, - 75 + 75, 79, 21, 22, 23, 24, 116, 117, 25, 26, + 27, 28, 29, 30, 31, 32, 53, 186, 33, 366, + 34, 35, 36, 356, 153, 154, 155, 156, 157, 236, + 363, 624, 513, 514, 141, 142, 222, 487, 326, 295, + 327, 225, 226, 296, 338, 357, 328, 97, 180, 265, + 113, 166, 176, 258, 122, 174, 183, 269, 488, 185, + 76 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -917,659 +920,652 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 157, 221, 225, 5, 6, 295, 322, 157, 466, 296, - 230, 619, 231, 38, 222, 232, 168, 657, 378, 249, - 361, 176, 196, 230, 344, 231, 1, 242, 232, 110, - 40, 487, 90, 180, 157, 79, 159, 41, 6, 42, - 103, 104, 364, 365, 366, 367, 368, 369, 181, 260, - 251, 157, 43, 271, 111, 106, 252, 109, 253, 44, - 157, 250, 45, 186, 345, 503, 504, 334, 46, 279, - 346, 7, 8, 9, 199, 362, 254, 281, 236, 329, - 10, 237, 238, 239, 240, 47, 48, 49, 226, 229, - 379, 37, 380, 177, 397, 282, 97, 399, 269, 270, - 401, 402, 403, 404, 405, 85, 8, 9, 541, 620, - 11, 544, 677, 678, 10, 114, 209, 91, 381, 463, - 178, 261, 464, 262, 424, 465, 462, 92, 467, 12, - 93, 94, 39, 297, 4, 468, 233, 658, 13, 157, - 157, 157, 482, 280, 11, 486, 118, 356, 119, 50, - 491, 327, 382, 280, 336, 493, 494, 51, 495, 95, - 54, 265, 383, 12, 86, 120, 596, 597, 357, 358, - 359, 266, 13, 599, 597, 355, 52, 505, 384, 55, - 247, 98, 506, 355, 355, 355, 355, 355, 355, 257, - 507, 92, 241, 89, 99, 100, 508, 499, 500, 107, - 501, 502, -263, 473, 503, 504, -263, 113, 509, 527, - 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, - 538, 539, 540, 101, 542, 543, 648, 597, 546, 547, - 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, - 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, - 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, - 578, 579, 580, 581, 521, 582, 652, 597, 475, 339, - 586, 376, 171, -262, 172, 196, 340, 280, 212, 114, - 214, 478, 215, 216, 217, 347, 117, 476, 197, 348, - 496, 600, 124, 497, -261, 498, 355, 355, -261, 355, - 122, 123, 606, 607, 608, 609, 610, 611, 612, 613, - 614, 283, 499, 500, 284, 501, 502, 125, 196, 503, - 504, 230, 191, 231, 192, 80, 232, 199, 126, 425, - 426, 427, 428, 231, 285, 429, 232, 430, 280, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 455, 456, 457, 458, 459, 460, 209, - 199, 276, 132, 133, 134, 135, 286, 330, 287, 40, - 158, 212, 130, 214, 131, 215, 216, 217, 42, 81, - 277, 82, 288, 289, 290, 136, 56, 137, 663, 278, - 665, 43, 198, 291, 83, 84, 589, 675, 44, 590, - 676, 45, 209, 605, 276, 501, 502, 46, 138, 503, - 504, 139, 671, 672, 212, 160, 214, 76, 215, 216, - 217, 161, 127, 277, 128, 129, 162, 164, 682, 163, - 683, 684, 472, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 166, 685, 174, 167, 170, 183, 187, 524, - 326, 687, 188, 189, 662, 190, 193, 194, 195, 235, - 212, 331, 214, 332, 215, 216, 217, 228, 221, 225, - 243, 244, 248, 212, 258, 214, 259, 215, 216, 217, - 264, 222, 333, 268, 272, 57, 233, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 707, 68, 69, - 70, 71, 72, 273, 73, 454, 455, 456, 457, 458, - 459, 460, 328, 274, 669, 275, 77, 337, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 280, 68, - 69, 70, 71, 72, 338, 73, 450, 451, 452, 453, - 454, 455, 456, 457, 458, 459, 460, 341, 342, 371, - 343, 373, 670, 355, 355, 226, 425, 426, 427, 428, - 372, 377, 429, 386, 430, 385, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, - 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, - 455, 456, 457, 458, 459, 460, 425, 426, 427, 428, - 391, 387, 429, 392, 430, 388, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, - 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, - 455, 456, 457, 458, 459, 460, 425, 426, 427, 428, - 389, 390, 429, 393, 430, 394, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, - 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, - 455, 456, 457, 458, 459, 460, 395, 425, 426, 427, - 428, 396, 469, 429, 398, 430, 525, 431, 432, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, - 454, 455, 456, 457, 458, 459, 460, 425, 426, 427, - 428, 400, 470, 429, 406, 430, 526, 431, 432, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, - 454, 455, 456, 457, 458, 459, 460, 407, 408, 425, - 426, 427, 428, 649, 650, 429, 409, 430, 410, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 455, 456, 457, 458, 459, 460, 411, - 425, 426, 427, 428, 412, 635, 429, 413, 430, 414, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 425, 426, 427, 428, 415, 637, 429, 416, 430, 417, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 425, 426, 427, 428, 418, 471, 429, 638, 430, 419, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 425, 426, 427, 428, 420, 421, 429, 545, 430, 422, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 425, 426, 427, 428, 423, 474, 429, 634, 430, -270, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 425, 426, 427, 428, 479, 481, 429, 636, 430, 480, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 425, 426, 427, 428, 483, 489, 429, 639, 430, 490, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 425, 426, 427, 428, 492, 232, 429, 640, 430, 513, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 425, 426, 427, 428, 514, 516, 429, 641, 430, 517, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 425, 426, 427, 428, 515, 518, 429, 642, 430, 519, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 425, 426, 427, 428, 520, 522, 429, 643, 430, 523, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 425, 426, 427, 428, 584, 585, 429, 644, 430, 587, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 425, 426, 427, 428, 588, 591, 429, 645, 430, 592, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 425, 426, 427, 428, -262, 601, 429, 646, 430, 593, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 425, 426, 427, 428, 595, 604, 429, 647, 430, 602, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 425, 426, 427, 428, 615, 623, 429, 651, 430, 616, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 425, 426, 427, 428, 624, 625, 429, 698, 430, 626, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 425, 426, 427, 428, 617, 627, 429, 699, 430, 622, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 496, 692, 628, 497, 629, 498, 630, 700, 654, 631, - 632, 196, 633, 653, 655, 659, 660, 661, 664, 666, - 668, 679, 499, 500, 681, 501, 502, 686, 689, 503, - 504, 690, 691, 298, 697, 299, 198, 696, 702, 704, - 705, 706, 196, 300, 301, 302, 303, 701, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 199, 143, 144, 145, 146, 694, 695, - 147, 148, 149, 708, 709, 87, 711, 150, 196, 712, - 151, 88, 169, 227, 197, 488, 370, 674, 512, 618, - 583, 102, 477, 0, 199, 680, 619, 0, 0, 0, - 0, 0, 0, 198, 0, 209, 0, 276, 0, 0, - 0, 0, 319, 0, 197, 0, 0, 212, 320, 214, - 0, 215, 216, 217, 0, 0, 277, 0, 0, 321, - 199, 200, 201, 202, 203, 0, 209, 0, 276, 0, - 0, 0, 0, 196, 0, 0, 0, 0, 212, 197, - 214, 0, 215, 216, 217, 197, 0, 277, 0, 0, - 285, 0, 204, 205, 206, 0, 208, 0, 198, 0, - 0, 0, 209, 0, 210, 0, 0, 0, 0, 211, - 0, 0, 0, 0, 212, 213, 214, 0, 215, 216, - 217, 218, 349, 219, 673, 199, 200, 201, 202, 203, - 0, 285, 286, 350, 287, 143, 144, 145, 146, 212, - 0, 214, 148, 215, 216, 217, 0, 0, 288, 289, - 290, 0, 0, 0, 0, 0, 0, 204, 205, 206, - 207, 208, 0, 0, 0, 0, 0, 209, 0, 210, - 0, 0, 0, 286, 211, 287, 0, 0, 0, 212, - 213, 214, 0, 215, 216, 217, 218, 0, 219, 288, - 289, 290, 0, 0, 0, 351, 0, 0, 0, 0, - 294, 0, 143, 144, 145, 146, 212, 0, 214, 148, - 215, 216, 217, 425, 426, 427, 428, 0, 352, 429, - 0, 430, 0, 431, 432, 433, 434, 435, 436, 437, + 158, 223, 227, 197, 298, 325, 251, 158, 5, 6, + 38, 469, 660, 299, 367, 368, 369, 370, 371, 372, + 381, 232, 267, 233, 347, 91, 234, 80, 364, 1, + 160, 490, 268, 232, 158, 233, 499, 283, 234, 500, + 238, 501, 262, 239, 240, 241, 242, 107, 252, 110, + 6, 158, 119, 4, 120, 200, 284, 187, 502, 503, + 158, 504, 505, 169, 385, 506, 507, 337, 622, 51, + 81, -264, 121, 253, 386, -264, 7, 8, 9, 254, + 177, 255, 224, 231, 365, 10, 111, 244, 37, 52, + 348, 387, 382, 181, 383, 400, 349, 210, 402, 54, + 256, 404, 405, 406, 407, 408, 228, 50, 544, 182, + 92, 547, 112, 273, 263, 11, 264, 86, 8, 9, + 93, 384, 55, 94, 95, 427, 10, 465, 496, 497, + 39, 498, 470, 661, 82, 12, 83, 281, 300, 471, + 158, 158, 158, 485, 13, 90, 489, 332, 235, 84, + 85, 494, 178, 96, 285, 243, 11, 286, 359, 40, + 608, 282, 115, 360, 361, 362, 41, 623, 42, 330, + 350, 282, 339, 249, 351, 233, 12, 87, 234, 342, + 179, 43, 259, -263, 466, 13, 343, 467, 44, -262, + 468, 45, 592, -262, 358, 593, 232, 46, 233, 108, + 98, 234, 358, 358, 358, 358, 358, 358, 104, 105, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 678, 545, 546, 679, 114, 549, + 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, + 580, 581, 582, 583, 584, 379, 585, 133, 134, 135, + 136, 589, 172, 476, 173, 609, 610, 611, 612, 613, + 614, 615, 616, 617, 128, 99, 129, 130, 192, 508, + 193, 40, 603, 118, 509, 93, 115, 282, 100, 101, + 42, 481, 510, 125, 197, 504, 505, 126, 511, 506, + 507, 127, 143, 43, 131, 333, 358, 358, 159, 358, + 44, 512, 132, 45, 144, 145, 146, 147, 102, 46, + 148, 149, 150, 329, 524, 47, 48, 49, 151, 137, + 199, 152, 138, 213, 161, 215, 139, 216, 217, 218, + 219, 428, 429, 430, 431, 162, 200, 432, 282, 433, + 140, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 197, 271, 272, 163, 674, 675, 164, 210, 666, + 278, 668, 599, 600, 165, 198, 602, 600, 167, 334, + 213, 335, 215, 168, 216, 217, 218, 219, 651, 600, + 279, 213, 184, 215, 171, 216, 217, 218, 219, 280, + 499, 336, 175, 500, 56, 501, 655, 600, 188, 685, + 189, 686, 687, 200, 457, 458, 459, 460, 461, 462, + 463, 287, 502, 503, 688, 504, 505, 506, 507, 506, + 507, 77, 690, 358, 358, 358, 358, 358, 358, 358, + 358, 358, 680, 681, 478, 123, 124, 194, 195, 190, + 223, 227, 527, 191, 213, 210, 215, 278, 216, 217, + 218, 219, 196, 288, 479, 289, 237, 213, 230, 215, + 245, 216, 217, 218, 219, 260, 246, 279, 710, 290, + 291, 292, 293, 250, 261, 266, 475, 270, 235, 274, + 275, 294, 276, 277, 502, 503, 672, 504, 505, 331, + 341, 506, 507, 57, 665, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 340, 68, 69, 70, 71, + 72, 73, 344, 74, 345, 376, 380, 388, 282, 346, + 78, 224, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 374, 68, 69, 70, 71, 72, 73, 375, + 74, 390, 673, 358, 358, 228, 428, 429, 430, 431, + 389, 391, 432, 392, 433, 393, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, - 458, 459, 460, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 425, 426, 427, 428, 0, - 594, 429, 0, 430, 461, 431, 432, 433, 434, 435, + 458, 459, 460, 461, 462, 463, 428, 429, 430, 431, + 394, 395, 432, 396, 433, 397, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 428, 429, 430, 431, + 398, 399, 432, 401, 433, 403, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 409, 410, 428, 429, + 430, 431, 411, 472, 432, 412, 433, 528, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, - 456, 457, 458, 459, 460, 425, 426, 427, 428, 0, - 598, 429, 0, 430, 0, 431, 432, 433, 434, 435, + 456, 457, 458, 459, 460, 461, 462, 463, 428, 429, + 430, 431, 413, 473, 432, 414, 433, 529, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, - 456, 457, 458, 459, 460, 425, 426, 427, 428, 0, - 603, 429, 0, 430, 0, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, - 456, 457, 458, 459, 460, 425, 426, 427, 428, 0, - 656, 429, 0, 430, 0, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, - 456, 457, 458, 459, 460, 425, 426, 427, 428, 0, - 667, 429, 0, 430, 0, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, - 456, 457, 458, 459, 460, 425, 426, 427, 428, 0, - 688, 429, 0, 430, 0, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, - 456, 457, 458, 459, 460, 425, 426, 427, 428, 0, - 703, 429, 0, 430, 0, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, - 456, 457, 458, 459, 460, 425, 426, 427, 428, 0, - 710, 429, 0, 430, 0, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, - 456, 457, 458, 459, 460, 425, 426, 427, 428, 0, - 0, 429, 0, 430, 0, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, - 456, 457, 458, 459, 460, 426, 427, 428, 0, 0, - 429, 0, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, - 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, - 457, 458, 459, 460, 428, 0, 0, 429, 0, 430, - 0, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 456, 457, 458, 459, 460, 461, 462, 463, 415, 416, + 428, 429, 430, 431, 652, 653, 432, 477, 433, 417, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 428, 429, 430, 431, 418, 474, 432, 638, 433, 419, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 428, 429, 430, 431, 420, 484, 432, 640, 433, 421, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 428, 429, 430, 431, 422, 423, 432, -271, 433, 641, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 424, 428, 429, 430, 431, 425, 426, 432, 548, 433, + 482, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 428, 429, 430, 431, 483, 486, 432, 637, 433, + 492, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 428, 429, 430, 431, 493, 495, 432, 639, 433, + 234, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 516, 428, 429, 430, 431, 517, 519, 432, 642, + 433, 520, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 428, 429, 430, 431, 521, 522, 432, 643, + 433, 518, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 428, 429, 430, 431, 523, 525, 432, 644, + 433, 526, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 587, 428, 429, 430, 431, 588, 590, 432, + 645, 433, 591, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 428, 429, 430, 431, 594, 595, 432, + 646, 433, -263, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 428, 429, 430, 431, 596, 604, 432, + 647, 433, 598, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 605, 428, 429, 430, 431, 607, 618, + 432, 648, 433, 619, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, - 460, 429, 0, 430, 0, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, - 456, 457, 458, 459, 460, 430, 0, 431, 432, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, - 454, 455, 456, 457, 458, 459, 460, 496, 693, 0, - 497, 0, 498, 0, 0, 0, 496, 0, 0, 497, - 0, 498, 0, 0, 0, 0, 0, 0, 0, 499, - 500, 0, 501, 502, 0, 0, 503, 504, 499, 500, - 0, 501, 502, 0, 0, 503, 504, 431, 432, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, - 454, 455, 456, 457, 458, 459, 460, 142, 0, 0, - 0, 497, 0, 498, 0, 0, 0, 0, 0, 143, - 144, 145, 146, 0, 0, 147, 148, 149, 0, 0, - 499, 500, 150, 501, 502, 151, 0, 503, 504, 245, - 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 0, 68, 69, 70, 71, 72, 0, 73, 0, - 0, 0, 0, 0, 374, 246, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 0, 68, 69, 70, - 71, 72, 0, 73, 0, 0, 0, 0, 0, 0, - 375, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, - 454, 455, 456, 457, 458, 459, 460, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, 447, + 460, 461, 462, 463, 428, 429, 430, 431, 620, 626, + 432, 649, 433, 627, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 428, 429, 430, 431, 628, 629, + 432, 650, 433, 625, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 630, 428, 429, 430, 431, 631, + 632, 432, 654, 433, 633, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 428, 429, 430, 431, 634, + 657, 432, 701, 433, 635, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 428, 429, 430, 431, 636, + 658, 432, 702, 433, 656, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 499, 695, 662, 500, 663, + 501, 664, 667, 703, 671, 669, 682, 197, 684, 689, + 692, 693, 694, 697, 698, 699, 700, 502, 503, 705, + 504, 505, 707, 708, 506, 507, 711, 712, 197, 301, + 709, 302, 199, 714, 715, 88, 89, 170, 373, 303, + 304, 305, 306, 704, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 200, + 229, 677, 499, 696, 515, 500, 621, 501, 586, 480, + 198, 103, 683, 0, 0, 0, 0, 197, 0, 0, + 200, 491, 0, 198, 502, 503, 0, 504, 505, 0, + 0, 506, 507, 0, 0, 622, 0, 0, 0, 0, + 0, 210, 199, 278, 0, 0, 0, 0, 322, 0, + 0, 0, 0, 213, 323, 215, 287, 216, 217, 218, + 219, 0, 210, 279, 278, 0, 324, 0, 0, 200, + 201, 202, 203, 204, 213, 352, 215, 0, 216, 217, + 218, 219, 0, 197, 279, 0, 353, 0, 0, 198, + 0, 0, 0, 0, 0, 0, 0, 198, 288, 0, + 289, 205, 206, 207, 0, 209, 0, 0, 199, 0, + 0, 210, 0, 211, 290, 291, 292, 293, 212, 0, + 0, 0, 0, 213, 214, 215, 297, 216, 217, 218, + 219, 220, 0, 221, 676, 200, 201, 202, 203, 204, + 0, 0, 0, 287, 0, 0, 0, 0, 354, 0, + 0, 0, 0, 0, 0, 144, 145, 146, 147, 213, + 0, 215, 149, 216, 217, 218, 219, 205, 206, 207, + 208, 209, 355, 0, 0, 0, 0, 210, 0, 211, + 0, 0, 0, 0, 212, 288, 0, 289, 0, 213, + 214, 215, 0, 216, 217, 218, 219, 220, 0, 221, + 0, 290, 291, 292, 293, 428, 429, 430, 431, 0, + 0, 432, 0, 433, 0, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 0, 0, 144, 145, 146, + 147, 0, 0, 148, 149, 150, 0, 428, 429, 430, + 431, 151, 597, 432, 152, 433, 464, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 428, 429, 430, + 431, 0, 601, 432, 0, 433, 0, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 428, 429, 430, + 431, 0, 606, 432, 0, 433, 0, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 428, 429, 430, + 431, 0, 659, 432, 0, 433, 0, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 428, 429, 430, + 431, 0, 670, 432, 0, 433, 0, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 428, 429, 430, + 431, 0, 691, 432, 0, 433, 0, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 428, 429, 430, + 431, 0, 706, 432, 0, 433, 0, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 428, 429, 430, + 431, 0, 713, 432, 0, 433, 0, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 428, 429, 430, + 431, 0, 0, 432, 0, 433, 0, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 429, 430, 431, + 0, 0, 432, 0, 433, 0, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, - 458, 459, 460, 498, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 499, 500, 0, 501, 502, 0, 0, 503, 504, 105, + 458, 459, 460, 461, 462, 463, 431, 0, 0, 432, + 0, 433, 0, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 432, 0, 433, 0, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 433, 0, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 247, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 0, 68, 69, 70, 71, 72, 108, 73, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 0, - 68, 69, 70, 71, 72, 255, 73, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 0, 68, 69, - 70, 71, 72, 0, 73 + 67, 0, 68, 69, 70, 71, 72, 73, 0, 74, + 0, 0, 0, 0, 0, 377, 248, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 501, 68, 69, + 70, 71, 72, 73, 500, 74, 501, 0, 0, 0, + 0, 0, 378, 0, 502, 503, 0, 504, 505, 0, + 0, 506, 507, 502, 503, 0, 504, 505, 0, 0, + 506, 507, 438, 439, 440, 441, 442, 443, 444, 445, + 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 106, 0, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 0, 68, 69, 70, + 71, 72, 73, 109, 74, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 0, 68, 69, 70, 71, + 72, 73, 0, 74, 257, 0, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 0, 68, 69, 70, + 71, 72, 73, 0, 74, 144, 145, 146, 147, 213, + 0, 215, 149, 216, 217, 218, 219, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463 }; static const yytype_int16 yycheck[] = { - 91, 141, 141, 0, 1, 201, 203, 98, 8, 8, - 6, 29, 8, 8, 141, 11, 8, 8, 33, 63, - 79, 33, 11, 6, 221, 8, 68, 159, 11, 107, - 71, 343, 9, 117, 125, 20, 98, 78, 1, 80, - 85, 86, 236, 237, 238, 239, 240, 241, 132, 33, - 107, 142, 93, 185, 132, 40, 113, 42, 115, 100, - 151, 105, 103, 125, 129, 36, 37, 207, 109, 196, - 135, 68, 69, 70, 63, 134, 133, 107, 14, 206, - 77, 17, 18, 19, 20, 90, 91, 92, 141, 151, - 105, 128, 107, 105, 291, 125, 9, 294, 130, 131, - 297, 298, 299, 300, 301, 68, 69, 70, 420, 127, - 107, 423, 85, 86, 77, 107, 105, 94, 133, 129, - 132, 105, 132, 107, 321, 135, 323, 104, 128, 126, - 107, 108, 127, 132, 76, 135, 132, 128, 135, 230, - 231, 232, 339, 196, 107, 342, 113, 130, 115, 107, - 347, 204, 107, 206, 207, 349, 350, 107, 352, 136, - 135, 107, 117, 126, 127, 132, 130, 131, 230, 231, - 232, 117, 135, 130, 131, 228, 126, 102, 133, 135, - 165, 94, 107, 236, 237, 238, 239, 240, 241, 174, - 115, 104, 128, 134, 107, 108, 121, 29, 30, 128, - 32, 33, 128, 330, 36, 37, 132, 117, 133, 406, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 136, 421, 422, 130, 131, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, - 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, - 457, 458, 459, 460, 391, 461, 130, 131, 107, 128, - 467, 256, 113, 132, 115, 11, 135, 330, 117, 107, - 119, 334, 121, 122, 123, 128, 89, 126, 17, 132, - 7, 488, 129, 10, 128, 12, 349, 350, 132, 352, - 48, 49, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 132, 29, 30, 135, 32, 33, 135, 11, 36, - 37, 6, 73, 8, 75, 8, 11, 63, 128, 3, - 4, 5, 6, 8, 63, 9, 11, 11, 391, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 105, - 63, 107, 81, 82, 83, 84, 105, 11, 107, 71, - 104, 117, 128, 119, 128, 121, 122, 123, 80, 72, - 126, 74, 121, 122, 123, 128, 8, 128, 595, 135, - 597, 93, 36, 132, 87, 88, 107, 107, 100, 110, - 110, 103, 105, 130, 107, 32, 33, 109, 128, 36, - 37, 128, 616, 617, 117, 8, 119, 8, 121, 122, - 123, 8, 81, 126, 83, 84, 105, 107, 635, 129, - 637, 638, 135, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 8, 650, 132, 128, 128, 107, 129, 133, - 107, 658, 129, 129, 591, 129, 105, 105, 127, 101, - 117, 105, 119, 107, 121, 122, 123, 128, 618, 618, - 8, 105, 117, 117, 8, 119, 105, 121, 122, 123, - 8, 618, 126, 8, 105, 107, 132, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 704, 120, 121, - 122, 123, 124, 105, 126, 36, 37, 38, 39, 40, - 41, 42, 129, 105, 615, 105, 107, 121, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 591, 120, - 121, 122, 123, 124, 135, 126, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 129, 128, 130, - 129, 87, 615, 616, 617, 618, 3, 4, 5, 6, - 132, 105, 9, 134, 11, 107, 13, 14, 15, 16, + 92, 142, 142, 11, 202, 204, 63, 99, 0, 1, + 8, 8, 8, 8, 238, 239, 240, 241, 242, 243, + 33, 6, 107, 8, 223, 9, 11, 20, 79, 68, + 99, 346, 117, 6, 126, 8, 7, 107, 11, 10, + 14, 12, 33, 17, 18, 19, 20, 40, 105, 42, + 1, 143, 113, 76, 115, 63, 126, 126, 29, 30, + 152, 32, 33, 8, 107, 36, 37, 208, 29, 107, + 8, 129, 133, 107, 117, 133, 68, 69, 70, 113, + 33, 115, 142, 152, 135, 77, 107, 160, 129, 127, + 130, 134, 105, 117, 107, 294, 136, 105, 297, 136, + 134, 300, 301, 302, 303, 304, 142, 107, 423, 133, + 94, 426, 133, 186, 105, 107, 107, 68, 69, 70, + 104, 134, 136, 107, 108, 324, 77, 326, 352, 353, + 128, 355, 129, 129, 72, 127, 74, 197, 133, 136, + 232, 233, 234, 342, 136, 135, 345, 207, 133, 87, + 88, 350, 105, 137, 133, 129, 107, 136, 131, 71, + 131, 197, 107, 232, 233, 234, 78, 128, 80, 205, + 129, 207, 208, 166, 133, 8, 127, 128, 11, 129, + 133, 93, 175, 133, 130, 136, 136, 133, 100, 129, + 136, 103, 107, 133, 230, 110, 6, 109, 8, 129, + 9, 11, 238, 239, 240, 241, 242, 243, 85, 86, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 107, 424, 425, 110, 117, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 258, 464, 81, 82, 83, + 84, 470, 113, 333, 115, 499, 500, 501, 502, 503, + 504, 505, 506, 507, 81, 94, 83, 84, 73, 102, + 75, 71, 491, 89, 107, 104, 107, 333, 107, 108, + 80, 337, 115, 130, 11, 32, 33, 136, 121, 36, + 37, 129, 101, 93, 129, 11, 352, 353, 104, 355, + 100, 134, 129, 103, 113, 114, 115, 116, 137, 109, + 119, 120, 121, 107, 394, 90, 91, 92, 127, 129, + 36, 130, 129, 117, 8, 119, 129, 121, 122, 123, + 124, 3, 4, 5, 6, 8, 63, 9, 394, 11, + 129, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 11, 131, 132, 105, 619, 620, 130, 105, 598, + 107, 600, 131, 132, 107, 17, 131, 132, 8, 105, + 117, 107, 119, 129, 121, 122, 123, 124, 131, 132, + 127, 117, 107, 119, 129, 121, 122, 123, 124, 136, + 7, 127, 133, 10, 8, 12, 131, 132, 130, 638, + 130, 640, 641, 63, 36, 37, 38, 39, 40, 41, + 42, 63, 29, 30, 653, 32, 33, 36, 37, 36, + 37, 8, 661, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 85, 86, 107, 48, 49, 105, 105, 130, + 621, 621, 134, 130, 117, 105, 119, 107, 121, 122, + 123, 124, 128, 105, 127, 107, 101, 117, 129, 119, + 8, 121, 122, 123, 124, 8, 105, 127, 707, 121, + 122, 123, 124, 117, 105, 8, 136, 8, 133, 105, + 105, 133, 105, 105, 29, 30, 618, 32, 33, 130, + 136, 36, 37, 107, 594, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 121, 120, 121, 122, 123, + 124, 125, 130, 127, 129, 87, 105, 107, 594, 130, + 107, 621, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 131, 120, 121, 122, 123, 124, 125, 133, + 127, 132, 618, 619, 620, 621, 3, 4, 5, 6, + 135, 132, 9, 132, 11, 132, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 3, 4, 5, 6, - 105, 131, 9, 18, 11, 131, 13, 14, 15, 16, + 105, 18, 9, 18, 11, 109, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 3, 4, 5, 6, - 131, 131, 9, 18, 11, 109, 13, 14, 15, 16, + 105, 133, 9, 8, 11, 8, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 105, 3, 4, 5, - 6, 132, 128, 9, 8, 11, 133, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 3, 4, 5, - 6, 8, 105, 9, 129, 11, 133, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 129, 129, 3, - 4, 5, 6, 130, 131, 9, 129, 11, 129, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 129, - 3, 4, 5, 6, 129, 131, 9, 129, 11, 129, + 37, 38, 39, 40, 41, 42, 130, 130, 3, 4, + 5, 6, 130, 129, 9, 130, 11, 134, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 3, 4, + 5, 6, 130, 105, 9, 130, 11, 134, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 130, 130, + 3, 4, 5, 6, 131, 132, 9, 136, 11, 130, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 3, 4, 5, 6, 129, 131, 9, 129, 11, 129, + 3, 4, 5, 6, 130, 132, 9, 132, 11, 130, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 3, 4, 5, 6, 129, 131, 9, 131, 11, 129, + 3, 4, 5, 6, 130, 105, 9, 132, 11, 130, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 3, 4, 5, 6, 129, 129, 9, 130, 11, 129, + 3, 4, 5, 6, 130, 130, 9, 8, 11, 132, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 3, 4, 5, 6, 129, 135, 9, 130, 11, 8, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 3, 4, 5, 6, 8, 105, 9, 130, 11, 8, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 3, 4, 5, 6, 105, 105, 9, 130, 11, 105, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 3, 4, 5, 6, 105, 11, 9, 130, 11, 76, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 3, 4, 5, 6, 105, 105, 9, 130, 11, 105, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 3, 4, 5, 6, 128, 105, 9, 130, 11, 105, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 3, 4, 5, 6, 105, 133, 9, 130, 11, 109, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 3, 4, 5, 6, 105, 105, 9, 130, 11, 105, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 3, 4, 5, 6, 130, 105, 9, 130, 11, 105, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 3, 4, 5, 6, 8, 130, 9, 130, 11, 8, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 3, 4, 5, 6, 128, 131, 9, 130, 11, 128, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 3, 4, 5, 6, 129, 131, 9, 130, 11, 128, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 3, 4, 5, 6, 105, 130, 9, 130, 11, 130, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 3, 4, 5, 6, 128, 130, 9, 130, 11, 128, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 7, 8, 130, 10, 135, 12, 133, 130, 130, 8, - 8, 11, 8, 8, 131, 8, 8, 8, 8, 8, - 105, 105, 29, 30, 105, 32, 33, 105, 133, 36, - 37, 131, 131, 33, 8, 35, 36, 133, 133, 128, - 115, 115, 11, 43, 44, 45, 46, 130, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 63, 113, 114, 115, 116, 30, 30, - 119, 120, 121, 130, 130, 31, 8, 126, 11, 8, - 129, 31, 115, 142, 17, 128, 242, 618, 362, 511, - 463, 36, 334, -1, 63, 624, 29, -1, -1, -1, - -1, -1, -1, 36, -1, 105, -1, 107, -1, -1, - -1, -1, 112, -1, 17, -1, -1, 117, 118, 119, - -1, 121, 122, 123, -1, -1, 126, -1, -1, 129, - 63, 64, 65, 66, 67, -1, 105, -1, 107, -1, - -1, -1, -1, 11, -1, -1, -1, -1, 117, 17, - 119, -1, 121, 122, 123, 17, -1, 126, -1, -1, - 63, -1, 95, 96, 97, -1, 99, -1, 36, -1, - -1, -1, 105, -1, 107, -1, -1, -1, -1, 112, - -1, -1, -1, -1, 117, 118, 119, -1, 121, 122, - 123, 124, 33, 126, 127, 63, 64, 65, 66, 67, - -1, 63, 105, 44, 107, 113, 114, 115, 116, 117, - -1, 119, 120, 121, 122, 123, -1, -1, 121, 122, - 123, -1, -1, -1, -1, -1, -1, 95, 96, 97, - 98, 99, -1, -1, -1, -1, -1, 105, -1, 107, - -1, -1, -1, 105, 112, 107, -1, -1, -1, 117, - 118, 119, -1, 121, 122, 123, 124, -1, 126, 121, - 122, 123, -1, -1, -1, 106, -1, -1, -1, -1, - 132, -1, 113, 114, 115, 116, 117, -1, 119, 120, - 121, 122, 123, 3, 4, 5, 6, -1, 129, 9, - -1, 11, -1, 13, 14, 15, 16, 17, 18, 19, + 130, 3, 4, 5, 6, 130, 130, 9, 131, 11, + 8, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 3, 4, 5, 6, 8, 105, 9, 131, 11, + 105, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 3, 4, 5, 6, 105, 105, 9, 131, 11, + 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 76, 3, 4, 5, 6, 105, 105, 9, 131, + 11, 105, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 3, 4, 5, 6, 105, 105, 9, 131, + 11, 129, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 3, 4, 5, 6, 105, 134, 9, 131, + 11, 109, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 105, 3, 4, 5, 6, 105, 105, 9, + 131, 11, 131, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 3, 4, 5, 6, -1, - 8, 9, -1, 11, 64, 13, 14, 15, 16, 17, + 40, 41, 42, 3, 4, 5, 6, 105, 105, 9, + 131, 11, 8, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 3, 4, 5, 6, 8, 131, 9, + 131, 11, 129, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 129, 3, 4, 5, 6, 132, 130, + 9, 131, 11, 129, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 3, 4, 5, 6, 129, 132, + 9, 131, 11, 105, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 3, 4, 5, 6, 131, 131, + 9, 131, 11, 129, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 131, 3, 4, 5, 6, 131, + 136, 9, 131, 11, 134, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 3, 4, 5, 6, -1, - 8, 9, -1, 11, -1, 13, 14, 15, 16, 17, + 38, 39, 40, 41, 42, 3, 4, 5, 6, 8, + 131, 9, 131, 11, 8, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 3, 4, 5, 6, -1, - 8, 9, -1, 11, -1, 13, 14, 15, 16, 17, + 38, 39, 40, 41, 42, 3, 4, 5, 6, 8, + 132, 9, 131, 11, 8, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 3, 4, 5, 6, -1, - 8, 9, -1, 11, -1, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 3, 4, 5, 6, -1, - 8, 9, -1, 11, -1, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 3, 4, 5, 6, -1, - 8, 9, -1, 11, -1, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 3, 4, 5, 6, -1, - 8, 9, -1, 11, -1, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 3, 4, 5, 6, -1, - 8, 9, -1, 11, -1, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 3, 4, 5, 6, -1, + 38, 39, 40, 41, 42, 7, 8, 8, 10, 8, + 12, 8, 8, 131, 105, 8, 105, 11, 105, 105, + 134, 132, 132, 30, 30, 134, 8, 29, 30, 134, + 32, 33, 129, 115, 36, 37, 131, 131, 11, 33, + 115, 35, 36, 8, 8, 31, 31, 116, 244, 43, + 44, 45, 46, 131, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 143, 621, 7, 8, 365, 10, 514, 12, 466, 337, + 17, 36, 627, -1, -1, -1, -1, 11, -1, -1, + 63, 129, -1, 17, 29, 30, -1, 32, 33, -1, + -1, 36, 37, -1, -1, 29, -1, -1, -1, -1, + -1, 105, 36, 107, -1, -1, -1, -1, 112, -1, + -1, -1, -1, 117, 118, 119, 63, 121, 122, 123, + 124, -1, 105, 127, 107, -1, 130, -1, -1, 63, + 64, 65, 66, 67, 117, 33, 119, -1, 121, 122, + 123, 124, -1, 11, 127, -1, 44, -1, -1, 17, + -1, -1, -1, -1, -1, -1, -1, 17, 105, -1, + 107, 95, 96, 97, -1, 99, -1, -1, 36, -1, + -1, 105, -1, 107, 121, 122, 123, 124, 112, -1, + -1, -1, -1, 117, 118, 119, 133, 121, 122, 123, + 124, 125, -1, 127, 128, 63, 64, 65, 66, 67, + -1, -1, -1, 63, -1, -1, -1, -1, 106, -1, + -1, -1, -1, -1, -1, 113, 114, 115, 116, 117, + -1, 119, 120, 121, 122, 123, 124, 95, 96, 97, + 98, 99, 130, -1, -1, -1, -1, 105, -1, 107, + -1, -1, -1, -1, 112, 105, -1, 107, -1, 117, + 118, 119, -1, 121, 122, 123, 124, 125, -1, 127, + -1, 121, 122, 123, 124, 3, 4, 5, 6, -1, -1, 9, -1, 11, -1, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 4, 5, 6, -1, -1, - 9, -1, 11, -1, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 6, -1, -1, 9, -1, 11, - -1, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 9, -1, 11, -1, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 11, -1, 13, 14, 15, + 38, 39, 40, 41, 42, -1, -1, 113, 114, 115, + 116, -1, -1, 119, 120, 121, -1, 3, 4, 5, + 6, 127, 8, 9, 130, 11, 64, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 7, 8, -1, - 10, -1, 12, -1, -1, -1, 7, -1, -1, 10, - -1, 12, -1, -1, -1, -1, -1, -1, -1, 29, - 30, -1, 32, 33, -1, -1, 36, 37, 29, 30, - -1, 32, 33, -1, -1, 36, 37, 13, 14, 15, + 36, 37, 38, 39, 40, 41, 42, 3, 4, 5, + 6, -1, 8, 9, -1, 11, -1, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 101, -1, -1, - -1, 10, -1, 12, -1, -1, -1, -1, -1, 113, - 114, 115, 116, -1, -1, 119, 120, 121, -1, -1, - 29, 30, 126, 32, 33, 129, -1, 36, 37, 107, - -1, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, -1, 120, 121, 122, 123, 124, -1, 126, -1, - -1, -1, -1, -1, 107, 133, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, -1, 120, 121, 122, - 123, 124, -1, 126, -1, -1, -1, -1, -1, -1, - 133, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 36, 37, 38, 39, 40, 41, 42, 3, 4, 5, + 6, -1, 8, 9, -1, 11, -1, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 17, 18, 19, + 36, 37, 38, 39, 40, 41, 42, 3, 4, 5, + 6, -1, 8, 9, -1, 11, -1, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 3, 4, 5, + 6, -1, 8, 9, -1, 11, -1, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 3, 4, 5, + 6, -1, 8, 9, -1, 11, -1, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 3, 4, 5, + 6, -1, 8, 9, -1, 11, -1, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 3, 4, 5, + 6, -1, 8, 9, -1, 11, -1, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 3, 4, 5, + 6, -1, -1, 9, -1, 11, -1, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 4, 5, 6, + -1, -1, 9, -1, 11, -1, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 6, -1, -1, 9, + -1, 11, -1, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 12, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 29, 30, -1, 32, 33, -1, -1, 36, 37, 107, + 40, 41, 42, 9, -1, 11, -1, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 11, -1, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 107, -1, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, -1, 120, 121, 122, 123, 124, 107, 126, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, - 120, 121, 122, 123, 124, 107, 126, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, -1, 120, 121, - 122, 123, 124, -1, 126 + 118, -1, 120, 121, 122, 123, 124, 125, -1, 127, + -1, -1, -1, -1, -1, 107, 134, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 12, 120, 121, + 122, 123, 124, 125, 10, 127, 12, -1, -1, -1, + -1, -1, 134, -1, 29, 30, -1, 32, 33, -1, + -1, 36, 37, 29, 30, -1, 32, 33, -1, -1, + 36, 37, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 107, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, -1, 120, 121, 122, + 123, 124, 125, 107, 127, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, -1, 120, 121, 122, 123, + 124, 125, -1, 127, 107, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, -1, 120, 121, 122, + 123, 124, 125, -1, 127, 113, 114, 115, 116, 117, + -1, 119, 120, 121, 122, 123, 124, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { - 0, 68, 138, 141, 76, 0, 1, 68, 69, 70, - 77, 107, 126, 135, 139, 140, 142, 143, 144, 145, - 146, 149, 150, 151, 152, 155, 156, 157, 158, 159, - 160, 161, 162, 165, 167, 168, 169, 128, 8, 127, + 0, 68, 139, 142, 76, 0, 1, 68, 69, 70, + 77, 107, 127, 136, 140, 141, 143, 144, 145, 146, + 147, 150, 151, 152, 153, 156, 157, 158, 159, 160, + 161, 162, 163, 166, 168, 169, 170, 129, 8, 128, 71, 78, 80, 93, 100, 103, 109, 90, 91, 92, - 107, 107, 126, 163, 135, 135, 8, 107, 109, 110, + 107, 107, 127, 164, 136, 136, 8, 107, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 120, 121, - 122, 123, 124, 126, 147, 207, 8, 107, 148, 207, - 8, 72, 74, 87, 88, 68, 127, 139, 140, 134, - 9, 94, 104, 107, 108, 136, 194, 9, 94, 107, - 108, 136, 194, 85, 86, 107, 207, 128, 107, 207, - 107, 132, 197, 117, 107, 153, 154, 89, 113, 115, - 132, 201, 201, 201, 129, 135, 128, 81, 83, 84, - 128, 128, 81, 82, 83, 84, 128, 128, 128, 128, - 181, 182, 101, 113, 114, 115, 116, 119, 120, 121, - 126, 129, 171, 172, 173, 174, 175, 192, 104, 171, - 8, 8, 105, 129, 107, 198, 8, 128, 8, 154, - 128, 113, 115, 202, 132, 199, 33, 105, 132, 195, - 117, 132, 203, 107, 206, 164, 171, 129, 129, 129, - 129, 73, 75, 105, 105, 127, 11, 17, 36, 63, - 64, 65, 66, 67, 95, 96, 97, 98, 99, 105, - 107, 112, 117, 118, 119, 121, 122, 123, 124, 126, - 183, 185, 187, 188, 189, 190, 193, 173, 128, 171, - 6, 8, 11, 132, 176, 101, 14, 17, 18, 19, - 20, 128, 176, 8, 105, 107, 133, 207, 117, 63, - 105, 107, 113, 115, 133, 107, 200, 207, 8, 105, - 33, 105, 107, 196, 8, 107, 117, 204, 8, 130, - 131, 176, 105, 105, 105, 105, 107, 126, 135, 187, - 193, 107, 125, 132, 135, 63, 105, 107, 121, 122, - 123, 132, 186, 190, 132, 186, 8, 132, 33, 35, - 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 112, - 118, 129, 184, 185, 187, 193, 107, 193, 129, 187, - 11, 105, 107, 126, 185, 191, 193, 121, 135, 128, - 135, 129, 128, 129, 184, 129, 135, 128, 132, 33, - 44, 106, 129, 170, 192, 193, 130, 171, 171, 171, - 177, 79, 134, 166, 170, 170, 170, 170, 170, 170, - 166, 130, 132, 87, 107, 133, 207, 105, 33, 105, - 107, 133, 107, 117, 133, 107, 134, 131, 131, 131, - 131, 105, 18, 18, 109, 105, 132, 184, 8, 184, - 8, 184, 184, 184, 184, 184, 129, 129, 129, 129, - 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, - 129, 129, 129, 129, 184, 3, 4, 5, 6, 9, - 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 64, 184, 129, 132, 135, 8, 128, 135, 128, - 105, 131, 135, 187, 135, 107, 126, 189, 193, 8, - 8, 105, 184, 105, 184, 205, 184, 205, 128, 105, - 105, 184, 105, 170, 170, 170, 7, 10, 12, 29, - 30, 32, 33, 36, 37, 102, 107, 115, 121, 133, - 179, 180, 181, 76, 105, 128, 105, 105, 105, 105, - 105, 187, 133, 109, 133, 133, 133, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, - 184, 205, 184, 184, 205, 130, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 186, 188, 105, 105, 184, 105, 130, 107, - 110, 105, 105, 8, 8, 128, 130, 131, 8, 130, - 184, 130, 128, 8, 131, 130, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 129, 128, 128, 182, 29, - 127, 178, 128, 131, 105, 130, 130, 130, 130, 135, - 133, 8, 8, 8, 130, 131, 130, 131, 131, 130, + 122, 123, 124, 125, 127, 148, 208, 8, 107, 149, + 208, 8, 72, 74, 87, 88, 68, 128, 140, 141, + 135, 9, 94, 104, 107, 108, 137, 195, 9, 94, + 107, 108, 137, 195, 85, 86, 107, 208, 129, 107, + 208, 107, 133, 198, 117, 107, 154, 155, 89, 113, + 115, 133, 202, 202, 202, 130, 136, 129, 81, 83, + 84, 129, 129, 81, 82, 83, 84, 129, 129, 129, + 129, 182, 183, 101, 113, 114, 115, 116, 119, 120, + 121, 127, 130, 172, 173, 174, 175, 176, 193, 104, + 172, 8, 8, 105, 130, 107, 199, 8, 129, 8, + 155, 129, 113, 115, 203, 133, 200, 33, 105, 133, + 196, 117, 133, 204, 107, 207, 165, 172, 130, 130, + 130, 130, 73, 75, 105, 105, 128, 11, 17, 36, + 63, 64, 65, 66, 67, 95, 96, 97, 98, 99, + 105, 107, 112, 117, 118, 119, 121, 122, 123, 124, + 125, 127, 184, 186, 188, 189, 190, 191, 194, 174, + 129, 172, 6, 8, 11, 133, 177, 101, 14, 17, + 18, 19, 20, 129, 177, 8, 105, 107, 134, 208, + 117, 63, 105, 107, 113, 115, 134, 107, 201, 208, + 8, 105, 33, 105, 107, 197, 8, 107, 117, 205, + 8, 131, 132, 177, 105, 105, 105, 105, 107, 127, + 136, 188, 194, 107, 126, 133, 136, 63, 105, 107, + 121, 122, 123, 124, 133, 187, 191, 133, 187, 8, + 133, 33, 35, 43, 44, 45, 46, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 112, 118, 130, 185, 186, 188, 194, 107, + 194, 130, 188, 11, 105, 107, 127, 186, 192, 194, + 121, 136, 129, 136, 130, 129, 130, 185, 130, 136, + 129, 133, 33, 44, 106, 130, 171, 193, 194, 131, + 172, 172, 172, 178, 79, 135, 167, 171, 171, 171, + 171, 171, 171, 167, 131, 133, 87, 107, 134, 208, + 105, 33, 105, 107, 134, 107, 117, 134, 107, 135, + 132, 132, 132, 132, 105, 18, 18, 109, 105, 133, + 185, 8, 185, 8, 185, 185, 185, 185, 185, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, - 131, 130, 130, 8, 130, 131, 8, 8, 128, 8, - 8, 8, 187, 184, 8, 184, 8, 8, 105, 192, - 193, 170, 170, 127, 178, 107, 110, 85, 86, 105, - 197, 105, 184, 184, 184, 184, 105, 184, 8, 133, - 131, 131, 8, 8, 30, 30, 133, 8, 130, 130, - 130, 130, 133, 8, 128, 115, 115, 184, 130, 130, - 8, 8, 8 + 130, 130, 130, 130, 130, 130, 130, 185, 3, 4, + 5, 6, 9, 11, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 64, 185, 130, 133, 136, 8, + 129, 136, 129, 105, 132, 136, 188, 136, 107, 127, + 190, 194, 8, 8, 105, 185, 105, 185, 206, 185, + 206, 129, 105, 105, 185, 105, 171, 171, 171, 7, + 10, 12, 29, 30, 32, 33, 36, 37, 102, 107, + 115, 121, 134, 180, 181, 182, 76, 105, 129, 105, + 105, 105, 105, 105, 188, 134, 109, 134, 134, 134, + 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, + 185, 185, 185, 185, 206, 185, 185, 206, 131, 185, + 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, + 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, + 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, + 185, 185, 185, 185, 185, 187, 189, 105, 105, 185, + 105, 131, 107, 110, 105, 105, 8, 8, 129, 131, + 132, 8, 131, 185, 131, 129, 8, 132, 131, 171, + 171, 171, 171, 171, 171, 171, 171, 171, 130, 129, + 129, 183, 29, 128, 179, 129, 132, 105, 131, 131, + 131, 131, 136, 134, 8, 8, 8, 131, 132, 131, + 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 132, 131, 131, 8, 131, 132, 8, + 8, 129, 8, 8, 8, 188, 185, 8, 185, 8, + 8, 105, 193, 194, 171, 171, 128, 179, 107, 110, + 85, 86, 105, 198, 105, 185, 185, 185, 185, 105, + 185, 8, 134, 132, 132, 8, 8, 30, 30, 134, + 8, 131, 131, 131, 131, 134, 8, 129, 115, 115, + 185, 131, 131, 8, 8, 8 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 137, 138, 138, 138, 138, 139, 139, 139, 139, - 139, 139, 139, 139, 139, 139, 140, 140, 140, 140, - 141, 141, 142, 143, 144, 144, 144, 144, 144, 145, - 146, 146, 147, 147, 147, 147, 147, 148, 148, 148, - 148, 148, 148, 149, 150, 150, 150, 150, 150, 150, - 150, 151, 151, 152, 153, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 161, 161, 162, 163, 163, 163, - 164, 164, 165, 166, 166, 166, 167, 167, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 169, 169, 169, - 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 171, 171, 171, 171, - 172, 172, 173, 173, 174, 174, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 176, 176, 177, - 177, 177, 177, 177, 177, 178, 178, 179, 180, 180, - 181, 181, 181, 181, 181, 182, 182, 182, 182, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, + 0, 138, 139, 139, 139, 139, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, + 142, 142, 143, 144, 145, 145, 145, 145, 145, 146, + 147, 147, 148, 148, 148, 148, 148, 149, 149, 149, + 149, 149, 149, 150, 151, 151, 151, 151, 151, 151, + 151, 152, 152, 153, 154, 154, 155, 156, 157, 158, + 159, 160, 161, 162, 162, 162, 163, 164, 164, 164, + 165, 165, 166, 167, 167, 167, 168, 168, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, + 170, 171, 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 172, 172, 172, 172, + 173, 173, 174, 174, 175, 175, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 177, 177, 178, + 178, 178, 178, 178, 178, 179, 179, 180, 181, 181, + 182, 182, 182, 182, 182, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, - 185, 185, 185, 185, 186, 186, 186, 186, 186, 186, - 186, 186, 187, 187, 187, 187, 188, 188, 188, 188, - 188, 189, 189, 189, 190, 190, 191, 191, 191, 191, - 191, 191, 192, 192, 192, 192, 192, 193, 193, 193, - 193, 193, 194, 194, 195, 195, 195, 196, 196, 196, - 196, 196, 196, 197, 197, 198, 198, 198, 199, 200, - 200, 200, 200, 201, 201, 201, 202, 202, 202, 202, - 202, 203, 203, 204, 204, 204, 204, 205, 205, 205, - 206, 206, 206, 207, 207, 207, 207, 207, 207, 207, - 207, 207, 207, 207, 207, 207, 207, 207, 207 + 184, 184, 184, 184, 185, 185, 185, 185, 185, 185, + 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, + 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, + 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, + 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, + 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, + 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, + 186, 186, 186, 186, 187, 187, 187, 187, 187, 187, + 187, 187, 187, 188, 188, 188, 188, 189, 189, 189, + 189, 189, 190, 190, 190, 191, 191, 192, 192, 192, + 192, 192, 192, 193, 193, 193, 193, 193, 194, 194, + 194, 194, 194, 194, 195, 195, 196, 196, 196, 197, + 197, 197, 197, 197, 197, 198, 198, 199, 199, 199, + 200, 201, 201, 201, 201, 202, 202, 202, 203, 203, + 203, 203, 203, 204, 204, 205, 205, 205, 205, 206, + 206, 206, 207, 207, 207, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1599,16 +1595,17 @@ static const yytype_uint8 yyr2[] = 3, 3, 3, 3, 3, 3, 2, 4, 4, 4, 4, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, 6, 4, 4, 3, 6, 1, 4, 4, - 6, 4, 3, 1, 1, 1, 1, 1, 1, 4, - 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, - 4, 1, 1, 1, 3, 3, 1, 2, 4, 3, + 6, 4, 3, 1, 1, 1, 1, 1, 1, 1, + 4, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 2, 4, 1, 1, 1, 3, 3, 1, 2, 4, + 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 3, 1, 2, 1, + 2, 1, 2, 3, 2, 3, 1, 1, 2, 2, + 3, 1, 1, 2, 2, 3, 1, 1, 1, 1, + 2, 2, 2, 3, 1, 1, 1, 2, 2, 0, + 1, 3, 0, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 3, 1, 2, 1, 2, 1, - 2, 3, 2, 3, 1, 1, 2, 2, 3, 1, - 1, 2, 2, 3, 1, 1, 1, 1, 2, 2, - 2, 3, 1, 1, 1, 2, 2, 0, 1, 3, - 0, 1, 3, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1 + 1, 1 }; @@ -2285,1877 +2282,1895 @@ yyreduce: switch (yyn) { case 19: -#line 175 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 177 "slghparse.y" /* yacc.c:1646 */ { slgh->resetConstructors(); } -#line 2276 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2273 "slghparse.cc" /* yacc.c:1646 */ break; case 20: -#line 177 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 179 "slghparse.y" /* yacc.c:1646 */ { slgh->setEndian(1); } -#line 2282 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2279 "slghparse.cc" /* yacc.c:1646 */ break; case 21: -#line 178 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 180 "slghparse.y" /* yacc.c:1646 */ { slgh->setEndian(0); } -#line 2288 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2285 "slghparse.cc" /* yacc.c:1646 */ break; case 22: -#line 180 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 182 "slghparse.y" /* yacc.c:1646 */ { slgh->setAlignment(*(yyvsp[-1].i)); delete (yyvsp[-1].i); } -#line 2294 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2291 "slghparse.cc" /* yacc.c:1646 */ break; case 23: -#line 182 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 184 "slghparse.y" /* yacc.c:1646 */ {} -#line 2300 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2297 "slghparse.cc" /* yacc.c:1646 */ break; case 24: -#line 184 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 186 "slghparse.y" /* yacc.c:1646 */ { (yyval.tokensym) = slgh->defineToken((yyvsp[-3].str),(yyvsp[-1].i),0); } -#line 2306 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2303 "slghparse.cc" /* yacc.c:1646 */ break; case 25: -#line 185 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 187 "slghparse.y" /* yacc.c:1646 */ { (yyval.tokensym) = slgh->defineToken((yyvsp[-6].str),(yyvsp[-4].i),-1); } -#line 2312 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2309 "slghparse.cc" /* yacc.c:1646 */ break; case 26: -#line 186 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 188 "slghparse.y" /* yacc.c:1646 */ { (yyval.tokensym) = slgh->defineToken((yyvsp[-6].str),(yyvsp[-4].i),1); } -#line 2318 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2315 "slghparse.cc" /* yacc.c:1646 */ break; case 27: -#line 187 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 189 "slghparse.y" /* yacc.c:1646 */ { (yyval.tokensym) = (yyvsp[-1].tokensym); slgh->addTokenField((yyvsp[-1].tokensym),(yyvsp[0].fieldqual)); } -#line 2324 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2321 "slghparse.cc" /* yacc.c:1646 */ break; case 28: -#line 188 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 190 "slghparse.y" /* yacc.c:1646 */ { string errmsg=(yyvsp[0].anysym)->getName()+": redefined as a token"; yyerror(errmsg.c_str()); YYERROR; } -#line 2330 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2327 "slghparse.cc" /* yacc.c:1646 */ break; case 29: -#line 190 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 192 "slghparse.y" /* yacc.c:1646 */ {} -#line 2336 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2333 "slghparse.cc" /* yacc.c:1646 */ break; case 30: -#line 192 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 194 "slghparse.y" /* yacc.c:1646 */ { (yyval.varsym) = (yyvsp[0].varsym); } -#line 2342 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2339 "slghparse.cc" /* yacc.c:1646 */ break; case 31: -#line 193 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 195 "slghparse.y" /* yacc.c:1646 */ { (yyval.varsym) = (yyvsp[-1].varsym); if (!slgh->addContextField( (yyvsp[-1].varsym), (yyvsp[0].fieldqual) )) { yyerror("All context definitions must come before constructors"); YYERROR; } } -#line 2349 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2346 "slghparse.cc" /* yacc.c:1646 */ break; case 32: -#line 196 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 198 "slghparse.y" /* yacc.c:1646 */ { (yyval.fieldqual) = new FieldQuality((yyvsp[-6].str),(yyvsp[-3].i),(yyvsp[-1].i)); } -#line 2355 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2352 "slghparse.cc" /* yacc.c:1646 */ break; case 33: -#line 197 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 199 "slghparse.y" /* yacc.c:1646 */ { delete (yyvsp[-3].i); delete (yyvsp[-1].i); string errmsg = (yyvsp[-6].anysym)->getName()+": redefined as field"; yyerror(errmsg.c_str()); YYERROR; } -#line 2361 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2358 "slghparse.cc" /* yacc.c:1646 */ break; case 34: -#line 198 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 200 "slghparse.y" /* yacc.c:1646 */ { (yyval.fieldqual) = (yyvsp[-1].fieldqual); (yyval.fieldqual)->signext = true; } -#line 2367 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2364 "slghparse.cc" /* yacc.c:1646 */ break; case 35: -#line 199 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 201 "slghparse.y" /* yacc.c:1646 */ { (yyval.fieldqual) = (yyvsp[-1].fieldqual); (yyval.fieldqual)->hex = true; } -#line 2373 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2370 "slghparse.cc" /* yacc.c:1646 */ break; case 36: -#line 200 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 202 "slghparse.y" /* yacc.c:1646 */ { (yyval.fieldqual) = (yyvsp[-1].fieldqual); (yyval.fieldqual)->hex = false; } -#line 2379 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2376 "slghparse.cc" /* yacc.c:1646 */ break; case 37: -#line 202 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 204 "slghparse.y" /* yacc.c:1646 */ { (yyval.fieldqual) = new FieldQuality((yyvsp[-6].str),(yyvsp[-3].i),(yyvsp[-1].i)); } -#line 2385 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2382 "slghparse.cc" /* yacc.c:1646 */ break; case 38: -#line 203 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 205 "slghparse.y" /* yacc.c:1646 */ { delete (yyvsp[-3].i); delete (yyvsp[-1].i); string errmsg = (yyvsp[-6].anysym)->getName()+": redefined as field"; yyerror(errmsg.c_str()); YYERROR; } -#line 2391 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2388 "slghparse.cc" /* yacc.c:1646 */ break; case 39: -#line 204 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 206 "slghparse.y" /* yacc.c:1646 */ { (yyval.fieldqual) = (yyvsp[-1].fieldqual); (yyval.fieldqual)->signext = true; } -#line 2397 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2394 "slghparse.cc" /* yacc.c:1646 */ break; case 40: -#line 205 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 207 "slghparse.y" /* yacc.c:1646 */ { (yyval.fieldqual) = (yyvsp[-1].fieldqual); (yyval.fieldqual)->flow = false; } -#line 2403 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2400 "slghparse.cc" /* yacc.c:1646 */ break; case 41: -#line 206 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 208 "slghparse.y" /* yacc.c:1646 */ { (yyval.fieldqual) = (yyvsp[-1].fieldqual); (yyval.fieldqual)->hex = true; } -#line 2409 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2406 "slghparse.cc" /* yacc.c:1646 */ break; case 42: -#line 207 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 209 "slghparse.y" /* yacc.c:1646 */ { (yyval.fieldqual) = (yyvsp[-1].fieldqual); (yyval.fieldqual)->hex = false; } -#line 2415 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2412 "slghparse.cc" /* yacc.c:1646 */ break; case 43: -#line 209 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 211 "slghparse.y" /* yacc.c:1646 */ { slgh->newSpace((yyvsp[-1].spacequal)); } -#line 2421 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2418 "slghparse.cc" /* yacc.c:1646 */ break; case 44: -#line 211 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 213 "slghparse.y" /* yacc.c:1646 */ { (yyval.spacequal) = new SpaceQuality(*(yyvsp[0].str)); delete (yyvsp[0].str); } -#line 2427 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2424 "slghparse.cc" /* yacc.c:1646 */ break; case 45: -#line 212 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 214 "slghparse.y" /* yacc.c:1646 */ { string errmsg = (yyvsp[0].anysym)->getName()+": redefined as space"; yyerror(errmsg.c_str()); YYERROR; } -#line 2433 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2430 "slghparse.cc" /* yacc.c:1646 */ break; case 46: -#line 213 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 215 "slghparse.y" /* yacc.c:1646 */ { (yyval.spacequal) = (yyvsp[-3].spacequal); (yyval.spacequal)->type = SpaceQuality::ramtype; } -#line 2439 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2436 "slghparse.cc" /* yacc.c:1646 */ break; case 47: -#line 214 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 216 "slghparse.y" /* yacc.c:1646 */ { (yyval.spacequal) = (yyvsp[-3].spacequal); (yyval.spacequal)->type = SpaceQuality::registertype; } -#line 2445 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2442 "slghparse.cc" /* yacc.c:1646 */ break; case 48: -#line 215 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 217 "slghparse.y" /* yacc.c:1646 */ { (yyval.spacequal) = (yyvsp[-3].spacequal); (yyval.spacequal)->size = *(yyvsp[0].i); delete (yyvsp[0].i); } -#line 2451 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2448 "slghparse.cc" /* yacc.c:1646 */ break; case 49: -#line 216 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 218 "slghparse.y" /* yacc.c:1646 */ { (yyval.spacequal) = (yyvsp[-3].spacequal); (yyval.spacequal)->wordsize = *(yyvsp[0].i); delete (yyvsp[0].i); } -#line 2457 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2454 "slghparse.cc" /* yacc.c:1646 */ break; case 50: -#line 217 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 219 "slghparse.y" /* yacc.c:1646 */ { (yyval.spacequal) = (yyvsp[-1].spacequal); (yyval.spacequal)->isdefault = true; } -#line 2463 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2460 "slghparse.cc" /* yacc.c:1646 */ break; case 51: -#line 219 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 221 "slghparse.y" /* yacc.c:1646 */ { slgh->defineVarnodes((yyvsp[-8].spacesym),(yyvsp[-5].i),(yyvsp[-2].i),(yyvsp[-1].strlist)); } -#line 2470 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2467 "slghparse.cc" /* yacc.c:1646 */ break; case 52: -#line 221 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 223 "slghparse.y" /* yacc.c:1646 */ { yyerror("Parsed integer is too big (overflow)"); YYERROR; } -#line 2476 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2473 "slghparse.cc" /* yacc.c:1646 */ break; case 56: -#line 228 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 230 "slghparse.y" /* yacc.c:1646 */ { slgh->defineBitrange((yyvsp[-7].str),(yyvsp[-5].varsym),(uint4)*(yyvsp[-3].i),(uint4)*(yyvsp[-1].i)); delete (yyvsp[-3].i); delete (yyvsp[-1].i); } -#line 2483 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2480 "slghparse.cc" /* yacc.c:1646 */ break; case 57: -#line 231 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 233 "slghparse.y" /* yacc.c:1646 */ { slgh->addUserOp((yyvsp[-1].strlist)); } -#line 2489 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2486 "slghparse.cc" /* yacc.c:1646 */ break; case 58: -#line 233 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 235 "slghparse.y" /* yacc.c:1646 */ { slgh->attachValues((yyvsp[-2].symlist),(yyvsp[-1].biglist)); } -#line 2495 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2492 "slghparse.cc" /* yacc.c:1646 */ break; case 59: -#line 235 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 237 "slghparse.y" /* yacc.c:1646 */ { slgh->attachNames((yyvsp[-2].symlist),(yyvsp[-1].strlist)); } -#line 2501 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2498 "slghparse.cc" /* yacc.c:1646 */ break; case 60: -#line 237 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 239 "slghparse.y" /* yacc.c:1646 */ { slgh->attachVarnodes((yyvsp[-2].symlist),(yyvsp[-1].symlist)); } -#line 2507 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2504 "slghparse.cc" /* yacc.c:1646 */ break; case 61: -#line 239 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 241 "slghparse.y" /* yacc.c:1646 */ { slgh->buildMacro((yyvsp[-3].macrosym),(yyvsp[-1].sem)); } -#line 2513 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2510 "slghparse.cc" /* yacc.c:1646 */ break; case 62: -#line 242 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 244 "slghparse.y" /* yacc.c:1646 */ { slgh->pushWith((yyvsp[-4].subtablesym),(yyvsp[-2].pateq),(yyvsp[-1].contop)); } -#line 2519 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2516 "slghparse.cc" /* yacc.c:1646 */ break; case 66: -#line 248 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 250 "slghparse.y" /* yacc.c:1646 */ { slgh->popWith(); } -#line 2525 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2522 "slghparse.cc" /* yacc.c:1646 */ break; case 67: -#line 250 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 252 "slghparse.y" /* yacc.c:1646 */ { (yyval.subtablesym) = (SubtableSymbol *)0; } -#line 2531 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2528 "slghparse.cc" /* yacc.c:1646 */ break; case 68: -#line 251 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 253 "slghparse.y" /* yacc.c:1646 */ { (yyval.subtablesym) = (yyvsp[0].subtablesym); } -#line 2537 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2534 "slghparse.cc" /* yacc.c:1646 */ break; case 69: -#line 252 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 254 "slghparse.y" /* yacc.c:1646 */ { (yyval.subtablesym) = slgh->newTable((yyvsp[0].str)); } -#line 2543 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2540 "slghparse.cc" /* yacc.c:1646 */ break; case 70: -#line 255 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 257 "slghparse.y" /* yacc.c:1646 */ { (yyval.pateq) = (PatternEquation *)0; } -#line 2549 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2546 "slghparse.cc" /* yacc.c:1646 */ break; case 71: -#line 256 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 258 "slghparse.y" /* yacc.c:1646 */ { (yyval.pateq) = (yyvsp[0].pateq); } -#line 2555 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2552 "slghparse.cc" /* yacc.c:1646 */ break; case 72: -#line 259 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 261 "slghparse.y" /* yacc.c:1646 */ { (yyval.macrosym) = slgh->createMacro((yyvsp[-3].str),(yyvsp[-1].strlist)); } -#line 2561 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2558 "slghparse.cc" /* yacc.c:1646 */ break; case 73: -#line 261 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 263 "slghparse.y" /* yacc.c:1646 */ { (yyval.sectionstart) = slgh->standaloneSection((yyvsp[-1].sem)); } -#line 2567 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2564 "slghparse.cc" /* yacc.c:1646 */ break; case 74: -#line 262 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 264 "slghparse.y" /* yacc.c:1646 */ { (yyval.sectionstart) = slgh->finalNamedSection((yyvsp[-2].sectionstart),(yyvsp[-1].sem)); } -#line 2573 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2570 "slghparse.cc" /* yacc.c:1646 */ break; case 75: -#line 263 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 265 "slghparse.y" /* yacc.c:1646 */ { (yyval.sectionstart) = (SectionVector *)0; } -#line 2579 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2576 "slghparse.cc" /* yacc.c:1646 */ break; case 76: -#line 265 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 267 "slghparse.y" /* yacc.c:1646 */ { slgh->buildConstructor((yyvsp[-4].construct),(yyvsp[-2].pateq),(yyvsp[-1].contop),(yyvsp[0].sectionstart)); } -#line 2585 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2582 "slghparse.cc" /* yacc.c:1646 */ break; case 77: -#line 266 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 268 "slghparse.y" /* yacc.c:1646 */ { slgh->buildConstructor((yyvsp[-4].construct),(yyvsp[-2].pateq),(yyvsp[-1].contop),(yyvsp[0].sectionstart)); } -#line 2591 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2588 "slghparse.cc" /* yacc.c:1646 */ break; case 78: -#line 268 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 270 "slghparse.y" /* yacc.c:1646 */ { (yyval.construct) = (yyvsp[-1].construct); (yyval.construct)->addSyntax(*(yyvsp[0].str)); delete (yyvsp[0].str); } -#line 2597 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2594 "slghparse.cc" /* yacc.c:1646 */ break; case 79: -#line 269 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 271 "slghparse.y" /* yacc.c:1646 */ { (yyval.construct) = (yyvsp[-1].construct); (yyval.construct)->addSyntax(*(yyvsp[0].str)); delete (yyvsp[0].str); } -#line 2603 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2600 "slghparse.cc" /* yacc.c:1646 */ break; case 80: -#line 270 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 272 "slghparse.y" /* yacc.c:1646 */ { (yyval.construct) = (yyvsp[-1].construct); if (slgh->isInRoot((yyvsp[-1].construct))) { (yyval.construct)->addSyntax(*(yyvsp[0].str)); delete (yyvsp[0].str); } else slgh->newOperand((yyvsp[-1].construct),(yyvsp[0].str)); } -#line 2609 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2606 "slghparse.cc" /* yacc.c:1646 */ break; case 81: -#line 271 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 273 "slghparse.y" /* yacc.c:1646 */ { (yyval.construct) = (yyvsp[-1].construct); if (!slgh->isInRoot((yyvsp[-1].construct))) { yyerror("Unexpected '^' at start of print pieces"); YYERROR; } } -#line 2615 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2612 "slghparse.cc" /* yacc.c:1646 */ break; case 82: -#line 272 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 274 "slghparse.y" /* yacc.c:1646 */ { (yyval.construct) = (yyvsp[-1].construct); } -#line 2621 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2618 "slghparse.cc" /* yacc.c:1646 */ break; case 83: -#line 273 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 275 "slghparse.y" /* yacc.c:1646 */ { (yyval.construct) = (yyvsp[-1].construct); (yyval.construct)->addSyntax(*(yyvsp[0].str)); delete (yyvsp[0].str); } -#line 2627 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2624 "slghparse.cc" /* yacc.c:1646 */ break; case 84: -#line 274 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 276 "slghparse.y" /* yacc.c:1646 */ { (yyval.construct) = (yyvsp[-1].construct); (yyval.construct)->addSyntax(*(yyvsp[0].str)); delete (yyvsp[0].str); } -#line 2633 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2630 "slghparse.cc" /* yacc.c:1646 */ break; case 85: -#line 275 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 277 "slghparse.y" /* yacc.c:1646 */ { (yyval.construct) = (yyvsp[-1].construct); (yyval.construct)->addSyntax(string(" ")); } -#line 2639 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2636 "slghparse.cc" /* yacc.c:1646 */ break; case 86: -#line 276 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 278 "slghparse.y" /* yacc.c:1646 */ { (yyval.construct) = (yyvsp[-1].construct); slgh->newOperand((yyvsp[-1].construct),(yyvsp[0].str)); } -#line 2645 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2642 "slghparse.cc" /* yacc.c:1646 */ break; case 87: -#line 278 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 280 "slghparse.y" /* yacc.c:1646 */ { (yyval.construct) = slgh->createConstructor((yyvsp[-1].subtablesym)); } -#line 2651 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2648 "slghparse.cc" /* yacc.c:1646 */ break; case 88: -#line 279 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 281 "slghparse.y" /* yacc.c:1646 */ { SubtableSymbol *sym=slgh->newTable((yyvsp[-1].str)); (yyval.construct) = slgh->createConstructor(sym); } -#line 2657 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2654 "slghparse.cc" /* yacc.c:1646 */ break; case 89: -#line 280 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 282 "slghparse.y" /* yacc.c:1646 */ { (yyval.construct) = slgh->createConstructor((SubtableSymbol *)0); } -#line 2663 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2660 "slghparse.cc" /* yacc.c:1646 */ break; case 90: -#line 281 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 283 "slghparse.y" /* yacc.c:1646 */ { (yyval.construct) = (yyvsp[-1].construct); } -#line 2669 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2666 "slghparse.cc" /* yacc.c:1646 */ break; case 91: -#line 283 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 285 "slghparse.y" /* yacc.c:1646 */ { (yyval.patexp) = new ConstantValue(*(yyvsp[0].big)); delete (yyvsp[0].big); } -#line 2675 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2672 "slghparse.cc" /* yacc.c:1646 */ break; case 92: -#line 285 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 287 "slghparse.y" /* yacc.c:1646 */ { if ((actionon==1)&&((yyvsp[0].famsym)->getType() != SleighSymbol::context_symbol)) { string errmsg="Global symbol "+(yyvsp[0].famsym)->getName(); errmsg += " is not allowed in action expression"; yyerror(errmsg.c_str()); } (yyval.patexp) = (yyvsp[0].famsym)->getPatternValue(); } -#line 2682 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2679 "slghparse.cc" /* yacc.c:1646 */ break; case 93: -#line 288 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 290 "slghparse.y" /* yacc.c:1646 */ { (yyval.patexp) = (yyvsp[0].specsym)->getPatternExpression(); } -#line 2688 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2685 "slghparse.cc" /* yacc.c:1646 */ break; case 94: -#line 289 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 291 "slghparse.y" /* yacc.c:1646 */ { (yyval.patexp) = (yyvsp[-1].patexp); } -#line 2694 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2691 "slghparse.cc" /* yacc.c:1646 */ break; case 95: -#line 290 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 292 "slghparse.y" /* yacc.c:1646 */ { (yyval.patexp) = new PlusExpression((yyvsp[-2].patexp),(yyvsp[0].patexp)); } -#line 2700 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2697 "slghparse.cc" /* yacc.c:1646 */ break; case 96: -#line 291 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 293 "slghparse.y" /* yacc.c:1646 */ { (yyval.patexp) = new SubExpression((yyvsp[-2].patexp),(yyvsp[0].patexp)); } -#line 2706 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2703 "slghparse.cc" /* yacc.c:1646 */ break; case 97: -#line 292 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 294 "slghparse.y" /* yacc.c:1646 */ { (yyval.patexp) = new MultExpression((yyvsp[-2].patexp),(yyvsp[0].patexp)); } -#line 2712 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2709 "slghparse.cc" /* yacc.c:1646 */ break; case 98: -#line 293 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 295 "slghparse.y" /* yacc.c:1646 */ { (yyval.patexp) = new LeftShiftExpression((yyvsp[-2].patexp),(yyvsp[0].patexp)); } -#line 2718 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2715 "slghparse.cc" /* yacc.c:1646 */ break; case 99: -#line 294 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 296 "slghparse.y" /* yacc.c:1646 */ { (yyval.patexp) = new RightShiftExpression((yyvsp[-2].patexp),(yyvsp[0].patexp)); } -#line 2724 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2721 "slghparse.cc" /* yacc.c:1646 */ break; case 100: -#line 295 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 297 "slghparse.y" /* yacc.c:1646 */ { (yyval.patexp) = new AndExpression((yyvsp[-2].patexp),(yyvsp[0].patexp)); } -#line 2730 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2727 "slghparse.cc" /* yacc.c:1646 */ break; case 101: -#line 296 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 298 "slghparse.y" /* yacc.c:1646 */ { (yyval.patexp) = new OrExpression((yyvsp[-2].patexp),(yyvsp[0].patexp)); } -#line 2736 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2733 "slghparse.cc" /* yacc.c:1646 */ break; case 102: -#line 297 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 299 "slghparse.y" /* yacc.c:1646 */ { (yyval.patexp) = new XorExpression((yyvsp[-2].patexp),(yyvsp[0].patexp)); } -#line 2742 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2739 "slghparse.cc" /* yacc.c:1646 */ break; case 103: -#line 298 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 300 "slghparse.y" /* yacc.c:1646 */ { (yyval.patexp) = new DivExpression((yyvsp[-2].patexp),(yyvsp[0].patexp)); } -#line 2748 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2745 "slghparse.cc" /* yacc.c:1646 */ break; case 104: -#line 299 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 301 "slghparse.y" /* yacc.c:1646 */ { (yyval.patexp) = new MinusExpression((yyvsp[0].patexp)); } -#line 2754 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2751 "slghparse.cc" /* yacc.c:1646 */ break; case 105: -#line 300 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 302 "slghparse.y" /* yacc.c:1646 */ { (yyval.patexp) = new NotExpression((yyvsp[0].patexp)); } -#line 2760 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2757 "slghparse.cc" /* yacc.c:1646 */ break; case 107: -#line 303 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 305 "slghparse.y" /* yacc.c:1646 */ { (yyval.pateq) = new EquationAnd((yyvsp[-2].pateq),(yyvsp[0].pateq)); } -#line 2766 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2763 "slghparse.cc" /* yacc.c:1646 */ break; case 108: -#line 304 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 306 "slghparse.y" /* yacc.c:1646 */ { (yyval.pateq) = new EquationOr((yyvsp[-2].pateq),(yyvsp[0].pateq)); } -#line 2772 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2769 "slghparse.cc" /* yacc.c:1646 */ break; case 109: -#line 305 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 307 "slghparse.y" /* yacc.c:1646 */ { (yyval.pateq) = new EquationCat((yyvsp[-2].pateq),(yyvsp[0].pateq)); } -#line 2778 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2775 "slghparse.cc" /* yacc.c:1646 */ break; case 110: -#line 307 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 309 "slghparse.y" /* yacc.c:1646 */ { (yyval.pateq) = new EquationLeftEllipsis((yyvsp[0].pateq)); } -#line 2784 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2781 "slghparse.cc" /* yacc.c:1646 */ break; case 112: -#line 310 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 312 "slghparse.y" /* yacc.c:1646 */ { (yyval.pateq) = new EquationRightEllipsis((yyvsp[-1].pateq)); } -#line 2790 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2787 "slghparse.cc" /* yacc.c:1646 */ break; case 115: -#line 314 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 316 "slghparse.y" /* yacc.c:1646 */ { (yyval.pateq) = (yyvsp[-1].pateq); } -#line 2796 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2793 "slghparse.cc" /* yacc.c:1646 */ break; case 116: -#line 316 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 318 "slghparse.y" /* yacc.c:1646 */ { (yyval.pateq) = new EqualEquation((yyvsp[-2].famsym)->getPatternValue(),(yyvsp[0].patexp)); } -#line 2802 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2799 "slghparse.cc" /* yacc.c:1646 */ break; case 117: -#line 317 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 319 "slghparse.y" /* yacc.c:1646 */ { (yyval.pateq) = new NotEqualEquation((yyvsp[-2].famsym)->getPatternValue(),(yyvsp[0].patexp)); } -#line 2808 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2805 "slghparse.cc" /* yacc.c:1646 */ break; case 118: -#line 318 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 320 "slghparse.y" /* yacc.c:1646 */ { (yyval.pateq) = new LessEquation((yyvsp[-2].famsym)->getPatternValue(),(yyvsp[0].patexp)); } -#line 2814 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2811 "slghparse.cc" /* yacc.c:1646 */ break; case 119: -#line 319 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 321 "slghparse.y" /* yacc.c:1646 */ { (yyval.pateq) = new LessEqualEquation((yyvsp[-2].famsym)->getPatternValue(),(yyvsp[0].patexp)); } -#line 2820 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2817 "slghparse.cc" /* yacc.c:1646 */ break; case 120: -#line 320 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 322 "slghparse.y" /* yacc.c:1646 */ { (yyval.pateq) = new GreaterEquation((yyvsp[-2].famsym)->getPatternValue(),(yyvsp[0].patexp)); } -#line 2826 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2823 "slghparse.cc" /* yacc.c:1646 */ break; case 121: -#line 321 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 323 "slghparse.y" /* yacc.c:1646 */ { (yyval.pateq) = new GreaterEqualEquation((yyvsp[-2].famsym)->getPatternValue(),(yyvsp[0].patexp)); } -#line 2832 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2829 "slghparse.cc" /* yacc.c:1646 */ break; case 122: -#line 322 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 324 "slghparse.y" /* yacc.c:1646 */ { (yyval.pateq) = slgh->constrainOperand((yyvsp[-2].operandsym),(yyvsp[0].patexp)); if ((yyval.pateq) == (PatternEquation *)0) { string errmsg="Constraining currently undefined operand "+(yyvsp[-2].operandsym)->getName(); yyerror(errmsg.c_str()); } } -#line 2840 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2837 "slghparse.cc" /* yacc.c:1646 */ break; case 123: -#line 325 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 327 "slghparse.y" /* yacc.c:1646 */ { (yyval.pateq) = new OperandEquation((yyvsp[0].operandsym)->getIndex()); slgh->selfDefine((yyvsp[0].operandsym)); } -#line 2846 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2843 "slghparse.cc" /* yacc.c:1646 */ break; case 124: -#line 326 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 328 "slghparse.y" /* yacc.c:1646 */ { (yyval.pateq) = new UnconstrainedEquation((yyvsp[0].specsym)->getPatternExpression()); } -#line 2852 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2849 "slghparse.cc" /* yacc.c:1646 */ break; case 125: -#line 327 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 329 "slghparse.y" /* yacc.c:1646 */ { (yyval.pateq) = slgh->defineInvisibleOperand((yyvsp[0].famsym)); } -#line 2858 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2855 "slghparse.cc" /* yacc.c:1646 */ break; case 126: -#line 328 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 330 "slghparse.y" /* yacc.c:1646 */ { (yyval.pateq) = slgh->defineInvisibleOperand((yyvsp[0].subtablesym)); } -#line 2864 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2861 "slghparse.cc" /* yacc.c:1646 */ break; case 127: -#line 330 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 332 "slghparse.y" /* yacc.c:1646 */ { (yyval.contop) = (vector *)0; } -#line 2870 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2867 "slghparse.cc" /* yacc.c:1646 */ break; case 128: -#line 331 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 333 "slghparse.y" /* yacc.c:1646 */ { (yyval.contop) = (yyvsp[-1].contop); } -#line 2876 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2873 "slghparse.cc" /* yacc.c:1646 */ break; case 129: -#line 333 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 335 "slghparse.y" /* yacc.c:1646 */ { (yyval.contop) = new vector; } -#line 2882 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2879 "slghparse.cc" /* yacc.c:1646 */ break; case 130: -#line 334 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.contop) = (yyvsp[-4].contop); if (!slgh->contextMod((yyvsp[-4].contop),(yyvsp[-3].contextsym),(yyvsp[-1].patexp))) { string errmsg="Cannot use 'inst_next' to set context variable: "+(yyvsp[-3].contextsym)->getName(); yyerror(errmsg.c_str()); YYERROR; } } -#line 2888 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 336 "slghparse.y" /* yacc.c:1646 */ + { (yyval.contop) = (yyvsp[-4].contop); if (!slgh->contextMod((yyvsp[-4].contop),(yyvsp[-3].contextsym),(yyvsp[-1].patexp))) { string errmsg="Cannot use 'inst_next' or 'inst_next2' to set context variable: "+(yyvsp[-3].contextsym)->getName(); yyerror(errmsg.c_str()); YYERROR; } } +#line 2885 "slghparse.cc" /* yacc.c:1646 */ break; case 131: -#line 335 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 337 "slghparse.y" /* yacc.c:1646 */ { (yyval.contop) = (yyvsp[-7].contop); slgh->contextSet((yyvsp[-7].contop),(yyvsp[-4].famsym),(yyvsp[-2].contextsym)); } -#line 2894 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2891 "slghparse.cc" /* yacc.c:1646 */ break; case 132: -#line 336 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 338 "slghparse.y" /* yacc.c:1646 */ { (yyval.contop) = (yyvsp[-7].contop); slgh->contextSet((yyvsp[-7].contop),(yyvsp[-4].specsym),(yyvsp[-2].contextsym)); } -#line 2900 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2897 "slghparse.cc" /* yacc.c:1646 */ break; case 133: -#line 337 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 339 "slghparse.y" /* yacc.c:1646 */ { (yyval.contop) = (yyvsp[-4].contop); slgh->defineOperand((yyvsp[-3].operandsym),(yyvsp[-1].patexp)); } -#line 2906 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2903 "slghparse.cc" /* yacc.c:1646 */ break; case 134: -#line 338 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 340 "slghparse.y" /* yacc.c:1646 */ { string errmsg="Expecting context symbol, not "+*(yyvsp[0].str); delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } -#line 2912 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2909 "slghparse.cc" /* yacc.c:1646 */ break; case 135: -#line 340 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 342 "slghparse.y" /* yacc.c:1646 */ { (yyval.sectionsym) = slgh->newSectionSymbol( *(yyvsp[-1].str) ); delete (yyvsp[-1].str); } -#line 2918 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2915 "slghparse.cc" /* yacc.c:1646 */ break; case 136: -#line 341 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 343 "slghparse.y" /* yacc.c:1646 */ { (yyval.sectionsym) = (yyvsp[-1].sectionsym); } -#line 2924 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2921 "slghparse.cc" /* yacc.c:1646 */ break; case 137: -#line 343 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 345 "slghparse.y" /* yacc.c:1646 */ { (yyval.sectionstart) = slgh->firstNamedSection((yyvsp[-1].sem),(yyvsp[0].sectionsym)); } -#line 2930 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2927 "slghparse.cc" /* yacc.c:1646 */ break; case 138: -#line 345 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 347 "slghparse.y" /* yacc.c:1646 */ { (yyval.sectionstart) = (yyvsp[0].sectionstart); } -#line 2936 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2933 "slghparse.cc" /* yacc.c:1646 */ break; case 139: -#line 346 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 348 "slghparse.y" /* yacc.c:1646 */ { (yyval.sectionstart) = slgh->nextNamedSection((yyvsp[-2].sectionstart),(yyvsp[-1].sem),(yyvsp[0].sectionsym)); } -#line 2942 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2939 "slghparse.cc" /* yacc.c:1646 */ break; case 140: -#line 348 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 350 "slghparse.y" /* yacc.c:1646 */ { (yyval.sem) = (yyvsp[0].sem); if ((yyval.sem)->getOpvec().empty() && ((yyval.sem)->getResult() == (HandleTpl *)0)) slgh->recordNop(); } -#line 2948 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2945 "slghparse.cc" /* yacc.c:1646 */ break; case 141: -#line 349 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 351 "slghparse.y" /* yacc.c:1646 */ { (yyval.sem) = slgh->setResultVarnode((yyvsp[-3].sem),(yyvsp[-1].varnode)); } -#line 2954 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2951 "slghparse.cc" /* yacc.c:1646 */ break; case 142: -#line 350 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 352 "slghparse.y" /* yacc.c:1646 */ { (yyval.sem) = slgh->setResultStarVarnode((yyvsp[-4].sem),(yyvsp[-2].starqual),(yyvsp[-1].varnode)); } -#line 2960 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2957 "slghparse.cc" /* yacc.c:1646 */ break; case 143: -#line 351 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 353 "slghparse.y" /* yacc.c:1646 */ { string errmsg="Unknown export varnode: "+*(yyvsp[0].str); delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } -#line 2966 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2963 "slghparse.cc" /* yacc.c:1646 */ break; case 144: -#line 352 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 354 "slghparse.y" /* yacc.c:1646 */ { string errmsg="Unknown pointer varnode: "+*(yyvsp[0].str); delete (yyvsp[-1].starqual); delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } -#line 2972 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2969 "slghparse.cc" /* yacc.c:1646 */ break; case 145: -#line 354 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 356 "slghparse.y" /* yacc.c:1646 */ { (yyval.sem) = new ConstructTpl(); } -#line 2978 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2975 "slghparse.cc" /* yacc.c:1646 */ break; case 146: -#line 355 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 357 "slghparse.y" /* yacc.c:1646 */ { (yyval.sem) = (yyvsp[-1].sem); if (!(yyval.sem)->addOpList(*(yyvsp[0].stmt))) { delete (yyvsp[0].stmt); yyerror("Multiple delayslot declarations"); YYERROR; } delete (yyvsp[0].stmt); } -#line 2984 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2981 "slghparse.cc" /* yacc.c:1646 */ break; case 147: -#line 356 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 358 "slghparse.y" /* yacc.c:1646 */ { (yyval.sem) = (yyvsp[-3].sem); slgh->pcode.newLocalDefinition((yyvsp[-1].str)); } -#line 2990 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2987 "slghparse.cc" /* yacc.c:1646 */ break; case 148: -#line 357 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 359 "slghparse.y" /* yacc.c:1646 */ { (yyval.sem) = (yyvsp[-5].sem); slgh->pcode.newLocalDefinition((yyvsp[-3].str),*(yyvsp[-1].i)); delete (yyvsp[-1].i); } -#line 2996 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2993 "slghparse.cc" /* yacc.c:1646 */ break; case 149: -#line 359 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 361 "slghparse.y" /* yacc.c:1646 */ { (yyvsp[-1].tree)->setOutput((yyvsp[-3].varnode)); (yyval.stmt) = ExprTree::toVector((yyvsp[-1].tree)); } -#line 3002 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 2999 "slghparse.cc" /* yacc.c:1646 */ break; case 150: -#line 360 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 362 "slghparse.y" /* yacc.c:1646 */ { (yyval.stmt) = slgh->pcode.newOutput(true,(yyvsp[-1].tree),(yyvsp[-3].str)); } -#line 3008 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3005 "slghparse.cc" /* yacc.c:1646 */ break; case 151: -#line 361 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 363 "slghparse.y" /* yacc.c:1646 */ { (yyval.stmt) = slgh->pcode.newOutput(false,(yyvsp[-1].tree),(yyvsp[-3].str)); } -#line 3014 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3011 "slghparse.cc" /* yacc.c:1646 */ break; case 152: -#line 362 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 364 "slghparse.y" /* yacc.c:1646 */ { (yyval.stmt) = slgh->pcode.newOutput(true,(yyvsp[-1].tree),(yyvsp[-5].str),*(yyvsp[-3].i)); delete (yyvsp[-3].i); } -#line 3020 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3017 "slghparse.cc" /* yacc.c:1646 */ break; case 153: -#line 363 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 365 "slghparse.y" /* yacc.c:1646 */ { (yyval.stmt) = slgh->pcode.newOutput(true,(yyvsp[-1].tree),(yyvsp[-5].str),*(yyvsp[-3].i)); delete (yyvsp[-3].i); } -#line 3026 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3023 "slghparse.cc" /* yacc.c:1646 */ break; case 154: -#line 364 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 366 "slghparse.y" /* yacc.c:1646 */ { (yyval.stmt) = (vector *)0; string errmsg = "Redefinition of symbol: "+(yyvsp[-1].specsym)->getName(); yyerror(errmsg.c_str()); YYERROR; } -#line 3032 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3029 "slghparse.cc" /* yacc.c:1646 */ break; case 155: -#line 365 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 367 "slghparse.y" /* yacc.c:1646 */ { (yyval.stmt) = slgh->pcode.createStore((yyvsp[-4].starqual),(yyvsp[-3].tree),(yyvsp[-1].tree)); } -#line 3038 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3035 "slghparse.cc" /* yacc.c:1646 */ break; case 156: -#line 366 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 368 "slghparse.y" /* yacc.c:1646 */ { (yyval.stmt) = slgh->pcode.createUserOpNoOut((yyvsp[-4].useropsym),(yyvsp[-2].param)); } -#line 3044 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3041 "slghparse.cc" /* yacc.c:1646 */ break; case 157: -#line 367 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 369 "slghparse.y" /* yacc.c:1646 */ { (yyval.stmt) = slgh->pcode.assignBitRange((yyvsp[-8].varnode),(uint4)*(yyvsp[-6].i),(uint4)*(yyvsp[-4].i),(yyvsp[-1].tree)); delete (yyvsp[-6].i), delete (yyvsp[-4].i); } -#line 3050 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3047 "slghparse.cc" /* yacc.c:1646 */ break; case 158: -#line 368 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 370 "slghparse.y" /* yacc.c:1646 */ { (yyval.stmt)=slgh->pcode.assignBitRange((yyvsp[-3].bitsym)->getParentSymbol()->getVarnode(),(yyvsp[-3].bitsym)->getBitOffset(),(yyvsp[-3].bitsym)->numBits(),(yyvsp[-1].tree)); } -#line 3056 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3053 "slghparse.cc" /* yacc.c:1646 */ break; case 159: -#line 369 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 371 "slghparse.y" /* yacc.c:1646 */ { delete (yyvsp[-3].varnode); delete (yyvsp[-1].i); yyerror("Illegal truncation on left-hand side of assignment"); YYERROR; } -#line 3062 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3059 "slghparse.cc" /* yacc.c:1646 */ break; case 160: -#line 370 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 372 "slghparse.y" /* yacc.c:1646 */ { delete (yyvsp[-3].varnode); delete (yyvsp[-1].i); yyerror("Illegal subpiece on left-hand side of assignment"); YYERROR; } -#line 3068 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3065 "slghparse.cc" /* yacc.c:1646 */ break; case 161: -#line 371 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 373 "slghparse.y" /* yacc.c:1646 */ { (yyval.stmt) = slgh->pcode.createOpConst(BUILD,(yyvsp[-1].operandsym)->getIndex()); } -#line 3074 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3071 "slghparse.cc" /* yacc.c:1646 */ break; case 162: -#line 372 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 374 "slghparse.y" /* yacc.c:1646 */ { (yyval.stmt) = slgh->createCrossBuild((yyvsp[-3].varnode),(yyvsp[-1].sectionsym)); } -#line 3080 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3077 "slghparse.cc" /* yacc.c:1646 */ break; case 163: -#line 373 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 375 "slghparse.y" /* yacc.c:1646 */ { (yyval.stmt) = slgh->createCrossBuild((yyvsp[-3].varnode),slgh->newSectionSymbol(*(yyvsp[-1].str))); delete (yyvsp[-1].str); } -#line 3086 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3083 "slghparse.cc" /* yacc.c:1646 */ break; case 164: -#line 374 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 376 "slghparse.y" /* yacc.c:1646 */ { (yyval.stmt) = slgh->pcode.createOpConst(DELAY_SLOT,*(yyvsp[-2].i)); delete (yyvsp[-2].i); } -#line 3092 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3089 "slghparse.cc" /* yacc.c:1646 */ break; case 165: -#line 375 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 377 "slghparse.y" /* yacc.c:1646 */ { (yyval.stmt) = slgh->pcode.createOpNoOut(CPUI_BRANCH,new ExprTree((yyvsp[-1].varnode))); } -#line 3098 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3095 "slghparse.cc" /* yacc.c:1646 */ break; case 166: -#line 376 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 378 "slghparse.y" /* yacc.c:1646 */ { (yyval.stmt) = slgh->pcode.createOpNoOut(CPUI_CBRANCH,new ExprTree((yyvsp[-1].varnode)),(yyvsp[-3].tree)); } -#line 3104 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3101 "slghparse.cc" /* yacc.c:1646 */ break; case 167: -#line 377 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 379 "slghparse.y" /* yacc.c:1646 */ { (yyval.stmt) = slgh->pcode.createOpNoOut(CPUI_BRANCHIND,(yyvsp[-2].tree)); } -#line 3110 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3107 "slghparse.cc" /* yacc.c:1646 */ break; case 168: -#line 378 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 380 "slghparse.y" /* yacc.c:1646 */ { (yyval.stmt) = slgh->pcode.createOpNoOut(CPUI_CALL,new ExprTree((yyvsp[-1].varnode))); } -#line 3116 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3113 "slghparse.cc" /* yacc.c:1646 */ break; case 169: -#line 379 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 381 "slghparse.y" /* yacc.c:1646 */ { (yyval.stmt) = slgh->pcode.createOpNoOut(CPUI_CALLIND,(yyvsp[-2].tree)); } -#line 3122 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3119 "slghparse.cc" /* yacc.c:1646 */ break; case 170: -#line 380 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 382 "slghparse.y" /* yacc.c:1646 */ { yyerror("Must specify an indirect parameter for return"); YYERROR; } -#line 3128 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3125 "slghparse.cc" /* yacc.c:1646 */ break; case 171: -#line 381 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 383 "slghparse.y" /* yacc.c:1646 */ { (yyval.stmt) = slgh->pcode.createOpNoOut(CPUI_RETURN,(yyvsp[-2].tree)); } -#line 3134 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3131 "slghparse.cc" /* yacc.c:1646 */ break; case 172: -#line 382 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 384 "slghparse.y" /* yacc.c:1646 */ { (yyval.stmt) = slgh->createMacroUse((yyvsp[-4].macrosym),(yyvsp[-2].param)); } -#line 3140 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3137 "slghparse.cc" /* yacc.c:1646 */ break; case 173: -#line 383 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 385 "slghparse.y" /* yacc.c:1646 */ { (yyval.stmt) = slgh->pcode.placeLabel( (yyvsp[0].labelsym) ); } -#line 3146 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3143 "slghparse.cc" /* yacc.c:1646 */ break; case 174: -#line 385 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 387 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = new ExprTree((yyvsp[0].varnode)); } -#line 3152 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3149 "slghparse.cc" /* yacc.c:1646 */ break; case 175: -#line 386 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 388 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createLoad((yyvsp[-1].starqual),(yyvsp[0].tree)); } -#line 3158 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3155 "slghparse.cc" /* yacc.c:1646 */ break; case 176: -#line 387 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 389 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = (yyvsp[-1].tree); } -#line 3164 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3161 "slghparse.cc" /* yacc.c:1646 */ break; case 177: -#line 388 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 390 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_ADD,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3170 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3167 "slghparse.cc" /* yacc.c:1646 */ break; case 178: -#line 389 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 391 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_SUB,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3176 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3173 "slghparse.cc" /* yacc.c:1646 */ break; case 179: -#line 390 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 392 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_EQUAL,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3182 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3179 "slghparse.cc" /* yacc.c:1646 */ break; case 180: -#line 391 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 393 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_NOTEQUAL,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3188 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3185 "slghparse.cc" /* yacc.c:1646 */ break; case 181: -#line 392 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 394 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_LESS,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3194 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3191 "slghparse.cc" /* yacc.c:1646 */ break; case 182: -#line 393 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 395 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_LESSEQUAL,(yyvsp[0].tree),(yyvsp[-2].tree)); } -#line 3200 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3197 "slghparse.cc" /* yacc.c:1646 */ break; case 183: -#line 394 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 396 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_LESSEQUAL,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3206 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3203 "slghparse.cc" /* yacc.c:1646 */ break; case 184: -#line 395 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 397 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_LESS,(yyvsp[0].tree),(yyvsp[-2].tree)); } -#line 3212 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3209 "slghparse.cc" /* yacc.c:1646 */ break; case 185: -#line 396 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 398 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_SLESS,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3218 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3215 "slghparse.cc" /* yacc.c:1646 */ break; case 186: -#line 397 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 399 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_SLESSEQUAL,(yyvsp[0].tree),(yyvsp[-2].tree)); } -#line 3224 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3221 "slghparse.cc" /* yacc.c:1646 */ break; case 187: -#line 398 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 400 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_SLESSEQUAL,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3230 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3227 "slghparse.cc" /* yacc.c:1646 */ break; case 188: -#line 399 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 401 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_SLESS,(yyvsp[0].tree),(yyvsp[-2].tree)); } -#line 3236 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3233 "slghparse.cc" /* yacc.c:1646 */ break; case 189: -#line 400 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 402 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_2COMP,(yyvsp[0].tree)); } -#line 3242 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3239 "slghparse.cc" /* yacc.c:1646 */ break; case 190: -#line 401 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 403 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_NEGATE,(yyvsp[0].tree)); } -#line 3248 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3245 "slghparse.cc" /* yacc.c:1646 */ break; case 191: -#line 402 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 404 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_XOR,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3254 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3251 "slghparse.cc" /* yacc.c:1646 */ break; case 192: -#line 403 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 405 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_AND,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3260 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3257 "slghparse.cc" /* yacc.c:1646 */ break; case 193: -#line 404 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 406 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_OR,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3266 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3263 "slghparse.cc" /* yacc.c:1646 */ break; case 194: -#line 405 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 407 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_LEFT,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3272 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3269 "slghparse.cc" /* yacc.c:1646 */ break; case 195: -#line 406 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 408 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_RIGHT,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3278 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3275 "slghparse.cc" /* yacc.c:1646 */ break; case 196: -#line 407 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 409 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_SRIGHT,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3284 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3281 "slghparse.cc" /* yacc.c:1646 */ break; case 197: -#line 408 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 410 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_MULT,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3290 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3287 "slghparse.cc" /* yacc.c:1646 */ break; case 198: -#line 409 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 411 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_DIV,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3296 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3293 "slghparse.cc" /* yacc.c:1646 */ break; case 199: -#line 410 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 412 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_SDIV,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3302 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3299 "slghparse.cc" /* yacc.c:1646 */ break; case 200: -#line 411 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 413 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_REM,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3308 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3305 "slghparse.cc" /* yacc.c:1646 */ break; case 201: -#line 412 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 414 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_SREM,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3314 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3311 "slghparse.cc" /* yacc.c:1646 */ break; case 202: -#line 413 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 415 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_BOOL_NEGATE,(yyvsp[0].tree)); } -#line 3320 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3317 "slghparse.cc" /* yacc.c:1646 */ break; case 203: -#line 414 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 416 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_BOOL_XOR,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3326 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3323 "slghparse.cc" /* yacc.c:1646 */ break; case 204: -#line 415 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 417 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_BOOL_AND,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3332 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3329 "slghparse.cc" /* yacc.c:1646 */ break; case 205: -#line 416 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 418 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_BOOL_OR,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3338 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3335 "slghparse.cc" /* yacc.c:1646 */ break; case 206: -#line 417 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 419 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_FLOAT_EQUAL,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3344 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3341 "slghparse.cc" /* yacc.c:1646 */ break; case 207: -#line 418 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 420 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_FLOAT_NOTEQUAL,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3350 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3347 "slghparse.cc" /* yacc.c:1646 */ break; case 208: -#line 419 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 421 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_FLOAT_LESS,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3356 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3353 "slghparse.cc" /* yacc.c:1646 */ break; case 209: -#line 420 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 422 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_FLOAT_LESS,(yyvsp[0].tree),(yyvsp[-2].tree)); } -#line 3362 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3359 "slghparse.cc" /* yacc.c:1646 */ break; case 210: -#line 421 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 423 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_FLOAT_LESSEQUAL,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3368 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3365 "slghparse.cc" /* yacc.c:1646 */ break; case 211: -#line 422 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 424 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_FLOAT_LESSEQUAL,(yyvsp[0].tree),(yyvsp[-2].tree)); } -#line 3374 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3371 "slghparse.cc" /* yacc.c:1646 */ break; case 212: -#line 423 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 425 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_FLOAT_ADD,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3380 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3377 "slghparse.cc" /* yacc.c:1646 */ break; case 213: -#line 424 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 426 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_FLOAT_SUB,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3386 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3383 "slghparse.cc" /* yacc.c:1646 */ break; case 214: -#line 425 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 427 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_FLOAT_MULT,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3392 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3389 "slghparse.cc" /* yacc.c:1646 */ break; case 215: -#line 426 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 428 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_FLOAT_DIV,(yyvsp[-2].tree),(yyvsp[0].tree)); } -#line 3398 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3395 "slghparse.cc" /* yacc.c:1646 */ break; case 216: -#line 427 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 429 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_FLOAT_NEG,(yyvsp[0].tree)); } -#line 3404 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3401 "slghparse.cc" /* yacc.c:1646 */ break; case 217: -#line 428 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 430 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_FLOAT_ABS,(yyvsp[-1].tree)); } -#line 3410 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3407 "slghparse.cc" /* yacc.c:1646 */ break; case 218: -#line 429 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 431 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_FLOAT_SQRT,(yyvsp[-1].tree)); } -#line 3416 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3413 "slghparse.cc" /* yacc.c:1646 */ break; case 219: -#line 430 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 432 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_SEXT,(yyvsp[-1].tree)); } -#line 3422 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3419 "slghparse.cc" /* yacc.c:1646 */ break; case 220: -#line 431 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 433 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_ZEXT,(yyvsp[-1].tree)); } -#line 3428 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3425 "slghparse.cc" /* yacc.c:1646 */ break; case 221: -#line 432 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 434 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_CARRY,(yyvsp[-3].tree),(yyvsp[-1].tree)); } -#line 3434 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3431 "slghparse.cc" /* yacc.c:1646 */ break; case 222: -#line 433 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 435 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_SCARRY,(yyvsp[-3].tree),(yyvsp[-1].tree)); } -#line 3440 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3437 "slghparse.cc" /* yacc.c:1646 */ break; case 223: -#line 434 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 436 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_INT_SBORROW,(yyvsp[-3].tree),(yyvsp[-1].tree)); } -#line 3446 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3443 "slghparse.cc" /* yacc.c:1646 */ break; case 224: -#line 435 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 437 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_FLOAT_FLOAT2FLOAT,(yyvsp[-1].tree)); } -#line 3452 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3449 "slghparse.cc" /* yacc.c:1646 */ break; case 225: -#line 436 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 438 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_FLOAT_INT2FLOAT,(yyvsp[-1].tree)); } -#line 3458 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3455 "slghparse.cc" /* yacc.c:1646 */ break; case 226: -#line 437 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 439 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_FLOAT_NAN,(yyvsp[-1].tree)); } -#line 3464 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3461 "slghparse.cc" /* yacc.c:1646 */ break; case 227: -#line 438 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 440 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_FLOAT_TRUNC,(yyvsp[-1].tree)); } -#line 3470 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3467 "slghparse.cc" /* yacc.c:1646 */ break; case 228: -#line 439 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 441 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_FLOAT_CEIL,(yyvsp[-1].tree)); } -#line 3476 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3473 "slghparse.cc" /* yacc.c:1646 */ break; case 229: -#line 440 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 442 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_FLOAT_FLOOR,(yyvsp[-1].tree)); } -#line 3482 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3479 "slghparse.cc" /* yacc.c:1646 */ break; case 230: -#line 441 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 443 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_FLOAT_ROUND,(yyvsp[-1].tree)); } -#line 3488 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3485 "slghparse.cc" /* yacc.c:1646 */ break; case 231: -#line 442 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 444 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_NEW,(yyvsp[-1].tree)); } -#line 3494 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3491 "slghparse.cc" /* yacc.c:1646 */ break; case 232: -#line 443 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 445 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_NEW,(yyvsp[-3].tree),(yyvsp[-1].tree)); } -#line 3500 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3497 "slghparse.cc" /* yacc.c:1646 */ break; case 233: -#line 444 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 446 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_POPCOUNT,(yyvsp[-1].tree)); } -#line 3506 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3503 "slghparse.cc" /* yacc.c:1646 */ break; case 234: -#line 445 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 447 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createOp(CPUI_SUBPIECE,new ExprTree((yyvsp[-3].specsym)->getVarnode()),new ExprTree((yyvsp[-1].varnode))); } -#line 3512 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3509 "slghparse.cc" /* yacc.c:1646 */ break; case 235: -#line 446 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 448 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createBitRange((yyvsp[-2].specsym),0,(uint4)(*(yyvsp[0].i) * 8)); delete (yyvsp[0].i); } -#line 3518 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3515 "slghparse.cc" /* yacc.c:1646 */ break; case 236: -#line 447 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 449 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createBitRange((yyvsp[-5].specsym),(uint4)*(yyvsp[-3].i),(uint4)*(yyvsp[-1].i)); delete (yyvsp[-3].i), delete (yyvsp[-1].i); } -#line 3524 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3521 "slghparse.cc" /* yacc.c:1646 */ break; case 237: -#line 448 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 450 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree)=slgh->pcode.createBitRange((yyvsp[0].bitsym)->getParentSymbol(),(yyvsp[0].bitsym)->getBitOffset(),(yyvsp[0].bitsym)->numBits()); } -#line 3530 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3527 "slghparse.cc" /* yacc.c:1646 */ break; case 238: -#line 449 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 451 "slghparse.y" /* yacc.c:1646 */ { (yyval.tree) = slgh->pcode.createUserOp((yyvsp[-3].useropsym),(yyvsp[-1].param)); } -#line 3536 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3533 "slghparse.cc" /* yacc.c:1646 */ break; case 239: -#line 450 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 452 "slghparse.y" /* yacc.c:1646 */ { if ((*(yyvsp[-1].param)).size() < 2) { string errmsg = "Must at least two inputs to cpool"; yyerror(errmsg.c_str()); YYERROR; } (yyval.tree) = slgh->pcode.createVariadic(CPUI_CPOOLREF,(yyvsp[-1].param)); } -#line 3542 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3539 "slghparse.cc" /* yacc.c:1646 */ break; case 240: -#line 452 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 454 "slghparse.y" /* yacc.c:1646 */ { (yyval.starqual) = new StarQuality; (yyval.starqual)->size = *(yyvsp[0].i); delete (yyvsp[0].i); (yyval.starqual)->id=ConstTpl((yyvsp[-3].spacesym)->getSpace()); } -#line 3548 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3545 "slghparse.cc" /* yacc.c:1646 */ break; case 241: -#line 453 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 455 "slghparse.y" /* yacc.c:1646 */ { (yyval.starqual) = new StarQuality; (yyval.starqual)->size = 0; (yyval.starqual)->id=ConstTpl((yyvsp[-1].spacesym)->getSpace()); } -#line 3554 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3551 "slghparse.cc" /* yacc.c:1646 */ break; case 242: -#line 454 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 456 "slghparse.y" /* yacc.c:1646 */ { (yyval.starqual) = new StarQuality; (yyval.starqual)->size = *(yyvsp[0].i); delete (yyvsp[0].i); (yyval.starqual)->id=ConstTpl(slgh->getDefaultCodeSpace()); } -#line 3560 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3557 "slghparse.cc" /* yacc.c:1646 */ break; case 243: -#line 455 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 457 "slghparse.y" /* yacc.c:1646 */ { (yyval.starqual) = new StarQuality; (yyval.starqual)->size = 0; (yyval.starqual)->id=ConstTpl(slgh->getDefaultCodeSpace()); } -#line 3566 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3563 "slghparse.cc" /* yacc.c:1646 */ break; case 244: -#line 457 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 459 "slghparse.y" /* yacc.c:1646 */ { VarnodeTpl *sym = (yyvsp[0].startsym)->getVarnode(); (yyval.varnode) = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),sym->getOffset(),ConstTpl(ConstTpl::j_curspace_size)); delete sym; } -#line 3572 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3569 "slghparse.cc" /* yacc.c:1646 */ break; case 245: -#line 458 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 460 "slghparse.y" /* yacc.c:1646 */ { VarnodeTpl *sym = (yyvsp[0].endsym)->getVarnode(); (yyval.varnode) = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),sym->getOffset(),ConstTpl(ConstTpl::j_curspace_size)); delete sym; } -#line 3578 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3575 "slghparse.cc" /* yacc.c:1646 */ break; case 246: -#line 459 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),ConstTpl(ConstTpl::real,*(yyvsp[0].i)),ConstTpl(ConstTpl::j_curspace_size)); delete (yyvsp[0].i); } -#line 3584 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 461 "slghparse.y" /* yacc.c:1646 */ + { VarnodeTpl *sym = (yyvsp[0].next2sym)->getVarnode(); (yyval.varnode) = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),sym->getOffset(),ConstTpl(ConstTpl::j_curspace_size)); delete sym; } +#line 3581 "slghparse.cc" /* yacc.c:1646 */ break; case 247: -#line 460 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),ConstTpl(ConstTpl::real,0),ConstTpl(ConstTpl::j_curspace_size)); yyerror("Parsed integer is too big (overflow)"); } -#line 3590 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 462 "slghparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),ConstTpl(ConstTpl::real,*(yyvsp[0].i)),ConstTpl(ConstTpl::j_curspace_size)); delete (yyvsp[0].i); } +#line 3587 "slghparse.cc" /* yacc.c:1646 */ break; case 248: -#line 461 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = (yyvsp[0].operandsym)->getVarnode(); (yyvsp[0].operandsym)->setCodeAddress(); } -#line 3596 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 463 "slghparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),ConstTpl(ConstTpl::real,0),ConstTpl(ConstTpl::j_curspace_size)); yyerror("Parsed integer is too big (overflow)"); } +#line 3593 "slghparse.cc" /* yacc.c:1646 */ break; case 249: -#line 462 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { AddrSpace *spc = (yyvsp[-1].spacesym)->getSpace(); (yyval.varnode) = new VarnodeTpl(ConstTpl(spc),ConstTpl(ConstTpl::real,*(yyvsp[-3].i)),ConstTpl(ConstTpl::real,spc->getAddrSize())); delete (yyvsp[-3].i); } -#line 3602 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 464 "slghparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = (yyvsp[0].operandsym)->getVarnode(); (yyvsp[0].operandsym)->setCodeAddress(); } +#line 3599 "slghparse.cc" /* yacc.c:1646 */ break; case 250: -#line 463 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = new VarnodeTpl(ConstTpl(slgh->getConstantSpace()),ConstTpl(ConstTpl::j_relative,(yyvsp[0].labelsym)->getIndex()),ConstTpl(ConstTpl::real,sizeof(uintm))); (yyvsp[0].labelsym)->incrementRefCount(); } -#line 3608 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 465 "slghparse.y" /* yacc.c:1646 */ + { AddrSpace *spc = (yyvsp[-1].spacesym)->getSpace(); (yyval.varnode) = new VarnodeTpl(ConstTpl(spc),ConstTpl(ConstTpl::real,*(yyvsp[-3].i)),ConstTpl(ConstTpl::real,spc->getAddrSize())); delete (yyvsp[-3].i); } +#line 3605 "slghparse.cc" /* yacc.c:1646 */ break; case 251: -#line 464 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { string errmsg = "Unknown jump destination: "+*(yyvsp[0].str); delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } -#line 3614 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 466 "slghparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = new VarnodeTpl(ConstTpl(slgh->getConstantSpace()),ConstTpl(ConstTpl::j_relative,(yyvsp[0].labelsym)->getIndex()),ConstTpl(ConstTpl::real,sizeof(uintm))); (yyvsp[0].labelsym)->incrementRefCount(); } +#line 3611 "slghparse.cc" /* yacc.c:1646 */ break; case 252: -#line 466 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = (yyvsp[0].specsym)->getVarnode(); } -#line 3620 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 467 "slghparse.y" /* yacc.c:1646 */ + { string errmsg = "Unknown jump destination: "+*(yyvsp[0].str); delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } +#line 3617 "slghparse.cc" /* yacc.c:1646 */ break; case 253: -#line 467 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = (yyvsp[0].varnode); } -#line 3626 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 469 "slghparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = (yyvsp[0].specsym)->getVarnode(); } +#line 3623 "slghparse.cc" /* yacc.c:1646 */ break; case 254: -#line 468 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { string errmsg = "Unknown varnode parameter: "+*(yyvsp[0].str); delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } -#line 3632 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 470 "slghparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = (yyvsp[0].varnode); } +#line 3629 "slghparse.cc" /* yacc.c:1646 */ break; case 255: -#line 469 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { string errmsg = "Subtable not attached to operand: "+(yyvsp[0].subtablesym)->getName(); yyerror(errmsg.c_str()); YYERROR; } -#line 3638 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 471 "slghparse.y" /* yacc.c:1646 */ + { string errmsg = "Unknown varnode parameter: "+*(yyvsp[0].str); delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } +#line 3635 "slghparse.cc" /* yacc.c:1646 */ break; case 256: -#line 471 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = new VarnodeTpl(ConstTpl(slgh->getConstantSpace()),ConstTpl(ConstTpl::real,*(yyvsp[0].i)),ConstTpl(ConstTpl::real,0)); delete (yyvsp[0].i); } -#line 3644 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 472 "slghparse.y" /* yacc.c:1646 */ + { string errmsg = "Subtable not attached to operand: "+(yyvsp[0].subtablesym)->getName(); yyerror(errmsg.c_str()); YYERROR; } +#line 3641 "slghparse.cc" /* yacc.c:1646 */ break; case 257: -#line 472 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = new VarnodeTpl(ConstTpl(slgh->getConstantSpace()),ConstTpl(ConstTpl::real,0),ConstTpl(ConstTpl::real,0)); yyerror("Parsed integer is too big (overflow)"); } -#line 3650 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 474 "slghparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = new VarnodeTpl(ConstTpl(slgh->getConstantSpace()),ConstTpl(ConstTpl::real,*(yyvsp[0].i)),ConstTpl(ConstTpl::real,0)); delete (yyvsp[0].i); } +#line 3647 "slghparse.cc" /* yacc.c:1646 */ break; case 258: -#line 473 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = new VarnodeTpl(ConstTpl(slgh->getConstantSpace()),ConstTpl(ConstTpl::real,*(yyvsp[-2].i)),ConstTpl(ConstTpl::real,*(yyvsp[0].i))); delete (yyvsp[-2].i); delete (yyvsp[0].i); } -#line 3656 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 475 "slghparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = new VarnodeTpl(ConstTpl(slgh->getConstantSpace()),ConstTpl(ConstTpl::real,0),ConstTpl(ConstTpl::real,0)); yyerror("Parsed integer is too big (overflow)"); } +#line 3653 "slghparse.cc" /* yacc.c:1646 */ break; case 259: -#line 474 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = slgh->pcode.addressOf((yyvsp[0].varnode),0); } -#line 3662 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 476 "slghparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = new VarnodeTpl(ConstTpl(slgh->getConstantSpace()),ConstTpl(ConstTpl::real,*(yyvsp[-2].i)),ConstTpl(ConstTpl::real,*(yyvsp[0].i))); delete (yyvsp[-2].i); delete (yyvsp[0].i); } +#line 3659 "slghparse.cc" /* yacc.c:1646 */ break; case 260: -#line 475 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = slgh->pcode.addressOf((yyvsp[0].varnode),*(yyvsp[-1].i)); delete (yyvsp[-1].i); } -#line 3668 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 477 "slghparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = slgh->pcode.addressOf((yyvsp[0].varnode),0); } +#line 3665 "slghparse.cc" /* yacc.c:1646 */ break; case 261: -#line 477 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = (yyvsp[0].specsym)->getVarnode(); } -#line 3674 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 478 "slghparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = slgh->pcode.addressOf((yyvsp[0].varnode),*(yyvsp[-1].i)); delete (yyvsp[-1].i); } +#line 3671 "slghparse.cc" /* yacc.c:1646 */ break; case 262: -#line 478 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { string errmsg = "Unknown assignment varnode: "+*(yyvsp[0].str); delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } -#line 3680 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 480 "slghparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = (yyvsp[0].specsym)->getVarnode(); } +#line 3677 "slghparse.cc" /* yacc.c:1646 */ break; case 263: -#line 479 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { string errmsg = "Subtable not attached to operand: "+(yyvsp[0].subtablesym)->getName(); yyerror(errmsg.c_str()); YYERROR; } -#line 3686 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 481 "slghparse.y" /* yacc.c:1646 */ + { string errmsg = "Unknown assignment varnode: "+*(yyvsp[0].str); delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } +#line 3683 "slghparse.cc" /* yacc.c:1646 */ break; case 264: -#line 481 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.labelsym) = (yyvsp[-1].labelsym); } -#line 3692 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 482 "slghparse.y" /* yacc.c:1646 */ + { string errmsg = "Subtable not attached to operand: "+(yyvsp[0].subtablesym)->getName(); yyerror(errmsg.c_str()); YYERROR; } +#line 3689 "slghparse.cc" /* yacc.c:1646 */ break; case 265: -#line 482 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.labelsym) = slgh->pcode.defineLabel( (yyvsp[-1].str) ); } -#line 3698 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 484 "slghparse.y" /* yacc.c:1646 */ + { (yyval.labelsym) = (yyvsp[-1].labelsym); } +#line 3695 "slghparse.cc" /* yacc.c:1646 */ break; case 266: -#line 484 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = (yyvsp[0].specsym)->getVarnode(); } -#line 3704 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 485 "slghparse.y" /* yacc.c:1646 */ + { (yyval.labelsym) = slgh->pcode.defineLabel( (yyvsp[-1].str) ); } +#line 3701 "slghparse.cc" /* yacc.c:1646 */ break; case 267: -#line 485 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = slgh->pcode.addressOf((yyvsp[0].varnode),0); } -#line 3710 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 487 "slghparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = (yyvsp[0].specsym)->getVarnode(); } +#line 3707 "slghparse.cc" /* yacc.c:1646 */ break; case 268: -#line 486 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = slgh->pcode.addressOf((yyvsp[0].varnode),*(yyvsp[-1].i)); delete (yyvsp[-1].i); } -#line 3716 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 488 "slghparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = slgh->pcode.addressOf((yyvsp[0].varnode),0); } +#line 3713 "slghparse.cc" /* yacc.c:1646 */ break; case 269: -#line 487 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.varnode) = new VarnodeTpl(ConstTpl(slgh->getConstantSpace()),ConstTpl(ConstTpl::real,*(yyvsp[-2].i)),ConstTpl(ConstTpl::real,*(yyvsp[0].i))); delete (yyvsp[-2].i); delete (yyvsp[0].i); } -#line 3722 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 489 "slghparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = slgh->pcode.addressOf((yyvsp[0].varnode),*(yyvsp[-1].i)); delete (yyvsp[-1].i); } +#line 3719 "slghparse.cc" /* yacc.c:1646 */ break; case 270: -#line 488 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { string errmsg="Unknown export varnode: "+*(yyvsp[0].str); delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } -#line 3728 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 490 "slghparse.y" /* yacc.c:1646 */ + { (yyval.varnode) = new VarnodeTpl(ConstTpl(slgh->getConstantSpace()),ConstTpl(ConstTpl::real,*(yyvsp[-2].i)),ConstTpl(ConstTpl::real,*(yyvsp[0].i))); delete (yyvsp[-2].i); delete (yyvsp[0].i); } +#line 3725 "slghparse.cc" /* yacc.c:1646 */ break; case 271: -#line 489 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { string errmsg = "Subtable not attached to operand: "+(yyvsp[0].subtablesym)->getName(); yyerror(errmsg.c_str()); YYERROR; } -#line 3734 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 491 "slghparse.y" /* yacc.c:1646 */ + { string errmsg="Unknown export varnode: "+*(yyvsp[0].str); delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } +#line 3731 "slghparse.cc" /* yacc.c:1646 */ break; case 272: -#line 491 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.famsym) = (yyvsp[0].valuesym); } -#line 3740 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 492 "slghparse.y" /* yacc.c:1646 */ + { string errmsg = "Subtable not attached to operand: "+(yyvsp[0].subtablesym)->getName(); yyerror(errmsg.c_str()); YYERROR; } +#line 3737 "slghparse.cc" /* yacc.c:1646 */ break; case 273: -#line 492 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.famsym) = (yyvsp[0].valuemapsym); } -#line 3746 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 494 "slghparse.y" /* yacc.c:1646 */ + { (yyval.famsym) = (yyvsp[0].valuesym); } +#line 3743 "slghparse.cc" /* yacc.c:1646 */ break; case 274: -#line 493 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.famsym) = (yyvsp[0].contextsym); } -#line 3752 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 495 "slghparse.y" /* yacc.c:1646 */ + { (yyval.famsym) = (yyvsp[0].valuemapsym); } +#line 3749 "slghparse.cc" /* yacc.c:1646 */ break; case 275: -#line 494 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.famsym) = (yyvsp[0].namesym); } -#line 3758 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 496 "slghparse.y" /* yacc.c:1646 */ + { (yyval.famsym) = (yyvsp[0].contextsym); } +#line 3755 "slghparse.cc" /* yacc.c:1646 */ break; case 276: -#line 495 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.famsym) = (yyvsp[0].varlistsym); } -#line 3764 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 497 "slghparse.y" /* yacc.c:1646 */ + { (yyval.famsym) = (yyvsp[0].namesym); } +#line 3761 "slghparse.cc" /* yacc.c:1646 */ break; case 277: -#line 497 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.specsym) = (yyvsp[0].varsym); } -#line 3770 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 498 "slghparse.y" /* yacc.c:1646 */ + { (yyval.famsym) = (yyvsp[0].varlistsym); } +#line 3767 "slghparse.cc" /* yacc.c:1646 */ break; case 278: -#line 498 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.specsym) = (yyvsp[0].specsym); } -#line 3776 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 500 "slghparse.y" /* yacc.c:1646 */ + { (yyval.specsym) = (yyvsp[0].varsym); } +#line 3773 "slghparse.cc" /* yacc.c:1646 */ break; case 279: -#line 499 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.specsym) = (yyvsp[0].operandsym); } -#line 3782 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 501 "slghparse.y" /* yacc.c:1646 */ + { (yyval.specsym) = (yyvsp[0].specsym); } +#line 3779 "slghparse.cc" /* yacc.c:1646 */ break; case 280: -#line 500 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.specsym) = (yyvsp[0].startsym); } -#line 3788 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 502 "slghparse.y" /* yacc.c:1646 */ + { (yyval.specsym) = (yyvsp[0].operandsym); } +#line 3785 "slghparse.cc" /* yacc.c:1646 */ break; case 281: -#line 501 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.specsym) = (yyvsp[0].endsym); } -#line 3794 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 503 "slghparse.y" /* yacc.c:1646 */ + { (yyval.specsym) = (yyvsp[0].startsym); } +#line 3791 "slghparse.cc" /* yacc.c:1646 */ break; case 282: -#line 503 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.str) = new string; (*(yyval.str)) += (yyvsp[0].ch); } -#line 3800 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 504 "slghparse.y" /* yacc.c:1646 */ + { (yyval.specsym) = (yyvsp[0].endsym); } +#line 3797 "slghparse.cc" /* yacc.c:1646 */ break; case 283: -#line 504 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.str) = (yyvsp[-1].str); (*(yyval.str)) += (yyvsp[0].ch); } -#line 3806 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 505 "slghparse.y" /* yacc.c:1646 */ + { (yyval.specsym) = (yyvsp[0].next2sym); } +#line 3803 "slghparse.cc" /* yacc.c:1646 */ break; case 284: -#line 506 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.biglist) = (yyvsp[-1].biglist); } -#line 3812 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 507 "slghparse.y" /* yacc.c:1646 */ + { (yyval.str) = new string; (*(yyval.str)) += (yyvsp[0].ch); } +#line 3809 "slghparse.cc" /* yacc.c:1646 */ break; case 285: -#line 507 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.biglist) = new vector; (yyval.biglist)->push_back(intb(*(yyvsp[0].i))); delete (yyvsp[0].i); } -#line 3818 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 508 "slghparse.y" /* yacc.c:1646 */ + { (yyval.str) = (yyvsp[-1].str); (*(yyval.str)) += (yyvsp[0].ch); } +#line 3815 "slghparse.cc" /* yacc.c:1646 */ break; case 286: -#line 508 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.biglist) = new vector; (yyval.biglist)->push_back(-intb(*(yyvsp[0].i))); delete (yyvsp[0].i); } -#line 3824 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 510 "slghparse.y" /* yacc.c:1646 */ + { (yyval.biglist) = (yyvsp[-1].biglist); } +#line 3821 "slghparse.cc" /* yacc.c:1646 */ break; case 287: -#line 510 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 511 "slghparse.y" /* yacc.c:1646 */ { (yyval.biglist) = new vector; (yyval.biglist)->push_back(intb(*(yyvsp[0].i))); delete (yyvsp[0].i); } -#line 3830 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3827 "slghparse.cc" /* yacc.c:1646 */ break; case 288: -#line 511 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 512 "slghparse.y" /* yacc.c:1646 */ { (yyval.biglist) = new vector; (yyval.biglist)->push_back(-intb(*(yyvsp[0].i))); delete (yyvsp[0].i); } -#line 3836 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3833 "slghparse.cc" /* yacc.c:1646 */ break; case 289: -#line 512 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { if (*(yyvsp[0].str)!="_") { string errmsg = "Expecting integer but saw: "+*(yyvsp[0].str); delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } - (yyval.biglist) = new vector; (yyval.biglist)->push_back((intb)0xBADBEEF); delete (yyvsp[0].str); } -#line 3843 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 514 "slghparse.y" /* yacc.c:1646 */ + { (yyval.biglist) = new vector; (yyval.biglist)->push_back(intb(*(yyvsp[0].i))); delete (yyvsp[0].i); } +#line 3839 "slghparse.cc" /* yacc.c:1646 */ break; case 290: -#line 514 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.biglist) = (yyvsp[-1].biglist); (yyval.biglist)->push_back(intb(*(yyvsp[0].i))); delete (yyvsp[0].i); } -#line 3849 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 515 "slghparse.y" /* yacc.c:1646 */ + { (yyval.biglist) = new vector; (yyval.biglist)->push_back(-intb(*(yyvsp[0].i))); delete (yyvsp[0].i); } +#line 3845 "slghparse.cc" /* yacc.c:1646 */ break; case 291: -#line 515 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.biglist) = (yyvsp[-2].biglist); (yyval.biglist)->push_back(-intb(*(yyvsp[0].i))); delete (yyvsp[0].i); } -#line 3855 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 516 "slghparse.y" /* yacc.c:1646 */ + { if (*(yyvsp[0].str)!="_") { string errmsg = "Expecting integer but saw: "+*(yyvsp[0].str); delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } + (yyval.biglist) = new vector; (yyval.biglist)->push_back((intb)0xBADBEEF); delete (yyvsp[0].str); } +#line 3852 "slghparse.cc" /* yacc.c:1646 */ break; case 292: -#line 516 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { if (*(yyvsp[0].str)!="_") { string errmsg = "Expecting integer but saw: "+*(yyvsp[0].str); delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } - (yyval.biglist) = (yyvsp[-1].biglist); (yyval.biglist)->push_back((intb)0xBADBEEF); delete (yyvsp[0].str); } -#line 3862 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 518 "slghparse.y" /* yacc.c:1646 */ + { (yyval.biglist) = (yyvsp[-1].biglist); (yyval.biglist)->push_back(intb(*(yyvsp[0].i))); delete (yyvsp[0].i); } +#line 3858 "slghparse.cc" /* yacc.c:1646 */ break; case 293: -#line 519 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.strlist) = (yyvsp[-1].strlist); } -#line 3868 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 519 "slghparse.y" /* yacc.c:1646 */ + { (yyval.biglist) = (yyvsp[-2].biglist); (yyval.biglist)->push_back(-intb(*(yyvsp[0].i))); delete (yyvsp[0].i); } +#line 3864 "slghparse.cc" /* yacc.c:1646 */ break; case 294: -#line 520 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.strlist) = new vector; (yyval.strlist)->push_back(*(yyvsp[0].str)); delete (yyvsp[0].str); } -#line 3874 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 520 "slghparse.y" /* yacc.c:1646 */ + { if (*(yyvsp[0].str)!="_") { string errmsg = "Expecting integer but saw: "+*(yyvsp[0].str); delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } + (yyval.biglist) = (yyvsp[-1].biglist); (yyval.biglist)->push_back((intb)0xBADBEEF); delete (yyvsp[0].str); } +#line 3871 "slghparse.cc" /* yacc.c:1646 */ break; case 295: -#line 522 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.strlist) = new vector; (yyval.strlist)->push_back( *(yyvsp[0].str) ); delete (yyvsp[0].str); } -#line 3880 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 523 "slghparse.y" /* yacc.c:1646 */ + { (yyval.strlist) = (yyvsp[-1].strlist); } +#line 3877 "slghparse.cc" /* yacc.c:1646 */ break; case 296: -#line 523 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.strlist) = (yyvsp[-1].strlist); (yyval.strlist)->push_back(*(yyvsp[0].str)); delete (yyvsp[0].str); } -#line 3886 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 524 "slghparse.y" /* yacc.c:1646 */ + { (yyval.strlist) = new vector; (yyval.strlist)->push_back(*(yyvsp[0].str)); delete (yyvsp[0].str); } +#line 3883 "slghparse.cc" /* yacc.c:1646 */ break; case 297: -#line 524 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { string errmsg = (yyvsp[0].anysym)->getName()+": redefined"; yyerror(errmsg.c_str()); YYERROR; } -#line 3892 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 526 "slghparse.y" /* yacc.c:1646 */ + { (yyval.strlist) = new vector; (yyval.strlist)->push_back( *(yyvsp[0].str) ); delete (yyvsp[0].str); } +#line 3889 "slghparse.cc" /* yacc.c:1646 */ break; case 298: -#line 526 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.strlist) = (yyvsp[-1].strlist); } -#line 3898 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 527 "slghparse.y" /* yacc.c:1646 */ + { (yyval.strlist) = (yyvsp[-1].strlist); (yyval.strlist)->push_back(*(yyvsp[0].str)); delete (yyvsp[0].str); } +#line 3895 "slghparse.cc" /* yacc.c:1646 */ break; case 299: -#line 528 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.strlist) = new vector; (yyval.strlist)->push_back( *(yyvsp[0].str) ); delete (yyvsp[0].str); } -#line 3904 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 528 "slghparse.y" /* yacc.c:1646 */ + { string errmsg = (yyvsp[0].anysym)->getName()+": redefined"; yyerror(errmsg.c_str()); YYERROR; } +#line 3901 "slghparse.cc" /* yacc.c:1646 */ break; case 300: -#line 529 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.strlist) = new vector; (yyval.strlist)->push_back( (yyvsp[0].anysym)->getName() ); } -#line 3910 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 530 "slghparse.y" /* yacc.c:1646 */ + { (yyval.strlist) = (yyvsp[-1].strlist); } +#line 3907 "slghparse.cc" /* yacc.c:1646 */ break; case 301: -#line 530 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.strlist) = (yyvsp[-1].strlist); (yyval.strlist)->push_back(*(yyvsp[0].str)); delete (yyvsp[0].str); } -#line 3916 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 532 "slghparse.y" /* yacc.c:1646 */ + { (yyval.strlist) = new vector; (yyval.strlist)->push_back( *(yyvsp[0].str) ); delete (yyvsp[0].str); } +#line 3913 "slghparse.cc" /* yacc.c:1646 */ break; case 302: -#line 531 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.strlist) = (yyvsp[-1].strlist); (yyval.strlist)->push_back((yyvsp[0].anysym)->getName()); } -#line 3922 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 533 "slghparse.y" /* yacc.c:1646 */ + { (yyval.strlist) = new vector; (yyval.strlist)->push_back( (yyvsp[0].anysym)->getName() ); } +#line 3919 "slghparse.cc" /* yacc.c:1646 */ break; case 303: -#line 533 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.symlist) = (yyvsp[-1].symlist); } -#line 3928 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 534 "slghparse.y" /* yacc.c:1646 */ + { (yyval.strlist) = (yyvsp[-1].strlist); (yyval.strlist)->push_back(*(yyvsp[0].str)); delete (yyvsp[0].str); } +#line 3925 "slghparse.cc" /* yacc.c:1646 */ break; case 304: -#line 534 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.symlist) = new vector; (yyval.symlist)->push_back((yyvsp[0].valuesym)); } -#line 3934 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 535 "slghparse.y" /* yacc.c:1646 */ + { (yyval.strlist) = (yyvsp[-1].strlist); (yyval.strlist)->push_back((yyvsp[0].anysym)->getName()); } +#line 3931 "slghparse.cc" /* yacc.c:1646 */ break; case 305: -#line 535 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.symlist) = new vector; (yyval.symlist)->push_back((yyvsp[0].contextsym)); } -#line 3940 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 537 "slghparse.y" /* yacc.c:1646 */ + { (yyval.symlist) = (yyvsp[-1].symlist); } +#line 3937 "slghparse.cc" /* yacc.c:1646 */ break; case 306: -#line 537 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.symlist) = new vector; (yyval.symlist)->push_back( (yyvsp[0].valuesym) ); } -#line 3946 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 538 "slghparse.y" /* yacc.c:1646 */ + { (yyval.symlist) = new vector; (yyval.symlist)->push_back((yyvsp[0].valuesym)); } +#line 3943 "slghparse.cc" /* yacc.c:1646 */ break; case 307: -#line 538 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 539 "slghparse.y" /* yacc.c:1646 */ { (yyval.symlist) = new vector; (yyval.symlist)->push_back((yyvsp[0].contextsym)); } -#line 3952 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 3949 "slghparse.cc" /* yacc.c:1646 */ break; case 308: -#line 539 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.symlist) = (yyvsp[-1].symlist); (yyval.symlist)->push_back((yyvsp[0].valuesym)); } -#line 3958 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 541 "slghparse.y" /* yacc.c:1646 */ + { (yyval.symlist) = new vector; (yyval.symlist)->push_back( (yyvsp[0].valuesym) ); } +#line 3955 "slghparse.cc" /* yacc.c:1646 */ break; case 309: -#line 540 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.symlist) = (yyvsp[-1].symlist); (yyval.symlist)->push_back((yyvsp[0].contextsym)); } -#line 3964 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 542 "slghparse.y" /* yacc.c:1646 */ + { (yyval.symlist) = new vector; (yyval.symlist)->push_back((yyvsp[0].contextsym)); } +#line 3961 "slghparse.cc" /* yacc.c:1646 */ break; case 310: -#line 541 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { string errmsg = *(yyvsp[0].str)+": is not a value pattern"; delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } -#line 3970 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 543 "slghparse.y" /* yacc.c:1646 */ + { (yyval.symlist) = (yyvsp[-1].symlist); (yyval.symlist)->push_back((yyvsp[0].valuesym)); } +#line 3967 "slghparse.cc" /* yacc.c:1646 */ break; case 311: -#line 543 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.symlist) = (yyvsp[-1].symlist); } -#line 3976 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 544 "slghparse.y" /* yacc.c:1646 */ + { (yyval.symlist) = (yyvsp[-1].symlist); (yyval.symlist)->push_back((yyvsp[0].contextsym)); } +#line 3973 "slghparse.cc" /* yacc.c:1646 */ break; case 312: -#line 544 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.symlist) = new vector; (yyval.symlist)->push_back((yyvsp[0].varsym)); } -#line 3982 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 545 "slghparse.y" /* yacc.c:1646 */ + { string errmsg = *(yyvsp[0].str)+": is not a value pattern"; delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } +#line 3979 "slghparse.cc" /* yacc.c:1646 */ break; case 313: -#line 546 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.symlist) = new vector; (yyval.symlist)->push_back((yyvsp[0].varsym)); } -#line 3988 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 547 "slghparse.y" /* yacc.c:1646 */ + { (yyval.symlist) = (yyvsp[-1].symlist); } +#line 3985 "slghparse.cc" /* yacc.c:1646 */ break; case 314: -#line 547 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { if (*(yyvsp[0].str)!="_") { string errmsg = *(yyvsp[0].str)+": is not a varnode symbol"; delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } - (yyval.symlist) = new vector; (yyval.symlist)->push_back((SleighSymbol *)0); delete (yyvsp[0].str); } -#line 3995 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 548 "slghparse.y" /* yacc.c:1646 */ + { (yyval.symlist) = new vector; (yyval.symlist)->push_back((yyvsp[0].varsym)); } +#line 3991 "slghparse.cc" /* yacc.c:1646 */ break; case 315: -#line 549 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.symlist) = (yyvsp[-1].symlist); (yyval.symlist)->push_back((yyvsp[0].varsym)); } -#line 4001 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 550 "slghparse.y" /* yacc.c:1646 */ + { (yyval.symlist) = new vector; (yyval.symlist)->push_back((yyvsp[0].varsym)); } +#line 3997 "slghparse.cc" /* yacc.c:1646 */ break; case 316: -#line 550 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 551 "slghparse.y" /* yacc.c:1646 */ { if (*(yyvsp[0].str)!="_") { string errmsg = *(yyvsp[0].str)+": is not a varnode symbol"; delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } - (yyval.symlist) = (yyvsp[-1].symlist); (yyval.symlist)->push_back((SleighSymbol *)0); delete (yyvsp[0].str); } -#line 4008 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ + (yyval.symlist) = new vector; (yyval.symlist)->push_back((SleighSymbol *)0); delete (yyvsp[0].str); } +#line 4004 "slghparse.cc" /* yacc.c:1646 */ break; case 317: -#line 553 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.param) = new vector; } -#line 4014 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 553 "slghparse.y" /* yacc.c:1646 */ + { (yyval.symlist) = (yyvsp[-1].symlist); (yyval.symlist)->push_back((yyvsp[0].varsym)); } +#line 4010 "slghparse.cc" /* yacc.c:1646 */ break; case 318: -#line 554 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.param) = new vector; (yyval.param)->push_back((yyvsp[0].tree)); } -#line 4020 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 554 "slghparse.y" /* yacc.c:1646 */ + { if (*(yyvsp[0].str)!="_") { string errmsg = *(yyvsp[0].str)+": is not a varnode symbol"; delete (yyvsp[0].str); yyerror(errmsg.c_str()); YYERROR; } + (yyval.symlist) = (yyvsp[-1].symlist); (yyval.symlist)->push_back((SleighSymbol *)0); delete (yyvsp[0].str); } +#line 4017 "slghparse.cc" /* yacc.c:1646 */ break; case 319: -#line 555 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.param) = (yyvsp[-2].param); (yyval.param)->push_back((yyvsp[0].tree)); } -#line 4026 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 557 "slghparse.y" /* yacc.c:1646 */ + { (yyval.param) = new vector; } +#line 4023 "slghparse.cc" /* yacc.c:1646 */ break; case 320: -#line 557 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.strlist) = new vector; } -#line 4032 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 558 "slghparse.y" /* yacc.c:1646 */ + { (yyval.param) = new vector; (yyval.param)->push_back((yyvsp[0].tree)); } +#line 4029 "slghparse.cc" /* yacc.c:1646 */ break; case 321: -#line 558 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.strlist) = new vector; (yyval.strlist)->push_back(*(yyvsp[0].str)); delete (yyvsp[0].str); } -#line 4038 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 559 "slghparse.y" /* yacc.c:1646 */ + { (yyval.param) = (yyvsp[-2].param); (yyval.param)->push_back((yyvsp[0].tree)); } +#line 4035 "slghparse.cc" /* yacc.c:1646 */ break; case 322: -#line 559 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.strlist) = (yyvsp[-2].strlist); (yyval.strlist)->push_back(*(yyvsp[0].str)); delete (yyvsp[0].str); } -#line 4044 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 561 "slghparse.y" /* yacc.c:1646 */ + { (yyval.strlist) = new vector; } +#line 4041 "slghparse.cc" /* yacc.c:1646 */ break; case 323: -#line 561 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.anysym) = (yyvsp[0].spacesym); } -#line 4050 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 562 "slghparse.y" /* yacc.c:1646 */ + { (yyval.strlist) = new vector; (yyval.strlist)->push_back(*(yyvsp[0].str)); delete (yyvsp[0].str); } +#line 4047 "slghparse.cc" /* yacc.c:1646 */ break; case 324: -#line 562 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.anysym) = (yyvsp[0].sectionsym); } -#line 4056 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 563 "slghparse.y" /* yacc.c:1646 */ + { (yyval.strlist) = (yyvsp[-2].strlist); (yyval.strlist)->push_back(*(yyvsp[0].str)); delete (yyvsp[0].str); } +#line 4053 "slghparse.cc" /* yacc.c:1646 */ break; case 325: -#line 563 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.anysym) = (yyvsp[0].tokensym); } -#line 4062 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 565 "slghparse.y" /* yacc.c:1646 */ + { (yyval.anysym) = (yyvsp[0].spacesym); } +#line 4059 "slghparse.cc" /* yacc.c:1646 */ break; case 326: -#line 564 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.anysym) = (yyvsp[0].useropsym); } -#line 4068 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 566 "slghparse.y" /* yacc.c:1646 */ + { (yyval.anysym) = (yyvsp[0].sectionsym); } +#line 4065 "slghparse.cc" /* yacc.c:1646 */ break; case 327: -#line 565 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.anysym) = (yyvsp[0].macrosym); } -#line 4074 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 567 "slghparse.y" /* yacc.c:1646 */ + { (yyval.anysym) = (yyvsp[0].tokensym); } +#line 4071 "slghparse.cc" /* yacc.c:1646 */ break; case 328: -#line 566 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.anysym) = (yyvsp[0].subtablesym); } -#line 4080 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 568 "slghparse.y" /* yacc.c:1646 */ + { (yyval.anysym) = (yyvsp[0].useropsym); } +#line 4077 "slghparse.cc" /* yacc.c:1646 */ break; case 329: -#line 567 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.anysym) = (yyvsp[0].valuesym); } -#line 4086 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 569 "slghparse.y" /* yacc.c:1646 */ + { (yyval.anysym) = (yyvsp[0].macrosym); } +#line 4083 "slghparse.cc" /* yacc.c:1646 */ break; case 330: -#line 568 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.anysym) = (yyvsp[0].valuemapsym); } -#line 4092 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 570 "slghparse.y" /* yacc.c:1646 */ + { (yyval.anysym) = (yyvsp[0].subtablesym); } +#line 4089 "slghparse.cc" /* yacc.c:1646 */ break; case 331: -#line 569 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.anysym) = (yyvsp[0].contextsym); } -#line 4098 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 571 "slghparse.y" /* yacc.c:1646 */ + { (yyval.anysym) = (yyvsp[0].valuesym); } +#line 4095 "slghparse.cc" /* yacc.c:1646 */ break; case 332: -#line 570 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.anysym) = (yyvsp[0].namesym); } -#line 4104 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 572 "slghparse.y" /* yacc.c:1646 */ + { (yyval.anysym) = (yyvsp[0].valuemapsym); } +#line 4101 "slghparse.cc" /* yacc.c:1646 */ break; case 333: -#line 571 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.anysym) = (yyvsp[0].varsym); } -#line 4110 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 573 "slghparse.y" /* yacc.c:1646 */ + { (yyval.anysym) = (yyvsp[0].contextsym); } +#line 4107 "slghparse.cc" /* yacc.c:1646 */ break; case 334: -#line 572 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.anysym) = (yyvsp[0].varlistsym); } -#line 4116 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 574 "slghparse.y" /* yacc.c:1646 */ + { (yyval.anysym) = (yyvsp[0].namesym); } +#line 4113 "slghparse.cc" /* yacc.c:1646 */ break; case 335: -#line 573 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.anysym) = (yyvsp[0].operandsym); } -#line 4122 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 575 "slghparse.y" /* yacc.c:1646 */ + { (yyval.anysym) = (yyvsp[0].varsym); } +#line 4119 "slghparse.cc" /* yacc.c:1646 */ break; case 336: -#line 574 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.anysym) = (yyvsp[0].startsym); } -#line 4128 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 576 "slghparse.y" /* yacc.c:1646 */ + { (yyval.anysym) = (yyvsp[0].varlistsym); } +#line 4125 "slghparse.cc" /* yacc.c:1646 */ break; case 337: -#line 575 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ - { (yyval.anysym) = (yyvsp[0].endsym); } -#line 4134 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 577 "slghparse.y" /* yacc.c:1646 */ + { (yyval.anysym) = (yyvsp[0].operandsym); } +#line 4131 "slghparse.cc" /* yacc.c:1646 */ break; case 338: -#line 576 "src/decompile/cpp/slghparse.y" /* yacc.c:1646 */ +#line 578 "slghparse.y" /* yacc.c:1646 */ + { (yyval.anysym) = (yyvsp[0].startsym); } +#line 4137 "slghparse.cc" /* yacc.c:1646 */ + break; + + case 339: +#line 579 "slghparse.y" /* yacc.c:1646 */ + { (yyval.anysym) = (yyvsp[0].endsym); } +#line 4143 "slghparse.cc" /* yacc.c:1646 */ + break; + + case 340: +#line 580 "slghparse.y" /* yacc.c:1646 */ + { (yyval.anysym) = (yyvsp[0].next2sym); } +#line 4149 "slghparse.cc" /* yacc.c:1646 */ + break; + + case 341: +#line 581 "slghparse.y" /* yacc.c:1646 */ { (yyval.anysym) = (yyvsp[0].bitsym); } -#line 4140 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 4155 "slghparse.cc" /* yacc.c:1646 */ break; -#line 4144 "src/decompile/cpp/slghparse.cc" /* yacc.c:1646 */ +#line 4159 "slghparse.cc" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -4383,7 +4398,7 @@ yyreturn: #endif return yyresult; } -#line 578 "src/decompile/cpp/slghparse.y" /* yacc.c:1906 */ +#line 583 "slghparse.y" /* yacc.c:1906 */ int yyerror(const char *s) diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/slghparse.hh b/Ghidra/Features/Decompiler/src/decompile/cpp/slghparse.hh index 1df3ac4533..f52fe7abbb 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/slghparse.hh +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/slghparse.hh @@ -45,8 +45,8 @@ This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ -#ifndef YY_YY_SRC_DECOMPILE_CPP_SLGHPARSE_HH_INCLUDED -# define YY_YY_SRC_DECOMPILE_CPP_SLGHPARSE_HH_INCLUDED +#ifndef YY_YY_SLGHPARSE_HH_INCLUDED +# define YY_YY_SLGHPARSE_HH_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 @@ -168,9 +168,10 @@ extern int yydebug; OPERANDSYM = 363, STARTSYM = 364, ENDSYM = 365, - MACROSYM = 366, - LABELSYM = 367, - SUBTABLESYM = 368 + NEXT2SYM = 366, + MACROSYM = 367, + LABELSYM = 368, + SUBTABLESYM = 369 }; #endif @@ -179,7 +180,7 @@ extern int yydebug; union YYSTYPE { -#line 29 "src/decompile/cpp/slghparse.y" /* yacc.c:1909 */ +#line 29 "slghparse.y" /* yacc.c:1909 */ char ch; uintb *i; @@ -212,6 +213,7 @@ union YYSTYPE SubtableSymbol *subtablesym; StartSymbol *startsym; EndSymbol *endsym; + Next2Symbol *next2sym; OperandSymbol *operandsym; VarnodeListSymbol *varlistsym; VarnodeSymbol *varsym; @@ -223,7 +225,7 @@ union YYSTYPE FamilySymbol *famsym; SpecificSymbol *specsym; -#line 212 "src/decompile/cpp/slghparse.hh" /* yacc.c:1909 */ +#line 214 "slghparse.hh" /* yacc.c:1909 */ }; typedef union YYSTYPE YYSTYPE; @@ -236,4 +238,4 @@ extern YYSTYPE yylval; int yyparse (void); -#endif /* !YY_YY_SRC_DECOMPILE_CPP_SLGHPARSE_HH_INCLUDED */ +#endif /* !YY_YY_SLGHPARSE_HH_INCLUDED */ diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/slghparse.y b/Ghidra/Features/Decompiler/src/decompile/cpp/slghparse.y index c34f5a4656..b3fedb7b6e 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/slghparse.y +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/slghparse.y @@ -58,6 +58,7 @@ SubtableSymbol *subtablesym; StartSymbol *startsym; EndSymbol *endsym; + Next2Symbol *next2sym; OperandSymbol *operandsym; VarnodeListSymbol *varlistsym; VarnodeSymbol *varsym; @@ -121,6 +122,7 @@ %token OPERANDSYM %token STARTSYM %token ENDSYM +%token NEXT2SYM %token MACROSYM %token LABELSYM %token SUBTABLESYM @@ -331,7 +333,7 @@ contextblock: { $$ = (vector *)0; } | '[' contextlist ']' { $$ = $2; } ; contextlist: { $$ = new vector; } - | contextlist CONTEXTSYM '=' pexpression ';' { $$ = $1; if (!slgh->contextMod($1,$2,$4)) { string errmsg="Cannot use 'inst_next' to set context variable: "+$2->getName(); yyerror(errmsg.c_str()); YYERROR; } } + | contextlist CONTEXTSYM '=' pexpression ';' { $$ = $1; if (!slgh->contextMod($1,$2,$4)) { string errmsg="Cannot use 'inst_next' or 'inst_next2' to set context variable: "+$2->getName(); yyerror(errmsg.c_str()); YYERROR; } } | contextlist GLOBALSET_KEY '(' familysymbol ',' CONTEXTSYM ')' ';' { $$ = $1; slgh->contextSet($1,$4,$6); } | contextlist GLOBALSET_KEY '(' specificsymbol ',' CONTEXTSYM ')' ';' { $$ = $1; slgh->contextSet($1,$4,$6); } | contextlist OPERANDSYM '=' pexpression ';' { $$ = $1; slgh->defineOperand($2,$4); } @@ -456,6 +458,7 @@ sizedstar: '*' '[' SPACESYM ']' ':' INTEGER { $$ = new StarQuality; $$->size = * ; jumpdest: STARTSYM { VarnodeTpl *sym = $1->getVarnode(); $$ = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),sym->getOffset(),ConstTpl(ConstTpl::j_curspace_size)); delete sym; } | ENDSYM { VarnodeTpl *sym = $1->getVarnode(); $$ = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),sym->getOffset(),ConstTpl(ConstTpl::j_curspace_size)); delete sym; } + | NEXT2SYM { VarnodeTpl *sym = $1->getVarnode(); $$ = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),sym->getOffset(),ConstTpl(ConstTpl::j_curspace_size)); delete sym; } | INTEGER { $$ = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),ConstTpl(ConstTpl::real,*$1),ConstTpl(ConstTpl::j_curspace_size)); delete $1; } | BADINTEGER { $$ = new VarnodeTpl(ConstTpl(ConstTpl::j_curspace),ConstTpl(ConstTpl::real,0),ConstTpl(ConstTpl::j_curspace_size)); yyerror("Parsed integer is too big (overflow)"); } | OPERANDSYM { $$ = $1->getVarnode(); $1->setCodeAddress(); } @@ -499,6 +502,7 @@ specificsymbol: VARSYM { $$ = $1; } | OPERANDSYM { $$ = $1; } | STARTSYM { $$ = $1; } | ENDSYM { $$ = $1; } + | NEXT2SYM { $$ = $1; } ; charstring: CHAR { $$ = new string; (*$$) += $1; } | charstring CHAR { $$ = $1; (*$$) += $2; } @@ -573,6 +577,7 @@ anysymbol: SPACESYM { $$ = $1; } | OPERANDSYM { $$ = $1; } | STARTSYM { $$ = $1; } | ENDSYM { $$ = $1; } + | NEXT2SYM { $$ = $1; } | BITSYM { $$ = $1; } ; %% diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/slghpatexpress.hh b/Ghidra/Features/Decompiler/src/decompile/cpp/slghpatexpress.hh index 5d8ee4f616..8c748c2cee 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/slghpatexpress.hh +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/slghpatexpress.hh @@ -165,6 +165,19 @@ public: virtual void restoreXml(const Element *el,Translate *trans) {} }; +class Next2InstructionValue : public PatternValue { +public: + Next2InstructionValue(void) {} + virtual intb getValue(ParserWalker &walker) const { + return (intb)AddrSpace::byteToAddress(walker.getN2addr().getOffset(),walker.getN2addr().getSpace()->getWordSize()); } + virtual TokenPattern genMinPattern(const vector &ops) const { return TokenPattern(); } + virtual TokenPattern genPattern(intb val) const { return TokenPattern(); } + virtual intb minValue(void) const { return (intb)0; } + virtual intb maxValue(void) const { return (intb)0; } + virtual void saveXml(ostream &s) const { s << ""; } + virtual void restoreXml(const Element *el,Translate *trans) {} +}; + class Constructor; // Forward declaration class OperandSymbol; class OperandValue : public PatternValue { diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/slghscan.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/slghscan.cc index 1d7c98697d..1ac87e2cd5 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/slghscan.cc +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/slghscan.cc @@ -23,8 +23,8 @@ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 6 -#define YY_FLEX_SUBMINOR_VERSION 4 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 37 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -99,61 +99,65 @@ typedef unsigned int flex_uint32_t; #define UINT32_MAX (4294967295U) #endif -#ifndef SIZE_MAX -#define SIZE_MAX (~(size_t)0) -#endif - #endif /* ! C99 */ #endif /* ! FLEXINT_H */ -/* begin standard C++ headers. */ +#ifdef __cplusplus -/* TODO: this is always defined, so inline it */ +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) + +#define YY_USE_CONST + +#endif /* defined (__STDC__) */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST #define yyconst const - -#if defined(__GNUC__) && __GNUC__ >= 3 -#define yynoreturn __attribute__((__noreturn__)) #else -#define yynoreturn +#define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 -/* Promotes a possibly negative, possibly signed char to an - * integer in range [0..255] for use as an array index. +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. */ -#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * + /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START + /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + /* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE yyrestart( yyin ) +#define YY_NEW_FILE yyrestart(yyin ) + #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE -#ifdef __ia64__ -/* On IA-64, the buffer size is 16k, not 8k. - * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. - * Ditto for the __ia64__ case accordingly. - */ -#define YY_BUF_SIZE 32768 -#else #define YY_BUF_SIZE 16384 -#endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. @@ -170,16 +174,15 @@ typedef struct yy_buffer_state *YY_BUFFER_STATE; typedef size_t yy_size_t; #endif -extern int yyleng; +extern yy_size_t yyleng; extern FILE *yyin, *yyout; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 - + #define YY_LESS_LINENO(n) - #define YY_LINENO_REWIND_TO(ptr) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ @@ -194,6 +197,7 @@ extern FILE *yyin, *yyout; YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) + #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE @@ -208,12 +212,12 @@ struct yy_buffer_state /* Size of input buffer in bytes, not including room for EOB * characters. */ - int yy_buf_size; + yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ - int yy_n_chars; + yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to @@ -236,7 +240,7 @@ struct yy_buffer_state int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ - + /* Whether to try to fill the input buffer when we reach the * end of it. */ @@ -264,7 +268,7 @@ struct yy_buffer_state /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ -static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */ +static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general @@ -275,6 +279,7 @@ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) + /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ @@ -282,11 +287,11 @@ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */ /* yy_hold_char holds the character lost when yytext is formed. */ static char yy_hold_char; -static int yy_n_chars; /* number of characters read into yy_ch_buf */ -int yyleng; +static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ +yy_size_t yyleng; /* Points to current character in buffer. */ -static char *yy_c_buf_p = NULL; +static char *yy_c_buf_p = (char *) 0; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ @@ -295,77 +300,80 @@ static int yy_start = 0; /* start state number */ */ static int yy_did_buffer_switch_on_eof; -void yyrestart ( FILE *input_file ); -void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer ); -YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size ); -void yy_delete_buffer ( YY_BUFFER_STATE b ); -void yy_flush_buffer ( YY_BUFFER_STATE b ); -void yypush_buffer_state ( YY_BUFFER_STATE new_buffer ); -void yypop_buffer_state ( void ); +void yyrestart (FILE *input_file ); +void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); +void yy_delete_buffer (YY_BUFFER_STATE b ); +void yy_flush_buffer (YY_BUFFER_STATE b ); +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ); +void yypop_buffer_state (void ); -static void yyensure_buffer_stack ( void ); -static void yy_load_buffer_state ( void ); -static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file ); -#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER ) +static void yyensure_buffer_stack (void ); +static void yy_load_buffer_state (void ); +static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); -YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size ); -YY_BUFFER_STATE yy_scan_string ( const char *yy_str ); -YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len ); +#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) -void *yyalloc ( yy_size_t ); -void *yyrealloc ( void *, yy_size_t ); -void yyfree ( void * ); +YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); +YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); +YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ); + +void *yyalloc (yy_size_t ); +void *yyrealloc (void *,yy_size_t ); +void yyfree (void * ); #define yy_new_buffer yy_create_buffer + #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ - yy_create_buffer( yyin, YY_BUF_SIZE ); \ + yy_create_buffer(yyin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } + #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ - yy_create_buffer( yyin, YY_BUF_SIZE ); \ + yy_create_buffer(yyin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } + #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) -typedef flex_uint8_t YY_CHAR; +typedef unsigned char YY_CHAR; -FILE *yyin = NULL, *yyout = NULL; +FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; typedef int yy_state_type; extern int yylineno; + int yylineno = 1; extern char *yytext; -#ifdef yytext_ptr -#undef yytext_ptr -#endif #define yytext_ptr yytext -static yy_state_type yy_get_previous_state ( void ); -static yy_state_type yy_try_NUL_trans ( yy_state_type current_state ); -static int yy_get_next_buffer ( void ); -static void yynoreturn yy_fatal_error ( const char* msg ); +static yy_state_type yy_get_previous_state (void ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); +static int yy_get_next_buffer (void ); +static void yy_fatal_error (yyconst char msg[] ); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ - yyleng = (int) (yy_cp - yy_bp); \ + yyleng = (size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; + #define YY_NUM_RULES 164 #define YY_END_OF_BUFFER 165 /* This struct is not used in this scanner, @@ -375,7 +383,7 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[527] = +static yyconst flex_int16_t yy_accept[527] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 14, 7, 8, 6, 14, @@ -437,7 +445,7 @@ static const flex_int16_t yy_accept[527] = 51, 139, 51, 51, 31, 0 } ; -static const YY_CHAR yy_ec[256] = +static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, @@ -469,7 +477,7 @@ static const YY_CHAR yy_ec[256] = 11, 11, 11, 11, 11 } ; -static const YY_CHAR yy_meta[67] = +static yyconst flex_int32_t yy_meta[67] = { 0, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 5, 3, 6, @@ -480,7 +488,7 @@ static const YY_CHAR yy_meta[67] = 5, 5, 3, 3, 3, 3 } ; -static const flex_int16_t yy_base[564] = +static yyconst flex_int16_t yy_base[564] = { 0, 0, 931, 66, 930, 132, 929, 198, 928, 264, 927, 330, 926, 0, 394, 955, 962, 396, 962, 0, 942, @@ -546,7 +554,7 @@ static const flex_int16_t yy_base[564] = 666, 669, 672 } ; -static const flex_int16_t yy_def[564] = +static yyconst flex_int16_t yy_def[564] = { 0, 526, 1, 526, 3, 526, 5, 526, 7, 526, 9, 526, 11, 527, 528, 526, 526, 526, 526, 529, 526, @@ -612,7 +620,7 @@ static const flex_int16_t yy_def[564] = 526, 526, 526 } ; -static const flex_int16_t yy_nxt[1029] = +static yyconst flex_int16_t yy_nxt[1029] = { 0, 16, 17, 18, 17, 16, 16, 19, 20, 16, 16, 16, 21, 21, 16, 16, 21, 21, 22, 16, 16, @@ -729,7 +737,7 @@ static const flex_int16_t yy_nxt[1029] = 526, 526, 526, 526, 526, 526, 526, 526 } ; -static const flex_int16_t yy_chk[1029] = +static yyconst flex_int16_t yy_chk[1029] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1117,7 +1125,7 @@ int4 preprocess(int4 cur_state,int4 blank_state) if (yyin == (FILE *)0) preproc_error("Could not open included file "+fname); filebuffers.back().file = yyin; - yy_switch_to_buffer( yy_create_buffer(yyin, YY_BUF_SIZE) ); + yy_switch_to_buffer(yy_create_buffer(yyin,YY_BUF_SIZE) ); check_to_endofline(s); } } @@ -1240,7 +1248,7 @@ void preproc_macroexpand(void) string value; if (!slgh->getPreprocValue(macro,value)) preproc_error("Unknown preprocessing macro "+macro); - yy_switch_to_buffer( yy_scan_string( value.c_str() ) ); + yy_switch_to_buffer(yy_scan_string(value.c_str() ) ); slgh->parsePreprocMacro(); } @@ -1292,6 +1300,9 @@ int4 find_symbol(void) { case SleighSymbol::end_symbol: yylval.endsym = (EndSymbol *)sym; return ENDSYM; + case SleighSymbol::next2_symbol: + yylval.next2sym = (Next2Symbol *)sym; + return NEXT2SYM; case SleighSymbol::subtable_symbol: yylval.subtablesym = (SubtableSymbol *)sym; return SUBTABLESYM; @@ -1342,9 +1353,13 @@ int4 scan_number(char *numtext,YYSTYPE *lval,bool signednum) return INTEGER; } -#line 1331 "slghscan.cc" -#line 1333 "slghscan.cc" + + + + + +#line 1348 "slghscan.cc" #define INITIAL 0 #define defblock 1 @@ -1366,36 +1381,36 @@ int4 scan_number(char *numtext,YYSTYPE *lval,bool signednum) #define YY_EXTRA_TYPE void * #endif -static int yy_init_globals ( void ); +static int yy_init_globals (void ); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ -int yylex_destroy ( void ); +int yylex_destroy (void ); -int yyget_debug ( void ); +int yyget_debug (void ); -void yyset_debug ( int debug_flag ); +void yyset_debug (int debug_flag ); -YY_EXTRA_TYPE yyget_extra ( void ); +YY_EXTRA_TYPE yyget_extra (void ); -void yyset_extra ( YY_EXTRA_TYPE user_defined ); +void yyset_extra (YY_EXTRA_TYPE user_defined ); -FILE *yyget_in ( void ); +FILE *yyget_in (void ); -void yyset_in ( FILE * _in_str ); +void yyset_in (FILE * in_str ); -FILE *yyget_out ( void ); +FILE *yyget_out (void ); -void yyset_out ( FILE * _out_str ); +void yyset_out (FILE * out_str ); - int yyget_leng ( void ); +yy_size_t yyget_leng (void ); -char *yyget_text ( void ); +char *yyget_text (void ); -int yyget_lineno ( void ); +int yyget_lineno (void ); -void yyset_lineno ( int _line_number ); +void yyset_lineno (int line_number ); /* Macros after this point can all be overridden by user definitions in * section 1. @@ -1403,43 +1418,35 @@ void yyset_lineno ( int _line_number ); #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus -extern "C" int yywrap ( void ); +extern "C" int yywrap (void ); #else -extern int yywrap ( void ); +extern int yywrap (void ); #endif #endif -#ifndef YY_NO_UNPUT + static void yyunput (int c,char *buf_ptr ); - static void yyunput ( int c, char *buf_ptr ); - -#endif - #ifndef yytext_ptr -static void yy_flex_strncpy ( char *, const char *, int ); +static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN -static int yy_flex_strlen ( const char * ); +static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT + #ifdef __cplusplus -static int yyinput ( void ); +static int yyinput (void ); #else -static int input ( void ); +static int input (void ); #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE -#ifdef __ia64__ -/* On IA-64, the buffer size is 16k, not 8k */ -#define YY_READ_BUF_SIZE 16384 -#else #define YY_READ_BUF_SIZE 8192 -#endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ @@ -1447,7 +1454,7 @@ static int input ( void ); /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ -#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) +#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, @@ -1458,7 +1465,7 @@ static int input ( void ); if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ - int n; \ + size_t n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ @@ -1471,7 +1478,7 @@ static int input ( void ); else \ { \ errno=0; \ - while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \ + while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ { \ if( errno != EINTR) \ { \ @@ -1526,7 +1533,7 @@ extern int yylex (void); /* Code executed at the end of each rule. */ #ifndef YY_BREAK -#define YY_BREAK /*LINTED*/break; +#define YY_BREAK break; #endif #define YY_RULE_SETUP \ @@ -1539,10 +1546,15 @@ extern int yylex (void); */ YY_DECL { - yy_state_type yy_current_state; - char *yy_cp, *yy_bp; - int yy_act; + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; +#line 493 "slghscan.l" + + +#line 1542 "slghscan.cc" + if ( !(yy_init) ) { (yy_init) = 1; @@ -1563,19 +1575,13 @@ YY_DECL if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer( yyin, YY_BUF_SIZE ); + yy_create_buffer(yyin,YY_BUF_SIZE ); } - yy_load_buffer_state( ); + yy_load_buffer_state( ); } - { -#line 490 "slghscan.l" - - -#line 1562 "slghscan.cc" - - while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ + while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); @@ -1592,7 +1598,7 @@ YY_DECL yy_match: do { - YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; + register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; @@ -1602,9 +1608,9 @@ yy_match: { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 527 ) - yy_c = yy_meta[yy_c]; + yy_c = yy_meta[(unsigned int) yy_c]; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_base[yy_current_state] != 962 ); @@ -1634,830 +1640,830 @@ do_action: /* This label is used only to access EOF actions. */ case 1: /* rule 1 can match eol */ YY_RULE_SETUP -#line 492 "slghscan.l" +#line 495 "slghscan.l" { slgh->nextLine(); BEGIN( preprocess(INITIAL,preproc) ); } YY_BREAK case 2: YY_RULE_SETUP -#line 493 "slghscan.l" +#line 496 "slghscan.l" { preproc_macroexpand(); } YY_BREAK case 3: YY_RULE_SETUP -#line 494 "slghscan.l" +#line 497 "slghscan.l" { yylval.ch = yytext[0]; return yytext[0]; } YY_BREAK case 4: YY_RULE_SETUP -#line 495 "slghscan.l" +#line 498 "slghscan.l" { BEGIN(print); slgh->calcContextLayout(); yylval.ch = yytext[0]; return yytext[0]; } YY_BREAK case 5: YY_RULE_SETUP -#line 496 "slghscan.l" +#line 499 "slghscan.l" { BEGIN(sem); yylval.ch = yytext[0]; return yytext[0]; } YY_BREAK case 6: YY_RULE_SETUP -#line 497 "slghscan.l" +#line 500 "slghscan.l" YY_BREAK case 7: YY_RULE_SETUP -#line 498 "slghscan.l" +#line 501 "slghscan.l" YY_BREAK case 8: /* rule 8 can match eol */ YY_RULE_SETUP -#line 499 "slghscan.l" +#line 502 "slghscan.l" { slgh->nextLine(); } YY_BREAK case 9: YY_RULE_SETUP -#line 500 "slghscan.l" +#line 503 "slghscan.l" { BEGIN(macroblock); return MACRO_KEY; } YY_BREAK case 10: YY_RULE_SETUP -#line 501 "slghscan.l" +#line 504 "slghscan.l" { BEGIN(defblock); return DEFINE_KEY; } YY_BREAK case 11: YY_RULE_SETUP -#line 502 "slghscan.l" +#line 505 "slghscan.l" { BEGIN(defblock); slgh->calcContextLayout(); return ATTACH_KEY; } YY_BREAK case 12: YY_RULE_SETUP -#line 503 "slghscan.l" +#line 506 "slghscan.l" { BEGIN(pattern); withsection = 1; slgh->calcContextLayout(); return WITH_KEY; } YY_BREAK case 13: YY_RULE_SETUP -#line 504 "slghscan.l" +#line 507 "slghscan.l" { return find_symbol(); } YY_BREAK case 14: YY_RULE_SETUP -#line 505 "slghscan.l" +#line 508 "slghscan.l" { return yytext[0]; } YY_BREAK case 15: /* rule 15 can match eol */ YY_RULE_SETUP -#line 507 "slghscan.l" +#line 510 "slghscan.l" { slgh->nextLine(); BEGIN( preprocess(macroblock,preproc) ); } YY_BREAK case 16: YY_RULE_SETUP -#line 508 "slghscan.l" +#line 511 "slghscan.l" { preproc_macroexpand(); } YY_BREAK case 17: YY_RULE_SETUP -#line 509 "slghscan.l" +#line 512 "slghscan.l" { yylval.ch = yytext[0]; return yytext[0]; } YY_BREAK case 18: YY_RULE_SETUP -#line 510 "slghscan.l" +#line 513 "slghscan.l" { BEGIN(sem); return yytext[0]; } YY_BREAK case 19: YY_RULE_SETUP -#line 511 "slghscan.l" +#line 514 "slghscan.l" { yylval.str = new string(yytext); return STRING; } YY_BREAK case 20: YY_RULE_SETUP -#line 512 "slghscan.l" +#line 515 "slghscan.l" YY_BREAK case 21: /* rule 21 can match eol */ YY_RULE_SETUP -#line 513 "slghscan.l" +#line 516 "slghscan.l" { slgh->nextLine(); } YY_BREAK case 22: YY_RULE_SETUP -#line 514 "slghscan.l" +#line 517 "slghscan.l" { return yytext[0]; } YY_BREAK case 23: /* rule 23 can match eol */ YY_RULE_SETUP -#line 516 "slghscan.l" +#line 519 "slghscan.l" { slgh->nextLine(); BEGIN( preprocess(defblock,preproc) ); } YY_BREAK case 24: YY_RULE_SETUP -#line 517 "slghscan.l" +#line 520 "slghscan.l" { preproc_macroexpand(); } YY_BREAK case 25: YY_RULE_SETUP -#line 518 "slghscan.l" +#line 521 "slghscan.l" { yylval.ch = yytext[0]; return yytext[0]; } YY_BREAK case 26: YY_RULE_SETUP -#line 519 "slghscan.l" +#line 522 "slghscan.l" { BEGIN(INITIAL); yylval.ch = yytext[0]; return yytext[0]; } YY_BREAK case 27: YY_RULE_SETUP -#line 520 "slghscan.l" +#line 523 "slghscan.l" { return SPACE_KEY; } YY_BREAK case 28: YY_RULE_SETUP -#line 521 "slghscan.l" +#line 524 "slghscan.l" { return TYPE_KEY; } YY_BREAK case 29: YY_RULE_SETUP -#line 522 "slghscan.l" +#line 525 "slghscan.l" { return RAM_KEY; } YY_BREAK case 30: YY_RULE_SETUP -#line 523 "slghscan.l" +#line 526 "slghscan.l" { return DEFAULT_KEY; } YY_BREAK case 31: YY_RULE_SETUP -#line 524 "slghscan.l" +#line 527 "slghscan.l" { return REGISTER_KEY; } YY_BREAK case 32: YY_RULE_SETUP -#line 525 "slghscan.l" +#line 528 "slghscan.l" { return TOKEN_KEY; } YY_BREAK case 33: YY_RULE_SETUP -#line 526 "slghscan.l" +#line 529 "slghscan.l" { return CONTEXT_KEY; } YY_BREAK case 34: YY_RULE_SETUP -#line 527 "slghscan.l" +#line 530 "slghscan.l" { return BITRANGE_KEY; } YY_BREAK case 35: YY_RULE_SETUP -#line 528 "slghscan.l" +#line 531 "slghscan.l" { return SIGNED_KEY; } YY_BREAK case 36: YY_RULE_SETUP -#line 529 "slghscan.l" +#line 532 "slghscan.l" { return NOFLOW_KEY; } YY_BREAK case 37: YY_RULE_SETUP -#line 530 "slghscan.l" +#line 533 "slghscan.l" { return HEX_KEY; } YY_BREAK case 38: YY_RULE_SETUP -#line 531 "slghscan.l" +#line 534 "slghscan.l" { return DEC_KEY; } YY_BREAK case 39: YY_RULE_SETUP -#line 532 "slghscan.l" +#line 535 "slghscan.l" { return ENDIAN_KEY; } YY_BREAK case 40: YY_RULE_SETUP -#line 533 "slghscan.l" +#line 536 "slghscan.l" { return ALIGN_KEY; } YY_BREAK case 41: YY_RULE_SETUP -#line 534 "slghscan.l" +#line 537 "slghscan.l" { return BIG_KEY; } YY_BREAK case 42: YY_RULE_SETUP -#line 535 "slghscan.l" +#line 538 "slghscan.l" { return LITTLE_KEY; } YY_BREAK case 43: YY_RULE_SETUP -#line 536 "slghscan.l" +#line 539 "slghscan.l" { return SIZE_KEY; } YY_BREAK case 44: YY_RULE_SETUP -#line 537 "slghscan.l" +#line 540 "slghscan.l" { return WORDSIZE_KEY; } YY_BREAK case 45: YY_RULE_SETUP -#line 538 "slghscan.l" +#line 541 "slghscan.l" { return OFFSET_KEY; } YY_BREAK case 46: YY_RULE_SETUP -#line 539 "slghscan.l" +#line 542 "slghscan.l" { return NAMES_KEY; } YY_BREAK case 47: YY_RULE_SETUP -#line 540 "slghscan.l" +#line 543 "slghscan.l" { return VALUES_KEY; } YY_BREAK case 48: YY_RULE_SETUP -#line 541 "slghscan.l" +#line 544 "slghscan.l" { return VARIABLES_KEY; } YY_BREAK case 49: YY_RULE_SETUP -#line 542 "slghscan.l" +#line 545 "slghscan.l" { return PCODEOP_KEY; } YY_BREAK case 50: YY_RULE_SETUP -#line 543 "slghscan.l" +#line 546 "slghscan.l" YY_BREAK case 51: YY_RULE_SETUP -#line 544 "slghscan.l" +#line 547 "slghscan.l" { return find_symbol(); } YY_BREAK case 52: YY_RULE_SETUP -#line 545 "slghscan.l" +#line 548 "slghscan.l" { return scan_number(yytext,&yylval,false); } YY_BREAK case 53: YY_RULE_SETUP -#line 546 "slghscan.l" +#line 549 "slghscan.l" { return scan_number(yytext,&yylval,false); } YY_BREAK case 54: YY_RULE_SETUP -#line 547 "slghscan.l" +#line 550 "slghscan.l" { return scan_number(yytext,&yylval,false); } YY_BREAK case 55: YY_RULE_SETUP -#line 548 "slghscan.l" +#line 551 "slghscan.l" { yylval.str = new string(yytext+1,strlen(yytext)-2); return STRING; } YY_BREAK case 56: YY_RULE_SETUP -#line 549 "slghscan.l" +#line 552 "slghscan.l" YY_BREAK case 57: /* rule 57 can match eol */ YY_RULE_SETUP -#line 550 "slghscan.l" +#line 553 "slghscan.l" { slgh->nextLine(); } YY_BREAK case 58: YY_RULE_SETUP -#line 551 "slghscan.l" +#line 554 "slghscan.l" { return yytext[0]; } YY_BREAK case 59: /* rule 59 can match eol */ YY_RULE_SETUP -#line 554 "slghscan.l" +#line 557 "slghscan.l" { slgh->nextLine(); BEGIN( preprocess(print,preproc) ); } YY_BREAK case 60: YY_RULE_SETUP -#line 555 "slghscan.l" +#line 558 "slghscan.l" { preproc_macroexpand(); } YY_BREAK case 61: YY_RULE_SETUP -#line 556 "slghscan.l" +#line 559 "slghscan.l" { yylval.ch = yytext[0]; return CHAR; } YY_BREAK case 62: YY_RULE_SETUP -#line 557 "slghscan.l" +#line 560 "slghscan.l" { yylval.ch = '^'; return '^'; } YY_BREAK case 63: YY_RULE_SETUP -#line 558 "slghscan.l" +#line 561 "slghscan.l" { BEGIN(pattern); actionon=0; return IS_KEY; } YY_BREAK case 64: YY_RULE_SETUP -#line 559 "slghscan.l" +#line 562 "slghscan.l" { yylval.str = new string(yytext); return SYMBOLSTRING; } YY_BREAK case 65: YY_RULE_SETUP -#line 560 "slghscan.l" +#line 563 "slghscan.l" { yylval.str = new string(yytext+1,strlen(yytext)-2); return STRING; } YY_BREAK case 66: YY_RULE_SETUP -#line 561 "slghscan.l" +#line 564 "slghscan.l" { yylval.ch = ' '; return ' '; } YY_BREAK case 67: /* rule 67 can match eol */ YY_RULE_SETUP -#line 562 "slghscan.l" +#line 565 "slghscan.l" { slgh->nextLine(); return ' '; } YY_BREAK case 68: YY_RULE_SETUP -#line 563 "slghscan.l" +#line 566 "slghscan.l" { return yytext[0]; } YY_BREAK case 69: /* rule 69 can match eol */ YY_RULE_SETUP -#line 565 "slghscan.l" +#line 568 "slghscan.l" { slgh->nextLine(); BEGIN( preprocess(pattern,preproc) ); } YY_BREAK case 70: YY_RULE_SETUP -#line 566 "slghscan.l" +#line 569 "slghscan.l" { preproc_macroexpand(); } YY_BREAK case 71: YY_RULE_SETUP -#line 567 "slghscan.l" +#line 570 "slghscan.l" { BEGIN((withsection==1) ? INITIAL:sem); withsection=0; yylval.ch = yytext[0]; return yytext[0]; } YY_BREAK case 72: YY_RULE_SETUP -#line 568 "slghscan.l" +#line 571 "slghscan.l" { BEGIN(INITIAL); return OP_UNIMPL; } YY_BREAK case 73: YY_RULE_SETUP -#line 569 "slghscan.l" +#line 572 "slghscan.l" { return GLOBALSET_KEY; } YY_BREAK case 74: YY_RULE_SETUP -#line 570 "slghscan.l" +#line 573 "slghscan.l" { return OP_RIGHT; } YY_BREAK case 75: YY_RULE_SETUP -#line 571 "slghscan.l" +#line 574 "slghscan.l" { return OP_LEFT; } YY_BREAK case 76: YY_RULE_SETUP -#line 572 "slghscan.l" +#line 575 "slghscan.l" { return OP_NOTEQUAL; } YY_BREAK case 77: YY_RULE_SETUP -#line 573 "slghscan.l" +#line 576 "slghscan.l" { return OP_LESSEQUAL; } YY_BREAK case 78: YY_RULE_SETUP -#line 574 "slghscan.l" +#line 577 "slghscan.l" { return OP_GREATEQUAL; } YY_BREAK case 79: YY_RULE_SETUP -#line 575 "slghscan.l" +#line 578 "slghscan.l" { return OP_AND; } YY_BREAK case 80: YY_RULE_SETUP -#line 576 "slghscan.l" +#line 579 "slghscan.l" { return OP_OR; } YY_BREAK case 81: YY_RULE_SETUP -#line 577 "slghscan.l" +#line 580 "slghscan.l" { return OP_XOR; } YY_BREAK case 82: YY_RULE_SETUP -#line 578 "slghscan.l" +#line 581 "slghscan.l" { return ELLIPSIS_KEY; } YY_BREAK case 83: YY_RULE_SETUP -#line 579 "slghscan.l" +#line 582 "slghscan.l" { actionon = 1; yylval.ch = yytext[0]; return yytext[0]; } YY_BREAK case 84: YY_RULE_SETUP -#line 580 "slghscan.l" +#line 583 "slghscan.l" { actionon = 0; yylval.ch = yytext[0]; return yytext[0]; } YY_BREAK case 85: YY_RULE_SETUP -#line 581 "slghscan.l" +#line 584 "slghscan.l" { yylval.ch = yytext[0]; return (actionon==0) ? yytext[0] : OP_AND; } YY_BREAK case 86: YY_RULE_SETUP -#line 582 "slghscan.l" +#line 585 "slghscan.l" { yylval.ch = yytext[0]; return (actionon==0) ? yytext[0] : OP_OR; } YY_BREAK case 87: YY_RULE_SETUP -#line 583 "slghscan.l" +#line 586 "slghscan.l" { return OP_XOR; } YY_BREAK case 88: YY_RULE_SETUP -#line 584 "slghscan.l" +#line 587 "slghscan.l" { yylval.ch = yytext[0]; return yytext[0]; } YY_BREAK case 89: YY_RULE_SETUP -#line 585 "slghscan.l" +#line 588 "slghscan.l" YY_BREAK case 90: YY_RULE_SETUP -#line 586 "slghscan.l" +#line 589 "slghscan.l" { return find_symbol(); } YY_BREAK case 91: YY_RULE_SETUP -#line 587 "slghscan.l" +#line 590 "slghscan.l" { return scan_number(yytext,&yylval,true); } YY_BREAK case 92: YY_RULE_SETUP -#line 588 "slghscan.l" +#line 591 "slghscan.l" { return scan_number(yytext,&yylval,true); } YY_BREAK case 93: YY_RULE_SETUP -#line 589 "slghscan.l" +#line 592 "slghscan.l" { return scan_number(yytext,&yylval,true); } YY_BREAK case 94: YY_RULE_SETUP -#line 590 "slghscan.l" +#line 593 "slghscan.l" YY_BREAK case 95: /* rule 95 can match eol */ YY_RULE_SETUP -#line 591 "slghscan.l" +#line 594 "slghscan.l" { slgh->nextLine(); } YY_BREAK case 96: YY_RULE_SETUP -#line 592 "slghscan.l" +#line 595 "slghscan.l" { return yytext[0]; } YY_BREAK case 97: /* rule 97 can match eol */ YY_RULE_SETUP -#line 594 "slghscan.l" +#line 597 "slghscan.l" { slgh->nextLine(); BEGIN( preprocess(sem,preproc) ); } YY_BREAK case 98: YY_RULE_SETUP -#line 595 "slghscan.l" +#line 598 "slghscan.l" { preproc_macroexpand(); } YY_BREAK case 99: YY_RULE_SETUP -#line 596 "slghscan.l" +#line 599 "slghscan.l" { BEGIN(INITIAL); yylval.ch = yytext[0]; return yytext[0]; } YY_BREAK case 100: YY_RULE_SETUP -#line 597 "slghscan.l" +#line 600 "slghscan.l" { return OP_BOOL_OR; } YY_BREAK case 101: YY_RULE_SETUP -#line 598 "slghscan.l" +#line 601 "slghscan.l" { return OP_BOOL_AND; } YY_BREAK case 102: YY_RULE_SETUP -#line 599 "slghscan.l" +#line 602 "slghscan.l" { return OP_BOOL_XOR; } YY_BREAK case 103: YY_RULE_SETUP -#line 600 "slghscan.l" +#line 603 "slghscan.l" { return OP_RIGHT; } YY_BREAK case 104: YY_RULE_SETUP -#line 601 "slghscan.l" +#line 604 "slghscan.l" { return OP_LEFT; } YY_BREAK case 105: YY_RULE_SETUP -#line 602 "slghscan.l" +#line 605 "slghscan.l" { return OP_EQUAL; } YY_BREAK case 106: YY_RULE_SETUP -#line 603 "slghscan.l" +#line 606 "slghscan.l" { return OP_NOTEQUAL; } YY_BREAK case 107: YY_RULE_SETUP -#line 604 "slghscan.l" +#line 607 "slghscan.l" { return OP_LESSEQUAL; } YY_BREAK case 108: YY_RULE_SETUP -#line 605 "slghscan.l" +#line 608 "slghscan.l" { return OP_GREATEQUAL; } YY_BREAK case 109: YY_RULE_SETUP -#line 606 "slghscan.l" +#line 609 "slghscan.l" { return OP_SDIV; } YY_BREAK case 110: YY_RULE_SETUP -#line 607 "slghscan.l" +#line 610 "slghscan.l" { return OP_SREM; } YY_BREAK case 111: YY_RULE_SETUP -#line 608 "slghscan.l" +#line 611 "slghscan.l" { return OP_SRIGHT; } YY_BREAK case 112: YY_RULE_SETUP -#line 609 "slghscan.l" +#line 612 "slghscan.l" { return OP_SLESS; } YY_BREAK case 113: YY_RULE_SETUP -#line 610 "slghscan.l" +#line 613 "slghscan.l" { return OP_SGREAT; } YY_BREAK case 114: YY_RULE_SETUP -#line 611 "slghscan.l" +#line 614 "slghscan.l" { return OP_SLESSEQUAL; } YY_BREAK case 115: YY_RULE_SETUP -#line 612 "slghscan.l" +#line 615 "slghscan.l" { return OP_SGREATEQUAL; } YY_BREAK case 116: YY_RULE_SETUP -#line 613 "slghscan.l" +#line 616 "slghscan.l" { return OP_FADD; } YY_BREAK case 117: YY_RULE_SETUP -#line 614 "slghscan.l" +#line 617 "slghscan.l" { return OP_FSUB; } YY_BREAK case 118: YY_RULE_SETUP -#line 615 "slghscan.l" +#line 618 "slghscan.l" { return OP_FMULT; } YY_BREAK case 119: YY_RULE_SETUP -#line 616 "slghscan.l" +#line 619 "slghscan.l" { return OP_FDIV; } YY_BREAK case 120: YY_RULE_SETUP -#line 617 "slghscan.l" +#line 620 "slghscan.l" { return OP_FEQUAL; } YY_BREAK case 121: YY_RULE_SETUP -#line 618 "slghscan.l" +#line 621 "slghscan.l" { return OP_FNOTEQUAL; } YY_BREAK case 122: YY_RULE_SETUP -#line 619 "slghscan.l" +#line 622 "slghscan.l" { return OP_FLESS; } YY_BREAK case 123: YY_RULE_SETUP -#line 620 "slghscan.l" +#line 623 "slghscan.l" { return OP_FGREAT; } YY_BREAK case 124: YY_RULE_SETUP -#line 621 "slghscan.l" +#line 624 "slghscan.l" { return OP_FLESSEQUAL; } YY_BREAK case 125: YY_RULE_SETUP -#line 622 "slghscan.l" +#line 625 "slghscan.l" { return OP_FGREATEQUAL; } YY_BREAK case 126: YY_RULE_SETUP -#line 623 "slghscan.l" +#line 626 "slghscan.l" { return OP_ZEXT; } YY_BREAK case 127: YY_RULE_SETUP -#line 624 "slghscan.l" +#line 627 "slghscan.l" { return OP_CARRY; } YY_BREAK case 128: YY_RULE_SETUP -#line 625 "slghscan.l" +#line 628 "slghscan.l" { return OP_BORROW; } YY_BREAK case 129: YY_RULE_SETUP -#line 626 "slghscan.l" +#line 629 "slghscan.l" { return OP_SEXT; } YY_BREAK case 130: YY_RULE_SETUP -#line 627 "slghscan.l" +#line 630 "slghscan.l" { return OP_SCARRY; } YY_BREAK case 131: YY_RULE_SETUP -#line 628 "slghscan.l" +#line 631 "slghscan.l" { return OP_SBORROW; } YY_BREAK case 132: YY_RULE_SETUP -#line 629 "slghscan.l" +#line 632 "slghscan.l" { return OP_NAN; } YY_BREAK case 133: YY_RULE_SETUP -#line 630 "slghscan.l" +#line 633 "slghscan.l" { return OP_ABS; } YY_BREAK case 134: YY_RULE_SETUP -#line 631 "slghscan.l" +#line 634 "slghscan.l" { return OP_SQRT; } YY_BREAK case 135: YY_RULE_SETUP -#line 632 "slghscan.l" +#line 635 "slghscan.l" { return OP_CEIL; } YY_BREAK case 136: YY_RULE_SETUP -#line 633 "slghscan.l" +#line 636 "slghscan.l" { return OP_FLOOR; } YY_BREAK case 137: YY_RULE_SETUP -#line 634 "slghscan.l" +#line 637 "slghscan.l" { return OP_ROUND; } YY_BREAK case 138: YY_RULE_SETUP -#line 635 "slghscan.l" +#line 638 "slghscan.l" { return OP_INT2FLOAT; } YY_BREAK case 139: YY_RULE_SETUP -#line 636 "slghscan.l" +#line 639 "slghscan.l" { return OP_FLOAT2FLOAT; } YY_BREAK case 140: YY_RULE_SETUP -#line 637 "slghscan.l" +#line 640 "slghscan.l" { return OP_TRUNC; } YY_BREAK case 141: YY_RULE_SETUP -#line 638 "slghscan.l" +#line 641 "slghscan.l" { return OP_CPOOLREF; } YY_BREAK case 142: YY_RULE_SETUP -#line 639 "slghscan.l" +#line 642 "slghscan.l" { return OP_NEW; } YY_BREAK case 143: YY_RULE_SETUP -#line 640 "slghscan.l" +#line 643 "slghscan.l" { return OP_POPCOUNT; } YY_BREAK case 144: YY_RULE_SETUP -#line 641 "slghscan.l" +#line 644 "slghscan.l" { return IF_KEY; } YY_BREAK case 145: YY_RULE_SETUP -#line 642 "slghscan.l" +#line 645 "slghscan.l" { return GOTO_KEY; } YY_BREAK case 146: YY_RULE_SETUP -#line 643 "slghscan.l" +#line 646 "slghscan.l" { return CALL_KEY; } YY_BREAK case 147: YY_RULE_SETUP -#line 644 "slghscan.l" +#line 647 "slghscan.l" { return RETURN_KEY; } YY_BREAK case 148: YY_RULE_SETUP -#line 645 "slghscan.l" +#line 648 "slghscan.l" { return DELAYSLOT_KEY; } YY_BREAK case 149: YY_RULE_SETUP -#line 646 "slghscan.l" +#line 649 "slghscan.l" { return CROSSBUILD_KEY; } YY_BREAK case 150: YY_RULE_SETUP -#line 647 "slghscan.l" +#line 650 "slghscan.l" { return EXPORT_KEY; } YY_BREAK case 151: YY_RULE_SETUP -#line 648 "slghscan.l" +#line 651 "slghscan.l" { return BUILD_KEY; } YY_BREAK case 152: YY_RULE_SETUP -#line 649 "slghscan.l" +#line 652 "slghscan.l" { return LOCAL_KEY; } YY_BREAK case 153: YY_RULE_SETUP -#line 650 "slghscan.l" +#line 653 "slghscan.l" { yylval.ch = yytext[0]; return yytext[0]; } YY_BREAK case 154: YY_RULE_SETUP -#line 651 "slghscan.l" +#line 654 "slghscan.l" YY_BREAK case 155: YY_RULE_SETUP -#line 652 "slghscan.l" +#line 655 "slghscan.l" { return find_symbol(); } YY_BREAK case 156: YY_RULE_SETUP -#line 653 "slghscan.l" +#line 656 "slghscan.l" { return scan_number(yytext,&yylval,false); } YY_BREAK case 157: YY_RULE_SETUP -#line 654 "slghscan.l" +#line 657 "slghscan.l" { return scan_number(yytext,&yylval,false); } YY_BREAK case 158: YY_RULE_SETUP -#line 655 "slghscan.l" +#line 658 "slghscan.l" { return scan_number(yytext,&yylval,false); } YY_BREAK case 159: YY_RULE_SETUP -#line 656 "slghscan.l" +#line 659 "slghscan.l" YY_BREAK case 160: /* rule 160 can match eol */ YY_RULE_SETUP -#line 657 "slghscan.l" +#line 660 "slghscan.l" { slgh->nextLine(); } YY_BREAK case 161: YY_RULE_SETUP -#line 658 "slghscan.l" +#line 661 "slghscan.l" { return yytext[0]; } YY_BREAK case 162: /* rule 162 can match eol */ YY_RULE_SETUP -#line 660 "slghscan.l" +#line 663 "slghscan.l" { slgh->nextLine(); BEGIN( preprocess(preproc,preproc) ); } YY_BREAK case 163: /* rule 163 can match eol */ YY_RULE_SETUP -#line 661 "slghscan.l" +#line 664 "slghscan.l" { slgh->nextLine(); } YY_BREAK case YY_STATE_EOF(INITIAL): @@ -2467,11 +2473,11 @@ case YY_STATE_EOF(print): case YY_STATE_EOF(pattern): case YY_STATE_EOF(sem): case YY_STATE_EOF(preproc): -#line 663 "slghscan.l" -{ yy_delete_buffer( YY_CURRENT_BUFFER ); +#line 666 "slghscan.l" +{ yy_delete_buffer(YY_CURRENT_BUFFER ); if (filebuffers.empty()) yyterminate(); - yy_switch_to_buffer( filebuffers.back().lastbuffer ); + yy_switch_to_buffer(filebuffers.back().lastbuffer ); FILE *curfile = filebuffers.back().file; if (curfile != (FILE *)0) fclose(curfile); @@ -2481,10 +2487,10 @@ case YY_STATE_EOF(preproc): YY_BREAK case 164: YY_RULE_SETUP -#line 673 "slghscan.l" +#line 676 "slghscan.l" ECHO; YY_BREAK -#line 2473 "slghscan.cc" +#line 2479 "slghscan.cc" case YY_END_OF_BUFFER: { @@ -2560,7 +2566,7 @@ ECHO; { (yy_did_buffer_switch_on_eof) = 0; - if ( yywrap( ) ) + if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up @@ -2613,7 +2619,6 @@ ECHO; "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ - } /* end of user's declarations */ } /* end of yylex */ /* yy_get_next_buffer - try to read in a new buffer @@ -2625,9 +2630,9 @@ ECHO; */ static int yy_get_next_buffer (void) { - char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; - char *source = (yytext_ptr); - int number_to_move, i; + register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + register char *source = (yytext_ptr); + register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) @@ -2656,7 +2661,7 @@ static int yy_get_next_buffer (void) /* Try to read more data. */ /* First move last chars to start of buffer. */ - number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1); + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); @@ -2669,7 +2674,7 @@ static int yy_get_next_buffer (void) else { - int num_to_read = + yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) @@ -2683,7 +2688,7 @@ static int yy_get_next_buffer (void) if ( b->yy_is_our_buffer ) { - int new_size = b->yy_buf_size * 2; + yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; @@ -2692,12 +2697,11 @@ static int yy_get_next_buffer (void) b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ - yyrealloc( (void *) b->yy_ch_buf, - (yy_size_t) (b->yy_buf_size + 2) ); + yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ - b->yy_ch_buf = NULL; + b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( @@ -2725,7 +2729,7 @@ static int yy_get_next_buffer (void) if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; - yyrestart( yyin ); + yyrestart(yyin ); } else @@ -2739,15 +2743,12 @@ static int yy_get_next_buffer (void) else ret_val = EOB_ACT_CONTINUE_SCAN; - if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ - int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( - (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size ); + yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); - /* "- 2" to take care of EOB's */ - YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); } (yy_n_chars) += number_to_move; @@ -2763,15 +2764,15 @@ static int yy_get_next_buffer (void) static yy_state_type yy_get_previous_state (void) { - yy_state_type yy_current_state; - char *yy_cp; + register yy_state_type yy_current_state; + register char *yy_cp; yy_current_state = (yy_start); yy_current_state += YY_AT_BOL(); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { - YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; @@ -2781,9 +2782,9 @@ static int yy_get_next_buffer (void) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 527 ) - yy_c = yy_meta[yy_c]; + yy_c = yy_meta[(unsigned int) yy_c]; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; @@ -2796,10 +2797,10 @@ static int yy_get_next_buffer (void) */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { - int yy_is_jam; - char *yy_cp = (yy_c_buf_p); + register int yy_is_jam; + register char *yy_cp = (yy_c_buf_p); - YY_CHAR yy_c = 1; + register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; @@ -2809,19 +2810,17 @@ static int yy_get_next_buffer (void) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 527 ) - yy_c = yy_meta[yy_c]; + yy_c = yy_meta[(unsigned int) yy_c]; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 526); return yy_is_jam ? 0 : yy_current_state; } -#ifndef YY_NO_UNPUT - - static void yyunput (int c, char * yy_bp ) + static void yyunput (int c, register char * yy_bp ) { - char *yy_cp; + register char *yy_cp; yy_cp = (yy_c_buf_p); @@ -2831,10 +2830,10 @@ static int yy_get_next_buffer (void) if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ - int number_to_move = (yy_n_chars) + 2; - char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + register yy_size_t number_to_move = (yy_n_chars) + 2; + register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; - char *source = + register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) @@ -2843,7 +2842,7 @@ static int yy_get_next_buffer (void) yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = - (yy_n_chars) = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); @@ -2856,8 +2855,6 @@ static int yy_get_next_buffer (void) (yy_c_buf_p) = yy_cp; } -#endif - #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void) @@ -2882,7 +2879,7 @@ static int yy_get_next_buffer (void) else { /* need more input */ - int offset = (int) ((yy_c_buf_p) - (yytext_ptr)); + yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) @@ -2899,14 +2896,14 @@ static int yy_get_next_buffer (void) */ /* Reset buffer status. */ - yyrestart( yyin ); + yyrestart(yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { - if ( yywrap( ) ) - return 0; + if ( yywrap( ) ) + return EOF; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; @@ -2945,11 +2942,11 @@ static int yy_get_next_buffer (void) if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer( yyin, YY_BUF_SIZE ); + yy_create_buffer(yyin,YY_BUF_SIZE ); } - yy_init_buffer( YY_CURRENT_BUFFER, input_file ); - yy_load_buffer_state( ); + yy_init_buffer(YY_CURRENT_BUFFER,input_file ); + yy_load_buffer_state( ); } /** Switch to a different input buffer. @@ -2977,7 +2974,7 @@ static int yy_get_next_buffer (void) } YY_CURRENT_BUFFER_LVALUE = new_buffer; - yy_load_buffer_state( ); + yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag @@ -3005,7 +3002,7 @@ static void yy_load_buffer_state (void) { YY_BUFFER_STATE b; - b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); + b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); @@ -3014,13 +3011,13 @@ static void yy_load_buffer_state (void) /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ - b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) ); + b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; - yy_init_buffer( b, file ); + yy_init_buffer(b,file ); return b; } @@ -3039,9 +3036,9 @@ static void yy_load_buffer_state (void) YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) - yyfree( (void *) b->yy_ch_buf ); + yyfree((void *) b->yy_ch_buf ); - yyfree( (void *) b ); + yyfree((void *) b ); } /* Initializes or reinitializes a buffer. @@ -3053,7 +3050,7 @@ static void yy_load_buffer_state (void) { int oerrno = errno; - yy_flush_buffer( b ); + yy_flush_buffer(b ); b->yy_input_file = file; b->yy_fill_buffer = 1; @@ -3096,7 +3093,7 @@ static void yy_load_buffer_state (void) b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) - yy_load_buffer_state( ); + yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes @@ -3127,7 +3124,7 @@ void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ - yy_load_buffer_state( ); + yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } @@ -3146,7 +3143,7 @@ void yypop_buffer_state (void) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { - yy_load_buffer_state( ); + yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } @@ -3164,15 +3161,15 @@ static void yyensure_buffer_stack (void) * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ - num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); - + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); - + (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; @@ -3181,7 +3178,7 @@ static void yyensure_buffer_stack (void) if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ - yy_size_t grow_size = 8 /* arbitrary grow size */; + int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc @@ -3201,7 +3198,7 @@ static void yyensure_buffer_stack (void) * @param base the character buffer * @param size the size in bytes of the character buffer * - * @return the newly allocated buffer state object. + * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) { @@ -3211,23 +3208,23 @@ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ - return NULL; + return 0; - b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); + b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); - b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; - b->yy_input_file = NULL; + b->yy_input_file = 0; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; - yy_switch_to_buffer( b ); + yy_switch_to_buffer(b ); return b; } @@ -3240,10 +3237,10 @@ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) * @note If you want to scan bytes that may contain NUL values, then use * yy_scan_bytes() instead. */ -YY_BUFFER_STATE yy_scan_string (const char * yystr ) +YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) { - return yy_scan_bytes( yystr, (int) strlen(yystr) ); + return yy_scan_bytes(yystr,strlen(yystr) ); } /** Setup the input buffer state to scan the given bytes. The next call to yylex() will @@ -3253,7 +3250,7 @@ YY_BUFFER_STATE yy_scan_string (const char * yystr ) * * @return the newly allocated buffer state object. */ -YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len ) +YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len ) { YY_BUFFER_STATE b; char *buf; @@ -3261,8 +3258,8 @@ YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len ) int i; /* Get memory for full buffer, including space for trailing EOB's. */ - n = (yy_size_t) (_yybytes_len + 2); - buf = (char *) yyalloc( n ); + n = _yybytes_len + 2; + buf = (char *) yyalloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); @@ -3271,7 +3268,7 @@ YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len ) buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; - b = yy_scan_buffer( buf, n ); + b = yy_scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); @@ -3287,9 +3284,9 @@ YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len ) #define YY_EXIT_FAILURE 2 #endif -static void yynoreturn yy_fatal_error (const char* msg ) +static void yy_fatal_error (yyconst char* msg ) { - fprintf( stderr, "%s\n", msg ); + (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } @@ -3317,7 +3314,7 @@ static void yynoreturn yy_fatal_error (const char* msg ) */ int yyget_lineno (void) { - + return yylineno; } @@ -3340,7 +3337,7 @@ FILE *yyget_out (void) /** Get the length of the current token. * */ -int yyget_leng (void) +yy_size_t yyget_leng (void) { return yyleng; } @@ -3355,29 +3352,29 @@ char *yyget_text (void) } /** Set the current line number. - * @param _line_number line number + * @param line_number * */ -void yyset_lineno (int _line_number ) +void yyset_lineno (int line_number ) { - yylineno = _line_number; + yylineno = line_number; } /** Set the input stream. This does not discard the current * input buffer. - * @param _in_str A readable stream. + * @param in_str A readable stream. * * @see yy_switch_to_buffer */ -void yyset_in (FILE * _in_str ) +void yyset_in (FILE * in_str ) { - yyin = _in_str ; + yyin = in_str ; } -void yyset_out (FILE * _out_str ) +void yyset_out (FILE * out_str ) { - yyout = _out_str ; + yyout = out_str ; } int yyget_debug (void) @@ -3385,9 +3382,9 @@ int yyget_debug (void) return yy_flex_debug; } -void yyset_debug (int _bdebug ) +void yyset_debug (int bdebug ) { - yy_flex_debug = _bdebug ; + yy_flex_debug = bdebug ; } static int yy_init_globals (void) @@ -3396,10 +3393,10 @@ static int yy_init_globals (void) * This function is called from yylex_destroy(), so don't allocate here. */ - (yy_buffer_stack) = NULL; + (yy_buffer_stack) = 0; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; - (yy_c_buf_p) = NULL; + (yy_c_buf_p) = (char *) 0; (yy_init) = 0; (yy_start) = 0; @@ -3408,8 +3405,8 @@ static int yy_init_globals (void) yyin = stdin; yyout = stdout; #else - yyin = NULL; - yyout = NULL; + yyin = (FILE *) 0; + yyout = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by @@ -3424,7 +3421,7 @@ int yylex_destroy (void) /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ - yy_delete_buffer( YY_CURRENT_BUFFER ); + yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; yypop_buffer_state(); } @@ -3445,19 +3442,18 @@ int yylex_destroy (void) */ #ifndef yytext_ptr -static void yy_flex_strncpy (char* s1, const char * s2, int n ) +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { - - int i; + register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN -static int yy_flex_strlen (const char * s ) +static int yy_flex_strlen (yyconst char * s ) { - int n; + register int n; for ( n = 0; s[n]; ++n ) ; @@ -3467,12 +3463,11 @@ static int yy_flex_strlen (const char * s ) void *yyalloc (yy_size_t size ) { - return malloc(size); + return (void *) malloc( size ); } void *yyrealloc (void * ptr, yy_size_t size ) { - /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter @@ -3480,14 +3475,14 @@ void *yyrealloc (void * ptr, yy_size_t size ) * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ - return realloc(ptr, size); + return (void *) realloc( (char *) ptr, size ); } void yyfree (void * ptr ) { - free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" -#line 673 "slghscan.l" +#line 676 "slghscan.l" diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/slghscan.l b/Ghidra/Features/Decompiler/src/decompile/cpp/slghscan.l index 35210a9c0d..2df137019f 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/slghscan.l +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/slghscan.l @@ -429,6 +429,9 @@ int4 find_symbol(void) { case SleighSymbol::end_symbol: yylval.endsym = (EndSymbol *)sym; return ENDSYM; + case SleighSymbol::next2_symbol: + yylval.next2sym = (Next2Symbol *)sym; + return NEXT2SYM; case SleighSymbol::subtable_symbol: yylval.subtablesym = (SubtableSymbol *)sym; return SUBTABLESYM; diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/slghsymbol.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/slghsymbol.cc index 5f4a8fe323..dbb8f9e51c 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/slghsymbol.cc +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/slghsymbol.cc @@ -252,6 +252,8 @@ void SymbolTable::restoreSymbolHeader(const Element *el) sym = new StartSymbol(); else if (el->getName() == "end_sym_head") sym = new EndSymbol(); + else if (el->getName() == "next2_sym_head") + sym = new Next2Symbol(); else if (el->getName() == "subtable_sym_head") sym = new SubtableSymbol(); else if (el->getName() == "flowdest_sym_head") @@ -1254,6 +1256,70 @@ void EndSymbol::restoreXml(const Element *el,SleighBase *trans) patexp->layClaim(); } +Next2Symbol::Next2Symbol(const string &nm,AddrSpace *cspc) : SpecificSymbol(nm) + +{ + const_space = cspc; + patexp = new Next2InstructionValue(); + patexp->layClaim(); +} + +Next2Symbol::~Next2Symbol(void) + +{ + if (patexp != (PatternExpression *)0) + PatternExpression::release(patexp); +} + +VarnodeTpl *Next2Symbol::getVarnode(void) const + +{ // Return instruction offset after next instruction offset as a constant + ConstTpl spc(const_space); + ConstTpl off(ConstTpl::j_next2); + ConstTpl sz_zero; + return new VarnodeTpl(spc,off,sz_zero); +} + +void Next2Symbol::getFixedHandle(FixedHandle &hand,ParserWalker &walker) const + +{ + hand.space = walker.getCurSpace(); + hand.offset_space = (AddrSpace *)0; + hand.offset_offset = walker.getN2addr().getOffset(); // Get instruction address after next instruction + hand.size = hand.space->getAddrSize(); +} + +void Next2Symbol::print(ostream &s,ParserWalker &walker) const + +{ + intb val = (intb) walker.getN2addr().getOffset(); + s << "0x" << hex << val; +} + +void Next2Symbol::saveXml(ostream &s) const + +{ + s << "\n"; +} + +void Next2Symbol::saveXmlHeader(ostream &s) const + +{ + s << "\n"; +} + +void Next2Symbol::restoreXml(const Element *el,SleighBase *trans) + +{ + const_space = trans->getConstantSpace(); + patexp = new Next2InstructionValue(); + patexp->layClaim(); +} + FlowDestSymbol::FlowDestSymbol(const string &nm,AddrSpace *cspc) : SpecificSymbol(nm) { diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/slghsymbol.hh b/Ghidra/Features/Decompiler/src/decompile/cpp/slghsymbol.hh index 11aafca1be..82d95ffeff 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/slghsymbol.hh +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/slghsymbol.hh @@ -25,7 +25,7 @@ class SleighSymbol { public: enum symbol_type { space_symbol, token_symbol, userop_symbol, value_symbol, valuemap_symbol, name_symbol, varnode_symbol, varnodelist_symbol, operand_symbol, - start_symbol, end_symbol, subtable_symbol, macro_symbol, section_symbol, + start_symbol, end_symbol, next2_symbol, subtable_symbol, macro_symbol, section_symbol, bitrange_symbol, context_symbol, epsilon_symbol, label_symbol, dummy_symbol }; private: @@ -391,6 +391,23 @@ public: virtual void restoreXml(const Element *el,SleighBase *trans); }; +class Next2Symbol : public SpecificSymbol { + AddrSpace *const_space; + PatternExpression *patexp; +public: + Next2Symbol(void) { patexp = (PatternExpression *)0; } // For use with restoreXml + Next2Symbol(const string &nm,AddrSpace *cspc); + virtual ~Next2Symbol(void); + virtual VarnodeTpl *getVarnode(void) const; + virtual PatternExpression *getPatternExpression(void) const { return patexp; } + virtual void getFixedHandle(FixedHandle &hand,ParserWalker &walker) const; + virtual void print(ostream &s,ParserWalker &walker) const; + virtual symbol_type getType(void) const { return next2_symbol; } + virtual void saveXml(ostream &s) const; + virtual void saveXmlHeader(ostream &s) const; + virtual void restoreXml(const Element *el,SleighBase *trans); +}; + class FlowDestSymbol : public SpecificSymbol { AddrSpace *const_space; public: diff --git a/Ghidra/Features/Decompiler/src/main/doc/cspec.xml b/Ghidra/Features/Decompiler/src/main/doc/cspec.xml index 76c071fa53..98af480794 100644 --- a/Ghidra/Features/Decompiler/src/main/doc/cspec.xml +++ b/Ghidra/Features/Decompiler/src/main/doc/cspec.xml @@ -506,8 +506,8 @@ parameters in the actual p-code operation, or an exception will be thrown during As with a <callfixup>, the <body> tag is fed straight to the SLEIGH semantic parser. It can refer to registers via their symbolic name defined in SLEIGH, it can refer to the operator parameters via their <input> or <output> names, and it can also refer to -inst_start and inst_next as addresses describing the instruction containing the -CALLOTHER. +inst_start, inst_next and inst_next2 as addresses describing the instruction +containing the CALLOTHER. diff --git a/Ghidra/Features/Decompiler/src/main/doc/sleigh.xml b/Ghidra/Features/Decompiler/src/main/doc/sleigh.xml index c60683a52f..03a8753ff3 100644 --- a/Ghidra/Features/Decompiler/src/main/doc/sleigh.xml +++ b/Ghidra/Features/Decompiler/src/main/doc/sleigh.xml @@ -1006,6 +1006,10 @@ We list all of the symbols that are predefined by SLEIGH. inst_next Offset of the address of the next instruction. + + inst_next2 + Offset of the address of the instruction after the next instruction. + epsilon A special identifier indicating an empty bit pattern. @@ -1019,7 +1023,8 @@ and inst_next. These are family symbols which map in the context of particular instruction to the integer offset of either the address of the instruction or the address of the next instruction respectively. These are used in any relative branching -situation. The other symbols are rarely +situation. The inst_next2 is intended for conditional +skip instruction situations. The remaining symbols are rarely used. The const and unique identifiers are address spaces. The epsilon identifier is inherited from SLED and is a specific symbol equivalent @@ -2868,6 +2873,26 @@ the BRANCH, CBRANCH, or CALL operation. + +Skip Instruction Branching +> +Many processors have a conditional-skip-instruction which must branch over the next instruction +based upon some condition. The inst_next2 symbol has been provided for +this purpose. + + +:skip.eq is opcode=10 { + if (zeroflag!=0) goto inst_next2; +} + + + + +In the example above, the branch address will be determined by adding the parsed-length of the next +instruction to the value of inst_next causing a branch over the next +instruction when the condition is satisfied. + + Bit Range Assignments @@ -3439,7 +3464,8 @@ by the condition. Because the delayslot directive combines two or more instructions into one, the meaning of the -symbol inst_next becomes ambiguous. It is not +symbol inst_next and inst_next2 +become ambiguous. It is not clear anymore what exactly the “next instruction” is. SLEIGH uses the following conventions for interpreting an inst_next symbol. If it is used in the @@ -3447,7 +3473,11 @@ semantic section, the symbol refers to the address of the instruction after any instructions in the delay slot. However, if it is used in a disassembly action, the inst_next symbol refers to the address of the instruction immediately after the first -instruction, even if there is a delay slot. +instruction, even if there is a delay slot. The use of +the inst_next2 symbol may be inappropriate in +conjunction with delayslot use. While the next instruction address +is identified by inst_next, the length of the +next instruction ignores any delayslots it may have. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/antlr/ghidra/sleigh/grammar/SleighCompiler.g b/Ghidra/Framework/SoftwareModeling/src/main/antlr/ghidra/sleigh/grammar/SleighCompiler.g index 45f4069e5f..36418efda9 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/antlr/ghidra/sleigh/grammar/SleighCompiler.g +++ b/Ghidra/Framework/SoftwareModeling/src/main/antlr/ghidra/sleigh/grammar/SleighCompiler.g @@ -349,9 +349,10 @@ specific_symbol[String purpose] returns [SpecificSymbol symbol] : ^(OP_IDENTIFIER s=.) { SleighSymbol sym = pcode.findSymbol($s.getText()); if (sym == null) { - unknownSymbolError($s.getText(), find($s), "start, end, operand, epsilon, or varnode", purpose); + unknownSymbolError($s.getText(), find($s), "start, end, next2, operand, epsilon, or varnode", purpose); } else if(sym.getType() != symbol_type.start_symbol && sym.getType() != symbol_type.end_symbol + && sym.getType() != symbol_type.next2_symbol && sym.getType() != symbol_type.operand_symbol && sym.getType() != symbol_type.epsilon_symbol && sym.getType() != symbol_type.varnode_symbol) { @@ -839,7 +840,7 @@ pattern_symbol[String purpose] returns [PatternExpression expr] : ^(OP_IDENTIFIER s=.) { SleighSymbol sym = sc.findSymbol($s.getText()); if (sym == null) { - unknownSymbolError($s.getText(), find($s), "start, end, operand, epsilon, or varnode", purpose); + unknownSymbolError($s.getText(), find($s), "start, end, next2, operand, epsilon, or varnode", purpose); } else if(sym.getType() == symbol_type.operand_symbol) { OperandSymbol os = (OperandSymbol) sym; if (os.getDefiningSymbol() != null && os.getDefiningSymbol().getType() == symbol_type.subtable_symbol) { @@ -848,6 +849,7 @@ pattern_symbol[String purpose] returns [PatternExpression expr] $expr = os.getPatternExpression(); } else if(sym.getType() == symbol_type.start_symbol || sym.getType() == symbol_type.end_symbol + || sym.getType() == symbol_type.next2_symbol || sym.getType() == symbol_type.epsilon_symbol || sym.getType() == symbol_type.varnode_symbol) { SpecificSymbol ss = (SpecificSymbol) sym; @@ -864,7 +866,7 @@ pattern_symbol[String purpose] returns [PatternExpression expr] reportError(find($s), "Global symbol '" + sym.getName() + "' is not allowed in action expression"); } } else { - wrongSymbolTypeError(sym, find($s), "start, end, operand, epsilon, or varnode", purpose); + wrongSymbolTypeError(sym, find($s), "start, end, next2, operand, epsilon, or varnode", purpose); } } | t=OP_WILDCARD { @@ -877,9 +879,10 @@ pattern_symbol2[String purpose] returns [PatternExpression expr] : ^(OP_IDENTIFIER s=.) { SleighSymbol sym = sc.findSymbol($s.getText()); if (sym == null) { - unknownSymbolError($s.getText(), find($s), "start, end, operand, epsilon, or varnode", purpose); + unknownSymbolError($s.getText(), find($s), "start, end, next2, operand, epsilon, or varnode", purpose); } else if(sym.getType() == symbol_type.start_symbol || sym.getType() == symbol_type.end_symbol + || sym.getType() == symbol_type.next2_symbol || sym.getType() == symbol_type.operand_symbol || sym.getType() == symbol_type.epsilon_symbol || sym.getType() == symbol_type.varnode_symbol) { @@ -893,7 +896,7 @@ pattern_symbol2[String purpose] returns [PatternExpression expr] FamilySymbol z = (FamilySymbol) sym; $expr = z.getPatternValue(); } else { - wrongSymbolTypeError(sym, find($s), "start, end, operand, epsilon, or varnode", purpose); + wrongSymbolTypeError(sym, find($s), "start, end, next2, operand, epsilon, or varnode", purpose); } } | t=OP_WILDCARD { @@ -922,7 +925,7 @@ cstatement[VectorSTL r] } else if(sym.getType() == symbol_type.context_symbol) { ContextSymbol t = (ContextSymbol) sym; if (!sc.contextMod(r, t, e)) { - reportError(find($id), "Cannot use 'inst_next' to set context variable: '" + t.getName() + "'"); + reportError(find($id), "Cannot use 'inst_next' or 'inst_next2' to set context variable: '" + t.getName() + "'"); } } else if(sym.getType() == symbol_type.operand_symbol) { OperandSymbol t = (OperandSymbol) sym; @@ -950,6 +953,7 @@ cstatement[VectorSTL r] || sym.getType() == symbol_type.varnodelist_symbol || sym.getType() == symbol_type.start_symbol || sym.getType() == symbol_type.end_symbol + || sym.getType() == symbol_type.next2_symbol || sym.getType() == symbol_type.operand_symbol || sym.getType() == symbol_type.epsilon_symbol || sym.getType() == symbol_type.varnode_symbol) { @@ -1176,10 +1180,11 @@ assignment returns [VectorSTL value] $value = pcode.newOutput(find(id), false, e, $id.getText()); } else if(sym.getType() != symbol_type.start_symbol && sym.getType() != symbol_type.end_symbol + && sym.getType() != symbol_type.next2_symbol && sym.getType() != symbol_type.operand_symbol && sym.getType() != symbol_type.epsilon_symbol && sym.getType() != symbol_type.varnode_symbol) { - wrongSymbolTypeError(sym, find(id), "start, end, operand, epsilon, or varnode", "assignment"); + wrongSymbolTypeError(sym, find(id), "start, end, next2, operand, epsilon, or varnode", "assignment"); } else { VarnodeTpl v = ((SpecificSymbol) sym).getVarnode(); e.setOutput(find(t), v); @@ -1309,7 +1314,9 @@ jump_symbol[String purpose] returns [VarnodeTpl value] SleighSymbol sym = pcode.findSymbol($s.getText()); if (sym == null) { unknownSymbolError($s.getText(), find($s), "start, end, or operand", purpose); - } else if(sym.getType() == symbol_type.start_symbol || sym.getType() == symbol_type.end_symbol) { + } else if (sym.getType() == symbol_type.start_symbol || + sym.getType() == symbol_type.end_symbol || + sym.getType() == symbol_type.next2_symbol) { SpecificSymbol ss = (SpecificSymbol) sym; $value = new VarnodeTpl(find($s), new ConstTpl(ConstTpl.const_type.j_curspace), ss.getVarnode().getOffset(), @@ -1489,6 +1496,7 @@ expr_apply returns [Object value] } } else if(sym.getType() == symbol_type.start_symbol || sym.getType() == symbol_type.end_symbol + || sym.getType() == symbol_type.next2_symbol || sym.getType() == symbol_type.operand_symbol || sym.getType() == symbol_type.epsilon_symbol || sym.getType() == symbol_type.varnode_symbol) { diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/SleighAssemblerBuilder.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/SleighAssemblerBuilder.java index 2c1612ecc4..077b694b14 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/SleighAssemblerBuilder.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/SleighAssemblerBuilder.java @@ -573,6 +573,10 @@ public class SleighAssemblerBuilder implements AssemblerBuilder { else if (sym instanceof EndSymbol) { // Ignore. We handle inst_next in semantic processing } + + else if (sym instanceof Next2Symbol) { + // Ignore. We handle inst_next2 in semantic processing + } else if (sym instanceof UseropSymbol) { // Ignore. We don't do pcode. } diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/Next2InstructionValueSolver.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/Next2InstructionValueSolver.java new file mode 100644 index 0000000000..48e2185250 --- /dev/null +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/Next2InstructionValueSolver.java @@ -0,0 +1,77 @@ +/* ### + * IP: GHIDRA + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package ghidra.app.plugin.assembler.sleigh.expr; + +import java.util.Map; +import java.util.Set; + +import ghidra.app.plugin.assembler.sleigh.sem.*; +import ghidra.app.plugin.processors.sleigh.expression.EndInstructionValue; + +/** + * "Solves" expressions of {@code inst_next2} + * + *

+ * Works like the constant solver, but takes the value of {@code inst_next}, which is given by the + * assembly address and the resulting instruction length. + * + *

+ * NOTE: This solver requires backfill, since the value of {@code inst_next2} is not known + * until possible prefixes have been considered. + */ +public class Next2InstructionValueSolver extends AbstractExpressionSolver { + + public Next2InstructionValueSolver() { + super(EndInstructionValue.class); + } + + @Override + public AssemblyResolution solve(EndInstructionValue iv, MaskedLong goal, Map vals, + AssemblyResolvedPatterns cur, Set hints, String description) { + throw new AssertionError( + "INTERNAL: Should never be asked to solve for " + AssemblyTreeResolver.INST_NEXT2); + } + + @Override + public MaskedLong getValue(EndInstructionValue iv, Map vals, + AssemblyResolvedPatterns cur) throws NeedsBackfillException { + Long instNext = vals.get(AssemblyTreeResolver.INST_NEXT2); + if (instNext == null) { + throw new NeedsBackfillException(AssemblyTreeResolver.INST_NEXT2); + } + return MaskedLong.fromLong(instNext); + } + + @Override + public int getInstructionLength(EndInstructionValue iv) { + return 0; + } + + @Override + public MaskedLong valueForResolution(EndInstructionValue exp, Map vals, + AssemblyResolvedPatterns rc) { + Long instNext = vals.get(AssemblyTreeResolver.INST_NEXT2); + if (instNext == null) { + /** + * This method is used in forward state construction, so just leave unknown. This may + * cause unresolvable trees to get generated, but we can't know that until we try to + * resolve them. + */ + return MaskedLong.UNKS; + } + return MaskedLong.fromLong(instNext); + } +} diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/RecursiveDescentSolver.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/RecursiveDescentSolver.java index 1f7df75fef..d706cd33ae 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/RecursiveDescentSolver.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/RecursiveDescentSolver.java @@ -53,6 +53,7 @@ public class RecursiveDescentSolver { new ContextFieldSolver().register(this); new DivExpressionSolver().register(this); new EndInstructionValueSolver().register(this); + new Next2InstructionValueSolver().register(this); new LeftShiftExpressionSolver().register(this); new MinusExpressionSolver().register(this); new MultExpressionSolver().register(this); diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/match/AbstractExpressionMatcher.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/match/AbstractExpressionMatcher.java index 203e9ffde9..a9f6455bf9 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/match/AbstractExpressionMatcher.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/match/AbstractExpressionMatcher.java @@ -78,6 +78,9 @@ public abstract class AbstractExpressionMatcher if (a instanceof EndInstructionValue) { return true; } + if (a instanceof Next2InstructionValue) { + return true; + } if (a instanceof StartInstructionValue) { return true; } diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyTreeResolver.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyTreeResolver.java index 6e7e11afd8..a3f0e2ce9a 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyTreeResolver.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyTreeResolver.java @@ -54,6 +54,7 @@ public class AssemblyTreeResolver { public static final String INST_START = "inst_start"; public static final String INST_NEXT = "inst_next"; + public static final String INST_NEXT2 = "inst_next2"; protected final SleighLanguage lang; protected final Address at; @@ -195,6 +196,8 @@ public class AssemblyTreeResolver { return rc; } vals.put(INST_NEXT, at.add(rc.getInstructionLength()).getAddressableWordOffset()); + // inst_next2 use not really supported + vals.put(INST_NEXT2, at.add(rc.getInstructionLength()).getAddressableWordOffset()); DBG.println("Backfilling: " + rc); AssemblyResolution ar = rc.backfill(SOLVER, vals); DBG.println("Backfilled final: " + ar); diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/ParserWalker.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/ParserWalker.java index a1331c21ca..0f2cc7d104 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/ParserWalker.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/ParserWalker.java @@ -210,6 +210,12 @@ public class ParserWalker { return context.getNaddr(); } + public Address getN2addr() { + if (cross_context != null) + return cross_context.getN2addr(); + return context.getN2addr(); + } + public AddressSpace getCurSpace() { return context.getCurSpace(); } diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java index c4a2d26416..05768583f9 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java @@ -246,7 +246,7 @@ public abstract class PcodeEmit { if (opcode == PcodeOp.BRANCH) { int offsetType = inputs[0].getOffset().getType(); if (offsetType == ConstTpl.J_RELATIVE || offsetType == ConstTpl.J_START || - offsetType == ConstTpl.J_NEXT) { + offsetType == ConstTpl.J_NEXT || offsetType == ConstTpl.J_NEXT2) { return false; } OpTpl callopt = new OpTpl(PcodeOp.CALL, null, inputs); @@ -269,7 +269,7 @@ public abstract class PcodeEmit { else if (opcode == PcodeOp.CBRANCH) { int offsetType = inputs[0].getOffset().getType(); if (offsetType == ConstTpl.J_RELATIVE || offsetType == ConstTpl.J_START || - offsetType == ConstTpl.J_NEXT) { + offsetType == ConstTpl.J_NEXT || offsetType == ConstTpl.J_NEXT2) { return false; } @@ -326,7 +326,7 @@ public abstract class PcodeEmit { if (opcode == PcodeOp.BRANCH || opcode == PcodeOp.CALL) { int offsetType = inputs[0].getOffset().getType(); if (offsetType == ConstTpl.J_RELATIVE || offsetType == ConstTpl.J_START || - offsetType == ConstTpl.J_NEXT) { + offsetType == ConstTpl.J_NEXT || offsetType == ConstTpl.J_NEXT2) { return false; } diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java index 7ec62bf239..c567c1fa42 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java @@ -89,7 +89,6 @@ public class SleighInstructionPrototype implements InstructionPrototype { private final static Address[] emptyFlow = new Address[0]; private ContextCache contextCache; -// private InstructionContext instructionContextCache; private int length; private ConstructState rootState; private ConstructState mnemonicState; // state for print mnemonic @@ -236,6 +235,9 @@ public class SleighInstructionPrototype implements InstructionPrototype { if (destType == ConstTpl.J_NEXT) { flags = BRANCH_TO_END; } + else if (destType == ConstTpl.J_NEXT2) { + flags = JUMPOUT; + } else if ((destType != ConstTpl.J_START) && (destType != ConstTpl.J_RELATIVE)) { flags = JUMPOUT; } @@ -674,6 +676,9 @@ public class SleighInstructionPrototype implements InstructionPrototype { Address addr = getHandleAddr(hand, parsecontext.getAddr().getAddressSpace()); res.add(addr); } + else if (rec.op.getInput()[0].getOffset().getType() == ConstTpl.J_NEXT2) { + res.add(parsecontext.getN2addr()); + } } } } diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighParserContext.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighParserContext.java index b4603190a9..6949072495 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighParserContext.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighParserContext.java @@ -21,8 +21,7 @@ import ghidra.app.plugin.processors.sleigh.symbol.OperandSymbol; import ghidra.app.plugin.processors.sleigh.symbol.TripleSymbol; import ghidra.program.model.address.*; import ghidra.program.model.lang.*; -import ghidra.program.model.mem.MemBuffer; -import ghidra.program.model.mem.MemoryAccessException; +import ghidra.program.model.mem.*; /** * @@ -33,8 +32,9 @@ import ghidra.program.model.mem.MemoryAccessException; public class SleighParserContext implements ParserContext { private MemBuffer memBuffer; - private Address addr; // Address of start of instruction - private Address nextInstrAddr; // Address of next instruction + private Address addr; // Address of start of instruction (inst_start) + private Address nextInstrAddr; // Address of next instruction (inst_next) + private Address next2InstAddr; // Address of instruction after next instruction (inst_next2) private Address refAddr; // corresponds to inst_ref for call-fixup use private Address destAddr; // corresponds to inst_dest for call-fixup use private SleighInstructionPrototype prototype; @@ -71,7 +71,8 @@ public class SleighParserContext implements ParserContext { } /** - * Constructor for building precompiled templates + * Constructor for building precompiled templates. + * NOTE: This form does not support use of inst_next2. * @param aAddr = address to which 'inst_start' resolves * @param nAddr = address to which 'inst_next' resolves * @param rAddr = special address associated with original call @@ -172,22 +173,99 @@ public class SleighParserContext implements ParserContext { return handle; } + /** + * get address of current instruction + * @return address of current instruction + */ public Address getAddr() { return addr; } + /** + * Get address of instruction after current instruction. This may return null if this context + * instance does not support use of {@code inst_next} or next address falls beyond end of + * address space. + * @return address of next instruction or null + */ public Address getNaddr() { return nextInstrAddr; } + /** + * Get address of instruction after the next instruction. This may return {@link #getNaddr()} + * if this context instance does not support use of {@code inst_next2} or parse of next + * instruction fails. + * @return address of instruction after the next instruction or null + */ + public Address getN2addr() { + if (next2InstAddr != null) { + return next2InstAddr; + } + next2InstAddr = computeNext2Address(); + if (next2InstAddr == null) { + // unsupported use of inst_next2 or parse failure on next instruction + // returns same as inst_next + next2InstAddr = nextInstrAddr; + } + return next2InstAddr; + } + + /** + * Return the address after the next instruction (inst_next2). The length of next instruction + * based on attempted parse of next instruction and does not consider any delayslot use. + * The current instructions context is used during the parse. + * @return address after the next instruction or null if unable/failed to determine + */ + private Address computeNext2Address() { + if (memBuffer == null || nextInstrAddr == null) { + return null; // not supported without memBuffer for parse + } + try { + Address nextAddr = nextInstrAddr; + Language language = prototype.getLanguage(); + + // limitation: assumes same context as current instruction + ProcessorContextImpl ctx = new ProcessorContextImpl(language); + RegisterValue ctxVal = getContextRegisterValue(); + if (ctxVal != null) { + ctx.setRegisterValue(ctxVal); + } + + int offset = (int) nextAddr.subtract(addr); + MemBuffer nearbymem = new WrappedMemBuffer(memBuffer, offset); + + SleighInstructionPrototype proto = + (SleighInstructionPrototype) language.parse(nearbymem, ctx, true); + + return nextAddr.addNoWrap(proto.getLength()); + } + catch (Exception e) { + // ignore + } + return null; + } + + /** + * Get address space containing current instruction + * @return address space containing current instruction + */ public AddressSpace getCurSpace() { return addr.getAddressSpace(); } + /** + * Get constant address space + * @return constant address space + */ public AddressSpace getConstSpace() { return constantSpace; } + /** + * Get memory buffer for current instruction which may also be used to parse next instruction + * or delay slot instructions. + * @return memory buffer for current instruction + */ public MemBuffer getMemBuffer() { return memBuffer; } @@ -251,6 +329,44 @@ public class SleighParserContext implements ParserContext { return res; } + /** + * Get the processor context value as a RegisterValue + * @return processor context value + */ + public RegisterValue getContextRegisterValue() { + + Register baseContextRegister = prototype.getLanguage().getContextBaseRegister(); + if (baseContextRegister == null) { + return null; + } + + // convert context int words to byte array for RegisterValue use + int ctxByteLen = baseContextRegister.getMinimumByteSize(); + byte[] ctxValueBytes = new byte[ctxByteLen]; + + for (int i = 0; i < context.length; i++) { + int word = context[i]; + for (int n = 3; n >= 0; --n) { + int byteIndex = (i * 4) + n; + setByte(ctxValueBytes, byteIndex, (byte) word); + word >>= 8; + } + } + + // append mask to value array for RegisterValue use + byte[] ctxValueMaskBytes = new byte[2 * ctxByteLen]; + Arrays.fill(ctxValueMaskBytes, 0, ctxByteLen, (byte) 0xff); + System.arraycopy(ctxValueBytes, 0, ctxValueMaskBytes, ctxByteLen, ctxByteLen); + + return new RegisterValue(baseContextRegister, ctxValueMaskBytes); + } + + private void setByte(byte[] bytes, int index, byte b) { + if (index < bytes.length) { + bytes[index] = b; + } + } + /** * Get bytes from context into an int * @param bytestart is the index of the first byte to fetch diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/expression/Next2InstructionValue.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/expression/Next2InstructionValue.java new file mode 100644 index 0000000000..58608dd6c0 --- /dev/null +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/expression/Next2InstructionValue.java @@ -0,0 +1,68 @@ +/* ### + * IP: GHIDRA + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package ghidra.app.plugin.processors.sleigh.expression; + +import ghidra.app.plugin.processors.sleigh.ParserWalker; +import ghidra.app.plugin.processors.sleigh.SleighLanguage; +import ghidra.program.model.address.Address; +import ghidra.program.model.mem.MemoryAccessException; +import ghidra.xml.XmlPullParser; + +/** + * + * + * The integer offset of the address following the current instruction + */ +public class Next2InstructionValue extends PatternValue { + private static final int HASH = "[inst_next2]".hashCode(); + + @Override + public int hashCode() { + return HASH; + } + + @Override + public boolean equals(Object obj) { + return obj instanceof Next2InstructionValue; + } + + @Override + public long minValue() { + return 0; + } + + @Override + public long maxValue() { + return 0; + } + + @Override + public long getValue(ParserWalker walker) throws MemoryAccessException { + Address addr = walker.getN2addr(); + return addr.getAddressableWordOffset(); + } + + @Override + public void restoreXml(XmlPullParser parser, SleighLanguage lang) { + parser.discardSubTree("next2_exp"); + // Nothing to do + } + + @Override + public String toString() { + return "[inst_next2]"; + } +} diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/expression/PatternExpression.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/expression/PatternExpression.java index 0d83f08ace..69b6f9c3cb 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/expression/PatternExpression.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/expression/PatternExpression.java @@ -51,6 +51,8 @@ public abstract class PatternExpression { res = new StartInstructionValue(); else if (nm.equals("end_exp")) res = new EndInstructionValue(); + else if (nm.equals("next2_exp")) + res = new Next2InstructionValue(); else if (nm.equals("plus_exp")) res = new PlusExpression(); else if (nm.equals("sub_exp")) diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/symbol/Next2Symbol.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/symbol/Next2Symbol.java new file mode 100644 index 0000000000..5c2660f02c --- /dev/null +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/symbol/Next2Symbol.java @@ -0,0 +1,68 @@ +/* ### + * IP: GHIDRA + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package ghidra.app.plugin.processors.sleigh.symbol; + +import java.util.ArrayList; + +import ghidra.app.plugin.processors.sleigh.*; +import ghidra.app.plugin.processors.sleigh.expression.Next2InstructionValue; +import ghidra.app.plugin.processors.sleigh.expression.PatternExpression; +import ghidra.program.model.mem.MemoryAccessException; +import ghidra.xml.XmlElement; +import ghidra.xml.XmlPullParser; + +/** + * + * + * Symbol with semantic value equal to offset of address immediately + * after the next instruction (inst_next2) + */ +public class Next2Symbol extends SpecificSymbol { + + private PatternExpression patexp; + + @Override + public PatternExpression getPatternExpression() { + return patexp; + } + + @Override + public void getFixedHandle(FixedHandle hand, ParserWalker walker) { + hand.space = walker.getCurSpace(); + hand.offset_space = null; + hand.offset_offset = walker.getN2addr().getOffset(); + hand.size = hand.space.getPointerSize(); + } + + @Override + public String print(ParserWalker walker) throws MemoryAccessException { + long val = walker.getN2addr().getOffset(); + return "0x"+Long.toHexString(val); + } + + @Override + public void printList(ParserWalker walker, ArrayList list) { + list.add(walker.getParentHandle()); + } + + @Override + public void restoreXml(XmlPullParser parser, SleighLanguage sleigh) { + XmlElement element = parser.start("next2_sym"); + patexp = new Next2InstructionValue(); + parser.end(element); + } + +} diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/symbol/SymbolTable.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/symbol/SymbolTable.java index 1f9c79e61c..dd9cec532c 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/symbol/SymbolTable.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/symbol/SymbolTable.java @@ -19,6 +19,8 @@ */ package ghidra.app.plugin.processors.sleigh.symbol; +import java.util.ArrayList; + import ghidra.app.plugin.processors.sleigh.SleighException; import ghidra.app.plugin.processors.sleigh.SleighLanguage; import ghidra.program.model.lang.UnknownInstructionException; @@ -26,8 +28,6 @@ import ghidra.util.xml.SpecXmlUtils; import ghidra.xml.XmlElement; import ghidra.xml.XmlPullParser; -import java.util.ArrayList; - /** * * @@ -152,6 +152,8 @@ public class SymbolTable { sym = new StartSymbol(); else if (el.getName().equals("end_sym_head")) sym = new EndSymbol(); + else if (el.getName().equals("next2_sym_head")) + sym = new Next2Symbol(); else if (el.getName().equals("subtable_sym_head")) sym = new SubtableSymbol(); else diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/template/ConstTpl.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/template/ConstTpl.java index 3f745f5ef0..1df3ea7096 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/template/ConstTpl.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/template/ConstTpl.java @@ -39,14 +39,15 @@ public class ConstTpl { public static final int HANDLE = 1; public static final int J_START = 2; public static final int J_NEXT = 3; - public static final int J_CURSPACE = 4; - public static final int J_CURSPACE_SIZE = 5; - public static final int SPACEID = 6; - public static final int J_RELATIVE = 7; - public static final int J_FLOWREF = 8; - public static final int J_FLOWREF_SIZE = 9; - public static final int J_FLOWDEST = 10; - public static final int J_FLOWDEST_SIZE = 11; + public static final int J_NEXT2 = 4; + public static final int J_CURSPACE = 5; + public static final int J_CURSPACE_SIZE = 6; + public static final int SPACEID = 7; + public static final int J_RELATIVE = 8; + public static final int J_FLOWREF = 9; + public static final int J_FLOWREF_SIZE = 10; + public static final int J_FLOWDEST = 11; + public static final int J_FLOWDEST_SIZE = 12; public static final int V_SPACE = 0; public static final int V_OFFSET = 1; @@ -143,6 +144,8 @@ public class ConstTpl { return walker.getAddr().getOffset(); case J_NEXT: return walker.getNaddr().getOffset(); + case J_NEXT2: + return walker.getN2addr().getOffset(); case J_FLOWREF: return walker.getFlowRefAddr().getOffset(); case J_FLOWREF_SIZE: @@ -315,6 +318,9 @@ public class ConstTpl { else if (typestr.equals("next")) { type = J_NEXT; } + else if (typestr.equals("next2")) { + type = J_NEXT2; + } else if (typestr.equals("curspace")) { type = J_CURSPACE; } @@ -379,6 +385,8 @@ public class ConstTpl { return "[flowref_size]"; case J_NEXT: return "[next]"; + case J_NEXT2: + return "[next2]"; case J_START: return "[start]"; case J_RELATIVE: diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/semantics/HandleTpl.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/semantics/HandleTpl.java index 07e7f42764..5777ea7d7e 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/semantics/HandleTpl.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/semantics/HandleTpl.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/semantics/PcodeBuilder.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/semantics/PcodeBuilder.java index 6254ea8b53..233577d4b0 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/semantics/PcodeBuilder.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/semantics/PcodeBuilder.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java index f390239f16..292e01436b 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java @@ -289,6 +289,8 @@ public class SleighCompile extends SleighBase { symtab.addSymbol(startsym); EndSymbol endsym = new EndSymbol(location, "inst_next", getConstantSpace()); symtab.addSymbol(endsym); + Next2Symbol next2sym = new Next2Symbol(location, "inst_next2", getConstantSpace()); + symtab.addSymbol(next2sym); EpsilonSymbol epsilon = new EpsilonSymbol(location, "epsilon", getConstantSpace()); symtab.addSymbol(epsilon); } @@ -1280,7 +1282,8 @@ public class SleighCompile extends SleighBase { VectorSTL vallist = new VectorSTL<>(); pe.listValues(vallist); for (int i = 0; i < vallist.size(); ++i) { - if (vallist.get(i) instanceof EndInstructionValue) { + PatternValue v = vallist.get(i); + if (v instanceof EndInstructionValue || v instanceof Next2InstructionValue) { return false; } } diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/Yylval.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/Yylval.java index 4c252b2f10..f165ca6b8b 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/Yylval.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/Yylval.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,6 +31,7 @@ class Yylval { OperandSymbol operandsym; StartSymbol startsym; EndSymbol endsym; + Next2Symbol next2sym; SubtableSymbol subtablesym; MacroSymbol macrosym; LabelSymbol labelsym; diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/AndExpression.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/AndExpression.java index a00bd9a6da..0b3fbbdcd7 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/AndExpression.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/AndExpression.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/ConstantValue.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/ConstantValue.java index b124ce205a..9e8da619c6 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/ConstantValue.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/ConstantValue.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/ContextField.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/ContextField.java index 18e1b59f5d..6f9f77b457 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/ContextField.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/ContextField.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/DivExpression.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/DivExpression.java index e9c8bf7eea..17bd82d9b9 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/DivExpression.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/DivExpression.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/EndInstructionValue.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/EndInstructionValue.java index 6f8f15acdf..ad4b58ed31 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/EndInstructionValue.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/EndInstructionValue.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/ExpressUtils.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/ExpressUtils.java index 77c57cf452..e695050a45 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/ExpressUtils.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/ExpressUtils.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/LeftShiftExpression.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/LeftShiftExpression.java index 832e3b8ed2..947d393efd 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/LeftShiftExpression.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/LeftShiftExpression.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/MinusExpression.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/MinusExpression.java index bbb9aa5c59..4f5ba57788 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/MinusExpression.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/MinusExpression.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/MultExpression.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/MultExpression.java index 7b0fd54dc8..5fff27e07e 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/MultExpression.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/MultExpression.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/Next2InstructionValue.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/Next2InstructionValue.java new file mode 100644 index 0000000000..5ac352fb09 --- /dev/null +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/Next2InstructionValue.java @@ -0,0 +1,61 @@ +/* ### + * IP: GHIDRA + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package ghidra.pcodeCPort.slghpatexpress; + +import java.io.PrintStream; + +import org.jdom.Element; + +import generic.stl.VectorSTL; +import ghidra.pcodeCPort.translate.Translate; +import ghidra.sleigh.grammar.Location; + +public class Next2InstructionValue extends PatternValue { + + public Next2InstructionValue(Location location) { + super(location); + } + + @Override + public TokenPattern genMinPattern(VectorSTL ops) { + return new TokenPattern(location); + } + + @Override + public TokenPattern genPattern(long val) { + return new TokenPattern(location); + } + + @Override + public long minValue() { + return 0; + } + + @Override + public long maxValue() { + return 0; + } + + @Override + public void saveXml(PrintStream s) { + s.append(""); + } + + @Override + public void restoreXml(Element el, Translate trans) { + } + +} diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/NotExpression.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/NotExpression.java index f770ced0dc..3c154906b6 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/NotExpression.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/NotExpression.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/OrExpression.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/OrExpression.java index e942527438..524e87b8b4 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/OrExpression.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/OrExpression.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/PatternExpression.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/PatternExpression.java index 3dff4a8594..2842fa83af 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/PatternExpression.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/PatternExpression.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/PlusExpression.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/PlusExpression.java index c09bcd3963..4abad9aa17 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/PlusExpression.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/PlusExpression.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/RightShiftExpression.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/RightShiftExpression.java index f0973fca9f..e0009fbb96 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/RightShiftExpression.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/RightShiftExpression.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/StartInstructionValue.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/StartInstructionValue.java index 9d46732f48..01331577ff 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/StartInstructionValue.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/StartInstructionValue.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/SubExpression.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/SubExpression.java index e2f90215d1..b97da64f48 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/SubExpression.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/SubExpression.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/TokenField.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/TokenField.java index 6cf8343a81..ac3f1ab790 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/TokenField.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/TokenField.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/XorExpression.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/XorExpression.java index e3070d32cc..5a482aea2f 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/XorExpression.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/XorExpression.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/CombinePattern.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/CombinePattern.java index a77b2f2a39..9f07b6510a 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/CombinePattern.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/CombinePattern.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/ContextPattern.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/ContextPattern.java index 29d630d002..4318b766a4 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/ContextPattern.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/ContextPattern.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/InstructionPattern.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/InstructionPattern.java index bbe5ebb812..c59a9abec0 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/InstructionPattern.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/InstructionPattern.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/OrPattern.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/OrPattern.java index e8ab75d17d..dddbf19e37 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/OrPattern.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/OrPattern.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/Pattern.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/Pattern.java index e3bee0f57b..df2197a1c3 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/Pattern.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/Pattern.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/ContextChange.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/ContextChange.java index 7f5005fc80..450f510626 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/ContextChange.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/ContextChange.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/ContextCommit.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/ContextCommit.java index fadad3d296..5f1dea2242 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/ContextCommit.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/ContextCommit.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/ContextOp.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/ContextOp.java index ce16ac6741..1422e589df 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/ContextOp.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/ContextOp.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/EndSymbol.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/EndSymbol.java index cd3527a4d0..d970ea1b31 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/EndSymbol.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/EndSymbol.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/EpsilonSymbol.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/EpsilonSymbol.java index 424b143a76..01da1159e9 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/EpsilonSymbol.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/EpsilonSymbol.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/Next2Symbol.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/Next2Symbol.java new file mode 100644 index 0000000000..df6cd32a53 --- /dev/null +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/Next2Symbol.java @@ -0,0 +1,93 @@ +/* ### + * IP: GHIDRA + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package ghidra.pcodeCPort.slghsymbol; + +import java.io.PrintStream; + +import org.jdom.Element; + +import ghidra.pcodeCPort.semantics.ConstTpl; +import ghidra.pcodeCPort.semantics.VarnodeTpl; +import ghidra.pcodeCPort.sleighbase.SleighBase; +import ghidra.pcodeCPort.slghpatexpress.Next2InstructionValue; +import ghidra.pcodeCPort.slghpatexpress.PatternExpression; +import ghidra.pcodeCPort.space.AddrSpace; +import ghidra.sleigh.grammar.Location; + +public class Next2Symbol extends SpecificSymbol { + private AddrSpace const_space; + private PatternExpression patexp; + + public Next2Symbol(Location location) { + super(location); + patexp = null; + } // For use with restoreXml + + @Override + public PatternExpression getPatternExpression() { + return patexp; + } + + @Override + public symbol_type getType() { + return symbol_type.next2_symbol; + } + + public Next2Symbol(Location location, String nm, AddrSpace cspc) { + super(location, nm); + const_space = cspc; + patexp = new Next2InstructionValue(location); + patexp.layClaim(); + } + + @Override + public void dispose() { + if (patexp != null) { + PatternExpression.release(patexp); + } + } + +// Return next instruction offset as a constant + @Override + public VarnodeTpl getVarnode() { + ConstTpl spc = new ConstTpl(const_space); + ConstTpl off = new ConstTpl(ConstTpl.const_type.j_next2); + ConstTpl sz_zero = new ConstTpl(); + return new VarnodeTpl(location, spc, off, sz_zero); + } + + @Override + public void saveXml(PrintStream s) { + s.append(""); + } + + @Override + public void saveXmlHeader(PrintStream s) { + s.append(""); + } + + @Override + public void restoreXml(Element el, SleighBase trans) { + const_space = trans.getConstantSpace(); + patexp = new Next2InstructionValue(null); + patexp.layClaim(); + } + +} diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/StartSymbol.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/StartSymbol.java index 9d98416eb8..0d8cd821d2 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/StartSymbol.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/StartSymbol.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/SymbolTable.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/SymbolTable.java index 0a735239fb..76f476a8d2 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/SymbolTable.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/SymbolTable.java @@ -15,6 +15,12 @@ */ package ghidra.pcodeCPort.slghsymbol; +import java.io.PrintStream; +import java.util.Iterator; +import java.util.List; + +import org.jdom.Element; + import generic.stl.IteratorSTL; import generic.stl.VectorSTL; import ghidra.pcodeCPort.context.SleighError; @@ -22,12 +28,6 @@ import ghidra.pcodeCPort.sleighbase.SleighBase; import ghidra.pcodeCPort.utils.XmlUtils; import ghidra.sleigh.grammar.Location; -import java.io.PrintStream; -import java.util.Iterator; -import java.util.List; - -import org.jdom.Element; - public class SymbolTable { private VectorSTL symbollist = new VectorSTL(); @@ -300,6 +300,9 @@ public class SymbolTable { else if (el.getName().equals("end_sym_head")) { sym = new EndSymbol(location); } + else if (el.getName().equals("next2_sym_head")) { + sym = new Next2Symbol(location); + } else if (el.getName().equals("subtable_sym_head")) { sym = new SubtableSymbol(location); } diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/ValueMapSymbol.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/ValueMapSymbol.java index 41aa85afa6..917744de14 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/ValueMapSymbol.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/ValueMapSymbol.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/ValueSymbol.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/ValueSymbol.java index 398874435a..23db19efb8 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/ValueSymbol.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/ValueSymbol.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/VarnodeListSymbol.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/VarnodeListSymbol.java index 50c2d97788..8d51f90106 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/VarnodeListSymbol.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/VarnodeListSymbol.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/symbol_type.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/symbol_type.java index a2c8aff607..272b5fe643 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/symbol_type.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/symbol_type.java @@ -27,6 +27,7 @@ public enum symbol_type { operand_symbol, start_symbol, // inst_start, inst_ref, inst_def end_symbol, // inst_next + next2_symbol, // inst_next2 subtable_symbol, macro_symbol, section_symbol, diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/InstructionContext.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/InstructionContext.java index e9bd72dcc2..035b214ee1 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/InstructionContext.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/InstructionContext.java @@ -63,6 +63,7 @@ public interface InstructionContext { * at the specified address. The returned ParserContext may be cast to the prototype's * implementation without checking. This method will throw an UnknownContextException * if a compatible ParserContext is not found at the specified address. + * @param instructionAddress instruction address of requested context * @return the instruction parser context at the specified instruction address * @throws UnknownContextException if the instruction at the specified address * was not previously parsed or attempting to instantiate context resulted in an diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/PcodeParser.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/PcodeParser.java index ad33e53752..8e64c318a8 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/PcodeParser.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/PcodeParser.java @@ -85,6 +85,7 @@ public class PcodeParser extends PcodeCompile { Location internalLoc = Location.INTERNALLY_DEFINED; symbolMap.put("inst_start", new StartSymbol(internalLoc, "inst_start", getConstantSpace())); symbolMap.put("inst_next", new EndSymbol(internalLoc, "inst_next", getConstantSpace())); + symbolMap.put("inst_next2", new Next2Symbol(internalLoc, "inst_next2", getConstantSpace())); symbolMap.put("inst_ref", new FlowRefSymbol(internalLoc, "inst_ref", getConstantSpace())); symbolMap.put("inst_dest", new FlowDestSymbol(internalLoc, "inst_dest", getConstantSpace())); diff --git a/Ghidra/Processors/Toy/data/languages/toyInstructions.sinc b/Ghidra/Processors/Toy/data/languages/toyInstructions.sinc index 3649a2fee5..119108bbdf 100644 --- a/Ghidra/Processors/Toy/data/languages/toyInstructions.sinc +++ b/Ghidra/Processors/Toy/data/languages/toyInstructions.sinc @@ -1,8 +1,11 @@ -#### immediates -# 0iii dddd iiii iiii # imm rd, i load 11-bit unsigned int into rd -# 10nn dddd nnnn nnnn # simm rd, n load 10-bit signed int into rd -# -#### arithmetic +#### load immediate 0000 000x xxxx xxxx +# 00ii dddd iiii iiii # imm rd, i load 10-bit unsigned int into rd +# 01nn dddd nnnn nnnn # simm rd, n load 10-bit signed int into rd +# +#### misc 100x xxxx xxxx xxxx +# 1000 0000 0000 0ccc # skcc if ccc goto inst_next2 (conditional skip instruction) +# +#### arithmetic 1100 xxxx # 1100 0000 ssss tttt # add rs, rt rs = rs + rt # 1100 0001 ssss tttt # sub rs, rt rs = rs - rt # 1100 0010 ssss tttt # rsub rs, rt rs = rt - rs @@ -40,7 +43,7 @@ # 1101 0110 ssss tttt # load rs, [rt] rs = [rt] # 1101 0111 ssss tttt # store [rs], rt [rs] = rt # 1101 1111 ssss tttt # mov rs, rt rs = rt -# + #### flow # 1110 nnnn nnnn 0ccc # brcc n if ccc goto pc + n # 1110 nnnn nnnn 1ccc # brdscc n if ccc goto pc + n with delay slot @@ -54,7 +57,7 @@ # 1111 0110 ssss 1ccc # call rs if ccc call rs # 1111 1nnn nnnn nnnn # call n call n # -#### user-defined +#### user-defined 1010 xxxx # 1010 0010 ssss 0000 # user_one rs user_one rs # 1010 0010 ssss 0000 # user_two rs user_two rs # 1010 0011 0000 0000 # user_three user_three @@ -63,11 +66,11 @@ # 1010 0110 ssss 0000 # user_six rs user_six rs # 1010 1000 0000 0000 # unimpl # -#### RESERVED -# 1101 1001 xxxx xxxx # RESERVED BANK -# 1101 1010 xxxx xxxx # RESERVED BANK -# 1111 0111 xxxx xxxx # RESERVED BANK - +#### RESERVED / UNUSED +# 1011 xxxx xxxx xxxx # UNUSED +# 1101 1001 xxxx xxxx # RESERVED BANK (consumed by toy_builder.sinc) +# 1101 1010 xxxx xxxx # RESERVED BANK (consumed by toy_builder.sinc) +# 1111 0111 xxxx xxxx # RESERVED BANK (consumed by toy_builder.sinc) define token instr(16) op1515 = (15, 15) @@ -75,13 +78,14 @@ define token instr(16) op1215 = (12, 15) op1111 = (11, 11) op0811 = (8, 11) + op0407 = (4, 7) op0007 = (0, 7) op0003 = (0, 3) op0303 = (3, 3) rd = (8, 11) rs = (4, 7) rt = (0, 3) - imm1214 = (12, 14) + imm1213 = (12, 13) imm0007 = (0, 7) imm0003 = (0, 3) simm1213 = (12, 13) signed @@ -104,7 +108,7 @@ Simm4: "#"^simm0003 is simm0003 { export *[const]:$(SIZE) simm0003; } Simm10: "#"^computed is simm1213 & imm0007 [ computed = (simm1213 << 8) | imm0007; ] { export *[const]:$(SIZE) computed; } Imm4: "#"^imm0003 is imm0003 { export *[const]:$(SIZE) imm0003; } -Imm11: "#"^computed is imm1214 & imm0007 [ computed = (imm1214 << 8) | imm0007; ] { export *[const]:$(SIZE) computed; } +Imm10: "#"^computed is imm1213 & imm0007 [ computed = (imm1213 << 8) | imm0007; ] { export *[const]:$(SIZE) computed; } Rel8: addr is simm0007 [ addr = inst_start + simm0007; ] { export *:$(SIZE) addr; } Rel82: addr is simm0411 [ addr = inst_start + simm0411; ] { export *:$(SIZE) addr; } @@ -148,7 +152,7 @@ define pcodeop pcodeop_three; # operations -:imm rd, Imm11 is $(INSTR_PHASE) op1515=0x0 & rd & Imm11 { logicflags(); rd = Imm11; resultflags(rd); } +:imm rd, Imm10 is $(INSTR_PHASE) op1515=0x0 & rd & Imm10 { logicflags(); rd = Imm10; resultflags(rd); } :simm rd, Simm10 is $(INSTR_PHASE) op1415=0x2 & rd & Simm10 { logicflags(); rd = Simm10; resultflags(rd); } :add rs, rt is $(INSTR_PHASE) op1215=0xc & op0811=0x0 & rs & rt { addflags(rs, rt); rs = rs + rt; resultflags(rs); } @@ -197,6 +201,8 @@ define pcodeop pcodeop_three; :store RS, rt is $(INSTR_PHASE) op1215=0xd & op0811=0x7 & RS & rt { RS = rt; logicflags(); resultflags(rt); } :mov rs, rt is $(INSTR_PHASE) op1215=0xd & op0811=0xf & rs & rt { rs = rt; logicflags(); resultflags(rs); } +:sk^CC is $(INSTR_PHASE) op1215=0x8 & op0811=0x0 & op0407=0x0 & op0303=0x0 & CC & Rel82 { if (CC) goto inst_next2; } + :br^COND Rel82 is $(INSTR_PHASE) op1215=0xe & op0303=0x0 & COND & Rel82 { build COND; goto Rel82; } :brds^COND Rel82 is $(INSTR_PHASE) op1215=0xe & op0303=0x1 & COND & Rel82 { build COND; delayslot(1); goto Rel82; } :br^COND rs is $(INSTR_PHASE) op1215=0xf & op0811=0x0 & COND & rs & op0303=0x0 { build COND; goto [rs]; } diff --git a/Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/program/disassemble/DisassemblerTest.java b/Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/program/disassemble/DisassemblerTest.java index 3428ddd822..b97bd93566 100644 --- a/Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/program/disassemble/DisassemblerTest.java +++ b/Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/program/disassemble/DisassemblerTest.java @@ -1502,6 +1502,35 @@ public class DisassemblerTest extends AbstractGhidraHeadlessIntegrationTest { } + /** + * 10: skeq + * 12: bral 20 --------+ + * 14: ret | + * | + * 20: mov r0, #123 <-+ + * 22: ret + * + * Test skip instruction + * + */ + @Test + public void testDisassemblerSkip() throws Exception { + + programBuilder.addBytesSkipConditional(10); + programBuilder.addBytesBranch(12, 20); + programBuilder.addBytesReturn(14); + + programBuilder.addBytesMoveImmediate(20, (short) 123); + programBuilder.addBytesReturn(22); + + AddressSetView disAddrs = disassembler.disassemble(addr(10), null); + assertEquals(addrset(range(10, 15), range(20, 23)), disAddrs); + + verifyInstructionPresence(); + + verifyNoBookmarks(); + } + /** * 10: bral 200 (error on flow to non-existing memory) * diff --git a/Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/program/model/lang/PcodeParserTest.java b/Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/program/model/lang/PcodeParserTest.java index 8ff787bce0..1cd8d908da 100644 --- a/Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/program/model/lang/PcodeParserTest.java +++ b/Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/program/model/lang/PcodeParserTest.java @@ -71,6 +71,26 @@ public class PcodeParserTest extends AbstractGhidraHeadlessIntegrationTest { return true; } + public boolean testInstNext2Constant(VarnodeTpl vn, int size) { + assertNotNull(vn); + if (vn.getSpace().getType() != ConstTpl.SPACEID) { + return false; + } + if (!vn.getSpace().getSpaceId().getName().equals(SpaceNames.CONSTANT_SPACE_NAME)) { + return false; + } + if (vn.getOffset().getType() != ConstTpl.J_NEXT2) { + return false; + } + if (vn.getSize().getType() != ConstTpl.REAL) { + return false; + } + if (vn.getSize().getReal() != size) { + return false; + } + return true; + } + public boolean testInstNext(VarnodeTpl vn) { assertNotNull(vn); if (vn.getSpace().getType() != ConstTpl.J_CURSPACE) { @@ -85,6 +105,20 @@ public class PcodeParserTest extends AbstractGhidraHeadlessIntegrationTest { return true; } + public boolean testInstNext2(VarnodeTpl vn) { + assertNotNull(vn); + if (vn.getSpace().getType() != ConstTpl.J_CURSPACE) { + return false; + } + if (vn.getOffset().getType() != ConstTpl.J_NEXT2) { + return false; + } + if (vn.getSize().getType() != ConstTpl.J_CURSPACE_SIZE) { + return false; + } + return true; + } + public boolean testRelative(VarnodeTpl vn, int labelid, int size) { assertNotNull(vn); if (vn.getSpace().getType() != ConstTpl.SPACEID) { @@ -175,6 +209,7 @@ public class PcodeParserTest extends AbstractGhidraHeadlessIntegrationTest { long uniqueBase = UniqueLayout.INJECT.getOffset(lang); String pcodeStatements = "tmp:1 = inst_next;\n" + "if (AX == 0) goto inst_next;\n" + + "tmp2:1 = inst_next2;\n" + "if (BX == 0) goto inst_next2;\n" + "call [ECX];\n" + "if (BX != 1) goto ;\n" + "CX = 0;\n" + "\n" + "BX = CX << 2;\n" + "in1 = in2 + 7;"; @@ -186,8 +221,9 @@ public class PcodeParserTest extends AbstractGhidraHeadlessIntegrationTest { assertNull(template.getResult()); assertEquals(template.getNumLabels(), 1); OpTpl[] vec = template.getOpVec(); - assertEquals(vec.length, 10); + assertEquals(vec.length, 13); + // inst_next assertEquals(vec[0].getOpcode(), PcodeOp.COPY); assertTrue(testVarnode(vec[0].getOutput(), SpaceNames.UNIQUE_SPACE_NAME, uniqueBase, 1)); assertEquals(vec[0].getInput().length, 1); @@ -207,46 +243,68 @@ public class PcodeParserTest extends AbstractGhidraHeadlessIntegrationTest { assertTrue( testVarnode(vec[2].getInput()[1], SpaceNames.UNIQUE_SPACE_NAME, uniqueBase + 0x80, 1)); - assertEquals(vec[3].getOpcode(), PcodeOp.CALLIND); - assertNull(vec[3].getOutput()); - assertEquals(vec[3].getInput().length, 1); - assertTrue(testVarnode(vec[3].getInput()[0], "register", 4, 4)); - - assertEquals(vec[4].getOpcode(), PcodeOp.INT_NOTEQUAL); + // inst_next2 + assertEquals(vec[3].getOpcode(), PcodeOp.COPY); assertTrue( - testVarnode(vec[4].getOutput(), SpaceNames.UNIQUE_SPACE_NAME, uniqueBase + 0x100, 1)); + testVarnode(vec[3].getOutput(), SpaceNames.UNIQUE_SPACE_NAME, uniqueBase + 0x100, 1)); + assertEquals(vec[3].getInput().length, 1); + assertTrue(testInstNext2Constant(vec[3].getInput()[0], 1)); + + assertEquals(vec[4].getOpcode(), PcodeOp.INT_EQUAL); + assertTrue( + testVarnode(vec[4].getOutput(), SpaceNames.UNIQUE_SPACE_NAME, uniqueBase + 0x180, 1)); assertEquals(vec[4].getInput().length, 2); assertTrue(testVarnode(vec[4].getInput()[0], "register", 0xc, 2)); - assertTrue(testVarnode(vec[4].getInput()[1], SpaceNames.CONSTANT_SPACE_NAME, 1, 2)); + assertTrue(testVarnode(vec[4].getInput()[1], SpaceNames.CONSTANT_SPACE_NAME, 0, 2)); assertEquals(vec[5].getOpcode(), PcodeOp.CBRANCH); assertNull(vec[5].getOutput()); assertEquals(vec[5].getInput().length, 2); - assertTrue(testRelative(vec[5].getInput()[0], 0, 4)); + assertTrue(testInstNext2(vec[5].getInput()[0])); assertTrue( - testVarnode(vec[5].getInput()[1], SpaceNames.UNIQUE_SPACE_NAME, uniqueBase + 0x100, 1)); + testVarnode(vec[5].getInput()[1], SpaceNames.UNIQUE_SPACE_NAME, uniqueBase + 0x180, 1)); - assertEquals(vec[6].getOpcode(), PcodeOp.COPY); - assertTrue(testVarnode(vec[6].getOutput(), "register", 4, 2)); + // call + assertEquals(vec[6].getOpcode(), PcodeOp.CALLIND); + assertNull(vec[6].getOutput()); assertEquals(vec[6].getInput().length, 1); - assertTrue(testVarnode(vec[6].getInput()[0], SpaceNames.CONSTANT_SPACE_NAME, 0, 2)); + assertTrue(testVarnode(vec[6].getInput()[0], "register", 4, 4)); - assertEquals(vec[7].getOpcode(), PcodeOp.PTRADD); // label - assertNull(vec[7].getOutput()); - assertEquals(vec[7].getInput().length, 1); - assertTrue(testVarnode(vec[7].getInput()[0], SpaceNames.CONSTANT_SPACE_NAME, 0, 4)); - - assertEquals(vec[8].getOpcode(), PcodeOp.INT_LEFT); - assertTrue(testVarnode(vec[8].getOutput(), "register", 0xc, 2)); - assertEquals(vec[8].getInput().length, 2); - assertTrue(testVarnode(vec[8].getInput()[0], "register", 0x4, 2)); - assertTrue(testVarnode(vec[8].getInput()[1], SpaceNames.CONSTANT_SPACE_NAME, 2, 4)); - - assertEquals(vec[9].getOpcode(), PcodeOp.INT_ADD); - assertTrue(testParameter(vec[9].getOutput(), 0)); - assertEquals(vec[9].getInput().length, 2); - assertTrue(testParameter(vec[9].getInput()[0], 1)); + assertEquals(vec[7].getOpcode(), PcodeOp.INT_NOTEQUAL); assertTrue( - testVarnodeHandleSize(vec[9].getInput()[1], SpaceNames.CONSTANT_SPACE_NAME, 7, 0)); + testVarnode(vec[7].getOutput(), SpaceNames.UNIQUE_SPACE_NAME, uniqueBase + 0x200, 1)); + assertEquals(vec[7].getInput().length, 2); + assertTrue(testVarnode(vec[7].getInput()[0], "register", 0xc, 2)); + assertTrue(testVarnode(vec[7].getInput()[1], SpaceNames.CONSTANT_SPACE_NAME, 1, 2)); + + assertEquals(vec[8].getOpcode(), PcodeOp.CBRANCH); + assertNull(vec[8].getOutput()); + assertEquals(vec[8].getInput().length, 2); + assertTrue(testRelative(vec[8].getInput()[0], 0, 4)); + assertTrue( + testVarnode(vec[8].getInput()[1], SpaceNames.UNIQUE_SPACE_NAME, uniqueBase + 0x200, 1)); + + assertEquals(vec[9].getOpcode(), PcodeOp.COPY); + assertTrue(testVarnode(vec[9].getOutput(), "register", 4, 2)); + assertEquals(vec[9].getInput().length, 1); + assertTrue(testVarnode(vec[9].getInput()[0], SpaceNames.CONSTANT_SPACE_NAME, 0, 2)); + + assertEquals(vec[10].getOpcode(), PcodeOp.PTRADD); // label + assertNull(vec[10].getOutput()); + assertEquals(vec[10].getInput().length, 1); + assertTrue(testVarnode(vec[10].getInput()[0], SpaceNames.CONSTANT_SPACE_NAME, 0, 4)); + + assertEquals(vec[11].getOpcode(), PcodeOp.INT_LEFT); + assertTrue(testVarnode(vec[11].getOutput(), "register", 0xc, 2)); + assertEquals(vec[11].getInput().length, 2); + assertTrue(testVarnode(vec[11].getInput()[0], "register", 0x4, 2)); + assertTrue(testVarnode(vec[11].getInput()[1], SpaceNames.CONSTANT_SPACE_NAME, 2, 4)); + + assertEquals(vec[12].getOpcode(), PcodeOp.INT_ADD); + assertTrue(testParameter(vec[12].getOutput(), 0)); + assertEquals(vec[12].getInput().length, 2); + assertTrue(testParameter(vec[12].getInput()[0], 1)); + assertTrue( + testVarnodeHandleSize(vec[12].getInput()[1], SpaceNames.CONSTANT_SPACE_NAME, 7, 0)); } }