Unreviewed, rolling out r237479 and r237484.
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 26 Oct 2018 23:34:01 +0000 (23:34 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 26 Oct 2018 23:34:01 +0000 (23:34 +0000)
https://bugs.webkit.org/show_bug.cgi?id=190978

broke JSC on iOS (Requested by tadeuzagallo on #webkit).

Reverted changesets:

"New bytecode format for JSC"
https://bugs.webkit.org/show_bug.cgi?id=187373
https://trac.webkit.org/changeset/237479

"Gardening: Build fix after r237479."
https://bugs.webkit.org/show_bug.cgi?id=187373
https://trac.webkit.org/changeset/237484

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@237486 268f45cc-cd09-0410-ab3c-d52691b4dbfc

158 files changed:
ChangeLog
JSTests/ChangeLog
JSTests/stress/maximum-inline-capacity.js [deleted file]
LayoutTests/ChangeLog
LayoutTests/fast/dom/Window/resources/postmessage-test.js
Source/JavaScriptCore/CMakeLists.txt
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/Configurations/JSC.xcconfig
Source/JavaScriptCore/DerivedSources.make
Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
Source/JavaScriptCore/Sources.txt
Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h
Source/JavaScriptCore/bytecode/ArithProfile.h
Source/JavaScriptCore/bytecode/ArrayAllocationProfile.h
Source/JavaScriptCore/bytecode/ArrayProfile.h
Source/JavaScriptCore/bytecode/BytecodeBasicBlock.cpp
Source/JavaScriptCore/bytecode/BytecodeBasicBlock.h
Source/JavaScriptCore/bytecode/BytecodeDumper.cpp
Source/JavaScriptCore/bytecode/BytecodeDumper.h
Source/JavaScriptCore/bytecode/BytecodeGeneratorification.cpp
Source/JavaScriptCore/bytecode/BytecodeGeneratorification.h
Source/JavaScriptCore/bytecode/BytecodeGraph.h
Source/JavaScriptCore/bytecode/BytecodeKills.h
Source/JavaScriptCore/bytecode/BytecodeList.json [new file with mode: 0644]
Source/JavaScriptCore/bytecode/BytecodeList.rb [deleted file]
Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp
Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.h
Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysisInlines.h
Source/JavaScriptCore/bytecode/BytecodeRewriter.cpp
Source/JavaScriptCore/bytecode/BytecodeRewriter.h
Source/JavaScriptCore/bytecode/BytecodeUseDef.h
Source/JavaScriptCore/bytecode/CallLinkStatus.cpp
Source/JavaScriptCore/bytecode/CodeBlock.cpp
Source/JavaScriptCore/bytecode/CodeBlock.h
Source/JavaScriptCore/bytecode/CodeBlockInlines.h [deleted file]
Source/JavaScriptCore/bytecode/Fits.h [deleted file]
Source/JavaScriptCore/bytecode/GetByIdMetadata.h [deleted file]
Source/JavaScriptCore/bytecode/GetByIdStatus.cpp
Source/JavaScriptCore/bytecode/Instruction.h
Source/JavaScriptCore/bytecode/InstructionStream.cpp [deleted file]
Source/JavaScriptCore/bytecode/InstructionStream.h [deleted file]
Source/JavaScriptCore/bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp
Source/JavaScriptCore/bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h
Source/JavaScriptCore/bytecode/MetadataTable.cpp [deleted file]
Source/JavaScriptCore/bytecode/MetadataTable.h [deleted file]
Source/JavaScriptCore/bytecode/Opcode.cpp
Source/JavaScriptCore/bytecode/Opcode.h
Source/JavaScriptCore/bytecode/OpcodeInlines.h
Source/JavaScriptCore/bytecode/OpcodeSize.h [deleted file]
Source/JavaScriptCore/bytecode/PreciseJumpTargets.cpp
Source/JavaScriptCore/bytecode/PreciseJumpTargets.h
Source/JavaScriptCore/bytecode/PreciseJumpTargetsInlines.h
Source/JavaScriptCore/bytecode/PutByIdStatus.cpp
Source/JavaScriptCore/bytecode/SpecialPointer.cpp
Source/JavaScriptCore/bytecode/SpecialPointer.h
Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp
Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h
Source/JavaScriptCore/bytecode/UnlinkedInstructionStream.cpp [new file with mode: 0644]
Source/JavaScriptCore/bytecode/UnlinkedInstructionStream.h [new file with mode: 0644]
Source/JavaScriptCore/bytecode/UnlinkedMetadataTable.h [deleted file]
Source/JavaScriptCore/bytecode/UnlinkedMetadataTableInlines.h [deleted file]
Source/JavaScriptCore/bytecode/VirtualRegister.cpp
Source/JavaScriptCore/bytecode/VirtualRegister.h
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h
Source/JavaScriptCore/bytecompiler/Label.h
Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
Source/JavaScriptCore/bytecompiler/ProfileTypeBytecodeFlag.cpp [deleted file]
Source/JavaScriptCore/bytecompiler/ProfileTypeBytecodeFlag.h [deleted file]
Source/JavaScriptCore/bytecompiler/RegisterID.h
Source/JavaScriptCore/bytecompiler/StaticPropertyAnalysis.h
Source/JavaScriptCore/bytecompiler/StaticPropertyAnalyzer.h
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
Source/JavaScriptCore/dfg/DFGCapabilities.cpp
Source/JavaScriptCore/dfg/DFGCapabilities.h
Source/JavaScriptCore/dfg/DFGOSREntry.cpp
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp
Source/JavaScriptCore/ftl/FTLOperations.cpp
Source/JavaScriptCore/generate-bytecode-files [new file with mode: 0644]
Source/JavaScriptCore/generator/Argument.rb [deleted file]
Source/JavaScriptCore/generator/Assertion.rb [deleted file]
Source/JavaScriptCore/generator/DSL.rb [deleted file]
Source/JavaScriptCore/generator/Fits.rb [deleted file]
Source/JavaScriptCore/generator/GeneratedFile.rb [deleted file]
Source/JavaScriptCore/generator/Metadata.rb [deleted file]
Source/JavaScriptCore/generator/Opcode.rb [deleted file]
Source/JavaScriptCore/generator/OpcodeGroup.rb [deleted file]
Source/JavaScriptCore/generator/Options.rb [deleted file]
Source/JavaScriptCore/generator/Section.rb [deleted file]
Source/JavaScriptCore/generator/Template.rb [deleted file]
Source/JavaScriptCore/generator/Type.rb [deleted file]
Source/JavaScriptCore/generator/main.rb [deleted file]
Source/JavaScriptCore/interpreter/AbstractPC.h
Source/JavaScriptCore/interpreter/CallFrame.cpp
Source/JavaScriptCore/interpreter/CallFrame.h
Source/JavaScriptCore/interpreter/Interpreter.cpp
Source/JavaScriptCore/interpreter/Interpreter.h
Source/JavaScriptCore/interpreter/InterpreterInlines.h
Source/JavaScriptCore/interpreter/StackVisitor.cpp
Source/JavaScriptCore/interpreter/VMEntryRecord.h
Source/JavaScriptCore/jit/JIT.cpp
Source/JavaScriptCore/jit/JIT.h
Source/JavaScriptCore/jit/JITArithmetic.cpp
Source/JavaScriptCore/jit/JITCall.cpp
Source/JavaScriptCore/jit/JITDisassembler.cpp
Source/JavaScriptCore/jit/JITExceptions.cpp
Source/JavaScriptCore/jit/JITInlines.h
Source/JavaScriptCore/jit/JITMathIC.h
Source/JavaScriptCore/jit/JITOpcodes.cpp
Source/JavaScriptCore/jit/JITOpcodes32_64.cpp
Source/JavaScriptCore/jit/JITOperations.cpp
Source/JavaScriptCore/jit/JITOperations.h
Source/JavaScriptCore/jit/JITPropertyAccess.cpp
Source/JavaScriptCore/jit/RegisterSet.cpp
Source/JavaScriptCore/jit/SlowPathCall.h
Source/JavaScriptCore/llint/LLIntData.cpp
Source/JavaScriptCore/llint/LLIntData.h
Source/JavaScriptCore/llint/LLIntOffsetsExtractor.cpp
Source/JavaScriptCore/llint/LLIntSlowPaths.cpp
Source/JavaScriptCore/llint/LLIntSlowPaths.h
Source/JavaScriptCore/llint/LowLevelInterpreter.asm
Source/JavaScriptCore/llint/LowLevelInterpreter.cpp
Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm
Source/JavaScriptCore/llint/LowLevelInterpreter64.asm
Source/JavaScriptCore/offlineasm/arm64.rb
Source/JavaScriptCore/offlineasm/asm.rb
Source/JavaScriptCore/offlineasm/ast.rb
Source/JavaScriptCore/offlineasm/cloop.rb
Source/JavaScriptCore/offlineasm/generate_offset_extractor.rb
Source/JavaScriptCore/offlineasm/instructions.rb
Source/JavaScriptCore/offlineasm/parser.rb
Source/JavaScriptCore/offlineasm/transform.rb
Source/JavaScriptCore/offlineasm/x86.rb
Source/JavaScriptCore/parser/ResultType.h
Source/JavaScriptCore/profiler/ProfilerBytecodeSequence.cpp
Source/JavaScriptCore/runtime/CommonSlowPaths.cpp
Source/JavaScriptCore/runtime/CommonSlowPaths.h
Source/JavaScriptCore/runtime/ExceptionFuzz.cpp
Source/JavaScriptCore/runtime/ExceptionFuzz.h
Source/JavaScriptCore/runtime/GetPutInfo.cpp [deleted file]
Source/JavaScriptCore/runtime/GetPutInfo.h
Source/JavaScriptCore/runtime/JSCPoison.h
Source/JavaScriptCore/runtime/JSType.cpp [deleted file]
Source/JavaScriptCore/runtime/JSType.h
Source/JavaScriptCore/runtime/SamplingProfiler.cpp
Source/JavaScriptCore/runtime/SamplingProfiler.h
Source/JavaScriptCore/runtime/SlowPathReturnType.h
Source/JavaScriptCore/runtime/VM.h
Source/JavaScriptCore/runtime/Watchdog.h
Source/JavaScriptCore/tools/HeapVerifier.cpp
Source/WTF/ChangeLog
Source/WTF/wtf/Forward.h
Source/WTF/wtf/Platform.h
Source/WTF/wtf/Vector.h
Source/cmake/WebKitFeatures.cmake
Tools/ChangeLog
Tools/Scripts/build-jsc

index 2d1ccac..d9686fe 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2018-10-26  Commit Queue  <commit-queue@webkit.org>
+
+        Unreviewed, rolling out r237479 and r237484.
+        https://bugs.webkit.org/show_bug.cgi?id=190978
+
+        broke JSC on iOS (Requested by tadeuzagallo on #webkit).
+
+        Reverted changesets:
+
+        "New bytecode format for JSC"
+        https://bugs.webkit.org/show_bug.cgi?id=187373
+        https://trac.webkit.org/changeset/237479
+
+        "Gardening: Build fix after r237479."
+        https://bugs.webkit.org/show_bug.cgi?id=187373
+        https://trac.webkit.org/changeset/237484
+
 2018-10-26  Tadeu Zagallo  <tzagallo@apple.com>
 
         New bytecode format for JSC
index bfeffbe..8cc3ad3 100644 (file)
@@ -1,3 +1,20 @@
+2018-10-26  Commit Queue  <commit-queue@webkit.org>
+
+        Unreviewed, rolling out r237479 and r237484.
+        https://bugs.webkit.org/show_bug.cgi?id=190978
+
+        broke JSC on iOS (Requested by tadeuzagallo on #webkit).
+
+        Reverted changesets:
+
+        "New bytecode format for JSC"
+        https://bugs.webkit.org/show_bug.cgi?id=187373
+        https://trac.webkit.org/changeset/237479
+
+        "Gardening: Build fix after r237479."
+        https://bugs.webkit.org/show_bug.cgi?id=187373
+        https://trac.webkit.org/changeset/237484
+
 2018-10-26  Tadeu Zagallo  <tzagallo@apple.com>
 
         New bytecode format for JSC
diff --git a/JSTests/stress/maximum-inline-capacity.js b/JSTests/stress/maximum-inline-capacity.js
deleted file mode 100644 (file)
index 9b2a9d2..0000000
+++ /dev/null
@@ -1,3020 +0,0 @@
-// test maximum inline capacity inferred for narrow instructions
-
-function test1() {
-    ({
-        property1: 1,
-        property2: 2,
-        property3: 3,
-        property4: 4,
-        property5: 5,
-        property6: 6,
-        property7: 7,
-        property8: 8,
-        property9: 9,
-        property10: 10,
-        property11: 11,
-        property12: 12,
-        property13: 13,
-        property14: 14,
-        property15: 15,
-        property16: 16,
-        property17: 17,
-        property18: 18,
-        property19: 19,
-        property20: 20,
-        property21: 21,
-        property22: 22,
-        property23: 23,
-        property24: 24,
-        property25: 25,
-        property26: 26,
-        property27: 27,
-        property28: 28,
-        property29: 29,
-        property30: 30,
-        property31: 31,
-        property32: 32,
-        property33: 33,
-        property34: 34,
-        property35: 35,
-        property36: 36,
-        property37: 37,
-        property38: 38,
-        property39: 39,
-        property40: 40,
-        property41: 41,
-        property42: 42,
-        property43: 43,
-        property44: 44,
-        property45: 45,
-        property46: 46,
-        property47: 47,
-        property48: 48,
-        property49: 49,
-        property50: 50,
-        property51: 51,
-        property52: 52,
-        property53: 53,
-        property54: 54,
-        property55: 55,
-        property56: 56,
-        property57: 57,
-        property58: 58,
-        property59: 59,
-        property60: 60,
-        property61: 61,
-        property62: 62,
-        property63: 63,
-        property64: 64,
-        property65: 65,
-        property66: 66,
-        property67: 67,
-        property68: 68,
-        property69: 69,
-        property70: 70,
-        property71: 71,
-        property72: 72,
-        property73: 73,
-        property74: 74,
-        property75: 75,
-        property76: 76,
-        property77: 77,
-        property78: 78,
-        property79: 79,
-        property80: 80,
-        property81: 81,
-        property82: 82,
-        property83: 83,
-        property84: 84,
-        property85: 85,
-        property86: 86,
-        property87: 87,
-        property88: 88,
-        property89: 89,
-        property90: 90,
-        property91: 91,
-        property92: 92,
-        property93: 93,
-        property94: 94,
-        property95: 95,
-        property96: 96,
-        property97: 97,
-        property98: 98,
-        property99: 99,
-        property100: 100,
-        property101: 101,
-        property102: 102,
-        property103: 103,
-        property104: 104,
-        property105: 105,
-        property106: 106,
-        property107: 107,
-        property108: 108,
-        property109: 109,
-        property110: 110,
-        property111: 111,
-        property112: 112,
-        property113: 113,
-        property114: 114,
-        property115: 115,
-        property116: 116,
-        property117: 117,
-        property118: 118,
-        property119: 119,
-        property120: 120,
-        property121: 121,
-        property122: 122,
-        property123: 123,
-        property124: 124,
-        property125: 125,
-        property126: 126,
-        property127: 127,
-        property128: 128,
-        property129: 129,
-        property130: 130,
-        property131: 131,
-        property132: 132,
-        property133: 133,
-        property134: 134,
-        property135: 135,
-        property136: 136,
-        property137: 137,
-        property138: 138,
-        property139: 139,
-        property140: 140,
-        property141: 141,
-        property142: 142,
-        property143: 143,
-        property144: 144,
-        property145: 145,
-        property146: 146,
-        property147: 147,
-        property148: 148,
-        property149: 149,
-        property150: 150,
-        property151: 151,
-        property152: 152,
-        property153: 153,
-        property154: 154,
-        property155: 155,
-        property156: 156,
-        property157: 157,
-        property158: 158,
-        property159: 159,
-        property160: 160,
-        property161: 161,
-        property162: 162,
-        property163: 163,
-        property164: 164,
-        property165: 165,
-        property166: 166,
-        property167: 167,
-        property168: 168,
-        property169: 169,
-        property170: 170,
-        property171: 171,
-        property172: 172,
-        property173: 173,
-        property174: 174,
-        property175: 175,
-        property176: 176,
-        property177: 177,
-        property178: 178,
-        property179: 179,
-        property180: 180,
-        property181: 181,
-        property182: 182,
-        property183: 183,
-        property184: 184,
-        property185: 185,
-        property186: 186,
-        property187: 187,
-        property188: 188,
-        property189: 189,
-        property190: 190,
-        property191: 191,
-        property192: 192,
-        property193: 193,
-        property194: 194,
-        property195: 195,
-        property196: 196,
-        property197: 197,
-        property198: 198,
-        property199: 199,
-        property200: 200,
-        property201: 201,
-        property202: 202,
-        property203: 203,
-        property204: 204,
-        property205: 205,
-        property206: 206,
-        property207: 207,
-        property208: 208,
-        property209: 209,
-        property210: 210,
-        property211: 211,
-        property212: 212,
-        property213: 213,
-        property214: 214,
-        property215: 215,
-        property216: 216,
-        property217: 217,
-        property218: 218,
-        property219: 219,
-        property220: 220,
-        property221: 221,
-        property222: 222,
-        property223: 223,
-        property224: 224,
-        property225: 225,
-        property226: 226,
-        property227: 227,
-        property228: 228,
-        property229: 229,
-        property230: 230,
-        property231: 231,
-        property232: 232,
-        property233: 233,
-        property234: 234,
-        property235: 235,
-        property236: 236,
-        property237: 237,
-        property238: 238,
-        property239: 239,
-        property240: 240,
-        property241: 241,
-        property242: 242,
-        property243: 243,
-        property244: 244,
-        property245: 245,
-        property246: 246,
-        property247: 247,
-        property248: 248,
-        property249: 249,
-        property250: 250,
-        property251: 251,
-        property252: 252,
-        property253: 253,
-        property254: 254,
-        property255: 255,
-        property256: 256,
-        property257: 257,
-        property258: 258,
-        property259: 259,
-        property260: 260,
-        property261: 261,
-        property262: 262,
-        property263: 263,
-        property264: 264,
-        property265: 265,
-        property266: 266,
-        property267: 267,
-        property268: 268,
-        property269: 269,
-        property270: 270,
-        property271: 271,
-        property272: 272,
-        property273: 273,
-        property274: 274,
-        property275: 275,
-        property276: 276,
-        property277: 277,
-        property278: 278,
-        property279: 279,
-        property280: 280,
-        property281: 281,
-        property282: 282,
-        property283: 283,
-        property284: 284,
-        property285: 285,
-        property286: 286,
-        property287: 287,
-        property288: 288,
-        property289: 289,
-        property290: 290,
-        property291: 291,
-        property292: 292,
-        property293: 293,
-        property294: 294,
-        property295: 295,
-        property296: 296,
-        property297: 297,
-        property298: 298,
-        property299: 299,
-        property300: 300,
-        property301: 301,
-        property302: 302,
-        property303: 303,
-        property304: 304,
-        property305: 305,
-        property306: 306,
-        property307: 307,
-        property308: 308,
-        property309: 309,
-        property310: 310,
-        property311: 311,
-        property312: 312,
-        property313: 313,
-        property314: 314,
-        property315: 315,
-        property316: 316,
-        property317: 317,
-        property318: 318,
-        property319: 319,
-        property320: 320,
-        property321: 321,
-        property322: 322,
-        property323: 323,
-        property324: 324,
-        property325: 325,
-        property326: 326,
-        property327: 327,
-        property328: 328,
-        property329: 329,
-        property330: 330,
-        property331: 331,
-        property332: 332,
-        property333: 333,
-        property334: 334,
-        property335: 335,
-        property336: 336,
-        property337: 337,
-        property338: 338,
-        property339: 339,
-        property340: 340,
-        property341: 341,
-        property342: 342,
-        property343: 343,
-        property344: 344,
-        property345: 345,
-        property346: 346,
-        property347: 347,
-        property348: 348,
-        property349: 349,
-        property350: 350,
-        property351: 351,
-        property352: 352,
-        property353: 353,
-        property354: 354,
-        property355: 355,
-        property356: 356,
-        property357: 357,
-        property358: 358,
-        property359: 359,
-        property360: 360,
-        property361: 361,
-        property362: 362,
-        property363: 363,
-        property364: 364,
-        property365: 365,
-        property366: 366,
-        property367: 367,
-        property368: 368,
-        property369: 369,
-        property370: 370,
-        property371: 371,
-        property372: 372,
-        property373: 373,
-        property374: 374,
-        property375: 375,
-        property376: 376,
-        property377: 377,
-        property378: 378,
-        property379: 379,
-        property380: 380,
-        property381: 381,
-        property382: 382,
-        property383: 383,
-        property384: 384,
-        property385: 385,
-        property386: 386,
-        property387: 387,
-        property388: 388,
-        property389: 389,
-        property390: 390,
-        property391: 391,
-        property392: 392,
-        property393: 393,
-        property394: 394,
-        property395: 395,
-        property396: 396,
-        property397: 397,
-        property398: 398,
-        property399: 399,
-        property400: 400,
-        property401: 401,
-        property402: 402,
-        property403: 403,
-        property404: 404,
-        property405: 405,
-        property406: 406,
-        property407: 407,
-        property408: 408,
-        property409: 409,
-        property410: 410,
-        property411: 411,
-        property412: 412,
-        property413: 413,
-        property414: 414,
-        property415: 415,
-        property416: 416,
-        property417: 417,
-        property418: 418,
-        property419: 419,
-        property420: 420,
-        property421: 421,
-        property422: 422,
-        property423: 423,
-        property424: 424,
-        property425: 425,
-        property426: 426,
-        property427: 427,
-        property428: 428,
-        property429: 429,
-        property430: 430,
-        property431: 431,
-        property432: 432,
-        property433: 433,
-        property434: 434,
-        property435: 435,
-        property436: 436,
-        property437: 437,
-        property438: 438,
-        property439: 439,
-        property440: 440,
-        property441: 441,
-        property442: 442,
-        property443: 443,
-        property444: 444,
-        property445: 445,
-        property446: 446,
-        property447: 447,
-        property448: 448,
-        property449: 449,
-        property450: 450,
-        property451: 451,
-        property452: 452,
-        property453: 453,
-        property454: 454,
-        property455: 455,
-        property456: 456,
-        property457: 457,
-        property458: 458,
-        property459: 459,
-        property460: 460,
-        property461: 461,
-        property462: 462,
-        property463: 463,
-        property464: 464,
-        property465: 465,
-        property466: 466,
-        property467: 467,
-        property468: 468,
-        property469: 469,
-        property470: 470,
-        property471: 471,
-        property472: 472,
-        property473: 473,
-        property474: 474,
-        property475: 475,
-        property476: 476,
-        property477: 477,
-        property478: 478,
-        property479: 479,
-        property480: 480,
-        property481: 481,
-        property482: 482,
-        property483: 483,
-        property484: 484,
-        property485: 485,
-        property486: 486,
-        property487: 487,
-        property488: 488,
-        property489: 489,
-        property490: 490,
-        property491: 491,
-        property492: 492,
-        property493: 493,
-        property494: 494,
-        property495: 495,
-        property496: 496,
-        property497: 497,
-        property498: 498,
-        property499: 499,
-        property500: 500,
-        property501: 501,
-        property502: 502,
-        property503: 503,
-        property504: 504,
-        property505: 505,
-        property506: 506,
-        property507: 507,
-        property508: 508,
-        property509: 509,
-        property510: 510,
-        property511: 511,
-        property512: 512,
-        property513: 513,
-        property514: 514,
-        property515: 515,
-        property516: 516,
-        property517: 517,
-        property518: 518,
-        property519: 519,
-        property520: 520,
-        property521: 521,
-        property522: 522,
-        property523: 523,
-        property524: 524,
-        property525: 525,
-        property526: 526,
-        property527: 527,
-        property528: 528,
-        property529: 529,
-        property530: 530,
-        property531: 531,
-        property532: 532,
-        property533: 533,
-        property534: 534,
-        property535: 535,
-        property536: 536,
-        property537: 537,
-        property538: 538,
-        property539: 539,
-        property540: 540,
-        property541: 541,
-        property542: 542,
-        property543: 543,
-        property544: 544,
-        property545: 545,
-        property546: 546,
-        property547: 547,
-        property548: 548,
-        property549: 549,
-        property550: 550,
-        property551: 551,
-        property552: 552,
-        property553: 553,
-        property554: 554,
-        property555: 555,
-        property556: 556,
-        property557: 557,
-        property558: 558,
-        property559: 559,
-        property560: 560,
-        property561: 561,
-        property562: 562,
-        property563: 563,
-        property564: 564,
-        property565: 565,
-        property566: 566,
-        property567: 567,
-        property568: 568,
-        property569: 569,
-        property570: 570,
-        property571: 571,
-        property572: 572,
-        property573: 573,
-        property574: 574,
-        property575: 575,
-        property576: 576,
-        property577: 577,
-        property578: 578,
-        property579: 579,
-        property580: 580,
-        property581: 581,
-        property582: 582,
-        property583: 583,
-        property584: 584,
-        property585: 585,
-        property586: 586,
-        property587: 587,
-        property588: 588,
-        property589: 589,
-        property590: 590,
-        property591: 591,
-        property592: 592,
-        property593: 593,
-        property594: 594,
-        property595: 595,
-        property596: 596,
-        property597: 597,
-        property598: 598,
-        property599: 599,
-        property600: 600,
-        property601: 601,
-        property602: 602,
-        property603: 603,
-        property604: 604,
-        property605: 605,
-        property606: 606,
-        property607: 607,
-        property608: 608,
-        property609: 609,
-        property610: 610,
-        property611: 611,
-        property612: 612,
-        property613: 613,
-        property614: 614,
-        property615: 615,
-        property616: 616,
-        property617: 617,
-        property618: 618,
-        property619: 619,
-        property620: 620,
-        property621: 621,
-        property622: 622,
-        property623: 623,
-        property624: 624,
-        property625: 625,
-        property626: 626,
-        property627: 627,
-        property628: 628,
-        property629: 629,
-        property630: 630,
-        property631: 631,
-        property632: 632,
-        property633: 633,
-        property634: 634,
-        property635: 635,
-        property636: 636,
-        property637: 637,
-        property638: 638,
-        property639: 639,
-        property640: 640,
-        property641: 641,
-        property642: 642,
-        property643: 643,
-        property644: 644,
-        property645: 645,
-        property646: 646,
-        property647: 647,
-        property648: 648,
-        property649: 649,
-        property650: 650,
-        property651: 651,
-        property652: 652,
-        property653: 653,
-        property654: 654,
-        property655: 655,
-        property656: 656,
-        property657: 657,
-        property658: 658,
-        property659: 659,
-        property660: 660,
-        property661: 661,
-        property662: 662,
-        property663: 663,
-        property664: 664,
-        property665: 665,
-        property666: 666,
-        property667: 667,
-        property668: 668,
-        property669: 669,
-        property670: 670,
-        property671: 671,
-        property672: 672,
-        property673: 673,
-        property674: 674,
-        property675: 675,
-        property676: 676,
-        property677: 677,
-        property678: 678,
-        property679: 679,
-        property680: 680,
-        property681: 681,
-        property682: 682,
-        property683: 683,
-        property684: 684,
-        property685: 685,
-        property686: 686,
-        property687: 687,
-        property688: 688,
-        property689: 689,
-        property690: 690,
-        property691: 691,
-        property692: 692,
-        property693: 693,
-        property694: 694,
-        property695: 695,
-        property696: 696,
-        property697: 697,
-        property698: 698,
-        property699: 699,
-        property700: 700,
-        property701: 701,
-        property702: 702,
-        property703: 703,
-        property704: 704,
-        property705: 705,
-        property706: 706,
-        property707: 707,
-        property708: 708,
-        property709: 709,
-        property710: 710,
-        property711: 711,
-        property712: 712,
-        property713: 713,
-        property714: 714,
-        property715: 715,
-        property716: 716,
-        property717: 717,
-        property718: 718,
-        property719: 719,
-        property720: 720,
-        property721: 721,
-        property722: 722,
-        property723: 723,
-        property724: 724,
-        property725: 725,
-        property726: 726,
-        property727: 727,
-        property728: 728,
-        property729: 729,
-        property730: 730,
-        property731: 731,
-        property732: 732,
-        property733: 733,
-        property734: 734,
-        property735: 735,
-        property736: 736,
-        property737: 737,
-        property738: 738,
-        property739: 739,
-        property740: 740,
-        property741: 741,
-        property742: 742,
-        property743: 743,
-        property744: 744,
-        property745: 745,
-        property746: 746,
-        property747: 747,
-        property748: 748,
-        property749: 749,
-        property750: 750,
-        property751: 751,
-        property752: 752,
-        property753: 753,
-        property754: 754,
-        property755: 755,
-        property756: 756,
-        property757: 757,
-        property758: 758,
-        property759: 759,
-        property760: 760,
-        property761: 761,
-        property762: 762,
-        property763: 763,
-        property764: 764,
-        property765: 765,
-        property766: 766,
-        property767: 767,
-        property768: 768,
-        property769: 769,
-        property770: 770,
-        property771: 771,
-        property772: 772,
-        property773: 773,
-        property774: 774,
-        property775: 775,
-        property776: 776,
-        property777: 777,
-        property778: 778,
-        property779: 779,
-        property780: 780,
-        property781: 781,
-        property782: 782,
-        property783: 783,
-        property784: 784,
-        property785: 785,
-        property786: 786,
-        property787: 787,
-        property788: 788,
-        property789: 789,
-        property790: 790,
-        property791: 791,
-        property792: 792,
-        property793: 793,
-        property794: 794,
-        property795: 795,
-        property796: 796,
-        property797: 797,
-        property798: 798,
-        property799: 799,
-        property800: 800,
-        property801: 801,
-        property802: 802,
-        property803: 803,
-        property804: 804,
-        property805: 805,
-        property806: 806,
-        property807: 807,
-        property808: 808,
-        property809: 809,
-        property810: 810,
-        property811: 811,
-        property812: 812,
-        property813: 813,
-        property814: 814,
-        property815: 815,
-        property816: 816,
-        property817: 817,
-        property818: 818,
-        property819: 819,
-        property820: 820,
-        property821: 821,
-        property822: 822,
-        property823: 823,
-        property824: 824,
-        property825: 825,
-        property826: 826,
-        property827: 827,
-        property828: 828,
-        property829: 829,
-        property830: 830,
-        property831: 831,
-        property832: 832,
-        property833: 833,
-        property834: 834,
-        property835: 835,
-        property836: 836,
-        property837: 837,
-        property838: 838,
-        property839: 839,
-        property840: 840,
-        property841: 841,
-        property842: 842,
-        property843: 843,
-        property844: 844,
-        property845: 845,
-        property846: 846,
-        property847: 847,
-        property848: 848,
-        property849: 849,
-        property850: 850,
-        property851: 851,
-        property852: 852,
-        property853: 853,
-        property854: 854,
-        property855: 855,
-        property856: 856,
-        property857: 857,
-        property858: 858,
-        property859: 859,
-        property860: 860,
-        property861: 861,
-        property862: 862,
-        property863: 863,
-        property864: 864,
-        property865: 865,
-        property866: 866,
-        property867: 867,
-        property868: 868,
-        property869: 869,
-        property870: 870,
-        property871: 871,
-        property872: 872,
-        property873: 873,
-        property874: 874,
-        property875: 875,
-        property876: 876,
-        property877: 877,
-        property878: 878,
-        property879: 879,
-        property880: 880,
-        property881: 881,
-        property882: 882,
-        property883: 883,
-        property884: 884,
-        property885: 885,
-        property886: 886,
-        property887: 887,
-        property888: 888,
-        property889: 889,
-        property890: 890,
-        property891: 891,
-        property892: 892,
-        property893: 893,
-        property894: 894,
-        property895: 895,
-        property896: 896,
-        property897: 897,
-        property898: 898,
-        property899: 899,
-        property900: 900,
-        property901: 901,
-        property902: 902,
-        property903: 903,
-        property904: 904,
-        property905: 905,
-        property906: 906,
-        property907: 907,
-        property908: 908,
-        property909: 909,
-        property910: 910,
-        property911: 911,
-        property912: 912,
-        property913: 913,
-        property914: 914,
-        property915: 915,
-        property916: 916,
-        property917: 917,
-        property918: 918,
-        property919: 919,
-        property920: 920,
-        property921: 921,
-        property922: 922,
-        property923: 923,
-        property924: 924,
-        property925: 925,
-        property926: 926,
-        property927: 927,
-        property928: 928,
-        property929: 929,
-        property930: 930,
-        property931: 931,
-        property932: 932,
-        property933: 933,
-        property934: 934,
-        property935: 935,
-        property936: 936,
-        property937: 937,
-        property938: 938,
-        property939: 939,
-        property940: 940,
-        property941: 941,
-        property942: 942,
-        property943: 943,
-        property944: 944,
-        property945: 945,
-        property946: 946,
-        property947: 947,
-        property948: 948,
-        property949: 949,
-        property950: 950,
-        property951: 951,
-        property952: 952,
-        property953: 953,
-        property954: 954,
-        property955: 955,
-        property956: 956,
-        property957: 957,
-        property958: 958,
-        property959: 959,
-        property960: 960,
-        property961: 961,
-        property962: 962,
-        property963: 963,
-        property964: 964,
-        property965: 965,
-        property966: 966,
-        property967: 967,
-        property968: 968,
-        property969: 969,
-        property970: 970,
-        property971: 971,
-        property972: 972,
-        property973: 973,
-        property974: 974,
-        property975: 975,
-        property976: 976,
-        property977: 977,
-        property978: 978,
-        property979: 979,
-        property980: 980,
-        property981: 981,
-        property982: 982,
-        property983: 983,
-        property984: 984,
-        property985: 985,
-        property986: 986,
-        property987: 987,
-        property988: 988,
-        property989: 989,
-        property990: 990,
-        property991: 991,
-        property992: 992,
-        property993: 993,
-        property994: 994,
-        property995: 995,
-        property996: 996,
-        property997: 997,
-        property998: 998,
-        property999: 999,
-        property1000: 1000,
-    });
-}
-
-function test2() {
-    var o = {};
-    o.property1 = 1;
-    o.property2 = 2;
-    o.property3 = 3;
-    o.property4 = 4;
-    o.property5 = 5;
-    o.property6 = 6;
-    o.property7 = 7;
-    o.property8 = 8;
-    o.property9 = 9;
-    o.property10 = 10;
-    o.property11 = 11;
-    o.property12 = 12;
-    o.property13 = 13;
-    o.property14 = 14;
-    o.property15 = 15;
-    o.property16 = 16;
-    o.property17 = 17;
-    o.property18 = 18;
-    o.property19 = 19;
-    o.property20 = 20;
-    o.property21 = 21;
-    o.property22 = 22;
-    o.property23 = 23;
-    o.property24 = 24;
-    o.property25 = 25;
-    o.property26 = 26;
-    o.property27 = 27;
-    o.property28 = 28;
-    o.property29 = 29;
-    o.property30 = 30;
-    o.property31 = 31;
-    o.property32 = 32;
-    o.property33 = 33;
-    o.property34 = 34;
-    o.property35 = 35;
-    o.property36 = 36;
-    o.property37 = 37;
-    o.property38 = 38;
-    o.property39 = 39;
-    o.property40 = 40;
-    o.property41 = 41;
-    o.property42 = 42;
-    o.property43 = 43;
-    o.property44 = 44;
-    o.property45 = 45;
-    o.property46 = 46;
-    o.property47 = 47;
-    o.property48 = 48;
-    o.property49 = 49;
-    o.property50 = 50;
-    o.property51 = 51;
-    o.property52 = 52;
-    o.property53 = 53;
-    o.property54 = 54;
-    o.property55 = 55;
-    o.property56 = 56;
-    o.property57 = 57;
-    o.property58 = 58;
-    o.property59 = 59;
-    o.property60 = 60;
-    o.property61 = 61;
-    o.property62 = 62;
-    o.property63 = 63;
-    o.property64 = 64;
-    o.property65 = 65;
-    o.property66 = 66;
-    o.property67 = 67;
-    o.property68 = 68;
-    o.property69 = 69;
-    o.property70 = 70;
-    o.property71 = 71;
-    o.property72 = 72;
-    o.property73 = 73;
-    o.property74 = 74;
-    o.property75 = 75;
-    o.property76 = 76;
-    o.property77 = 77;
-    o.property78 = 78;
-    o.property79 = 79;
-    o.property80 = 80;
-    o.property81 = 81;
-    o.property82 = 82;
-    o.property83 = 83;
-    o.property84 = 84;
-    o.property85 = 85;
-    o.property86 = 86;
-    o.property87 = 87;
-    o.property88 = 88;
-    o.property89 = 89;
-    o.property90 = 90;
-    o.property91 = 91;
-    o.property92 = 92;
-    o.property93 = 93;
-    o.property94 = 94;
-    o.property95 = 95;
-    o.property96 = 96;
-    o.property97 = 97;
-    o.property98 = 98;
-    o.property99 = 99;
-    o.property100 = 100;
-    o.property101 = 101;
-    o.property102 = 102;
-    o.property103 = 103;
-    o.property104 = 104;
-    o.property105 = 105;
-    o.property106 = 106;
-    o.property107 = 107;
-    o.property108 = 108;
-    o.property109 = 109;
-    o.property110 = 110;
-    o.property111 = 111;
-    o.property112 = 112;
-    o.property113 = 113;
-    o.property114 = 114;
-    o.property115 = 115;
-    o.property116 = 116;
-    o.property117 = 117;
-    o.property118 = 118;
-    o.property119 = 119;
-    o.property120 = 120;
-    o.property121 = 121;
-    o.property122 = 122;
-    o.property123 = 123;
-    o.property124 = 124;
-    o.property125 = 125;
-    o.property126 = 126;
-    o.property127 = 127;
-    o.property128 = 128;
-    o.property129 = 129;
-    o.property130 = 130;
-    o.property131 = 131;
-    o.property132 = 132;
-    o.property133 = 133;
-    o.property134 = 134;
-    o.property135 = 135;
-    o.property136 = 136;
-    o.property137 = 137;
-    o.property138 = 138;
-    o.property139 = 139;
-    o.property140 = 140;
-    o.property141 = 141;
-    o.property142 = 142;
-    o.property143 = 143;
-    o.property144 = 144;
-    o.property145 = 145;
-    o.property146 = 146;
-    o.property147 = 147;
-    o.property148 = 148;
-    o.property149 = 149;
-    o.property150 = 150;
-    o.property151 = 151;
-    o.property152 = 152;
-    o.property153 = 153;
-    o.property154 = 154;
-    o.property155 = 155;
-    o.property156 = 156;
-    o.property157 = 157;
-    o.property158 = 158;
-    o.property159 = 159;
-    o.property160 = 160;
-    o.property161 = 161;
-    o.property162 = 162;
-    o.property163 = 163;
-    o.property164 = 164;
-    o.property165 = 165;
-    o.property166 = 166;
-    o.property167 = 167;
-    o.property168 = 168;
-    o.property169 = 169;
-    o.property170 = 170;
-    o.property171 = 171;
-    o.property172 = 172;
-    o.property173 = 173;
-    o.property174 = 174;
-    o.property175 = 175;
-    o.property176 = 176;
-    o.property177 = 177;
-    o.property178 = 178;
-    o.property179 = 179;
-    o.property180 = 180;
-    o.property181 = 181;
-    o.property182 = 182;
-    o.property183 = 183;
-    o.property184 = 184;
-    o.property185 = 185;
-    o.property186 = 186;
-    o.property187 = 187;
-    o.property188 = 188;
-    o.property189 = 189;
-    o.property190 = 190;
-    o.property191 = 191;
-    o.property192 = 192;
-    o.property193 = 193;
-    o.property194 = 194;
-    o.property195 = 195;
-    o.property196 = 196;
-    o.property197 = 197;
-    o.property198 = 198;
-    o.property199 = 199;
-    o.property200 = 200;
-    o.property201 = 201;
-    o.property202 = 202;
-    o.property203 = 203;
-    o.property204 = 204;
-    o.property205 = 205;
-    o.property206 = 206;
-    o.property207 = 207;
-    o.property208 = 208;
-    o.property209 = 209;
-    o.property210 = 210;
-    o.property211 = 211;
-    o.property212 = 212;
-    o.property213 = 213;
-    o.property214 = 214;
-    o.property215 = 215;
-    o.property216 = 216;
-    o.property217 = 217;
-    o.property218 = 218;
-    o.property219 = 219;
-    o.property220 = 220;
-    o.property221 = 221;
-    o.property222 = 222;
-    o.property223 = 223;
-    o.property224 = 224;
-    o.property225 = 225;
-    o.property226 = 226;
-    o.property227 = 227;
-    o.property228 = 228;
-    o.property229 = 229;
-    o.property230 = 230;
-    o.property231 = 231;
-    o.property232 = 232;
-    o.property233 = 233;
-    o.property234 = 234;
-    o.property235 = 235;
-    o.property236 = 236;
-    o.property237 = 237;
-    o.property238 = 238;
-    o.property239 = 239;
-    o.property240 = 240;
-    o.property241 = 241;
-    o.property242 = 242;
-    o.property243 = 243;
-    o.property244 = 244;
-    o.property245 = 245;
-    o.property246 = 246;
-    o.property247 = 247;
-    o.property248 = 248;
-    o.property249 = 249;
-    o.property250 = 250;
-    o.property251 = 251;
-    o.property252 = 252;
-    o.property253 = 253;
-    o.property254 = 254;
-    o.property255 = 255;
-    o.property256 = 256;
-    o.property257 = 257;
-    o.property258 = 258;
-    o.property259 = 259;
-    o.property260 = 260;
-    o.property261 = 261;
-    o.property262 = 262;
-    o.property263 = 263;
-    o.property264 = 264;
-    o.property265 = 265;
-    o.property266 = 266;
-    o.property267 = 267;
-    o.property268 = 268;
-    o.property269 = 269;
-    o.property270 = 270;
-    o.property271 = 271;
-    o.property272 = 272;
-    o.property273 = 273;
-    o.property274 = 274;
-    o.property275 = 275;
-    o.property276 = 276;
-    o.property277 = 277;
-    o.property278 = 278;
-    o.property279 = 279;
-    o.property280 = 280;
-    o.property281 = 281;
-    o.property282 = 282;
-    o.property283 = 283;
-    o.property284 = 284;
-    o.property285 = 285;
-    o.property286 = 286;
-    o.property287 = 287;
-    o.property288 = 288;
-    o.property289 = 289;
-    o.property290 = 290;
-    o.property291 = 291;
-    o.property292 = 292;
-    o.property293 = 293;
-    o.property294 = 294;
-    o.property295 = 295;
-    o.property296 = 296;
-    o.property297 = 297;
-    o.property298 = 298;
-    o.property299 = 299;
-    o.property300 = 300;
-    o.property301 = 301;
-    o.property302 = 302;
-    o.property303 = 303;
-    o.property304 = 304;
-    o.property305 = 305;
-    o.property306 = 306;
-    o.property307 = 307;
-    o.property308 = 308;
-    o.property309 = 309;
-    o.property310 = 310;
-    o.property311 = 311;
-    o.property312 = 312;
-    o.property313 = 313;
-    o.property314 = 314;
-    o.property315 = 315;
-    o.property316 = 316;
-    o.property317 = 317;
-    o.property318 = 318;
-    o.property319 = 319;
-    o.property320 = 320;
-    o.property321 = 321;
-    o.property322 = 322;
-    o.property323 = 323;
-    o.property324 = 324;
-    o.property325 = 325;
-    o.property326 = 326;
-    o.property327 = 327;
-    o.property328 = 328;
-    o.property329 = 329;
-    o.property330 = 330;
-    o.property331 = 331;
-    o.property332 = 332;
-    o.property333 = 333;
-    o.property334 = 334;
-    o.property335 = 335;
-    o.property336 = 336;
-    o.property337 = 337;
-    o.property338 = 338;
-    o.property339 = 339;
-    o.property340 = 340;
-    o.property341 = 341;
-    o.property342 = 342;
-    o.property343 = 343;
-    o.property344 = 344;
-    o.property345 = 345;
-    o.property346 = 346;
-    o.property347 = 347;
-    o.property348 = 348;
-    o.property349 = 349;
-    o.property350 = 350;
-    o.property351 = 351;
-    o.property352 = 352;
-    o.property353 = 353;
-    o.property354 = 354;
-    o.property355 = 355;
-    o.property356 = 356;
-    o.property357 = 357;
-    o.property358 = 358;
-    o.property359 = 359;
-    o.property360 = 360;
-    o.property361 = 361;
-    o.property362 = 362;
-    o.property363 = 363;
-    o.property364 = 364;
-    o.property365 = 365;
-    o.property366 = 366;
-    o.property367 = 367;
-    o.property368 = 368;
-    o.property369 = 369;
-    o.property370 = 370;
-    o.property371 = 371;
-    o.property372 = 372;
-    o.property373 = 373;
-    o.property374 = 374;
-    o.property375 = 375;
-    o.property376 = 376;
-    o.property377 = 377;
-    o.property378 = 378;
-    o.property379 = 379;
-    o.property380 = 380;
-    o.property381 = 381;
-    o.property382 = 382;
-    o.property383 = 383;
-    o.property384 = 384;
-    o.property385 = 385;
-    o.property386 = 386;
-    o.property387 = 387;
-    o.property388 = 388;
-    o.property389 = 389;
-    o.property390 = 390;
-    o.property391 = 391;
-    o.property392 = 392;
-    o.property393 = 393;
-    o.property394 = 394;
-    o.property395 = 395;
-    o.property396 = 396;
-    o.property397 = 397;
-    o.property398 = 398;
-    o.property399 = 399;
-    o.property400 = 400;
-    o.property401 = 401;
-    o.property402 = 402;
-    o.property403 = 403;
-    o.property404 = 404;
-    o.property405 = 405;
-    o.property406 = 406;
-    o.property407 = 407;
-    o.property408 = 408;
-    o.property409 = 409;
-    o.property410 = 410;
-    o.property411 = 411;
-    o.property412 = 412;
-    o.property413 = 413;
-    o.property414 = 414;
-    o.property415 = 415;
-    o.property416 = 416;
-    o.property417 = 417;
-    o.property418 = 418;
-    o.property419 = 419;
-    o.property420 = 420;
-    o.property421 = 421;
-    o.property422 = 422;
-    o.property423 = 423;
-    o.property424 = 424;
-    o.property425 = 425;
-    o.property426 = 426;
-    o.property427 = 427;
-    o.property428 = 428;
-    o.property429 = 429;
-    o.property430 = 430;
-    o.property431 = 431;
-    o.property432 = 432;
-    o.property433 = 433;
-    o.property434 = 434;
-    o.property435 = 435;
-    o.property436 = 436;
-    o.property437 = 437;
-    o.property438 = 438;
-    o.property439 = 439;
-    o.property440 = 440;
-    o.property441 = 441;
-    o.property442 = 442;
-    o.property443 = 443;
-    o.property444 = 444;
-    o.property445 = 445;
-    o.property446 = 446;
-    o.property447 = 447;
-    o.property448 = 448;
-    o.property449 = 449;
-    o.property450 = 450;
-    o.property451 = 451;
-    o.property452 = 452;
-    o.property453 = 453;
-    o.property454 = 454;
-    o.property455 = 455;
-    o.property456 = 456;
-    o.property457 = 457;
-    o.property458 = 458;
-    o.property459 = 459;
-    o.property460 = 460;
-    o.property461 = 461;
-    o.property462 = 462;
-    o.property463 = 463;
-    o.property464 = 464;
-    o.property465 = 465;
-    o.property466 = 466;
-    o.property467 = 467;
-    o.property468 = 468;
-    o.property469 = 469;
-    o.property470 = 470;
-    o.property471 = 471;
-    o.property472 = 472;
-    o.property473 = 473;
-    o.property474 = 474;
-    o.property475 = 475;
-    o.property476 = 476;
-    o.property477 = 477;
-    o.property478 = 478;
-    o.property479 = 479;
-    o.property480 = 480;
-    o.property481 = 481;
-    o.property482 = 482;
-    o.property483 = 483;
-    o.property484 = 484;
-    o.property485 = 485;
-    o.property486 = 486;
-    o.property487 = 487;
-    o.property488 = 488;
-    o.property489 = 489;
-    o.property490 = 490;
-    o.property491 = 491;
-    o.property492 = 492;
-    o.property493 = 493;
-    o.property494 = 494;
-    o.property495 = 495;
-    o.property496 = 496;
-    o.property497 = 497;
-    o.property498 = 498;
-    o.property499 = 499;
-    o.property500 = 500;
-    o.property501 = 501;
-    o.property502 = 502;
-    o.property503 = 503;
-    o.property504 = 504;
-    o.property505 = 505;
-    o.property506 = 506;
-    o.property507 = 507;
-    o.property508 = 508;
-    o.property509 = 509;
-    o.property510 = 510;
-    o.property511 = 511;
-    o.property512 = 512;
-    o.property513 = 513;
-    o.property514 = 514;
-    o.property515 = 515;
-    o.property516 = 516;
-    o.property517 = 517;
-    o.property518 = 518;
-    o.property519 = 519;
-    o.property520 = 520;
-    o.property521 = 521;
-    o.property522 = 522;
-    o.property523 = 523;
-    o.property524 = 524;
-    o.property525 = 525;
-    o.property526 = 526;
-    o.property527 = 527;
-    o.property528 = 528;
-    o.property529 = 529;
-    o.property530 = 530;
-    o.property531 = 531;
-    o.property532 = 532;
-    o.property533 = 533;
-    o.property534 = 534;
-    o.property535 = 535;
-    o.property536 = 536;
-    o.property537 = 537;
-    o.property538 = 538;
-    o.property539 = 539;
-    o.property540 = 540;
-    o.property541 = 541;
-    o.property542 = 542;
-    o.property543 = 543;
-    o.property544 = 544;
-    o.property545 = 545;
-    o.property546 = 546;
-    o.property547 = 547;
-    o.property548 = 548;
-    o.property549 = 549;
-    o.property550 = 550;
-    o.property551 = 551;
-    o.property552 = 552;
-    o.property553 = 553;
-    o.property554 = 554;
-    o.property555 = 555;
-    o.property556 = 556;
-    o.property557 = 557;
-    o.property558 = 558;
-    o.property559 = 559;
-    o.property560 = 560;
-    o.property561 = 561;
-    o.property562 = 562;
-    o.property563 = 563;
-    o.property564 = 564;
-    o.property565 = 565;
-    o.property566 = 566;
-    o.property567 = 567;
-    o.property568 = 568;
-    o.property569 = 569;
-    o.property570 = 570;
-    o.property571 = 571;
-    o.property572 = 572;
-    o.property573 = 573;
-    o.property574 = 574;
-    o.property575 = 575;
-    o.property576 = 576;
-    o.property577 = 577;
-    o.property578 = 578;
-    o.property579 = 579;
-    o.property580 = 580;
-    o.property581 = 581;
-    o.property582 = 582;
-    o.property583 = 583;
-    o.property584 = 584;
-    o.property585 = 585;
-    o.property586 = 586;
-    o.property587 = 587;
-    o.property588 = 588;
-    o.property589 = 589;
-    o.property590 = 590;
-    o.property591 = 591;
-    o.property592 = 592;
-    o.property593 = 593;
-    o.property594 = 594;
-    o.property595 = 595;
-    o.property596 = 596;
-    o.property597 = 597;
-    o.property598 = 598;
-    o.property599 = 599;
-    o.property600 = 600;
-    o.property601 = 601;
-    o.property602 = 602;
-    o.property603 = 603;
-    o.property604 = 604;
-    o.property605 = 605;
-    o.property606 = 606;
-    o.property607 = 607;
-    o.property608 = 608;
-    o.property609 = 609;
-    o.property610 = 610;
-    o.property611 = 611;
-    o.property612 = 612;
-    o.property613 = 613;
-    o.property614 = 614;
-    o.property615 = 615;
-    o.property616 = 616;
-    o.property617 = 617;
-    o.property618 = 618;
-    o.property619 = 619;
-    o.property620 = 620;
-    o.property621 = 621;
-    o.property622 = 622;
-    o.property623 = 623;
-    o.property624 = 624;
-    o.property625 = 625;
-    o.property626 = 626;
-    o.property627 = 627;
-    o.property628 = 628;
-    o.property629 = 629;
-    o.property630 = 630;
-    o.property631 = 631;
-    o.property632 = 632;
-    o.property633 = 633;
-    o.property634 = 634;
-    o.property635 = 635;
-    o.property636 = 636;
-    o.property637 = 637;
-    o.property638 = 638;
-    o.property639 = 639;
-    o.property640 = 640;
-    o.property641 = 641;
-    o.property642 = 642;
-    o.property643 = 643;
-    o.property644 = 644;
-    o.property645 = 645;
-    o.property646 = 646;
-    o.property647 = 647;
-    o.property648 = 648;
-    o.property649 = 649;
-    o.property650 = 650;
-    o.property651 = 651;
-    o.property652 = 652;
-    o.property653 = 653;
-    o.property654 = 654;
-    o.property655 = 655;
-    o.property656 = 656;
-    o.property657 = 657;
-    o.property658 = 658;
-    o.property659 = 659;
-    o.property660 = 660;
-    o.property661 = 661;
-    o.property662 = 662;
-    o.property663 = 663;
-    o.property664 = 664;
-    o.property665 = 665;
-    o.property666 = 666;
-    o.property667 = 667;
-    o.property668 = 668;
-    o.property669 = 669;
-    o.property670 = 670;
-    o.property671 = 671;
-    o.property672 = 672;
-    o.property673 = 673;
-    o.property674 = 674;
-    o.property675 = 675;
-    o.property676 = 676;
-    o.property677 = 677;
-    o.property678 = 678;
-    o.property679 = 679;
-    o.property680 = 680;
-    o.property681 = 681;
-    o.property682 = 682;
-    o.property683 = 683;
-    o.property684 = 684;
-    o.property685 = 685;
-    o.property686 = 686;
-    o.property687 = 687;
-    o.property688 = 688;
-    o.property689 = 689;
-    o.property690 = 690;
-    o.property691 = 691;
-    o.property692 = 692;
-    o.property693 = 693;
-    o.property694 = 694;
-    o.property695 = 695;
-    o.property696 = 696;
-    o.property697 = 697;
-    o.property698 = 698;
-    o.property699 = 699;
-    o.property700 = 700;
-    o.property701 = 701;
-    o.property702 = 702;
-    o.property703 = 703;
-    o.property704 = 704;
-    o.property705 = 705;
-    o.property706 = 706;
-    o.property707 = 707;
-    o.property708 = 708;
-    o.property709 = 709;
-    o.property710 = 710;
-    o.property711 = 711;
-    o.property712 = 712;
-    o.property713 = 713;
-    o.property714 = 714;
-    o.property715 = 715;
-    o.property716 = 716;
-    o.property717 = 717;
-    o.property718 = 718;
-    o.property719 = 719;
-    o.property720 = 720;
-    o.property721 = 721;
-    o.property722 = 722;
-    o.property723 = 723;
-    o.property724 = 724;
-    o.property725 = 725;
-    o.property726 = 726;
-    o.property727 = 727;
-    o.property728 = 728;
-    o.property729 = 729;
-    o.property730 = 730;
-    o.property731 = 731;
-    o.property732 = 732;
-    o.property733 = 733;
-    o.property734 = 734;
-    o.property735 = 735;
-    o.property736 = 736;
-    o.property737 = 737;
-    o.property738 = 738;
-    o.property739 = 739;
-    o.property740 = 740;
-    o.property741 = 741;
-    o.property742 = 742;
-    o.property743 = 743;
-    o.property744 = 744;
-    o.property745 = 745;
-    o.property746 = 746;
-    o.property747 = 747;
-    o.property748 = 748;
-    o.property749 = 749;
-    o.property750 = 750;
-    o.property751 = 751;
-    o.property752 = 752;
-    o.property753 = 753;
-    o.property754 = 754;
-    o.property755 = 755;
-    o.property756 = 756;
-    o.property757 = 757;
-    o.property758 = 758;
-    o.property759 = 759;
-    o.property760 = 760;
-    o.property761 = 761;
-    o.property762 = 762;
-    o.property763 = 763;
-    o.property764 = 764;
-    o.property765 = 765;
-    o.property766 = 766;
-    o.property767 = 767;
-    o.property768 = 768;
-    o.property769 = 769;
-    o.property770 = 770;
-    o.property771 = 771;
-    o.property772 = 772;
-    o.property773 = 773;
-    o.property774 = 774;
-    o.property775 = 775;
-    o.property776 = 776;
-    o.property777 = 777;
-    o.property778 = 778;
-    o.property779 = 779;
-    o.property780 = 780;
-    o.property781 = 781;
-    o.property782 = 782;
-    o.property783 = 783;
-    o.property784 = 784;
-    o.property785 = 785;
-    o.property786 = 786;
-    o.property787 = 787;
-    o.property788 = 788;
-    o.property789 = 789;
-    o.property790 = 790;
-    o.property791 = 791;
-    o.property792 = 792;
-    o.property793 = 793;
-    o.property794 = 794;
-    o.property795 = 795;
-    o.property796 = 796;
-    o.property797 = 797;
-    o.property798 = 798;
-    o.property799 = 799;
-    o.property800 = 800;
-    o.property801 = 801;
-    o.property802 = 802;
-    o.property803 = 803;
-    o.property804 = 804;
-    o.property805 = 805;
-    o.property806 = 806;
-    o.property807 = 807;
-    o.property808 = 808;
-    o.property809 = 809;
-    o.property810 = 810;
-    o.property811 = 811;
-    o.property812 = 812;
-    o.property813 = 813;
-    o.property814 = 814;
-    o.property815 = 815;
-    o.property816 = 816;
-    o.property817 = 817;
-    o.property818 = 818;
-    o.property819 = 819;
-    o.property820 = 820;
-    o.property821 = 821;
-    o.property822 = 822;
-    o.property823 = 823;
-    o.property824 = 824;
-    o.property825 = 825;
-    o.property826 = 826;
-    o.property827 = 827;
-    o.property828 = 828;
-    o.property829 = 829;
-    o.property830 = 830;
-    o.property831 = 831;
-    o.property832 = 832;
-    o.property833 = 833;
-    o.property834 = 834;
-    o.property835 = 835;
-    o.property836 = 836;
-    o.property837 = 837;
-    o.property838 = 838;
-    o.property839 = 839;
-    o.property840 = 840;
-    o.property841 = 841;
-    o.property842 = 842;
-    o.property843 = 843;
-    o.property844 = 844;
-    o.property845 = 845;
-    o.property846 = 846;
-    o.property847 = 847;
-    o.property848 = 848;
-    o.property849 = 849;
-    o.property850 = 850;
-    o.property851 = 851;
-    o.property852 = 852;
-    o.property853 = 853;
-    o.property854 = 854;
-    o.property855 = 855;
-    o.property856 = 856;
-    o.property857 = 857;
-    o.property858 = 858;
-    o.property859 = 859;
-    o.property860 = 860;
-    o.property861 = 861;
-    o.property862 = 862;
-    o.property863 = 863;
-    o.property864 = 864;
-    o.property865 = 865;
-    o.property866 = 866;
-    o.property867 = 867;
-    o.property868 = 868;
-    o.property869 = 869;
-    o.property870 = 870;
-    o.property871 = 871;
-    o.property872 = 872;
-    o.property873 = 873;
-    o.property874 = 874;
-    o.property875 = 875;
-    o.property876 = 876;
-    o.property877 = 877;
-    o.property878 = 878;
-    o.property879 = 879;
-    o.property880 = 880;
-    o.property881 = 881;
-    o.property882 = 882;
-    o.property883 = 883;
-    o.property884 = 884;
-    o.property885 = 885;
-    o.property886 = 886;
-    o.property887 = 887;
-    o.property888 = 888;
-    o.property889 = 889;
-    o.property890 = 890;
-    o.property891 = 891;
-    o.property892 = 892;
-    o.property893 = 893;
-    o.property894 = 894;
-    o.property895 = 895;
-    o.property896 = 896;
-    o.property897 = 897;
-    o.property898 = 898;
-    o.property899 = 899;
-    o.property900 = 900;
-    o.property901 = 901;
-    o.property902 = 902;
-    o.property903 = 903;
-    o.property904 = 904;
-    o.property905 = 905;
-    o.property906 = 906;
-    o.property907 = 907;
-    o.property908 = 908;
-    o.property909 = 909;
-    o.property910 = 910;
-    o.property911 = 911;
-    o.property912 = 912;
-    o.property913 = 913;
-    o.property914 = 914;
-    o.property915 = 915;
-    o.property916 = 916;
-    o.property917 = 917;
-    o.property918 = 918;
-    o.property919 = 919;
-    o.property920 = 920;
-    o.property921 = 921;
-    o.property922 = 922;
-    o.property923 = 923;
-    o.property924 = 924;
-    o.property925 = 925;
-    o.property926 = 926;
-    o.property927 = 927;
-    o.property928 = 928;
-    o.property929 = 929;
-    o.property930 = 930;
-    o.property931 = 931;
-    o.property932 = 932;
-    o.property933 = 933;
-    o.property934 = 934;
-    o.property935 = 935;
-    o.property936 = 936;
-    o.property937 = 937;
-    o.property938 = 938;
-    o.property939 = 939;
-    o.property940 = 940;
-    o.property941 = 941;
-    o.property942 = 942;
-    o.property943 = 943;
-    o.property944 = 944;
-    o.property945 = 945;
-    o.property946 = 946;
-    o.property947 = 947;
-    o.property948 = 948;
-    o.property949 = 949;
-    o.property950 = 950;
-    o.property951 = 951;
-    o.property952 = 952;
-    o.property953 = 953;
-    o.property954 = 954;
-    o.property955 = 955;
-    o.property956 = 956;
-    o.property957 = 957;
-    o.property958 = 958;
-    o.property959 = 959;
-    o.property960 = 960;
-    o.property961 = 961;
-    o.property962 = 962;
-    o.property963 = 963;
-    o.property964 = 964;
-    o.property965 = 965;
-    o.property966 = 966;
-    o.property967 = 967;
-    o.property968 = 968;
-    o.property969 = 969;
-    o.property970 = 970;
-    o.property971 = 971;
-    o.property972 = 972;
-    o.property973 = 973;
-    o.property974 = 974;
-    o.property975 = 975;
-    o.property976 = 976;
-    o.property977 = 977;
-    o.property978 = 978;
-    o.property979 = 979;
-    o.property980 = 980;
-    o.property981 = 981;
-    o.property982 = 982;
-    o.property983 = 983;
-    o.property984 = 984;
-    o.property985 = 985;
-    o.property986 = 986;
-    o.property987 = 987;
-    o.property988 = 988;
-    o.property989 = 989;
-    o.property990 = 990;
-    o.property991 = 991;
-    o.property992 = 992;
-    o.property993 = 993;
-    o.property994 = 994;
-    o.property995 = 995;
-    o.property996 = 996;
-    o.property997 = 997;
-    o.property998 = 998;
-    o.property999 = 999;
-    o.property1000 = 1000;
-}
-
-function test3() {
-    function Foo() {
-        this.property1 = 1;
-        this.property2 = 2;
-        this.property3 = 3;
-        this.property4 = 4;
-        this.property5 = 5;
-        this.property6 = 6;
-        this.property7 = 7;
-        this.property8 = 8;
-        this.property9 = 9;
-        this.property10 = 10;
-        this.property11 = 11;
-        this.property12 = 12;
-        this.property13 = 13;
-        this.property14 = 14;
-        this.property15 = 15;
-        this.property16 = 16;
-        this.property17 = 17;
-        this.property18 = 18;
-        this.property19 = 19;
-        this.property20 = 20;
-        this.property21 = 21;
-        this.property22 = 22;
-        this.property23 = 23;
-        this.property24 = 24;
-        this.property25 = 25;
-        this.property26 = 26;
-        this.property27 = 27;
-        this.property28 = 28;
-        this.property29 = 29;
-        this.property30 = 30;
-        this.property31 = 31;
-        this.property32 = 32;
-        this.property33 = 33;
-        this.property34 = 34;
-        this.property35 = 35;
-        this.property36 = 36;
-        this.property37 = 37;
-        this.property38 = 38;
-        this.property39 = 39;
-        this.property40 = 40;
-        this.property41 = 41;
-        this.property42 = 42;
-        this.property43 = 43;
-        this.property44 = 44;
-        this.property45 = 45;
-        this.property46 = 46;
-        this.property47 = 47;
-        this.property48 = 48;
-        this.property49 = 49;
-        this.property50 = 50;
-        this.property51 = 51;
-        this.property52 = 52;
-        this.property53 = 53;
-        this.property54 = 54;
-        this.property55 = 55;
-        this.property56 = 56;
-        this.property57 = 57;
-        this.property58 = 58;
-        this.property59 = 59;
-        this.property60 = 60;
-        this.property61 = 61;
-        this.property62 = 62;
-        this.property63 = 63;
-        this.property64 = 64;
-        this.property65 = 65;
-        this.property66 = 66;
-        this.property67 = 67;
-        this.property68 = 68;
-        this.property69 = 69;
-        this.property70 = 70;
-        this.property71 = 71;
-        this.property72 = 72;
-        this.property73 = 73;
-        this.property74 = 74;
-        this.property75 = 75;
-        this.property76 = 76;
-        this.property77 = 77;
-        this.property78 = 78;
-        this.property79 = 79;
-        this.property80 = 80;
-        this.property81 = 81;
-        this.property82 = 82;
-        this.property83 = 83;
-        this.property84 = 84;
-        this.property85 = 85;
-        this.property86 = 86;
-        this.property87 = 87;
-        this.property88 = 88;
-        this.property89 = 89;
-        this.property90 = 90;
-        this.property91 = 91;
-        this.property92 = 92;
-        this.property93 = 93;
-        this.property94 = 94;
-        this.property95 = 95;
-        this.property96 = 96;
-        this.property97 = 97;
-        this.property98 = 98;
-        this.property99 = 99;
-        this.property100 = 100;
-        this.property101 = 101;
-        this.property102 = 102;
-        this.property103 = 103;
-        this.property104 = 104;
-        this.property105 = 105;
-        this.property106 = 106;
-        this.property107 = 107;
-        this.property108 = 108;
-        this.property109 = 109;
-        this.property110 = 110;
-        this.property111 = 111;
-        this.property112 = 112;
-        this.property113 = 113;
-        this.property114 = 114;
-        this.property115 = 115;
-        this.property116 = 116;
-        this.property117 = 117;
-        this.property118 = 118;
-        this.property119 = 119;
-        this.property120 = 120;
-        this.property121 = 121;
-        this.property122 = 122;
-        this.property123 = 123;
-        this.property124 = 124;
-        this.property125 = 125;
-        this.property126 = 126;
-        this.property127 = 127;
-        this.property128 = 128;
-        this.property129 = 129;
-        this.property130 = 130;
-        this.property131 = 131;
-        this.property132 = 132;
-        this.property133 = 133;
-        this.property134 = 134;
-        this.property135 = 135;
-        this.property136 = 136;
-        this.property137 = 137;
-        this.property138 = 138;
-        this.property139 = 139;
-        this.property140 = 140;
-        this.property141 = 141;
-        this.property142 = 142;
-        this.property143 = 143;
-        this.property144 = 144;
-        this.property145 = 145;
-        this.property146 = 146;
-        this.property147 = 147;
-        this.property148 = 148;
-        this.property149 = 149;
-        this.property150 = 150;
-        this.property151 = 151;
-        this.property152 = 152;
-        this.property153 = 153;
-        this.property154 = 154;
-        this.property155 = 155;
-        this.property156 = 156;
-        this.property157 = 157;
-        this.property158 = 158;
-        this.property159 = 159;
-        this.property160 = 160;
-        this.property161 = 161;
-        this.property162 = 162;
-        this.property163 = 163;
-        this.property164 = 164;
-        this.property165 = 165;
-        this.property166 = 166;
-        this.property167 = 167;
-        this.property168 = 168;
-        this.property169 = 169;
-        this.property170 = 170;
-        this.property171 = 171;
-        this.property172 = 172;
-        this.property173 = 173;
-        this.property174 = 174;
-        this.property175 = 175;
-        this.property176 = 176;
-        this.property177 = 177;
-        this.property178 = 178;
-        this.property179 = 179;
-        this.property180 = 180;
-        this.property181 = 181;
-        this.property182 = 182;
-        this.property183 = 183;
-        this.property184 = 184;
-        this.property185 = 185;
-        this.property186 = 186;
-        this.property187 = 187;
-        this.property188 = 188;
-        this.property189 = 189;
-        this.property190 = 190;
-        this.property191 = 191;
-        this.property192 = 192;
-        this.property193 = 193;
-        this.property194 = 194;
-        this.property195 = 195;
-        this.property196 = 196;
-        this.property197 = 197;
-        this.property198 = 198;
-        this.property199 = 199;
-        this.property200 = 200;
-        this.property201 = 201;
-        this.property202 = 202;
-        this.property203 = 203;
-        this.property204 = 204;
-        this.property205 = 205;
-        this.property206 = 206;
-        this.property207 = 207;
-        this.property208 = 208;
-        this.property209 = 209;
-        this.property210 = 210;
-        this.property211 = 211;
-        this.property212 = 212;
-        this.property213 = 213;
-        this.property214 = 214;
-        this.property215 = 215;
-        this.property216 = 216;
-        this.property217 = 217;
-        this.property218 = 218;
-        this.property219 = 219;
-        this.property220 = 220;
-        this.property221 = 221;
-        this.property222 = 222;
-        this.property223 = 223;
-        this.property224 = 224;
-        this.property225 = 225;
-        this.property226 = 226;
-        this.property227 = 227;
-        this.property228 = 228;
-        this.property229 = 229;
-        this.property230 = 230;
-        this.property231 = 231;
-        this.property232 = 232;
-        this.property233 = 233;
-        this.property234 = 234;
-        this.property235 = 235;
-        this.property236 = 236;
-        this.property237 = 237;
-        this.property238 = 238;
-        this.property239 = 239;
-        this.property240 = 240;
-        this.property241 = 241;
-        this.property242 = 242;
-        this.property243 = 243;
-        this.property244 = 244;
-        this.property245 = 245;
-        this.property246 = 246;
-        this.property247 = 247;
-        this.property248 = 248;
-        this.property249 = 249;
-        this.property250 = 250;
-        this.property251 = 251;
-        this.property252 = 252;
-        this.property253 = 253;
-        this.property254 = 254;
-        this.property255 = 255;
-        this.property256 = 256;
-        this.property257 = 257;
-        this.property258 = 258;
-        this.property259 = 259;
-        this.property260 = 260;
-        this.property261 = 261;
-        this.property262 = 262;
-        this.property263 = 263;
-        this.property264 = 264;
-        this.property265 = 265;
-        this.property266 = 266;
-        this.property267 = 267;
-        this.property268 = 268;
-        this.property269 = 269;
-        this.property270 = 270;
-        this.property271 = 271;
-        this.property272 = 272;
-        this.property273 = 273;
-        this.property274 = 274;
-        this.property275 = 275;
-        this.property276 = 276;
-        this.property277 = 277;
-        this.property278 = 278;
-        this.property279 = 279;
-        this.property280 = 280;
-        this.property281 = 281;
-        this.property282 = 282;
-        this.property283 = 283;
-        this.property284 = 284;
-        this.property285 = 285;
-        this.property286 = 286;
-        this.property287 = 287;
-        this.property288 = 288;
-        this.property289 = 289;
-        this.property290 = 290;
-        this.property291 = 291;
-        this.property292 = 292;
-        this.property293 = 293;
-        this.property294 = 294;
-        this.property295 = 295;
-        this.property296 = 296;
-        this.property297 = 297;
-        this.property298 = 298;
-        this.property299 = 299;
-        this.property300 = 300;
-        this.property301 = 301;
-        this.property302 = 302;
-        this.property303 = 303;
-        this.property304 = 304;
-        this.property305 = 305;
-        this.property306 = 306;
-        this.property307 = 307;
-        this.property308 = 308;
-        this.property309 = 309;
-        this.property310 = 310;
-        this.property311 = 311;
-        this.property312 = 312;
-        this.property313 = 313;
-        this.property314 = 314;
-        this.property315 = 315;
-        this.property316 = 316;
-        this.property317 = 317;
-        this.property318 = 318;
-        this.property319 = 319;
-        this.property320 = 320;
-        this.property321 = 321;
-        this.property322 = 322;
-        this.property323 = 323;
-        this.property324 = 324;
-        this.property325 = 325;
-        this.property326 = 326;
-        this.property327 = 327;
-        this.property328 = 328;
-        this.property329 = 329;
-        this.property330 = 330;
-        this.property331 = 331;
-        this.property332 = 332;
-        this.property333 = 333;
-        this.property334 = 334;
-        this.property335 = 335;
-        this.property336 = 336;
-        this.property337 = 337;
-        this.property338 = 338;
-        this.property339 = 339;
-        this.property340 = 340;
-        this.property341 = 341;
-        this.property342 = 342;
-        this.property343 = 343;
-        this.property344 = 344;
-        this.property345 = 345;
-        this.property346 = 346;
-        this.property347 = 347;
-        this.property348 = 348;
-        this.property349 = 349;
-        this.property350 = 350;
-        this.property351 = 351;
-        this.property352 = 352;
-        this.property353 = 353;
-        this.property354 = 354;
-        this.property355 = 355;
-        this.property356 = 356;
-        this.property357 = 357;
-        this.property358 = 358;
-        this.property359 = 359;
-        this.property360 = 360;
-        this.property361 = 361;
-        this.property362 = 362;
-        this.property363 = 363;
-        this.property364 = 364;
-        this.property365 = 365;
-        this.property366 = 366;
-        this.property367 = 367;
-        this.property368 = 368;
-        this.property369 = 369;
-        this.property370 = 370;
-        this.property371 = 371;
-        this.property372 = 372;
-        this.property373 = 373;
-        this.property374 = 374;
-        this.property375 = 375;
-        this.property376 = 376;
-        this.property377 = 377;
-        this.property378 = 378;
-        this.property379 = 379;
-        this.property380 = 380;
-        this.property381 = 381;
-        this.property382 = 382;
-        this.property383 = 383;
-        this.property384 = 384;
-        this.property385 = 385;
-        this.property386 = 386;
-        this.property387 = 387;
-        this.property388 = 388;
-        this.property389 = 389;
-        this.property390 = 390;
-        this.property391 = 391;
-        this.property392 = 392;
-        this.property393 = 393;
-        this.property394 = 394;
-        this.property395 = 395;
-        this.property396 = 396;
-        this.property397 = 397;
-        this.property398 = 398;
-        this.property399 = 399;
-        this.property400 = 400;
-        this.property401 = 401;
-        this.property402 = 402;
-        this.property403 = 403;
-        this.property404 = 404;
-        this.property405 = 405;
-        this.property406 = 406;
-        this.property407 = 407;
-        this.property408 = 408;
-        this.property409 = 409;
-        this.property410 = 410;
-        this.property411 = 411;
-        this.property412 = 412;
-        this.property413 = 413;
-        this.property414 = 414;
-        this.property415 = 415;
-        this.property416 = 416;
-        this.property417 = 417;
-        this.property418 = 418;
-        this.property419 = 419;
-        this.property420 = 420;
-        this.property421 = 421;
-        this.property422 = 422;
-        this.property423 = 423;
-        this.property424 = 424;
-        this.property425 = 425;
-        this.property426 = 426;
-        this.property427 = 427;
-        this.property428 = 428;
-        this.property429 = 429;
-        this.property430 = 430;
-        this.property431 = 431;
-        this.property432 = 432;
-        this.property433 = 433;
-        this.property434 = 434;
-        this.property435 = 435;
-        this.property436 = 436;
-        this.property437 = 437;
-        this.property438 = 438;
-        this.property439 = 439;
-        this.property440 = 440;
-        this.property441 = 441;
-        this.property442 = 442;
-        this.property443 = 443;
-        this.property444 = 444;
-        this.property445 = 445;
-        this.property446 = 446;
-        this.property447 = 447;
-        this.property448 = 448;
-        this.property449 = 449;
-        this.property450 = 450;
-        this.property451 = 451;
-        this.property452 = 452;
-        this.property453 = 453;
-        this.property454 = 454;
-        this.property455 = 455;
-        this.property456 = 456;
-        this.property457 = 457;
-        this.property458 = 458;
-        this.property459 = 459;
-        this.property460 = 460;
-        this.property461 = 461;
-        this.property462 = 462;
-        this.property463 = 463;
-        this.property464 = 464;
-        this.property465 = 465;
-        this.property466 = 466;
-        this.property467 = 467;
-        this.property468 = 468;
-        this.property469 = 469;
-        this.property470 = 470;
-        this.property471 = 471;
-        this.property472 = 472;
-        this.property473 = 473;
-        this.property474 = 474;
-        this.property475 = 475;
-        this.property476 = 476;
-        this.property477 = 477;
-        this.property478 = 478;
-        this.property479 = 479;
-        this.property480 = 480;
-        this.property481 = 481;
-        this.property482 = 482;
-        this.property483 = 483;
-        this.property484 = 484;
-        this.property485 = 485;
-        this.property486 = 486;
-        this.property487 = 487;
-        this.property488 = 488;
-        this.property489 = 489;
-        this.property490 = 490;
-        this.property491 = 491;
-        this.property492 = 492;
-        this.property493 = 493;
-        this.property494 = 494;
-        this.property495 = 495;
-        this.property496 = 496;
-        this.property497 = 497;
-        this.property498 = 498;
-        this.property499 = 499;
-        this.property500 = 500;
-        this.property501 = 501;
-        this.property502 = 502;
-        this.property503 = 503;
-        this.property504 = 504;
-        this.property505 = 505;
-        this.property506 = 506;
-        this.property507 = 507;
-        this.property508 = 508;
-        this.property509 = 509;
-        this.property510 = 510;
-        this.property511 = 511;
-        this.property512 = 512;
-        this.property513 = 513;
-        this.property514 = 514;
-        this.property515 = 515;
-        this.property516 = 516;
-        this.property517 = 517;
-        this.property518 = 518;
-        this.property519 = 519;
-        this.property520 = 520;
-        this.property521 = 521;
-        this.property522 = 522;
-        this.property523 = 523;
-        this.property524 = 524;
-        this.property525 = 525;
-        this.property526 = 526;
-        this.property527 = 527;
-        this.property528 = 528;
-        this.property529 = 529;
-        this.property530 = 530;
-        this.property531 = 531;
-        this.property532 = 532;
-        this.property533 = 533;
-        this.property534 = 534;
-        this.property535 = 535;
-        this.property536 = 536;
-        this.property537 = 537;
-        this.property538 = 538;
-        this.property539 = 539;
-        this.property540 = 540;
-        this.property541 = 541;
-        this.property542 = 542;
-        this.property543 = 543;
-        this.property544 = 544;
-        this.property545 = 545;
-        this.property546 = 546;
-        this.property547 = 547;
-        this.property548 = 548;
-        this.property549 = 549;
-        this.property550 = 550;
-        this.property551 = 551;
-        this.property552 = 552;
-        this.property553 = 553;
-        this.property554 = 554;
-        this.property555 = 555;
-        this.property556 = 556;
-        this.property557 = 557;
-        this.property558 = 558;
-        this.property559 = 559;
-        this.property560 = 560;
-        this.property561 = 561;
-        this.property562 = 562;
-        this.property563 = 563;
-        this.property564 = 564;
-        this.property565 = 565;
-        this.property566 = 566;
-        this.property567 = 567;
-        this.property568 = 568;
-        this.property569 = 569;
-        this.property570 = 570;
-        this.property571 = 571;
-        this.property572 = 572;
-        this.property573 = 573;
-        this.property574 = 574;
-        this.property575 = 575;
-        this.property576 = 576;
-        this.property577 = 577;
-        this.property578 = 578;
-        this.property579 = 579;
-        this.property580 = 580;
-        this.property581 = 581;
-        this.property582 = 582;
-        this.property583 = 583;
-        this.property584 = 584;
-        this.property585 = 585;
-        this.property586 = 586;
-        this.property587 = 587;
-        this.property588 = 588;
-        this.property589 = 589;
-        this.property590 = 590;
-        this.property591 = 591;
-        this.property592 = 592;
-        this.property593 = 593;
-        this.property594 = 594;
-        this.property595 = 595;
-        this.property596 = 596;
-        this.property597 = 597;
-        this.property598 = 598;
-        this.property599 = 599;
-        this.property600 = 600;
-        this.property601 = 601;
-        this.property602 = 602;
-        this.property603 = 603;
-        this.property604 = 604;
-        this.property605 = 605;
-        this.property606 = 606;
-        this.property607 = 607;
-        this.property608 = 608;
-        this.property609 = 609;
-        this.property610 = 610;
-        this.property611 = 611;
-        this.property612 = 612;
-        this.property613 = 613;
-        this.property614 = 614;
-        this.property615 = 615;
-        this.property616 = 616;
-        this.property617 = 617;
-        this.property618 = 618;
-        this.property619 = 619;
-        this.property620 = 620;
-        this.property621 = 621;
-        this.property622 = 622;
-        this.property623 = 623;
-        this.property624 = 624;
-        this.property625 = 625;
-        this.property626 = 626;
-        this.property627 = 627;
-        this.property628 = 628;
-        this.property629 = 629;
-        this.property630 = 630;
-        this.property631 = 631;
-        this.property632 = 632;
-        this.property633 = 633;
-        this.property634 = 634;
-        this.property635 = 635;
-        this.property636 = 636;
-        this.property637 = 637;
-        this.property638 = 638;
-        this.property639 = 639;
-        this.property640 = 640;
-        this.property641 = 641;
-        this.property642 = 642;
-        this.property643 = 643;
-        this.property644 = 644;
-        this.property645 = 645;
-        this.property646 = 646;
-        this.property647 = 647;
-        this.property648 = 648;
-        this.property649 = 649;
-        this.property650 = 650;
-        this.property651 = 651;
-        this.property652 = 652;
-        this.property653 = 653;
-        this.property654 = 654;
-        this.property655 = 655;
-        this.property656 = 656;
-        this.property657 = 657;
-        this.property658 = 658;
-        this.property659 = 659;
-        this.property660 = 660;
-        this.property661 = 661;
-        this.property662 = 662;
-        this.property663 = 663;
-        this.property664 = 664;
-        this.property665 = 665;
-        this.property666 = 666;
-        this.property667 = 667;
-        this.property668 = 668;
-        this.property669 = 669;
-        this.property670 = 670;
-        this.property671 = 671;
-        this.property672 = 672;
-        this.property673 = 673;
-        this.property674 = 674;
-        this.property675 = 675;
-        this.property676 = 676;
-        this.property677 = 677;
-        this.property678 = 678;
-        this.property679 = 679;
-        this.property680 = 680;
-        this.property681 = 681;
-        this.property682 = 682;
-        this.property683 = 683;
-        this.property684 = 684;
-        this.property685 = 685;
-        this.property686 = 686;
-        this.property687 = 687;
-        this.property688 = 688;
-        this.property689 = 689;
-        this.property690 = 690;
-        this.property691 = 691;
-        this.property692 = 692;
-        this.property693 = 693;
-        this.property694 = 694;
-        this.property695 = 695;
-        this.property696 = 696;
-        this.property697 = 697;
-        this.property698 = 698;
-        this.property699 = 699;
-        this.property700 = 700;
-        this.property701 = 701;
-        this.property702 = 702;
-        this.property703 = 703;
-        this.property704 = 704;
-        this.property705 = 705;
-        this.property706 = 706;
-        this.property707 = 707;
-        this.property708 = 708;
-        this.property709 = 709;
-        this.property710 = 710;
-        this.property711 = 711;
-        this.property712 = 712;
-        this.property713 = 713;
-        this.property714 = 714;
-        this.property715 = 715;
-        this.property716 = 716;
-        this.property717 = 717;
-        this.property718 = 718;
-        this.property719 = 719;
-        this.property720 = 720;
-        this.property721 = 721;
-        this.property722 = 722;
-        this.property723 = 723;
-        this.property724 = 724;
-        this.property725 = 725;
-        this.property726 = 726;
-        this.property727 = 727;
-        this.property728 = 728;
-        this.property729 = 729;
-        this.property730 = 730;
-        this.property731 = 731;
-        this.property732 = 732;
-        this.property733 = 733;
-        this.property734 = 734;
-        this.property735 = 735;
-        this.property736 = 736;
-        this.property737 = 737;
-        this.property738 = 738;
-        this.property739 = 739;
-        this.property740 = 740;
-        this.property741 = 741;
-        this.property742 = 742;
-        this.property743 = 743;
-        this.property744 = 744;
-        this.property745 = 745;
-        this.property746 = 746;
-        this.property747 = 747;
-        this.property748 = 748;
-        this.property749 = 749;
-        this.property750 = 750;
-        this.property751 = 751;
-        this.property752 = 752;
-        this.property753 = 753;
-        this.property754 = 754;
-        this.property755 = 755;
-        this.property756 = 756;
-        this.property757 = 757;
-        this.property758 = 758;
-        this.property759 = 759;
-        this.property760 = 760;
-        this.property761 = 761;
-        this.property762 = 762;
-        this.property763 = 763;
-        this.property764 = 764;
-        this.property765 = 765;
-        this.property766 = 766;
-        this.property767 = 767;
-        this.property768 = 768;
-        this.property769 = 769;
-        this.property770 = 770;
-        this.property771 = 771;
-        this.property772 = 772;
-        this.property773 = 773;
-        this.property774 = 774;
-        this.property775 = 775;
-        this.property776 = 776;
-        this.property777 = 777;
-        this.property778 = 778;
-        this.property779 = 779;
-        this.property780 = 780;
-        this.property781 = 781;
-        this.property782 = 782;
-        this.property783 = 783;
-        this.property784 = 784;
-        this.property785 = 785;
-        this.property786 = 786;
-        this.property787 = 787;
-        this.property788 = 788;
-        this.property789 = 789;
-        this.property790 = 790;
-        this.property791 = 791;
-        this.property792 = 792;
-        this.property793 = 793;
-        this.property794 = 794;
-        this.property795 = 795;
-        this.property796 = 796;
-        this.property797 = 797;
-        this.property798 = 798;
-        this.property799 = 799;
-        this.property800 = 800;
-        this.property801 = 801;
-        this.property802 = 802;
-        this.property803 = 803;
-        this.property804 = 804;
-        this.property805 = 805;
-        this.property806 = 806;
-        this.property807 = 807;
-        this.property808 = 808;
-        this.property809 = 809;
-        this.property810 = 810;
-        this.property811 = 811;
-        this.property812 = 812;
-        this.property813 = 813;
-        this.property814 = 814;
-        this.property815 = 815;
-        this.property816 = 816;
-        this.property817 = 817;
-        this.property818 = 818;
-        this.property819 = 819;
-        this.property820 = 820;
-        this.property821 = 821;
-        this.property822 = 822;
-        this.property823 = 823;
-        this.property824 = 824;
-        this.property825 = 825;
-        this.property826 = 826;
-        this.property827 = 827;
-        this.property828 = 828;
-        this.property829 = 829;
-        this.property830 = 830;
-        this.property831 = 831;
-        this.property832 = 832;
-        this.property833 = 833;
-        this.property834 = 834;
-        this.property835 = 835;
-        this.property836 = 836;
-        this.property837 = 837;
-        this.property838 = 838;
-        this.property839 = 839;
-        this.property840 = 840;
-        this.property841 = 841;
-        this.property842 = 842;
-        this.property843 = 843;
-        this.property844 = 844;
-        this.property845 = 845;
-        this.property846 = 846;
-        this.property847 = 847;
-        this.property848 = 848;
-        this.property849 = 849;
-        this.property850 = 850;
-        this.property851 = 851;
-        this.property852 = 852;
-        this.property853 = 853;
-        this.property854 = 854;
-        this.property855 = 855;
-        this.property856 = 856;
-        this.property857 = 857;
-        this.property858 = 858;
-        this.property859 = 859;
-        this.property860 = 860;
-        this.property861 = 861;
-        this.property862 = 862;
-        this.property863 = 863;
-        this.property864 = 864;
-        this.property865 = 865;
-        this.property866 = 866;
-        this.property867 = 867;
-        this.property868 = 868;
-        this.property869 = 869;
-        this.property870 = 870;
-        this.property871 = 871;
-        this.property872 = 872;
-        this.property873 = 873;
-        this.property874 = 874;
-        this.property875 = 875;
-        this.property876 = 876;
-        this.property877 = 877;
-        this.property878 = 878;
-        this.property879 = 879;
-        this.property880 = 880;
-        this.property881 = 881;
-        this.property882 = 882;
-        this.property883 = 883;
-        this.property884 = 884;
-        this.property885 = 885;
-        this.property886 = 886;
-        this.property887 = 887;
-        this.property888 = 888;
-        this.property889 = 889;
-        this.property890 = 890;
-        this.property891 = 891;
-        this.property892 = 892;
-        this.property893 = 893;
-        this.property894 = 894;
-        this.property895 = 895;
-        this.property896 = 896;
-        this.property897 = 897;
-        this.property898 = 898;
-        this.property899 = 899;
-        this.property900 = 900;
-        this.property901 = 901;
-        this.property902 = 902;
-        this.property903 = 903;
-        this.property904 = 904;
-        this.property905 = 905;
-        this.property906 = 906;
-        this.property907 = 907;
-        this.property908 = 908;
-        this.property909 = 909;
-        this.property910 = 910;
-        this.property911 = 911;
-        this.property912 = 912;
-        this.property913 = 913;
-        this.property914 = 914;
-        this.property915 = 915;
-        this.property916 = 916;
-        this.property917 = 917;
-        this.property918 = 918;
-        this.property919 = 919;
-        this.property920 = 920;
-        this.property921 = 921;
-        this.property922 = 922;
-        this.property923 = 923;
-        this.property924 = 924;
-        this.property925 = 925;
-        this.property926 = 926;
-        this.property927 = 927;
-        this.property928 = 928;
-        this.property929 = 929;
-        this.property930 = 930;
-        this.property931 = 931;
-        this.property932 = 932;
-        this.property933 = 933;
-        this.property934 = 934;
-        this.property935 = 935;
-        this.property936 = 936;
-        this.property937 = 937;
-        this.property938 = 938;
-        this.property939 = 939;
-        this.property940 = 940;
-        this.property941 = 941;
-        this.property942 = 942;
-        this.property943 = 943;
-        this.property944 = 944;
-        this.property945 = 945;
-        this.property946 = 946;
-        this.property947 = 947;
-        this.property948 = 948;
-        this.property949 = 949;
-        this.property950 = 950;
-        this.property951 = 951;
-        this.property952 = 952;
-        this.property953 = 953;
-        this.property954 = 954;
-        this.property955 = 955;
-        this.property956 = 956;
-        this.property957 = 957;
-        this.property958 = 958;
-        this.property959 = 959;
-        this.property960 = 960;
-        this.property961 = 961;
-        this.property962 = 962;
-        this.property963 = 963;
-        this.property964 = 964;
-        this.property965 = 965;
-        this.property966 = 966;
-        this.property967 = 967;
-        this.property968 = 968;
-        this.property969 = 969;
-        this.property970 = 970;
-        this.property971 = 971;
-        this.property972 = 972;
-        this.property973 = 973;
-        this.property974 = 974;
-        this.property975 = 975;
-        this.property976 = 976;
-        this.property977 = 977;
-        this.property978 = 978;
-        this.property979 = 979;
-        this.property980 = 980;
-        this.property981 = 981;
-        this.property982 = 982;
-        this.property983 = 983;
-        this.property984 = 984;
-        this.property985 = 985;
-        this.property986 = 986;
-        this.property987 = 987;
-        this.property988 = 988;
-        this.property989 = 989;
-        this.property990 = 990;
-        this.property991 = 991;
-        this.property992 = 992;
-        this.property993 = 993;
-        this.property994 = 994;
-        this.property995 = 995;
-        this.property996 = 996;
-        this.property997 = 997;
-        this.property998 = 998;
-        this.property999 = 999;
-        this.property1000 = 1000;
-    }
-    new Foo();
-}
-
-test1();
-test2();
-test3();
index 084aa19..1b580d9 100644 (file)
@@ -1,3 +1,20 @@
+2018-10-26  Commit Queue  <commit-queue@webkit.org>
+
+        Unreviewed, rolling out r237479 and r237484.
+        https://bugs.webkit.org/show_bug.cgi?id=190978
+
+        broke JSC on iOS (Requested by tadeuzagallo on #webkit).
+
+        Reverted changesets:
+
+        "New bytecode format for JSC"
+        https://bugs.webkit.org/show_bug.cgi?id=187373
+        https://trac.webkit.org/changeset/237479
+
+        "Gardening: Build fix after r237479."
+        https://bugs.webkit.org/show_bug.cgi?id=187373
+        https://trac.webkit.org/changeset/237484
+
 2018-10-26  Tadeu Zagallo  <tzagallo@apple.com>
 
         New bytecode format for JSC
index 286f236..a7743bf 100644 (file)
@@ -10,68 +10,57 @@ var evalThunks = [];
 
 function equal(actual, expected)
 {
-    var actualQueue = [actual];
-    var expectedQueue = [expected];
-    while (actualQueue.length && expectedQueue.length) {
-        var actual = actualQueue.shift();
-        var expected = expectedQueue.shift();
-
-        if (actual === expected)
-            continue;
-        if (typeof actual !== typeof expected)
-            return false;
-        if ((actual instanceof Date) || (expected instanceof Date)) {
-            if ((actual instanceof Date) && (expected instanceof Date) && actual.getTime() == expected.getTime())
-                continue;
-            return false;
-        }
-        if ((actual instanceof Number) || (expected instanceof Number)) {
-            if ((actual instanceof Number) && (expected instanceof Number) && (expected.valueOf() == actual.valueOf()))
-                continue;
-            return false;
-        }
-        if ((actual instanceof Boolean) || (expected instanceof Boolean)) {
-            if ((actual instanceof Boolean) && (expected instanceof Boolean) && (expected.valueOf() == actual.valueOf()))
-                continue;
+    if (actual === expected)
+        return true;
+    if (typeof actual !== typeof expected)
+        return false;
+    if ((actual instanceof Date) || (expected instanceof Date)) {
+        if ((actual instanceof Date) && (expected instanceof Date))
+            return (expected instanceof Date) && actual.getTime() == expected.getTime();
+        return false;
+    }
+    if ((actual instanceof Number) || (expected instanceof Number)) {
+        return (actual instanceof Number) && (expected instanceof Number) &&
+            (expected.valueOf() == actual.valueOf());
+    }
+    if ((actual instanceof Boolean) || (expected instanceof Boolean)) {
+        return (actual instanceof Boolean) && (expected instanceof Boolean) &&
+            (expected.valueOf() == actual.valueOf());
+    }
+    if ((actual instanceof String) || (expected instanceof String)) {
+        return (actual instanceof String) && (expected instanceof String) &&
+            (expected.valueOf() == actual.valueOf());
+    }
+    if (Array.isArray(actual) || Array.isArray(expected)) {
+        if (!Array.isArray(actual) || !Array.isArray(expected))
             return false;
-        }
-        if ((actual instanceof String) || (expected instanceof String)) {
-            if ((actual instanceof String) && (expected instanceof String) && (expected.valueOf() == actual.valueOf()))
-                continue;
+        if (actual.length != expected.length)
             return false;
-        }
-        if (Array.isArray(actual) || Array.isArray(expected)) {
-            if (!Array.isArray(actual) || !Array.isArray(expected))
+        for (var i = 0; i < actual.length; i++) {
+            if ((i in actual) ^ (i in expected))
                 return false;
-            if (actual.length != expected.length)
+            if (!equal(actual[i], expected[i]))
                 return false;
-            for (var i = 0; i < actual.length; i++) {
-                if ((i in actual) ^ (i in expected))
-                    return false;
-                actualQueue.push(actual[i]);
-                expectedQueue.push(expected[i]);
-            }
-            continue;
         }
-        if (actual.constructor !== expected.constructor)
-            return false;
-        try {
-            var keys = Object.keys(actual);
-        } catch(e) {
-            return false;
-        }
-        try {
-        if (!equal(keys, Object.keys(expected)))
-            return false;
-        } catch(e) {
+        return true;
+    }
+    if (actual.constructor !== expected.constructor)
+        return false;
+    try {
+        var keys = Object.keys(actual);
+    } catch(e) {
+        return false;
+    }
+    try {
+    if (!equal(keys, Object.keys(expected)))
+        return false;
+    } catch(e) {
+        return false;
+    }
+    for (var i = 0; i < keys.length; i++) {
+        if (!equal(actual[keys[i]], expected[keys[i]]))
             return false;
-        }
-        for (var i = 0; i < keys.length; i++) {
-            actualQueue.push(actual[keys[i]]);
-            expectedQueue.push(expected[keys[i]]);
-        }
     }
-
     return true;
 }
 
index b41dce9..2291b03 100644 (file)
@@ -201,27 +201,11 @@ set(OFFLINE_ASM
     offlineasm/x86.rb
 )
 
-set(GENERATOR
-    generator/Argument.rb
-    generator/Assertion.rb
-    generator/DSL.rb
-    generator/Fits.rb
-    generator/GeneratedFile.rb
-    generator/Metadata.rb
-    generator/Opcode.rb
-    generator/OpcodeGroup.rb
-    generator/Options.rb
-    generator/Section.rb
-    generator/Template.rb
-    generator/Type.rb
-    generator/main.rb
-)
-
 add_custom_command(
-    OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/Bytecodes.h ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/InitBytecodes.asm ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/BytecodeStructs.h ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/BytecodeIndices.h
-    MAIN_DEPENDENCY ${JAVASCRIPTCORE_DIR}/generator/main.rb
-    DEPENDS ${GENERATOR} bytecode/BytecodeList.rb
-    COMMAND ${RUBY_EXECUTABLE} ${JAVASCRIPTCORE_DIR}/generator/main.rb --bytecodes_h ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/Bytecodes.h --init_bytecodes_asm ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/InitBytecodes.asm --bytecode_structs_h ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/BytecodeStructs.h --bytecode_indices_h ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/BytecodeIndices.h ${JAVASCRIPTCORE_DIR}/bytecode/BytecodeList.rb
+    OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/Bytecodes.h ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/InitBytecodes.asm ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/BytecodeStructs.h
+    MAIN_DEPENDENCY ${JAVASCRIPTCORE_DIR}/generate-bytecode-files
+    DEPENDS ${JAVASCRIPTCORE_DIR}/generate-bytecode-files bytecode/BytecodeList.json
+    COMMAND ${PYTHON_EXECUTABLE} ${JAVASCRIPTCORE_DIR}/generate-bytecode-files --bytecodes_h ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/Bytecodes.h --init_bytecodes_asm ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/InitBytecodes.asm --bytecode_structs_h ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/BytecodeStructs.h ${JAVASCRIPTCORE_DIR}/bytecode/BytecodeList.json
     VERBATIM)
 
 list(APPEND JavaScriptCore_HEADERS
@@ -482,17 +466,13 @@ set(JavaScriptCore_PRIVATE_FRAMEWORK_HEADERS
     bytecode/ICStatusMap.h
     bytecode/InlineCallFrame.h
     bytecode/Instruction.h
-    bytecode/InstructionStream.h
     bytecode/InternalFunctionAllocationProfile.h
     bytecode/JumpTable.h
     bytecode/LLIntCallLinkInfo.h
     bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h
     bytecode/LazyOperandValueProfile.h
-    bytecode/MetadataTable.h
     bytecode/ObjectAllocationProfile.h
     bytecode/ObjectPropertyCondition.h
-    bytecode/Opcode.h
-    bytecode/OpcodeSize.h
     bytecode/PropertyCondition.h
     bytecode/PutByIdFlags.h
     bytecode/SpecialPointer.h
@@ -505,7 +485,6 @@ set(JavaScriptCore_PRIVATE_FRAMEWORK_HEADERS
     bytecode/UnlinkedEvalCodeBlock.h
     bytecode/UnlinkedFunctionExecutable.h
     bytecode/UnlinkedGlobalCodeBlock.h
-    bytecode/UnlinkedMetadataTable.h
     bytecode/ValueProfile.h
     bytecode/ValueRecovery.h
     bytecode/VariableWriteFireDetail.h
@@ -690,8 +669,6 @@ set(JavaScriptCore_PRIVATE_FRAMEWORK_HEADERS
     jit/ThunkGenerator.h
     jit/UnusedPointer.h
 
-    llint/LLIntOpcode.h
-
     parser/ParserError.h
     parser/ParserModes.h
     parser/ParserTokens.h
index 4c8e4c1..e94d168 100644 (file)
@@ -1,3 +1,20 @@
+2018-10-26  Commit Queue  <commit-queue@webkit.org>
+
+        Unreviewed, rolling out r237479 and r237484.
+        https://bugs.webkit.org/show_bug.cgi?id=190978
+
+        broke JSC on iOS (Requested by tadeuzagallo on #webkit).
+
+        Reverted changesets:
+
+        "New bytecode format for JSC"
+        https://bugs.webkit.org/show_bug.cgi?id=187373
+        https://trac.webkit.org/changeset/237479
+
+        "Gardening: Build fix after r237479."
+        https://bugs.webkit.org/show_bug.cgi?id=187373
+        https://trac.webkit.org/changeset/237484
+
 2018-10-26  Tadeu Zagallo  <tzagallo@apple.com>
 
         Gardening: Build fix after r237479.
index 6634405..2b75636 100644 (file)
@@ -37,4 +37,3 @@ OTHER_CODE_SIGN_FLAGS[sdk=iphone*] = -i com.apple.jsc;
 
 // Explicitly add the PrivateHeaders directory to the search path so that generated header files can be found in production builds.
 HEADER_SEARCH_PATHS = "$(JAVASCRIPTCORE_FRAMEWORKS_DIR)/JavaScriptCore.framework/PrivateHeaders" $(inherited);
-HEADER_SEARCH_PATHS = "${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore" $(HEADER_SEARCH_PATHS);
index eabd777..d1745c3 100644 (file)
@@ -216,8 +216,14 @@ udis86_itab.h: $(JavaScriptCore)/disassembler/udis86/ud_itab.py $(JavaScriptCore
 
 # Bytecode files
 
-Bytecodes.h BytecodeOffsets.h BytecodeStructs.h InitBytecodes.asm: $(wildcard $(JavaScriptCore)/generator/*.rb) $(JavaScriptCore)/bytecode/BytecodeList.rb
-       $(RUBY) $(JavaScriptCore)/generator/main.rb $(JavaScriptCore)/bytecode/BytecodeList.rb --bytecode_structs_h BytecodeStructs.h --init_bytecodes_asm InitBytecodes.asm --bytecodes_h Bytecodes.h --bytecode_indices_h BytecodeIndices.h
+Bytecodes.h: $(JavaScriptCore)/generate-bytecode-files $(JavaScriptCore)/bytecode/BytecodeList.json
+       $(PYTHON) $(JavaScriptCore)/generate-bytecode-files --bytecodes_h Bytecodes.h $(JavaScriptCore)/bytecode/BytecodeList.json
+
+BytecodeStructs.h: $(JavaScriptCore)/generate-bytecode-files $(JavaScriptCore)/bytecode/BytecodeList.json
+       $(PYTHON) $(JavaScriptCore)/generate-bytecode-files --bytecode_structs_h BytecodeStructs.h $(JavaScriptCore)/bytecode/BytecodeList.json
+
+InitBytecodes.asm: $(JavaScriptCore)/generate-bytecode-files $(JavaScriptCore)/bytecode/BytecodeList.json
+       $(PYTHON) $(JavaScriptCore)/generate-bytecode-files --init_bytecodes_asm InitBytecodes.asm $(JavaScriptCore)/bytecode/BytecodeList.json
 
 # Inspector interfaces
 
index ed49b0b..391221d 100644 (file)
@@ -14,6 +14,7 @@
                                0F4680AA14BA7FD900BFE272 /* Generate Derived Sources */,
                        );
                        dependencies = (
+                               65442D5018EBB744007AF92F /* PBXTargetDependency */,
                                14BD68992151916D0050DAFF /* PBXTargetDependency */,
                        );
                        name = "LLInt Offsets";
                142E3136134FF0A600AFADB5 /* HandleSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 142E312D134FF0A600AFADB5 /* HandleSet.h */; settings = {ATTRIBUTES = (Private, ); }; };
                142E313B134FF0A600AFADB5 /* Strong.h in Headers */ = {isa = PBXBuildFile; fileRef = 142E3132134FF0A600AFADB5 /* Strong.h */; settings = {ATTRIBUTES = (Private, ); }; };
                142E313C134FF0A600AFADB5 /* Weak.h in Headers */ = {isa = PBXBuildFile; fileRef = 142E3133134FF0A600AFADB5 /* Weak.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               142F16E021558802003D49C9 /* MetadataTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 142F16DF215585C8003D49C9 /* MetadataTable.h */; settings = {ATTRIBUTES = (Private, ); }; };
                14386A751DD69895008652C4 /* DirectEvalExecutable.h in Headers */ = {isa = PBXBuildFile; fileRef = 14386A731DD69895008652C4 /* DirectEvalExecutable.h */; settings = {ATTRIBUTES = (Private, ); }; };
                14386A791DD6989C008652C4 /* IndirectEvalExecutable.h in Headers */ = {isa = PBXBuildFile; fileRef = 14386A771DD6989C008652C4 /* IndirectEvalExecutable.h */; settings = {ATTRIBUTES = (Private, ); }; };
                1440057F0A5335640005F061 /* JSNode.c in Sources */ = {isa = PBXBuildFile; fileRef = 1440F6420A4F8B6A0005F061 /* JSNode.c */; };
                1442566215EDE98D0066A49B /* JSWithScope.h in Headers */ = {isa = PBXBuildFile; fileRef = 1442566015EDE98D0066A49B /* JSWithScope.h */; settings = {ATTRIBUTES = (Private, ); }; };
                144836E7132DA7BE005BE785 /* ConservativeRoots.h in Headers */ = {isa = PBXBuildFile; fileRef = 149DAAF212EB559D0083B12B /* ConservativeRoots.h */; settings = {ATTRIBUTES = (Private, ); }; };
                145722861437E140005FDE26 /* StrongInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 145722851437E140005FDE26 /* StrongInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               146C384B2177ACDF0079F6D9 /* UnlinkedMetadataTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 142D52BE21762958002DB086 /* UnlinkedMetadataTable.h */; settings = {ATTRIBUTES = (Private, ); }; };
                1471483020D323D30090E630 /* JSWrapperMapTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1471482F20D323650090E630 /* JSWrapperMapTests.mm */; };
                147341CC1DC02D7200AA29BA /* ExecutableBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 147341CB1DC02D7200AA29BA /* ExecutableBase.h */; settings = {ATTRIBUTES = (Private, ); }; };
                147341CE1DC02D7900AA29BA /* ScriptExecutable.h in Headers */ = {isa = PBXBuildFile; fileRef = 147341CD1DC02D7900AA29BA /* ScriptExecutable.h */; settings = {ATTRIBUTES = (Private, ); }; };
                14874AE615EBDE4A002E3587 /* JSScope.h in Headers */ = {isa = PBXBuildFile; fileRef = 14874AE215EBDE4A002E3587 /* JSScope.h */; settings = {ATTRIBUTES = (Private, ); }; };
                148A7BF01B82975A002D9157 /* InlineCallFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 148A7BEE1B82975A002D9157 /* InlineCallFrame.h */; settings = {ATTRIBUTES = (Private, ); }; };
                148CD1D8108CF902008163C6 /* JSContextRefPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 148CD1D7108CF902008163C6 /* JSContextRefPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               1498CAD6214BF36D00710879 /* GetByIdMetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 1498CAD5214BF36D00710879 /* GetByIdMetadata.h */; };
                14A1563210966365006FA260 /* DateInstanceCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 14A1563010966365006FA260 /* DateInstanceCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               14A4680C216FA565000D2B1A /* Instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = 14A4680A216FA535000D2B1A /* Instruction.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               14A4680D216FA56A000D2B1A /* OpcodeSize.h in Headers */ = {isa = PBXBuildFile; fileRef = 14A4680B216FA535000D2B1A /* OpcodeSize.h */; settings = {ATTRIBUTES = (Private, ); }; };
                14AB66761DECF40900A56C26 /* UnlinkedSourceCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 14AB66751DECF40900A56C26 /* UnlinkedSourceCode.h */; settings = {ATTRIBUTES = (Private, ); }; };
                14AD910C1DCA92940014F9FE /* EvalCodeBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 14AD91061DCA92940014F9FE /* EvalCodeBlock.h */; };
                14AD910D1DCA92940014F9FE /* FunctionCodeBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 14AD91071DCA92940014F9FE /* FunctionCodeBlock.h */; };
                14BD689D215191C10050DAFF /* LLIntSettingsExtractor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14BD689C215191B30050DAFF /* LLIntSettingsExtractor.cpp */; };
                14BE7D3317135CF400D1807A /* WeakInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 14BE7D3217135CF400D1807A /* WeakInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
                14BFCE6910CDB1FC00364CCE /* WeakGCMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 14BFCE6810CDB1FC00364CCE /* WeakGCMap.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               14C25B9E216EA36A00137764 /* InstructionStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 14CC3BA22138A238002D58B6 /* InstructionStream.h */; settings = {ATTRIBUTES = (Private, ); }; };
                14CA958B16AB50DE00938A06 /* StaticPropertyAnalyzer.h in Headers */ = {isa = PBXBuildFile; fileRef = 14CA958A16AB50DE00938A06 /* StaticPropertyAnalyzer.h */; settings = {ATTRIBUTES = (Private, ); }; };
                14CA958D16AB50FA00938A06 /* ObjectAllocationProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 14CA958C16AB50FA00938A06 /* ObjectAllocationProfile.h */; settings = {ATTRIBUTES = (Private, ); }; };
                14D2F3DB139F4BE200491031 /* MarkedSpace.h in Headers */ = {isa = PBXBuildFile; fileRef = 14D2F3D9139F4BE200491031 /* MarkedSpace.h */; settings = {ATTRIBUTES = (Private, ); }; };
                14E84FA114EE1ACC00D6D5D4 /* WeakSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 14E84F9C14EE1ACC00D6D5D4 /* WeakSet.h */; settings = {ATTRIBUTES = (Private, ); }; };
                14E84FA214EE1ACC00D6D5D4 /* WeakImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 14E84F9D14EE1ACC00D6D5D4 /* WeakImpl.h */; settings = {ATTRIBUTES = (Private, ); }; };
                14F7256614EE265E00B1652B /* WeakHandleOwner.h in Headers */ = {isa = PBXBuildFile; fileRef = 14F7256414EE265E00B1652B /* WeakHandleOwner.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               14F79F70216EAFD200046D39 /* Opcode.h in Headers */ = {isa = PBXBuildFile; fileRef = 969A07950ED1D3AE00F1F681 /* Opcode.h */; settings = {ATTRIBUTES = (Private, ); }; };
                1A28D4A8177B71C80007FA3C /* JSStringRefPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A28D4A7177B71C80007FA3C /* JSStringRefPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; };
                2600B5A7152BAAA70091EE5F /* JSStringJoiner.h in Headers */ = {isa = PBXBuildFile; fileRef = 2600B5A5152BAAA70091EE5F /* JSStringJoiner.h */; };
                262D85B71C0D650F006ACB61 /* AirFixPartialRegisterStalls.h in Headers */ = {isa = PBXBuildFile; fileRef = 262D85B51C0D650F006ACB61 /* AirFixPartialRegisterStalls.h */; };
                969A072B0ED1CE6900F1F681 /* RegisterID.h in Headers */ = {isa = PBXBuildFile; fileRef = 969A07280ED1CE6900F1F681 /* RegisterID.h */; };
                969A07970ED1D3AE00F1F681 /* CodeBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 969A07910ED1D3AE00F1F681 /* CodeBlock.h */; settings = {ATTRIBUTES = (Private, ); }; };
                969A07980ED1D3AE00F1F681 /* DirectEvalCodeCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 969A07920ED1D3AE00F1F681 /* DirectEvalCodeCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               969A07990ED1D3AE00F1F681 /* Instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = 969A07930ED1D3AE00F1F681 /* Instruction.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               969A079B0ED1D3AE00F1F681 /* Opcode.h in Headers */ = {isa = PBXBuildFile; fileRef = 969A07950ED1D3AE00F1F681 /* Opcode.h */; };
                978801411471AD920041B016 /* JSDateMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 9788FC231471AD0C0068CE2D /* JSDateMath.h */; settings = {ATTRIBUTES = (Private, ); }; };
                981ED82328234D91BAECCADE /* MachineContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 28806E21155E478A93FA7B02 /* MachineContext.h */; settings = {ATTRIBUTES = (Private, ); }; };
                990DA67F1C8E316A00295159 /* generate_objc_protocol_type_conversions_implementation.py in Headers */ = {isa = PBXBuildFile; fileRef = 990DA67E1C8E311D00295159 /* generate_objc_protocol_type_conversions_implementation.py */; settings = {ATTRIBUTES = (Private, ); }; };
                        remoteGlobalIDString = 0F4680A914BA7FD900BFE272;
                        remoteInfo = "LLInt Offsets";
                };
-               14013B752183C01E00999946 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = 65FB3F6609D11E9100F49DEB;
-                       remoteInfo = "Derived Sources";
-               };
                14BD6883215191310050DAFF /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
                        remoteGlobalIDString = 65FB3F6609D11E9100F49DEB;
                        remoteInfo = "Derived Sources";
                };
+               65442D4F18EBB744007AF92F /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 65FB3F6609D11E9100F49DEB;
+                       remoteInfo = "Derived Sources";
+               };
                65788A9F18B409EB00C189FF /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
                1429D92D0ED22D7000B89619 /* JIT.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JIT.cpp; sourceTree = "<group>"; };
                1429D92E0ED22D7000B89619 /* JIT.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JIT.h; sourceTree = "<group>"; };
                142D3938103E4560007DCB52 /* NumericStrings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NumericStrings.h; sourceTree = "<group>"; };
-               142D52BD21762957002DB086 /* UnlinkedMetadataTableInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UnlinkedMetadataTableInlines.h; sourceTree = "<group>"; };
-               142D52BE21762958002DB086 /* UnlinkedMetadataTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UnlinkedMetadataTable.h; sourceTree = "<group>"; };
                142D6F0613539A2800B02E86 /* MarkedBlock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MarkedBlock.cpp; sourceTree = "<group>"; };
                142D6F0713539A2800B02E86 /* MarkedBlock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MarkedBlock.h; sourceTree = "<group>"; };
                142D6F0E13539A4100B02E86 /* MarkStack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MarkStack.cpp; sourceTree = "<group>"; };
                142E312D134FF0A600AFADB5 /* HandleSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HandleSet.h; sourceTree = "<group>"; };
                142E3132134FF0A600AFADB5 /* Strong.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Strong.h; sourceTree = "<group>"; };
                142E3133134FF0A600AFADB5 /* Weak.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Weak.h; sourceTree = "<group>"; };
-               142F16DF215585C8003D49C9 /* MetadataTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MetadataTable.h; sourceTree = "<group>"; };
-               142F16E921583B5E003D49C9 /* CodeBlockInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CodeBlockInlines.h; sourceTree = "<group>"; };
                14386A721DD69895008652C4 /* DirectEvalExecutable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DirectEvalExecutable.cpp; sourceTree = "<group>"; };
                14386A731DD69895008652C4 /* DirectEvalExecutable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DirectEvalExecutable.h; sourceTree = "<group>"; };
                14386A761DD6989C008652C4 /* IndirectEvalExecutable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndirectEvalExecutable.cpp; sourceTree = "<group>"; };
                147341DF1DC2CE9600AA29BA /* ProgramExecutable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProgramExecutable.cpp; sourceTree = "<group>"; };
                147341E01DC2CE9600AA29BA /* ScriptExecutable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptExecutable.cpp; sourceTree = "<group>"; };
                147341E91DC2CF2500AA29BA /* ExecutableBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ExecutableBase.cpp; sourceTree = "<group>"; };
-               14788EE221501AF700A561C8 /* ProfileTypeBytecodeFlag.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProfileTypeBytecodeFlag.cpp; sourceTree = "<group>"; };
-               14788EE421501B2800A561C8 /* JSType.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSType.cpp; sourceTree = "<group>"; };
-               14788EE521501B2900A561C8 /* GetPutInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GetPutInfo.cpp; sourceTree = "<group>"; };
                147B83AA0E6DB8C9004775A4 /* BatchedTransitionOptimizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BatchedTransitionOptimizer.h; sourceTree = "<group>"; };
                147B84620E6DE6B1004775A4 /* PutPropertySlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PutPropertySlot.h; sourceTree = "<group>"; };
                1480DB9B0DDC227F003CFDF2 /* DebuggerCallFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DebuggerCallFrame.h; sourceTree = "<group>"; };
                148A7BEE1B82975A002D9157 /* InlineCallFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InlineCallFrame.h; sourceTree = "<group>"; };
                148CD1D7108CF902008163C6 /* JSContextRefPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSContextRefPrivate.h; sourceTree = "<group>"; };
                149559ED0DDCDDF700648087 /* DebuggerCallFrame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DebuggerCallFrame.cpp; sourceTree = "<group>"; };
-               1498CAD3214656C400710879 /* libWTF.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libWTF.a; sourceTree = BUILT_PRODUCTS_DIR; };
-               1498CAD5214BF36D00710879 /* GetByIdMetadata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GetByIdMetadata.h; sourceTree = "<group>"; };
                149B24FF0D8AF6D1009CB8C7 /* Register.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Register.h; sourceTree = "<group>"; };
                149DAAF212EB559D0083B12B /* ConservativeRoots.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConservativeRoots.h; sourceTree = "<group>"; };
                14A1563010966365006FA260 /* DateInstanceCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DateInstanceCache.h; sourceTree = "<group>"; };
                14A396A60CD2933100B5B4FF /* SymbolTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SymbolTable.h; sourceTree = "<group>"; };
-               14A46809216FA534000D2B1A /* Fits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Fits.h; sourceTree = "<group>"; };
-               14A4680A216FA535000D2B1A /* Instruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Instruction.h; sourceTree = "<group>"; };
-               14A4680B216FA535000D2B1A /* OpcodeSize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpcodeSize.h; sourceTree = "<group>"; };
                14AB66751DECF40900A56C26 /* UnlinkedSourceCode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UnlinkedSourceCode.h; sourceTree = "<group>"; };
                14ABB36E099C076400E2A24F /* JSCJSValue.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSCJSValue.h; sourceTree = "<group>"; };
                14ABB454099C2A0F00E2A24F /* JSType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSType.h; sourceTree = "<group>"; };
                14AD912B1DCAAAB00014F9FE /* UnlinkedFunctionCodeBlock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UnlinkedFunctionCodeBlock.cpp; sourceTree = "<group>"; };
                14B7233F12D7D0DA003BD5ED /* MachineStackMarker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MachineStackMarker.cpp; sourceTree = "<group>"; };
                14B7234012D7D0DA003BD5ED /* MachineStackMarker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MachineStackMarker.h; sourceTree = "<group>"; };
-               14BA7751211086A0008D0B05 /* BytecodeList.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = BytecodeList.rb; sourceTree = "<group>"; };
-               14BA7752211A8E5F008D0B05 /* ProfileTypeBytecodeFlag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProfileTypeBytecodeFlag.h; sourceTree = "<group>"; };
                14BA78F013AAB88F005B7C2C /* SlotVisitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SlotVisitor.h; sourceTree = "<group>"; };
                14BA7A9513AADFF8005B7C2C /* Heap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Heap.cpp; sourceTree = "<group>"; };
                14BA7A9613AADFF8005B7C2C /* Heap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Heap.h; sourceTree = "<group>"; };
                14BFCE6810CDB1FC00364CCE /* WeakGCMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeakGCMap.h; sourceTree = "<group>"; };
                14CA958A16AB50DE00938A06 /* StaticPropertyAnalyzer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StaticPropertyAnalyzer.h; sourceTree = "<group>"; };
                14CA958C16AB50FA00938A06 /* ObjectAllocationProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjectAllocationProfile.h; sourceTree = "<group>"; };
-               14CC3BA12138A238002D58B6 /* InstructionStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InstructionStream.cpp; sourceTree = "<group>"; };
-               14CC3BA22138A238002D58B6 /* InstructionStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InstructionStream.h; sourceTree = "<group>"; };
+               14D2F3D8139F4BE200491031 /* MarkedSpace.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MarkedSpace.cpp; sourceTree = "<group>"; };
                14D2F3D9139F4BE200491031 /* MarkedSpace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MarkedSpace.h; sourceTree = "<group>"; };
                14D792640DAA03FB001A9F05 /* CLoopStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CLoopStack.h; sourceTree = "<group>"; };
                14D857740A4696C80032146C /* testapi.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; name = testapi.js; path = API/tests/testapi.js; sourceTree = "<group>"; };
                14E84F9D14EE1ACC00D6D5D4 /* WeakImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeakImpl.h; sourceTree = "<group>"; };
                14F7256314EE265E00B1652B /* WeakHandleOwner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WeakHandleOwner.cpp; sourceTree = "<group>"; };
                14F7256414EE265E00B1652B /* WeakHandleOwner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeakHandleOwner.h; sourceTree = "<group>"; };
-               14F79F6E216EAD5000046D39 /* MetadataTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MetadataTable.cpp; sourceTree = "<group>"; };
                169948EDE68D4054B01EF797 /* DefinePropertyAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DefinePropertyAttributes.h; sourceTree = "<group>"; };
                1879510614C540FFB561C124 /* JSModuleLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSModuleLoader.cpp; sourceTree = "<group>"; };
                1A28D4A7177B71C80007FA3C /* JSStringRefPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSStringRefPrivate.h; sourceTree = "<group>"; };
                6511230514046A4C002B101D /* testRegExp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testRegExp; sourceTree = BUILT_PRODUCTS_DIR; };
                6514F21718B3E1670098FF8B /* Bytecodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bytecodes.h; sourceTree = "<group>"; };
                6514F21818B3E1670098FF8B /* InitBytecodes.asm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm.asm; path = InitBytecodes.asm; sourceTree = "<group>"; };
+               6529FB3018B2D63900C61102 /* generate-bytecode-files */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = "generate-bytecode-files"; sourceTree = "<group>"; };
+               6529FB3118B2D99900C61102 /* BytecodeList.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = BytecodeList.json; sourceTree = "<group>"; };
                652A3A201651C66100A80AFE /* ARM64Disassembler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ARM64Disassembler.cpp; path = disassembler/ARM64Disassembler.cpp; sourceTree = "<group>"; };
                652A3A221651C69700A80AFE /* A64DOpcode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = A64DOpcode.cpp; path = disassembler/ARM64/A64DOpcode.cpp; sourceTree = "<group>"; };
                652A3A231651C69700A80AFE /* A64DOpcode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = A64DOpcode.h; path = disassembler/ARM64/A64DOpcode.h; sourceTree = "<group>"; };
                969A07900ED1D3AE00F1F681 /* CodeBlock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CodeBlock.cpp; sourceTree = "<group>"; };
                969A07910ED1D3AE00F1F681 /* CodeBlock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CodeBlock.h; sourceTree = "<group>"; };
                969A07920ED1D3AE00F1F681 /* DirectEvalCodeCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DirectEvalCodeCache.h; sourceTree = "<group>"; };
+               969A07930ED1D3AE00F1F681 /* Instruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Instruction.h; sourceTree = "<group>"; };
                969A07940ED1D3AE00F1F681 /* Opcode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Opcode.cpp; sourceTree = "<group>"; };
                969A07950ED1D3AE00F1F681 /* Opcode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Opcode.h; sourceTree = "<group>"; };
                969A09220ED1E09C00F1F681 /* Completion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Completion.cpp; sourceTree = "<group>"; };
                ADE802961E08F1C90058DE78 /* WebAssemblyLinkErrorPrototype.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebAssemblyLinkErrorPrototype.cpp; path = js/WebAssemblyLinkErrorPrototype.cpp; sourceTree = "<group>"; };
                ADE802971E08F1C90058DE78 /* WebAssemblyLinkErrorPrototype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebAssemblyLinkErrorPrototype.h; path = js/WebAssemblyLinkErrorPrototype.h; sourceTree = "<group>"; };
                ADE8029D1E08F2260058DE78 /* WebAssemblyLinkErrorConstructor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebAssemblyLinkErrorConstructor.cpp; path = js/WebAssemblyLinkErrorConstructor.cpp; sourceTree = "<group>"; };
+               B59F89371891AD3300D5CCDC /* UnlinkedInstructionStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UnlinkedInstructionStream.h; sourceTree = "<group>"; };
+               B59F89381891ADB500D5CCDC /* UnlinkedInstructionStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UnlinkedInstructionStream.cpp; sourceTree = "<group>"; };
                BC021BF2136900C300FC5467 /* ToolExecutable.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = ToolExecutable.xcconfig; sourceTree = "<group>"; };
                BC02E9040E1839DB000F9297 /* ErrorConstructor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ErrorConstructor.cpp; sourceTree = "<group>"; };
                BC02E9050E1839DB000F9297 /* ErrorConstructor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ErrorConstructor.h; sourceTree = "<group>"; };
                                F692A8540255597D01FF60F7 /* create_hash_table */,
                                937B63CC09E766D200A671DD /* DerivedSources.make */,
                                0F93275A1C20BCDF00CF6564 /* dynbench.cpp */,
+                               6529FB3018B2D63900C61102 /* generate-bytecode-files */,
                                F5C290E60284F98E018635CA /* JavaScriptCorePrefix.h */,
                                45E12D8806A49B0F00E9DF84 /* jsc.cpp */,
                                A7C225CC139981F100FF1662 /* KeywordLookupGenerator.py */,
                                5D5D8AD00E0D0EBE00F9C692 /* libedit.dylib */,
                                9322A00306C341D3009067BB /* libicucore.dylib */,
                                51F0EC0705C86C9A00E6DF1B /* libobjc.dylib */,
-                               1498CAD3214656C400710879 /* libWTF.a */,
                                A8A4748D151A8306004123FF /* libWTF.a */,
                                371D842C17C98B6E00ECF994 /* libz.dylib */,
                                A5098B031C16AA0200087797 /* Security.framework */,
                                142D6F0713539A2800B02E86 /* MarkedBlock.h */,
                                0F7C5FB71D888A010044F5E2 /* MarkedBlockInlines.h */,
                                141448CA13A176EC00F5BA1A /* MarkedBlockSet.h */,
+                               14D2F3D8139F4BE200491031 /* MarkedSpace.cpp */,
                                14D2F3D9139F4BE200491031 /* MarkedSpace.h */,
                                0F7DF1301E2970D50095951B /* MarkedSpaceInlines.h */,
                                0F660E331E0517B70031462C /* MarkingConstraint.cpp */,
                                969A07270ED1CE6900F1F681 /* Label.h */,
                                960097A50EBABB58007A7297 /* LabelScope.h */,
                                655EB29A10CE2581001A990E /* NodesCodegen.cpp */,
-                               14788EE221501AF700A561C8 /* ProfileTypeBytecodeFlag.cpp */,
-                               14BA7752211A8E5F008D0B05 /* ProfileTypeBytecodeFlag.h */,
                                969A07280ED1CE6900F1F681 /* RegisterID.h */,
                                14DF04D916B3996D0016A513 /* StaticPropertyAnalysis.h */,
                                14CA958A16AB50DE00938A06 /* StaticPropertyAnalyzer.h */,
                                0FE050131AA9091100D33B33 /* GenericOffset.h */,
                                0F2B66B217B6B5AB00A7AE3F /* GenericTypedArrayView.h */,
                                0F2B66B317B6B5AB00A7AE3F /* GenericTypedArrayViewInlines.h */,
-                               14788EE521501B2900A561C8 /* GetPutInfo.cpp */,
                                796465681B952FF0003059EE /* GetPutInfo.h */,
                                BC02E9B80E184545000F9297 /* GetterSetter.cpp */,
                                BC337BDE0E1AF0B80076918A /* GetterSetter.h */,
                                0F919D0A157EE09D004A4E7D /* JSSymbolTableObject.h */,
                                70ECA6001AFDBEA200449739 /* JSTemplateObjectDescriptor.cpp */,
                                70ECA6011AFDBEA200449739 /* JSTemplateObjectDescriptor.h */,
-                               14788EE421501B2800A561C8 /* JSType.cpp */,
                                14ABB454099C2A0F00E2A24F /* JSType.h */,
                                0F2B66CC17B6B5AB00A7AE3F /* JSTypedArrayConstructors.cpp */,
                                0F2B66CD17B6B5AB00A7AE3F /* JSTypedArrayConstructors.h */,
                                7094C4DC1AE439530041A2EE /* BytecodeIntrinsicRegistry.cpp */,
                                7094C4DD1AE439530041A2EE /* BytecodeIntrinsicRegistry.h */,
                                0F2DD80A1AB3D85800BBB8E8 /* BytecodeKills.h */,
-                               14BA7751211086A0008D0B05 /* BytecodeList.rb */,
+                               6529FB3118B2D99900C61102 /* BytecodeList.json */,
                                C2FCAE0E17A9C24E0034C735 /* BytecodeLivenessAnalysis.cpp */,
                                C2FCAE0F17A9C24E0034C735 /* BytecodeLivenessAnalysis.h */,
                                0F666EBE183566F900D017F1 /* BytecodeLivenessAnalysisInlines.h */,
                                969A07910ED1D3AE00F1F681 /* CodeBlock.h */,
                                0F8F943D1667632D00D61971 /* CodeBlockHash.cpp */,
                                0F8F943E1667632D00D61971 /* CodeBlockHash.h */,
-                               142F16E921583B5E003D49C9 /* CodeBlockInlines.h */,
                                0FC97F2F182020D7002C9B26 /* CodeBlockJettisoningWatchpoint.cpp */,
                                0FC97F30182020D7002C9B26 /* CodeBlockJettisoningWatchpoint.h */,
                                0F96EBB116676EF4008BADE3 /* CodeBlockWithJITType.h */,
                                0FB105821675480C00F8AB6E /* ExitKind.cpp */,
                                0FB105831675480C00F8AB6E /* ExitKind.h */,
                                0F0B83AA14BCF5B900885B4F /* ExpressionRangeInfo.h */,
-                               14A46809216FA534000D2B1A /* Fits.h */,
                                0F666EBF183566F900D017F1 /* FullBytecodeLiveness.h */,
                                AD4252521E5D0F22009D2A97 /* FullCodeOrigin.cpp */,
                                AD4252501E5D0DEB009D2A97 /* FullCodeOrigin.h */,
                                14AD91161DCA97FD0014F9FE /* FunctionCodeBlock.cpp */,
                                14AD91071DCA92940014F9FE /* FunctionCodeBlock.h */,
-                               1498CAD5214BF36D00710879 /* GetByIdMetadata.h */,
                                0F93329514CA7DC10085F3C6 /* GetByIdStatus.cpp */,
                                0F93329614CA7DC10085F3C6 /* GetByIdStatus.h */,
                                0F0332C118B01763005F979A /* GetByIdVariant.cpp */,
                                0FB399BB20AF6B2A0017E213 /* InstanceOfStatus.h */,
                                0FB399BC20AF6B2A0017E213 /* InstanceOfVariant.cpp */,
                                0FB399B920AF6B2A0017E213 /* InstanceOfVariant.h */,
-                               14A4680A216FA535000D2B1A /* Instruction.h */,
-                               14CC3BA12138A238002D58B6 /* InstructionStream.cpp */,
-                               14CC3BA22138A238002D58B6 /* InstructionStream.h */,
+                               969A07930ED1D3AE00F1F681 /* Instruction.h */,
                                53F6BF6C1C3F060A00F41E5D /* InternalFunctionAllocationProfile.h */,
                                BCFD8C900EEB2EE700283848 /* JumpTable.cpp */,
                                BCFD8C910EEB2EE700283848 /* JumpTable.h */,
                                0F0FC45814BD15F100B81154 /* LLIntCallLinkInfo.h */,
                                53FA2AE21CF380390022711D /* LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp */,
                                53FA2AE01CF37F3F0022711D /* LLIntPrototypeLoadAdaptiveStructureWatchpoint.h */,
-                               14F79F6E216EAD5000046D39 /* MetadataTable.cpp */,
-                               142F16DF215585C8003D49C9 /* MetadataTable.h */,
                                0FB5467C14F5CFD3002C2989 /* MethodOfGettingAValueProfile.cpp */,
                                0FB5467A14F5C7D4002C2989 /* MethodOfGettingAValueProfile.h */,
                                20ECB15EFC524624BC2F02D5 /* ModuleNamespaceAccessCase.cpp */,
                                969A07940ED1D3AE00F1F681 /* Opcode.cpp */,
                                969A07950ED1D3AE00F1F681 /* Opcode.h */,
                                FE64872D2141D04800AB0D3E /* OpcodeInlines.h */,
-                               14A4680B216FA535000D2B1A /* OpcodeSize.h */,
                                0F2BDC2B151FDE8B00CD8910 /* Operands.h */,
                                A70447E917A0BD4600F5898E /* OperandsInlines.h */,
                                E34E657420668E8E00FB81AC /* ParseHash.cpp */,
                                14142E541B7973C000F4BF4B /* UnlinkedFunctionExecutable.cpp */,
                                14142E501B796ECE00F4BF4B /* UnlinkedFunctionExecutable.h */,
                                14AD911C1DCA9FA40014F9FE /* UnlinkedGlobalCodeBlock.h */,
-                               142D52BE21762958002DB086 /* UnlinkedMetadataTable.h */,
-                               142D52BD21762957002DB086 /* UnlinkedMetadataTableInlines.h */,
+                               B59F89381891ADB500D5CCDC /* UnlinkedInstructionStream.cpp */,
+                               B59F89371891AD3300D5CCDC /* UnlinkedInstructionStream.h */,
                                14AD912A1DCAAAB00014F9FE /* UnlinkedModuleProgramCodeBlock.cpp */,
                                14AD911F1DCA9FA40014F9FE /* UnlinkedModuleProgramCodeBlock.h */,
                                14AD91291DCAAAB00014F9FE /* UnlinkedProgramCodeBlock.cpp */,
                                0FE0501B1AA9091100D33B33 /* GenericOffset.h in Headers */,
                                0F2B66E017B6B5AB00A7AE3F /* GenericTypedArrayView.h in Headers */,
                                0F2B66E117B6B5AB00A7AE3F /* GenericTypedArrayViewInlines.h in Headers */,
-                               1498CAD6214BF36D00710879 /* GetByIdMetadata.h in Headers */,
                                0F9332A014CA7DCD0085F3C6 /* GetByIdStatus.h in Headers */,
                                0F0332C418B01763005F979A /* GetByIdVariant.h in Headers */,
                                7964656A1B952FF0003059EE /* GetPutInfo.h in Headers */,
                                0F49E9AA20AB4D00001CA0AA /* InstanceOfAccessCase.h in Headers */,
                                0FB399BF20AF6B3F0017E213 /* InstanceOfStatus.h in Headers */,
                                0FB399C020AF6B430017E213 /* InstanceOfVariant.h in Headers */,
-                               14A4680C216FA565000D2B1A /* Instruction.h in Headers */,
-                               14C25B9E216EA36A00137764 /* InstructionStream.h in Headers */,
+                               969A07990ED1D3AE00F1F681 /* Instruction.h in Headers */,
                                A7A8AF3B17ADB5F3005AB174 /* Int16Array.h in Headers */,
                                A7A8AF3C17ADB5F3005AB174 /* Int32Array.h in Headers */,
                                A7A8AF3A17ADB5F3005AB174 /* Int8Array.h in Headers */,
                                BC18C43C0E16F5CD00B34460 /* MathObject.h in Headers */,
                                E328C6C71DA4304500D255FD /* MaxFrameExtentForSlowPathCall.h in Headers */,
                                90213E3E123A40C200D422F3 /* MemoryStatistics.h in Headers */,
-                               142F16E021558802003D49C9 /* MetadataTable.h in Headers */,
                                0FB5467B14F5C7E1002C2989 /* MethodOfGettingAValueProfile.h in Headers */,
                                7C008CE7187631B600955C24 /* Microtask.h in Headers */,
                                FE2A87601F02381600EB31B2 /* MinimumReservedZoneSize.h in Headers */,
                                0FD3E40C1B618B6600C80E1E /* ObjectPropertyConditionSet.h in Headers */,
                                BC18C4460E16F5CD00B34460 /* ObjectPrototype.h in Headers */,
                                E124A8F70E555775003091F1 /* OpaqueJSString.h in Headers */,
-                               14F79F70216EAFD200046D39 /* Opcode.h in Headers */,
+                               969A079B0ED1D3AE00F1F681 /* Opcode.h in Headers */,
                                FE64872E2141D04800AB0D3E /* OpcodeInlines.h in Headers */,
-                               14A4680D216FA56A000D2B1A /* OpcodeSize.h in Headers */,
                                0F2BDC2C151FDE9100CD8910 /* Operands.h in Headers */,
                                A70447EA17A0BD4600F5898E /* OperandsInlines.h in Headers */,
                                BC18C4480E16F5CD00B34460 /* Operations.h in Headers */,
                                14AD91231DCA9FA40014F9FE /* UnlinkedFunctionCodeBlock.h in Headers */,
                                14142E511B796ECE00F4BF4B /* UnlinkedFunctionExecutable.h in Headers */,
                                14AD91221DCA9FA40014F9FE /* UnlinkedGlobalCodeBlock.h in Headers */,
-                               146C384B2177ACDF0079F6D9 /* UnlinkedMetadataTable.h in Headers */,
                                14AD91251DCA9FA40014F9FE /* UnlinkedModuleProgramCodeBlock.h in Headers */,
                                14AD91261DCA9FA40014F9FE /* UnlinkedProgramCodeBlock.h in Headers */,
                                14AB66761DECF40900A56C26 /* UnlinkedSourceCode.h in Headers */,
                        buildRules = (
                        );
                        dependencies = (
-                               14013B762183C01E00999946 /* PBXTargetDependency */,
                        );
                        name = jsc;
                        productInstallPath = /usr/local/bin;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "exec ${SRCROOT}/postprocess-headers.sh\n";
+                       shellScript = "exec ${SRCROOT}/postprocess-headers.sh";
                };
                374F95C9205F9975002BF68F /* Make libWTF.a Symbolic Link */ = {
                        isa = PBXShellScriptBuildPhase;
                        target = 0F4680A914BA7FD900BFE272 /* LLInt Offsets */;
                        targetProxy = 0FF922D214F46B2F0041A24E /* PBXContainerItemProxy */;
                };
-               14013B762183C01E00999946 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = 65FB3F6609D11E9100F49DEB /* Derived Sources */;
-                       targetProxy = 14013B752183C01E00999946 /* PBXContainerItemProxy */;
-               };
                14BD6882215191310050DAFF /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = 65FB3F6609D11E9100F49DEB /* Derived Sources */;
                        target = 65FB3F6609D11E9100F49DEB /* Derived Sources */;
                        targetProxy = 65244BD218ECB5000010B708 /* PBXContainerItemProxy */;
                };
+               65442D5018EBB744007AF92F /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 65FB3F6609D11E9100F49DEB /* Derived Sources */;
+                       targetProxy = 65442D4F18EBB744007AF92F /* PBXContainerItemProxy */;
+               };
                65788A9E18B409EB00C189FF /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = 0FF922C314F46B130041A24E /* JSCLLIntOffsetsExtractor */;
index 8ffa217..2288c58 100644 (file)
@@ -233,12 +233,10 @@ bytecode/InlineCallFrameSet.cpp
 bytecode/InstanceOfAccessCase.cpp
 bytecode/InstanceOfStatus.cpp
 bytecode/InstanceOfVariant.cpp
-bytecode/InstructionStream.cpp
 bytecode/IntrinsicGetterAccessCase.cpp
 bytecode/JumpTable.cpp
 bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp
 bytecode/LazyOperandValueProfile.cpp
-bytecode/MetadataTable.cpp
 bytecode/MethodOfGettingAValueProfile.cpp
 bytecode/ModuleNamespaceAccessCase.cpp
 bytecode/ModuleProgramCodeBlock.cpp
@@ -270,6 +268,7 @@ bytecode/UnlinkedCodeBlock.cpp
 bytecode/UnlinkedEvalCodeBlock.cpp
 bytecode/UnlinkedFunctionCodeBlock.cpp
 bytecode/UnlinkedFunctionExecutable.cpp
+bytecode/UnlinkedInstructionStream.cpp
 bytecode/UnlinkedModuleProgramCodeBlock.cpp
 bytecode/UnlinkedProgramCodeBlock.cpp
 bytecode/ValueRecovery.cpp
@@ -279,7 +278,6 @@ bytecode/Watchpoint.cpp
 
 bytecompiler/BytecodeGenerator.cpp
 bytecompiler/NodesCodegen.cpp
-bytecompiler/ProfileTypeBytecodeFlag.cpp
 
 debugger/Debugger.cpp
 debugger/DebuggerCallFrame.cpp
@@ -761,7 +759,6 @@ runtime/FunctionRareData.cpp
 runtime/GeneratorFunctionConstructor.cpp
 runtime/GeneratorFunctionPrototype.cpp
 runtime/GeneratorPrototype.cpp
-runtime/GetPutInfo.cpp
 runtime/GetterSetter.cpp
 runtime/HashMapImpl.cpp
 runtime/Identifier.cpp
@@ -854,7 +851,6 @@ runtime/JSStringJoiner.cpp
 runtime/JSStringHeapCellType.cpp
 runtime/JSSymbolTableObject.cpp
 runtime/JSTemplateObjectDescriptor.cpp
-runtime/JSType.cpp
 runtime/JSTypedArrayConstructors.cpp
 runtime/JSTypedArrayPrototypes.cpp
 runtime/JSTypedArrayViewConstructor.cpp
index 83b49bb..fac8b86 100644 (file)
@@ -176,7 +176,7 @@ class ReturnAddressPtr {
 public:
     ReturnAddressPtr() { }
 
-    explicit ReturnAddressPtr(const void* value)
+    explicit ReturnAddressPtr(void* value)
         : m_value(value)
     {
         PoisonedMasmPtr::assertIsNotPoisoned(m_value);
@@ -191,7 +191,7 @@ public:
         ASSERT_VALID_CODE_POINTER(m_value);
     }
 
-    const void* value() const
+    void* value() const
     {
         PoisonedMasmPtr::assertIsNotPoisoned(m_value);
         return m_value;
@@ -203,7 +203,7 @@ public:
     }
 
 private:
-    const void* m_value { nullptr };
+    void* m_value { nullptr };
 };
 
 // MacroAssemblerCodePtr:
@@ -222,10 +222,10 @@ public:
     MacroAssemblerCodePtr() = default;
     MacroAssemblerCodePtr(std::nullptr_t) : m_value(nullptr) { }
 
-    explicit MacroAssemblerCodePtr(const void* value)
+    explicit MacroAssemblerCodePtr(void* value)
 #if CPU(ARM_THUMB2)
         // Decorate the pointer as a thumb code pointer.
-        : m_value(reinterpret_cast<const char*>(value) + 1)
+        : m_value(reinterpret_cast<char*>(value) + 1)
 #else
         : m_value(value)
 #endif
@@ -239,7 +239,7 @@ public:
         ASSERT_VALID_CODE_POINTER(m_value.unpoisoned());
     }
 
-    static MacroAssemblerCodePtr createFromExecutableAddress(const void* value)
+    static MacroAssemblerCodePtr createFromExecutableAddress(void* value)
     {
         ASSERT(value);
         ASSERT_VALID_CODE_POINTER(value);
index 645c258..52eef82 100644 (file)
@@ -105,11 +105,6 @@ public:
         ASSERT(lhsObservedType().isEmpty());
         ASSERT(rhsObservedType().isEmpty());
     }
-
-    ArithProfile(OperandTypes types)
-        : ArithProfile(types.first(), types.second())
-    { }
-
     ArithProfile() = default;
 
     static constexpr ArithProfile fromInt(uint32_t bits)
index fef936e..c233deb 100644 (file)
@@ -32,13 +32,6 @@ namespace JSC {
 
 class ArrayAllocationProfile {
 public:
-    ArrayAllocationProfile() = default;
-
-    ArrayAllocationProfile(IndexingType recommendedIndexingMode)
-    {
-        initializeIndexingMode(recommendedIndexingMode);
-    }
-
     IndexingType selectIndexingType()
     {
         JSArray* lastArray = m_lastArray;
index b9d9f37..3abeb26 100644 (file)
@@ -210,8 +210,6 @@ inline bool hasSeenCopyOnWriteArray(ArrayModes arrayModes)
 }
 
 class ArrayProfile {
-    friend class CodeBlock;
-
 public:
     ArrayProfile()
         : ArrayProfile(std::numeric_limits<unsigned>::max())
index 33bb0c0..a4397b5 100644 (file)
@@ -39,7 +39,7 @@ void BytecodeBasicBlock::shrinkToFit()
     m_successors.shrinkToFit();
 }
 
-static bool isJumpTarget(OpcodeID opcodeID, const Vector<InstructionStream::Offset, 32>& jumpTargets, unsigned bytecodeOffset)
+static bool isJumpTarget(OpcodeID opcodeID, const Vector<unsigned, 32>& jumpTargets, unsigned bytecodeOffset)
 {
     if (opcodeID == op_catch)
         return true;
@@ -47,11 +47,11 @@ static bool isJumpTarget(OpcodeID opcodeID, const Vector<InstructionStream::Offs
     return std::binary_search(jumpTargets.begin(), jumpTargets.end(), bytecodeOffset);
 }
 
-template<typename Block>
-void BytecodeBasicBlock::computeImpl(Block* codeBlock, const InstructionStream& instructions, Vector<std::unique_ptr<BytecodeBasicBlock>>& basicBlocks)
+template<typename Block, typename Instruction>
+void BytecodeBasicBlock::computeImpl(Block* codeBlock, Instruction* instructionsBegin, unsigned instructionCount, Vector<std::unique_ptr<BytecodeBasicBlock>>& basicBlocks)
 {
-    Vector<InstructionStream::Offset, 32> jumpTargets;
-    computePreciseJumpTargets(codeBlock, instructions, jumpTargets);
+    Vector<unsigned, 32> jumpTargets;
+    computePreciseJumpTargets(codeBlock, instructionsBegin, instructionCount, jumpTargets);
 
     auto appendBlock = [&] (std::unique_ptr<BytecodeBasicBlock>&& block) {
         block->m_index = basicBlocks.size();
@@ -66,7 +66,7 @@ void BytecodeBasicBlock::computeImpl(Block* codeBlock, const InstructionStream&
     basicBlocks.reserveCapacity(jumpTargets.size() + 2);
 
     auto entry = std::make_unique<BytecodeBasicBlock>(BytecodeBasicBlock::EntryBlock);
-    auto firstBlock = std::make_unique<BytecodeBasicBlock>(BytecodeBasicBlock::EntryBlock);
+    auto firstBlock = std::make_unique<BytecodeBasicBlock>(0, 0);
     linkBlocks(entry.get(), firstBlock.get());
 
     appendBlock(WTFMove(entry));
@@ -77,18 +77,19 @@ void BytecodeBasicBlock::computeImpl(Block* codeBlock, const InstructionStream&
 
     bool nextInstructionIsLeader = false;
 
-    for (const auto& instruction : instructions) {
-        auto bytecodeOffset = instruction.offset();
-        OpcodeID opcodeID = instruction->opcodeID();
+    for (unsigned bytecodeOffset = 0; bytecodeOffset < instructionCount;) {
+        OpcodeID opcodeID = Interpreter::getOpcodeID(instructionsBegin[bytecodeOffset]);
+        unsigned opcodeLength = opcodeLengths[opcodeID];
 
         bool createdBlock = false;
         // If the current bytecode is a jump target, then it's the leader of its own basic block.
         if (isJumpTarget(opcodeID, jumpTargets, bytecodeOffset) || nextInstructionIsLeader) {
-            auto newBlock = std::make_unique<BytecodeBasicBlock>(instruction);
+            auto newBlock = std::make_unique<BytecodeBasicBlock>(bytecodeOffset, opcodeLength);
             current = newBlock.get();
             appendBlock(WTFMove(newBlock));
             createdBlock = true;
             nextInstructionIsLeader = false;
+            bytecodeOffset += opcodeLength;
         }
 
         // If the current bytecode is a branch or a return, then the next instruction is the leader of its own basic block.
@@ -99,7 +100,8 @@ void BytecodeBasicBlock::computeImpl(Block* codeBlock, const InstructionStream&
             continue;
 
         // Otherwise, just add to the length of the current block.
-        current->addLength(instruction->size());
+        current->addLength(opcodeLength);
+        bytecodeOffset += opcodeLength;
     }
 
     // Link basic blocks together.
@@ -109,25 +111,24 @@ void BytecodeBasicBlock::computeImpl(Block* codeBlock, const InstructionStream&
         if (block->isEntryBlock() || block->isExitBlock())
             continue;
 
-        bool fallsThrough = true;
-        for (auto bytecodeOffset : block->offsets()) {
-            auto instruction = instructions.at(bytecodeOffset);
-            OpcodeID opcodeID = instruction->opcodeID();
-
+        bool fallsThrough = true; 
+        for (unsigned bytecodeOffset = block->leaderOffset(); bytecodeOffset < block->leaderOffset() + block->totalLength();) {
+            OpcodeID opcodeID = Interpreter::getOpcodeID(instructionsBegin[bytecodeOffset]);
+            unsigned opcodeLength = opcodeLengths[opcodeID];
             // If we found a terminal bytecode, link to the exit block.
             if (isTerminal(opcodeID)) {
-                ASSERT(bytecodeOffset + instruction->size() == block->leaderOffset() + block->totalLength());
+                ASSERT(bytecodeOffset + opcodeLength == block->leaderOffset() + block->totalLength());
                 linkBlocks(block, exit.get());
                 fallsThrough = false;
                 break;
             }
 
-            // If we found a throw, get the HandlerInfo for this instruction to see where we will jump.
+            // If we found a throw, get the HandlerInfo for this instruction to see where we will jump. 
             // If there isn't one, treat this throw as a terminal. This is true even if we have a finally
             // block because the finally block will create its own catch, which will generate a HandlerInfo.
             if (isThrow(opcodeID)) {
-                ASSERT(bytecodeOffset + instruction->size() == block->leaderOffset() + block->totalLength());
-                auto* handler = codeBlock->handlerForBytecodeOffset(instruction.offset());
+                ASSERT(bytecodeOffset + opcodeLength == block->leaderOffset() + block->totalLength());
+                auto* handler = codeBlock->handlerForBytecodeOffset(bytecodeOffset);
                 fallsThrough = false;
                 if (!handler) {
                     linkBlocks(block, exit.get());
@@ -145,9 +146,9 @@ void BytecodeBasicBlock::computeImpl(Block* codeBlock, const InstructionStream&
 
             // If we found a branch, link to the block(s) that we jump to.
             if (isBranch(opcodeID)) {
-                ASSERT(bytecodeOffset + instruction->size() == block->leaderOffset() + block->totalLength());
-                Vector<InstructionStream::Offset, 1> bytecodeOffsetsJumpedTo;
-                findJumpTargetsForInstruction(codeBlock, instruction, bytecodeOffsetsJumpedTo);
+                ASSERT(bytecodeOffset + opcodeLength == block->leaderOffset() + block->totalLength());
+                Vector<unsigned, 1> bytecodeOffsetsJumpedTo;
+                findJumpTargetsForBytecodeOffset(codeBlock, instructionsBegin, bytecodeOffset, bytecodeOffsetsJumpedTo);
 
                 size_t numberOfJumpTargets = bytecodeOffsetsJumpedTo.size();
                 ASSERT(numberOfJumpTargets);
@@ -171,6 +172,7 @@ void BytecodeBasicBlock::computeImpl(Block* codeBlock, const InstructionStream&
 
                 break;
             }
+            bytecodeOffset += opcodeLength;
         }
 
         // If we fall through then link to the next block in program order.
@@ -182,19 +184,19 @@ void BytecodeBasicBlock::computeImpl(Block* codeBlock, const InstructionStream&
     }
 
     appendBlock(WTFMove(exit));
-
+    
     for (auto& basicBlock : basicBlocks)
         basicBlock->shrinkToFit();
 }
 
-void BytecodeBasicBlock::compute(CodeBlock* codeBlock, const InstructionStream& instructions, Vector<std::unique_ptr<BytecodeBasicBlock>>& basicBlocks)
+void BytecodeBasicBlock::compute(CodeBlock* codeBlock, Instruction* instructionsBegin, unsigned instructionCount, Vector<std::unique_ptr<BytecodeBasicBlock>>& basicBlocks)
 {
-    computeImpl(codeBlock, instructions, basicBlocks);
+    computeImpl(codeBlock, instructionsBegin, instructionCount, basicBlocks);
 }
 
-void BytecodeBasicBlock::compute(UnlinkedCodeBlock* codeBlock, const InstructionStream& instructions, Vector<std::unique_ptr<BytecodeBasicBlock>>& basicBlocks)
+void BytecodeBasicBlock::compute(UnlinkedCodeBlock* codeBlock, UnlinkedInstruction* instructionsBegin, unsigned instructionCount, Vector<std::unique_ptr<BytecodeBasicBlock>>& basicBlocks)
 {
-    computeImpl(codeBlock, instructions, basicBlocks);
+    BytecodeBasicBlock::computeImpl(codeBlock, instructionsBegin, instructionCount, basicBlocks);
 }
 
 } // namespace JSC
index 20e124c..fb81650 100644 (file)
@@ -25,7 +25,6 @@
 
 #pragma once
 
-#include "InstructionStream.h"
 #include <limits.h>
 #include <wtf/FastBitVector.h>
 #include <wtf/Vector.h>
@@ -35,22 +34,23 @@ namespace JSC {
 class CodeBlock;
 class UnlinkedCodeBlock;
 struct Instruction;
+struct UnlinkedInstruction;
 
 class BytecodeBasicBlock {
     WTF_MAKE_FAST_ALLOCATED;
 public:
     enum SpecialBlockType { EntryBlock, ExitBlock };
-    BytecodeBasicBlock(const InstructionStream::Ref&);
+    BytecodeBasicBlock(unsigned start, unsigned length);
     BytecodeBasicBlock(SpecialBlockType);
     void shrinkToFit();
 
     bool isEntryBlock() { return !m_leaderOffset && !m_totalLength; }
     bool isExitBlock() { return m_leaderOffset == UINT_MAX && m_totalLength == UINT_MAX; }
 
-    unsigned leaderOffset() const { return m_leaderOffset; }
-    unsigned totalLength() const { return m_totalLength; }
+    unsigned leaderOffset() { return m_leaderOffset; }
+    unsigned totalLength() { return m_totalLength; }
 
-    const Vector<InstructionStream::Offset>& offsets() const { return m_offsets; }
+    const Vector<unsigned>& offsets() const { return m_offsets; }
 
     const Vector<BytecodeBasicBlock*>& successors() const { return m_successors; }
 
@@ -59,30 +59,30 @@ public:
 
     unsigned index() const { return m_index; }
 
-    static void compute(CodeBlock*, const InstructionStream& instructions, Vector<std::unique_ptr<BytecodeBasicBlock>>&);
-    static void compute(UnlinkedCodeBlock*, const InstructionStream& instructions, Vector<std::unique_ptr<BytecodeBasicBlock>>&);
+    static void compute(CodeBlock*, Instruction* instructionsBegin, unsigned instructionCount, Vector<std::unique_ptr<BytecodeBasicBlock>>&);
+    static void compute(UnlinkedCodeBlock*, UnlinkedInstruction* instructionsBegin, unsigned instructionCount, Vector<std::unique_ptr<BytecodeBasicBlock>>&);
 
 private:
-    template<typename Block> static void computeImpl(Block* codeBlock, const InstructionStream& instructions, Vector<std::unique_ptr<BytecodeBasicBlock>>& basicBlocks);
+    template<typename Block, typename Instruction> static void computeImpl(Block* codeBlock, Instruction* instructionsBegin, unsigned instructionCount, Vector<std::unique_ptr<BytecodeBasicBlock>>& basicBlocks);
 
     void addSuccessor(BytecodeBasicBlock* block) { m_successors.append(block); }
 
     void addLength(unsigned);
 
-    InstructionStream::Offset m_leaderOffset;
+    unsigned m_leaderOffset;
     unsigned m_totalLength;
     unsigned m_index;
 
-    Vector<InstructionStream::Offset> m_offsets;
+    Vector<unsigned> m_offsets;
     Vector<BytecodeBasicBlock*> m_successors;
 
     FastBitVector m_in;
     FastBitVector m_out;
 };
 
-inline BytecodeBasicBlock::BytecodeBasicBlock(const InstructionStream::Ref& instruction)
-    : m_leaderOffset(instruction.offset())
-    , m_totalLength(instruction->size())
+inline BytecodeBasicBlock::BytecodeBasicBlock(unsigned start, unsigned length)
+    : m_leaderOffset(start)
+    , m_totalLength(length)
 {
     m_offsets.append(m_leaderOffset);
 }
index 1f8cdbb..5d7c0ad 100644 (file)
@@ -28,7 +28,6 @@
 #include "BytecodeDumper.h"
 
 #include "ArithProfile.h"
-#include "BytecodeStructs.h"
 #include "CallLinkStatus.h"
 #include "CodeBlock.h"
 #include "Error.h"
 #include "StructureInlines.h"
 #include "ToThisStatus.h"
 #include "UnlinkedCodeBlock.h"
-#include "UnlinkedMetadataTableInlines.h"
 
 namespace JSC {
 
+static StructureID getStructureID(const Instruction& instruction)
+{
+    return instruction.u.structureID;
+}
+
+static StructureID getStructureID(const UnlinkedInstruction&)
+{
+    return 0;
+}
+
+static Special::Pointer getSpecialPointer(const Instruction& instruction)
+{
+    return instruction.u.specialPointer;
+}
+
+static Special::Pointer getSpecialPointer(const UnlinkedInstruction& instruction)
+{
+    return static_cast<Special::Pointer>(instruction.u.operand);
+}
+
+static PutByIdFlags getPutByIdFlags(const Instruction& instruction)
+{
+    return instruction.u.putByIdFlags;
+}
+
+static PutByIdFlags getPutByIdFlags(const UnlinkedInstruction& instruction)
+{
+    return static_cast<PutByIdFlags>(instruction.u.operand);
+}
+
+static ToThisStatus getToThisStatus(const Instruction& instruction)
+{
+    return instruction.u.toThisStatus;
+}
+
+static ToThisStatus getToThisStatus(const UnlinkedInstruction& instruction)
+{
+    return static_cast<ToThisStatus>(instruction.u.operand);
+}
+
+static void* getPointer(const Instruction& instruction)
+{
+    return instruction.u.pointer;
+}
+
+static void* getPointer(const UnlinkedInstruction&)
+{
+    return nullptr;
+}
+
+static StructureChain* getStructureChain(const Instruction& instruction)
+{
+    return instruction.u.structureChain.get();
+}
+
+static StructureChain* getStructureChain(const UnlinkedInstruction&)
+{
+    return nullptr;
+}
+
+static Structure* getStructure(const Instruction& instruction)
+{
+    return instruction.u.structure.get();
+}
+
+static Structure* getStructure(const UnlinkedInstruction&)
+{
+    return nullptr;
+}
+
+static LLIntCallLinkInfo* getCallLinkInfo(const Instruction& instruction)
+{
+    return instruction.u.callLinkInfo;
+}
+
+static LLIntCallLinkInfo* getCallLinkInfo(const UnlinkedInstruction&)
+{
+    return nullptr;
+}
+
+static BasicBlockLocation* getBasicBlockLocation(const Instruction& instruction)
+{
+    return instruction.u.basicBlockLocation;
+}
+
+static BasicBlockLocation* getBasicBlockLocation(const UnlinkedInstruction&)
+{
+    return nullptr;
+}
+
+template<class Block>
+void* BytecodeDumper<Block>::actualPointerFor(Special::Pointer) const
+{
+    return nullptr;
+}
+
+template<>
+void* BytecodeDumper<CodeBlock>::actualPointerFor(Special::Pointer pointer) const
+{
+    return block()->globalObject()->actualPointerFor(pointer);
+}
+
+static void beginDumpProfiling(PrintStream& out, bool& hasPrintedProfiling)
+{
+    if (hasPrintedProfiling) {
+        out.print("; ");
+        return;
+    }
+
+    out.print("    ");
+    hasPrintedProfiling = true;
+}
+
+template<class Block>
+void BytecodeDumper<Block>::dumpValueProfiling(PrintStream&, const typename Block::Instruction*& it, bool&)
+{
+    ++it;
+}
+
+template<>
+void BytecodeDumper<CodeBlock>::dumpValueProfiling(PrintStream& out, const typename CodeBlock::Instruction*& it, bool& hasPrintedProfiling)
+{
+    ConcurrentJSLocker locker(block()->m_lock);
+
+    ++it;
+    CString description = it->u.profile->briefDescription(locker);
+    if (!description.length())
+        return;
+    beginDumpProfiling(out, hasPrintedProfiling);
+    out.print(description);
+}
+
+template<class Block>
+void BytecodeDumper<Block>::dumpArrayProfiling(PrintStream&, const typename Block::Instruction*& it, bool&)
+{
+    ++it;
+}
+
+template<>
+void BytecodeDumper<CodeBlock>::dumpArrayProfiling(PrintStream& out, const typename CodeBlock::Instruction*& it, bool& hasPrintedProfiling)
+{
+    ConcurrentJSLocker locker(block()->m_lock);
+
+    ++it;
+    if (!it->u.arrayProfile)
+        return;
+    CString description = it->u.arrayProfile->briefDescription(locker, block());
+    if (!description.length())
+        return;
+    beginDumpProfiling(out, hasPrintedProfiling);
+    out.print(description);
+}
+
+template<class Block>
+void BytecodeDumper<Block>::dumpProfilesForBytecodeOffset(PrintStream&, unsigned, bool&)
+{
+}
+
+static void dumpRareCaseProfile(PrintStream& out, const char* name, RareCaseProfile* profile, bool& hasPrintedProfiling)
+{
+    if (!profile || !profile->m_counter)
+        return;
+
+    beginDumpProfiling(out, hasPrintedProfiling);
+    out.print(name, profile->m_counter);
+}
+
+static void dumpArithProfile(PrintStream& out, ArithProfile* profile, bool& hasPrintedProfiling)
+{
+    if (!profile)
+        return;
+
+    beginDumpProfiling(out, hasPrintedProfiling);
+    out.print("results: ", *profile);
+}
+
+template<>
+void BytecodeDumper<CodeBlock>::dumpProfilesForBytecodeOffset(PrintStream& out, unsigned location, bool& hasPrintedProfiling)
+{
+    dumpRareCaseProfile(out, "rare case: ", block()->rareCaseProfileForBytecodeOffset(location), hasPrintedProfiling);
+    {
+        dumpArithProfile(out, block()->arithProfileForBytecodeOffset(location), hasPrintedProfiling);
+    }
+
+#if ENABLE(DFG_JIT)
+    Vector<DFG::FrequentExitSite> exitSites = block()->unlinkedCodeBlock()->exitProfile().exitSitesFor(location);
+    if (!exitSites.isEmpty()) {
+        out.print(" !! frequent exits: ");
+        CommaPrinter comma;
+        for (auto& exitSite : exitSites)
+            out.print(comma, exitSite.kind(), " ", exitSite.jitType());
+    }
+#else // ENABLE(DFG_JIT)
+    UNUSED_PARAM(location);
+#endif // ENABLE(DFG_JIT)
+}
+
 template<class Block>
 VM* BytecodeDumper<Block>::vm() const
 {
@@ -55,11 +250,40 @@ const Identifier& BytecodeDumper<Block>::identifier(int index) const
     return block()->identifier(index);
 }
 
+template<class Instruction>
+static void printLocationAndOp(PrintStream& out, int location, const Instruction*&, const char* op)
+{
+    out.printf("[%4d] %-17s ", location, op);
+}
+
 static ALWAYS_INLINE bool isConstantRegisterIndex(int index)
 {
     return index >= FirstConstantRegisterIndex;
 }
 
+NEVER_INLINE static const char* debugHookName(int debugHookType)
+{
+    switch (static_cast<DebugHookType>(debugHookType)) {
+    case DidEnterCallFrame:
+        return "didEnterCallFrame";
+    case WillLeaveCallFrame:
+        return "willLeaveCallFrame";
+    case WillExecuteStatement:
+        return "willExecuteStatement";
+    case WillExecuteExpression:
+        return "willExecuteExpression";
+    case WillExecuteProgram:
+        return "willExecuteProgram";
+    case DidExecuteProgram:
+        return "didExecuteProgram";
+    case DidReachBreakpoint:
+        return "didReachBreakpoint";
+    }
+
+    RELEASE_ASSERT_NOT_REACHED();
+    return "";
+}
+
 template<class Block>
 CString BytecodeDumper<Block>::registerName(int r) const
 {
@@ -69,6 +293,11 @@ CString BytecodeDumper<Block>::registerName(int r) const
     return toCString(VirtualRegister(r));
 }
 
+static CString idName(int id0, const Identifier& ident)
+{
+    return toCString(ident.impl(), "(@id", id0, ")");
+}
+
 template<class Block>
 CString BytecodeDumper<Block>::constantName(int index) const
 {
@@ -77,43 +306,1490 @@ CString BytecodeDumper<Block>::constantName(int index) const
 }
 
 template<class Block>
-void BytecodeDumper<Block>::printLocationAndOp(InstructionStream::Offset location, const char* op)
+void BytecodeDumper<Block>::printUnaryOp(PrintStream& out, int location, const typename Block::Instruction*& it, const char* op)
+{
+    int r0 = (++it)->u.operand;
+    int r1 = (++it)->u.operand;
+
+    printLocationAndOp(out, location, it, op);
+    out.printf("%s, %s", registerName(r0).data(), registerName(r1).data());
+}
+
+template<class Block>
+void BytecodeDumper<Block>::printBinaryOp(PrintStream& out, int location, const typename Block::Instruction*& it, const char* op)
+{
+    int r0 = (++it)->u.operand;
+    int r1 = (++it)->u.operand;
+    int r2 = (++it)->u.operand;
+    printLocationAndOp(out, location, it, op);
+    out.printf("%s, %s, %s", registerName(r0).data(), registerName(r1).data(), registerName(r2).data());
+}
+
+template<class Block>
+void BytecodeDumper<Block>::printConditionalJump(PrintStream& out, const typename Block::Instruction*, const typename Block::Instruction*& it, int location, const char* op)
 {
-    m_out.printf("[%4u] %-18s ", location, op);
+    int r0 = (++it)->u.operand;
+    int offset = (++it)->u.operand;
+    printLocationAndOp(out, location, it, op);
+    out.printf("%s, %d(->%d)", registerName(r0).data(), offset, location + offset);
 }
 
 template<class Block>
-void BytecodeDumper<Block>::dumpBytecode(const InstructionStream::Ref& it, const ICStatusMap&)
+void BytecodeDumper<Block>::printCompareJump(PrintStream& out, const typename Block::Instruction*, const typename Block::Instruction*& it, int location, const char* op)
 {
-    ::JSC::dumpBytecode(this, it.offset(), it.ptr());
-    m_out.print("\n");
+    int r0 = (++it)->u.operand;
+    int r1 = (++it)->u.operand;
+    int offset = (++it)->u.operand;
+    printLocationAndOp(out, location, it, op);
+    out.printf("%s, %s, %d(->%d)", registerName(r0).data(), registerName(r1).data(), offset, location + offset);
 }
 
 template<class Block>
-void BytecodeDumper<Block>::dumpBytecode(Block* block, PrintStream& out, const InstructionStream::Ref& it, const ICStatusMap& statusMap)
+void BytecodeDumper<Block>::printGetByIdOp(PrintStream& out, int location, const typename Block::Instruction*& it)
 {
-    BytecodeDumper dumper(block, out);
-    dumper.dumpBytecode(it, statusMap);
+    const char* op;
+    switch (Interpreter::getOpcodeID(*it)) {
+    case op_get_by_id:
+        op = "get_by_id";
+        break;
+    case op_get_by_id_proto_load:
+        op = "get_by_id_proto_load";
+        break;
+    case op_get_by_id_unset:
+        op = "get_by_id_unset";
+        break;
+    case op_get_array_length:
+        op = "array_length";
+        break;
+    default:
+        RELEASE_ASSERT_NOT_REACHED();
+#if COMPILER_QUIRK(CONSIDERS_UNREACHABLE_CODE)
+        op = 0;
+#endif
+    }
+    int r0 = (++it)->u.operand;
+    int r1 = (++it)->u.operand;
+    int id0 = (++it)->u.operand;
+    printLocationAndOp(out, location, it, op);
+    out.printf("%s, %s, %s", registerName(r0).data(), registerName(r1).data(), idName(id0, identifier(id0)).data());
+    it += 4; // Increment up to the value profiler.
+}
+
+static void dumpStructure(PrintStream& out, const char* name, Structure* structure, const Identifier& ident)
+{
+    if (!structure)
+        return;
+
+    out.printf("%s = %p", name, structure);
+
+    PropertyOffset offset = structure->getConcurrently(ident.impl());
+    if (offset != invalidOffset)
+        out.printf(" (offset = %d)", offset);
+}
+
+static void dumpChain(PrintStream& out, StructureChain* chain, const Identifier& ident)
+{
+    out.printf("chain = %p: [", chain);
+    bool first = true;
+    for (WriteBarrier<Structure>* currentStructure = chain->head(); *currentStructure; ++currentStructure) {
+        if (first)
+            first = false;
+        else
+            out.printf(", ");
+        dumpStructure(out, "struct", currentStructure->get(), ident);
+    }
+    out.printf("]");
 }
 
 template<class Block>
-void BytecodeDumper<Block>::dumpIdentifiers()
+void BytecodeDumper<Block>::printGetByIdCacheStatus(PrintStream& out, int location, const ICStatusMap& statusMap)
+{
+    const auto* instruction = instructionsBegin() + location;
+
+    const Identifier& ident = identifier(instruction[3].u.operand);
+
+    UNUSED_PARAM(ident); // tell the compiler to shut up in certain platform configurations.
+
+    if (Interpreter::getOpcodeID(instruction[0]) == op_get_array_length)
+        out.printf(" llint(array_length)");
+    else if (StructureID structureID = getStructureID(instruction[4])) {
+        Structure* structure = vm()->heap.structureIDTable().get(structureID);
+        out.printf(" llint(");
+        dumpStructure(out, "struct", structure, ident);
+        out.printf(")");
+        if (Interpreter::getOpcodeID(instruction[0]) == op_get_by_id_proto_load)
+            out.printf(" proto(%p)", getPointer(instruction[6]));
+    }
+
+#if ENABLE(JIT)
+    if (StructureStubInfo* stubPtr = statusMap.get(CodeOrigin(location)).stubInfo) {
+        StructureStubInfo& stubInfo = *stubPtr;
+        if (stubInfo.resetByGC)
+            out.print(" (Reset By GC)");
+
+        out.printf(" jit(");
+
+        Structure* baseStructure = nullptr;
+        PolymorphicAccess* stub = nullptr;
+
+        switch (stubInfo.cacheType) {
+        case CacheType::GetByIdSelf:
+            out.printf("self");
+            baseStructure = stubInfo.u.byIdSelf.baseObjectStructure.get();
+            break;
+        case CacheType::Stub:
+            out.printf("stub");
+            stub = stubInfo.u.stub;
+            break;
+        case CacheType::Unset:
+            out.printf("unset");
+            break;
+        case CacheType::ArrayLength:
+            out.printf("ArrayLength");
+            break;
+        case CacheType::StringLength:
+            out.printf("StringLength");
+            break;
+        default:
+            RELEASE_ASSERT_NOT_REACHED();
+            break;
+        }
+
+        if (baseStructure) {
+            out.printf(", ");
+            dumpStructure(out, "struct", baseStructure, ident);
+        }
+
+        if (stub)
+            out.print(", ", *stub);
+
+        out.printf(")");
+    }
+#else
+    UNUSED_PARAM(statusMap);
+#endif
+}
+
+template<class Block>
+void BytecodeDumper<Block>::printPutByIdCacheStatus(PrintStream& out, int location, const ICStatusMap& statusMap)
+{
+    const auto* instruction = instructionsBegin() + location;
+
+    const Identifier& ident = identifier(instruction[2].u.operand);
+
+    UNUSED_PARAM(ident); // tell the compiler to shut up in certain platform configurations.
+
+    out.print(", ", getPutByIdFlags(instruction[8]));
+
+    if (StructureID structureID = getStructureID(instruction[4])) {
+        Structure* structure = vm()->heap.structureIDTable().get(structureID);
+        out.print(" llint(");
+        if (StructureID newStructureID = getStructureID(instruction[6])) {
+            Structure* newStructure = vm()->heap.structureIDTable().get(newStructureID);
+            dumpStructure(out, "prev", structure, ident);
+            out.print(", ");
+            dumpStructure(out, "next", newStructure, ident);
+            if (StructureChain* chain = getStructureChain(instruction[7])) {
+                out.print(", ");
+                dumpChain(out, chain, ident);
+            }
+        } else
+            dumpStructure(out, "struct", structure, ident);
+        out.print(")");
+    }
+
+#if ENABLE(JIT)
+    if (StructureStubInfo* stubPtr = statusMap.get(CodeOrigin(location)).stubInfo) {
+        StructureStubInfo& stubInfo = *stubPtr;
+        if (stubInfo.resetByGC)
+            out.print(" (Reset By GC)");
+
+        out.printf(" jit(");
+
+        switch (stubInfo.cacheType) {
+        case CacheType::PutByIdReplace:
+            out.print("replace, ");
+            dumpStructure(out, "struct", stubInfo.u.byIdSelf.baseObjectStructure.get(), ident);
+            break;
+        case CacheType::Stub: {
+            out.print("stub, ", *stubInfo.u.stub);
+            break;
+        }
+        case CacheType::Unset:
+            out.printf("unset");
+            break;
+        default:
+            RELEASE_ASSERT_NOT_REACHED();
+            break;
+        }
+        out.printf(")");
+    }
+#else
+    UNUSED_PARAM(statusMap);
+#endif
+}
+
+template<class Block>
+void BytecodeDumper<Block>::printInByIdCacheStatus(PrintStream& out, int location, const ICStatusMap& statusMap)
+{
+    const auto* instruction = instructionsBegin() + location;
+
+    const Identifier& ident = identifier(instruction[3].u.operand);
+
+    UNUSED_PARAM(ident); // tell the compiler to shut up in certain platform configurations.
+
+#if ENABLE(JIT)
+    if (StructureStubInfo* stubPtr = statusMap.get(CodeOrigin(location)).stubInfo) {
+        StructureStubInfo& stubInfo = *stubPtr;
+        if (stubInfo.resetByGC)
+            out.print(" (Reset By GC)");
+
+        out.printf(" jit(");
+
+        Structure* baseStructure = nullptr;
+        PolymorphicAccess* stub = nullptr;
+
+        switch (stubInfo.cacheType) {
+        case CacheType::InByIdSelf:
+            out.printf("self");
+            baseStructure = stubInfo.u.byIdSelf.baseObjectStructure.get();
+            break;
+        case CacheType::Stub:
+            out.printf("stub");
+            stub = stubInfo.u.stub;
+            break;
+        case CacheType::Unset:
+            out.printf("unset");
+            break;
+        default:
+            RELEASE_ASSERT_NOT_REACHED();
+            break;
+        }
+
+        if (baseStructure) {
+            out.printf(", ");
+            dumpStructure(out, "struct", baseStructure, ident);
+        }
+
+        if (stub)
+            out.print(", ", *stub);
+
+        out.printf(")");
+    }
+#else
+    UNUSED_PARAM(out);
+    UNUSED_PARAM(statusMap);
+#endif
+}
+
+#if ENABLE(JIT)
+template<typename Block>
+void BytecodeDumper<Block>::dumpCallLinkStatus(PrintStream&, unsigned, const ICStatusMap&)
+{
+}
+
+template<>
+void BytecodeDumper<CodeBlock>::dumpCallLinkStatus(PrintStream& out, unsigned location, const ICStatusMap& statusMap)
+{
+    if (block()->jitType() != JITCode::FTLJIT)
+        out.print(" status(", CallLinkStatus::computeFor(block(), location, statusMap), ")");
+}
+#endif
+
+template<class Block>
+void BytecodeDumper<Block>::printCallOp(PrintStream& out, int location, const typename Block::Instruction*& it, const char* op, CacheDumpMode cacheDumpMode, bool& hasPrintedProfiling, const ICStatusMap& statusMap)
+{
+    int dst = (++it)->u.operand;
+    int func = (++it)->u.operand;
+    int argCount = (++it)->u.operand;
+    int registerOffset = (++it)->u.operand;
+    printLocationAndOp(out, location, it, op);
+    out.print(registerName(dst), ", ", registerName(func), ", ", argCount, ", ", registerOffset);
+    out.print(" (this at ", virtualRegisterForArgument(0, -registerOffset), ")");
+    if (cacheDumpMode == DumpCaches) {
+        LLIntCallLinkInfo* callLinkInfo = getCallLinkInfo(it[1]);
+        if (callLinkInfo->lastSeenCallee) {
+            JSObject* object = callLinkInfo->lastSeenCallee.get();
+            if (auto* function = jsDynamicCast<JSFunction*>(*vm(), object))
+                out.printf(" llint(%p, exec %p)", function, function->executable());
+            else
+                out.printf(" llint(%p)", object);
+        }
+#if ENABLE(JIT)
+        if (CallLinkInfo* info = statusMap.get(CodeOrigin(location)).callLinkInfo) {
+            if (!info->isDirect() && info->haveLastSeenCallee()) {
+                JSObject* object = info->lastSeenCallee();
+                if (auto* function = jsDynamicCast<JSFunction*>(*vm(), object))
+                    out.printf(" jit(%p, exec %p)", function, function->executable());
+                else
+                    out.printf(" jit(%p)", object);
+            }
+        }
+
+        dumpCallLinkStatus(out, location, statusMap);
+#else
+        UNUSED_PARAM(statusMap);
+#endif
+    }
+    ++it;
+    ++it;
+    dumpArrayProfiling(out, it, hasPrintedProfiling);
+    dumpValueProfiling(out, it, hasPrintedProfiling);
+}
+
+template<class Block>
+void BytecodeDumper<Block>::printPutByIdOp(PrintStream& out, int location, const typename Block::Instruction*& it, const char* op)
+{
+    int r0 = (++it)->u.operand;
+    int id0 = (++it)->u.operand;
+    int r1 = (++it)->u.operand;
+    printLocationAndOp(out, location, it, op);
+    out.printf("%s, %s, %s", registerName(r0).data(), idName(id0, identifier(id0)).data(), registerName(r1).data());
+    it += 5;
+}
+
+template<class Block>
+void BytecodeDumper<Block>::printLocationOpAndRegisterOperand(PrintStream& out, int location, const typename Block::Instruction*& it, const char* op, int operand)
+{
+    printLocationAndOp(out, location, it, op);
+    out.printf("%s", registerName(operand).data());
+}
+
+template<class Block>
+void BytecodeDumper<Block>::dumpBytecode(PrintStream& out, const typename Block::Instruction* begin, const typename Block::Instruction*& it, const ICStatusMap& statusMap)
+{
+    int location = it - begin;
+    bool hasPrintedProfiling = false;
+    OpcodeID opcode = Interpreter::getOpcodeID(*it);
+    switch (opcode) {
+    case op_enter: {
+        printLocationAndOp(out, location, it, "enter");
+        break;
+    }
+    case op_get_scope: {
+        int r0 = (++it)->u.operand;
+        printLocationOpAndRegisterOperand(out, location, it, "get_scope", r0);
+        break;
+    }
+    case op_create_direct_arguments: {
+        int r0 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "create_direct_arguments");
+        out.printf("%s", registerName(r0).data());
+        break;
+    }
+    case op_create_scoped_arguments: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "create_scoped_arguments");
+        out.printf("%s, %s", registerName(r0).data(), registerName(r1).data());
+        break;
+    }
+    case op_create_cloned_arguments: {
+        int r0 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "create_cloned_arguments");
+        out.printf("%s", registerName(r0).data());
+        break;
+    }
+    case op_argument_count: {
+        int r0 = (++it)->u.operand;
+        printLocationOpAndRegisterOperand(out, location, it, "argument_count", r0);
+        break;
+    }
+    case op_get_argument: {
+        int r0 = (++it)->u.operand;
+        int index = (++it)->u.operand;
+        printLocationOpAndRegisterOperand(out, location, it, "argument", r0);
+        out.printf(", %d", index);
+        dumpValueProfiling(out, it, hasPrintedProfiling);
+        break;
+    }
+    case op_create_rest: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        unsigned argumentOffset = (++it)->u.unsignedValue;
+        printLocationAndOp(out, location, it, "create_rest");
+        out.printf("%s, %s, ", registerName(r0).data(), registerName(r1).data());
+        out.printf("ArgumentsOffset: %u", argumentOffset);
+        break;
+    }
+    case op_get_rest_length: {
+        int r0 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "get_rest_length");
+        out.printf("%s, ", registerName(r0).data());
+        unsigned argumentOffset = (++it)->u.unsignedValue;
+        out.printf("ArgumentsOffset: %u", argumentOffset);
+        break;
+    }
+    case op_create_this: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        unsigned inferredInlineCapacity = (++it)->u.operand;
+        unsigned cachedFunction = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "create_this");
+        out.printf("%s, %s, %u, %u", registerName(r0).data(), registerName(r1).data(), inferredInlineCapacity, cachedFunction);
+        break;
+    }
+    case op_to_this: {
+        int r0 = (++it)->u.operand;
+        printLocationOpAndRegisterOperand(out, location, it, "to_this", r0);
+        Structure* structure = getStructure(*(++it));
+        if (structure)
+            out.print(", cache(struct = ", RawPointer(structure), ")");
+        out.print(", ", getToThisStatus(*(++it)));
+        dumpValueProfiling(out, it, hasPrintedProfiling);
+        break;
+    }
+    case op_check_tdz: {
+        int r0 = (++it)->u.operand;
+        printLocationOpAndRegisterOperand(out, location, it, "op_check_tdz", r0);
+        break;
+    }
+    case op_new_object: {
+        int r0 = (++it)->u.operand;
+        unsigned inferredInlineCapacity = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "new_object");
+        out.printf("%s, %u", registerName(r0).data(), inferredInlineCapacity);
+        ++it; // Skip object allocation profile.
+        break;
+    }
+    case op_new_array: {
+        int dst = (++it)->u.operand;
+        int argv = (++it)->u.operand;
+        int argc = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "new_array");
+        out.printf("%s, %s, %d", registerName(dst).data(), registerName(argv).data(), argc);
+        ++it; // Skip array allocation profile.
+        break;
+    }
+    case op_new_array_with_spread: {
+        int dst = (++it)->u.operand;
+        int argv = (++it)->u.operand;
+        int argc = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "new_array_with_spread");
+        out.printf("%s, %s, %d, ", registerName(dst).data(), registerName(argv).data(), argc);
+        unsigned bitVectorIndex = (++it)->u.unsignedValue;
+        const BitVector& bitVector = block()->bitVector(bitVectorIndex);
+        out.print("BitVector:", bitVectorIndex, ":");
+        for (unsigned i = 0; i < static_cast<unsigned>(argc); i++) {
+            if (bitVector.get(i))
+                out.print("1");
+            else
+                out.print("0");
+        }
+        break;
+    }
+    case op_spread: {
+        int dst = (++it)->u.operand;
+        int arg = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "spread");
+        out.printf("%s, %s", registerName(dst).data(), registerName(arg).data());
+        break;
+    }
+    case op_new_array_with_size: {
+        int dst = (++it)->u.operand;
+        int length = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "new_array_with_size");
+        out.printf("%s, %s", registerName(dst).data(), registerName(length).data());
+        ++it; // Skip array allocation profile.
+        break;
+    }
+    case op_new_array_buffer: {
+        int dst = (++it)->u.operand;
+        int array = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "new_array_buffer");
+        out.printf("%s, %s", registerName(dst).data(), registerName(array).data());
+        ++it; // Skip array allocation profile.
+        break;
+    }
+    case op_new_regexp: {
+        int r0 = (++it)->u.operand;
+        int re0 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "new_regexp");
+        out.printf("%s, %s", registerName(r0).data(), registerName(re0).data());
+        break;
+    }
+    case op_mov: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "mov");
+        out.printf("%s, %s", registerName(r0).data(), registerName(r1).data());
+        break;
+    }
+    case op_profile_type: {
+        int r0 = (++it)->u.operand;
+        ++it;
+        ++it;
+        ++it;
+        ++it;
+        printLocationAndOp(out, location, it, "op_profile_type");
+        out.printf("%s", registerName(r0).data());
+        break;
+    }
+    case op_profile_control_flow: {
+        BasicBlockLocation* basicBlockLocation = getBasicBlockLocation(*(++it));
+        printLocationAndOp(out, location, it, "profile_control_flow");
+        if (basicBlockLocation)
+            out.printf("[%d, %d]", basicBlockLocation->startOffset(), basicBlockLocation->endOffset());
+        break;
+    }
+    case op_not: {
+        printUnaryOp(out, location, it, "not");
+        break;
+    }
+    case op_eq: {
+        printBinaryOp(out, location, it, "eq");
+        break;
+    }
+    case op_eq_null: {
+        printUnaryOp(out, location, it, "eq_null");
+        break;
+    }
+    case op_neq: {
+        printBinaryOp(out, location, it, "neq");
+        break;
+    }
+    case op_neq_null: {
+        printUnaryOp(out, location, it, "neq_null");
+        break;
+    }
+    case op_stricteq: {
+        printBinaryOp(out, location, it, "stricteq");
+        break;
+    }
+    case op_nstricteq: {
+        printBinaryOp(out, location, it, "nstricteq");
+        break;
+    }
+    case op_less: {
+        printBinaryOp(out, location, it, "less");
+        break;
+    }
+    case op_lesseq: {
+        printBinaryOp(out, location, it, "lesseq");
+        break;
+    }
+    case op_greater: {
+        printBinaryOp(out, location, it, "greater");
+        break;
+    }
+    case op_greatereq: {
+        printBinaryOp(out, location, it, "greatereq");
+        break;
+    }
+    case op_below: {
+        printBinaryOp(out, location, it, "below");
+        break;
+    }
+    case op_beloweq: {
+        printBinaryOp(out, location, it, "beloweq");
+        break;
+    }
+    case op_inc: {
+        int r0 = (++it)->u.operand;
+        printLocationOpAndRegisterOperand(out, location, it, "inc", r0);
+        break;
+    }
+    case op_dec: {
+        int r0 = (++it)->u.operand;
+        printLocationOpAndRegisterOperand(out, location, it, "dec", r0);
+        break;
+    }
+    case op_to_number: {
+        printUnaryOp(out, location, it, "to_number");
+        dumpValueProfiling(out, it, hasPrintedProfiling);
+        break;
+    }
+    case op_to_string: {
+        printUnaryOp(out, location, it, "to_string");
+        break;
+    }
+    case op_to_object: {
+        printUnaryOp(out, location, it, "to_object");
+        int id0 = (++it)->u.operand;
+        out.printf(" %s", idName(id0, identifier(id0)).data());
+        dumpValueProfiling(out, it, hasPrintedProfiling);
+        break;
+    }
+    case op_negate: {
+        printUnaryOp(out, location, it, "negate");
+        ++it; // op_negate has an extra operand for the ArithProfile.
+        break;
+    }
+    case op_add: {
+        printBinaryOp(out, location, it, "add");
+        ++it;
+        break;
+    }
+    case op_mul: {
+        printBinaryOp(out, location, it, "mul");
+        ++it;
+        break;
+    }
+    case op_div: {
+        printBinaryOp(out, location, it, "div");
+        ++it;
+        break;
+    }
+    case op_mod: {
+        printBinaryOp(out, location, it, "mod");
+        break;
+    }
+    case op_pow: {
+        printBinaryOp(out, location, it, "pow");
+        break;
+    }
+    case op_sub: {
+        printBinaryOp(out, location, it, "sub");
+        ++it;
+        break;
+    }
+    case op_lshift: {
+        printBinaryOp(out, location, it, "lshift");
+        break;
+    }
+    case op_rshift: {
+        printBinaryOp(out, location, it, "rshift");
+        break;
+    }
+    case op_urshift: {
+        printBinaryOp(out, location, it, "urshift");
+        break;
+    }
+    case op_bitand: {
+        printBinaryOp(out, location, it, "bitand");
+        ++it;
+        break;
+    }
+    case op_bitxor: {
+        printBinaryOp(out, location, it, "bitxor");
+        ++it;
+        break;
+    }
+    case op_bitor: {
+        printBinaryOp(out, location, it, "bitor");
+        ++it;
+        break;
+    }
+    case op_overrides_has_instance: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int r2 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "overrides_has_instance");
+        out.printf("%s, %s, %s", registerName(r0).data(), registerName(r1).data(), registerName(r2).data());
+        break;
+    }
+    case op_instanceof: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int r2 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "instanceof");
+        out.printf("%s, %s, %s", registerName(r0).data(), registerName(r1).data(), registerName(r2).data());
+        break;
+    }
+    case op_instanceof_custom: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int r2 = (++it)->u.operand;
+        int r3 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "instanceof_custom");
+        out.printf("%s, %s, %s, %s", registerName(r0).data(), registerName(r1).data(), registerName(r2).data(), registerName(r3).data());
+        break;
+    }
+    case op_unsigned: {
+        printUnaryOp(out, location, it, "unsigned");
+        break;
+    }
+    case op_typeof: {
+        printUnaryOp(out, location, it, "typeof");
+        break;
+    }
+    case op_is_empty: {
+        printUnaryOp(out, location, it, "is_empty");
+        break;
+    }
+    case op_is_undefined: {
+        printUnaryOp(out, location, it, "is_undefined");
+        break;
+    }
+    case op_is_boolean: {
+        printUnaryOp(out, location, it, "is_boolean");
+        break;
+    }
+    case op_is_number: {
+        printUnaryOp(out, location, it, "is_number");
+        break;
+    }
+    case op_is_cell_with_type: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int type = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "is_cell_with_type");
+        out.printf("%s, %s, %d", registerName(r0).data(), registerName(r1).data(), type);
+        break;
+    }
+    case op_is_object: {
+        printUnaryOp(out, location, it, "is_object");
+        break;
+    }
+    case op_is_object_or_null: {
+        printUnaryOp(out, location, it, "is_object_or_null");
+        break;
+    }
+    case op_is_function: {
+        printUnaryOp(out, location, it, "is_function");
+        break;
+    }
+    case op_in_by_id: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int id0 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "in_by_id");
+        out.printf("%s, %s, %s", registerName(r0).data(), registerName(r1).data(), idName(id0, identifier(id0)).data());
+        printInByIdCacheStatus(out, location, statusMap);
+        break;
+    }
+    case op_in_by_val: {
+        printBinaryOp(out, location, it, "in_by_val");
+        dumpArrayProfiling(out, it, hasPrintedProfiling);
+        break;
+    }
+    case op_try_get_by_id: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int id0 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "try_get_by_id");
+        out.printf("%s, %s, %s", registerName(r0).data(), registerName(r1).data(), idName(id0, identifier(id0)).data());
+        dumpValueProfiling(out, it, hasPrintedProfiling);
+        break;
+    }
+    case op_get_by_id_direct: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int id0 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "get_by_id_direct");
+        out.printf("%s, %s, %s", registerName(r0).data(), registerName(r1).data(), idName(id0, identifier(id0)).data());
+        it += 2; // Increment up to the value profiler.
+        printGetByIdCacheStatus(out, location, statusMap);
+        dumpValueProfiling(out, it, hasPrintedProfiling);
+        break;
+    }
+    case op_get_by_id:
+    case op_get_by_id_proto_load:
+    case op_get_by_id_unset:
+    case op_get_array_length: {
+        printGetByIdOp(out, location, it);
+        printGetByIdCacheStatus(out, location, statusMap);
+        dumpValueProfiling(out, it, hasPrintedProfiling);
+        break;
+    }
+    case op_get_by_id_with_this: {
+        printLocationAndOp(out, location, it, "get_by_id_with_this");
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int r2 = (++it)->u.operand;
+        int id0 = (++it)->u.operand;
+        out.printf("%s, %s, %s, %s", registerName(r0).data(), registerName(r1).data(), registerName(r2).data(), idName(id0, identifier(id0)).data());
+        dumpValueProfiling(out, it, hasPrintedProfiling);
+        break;
+    }
+    case op_get_by_val_with_this: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int r2 = (++it)->u.operand;
+        int r3 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "get_by_val_with_this");
+        out.printf("%s, %s, %s, %s", registerName(r0).data(), registerName(r1).data(), registerName(r2).data(), registerName(r3).data());
+        dumpValueProfiling(out, it, hasPrintedProfiling);
+        break;
+    }
+    case op_put_by_id: {
+        printPutByIdOp(out, location, it, "put_by_id");
+        printPutByIdCacheStatus(out, location, statusMap);
+        break;
+    }
+    case op_put_by_id_with_this: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int id0 = (++it)->u.operand;
+        int r2 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "put_by_id_with_this");
+        out.printf("%s, %s, %s, %s", registerName(r0).data(), registerName(r1).data(), idName(id0, identifier(id0)).data(), registerName(r2).data());
+        break;
+    }
+    case op_put_by_val_with_this: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int r2 = (++it)->u.operand;
+        int r3 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "put_by_val_with_this");
+        out.printf("%s, %s, %s, %s", registerName(r0).data(), registerName(r1).data(), registerName(r2).data(), registerName(r3).data());
+        break;
+    }
+    case op_put_getter_by_id: {
+        int r0 = (++it)->u.operand;
+        int id0 = (++it)->u.operand;
+        int n0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "put_getter_by_id");
+        out.printf("%s, %s, %d, %s", registerName(r0).data(), idName(id0, identifier(id0)).data(), n0, registerName(r1).data());
+        break;
+    }
+    case op_put_setter_by_id: {
+        int r0 = (++it)->u.operand;
+        int id0 = (++it)->u.operand;
+        int n0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "put_setter_by_id");
+        out.printf("%s, %s, %d, %s", registerName(r0).data(), idName(id0, identifier(id0)).data(), n0, registerName(r1).data());
+        break;
+    }
+    case op_put_getter_setter_by_id: {
+        int r0 = (++it)->u.operand;
+        int id0 = (++it)->u.operand;
+        int n0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int r2 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "put_getter_setter_by_id");
+        out.printf("%s, %s, %d, %s, %s", registerName(r0).data(), idName(id0, identifier(id0)).data(), n0, registerName(r1).data(), registerName(r2).data());
+        break;
+    }
+    case op_put_getter_by_val: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int n0 = (++it)->u.operand;
+        int r2 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "put_getter_by_val");
+        out.printf("%s, %s, %d, %s", registerName(r0).data(), registerName(r1).data(), n0, registerName(r2).data());
+        break;
+    }
+    case op_put_setter_by_val: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int n0 = (++it)->u.operand;
+        int r2 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "put_setter_by_val");
+        out.printf("%s, %s, %d, %s", registerName(r0).data(), registerName(r1).data(), n0, registerName(r2).data());
+        break;
+    }
+    case op_define_data_property: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int r2 = (++it)->u.operand;
+        int r3 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "define_data_property");
+        out.printf("%s, %s, %s, %s", registerName(r0).data(), registerName(r1).data(), registerName(r2).data(), registerName(r3).data());
+        break;
+    }
+    case op_define_accessor_property: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int r2 = (++it)->u.operand;
+        int r3 = (++it)->u.operand;
+        int r4 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "define_accessor_property");
+        out.printf("%s, %s, %s, %s, %s", registerName(r0).data(), registerName(r1).data(), registerName(r2).data(), registerName(r3).data(), registerName(r4).data());
+        break;
+    }
+    case op_del_by_id: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int id0 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "del_by_id");
+        out.printf("%s, %s, %s", registerName(r0).data(), registerName(r1).data(), idName(id0, identifier(id0)).data());
+        break;
+    }
+    case op_get_by_val: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int r2 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "get_by_val");
+        out.printf("%s, %s, %s", registerName(r0).data(), registerName(r1).data(), registerName(r2).data());
+        dumpArrayProfiling(out, it, hasPrintedProfiling);
+        dumpValueProfiling(out, it, hasPrintedProfiling);
+        break;
+    }
+    case op_put_by_val: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int r2 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "put_by_val");
+        out.printf("%s, %s, %s", registerName(r0).data(), registerName(r1).data(), registerName(r2).data());
+        dumpArrayProfiling(out, it, hasPrintedProfiling);
+        break;
+    }
+    case op_put_by_val_direct: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int r2 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "put_by_val_direct");
+        out.printf("%s, %s, %s", registerName(r0).data(), registerName(r1).data(), registerName(r2).data());
+        dumpArrayProfiling(out, it, hasPrintedProfiling);
+        break;
+    }
+    case op_del_by_val: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int r2 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "del_by_val");
+        out.printf("%s, %s, %s", registerName(r0).data(), registerName(r1).data(), registerName(r2).data());
+        break;
+    }
+    case op_jmp: {
+        int offset = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "jmp");
+        out.printf("%d(->%d)", offset, location + offset);
+        break;
+    }
+    case op_jtrue: {
+        printConditionalJump(out, begin, it, location, "jtrue");
+        break;
+    }
+    case op_jfalse: {
+        printConditionalJump(out, begin, it, location, "jfalse");
+        break;
+    }
+    case op_jeq_null: {
+        printConditionalJump(out, begin, it, location, "jeq_null");
+        break;
+    }
+    case op_jneq_null: {
+        printConditionalJump(out, begin, it, location, "jneq_null");
+        break;
+    }
+    case op_jneq_ptr: {
+        int r0 = (++it)->u.operand;
+        Special::Pointer pointer = getSpecialPointer(*(++it));
+        int offset = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "jneq_ptr");
+        out.printf("%s, %d (%p), %d(->%d)", registerName(r0).data(), pointer, actualPointerFor(pointer), offset, location + offset);
+        ++it;
+        break;
+    }
+    case op_jless: {
+        printCompareJump(out, begin, it, location, "jless");
+        break;
+    }
+    case op_jlesseq: {
+        printCompareJump(out, begin, it, location, "jlesseq");
+        break;
+    }
+    case op_jgreater: {
+        printCompareJump(out, begin, it, location, "jgreater");
+        break;
+    }
+    case op_jgreatereq: {
+        printCompareJump(out, begin, it, location, "jgreatereq");
+        break;
+    }
+    case op_jnless: {
+        printCompareJump(out, begin, it, location, "jnless");
+        break;
+    }
+    case op_jnlesseq: {
+        printCompareJump(out, begin, it, location, "jnlesseq");
+        break;
+    }
+    case op_jngreater: {
+        printCompareJump(out, begin, it, location, "jngreater");
+        break;
+    }
+    case op_jngreatereq: {
+        printCompareJump(out, begin, it, location, "jngreatereq");
+        break;
+    }
+    case op_jeq: {
+        printCompareJump(out, begin, it, location, "jeq");
+        break;
+    }
+    case op_jneq: {
+        printCompareJump(out, begin, it, location, "jneq");
+        break;
+    }
+    case op_jstricteq: {
+        printCompareJump(out, begin, it, location, "jstricteq");
+        break;
+    }
+    case op_jnstricteq: {
+        printCompareJump(out, begin, it, location, "jnstricteq");
+        break;
+    }
+    case op_jbelow: {
+        printCompareJump(out, begin, it, location, "jbelow");
+        break;
+    }
+    case op_jbeloweq: {
+        printCompareJump(out, begin, it, location, "jbeloweq");
+        break;
+    }
+    case op_loop_hint: {
+        printLocationAndOp(out, location, it, "loop_hint");
+        break;
+    }
+    case op_check_traps: {
+        printLocationAndOp(out, location, it, "check_traps");
+        break;
+    }
+    case op_nop: {
+        printLocationAndOp(out, location, it, "nop");
+        break;
+    }
+    case op_super_sampler_begin: {
+        printLocationAndOp(out, location, it, "super_sampler_begin");
+        break;
+    }
+    case op_super_sampler_end: {
+        printLocationAndOp(out, location, it, "super_sampler_end");
+        break;
+    }
+    case op_log_shadow_chicken_prologue: {
+        int r0 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "log_shadow_chicken_prologue");
+        out.printf("%s", registerName(r0).data());
+        break;
+    }
+    case op_log_shadow_chicken_tail: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "log_shadow_chicken_tail");
+        out.printf("%s, %s", registerName(r0).data(), registerName(r1).data());
+        break;
+    }
+    case op_switch_imm: {
+        int tableIndex = (++it)->u.operand;
+        int defaultTarget = (++it)->u.operand;
+        int scrutineeRegister = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "switch_imm");
+        out.printf("%d, default:%d(->%d)", tableIndex, defaultTarget, location + defaultTarget);
+        const auto& table = block()->switchJumpTable(tableIndex);
+        for (unsigned i = 0; i < table.branchOffsets.size(); ++i)
+            out.printf(", %d:%d(->%d)", i, table.branchOffsets[i], location + table.branchOffsets[i]);
+        out.print(", ", registerName(scrutineeRegister).data());
+        break;
+    }
+    case op_switch_char: {
+        int tableIndex = (++it)->u.operand;
+        int defaultTarget = (++it)->u.operand;
+        int scrutineeRegister = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "switch_char");
+        out.printf("%d, default:%d(->%d)", tableIndex, defaultTarget, location + defaultTarget);
+        const auto& table = block()->switchJumpTable(tableIndex);
+        for (unsigned i = 0; i < table.branchOffsets.size(); ++i)
+            out.printf(", %c:%d(->%d)", i, table.branchOffsets[i], location + table.branchOffsets[i]);
+        out.print(", ", registerName(scrutineeRegister).data());
+        break;
+    }
+    case op_switch_string: {
+        int tableIndex = (++it)->u.operand;
+        int defaultTarget = (++it)->u.operand;
+        int scrutineeRegister = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "switch_string");
+        out.printf("%d, default:%d(->%d)", tableIndex, defaultTarget, location + defaultTarget);
+        const auto& table = block()->stringSwitchJumpTable(tableIndex);
+        for (const auto& offset : table.offsetTable) {
+            out.print(", ", Identifier::fromUid(vm(), static_cast<UniquedStringImpl*>(offset.key.get())));
+            out.printf(":%d(%d)", offset.value.branchOffset, location + offset.value.branchOffset);
+        }
+        out.print(", ", registerName(scrutineeRegister).data());
+        break;
+    }
+    case op_new_func: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int f0 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "new_func");
+        out.printf("%s, %s, f%d", registerName(r0).data(), registerName(r1).data(), f0);
+        break;
+    }
+    case op_new_generator_func: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int f0 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "new_generator_func");
+        out.printf("%s, %s, f%d", registerName(r0).data(), registerName(r1).data(), f0);
+        break;
+    }
+    case op_new_async_func: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int f0 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "new_async_func");
+        out.printf("%s, %s, f%d", registerName(r0).data(), registerName(r1).data(), f0);
+        break;
+    }
+    case op_new_async_generator_func: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int f0 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "new_async_generator_func");
+        out.printf("%s, %s, f%d", registerName(r0).data(), registerName(r1).data(), f0);
+        break;
+    }
+    case op_new_func_exp: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int f0 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "new_func_exp");
+        out.printf("%s, %s, f%d", registerName(r0).data(), registerName(r1).data(), f0);
+        break;
+    }
+    case op_new_generator_func_exp: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int f0 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "new_generator_func_exp");
+        out.printf("%s, %s, f%d", registerName(r0).data(), registerName(r1).data(), f0);
+        break;
+    }
+    case op_new_async_func_exp: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int f0 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "new_async_func_exp");
+        out.printf("%s, %s, f%d", registerName(r0).data(), registerName(r1).data(), f0);
+        break;
+    }
+    case op_new_async_generator_func_exp: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int f0 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "op_new_async_generator_func_exp");
+        out.printf("%s, %s, f%d", registerName(r0).data(), registerName(r1).data(), f0);
+        break;
+    }
+    case op_set_function_name: {
+        int funcReg = (++it)->u.operand;
+        int nameReg = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "set_function_name");
+        out.printf("%s, %s", registerName(funcReg).data(), registerName(nameReg).data());
+        break;
+    }
+    case op_call: {
+        printCallOp(out, location, it, "call", DumpCaches, hasPrintedProfiling, statusMap);
+        break;
+    }
+    case op_tail_call: {
+        printCallOp(out, location, it, "tail_call", DumpCaches, hasPrintedProfiling, statusMap);
+        break;
+    }
+    case op_call_eval: {
+        printCallOp(out, location, it, "call_eval", DontDumpCaches, hasPrintedProfiling, statusMap);
+        break;
+    }
+
+    case op_construct_varargs:
+    case op_call_varargs:
+    case op_tail_call_varargs:
+    case op_tail_call_forward_arguments: {
+        int result = (++it)->u.operand;
+        int callee = (++it)->u.operand;
+        int thisValue = (++it)->u.operand;
+        int arguments = (++it)->u.operand;
+        int firstFreeRegister = (++it)->u.operand;
+        int varArgOffset = (++it)->u.operand;
+        ++it;
+        const char* opName;
+        if (opcode == op_call_varargs)
+            opName = "call_varargs";
+        else if (opcode == op_construct_varargs)
+            opName = "construct_varargs";
+        else if (opcode == op_tail_call_varargs)
+            opName = "tail_call_varargs";
+        else if (opcode == op_tail_call_forward_arguments)
+            opName = "tail_call_forward_arguments";
+        else
+            RELEASE_ASSERT_NOT_REACHED();
+
+        printLocationAndOp(out, location, it, opName);
+        out.printf("%s, %s, %s, %s, %d, %d", registerName(result).data(), registerName(callee).data(), registerName(thisValue).data(), registerName(arguments).data(), firstFreeRegister, varArgOffset);
+        dumpValueProfiling(out, it, hasPrintedProfiling);
+        break;
+    }
+
+    case op_ret: {
+        int r0 = (++it)->u.operand;
+        printLocationOpAndRegisterOperand(out, location, it, "ret", r0);
+        break;
+    }
+    case op_construct: {
+        printCallOp(out, location, it, "construct", DumpCaches, hasPrintedProfiling, statusMap);
+        break;
+    }
+    case op_strcat: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int count = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "strcat");
+        out.printf("%s, %s, %d", registerName(r0).data(), registerName(r1).data(), count);
+        break;
+    }
+    case op_to_primitive: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "to_primitive");
+        out.printf("%s, %s", registerName(r0).data(), registerName(r1).data());
+        break;
+    }
+    case op_get_enumerable_length: {
+        int dst = it[1].u.operand;
+        int base = it[2].u.operand;
+        printLocationAndOp(out, location, it, "op_get_enumerable_length");
+        out.printf("%s, %s", registerName(dst).data(), registerName(base).data());
+        it += OPCODE_LENGTH(op_get_enumerable_length) - 1;
+        break;
+    }
+    case op_has_indexed_property: {
+        int dst = (++it)->u.operand;
+        int base = (++it)->u.operand;
+        int propertyName = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "op_has_indexed_property");
+        out.printf("%s, %s, %s", registerName(dst).data(), registerName(base).data(), registerName(propertyName).data());
+        dumpArrayProfiling(out, it, hasPrintedProfiling);
+        break;
+    }
+    case op_has_structure_property: {
+        int dst = it[1].u.operand;
+        int base = it[2].u.operand;
+        int propertyName = it[3].u.operand;
+        int enumerator = it[4].u.operand;
+        printLocationAndOp(out, location, it, "op_has_structure_property");
+        out.printf("%s, %s, %s, %s", registerName(dst).data(), registerName(base).data(), registerName(propertyName).data(), registerName(enumerator).data());
+        it += OPCODE_LENGTH(op_has_structure_property) - 1;
+        break;
+    }
+    case op_has_generic_property: {
+        int dst = it[1].u.operand;
+        int base = it[2].u.operand;
+        int propertyName = it[3].u.operand;
+        printLocationAndOp(out, location, it, "op_has_generic_property");
+        out.printf("%s, %s, %s", registerName(dst).data(), registerName(base).data(), registerName(propertyName).data());
+        it += OPCODE_LENGTH(op_has_generic_property) - 1;
+        break;
+    }
+    case op_get_direct_pname: {
+        int dst = (++it)->u.operand;
+        int base = (++it)->u.operand;
+        int propertyName = (++it)->u.operand;
+        int index = (++it)->u.operand;
+        int enumerator = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "op_get_direct_pname");
+        out.printf("%s, %s, %s, %s, %s", registerName(dst).data(), registerName(base).data(), registerName(propertyName).data(), registerName(index).data(), registerName(enumerator).data());
+        dumpValueProfiling(out, it, hasPrintedProfiling);
+        break;
+
+    }
+    case op_get_property_enumerator: {
+        int dst = it[1].u.operand;
+        int base = it[2].u.operand;
+        printLocationAndOp(out, location, it, "op_get_property_enumerator");
+        out.printf("%s, %s", registerName(dst).data(), registerName(base).data());
+        it += OPCODE_LENGTH(op_get_property_enumerator) - 1;
+        break;
+    }
+    case op_enumerator_structure_pname: {
+        int dst = it[1].u.operand;
+        int enumerator = it[2].u.operand;
+        int index = it[3].u.operand;
+        printLocationAndOp(out, location, it, "op_enumerator_structure_pname");
+        out.printf("%s, %s, %s", registerName(dst).data(), registerName(enumerator).data(), registerName(index).data());
+        it += OPCODE_LENGTH(op_enumerator_structure_pname) - 1;
+        break;
+    }
+    case op_enumerator_generic_pname: {
+        int dst = it[1].u.operand;
+        int enumerator = it[2].u.operand;
+        int index = it[3].u.operand;
+        printLocationAndOp(out, location, it, "op_enumerator_generic_pname");
+        out.printf("%s, %s, %s", registerName(dst).data(), registerName(enumerator).data(), registerName(index).data());
+        it += OPCODE_LENGTH(op_enumerator_generic_pname) - 1;
+        break;
+    }
+    case op_to_index_string: {
+        int dst = it[1].u.operand;
+        int index = it[2].u.operand;
+        printLocationAndOp(out, location, it, "op_to_index_string");
+        out.printf("%s, %s", registerName(dst).data(), registerName(index).data());
+        it += OPCODE_LENGTH(op_to_index_string) - 1;
+        break;
+    }
+    case op_push_with_scope: {
+        int dst = (++it)->u.operand;
+        int newScope = (++it)->u.operand;
+        int currentScope = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "push_with_scope");
+        out.printf("%s, %s, %s", registerName(dst).data(), registerName(newScope).data(), registerName(currentScope).data());
+        break;
+    }
+    case op_get_parent_scope: {
+        int dst = (++it)->u.operand;
+        int parentScope = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "get_parent_scope");
+        out.printf("%s, %s", registerName(dst).data(), registerName(parentScope).data());
+        break;
+    }
+    case op_create_lexical_environment: {
+        int dst = (++it)->u.operand;
+        int scope = (++it)->u.operand;
+        int symbolTable = (++it)->u.operand;
+        int initialValue = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "create_lexical_environment");
+        out.printf("%s, %s, %s, %s",
+            registerName(dst).data(), registerName(scope).data(), registerName(symbolTable).data(), registerName(initialValue).data());
+        break;
+    }
+    case op_catch: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        void* pointer = getPointer(*(++it));
+        printLocationAndOp(out, location, it, "catch");
+        out.printf("%s, %s, %p", registerName(r0).data(), registerName(r1).data(), pointer);
+        break;
+    }
+    case op_throw: {
+        int r0 = (++it)->u.operand;
+        printLocationOpAndRegisterOperand(out, location, it, "throw", r0);
+        break;
+    }
+    case op_throw_static_error: {
+        int r0 = (++it)->u.operand;
+        ErrorType k1 = static_cast<ErrorType>((++it)->u.unsignedValue);
+        printLocationAndOp(out, location, it, "throw_static_error");
+        out.printf("%s, ", registerName(r0).data());
+        out.print(k1);
+        break;
+    }
+    case op_debug: {
+        int debugHookType = (++it)->u.operand;
+        int hasBreakpointFlag = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "debug");
+        out.printf("%s, %d", debugHookName(debugHookType), hasBreakpointFlag);
+        break;
+    }
+    case op_identity_with_profile: {
+        int r0 = (++it)->u.operand;
+        ++it; // Profile top half
+        ++it; // Profile bottom half
+        printLocationAndOp(out, location, it, "identity_with_profile");
+        out.printf("%s", registerName(r0).data());
+        break;
+    }
+    case op_unreachable: {
+        printLocationAndOp(out, location, it, "unreachable");
+        break;
+    }
+    case op_end: {
+        int r0 = (++it)->u.operand;
+        printLocationOpAndRegisterOperand(out, location, it, "end", r0);
+        break;
+    }
+    case op_resolve_scope_for_hoisting_func_decl_in_eval: {
+        int r0 = (++it)->u.operand;
+        int scope = (++it)->u.operand;
+        int id0 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "resolve_scope_for_hoisting_func_decl_in_eval");
+        out.printf("%s, %s, %s", registerName(r0).data(), registerName(scope).data(), idName(id0, identifier(id0)).data());
+        break;
+    }
+    case op_resolve_scope: {
+        int r0 = (++it)->u.operand;
+        int scope = (++it)->u.operand;
+        int id0 = (++it)->u.operand;
+        ResolveType resolveType = static_cast<ResolveType>((++it)->u.operand);
+        int depth = (++it)->u.operand;
+        void* pointer = getPointer(*(++it));
+        printLocationAndOp(out, location, it, "resolve_scope");
+        out.printf("%s, %s, %s, <%s>, %d, %p", registerName(r0).data(), registerName(scope).data(), idName(id0, identifier(id0)).data(), resolveTypeName(resolveType), depth, pointer);
+        break;
+    }
+    case op_get_from_scope: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int id0 = (++it)->u.operand;
+        GetPutInfo getPutInfo = GetPutInfo((++it)->u.operand);
+        ++it; // Structure
+        int operand = (++it)->u.operand; // Operand
+        printLocationAndOp(out, location, it, "get_from_scope");
+        out.print(registerName(r0), ", ", registerName(r1));
+        if (static_cast<unsigned>(id0) == UINT_MAX)
+            out.print(", anonymous");
+        else
+            out.print(", ", idName(id0, identifier(id0)));
+        out.print(", ", getPutInfo.operand(), "<", resolveModeName(getPutInfo.resolveMode()), "|", resolveTypeName(getPutInfo.resolveType()), "|", initializationModeName(getPutInfo.initializationMode()), ">, ", operand);
+        dumpValueProfiling(out, it, hasPrintedProfiling);
+        break;
+    }
+    case op_put_to_scope: {
+        int r0 = (++it)->u.operand;
+        int id0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        GetPutInfo getPutInfo = GetPutInfo((++it)->u.operand);
+        ++it; // Structure
+        int operand = (++it)->u.operand; // Operand
+        printLocationAndOp(out, location, it, "put_to_scope");
+        out.print(registerName(r0));
+        if (static_cast<unsigned>(id0) == UINT_MAX)
+            out.print(", anonymous");
+        else
+            out.print(", ", idName(id0, identifier(id0)));
+        out.print(", ", registerName(r1), ", ", getPutInfo.operand(), "<", resolveModeName(getPutInfo.resolveMode()), "|", resolveTypeName(getPutInfo.resolveType()), "|", initializationModeName(getPutInfo.initializationMode()), ">, <structure>, ", operand);
+        break;
+    }
+    case op_get_from_arguments: {
+        int r0 = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        int offset = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "get_from_arguments");
+        out.printf("%s, %s, %d", registerName(r0).data(), registerName(r1).data(), offset);
+        dumpValueProfiling(out, it, hasPrintedProfiling);
+        break;
+    }
+    case op_put_to_arguments: {
+        int r0 = (++it)->u.operand;
+        int offset = (++it)->u.operand;
+        int r1 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "put_to_arguments");
+        out.printf("%s, %d, %s", registerName(r0).data(), offset, registerName(r1).data());
+        break;
+    }
+    case op_yield: {
+        int r0 = (++it)->u.operand;
+        unsigned yieldPoint = (++it)->u.unsignedValue;
+        int r1 = (++it)->u.operand;
+        printLocationAndOp(out, location, it, "yield");
+        out.printf("%s, %u, %s", registerName(r0).data(), yieldPoint, registerName(r1).data());
+        break;
+    }
+    default:
+        RELEASE_ASSERT_NOT_REACHED();
+    }
+    dumpProfilesForBytecodeOffset(out, location, hasPrintedProfiling);
+    out.print("\n");
+}
+
+template<class Block>
+void BytecodeDumper<Block>::dumpBytecode(Block* block, PrintStream& out, const typename Block::Instruction* begin, const typename Block::Instruction*& it, const ICStatusMap& statusMap)
+{
+    BytecodeDumper dumper(block, begin);
+    dumper.dumpBytecode(out, begin, it, statusMap);
+}
+
+template<class Block>
+void BytecodeDumper<Block>::dumpIdentifiers(PrintStream& out)
 {
     if (size_t count = block()->numberOfIdentifiers()) {
-        m_out.printf("\nIdentifiers:\n");
+        out.printf("\nIdentifiers:\n");
         size_t i = 0;
         do {
-            m_out.printf("  id%u = %s\n", static_cast<unsigned>(i), identifier(i).string().utf8().data());
+            out.printf("  id%u = %s\n", static_cast<unsigned>(i), identifier(i).string().utf8().data());
             ++i;
         } while (i != count);
     }
 }
 
 template<class Block>
-void BytecodeDumper<Block>::dumpConstants()
+void BytecodeDumper<Block>::dumpConstants(PrintStream& out)
 {
     if (!block()->constantRegisters().isEmpty()) {
-        m_out.printf("\nConstants:\n");
+        out.printf("\nConstants:\n");
         size_t i = 0;
         for (const auto& constant : block()->constantRegisters()) {
             const char* sourceCodeRepresentationDescription = nullptr;
@@ -128,102 +1804,94 @@ void BytecodeDumper<Block>::dumpConstants()
                 sourceCodeRepresentationDescription = "";
                 break;
             }
-            m_out.printf("   k%u = %s%s\n", static_cast<unsigned>(i), toCString(constant.get()).data(), sourceCodeRepresentationDescription);
+            out.printf("   k%u = %s%s\n", static_cast<unsigned>(i), toCString(constant.get()).data(), sourceCodeRepresentationDescription);
             ++i;
         }
     }
 }
 
 template<class Block>
-void BytecodeDumper<Block>::dumpExceptionHandlers()
+void BytecodeDumper<Block>::dumpExceptionHandlers(PrintStream& out)
 {
     if (unsigned count = block()->numberOfExceptionHandlers()) {
-        m_out.printf("\nException Handlers:\n");
+        out.printf("\nException Handlers:\n");
         unsigned i = 0;
         do {
             const auto& handler = block()->exceptionHandler(i);
-            m_out.printf("\t %d: { start: [%4d] end: [%4d] target: [%4d] } %s\n", i + 1, handler.start, handler.end, handler.target, handler.typeName());
+            out.printf("\t %d: { start: [%4d] end: [%4d] target: [%4d] } %s\n", i + 1, handler.start, handler.end, handler.target, handler.typeName());
             ++i;
         } while (i < count);
     }
 }
 
 template<class Block>
-void BytecodeDumper<Block>::dumpSwitchJumpTables()
+void BytecodeDumper<Block>::dumpSwitchJumpTables(PrintStream& out)
 {
     if (unsigned count = block()->numberOfSwitchJumpTables()) {
-        m_out.printf("Switch Jump Tables:\n");
+        out.printf("Switch Jump Tables:\n");
         unsigned i = 0;
         do {
-            m_out.printf("  %1d = {\n", i);
+            out.printf("  %1d = {\n", i);
             const auto& switchJumpTable = block()->switchJumpTable(i);
             int entry = 0;
             auto end = switchJumpTable.branchOffsets.end();
             for (auto iter = switchJumpTable.branchOffsets.begin(); iter != end; ++iter, ++entry) {
                 if (!*iter)
                     continue;
-                m_out.printf("\t\t%4d => %04d\n", entry + switchJumpTable.min, *iter);
+                out.printf("\t\t%4d => %04d\n", entry + switchJumpTable.min, *iter);
             }
-            m_out.printf("      }\n");
+            out.printf("      }\n");
             ++i;
         } while (i < count);
     }
 }
 
 template<class Block>
-void BytecodeDumper<Block>::dumpStringSwitchJumpTables()
+void BytecodeDumper<Block>::dumpStringSwitchJumpTables(PrintStream& out)
 {
     if (unsigned count = block()->numberOfStringSwitchJumpTables()) {
-        m_out.printf("\nString Switch Jump Tables:\n");
+        out.printf("\nString Switch Jump Tables:\n");
         unsigned i = 0;
         do {
-            m_out.printf("  %1d = {\n", i);
+            out.printf("  %1d = {\n", i);
             const auto& stringSwitchJumpTable = block()->stringSwitchJumpTable(i);
             auto end = stringSwitchJumpTable.offsetTable.end();
             for (auto iter = stringSwitchJumpTable.offsetTable.begin(); iter != end; ++iter)
-                m_out.printf("\t\t\"%s\" => %04d\n", iter->key->utf8().data(), iter->value.branchOffset);
-            m_out.printf("      }\n");
+                out.printf("\t\t\"%s\" => %04d\n", iter->key->utf8().data(), iter->value.branchOffset);
+            out.printf("      }\n");
             ++i;
         } while (i < count);
     }
 }
 
 template<class Block>
-void BytecodeDumper<Block>::dumpBlock(Block* block, const InstructionStream& instructions, PrintStream& out, const ICStatusMap& statusMap)
+void BytecodeDumper<Block>::dumpBlock(Block* block, const typename Block::UnpackedInstructions& instructions, PrintStream& out, const ICStatusMap& statusMap)
 {
     size_t instructionCount = 0;
-    size_t wideInstructionCount = 0;
-    size_t instructionWithMetadataCount = 0;
-
-    for (const auto& instruction : instructions) {
-        if (instruction->isWide())
-            ++wideInstructionCount;
-        if (instruction->opcodeID() < NUMBER_OF_BYTECODE_WITH_METADATA)
-            ++instructionWithMetadataCount;
+
+    for (size_t i = 0; i < instructions.size(); i += opcodeLengths[Interpreter::getOpcodeID(instructions[i])])
         ++instructionCount;
-    }
 
     out.print(*block);
     out.printf(
-        ": %lu instructions (%lu wide instructions, %lu instructions with metadata); %lu bytes (%lu metadata bytes); %d parameter(s); %d callee register(s); %d variable(s)",
-        static_cast<unsigned long>(instructionCount),
-        static_cast<unsigned long>(wideInstructionCount),
-        static_cast<unsigned long>(instructionWithMetadataCount),
-        static_cast<unsigned long>(instructions.sizeInBytes() + block->metadataSizeInBytes()),
-        static_cast<unsigned long>(block->metadataSizeInBytes()),
+        ": %lu m_instructions; %lu bytes; %d parameter(s); %d callee register(s); %d variable(s)",
+        static_cast<unsigned long>(instructions.size()),
+        static_cast<unsigned long>(instructions.size() * sizeof(Instruction)),
         block->numParameters(), block->numCalleeLocals(), block->numVars());
     out.print("; scope at ", block->scopeRegister());
     out.printf("\n");
 
-    BytecodeDumper<Block> dumper(block, out);
-    for (const auto& it : instructions)
-        dumper.dumpBytecode(it, statusMap);
+    const auto* begin = instructions.begin();
+    const auto* end = instructions.end();
+    BytecodeDumper<Block> dumper(block, begin);
+    for (const auto* it = begin; it != end; ++it)
+        dumper.dumpBytecode(out, begin, it, statusMap);
 
-    dumper.dumpIdentifiers();
-    dumper.dumpConstants();
-    dumper.dumpExceptionHandlers();
-    dumper.dumpSwitchJumpTables();
-    dumper.dumpStringSwitchJumpTables();
+    dumper.dumpIdentifiers(out);
+    dumper.dumpConstants(out);
+    dumper.dumpExceptionHandlers(out);
+    dumper.dumpSwitchJumpTables(out);
+    dumper.dumpStringSwitchJumpTables(out);
 
     out.printf("\n");
 }
index a1503ba..d811a8d 100644 (file)
@@ -28,7 +28,6 @@
 
 #include "CallLinkInfo.h"
 #include "ICStatusMap.h"
-#include "InstructionStream.h"
 #include "StructureStubInfo.h"
 
 namespace JSC {
@@ -38,31 +37,20 @@ struct Instruction;
 template<class Block>
 class BytecodeDumper {
 public:
-    static void dumpBytecode(Block*, PrintStream& out, const InstructionStream::Ref& it, const ICStatusMap& = ICStatusMap());
-    static void dumpBlock(Block*, const InstructionStream&, PrintStream& out, const ICStatusMap& = ICStatusMap());
+    typedef typename Block::Instruction Instruction;
 
-    void printLocationAndOp(InstructionStream::Offset location, const char* op);
-
-    template<typename T>
-    void dumpOperand(T operand, bool isFirst = false)
-    {
-        if (!isFirst)
-            m_out.print(", ");
-        dumpValue(operand);
-    }
-
-    void dumpValue(VirtualRegister reg) { m_out.printf("%s", registerName(reg.offset()).data()); }
-    template<typename T>
-    void dumpValue(T v) { m_out.print(v); }
+    static void dumpBytecode(Block*, PrintStream& out, const Instruction* begin, const Instruction*& it, const ICStatusMap& statusMap = ICStatusMap());
+    static void dumpBlock(Block*, const typename Block::UnpackedInstructions&, PrintStream& out, const ICStatusMap& statusMap = ICStatusMap());
 
 private:
-    BytecodeDumper(Block* block, PrintStream& out)
+    BytecodeDumper(Block* block, const Instruction* instructionsBegin)
         : m_block(block)
-        , m_out(out)
+        , m_instructionsBegin(instructionsBegin)
     {
     }
 
     Block* block() const { return m_block; }
+    const Instruction* instructionsBegin() const { return m_instructionsBegin; }
 
     ALWAYS_INLINE VM* vm() const;
 
@@ -71,16 +59,38 @@ private:
 
     const Identifier& identifier(int index) const;
 
-    void dumpIdentifiers();
-    void dumpConstants();
-    void dumpExceptionHandlers();
-    void dumpSwitchJumpTables();
-    void dumpStringSwitchJumpTables();
-
-    void dumpBytecode(const InstructionStream::Ref& it, const ICStatusMap&);
+    void dumpIdentifiers(PrintStream& out);
+    void dumpConstants(PrintStream& out);
+    void dumpExceptionHandlers(PrintStream& out);
+    void dumpSwitchJumpTables(PrintStream& out);
+    void dumpStringSwitchJumpTables(PrintStream& out);
+
+    void printUnaryOp(PrintStream& out, int location, const Instruction*& it, const char* op);
+    void printBinaryOp(PrintStream& out, int location, const Instruction*& it, const char* op);
+    void printConditionalJump(PrintStream& out, const Instruction*, const Instruction*& it, int location, const char* op);
+    void printCompareJump(PrintStream& out, const Instruction*, const Instruction*& it, int location, const char* op);
+    void printGetByIdOp(PrintStream& out, int location, const Instruction*& it);
+    void printGetByIdCacheStatus(PrintStream& out, int location, const ICStatusMap&);
+    void printPutByIdCacheStatus(PrintStream& out, int location, const ICStatusMap&);
+    void printInByIdCacheStatus(PrintStream& out, int location, const ICStatusMap&);
+    enum CacheDumpMode { DumpCaches, DontDumpCaches };
+    void printCallOp(PrintStream& out, int location, const Instruction*& it, const char* op, CacheDumpMode, bool& hasPrintedProfiling, const ICStatusMap&);
+    void printPutByIdOp(PrintStream& out, int location, const Instruction*& it, const char* op);
+    void printLocationOpAndRegisterOperand(PrintStream& out, int location, const Instruction*& it, const char* op, int operand);
+    void dumpBytecode(PrintStream& out, const Instruction* begin, const Instruction*& it, const ICStatusMap&);
+
+    void dumpValueProfiling(PrintStream&, const Instruction*&, bool& hasPrintedProfiling);
+    void dumpArrayProfiling(PrintStream&, const Instruction*&, bool& hasPrintedProfiling);
+    void dumpProfilesForBytecodeOffset(PrintStream&, unsigned location, bool& hasPrintedProfiling);
+
+    void* actualPointerFor(Special::Pointer) const;
+
+#if ENABLE(JIT)
+    void dumpCallLinkStatus(PrintStream&, unsigned location, const ICStatusMap&);
+#endif
 
     Block* m_block;
-    PrintStream& m_out;
+    const Instruction* m_instructionsBegin;
 };
 
 }
index cbd40e3..e91b5b5 100644 (file)
@@ -30,7 +30,6 @@
 #include "BytecodeDumper.h"
 #include "BytecodeLivenessAnalysisInlines.h"
 #include "BytecodeRewriter.h"
-#include "BytecodeStructs.h"
 #include "BytecodeUseDef.h"
 #include "IdentifierInlines.h"
 #include "InterpreterInlines.h"
 #include "JSGeneratorFunction.h"
 #include "StrongInlines.h"
 #include "UnlinkedCodeBlock.h"
-#include "UnlinkedMetadataTableInlines.h"
 #include <wtf/Optional.h>
 
 namespace JSC {
 
 struct YieldData {
-    InstructionStream::Offset point { 0 };
-    VirtualRegister argument { 0 };
+    size_t point { 0 };
+    int argument { 0 };
     FastBitVector liveness;
 };
 
@@ -54,31 +52,29 @@ class BytecodeGeneratorification {
 public:
     typedef Vector<YieldData> Yields;
 
-    BytecodeGeneratorification(BytecodeGenerator& bytecodeGenerator, UnlinkedCodeBlock* codeBlock, InstructionStreamWriter& instructions, SymbolTable* generatorFrameSymbolTable, int generatorFrameSymbolTableIndex)
-        : m_bytecodeGenerator(bytecodeGenerator)
-        , m_codeBlock(codeBlock)
+    BytecodeGeneratorification(UnlinkedCodeBlock* codeBlock, UnlinkedCodeBlock::UnpackedInstructions& instructions, SymbolTable* generatorFrameSymbolTable, int generatorFrameSymbolTableIndex)
+        : m_codeBlock(codeBlock)
         , m_instructions(instructions)
         , m_graph(m_codeBlock, m_instructions)
         , m_generatorFrameSymbolTable(*codeBlock->vm(), generatorFrameSymbolTable)
         , m_generatorFrameSymbolTableIndex(generatorFrameSymbolTableIndex)
     {
         for (BytecodeBasicBlock* block : m_graph) {
-            for (const auto offset : block->offsets()) {
-                const auto instruction = m_instructions.at(offset);
-                switch (instruction->opcodeID()) {
+            for (unsigned bytecodeOffset : block->offsets()) {
+                const UnlinkedInstruction* pc = &instructions[bytecodeOffset];
+                switch (pc->u.opcode) {
                 case op_enter: {
-                    m_enterPoint = instruction.offset();
+                    m_enterPoint = bytecodeOffset;
                     break;
                 }
 
                 case op_yield: {
-                    auto bytecode = instruction->as<OpYield>();
-                    unsigned liveCalleeLocalsIndex = bytecode.yieldPoint;
+                    unsigned liveCalleeLocalsIndex = pc[2].u.unsignedValue;
                     if (liveCalleeLocalsIndex >= m_yields.size())
                         m_yields.resize(liveCalleeLocalsIndex + 1);
                     YieldData& data = m_yields[liveCalleeLocalsIndex];
-                    data.point = instruction.offset();
-                    data.argument = bytecode.argument;
+                    data.point = bytecodeOffset;
+                    data.argument = pc[3].u.operand;
                     break;
                 }
 
@@ -109,14 +105,9 @@ public:
         return m_yields;
     }
 
-    InstructionStream::Ref enterPoint() const
+    unsigned enterPoint() const
     {
-        return m_instructions.at(m_enterPoint);
-    }
-
-    const InstructionStream& instructions() const
-    {
-        return m_instructions;
+        return m_enterPoint;
     }
 
 private:
@@ -147,10 +138,9 @@ private:
         return storage;
     }
 
-    BytecodeGenerator& m_bytecodeGenerator;
-    InstructionStream::Offset m_enterPoint;
+    unsigned m_enterPoint { 0 };
     UnlinkedCodeBlock* m_codeBlock;
-    InstructionStreamWriter& m_instructions;
+    UnlinkedCodeBlock::UnpackedInstructions& m_instructions;
     BytecodeGraph m_graph;
     Vector<std::optional<Storage>> m_storages;
     Yields m_yields;
@@ -165,7 +155,7 @@ public:
     {
     }
 
-    void run(UnlinkedCodeBlock* codeBlock, InstructionStreamWriter& instructions)
+    void run(UnlinkedCodeBlock* codeBlock, UnlinkedCodeBlock::UnpackedInstructions& instructions)
     {
         // Perform modified liveness analysis to determine which locals are live at the merge points.
         // This produces the conservative results for the question, "which variables should be saved and resumed?".
@@ -173,7 +163,7 @@ public:
         runLivenessFixpoint(codeBlock, instructions, m_generatorification.graph());
 
         for (YieldData& data : m_generatorification.yields())
-            data.liveness = getLivenessInfoAtBytecodeOffset(codeBlock, instructions, m_generatorification.graph(), m_generatorification.instructions().at(data.point).next().offset());
+            data.liveness = getLivenessInfoAtBytecodeOffset(codeBlock, instructions, m_generatorification.graph(), data.point + opcodeLength(op_yield));
     }
 
 private:
@@ -189,80 +179,85 @@ void BytecodeGeneratorification::run()
         pass.run(m_codeBlock, m_instructions);
     }
 
-    BytecodeRewriter rewriter(m_bytecodeGenerator, m_graph, m_codeBlock, m_instructions);
+    BytecodeRewriter rewriter(m_graph, m_codeBlock, m_instructions);
 
     // Setup the global switch for the generator.
     {
-        auto nextToEnterPoint = enterPoint().next();
+        unsigned nextToEnterPoint = enterPoint() + opcodeLength(op_enter);
         unsigned switchTableIndex = m_codeBlock->numberOfSwitchJumpTables();
         VirtualRegister state = virtualRegisterForArgument(static_cast<int32_t>(JSGeneratorFunction::GeneratorArgument::State));
         auto& jumpTable = m_codeBlock->addSwitchJumpTable();
         jumpTable.min = 0;
         jumpTable.branchOffsets.resize(m_yields.size() + 1);
         jumpTable.branchOffsets.fill(0);
-        jumpTable.add(0, nextToEnterPoint.offset());
+        jumpTable.add(0, nextToEnterPoint);
         for (unsigned i = 0; i < m_yields.size(); ++i)
             jumpTable.add(i + 1, m_yields[i].point);
 
         rewriter.insertFragmentBefore(nextToEnterPoint, [&](BytecodeRewriter::Fragment& fragment) {
-            fragment.appendInstruction<OpSwitchImm>(switchTableIndex, nextToEnterPoint.offset(), state);
+            fragment.appendInstruction(op_switch_imm, switchTableIndex, nextToEnterPoint, state.offset());
         });
     }
 
     for (const YieldData& data : m_yields) {
         VirtualRegister scope = virtualRegisterForArgument(static_cast<int32_t>(JSGeneratorFunction::GeneratorArgument::Frame));
 
-        auto instruction = m_instructions.at(data.point);
         // Emit save sequence.
-        rewriter.insertFragmentBefore(instruction, [&](BytecodeRewriter::Fragment& fragment) {
+        rewriter.insertFragmentBefore(data.point, [&](BytecodeRewriter::Fragment& fragment) {
             data.liveness.forEachSetBit([&](size_t index) {
                 VirtualRegister operand = virtualRegisterForLocal(index);
                 Storage storage = storageForGeneratorLocal(index);
 
-                fragment.appendInstruction<OpPutToScope>(
-                    scope, // scope
+                fragment.appendInstruction(
+                    op_put_to_scope,
+                    scope.offset(), // scope
                     storage.identifierIndex, // identifier
-                    operand, // value
-                    GetPutInfo(DoNotThrowIfNotFound, LocalClosureVar, InitializationMode::NotInitialization), // info
+                    operand.offset(), // value
+                    GetPutInfo(DoNotThrowIfNotFound, LocalClosureVar, InitializationMode::NotInitialization).operand(), // info
                     m_generatorFrameSymbolTableIndex, // symbol table constant index
                     storage.scopeOffset.offset() // scope offset
                 );
             });
 
             // Insert op_ret just after save sequence.
-            fragment.appendInstruction<OpRet>(data.argument);
+            fragment.appendInstruction(op_ret, data.argument);
         });
 
         // Emit resume sequence.
-        rewriter.insertFragmentAfter(instruction, [&](BytecodeRewriter::Fragment& fragment) {
+        rewriter.insertFragmentAfter(data.point, [&](BytecodeRewriter::Fragment& fragment) {
             data.liveness.forEachSetBit([&](size_t index) {
                 VirtualRegister operand = virtualRegisterForLocal(index);
                 Storage storage = storageForGeneratorLocal(index);
 
-                fragment.appendInstruction<OpGetFromScope>(
-                    operand, // dst
-                    scope, // scope
+                UnlinkedValueProfile profile = m_codeBlock->vm()->canUseJIT()
+                    ? m_codeBlock->addValueProfile()
+                    : static_cast<UnlinkedValueProfile>(-1);
+                fragment.appendInstruction(
+                    op_get_from_scope,
+                    operand.offset(), // dst
+                    scope.offset(), // scope
                     storage.identifierIndex, // identifier
-                    GetPutInfo(DoNotThrowIfNotFound, LocalClosureVar, InitializationMode::NotInitialization), // info
+                    GetPutInfo(DoNotThrowIfNotFound, LocalClosureVar, InitializationMode::NotInitialization).operand(), // info
                     0, // local scope depth
-                    storage.scopeOffset.offset() // scope offset
+                    storage.scopeOffset.offset(), // scope offset
+                    profile // profile
                 );
             });
         });
 
         // Clip the unnecessary bytecodes.
-        rewriter.removeBytecode(instruction);
+        rewriter.removeBytecode(data.point);
     }
 
     rewriter.execute();
 }
 
-void performGeneratorification(BytecodeGenerator& bytecodeGenerator, UnlinkedCodeBlock* codeBlock, InstructionStreamWriter& instructions, SymbolTable* generatorFrameSymbolTable, int generatorFrameSymbolTableIndex)
+void performGeneratorification(UnlinkedCodeBlock* codeBlock, UnlinkedCodeBlock::UnpackedInstructions& instructions, SymbolTable* generatorFrameSymbolTable, int generatorFrameSymbolTableIndex)
 {
     if (Options::dumpBytecodesBeforeGeneratorification())
         BytecodeDumper<UnlinkedCodeBlock>::dumpBlock(codeBlock, instructions, WTF::dataFile());
 
-    BytecodeGeneratorification pass(bytecodeGenerator, codeBlock, instructions, generatorFrameSymbolTable, generatorFrameSymbolTableIndex);
+    BytecodeGeneratorification pass(codeBlock, instructions, generatorFrameSymbolTable, generatorFrameSymbolTableIndex);
     pass.run();
 }
 
index 01f096e..c7b6137 100644 (file)
 
 #pragma once
 
+#include "UnlinkedCodeBlock.h"
+
 namespace JSC {
 
-class BytecodeGenerator;
-class InstructionStreamWriter;
-class SymbolTable;
-class UnlinkedCodeBlock;
 class SymbolTable;
 
-void performGeneratorification(BytecodeGenerator&, UnlinkedCodeBlock*, InstructionStreamWriter&, SymbolTable* generatorFrameSymbolTable, int generatorFrameSymbolTableIndex);
+void performGeneratorification(UnlinkedCodeBlock*, UnlinkedCodeBlock::UnpackedInstructions&, SymbolTable* generatorFrameSymbolTable, int generatorFrameSymbolTableIndex);
 
 } // namespace JSC
index ee2da18..c204b41 100644 (file)
@@ -44,20 +44,20 @@ public:
     typedef WTF::IndexedContainerIterator<BytecodeGraph> iterator;
 
     template <typename CodeBlockType>
-    inline BytecodeGraph(CodeBlockType*, const InstructionStream&);
+    inline BytecodeGraph(CodeBlockType*, typename CodeBlockType::UnpackedInstructions&);
 
     WTF::IteratorRange<BasicBlocksVector::reverse_iterator> basicBlocksInReverseOrder()
     {
         return WTF::makeIteratorRange(m_basicBlocks.rbegin(), m_basicBlocks.rend());
     }
 
-    static bool blockContainsBytecodeOffset(BytecodeBasicBlock* block, InstructionStream::Offset bytecodeOffset)
+    static bool blockContainsBytecodeOffset(BytecodeBasicBlock* block, unsigned bytecodeOffset)
     {
         unsigned leaderOffset = block->leaderOffset();
         return bytecodeOffset >= leaderOffset && bytecodeOffset < leaderOffset + block->totalLength();
     }
 
-    BytecodeBasicBlock* findBasicBlockForBytecodeOffset(InstructionStream::Offset bytecodeOffset)
+    BytecodeBasicBlock* findBasicBlockForBytecodeOffset(unsigned bytecodeOffset)
     {
         /*
             for (unsigned i = 0; i < m_basicBlocks.size(); i++) {
@@ -85,7 +85,7 @@ public:
         return basicBlock[1].get();
     }
 
-    BytecodeBasicBlock* findBasicBlockWithLeaderOffset(InstructionStream::Offset leaderOffset)
+    BytecodeBasicBlock* findBasicBlockWithLeaderOffset(unsigned leaderOffset)
     {
         return (*tryBinarySearch<std::unique_ptr<BytecodeBasicBlock>, unsigned>(m_basicBlocks, m_basicBlocks.size(), leaderOffset, [] (std::unique_ptr<BytecodeBasicBlock>* basicBlock) { return (*basicBlock)->leaderOffset(); })).get();
     }
@@ -105,9 +105,9 @@ private:
 
 
 template<typename CodeBlockType>
-BytecodeGraph::BytecodeGraph(CodeBlockType* codeBlock, const InstructionStream& instructions)
+BytecodeGraph::BytecodeGraph(CodeBlockType* codeBlock, typename CodeBlockType::UnpackedInstructions& instructions)
 {
-    BytecodeBasicBlock::compute(codeBlock, instructions, m_basicBlocks);
+    BytecodeBasicBlock::compute(codeBlock, instructions.begin(), instructions.size(), m_basicBlocks);
     ASSERT(m_basicBlocks.size());
 }
 
index 37f263d..feab026 100644 (file)
@@ -40,6 +40,37 @@ public:
     {
     }
     
+    // By convention, we say that non-local operands are never killed.
+    bool operandIsKilled(unsigned bytecodeIndex, int operand) const
+    {
+        ASSERT_WITH_SECURITY_IMPLICATION(bytecodeIndex < m_codeBlock->instructions().size());
+        VirtualRegister reg(operand);
+        if (reg.isLocal())
+            return m_killSets[bytecodeIndex].contains(operand);
+        return false;
+    }
+    
+    bool operandIsKilled(Instruction* instruction, int operand) const
+    {
+        return operandIsKilled(m_codeBlock->bytecodeOffset(instruction), operand);
+    }
+    
+    template<typename Functor>
+    void forEachOperandKilledAt(unsigned bytecodeIndex, const Functor& functor) const
+    {
+        ASSERT_WITH_SECURITY_IMPLICATION(bytecodeIndex < m_codeBlock->instructions().size());
+        m_killSets[bytecodeIndex].forEachLocal(
+            [&] (unsigned local) {
+                functor(virtualRegisterForLocal(local));
+            });
+    }
+    
+    template<typename Functor>
+    void forEachOperandKilledAt(Instruction* pc, const Functor& functor) const
+    {
+        forEachOperandKilledAt(m_codeBlock->bytecodeOffset(pc), functor);
+    }
+    
 private:
     friend class BytecodeLivenessAnalysis;
 
diff --git a/Source/JavaScriptCore/bytecode/BytecodeList.json b/Source/JavaScriptCore/bytecode/BytecodeList.json
new file mode 100644 (file)
index 0000000..f5bdc49
--- /dev/null
@@ -0,0 +1,236 @@
+[
+    {
+        "section" : "Bytecodes", "emitInHFile" : true, "emitInStructsFile" : true, "emitInASMFile" : true,
+        "emitOpcodeIDStringValuesInHFile" : true, "macroNameComponent" : "BYTECODE", "asmPrefix" : "llint_",
+        "bytecodes" : [
+            { "name" : "op_enter", "length" : 1 },
+            { "name" : "op_get_scope", "length" : 2 },
+            { "name" : "op_create_direct_arguments", "length" : 2 },
+            { "name" : "op_create_scoped_arguments", "length" : 3 },
+            { "name" : "op_create_cloned_arguments", "length" : 2 },
+            { "name" : "op_create_this", "offsets" :
+                       [{"dst" : "int"},
+                        {"callee" : "int"},
+                        {"inlineCapacity" : "int"},
+                        {"cachedCallee" : "WriteBarrier<JSCell>"}]},
+            { "name" : "op_get_argument", "length" : 4 },
+            { "name" : "op_argument_count", "length" : 2 },
+            { "name" : "op_to_this", "length" : 5 },
+            { "name" : "op_check_tdz", "length" : 2 },
+            { "name" : "op_new_object", "length" : 4 },
+            { "name" : "op_new_array", "length" : 5 },
+            { "name" : "op_new_array_with_size", "length" : 4 },
+            { "name" : "op_new_array_buffer", "offsets" :
+                       [{"dst" : "int"},
+                        {"immutableButterfly" : "int"},
+                        {"profile" : "ArrayAllocationProfile*"}]},
+            { "name" : "op_new_array_with_spread", "length" : 5 },
+            { "name" : "op_spread", "length" : 3 },
+            { "name" : "op_new_regexp", "length" : 3 },
+            { "name" : "op_mov", "length" : 3 },
+            { "name" : "op_not", "length" : 3 },
+            { "name" : "op_eq", "length" : 4 },
+            { "name" : "op_eq_null", "length" : 3 },
+            { "name" : "op_neq", "length" : 4 },
+            { "name" : "op_neq_null", "length" : 3 },
+            { "name" : "op_stricteq", "length" : 4 },
+            { "name" : "op_nstricteq", "length" : 4 },
+            { "name" : "op_less", "length" : 4 },
+            { "name" : "op_lesseq", "length" : 4 },
+            { "name" : "op_greater", "length" : 4 },
+            { "name" : "op_greatereq", "length" : 4 },
+            { "name" : "op_below", "length" : 4 },
+            { "name" : "op_beloweq", "length" : 4 },
+            { "name" : "op_inc", "length" : 2 },
+            { "name" : "op_dec", "length" : 2 },
+            { "name" : "op_to_number", "length" : 4 },
+            { "name" : "op_to_string", "length" : 3 },
+            { "name" : "op_to_object", "length" : 5 },
+            { "name" : "op_negate", "length" : 4 },
+            { "name" : "op_add", "length" : 5 },
+            { "name" : "op_mul", "length" : 5 },
+            { "name" : "op_div", "length" : 5 },
+            { "name" : "op_mod", "length" : 4 },
+            { "name" : "op_sub", "length" : 5 },
+            { "name" : "op_pow", "length" : 4 },
+            { "name" : "op_lshift", "length" : 4 },
+            { "name" : "op_rshift", "length" : 4 },
+            { "name" : "op_urshift", "length" : 4 },
+            { "name" : "op_unsigned", "length" : 3 },
+            { "name" : "op_bitand", "length" : 5 },
+            { "name" : "op_bitxor", "length" : 5 },
+            { "name" : "op_bitor", "length" : 5 },
+            { "name" : "op_identity_with_profile", "length" : 4 },
+            { "name" : "op_overrides_has_instance", "offsets" :
+                       [{"dst" : "int"},
+                        {"constructor" : "int"},
+                        {"hasInstanceValue" : "int"}] },
+            { "name" : "op_instanceof", "offsets" :
+                       [{"dst" : "int"},
+                        {"value" : "int"},
+                        {"prototype" : "int"}] },
+            { "name" : "op_instanceof_custom", "offsets" :
+                       [{"dst" : "int"},
+                        {"value" : "int"},
+                        {"constructor" : "int"},
+                        {"hasInstanceValue" : "int"}] },
+            { "name" : "op_typeof", "length" : 3 },
+            { "name" : "op_is_empty", "length" : 3 },
+            { "name" : "op_is_undefined", "length" : 3 },
+            { "name" : "op_is_boolean", "length" : 3 },
+            { "name" : "op_is_number", "length" : 3 },
+            { "name" : "op_is_object", "length" : 3 },
+            { "name" : "op_is_object_or_null", "length" : 3 },
+            { "name" : "op_is_function", "length" : 3 },
+            { "name" : "op_is_cell_with_type", "length" : 4 },
+            { "name" : "op_in_by_val", "length" : 5 },
+            { "name" : "op_in_by_id", "length" : 4 },
+            { "name" : "op_get_array_length", "length" : 9 },
+            { "name" : "op_get_by_id", "length" : 9  },
+            { "name" : "op_get_by_id_proto_load", "length" : 9 },
+            { "name" : "op_get_by_id_unset", "length" : 9 },
+            { "name" : "op_get_by_id_with_this", "length" : 6 },
+            { "name" : "op_get_by_val_with_this", "length" : 6 },
+            { "name" : "op_get_by_id_direct", "length" : 7  },
+            { "name" : "op_try_get_by_id", "length" : 5 },
+            { "name" : "op_put_by_id", "length" : 9 },
+            { "name" : "op_put_by_id_with_this", "length" : 5 },
+            { "name" : "op_del_by_id", "length" : 4 },
+            { "name" : "op_get_by_val", "length" : 6 },
+            { "name" : "op_put_by_val", "length" : 5 },
+            { "name" : "op_put_by_val_with_this", "length" : 5 },
+            { "name" : "op_put_by_val_direct", "length" : 5 },
+            { "name" : "op_del_by_val", "length" : 4 },
+            { "name" : "op_put_getter_by_id", "length" : 5 },
+            { "name" : "op_put_setter_by_id", "length" : 5 },
+            { "name" : "op_put_getter_setter_by_id", "length" : 6 },
+            { "name" : "op_put_getter_by_val", "length" : 5 },
+            { "name" : "op_put_setter_by_val", "length" : 5 },
+            { "name" : "op_define_data_property", "length" : 5 },
+            { "name" : "op_define_accessor_property", "length" : 6 },
+            { "name" : "op_jmp", "length" : 2 },
+            { "name" : "op_jtrue", "length" : 3 },
+            { "name" : "op_jfalse", "length" : 3 },
+            { "name" : "op_jeq_null", "length" : 3 },
+            { "name" : "op_jneq_null", "length" : 3 },
+            { "name" : "op_jneq_ptr", "length" : 5 },
+            { "name" : "op_jeq", "length" : 4 },
+            { "name" : "op_jstricteq", "length" : 4 },
+            { "name" : "op_jneq", "length" : 4 },
+            { "name" : "op_jnstricteq", "length" : 4 },
+            { "name" : "op_jless", "length" : 4 },
+            { "name" : "op_jlesseq", "length" : 4 },
+            { "name" : "op_jgreater", "length" : 4 },
+            { "name" : "op_jgreatereq", "length" : 4 },
+            { "name" : "op_jnless", "length" : 4 },
+            { "name" : "op_jnlesseq", "length" : 4 },
+            { "name" : "op_jngreater", "length" : 4 },
+            { "name" : "op_jngreatereq", "length" : 4 },
+            { "name" : "op_jbelow", "length" : 4 },
+            { "name" : "op_jbeloweq", "length" : 4 },
+            { "name" : "op_loop_hint", "length" : 1 },
+            { "name" : "op_switch_imm", "length" : 4 },
+            { "name" : "op_switch_char", "length" : 4 },
+            { "name" : "op_switch_string", "length" : 4 },
+            { "name" : "op_new_func", "length" : 4 },
+            { "name" : "op_new_func_exp", "length" : 4 },
+            { "name" : "op_new_generator_func", "length" : 4 },
+            { "name" : "op_new_generator_func_exp", "length" : 4 },
+            { "name" : "op_new_async_func", "length" : 4 },
+            { "name" : "op_new_async_func_exp", "length" : 4 },
+            { "name" : "op_new_async_generator_func", "length" : 4 },
+            { "name" : "op_new_async_generator_func_exp", "length" : 4 },
+            { "name" : "op_set_function_name", "length" : 3 },
+            { "name" : "op_call", "length" : 9 },
+            { "name" : "op_tail_call", "length" : 9 },
+            { "name" : "op_call_eval", "length" : 9 },
+            { "name" : "op_call_varargs", "length" : 9 },
+            { "name" : "op_tail_call_varargs", "length" : 9 },
+            { "name" : "op_tail_call_forward_arguments", "length" : 9 },
+            { "name" : "op_ret", "length" : 2 },
+            { "name" : "op_construct", "length" : 9 },
+            { "name" : "op_construct_varargs", "length" : 9 },
+            { "name" : "op_strcat", "length" : 4 },
+            { "name" : "op_to_primitive", "length" : 3 },
+            { "name" : "op_resolve_scope", "length" : 7 },
+            { "name" : "op_get_from_scope", "length" : 8 },
+            { "name" : "op_put_to_scope", "length" : 7 },
+            { "name" : "op_get_from_arguments", "length" : 5 },
+            { "name" : "op_put_to_arguments", "length" : 4 },
+            { "name" : "op_push_with_scope", "length" : 4 },
+            { "name" : "op_create_lexical_environment", "length" : 5 },
+            { "name" : "op_get_parent_scope", "length" : 3 },
+            { "name" : "op_catch", "length" : 4 },
+            { "name" : "op_throw", "length" : 2 },
+            { "name" : "op_throw_static_error", "length" : 3 },
+            { "name" : "op_debug", "length" : 3 },
+            { "name" : "op_end", "length" : 2 },
+            { "name" : "op_profile_type", "length" : 6 },
+            { "name" : "op_profile_control_flow", "length" : 2 },
+            { "name" : "op_get_enumerable_length", "length" : 3 },
+            { "name" : "op_has_indexed_property", "length" : 5 },
+            { "name" : "op_has_structure_property", "length" : 5 },
+            { "name" : "op_has_generic_property", "length" : 4 },
+            { "name" : "op_get_direct_pname", "length" : 7 },
+            { "name" : "op_get_property_enumerator", "length" : 3 },
+            { "name" : "op_enumerator_structure_pname", "length" : 4 },
+            { "name" : "op_enumerator_generic_pname", "length" : 4 },
+            { "name" : "op_to_index_string", "length" : 3 },
+            { "name" : "op_unreachable", "length" : 1 },
+            { "name" : "op_create_rest", "length": 4 },
+            { "name" : "op_get_rest_length", "length": 3 },
+            { "name" : "op_yield", "length" : 4 },
+            { "name" : "op_check_traps", "length" : 1 },
+            { "name" : "op_log_shadow_chicken_prologue", "length" : 2},
+            { "name" : "op_log_shadow_chicken_tail", "length" : 3},
+            { "name" : "op_resolve_scope_for_hoisting_func_decl_in_eval", "length" : 4 },
+            { "name" : "op_nop", "length" : 1 },
+            { "name" : "op_super_sampler_begin", "length" : 1 },
+            { "name" : "op_super_sampler_end", "length" : 1 }
+        ]
+    },
+    {
+        "section" : "CLoopHelpers", "emitInHFile" : true, "emitInStructsFile" : false, "emitInASMFile" : false,
+        "emitOpcodeIDStringValuesInHFile" : false, "defaultLength" : 1, "macroNameComponent" : "CLOOP_BYTECODE_HELPER",
+        "bytecodes" : [
+            { "name" : "llint_entry" },
+            { "name" : "getHostCallReturnValue" },
+            { "name" : "llint_return_to_host" },
+            { "name" : "llint_vm_entry_to_javascript" },
+            { "name" : "llint_vm_entry_to_native" },
+            { "name" : "llint_cloop_did_return_from_js_1" },
+            { "name" : "llint_cloop_did_return_from_js_2" },
+            { "name" : "llint_cloop_did_return_from_js_3" },
+            { "name" : "llint_cloop_did_return_from_js_4" },
+            { "name" : "llint_cloop_did_return_from_js_5" },
+            { "name" : "llint_cloop_did_return_from_js_6" },
+            { "name" : "llint_cloop_did_return_from_js_7" },
+            { "name" : "llint_cloop_did_return_from_js_8" },
+            { "name" : "llint_cloop_did_return_from_js_9" },
+            { "name" : "llint_cloop_did_return_from_js_10" },
+            { "name" : "llint_cloop_did_return_from_js_11" },
+            { "name" : "llint_cloop_did_return_from_js_12" }
+        ]
+    },
+    {
+        "section" : "NativeHelpers", "emitInHFile" : true, "emitInStructsFile" : false, "emitInASMFile" : true,
+        "emitOpcodeIDStringValuesInHFile" : false, "defaultLength" : 1, "macroNameComponent" : "BYTECODE_HELPER",
+        "bytecodes" : [
+            { "name" : "llint_program_prologue" },
+            { "name" : "llint_eval_prologue" },
+            { "name" : "llint_module_program_prologue" },
+            { "name" : "llint_function_for_call_prologue" },
+            { "name" : "llint_function_for_construct_prologue" },
+            { "name" : "llint_function_for_call_arity_check" },
+            { "name" : "llint_function_for_construct_arity_check" },
+            { "name" : "llint_generic_return_point" },
+            { "name" : "llint_throw_from_slow_path_trampoline" },
+            { "name" : "llint_throw_during_call_trampoline" },
+            { "name" : "llint_native_call_trampoline" },
+            { "name" : "llint_native_construct_trampoline" },
+            { "name" : "llint_internal_function_call_trampoline" },
+            { "name" : "llint_internal_function_construct_trampoline" },
+            { "name" : "handleUncaughtException" }
+        ]
+    }
+]
diff --git a/Source/JavaScriptCore/bytecode/BytecodeList.rb b/Source/JavaScriptCore/bytecode/BytecodeList.rb
deleted file mode 100644 (file)
index d518a8d..0000000
+++ /dev/null
@@ -1,1154 +0,0 @@
-# Copyright (C) 2018 Apple Inc. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in the
-#    documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
-# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
-# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-types [
-    :VirtualRegister,
-
-    :BasicBlockLocation,
-    :DebugHookType,
-    :ErrorType,
-    :GetByIdMode,
-    :GetByIdModeMetadata,
-    :GetPutInfo,
-    :IndexingType,
-    :JSCell,
-    :JSGlobalLexicalEnvironment,
-    :JSGlobalObject,
-    :JSModuleEnvironment,
-    :JSObject,
-    :JSScope,
-    :JSType,
-    :JSValue,
-    :LLIntCallLinkInfo,
-    :OperandTypes,
-    :ProfileTypeBytecodeFlag,
-    :PropertyOffset,
-    :PutByIdFlags,
-    :ResolveType,
-    :Structure,
-    :StructureID,
-    :StructureChain,
-    :SymbolTable,
-    :ToThisStatus,
-    :TypeLocation,
-    :WatchpointSet,
-
-    :ValueProfile,
-    :ValueProfileAndOperandBuffer,
-    :ArithProfile,
-    :ArrayProfile,
-    :ArrayAllocationProfile,
-    :ObjectAllocationProfile,
-]
-
-namespace :Special do
-    types [ :Pointer ]
-end
-
-templates [
-    :WriteBarrier,
-    :WriteBarrierBase,
-]
-
-
-begin_section :Bytecodes,
-    emit_in_h_file: true,
-    emit_in_structs_file: true,
-    emit_in_asm_file: true,
-    emit_opcode_id_string_values_in_h_file: true,
-    macro_name_component: :BYTECODE,
-    asm_prefix: "llint_",
-    op_prefix: "op_"
-
-op :wide
-
-op :enter
-
-op :get_scope,
-    args: {
-        dst: VirtualRegister
-    }
-
-op :create_direct_arguments,
-    args: {
-        dst: VirtualRegister,
-    }
-
-op :create_scoped_arguments,
-    args: {
-        dst: VirtualRegister,
-        scope: VirtualRegister,
-    }
-
-op :create_cloned_arguments,
-    args: {
-        dst: VirtualRegister,
-    }
-
-op :create_this,
-    args: {
-        dst: VirtualRegister,
-        callee: VirtualRegister,
-        inlineCapacity: unsigned,
-    },
-    metadata: {
-        cachedCallee: WriteBarrier[JSCell]
-    }
-
-op :get_argument,
-    args: {
-        dst: VirtualRegister,
-        index: int,
-    },
-    metadata: {
-        profile: ValueProfile,
-    }
-
-op :argument_count,
-    args: {
-        dst: VirtualRegister,
-    }
-
-op :to_this,
-    args: {
-        srcDst: VirtualRegister,
-    },
-    metadata: {
-        cachedStructure: WriteBarrierBase[Structure],
-        toThisStatus: ToThisStatus,
-        profile: ValueProfile,
-    }
-
-op :check_tdz,
-    args: {
-        target: VirtualRegister,
-    }
-
-op :new_object,
-    args: {
-        dst: VirtualRegister,
-        inlineCapacity: unsigned,
-    },
-    metadata: {
-        objectAllocationProfile: ObjectAllocationProfile,
-    }
-
-op :new_array,
-    args: {
-        dst: VirtualRegister,
-        argv: VirtualRegister,
-        argc: unsigned,
-        recommendedIndexingType: IndexingType,
-    },
-    metadata: {
-        arrayAllocationProfile: ArrayAllocationProfile,
-    }
-
-op :new_array_with_size,
-    args: {
-        dst: VirtualRegister,
-        length: VirtualRegister,
-    },
-    metadata: {
-        arrayAllocationProfile: ArrayAllocationProfile,
-    }
-
-op :new_array_buffer,
-    args: {
-        dst: VirtualRegister,
-        immutableButterfly: VirtualRegister,
-        recommendedIndexingType: IndexingType
-    },
-    metadata: {
-        arrayAllocationProfile: ArrayAllocationProfile,
-    }
-
-op :new_array_with_spread,
-    args: {
-        dst: VirtualRegister,
-        argv: VirtualRegister,
-        argc: unsigned,
-        bitVector: unsigned,
-    }
-
-op :spread,
-    args: {
-        dst: VirtualRegister,
-        argument: VirtualRegister,
-    }
-
-op :new_regexp,
-    args: {
-        dst: VirtualRegister,
-        regexp: VirtualRegister,
-    }
-
-op :mov,
-    args: {
-        dst: VirtualRegister,
-        src: VirtualRegister,
-    }
-
-op_group :BinaryOp,
-    [
-        :eq,
-        :neq,
-        :stricteq,
-        :nstricteq,
-        :less,
-        :lesseq,
-        :greater,
-        :greatereq,
-        :below,
-        :beloweq,
-        :mod,
-        :pow,
-        :lshift,
-        :rshift,
-        :urshift,
-    ],
-    args: {
-        dst: VirtualRegister,
-        lhs: VirtualRegister,
-        rhs: VirtualRegister,
-    }
-
-op_group :ProfiledBinaryOp,
-    [
-        :add,
-        :mul,
-        :div,
-        :sub,
-        :bitxor,
-    ],
-    args: {
-        dst: VirtualRegister,
-        lhs: VirtualRegister,
-        rhs: VirtualRegister,
-        operandTypes: OperandTypes,
-    },
-    metadata: {
-        arithProfile: ArithProfile
-    },
-    metadata_initializers: {
-        arithProfile: :operandTypes
-    }
-
-op_group :ValueProfiledBinaryOp,
-    [
-        :bitand,
-        :bitor,
-    ],
-    args: {
-        dst: VirtualRegister,
-        lhs: VirtualRegister,
-        rhs: VirtualRegister,
-    },
-    metadata: {
-        profile: ValueProfile
-    }
-
-op_group :UnaryOp,
-    [
-        :eq_null,
-        :neq_null,
-        :to_string,
-        :unsigned,
-        :is_empty,
-        :is_undefined,
-        :is_boolean,
-        :is_number,
-        :is_object,
-        :is_object_or_null,
-        :is_function,
-    ],
-    args: {
-        dst: VirtualRegister,
-        operand: VirtualRegister,
-    }
-
-op :inc,
-    args: {
-        srcDst: VirtualRegister,
-    }
-
-op :dec,
-    args: {
-        srcDst: VirtualRegister,
-    }
-
-op :to_object,
-    args: {
-        dst: VirtualRegister,
-        operand: VirtualRegister,
-        message: unsigned,
-    },
-    metadata: {
-        profile: ValueProfile,
-    }
-
-op :to_number,
-    args: {
-        dst: VirtualRegister,
-        operand: VirtualRegister,
-    },
-    metadata: {
-        profile: ValueProfile,
-    }
-
-op :negate,
-    args: {
-        dst: VirtualRegister,
-        operand: VirtualRegister,
-        operandTypes: OperandTypes,
-    },
-    metadata: {
-        arithProfile: ArithProfile,
-    },
-    metadata_initializers: {
-        arithProfile: :operandTypes
-    }
-
-op :not,
-    args: {
-        dst: VirtualRegister,
-        operand: VirtualRegister,
-    }
-
-
-op :identity_with_profile,
-    args: {
-        srcDst: VirtualRegister,
-        topProfile: unsigned,
-        bottomProfile: unsigned,
-    }
-
-op :overrides_has_instance,
-    args: {
-        dst: VirtualRegister,
-        constructor: VirtualRegister,
-        hasInstanceValue: VirtualRegister,
-    }
-
-op :instanceof,
-    args: {
-        dst: VirtualRegister,
-        value: VirtualRegister,
-        prototype: VirtualRegister,
-    }
-
-op :instanceof_custom,
-    args: {
-        dst: VirtualRegister,
-        value: VirtualRegister,
-        constructor: VirtualRegister,
-        hasInstanceValue: VirtualRegister,
-    }
-
-op :typeof,
-    args: {
-        dst: VirtualRegister,
-        value: VirtualRegister,
-    }
-
-op :is_cell_with_type,
-    args: {
-        dst: VirtualRegister,
-        operand: VirtualRegister,
-        type: JSType,
-    }
-
-op :in_by_val,
-    args: {
-        dst: VirtualRegister,
-        base: VirtualRegister,
-        property: VirtualRegister,
-    },
-    metadata: {
-        arrayProfile: ArrayProfile,
-    }
-
-op :in_by_id,
-    args: {
-        dst: VirtualRegister,
-        base: VirtualRegister,
-        property: unsigned,
-    }
-
-op :get_by_id,
-    args: {
-        dst: VirtualRegister,
-        base: VirtualRegister,
-        property: unsigned,
-    },
-    metadata: {
-        mode: GetByIdMode,
-        modeMetadata: GetByIdModeMetadata,
-        hitCountForLLIntCaching: unsigned,
-        profile: ValueProfile,
-    }
-
-op :get_by_id_with_this,
-    args: {
-        dst: VirtualRegister,
-        base: VirtualRegister,
-        thisValue: VirtualRegister,
-        property: unsigned,
-    },
-    metadata: {
-        profile: ValueProfile,
-    }
-
-op :get_by_val_with_this,
-    args: {
-        dst: VirtualRegister,
-        base: VirtualRegister,
-        thisValue: VirtualRegister,
-        property: VirtualRegister,
-    },
-    metadata: {
-        profile: ValueProfile,
-    }
-
-op :get_by_id_direct,
-    args: {
-        dst: VirtualRegister,
-        base: VirtualRegister,
-        property: unsigned,
-    },
-    metadata: {
-        profile: ValueProfile, # not used in llint
-        structure: StructureID,
-        offset: unsigned,
-    }
-
-op :try_get_by_id,
-    args: {
-        dst: VirtualRegister,
-        base: VirtualRegister,
-        property: unsigned,
-    },
-    metadata: {
-        profile: ValueProfile,
-    }
-
-op :put_by_id,
-    args: {
-        base: VirtualRegister,
-        property: unsigned,
-        value: VirtualRegister,
-        flags: PutByIdFlags,
-    },
-    metadata: {
-        oldStructure: StructureID,
-        offset: unsigned,
-        newStructure: StructureID,
-        structureChain: WriteBarrierBase[StructureChain],
-        flags: PutByIdFlags,
-    },
-    metadata_initializers: {
-        flags: :flags
-    }
-
-op :put_by_id_with_this,
-    args: {
-        base: VirtualRegister,
-        thisValue: VirtualRegister,
-        property: unsigned,
-        value: VirtualRegister,
-    }
-
-op :del_by_id,
-    args: {
-        dst: VirtualRegister,
-        base: VirtualRegister,
-        property: unsigned,
-    }
-
-op :get_by_val,
-    args: {
-        dst: VirtualRegister,
-        base: VirtualRegister,
-        property: VirtualRegister,
-    },
-    metadata: {
-        profile: ValueProfile,
-        arrayProfile: ArrayProfile,
-    }
-
-op :put_by_val,
-    args: {
-        base: VirtualRegister,
-        property: VirtualRegister,
-        value: VirtualRegister,
-    },
-    metadata: {
-        arrayProfile: ArrayProfile,
-    }
-
-op :put_by_val_with_this,
-    args: {
-        base: VirtualRegister,
-        thisValue: VirtualRegister,
-        property: VirtualRegister,
-        value: VirtualRegister,
-    }
-
-op :put_by_val_direct,
-    args: {
-        base: VirtualRegister,
-        property: VirtualRegister,
-        value: VirtualRegister,
-    },
-    metadata: {
-        arrayProfile: ArrayProfile,
-    }
-
-op :del_by_val,
-    args: {
-        dst: VirtualRegister,
-        base: VirtualRegister,
-        property: VirtualRegister,
-    }
-
-op :put_getter_by_id,
-    args: {
-        base: VirtualRegister,
-        property: unsigned,
-        attributes: unsigned,
-        accessor: VirtualRegister,
-    }
-
-op :put_setter_by_id,
-    args: {
-        base: VirtualRegister,
-        property: unsigned,
-        attributes: unsigned,
-        accessor: VirtualRegister,
-    }
-
-op :put_getter_setter_by_id,
-    args: {
-        base: VirtualRegister,
-        property: unsigned,
-        attributes: unsigned,
-        getter: VirtualRegister,
-        setter: VirtualRegister,
-    }
-
-op :put_getter_by_val,
-    args: {
-        base: VirtualRegister,
-        property: VirtualRegister,
-        attributes: unsigned,
-        accessor: VirtualRegister,
-    }
-
-op :put_setter_by_val,
-    args: {
-        base: VirtualRegister,
-        property: VirtualRegister,
-        attributes: unsigned,
-        accessor: VirtualRegister,
-    }
-
-op :define_data_property,
-    args: {
-        base: VirtualRegister,
-        property: VirtualRegister,
-        value: VirtualRegister,
-        attributes: VirtualRegister,
-    }
-
-op :define_accessor_property,
-    args: {
-        base: VirtualRegister,
-        property: VirtualRegister,
-        getter: VirtualRegister,
-        setter: VirtualRegister,
-        attributes: VirtualRegister,
-    }
-
-op :jmp,
-    args: {
-        target: int,
-    }
-
-op :jtrue,
-    args: {
-        condition: VirtualRegister,
-        target: int,
-    }
-
-op :jfalse,
-    args: {
-        condition: VirtualRegister,
-        target: int,
-    }
-
-op :jeq_null,
-    args: {
-        value: VirtualRegister,
-        target: int,
-    }
-
-op :jneq_null,
-    args: {
-        value: VirtualRegister,
-        target: int,
-    }
-
-op :jneq_ptr,
-    args: {
-        value: VirtualRegister,
-        specialPointer: Special::Pointer,
-        target: int,
-    },
-    metadata: {
-        hasJumped: bool,
-    }
-
-op_group :BinaryJmp,
-    [
-        :jeq,
-        :jstricteq,
-        :jneq,
-        :jnstricteq,
-        :jless,
-        :jlesseq,
-        :jgreater,
-        :jgreatereq,
-        :jnless,
-        :jnlesseq,
-        :jngreater,
-        :jngreatereq,
-        :jbelow,
-        :jbeloweq,
-    ],
-    args: {
-        lhs: VirtualRegister,
-        rhs: VirtualRegister,
-        target: int,
-    }
-
-op :loop_hint
-
-op_group :SwitchValue,
-    [
-        :switch_imm,
-        :switch_char,
-        :switch_string,
-    ],
-    args: {
-        tableIndex: unsigned,
-        defaultOffset: int,
-        scrutinee: VirtualRegister,
-    }
-
-op_group :NewFunction,
-    [
-        :new_func,
-        :new_func_exp,
-        :new_generator_func,
-        :new_generator_func_exp,
-        :new_async_func,
-        :new_async_func_exp,
-        :new_async_generator_func,
-        :new_async_generator_func_exp,
-    ],
-    args: {
-        dst: VirtualRegister,
-        scope: VirtualRegister,
-        functionDecl: unsigned,
-    }
-
-op :set_function_name,
-    args: {
-        function: VirtualRegister,
-        name: VirtualRegister,
-    }
-
-# op_call variations
-op :call,
-    args: {
-        dst: VirtualRegister,
-        callee: VirtualRegister,
-        argc: unsigned,
-        argv: unsigned,
-    },
-    metadata: {
-        callLinkInfo: LLIntCallLinkInfo,
-        arrayProfile: ArrayProfile,
-        profile: ValueProfile,
-    }
-
-op :tail_call,
-    args: {
-        dst: VirtualRegister,
-        callee: VirtualRegister,
-        argc: unsigned,
-        argv: unsigned,
-    },
-    metadata: {
-        callLinkInfo: LLIntCallLinkInfo,
-        arrayProfile: ArrayProfile,
-        profile: ValueProfile,
-    }
-
-op :call_eval,
-    args: {
-        dst: VirtualRegister,
-        callee: VirtualRegister,
-        argc: unsigned,
-        argv: unsigned,
-    },
-    metadata: {
-        callLinkInfo: LLIntCallLinkInfo,
-        arrayProfile: ArrayProfile,
-        profile: ValueProfile,
-    }
-
-op :call_varargs,
-    args: {
-        dst: VirtualRegister,
-        callee: VirtualRegister,
-        thisValue?: VirtualRegister,
-        arguments?: VirtualRegister,
-        firstFree: VirtualRegister,
-        firstVarArg: int,
-    },
-    metadata: {
-        arrayProfile: ArrayProfile,
-        profile: ValueProfile,
-    }
-
-op :tail_call_varargs,
-    args: {
-        dst: VirtualRegister,
-        callee: VirtualRegister,
-        thisValue?: VirtualRegister,
-        arguments?: VirtualRegister,
-        firstFree: VirtualRegister,
-        firstVarArg: int,
-    },
-    metadata: {
-        arrayProfile: ArrayProfile,
-        profile: ValueProfile,
-    }
-
-op :tail_call_forward_arguments,
-    args: {
-        dst: VirtualRegister,
-        callee: VirtualRegister,
-        thisValue?: VirtualRegister,
-        arguments?: VirtualRegister,
-        firstFree: VirtualRegister,
-        firstVarArg: int,
-    },
-    metadata: {
-        arrayProfile: ArrayProfile,
-        profile: ValueProfile,
-    }
-
-op :construct,
-    args: {
-        dst: VirtualRegister,
-        callee: VirtualRegister,
-        argc: unsigned,
-        argv: unsigned,
-    },
-    metadata: {
-        callLinkInfo: LLIntCallLinkInfo,
-        arrayProfile: ArrayProfile,
-        profile: ValueProfile,
-    }
-
-op :construct_varargs,
-    args: {
-        dst: VirtualRegister,
-        callee: VirtualRegister,
-        thisValue?: VirtualRegister,
-        arguments?: VirtualRegister,
-        firstFree: VirtualRegister,
-        firstVarArg: int,
-    },
-    metadata: {
-        arrayProfile: ArrayProfile,
-        profile: ValueProfile,