115613d0b07bac19e341905ff374c930420b3b9c8mstarzinger@chromium.org// Copyright 2012 the V8 project authors. All rights reserved. 23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// Use of this source code is governed by a BSD-style license that can be 33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// found in the LICENSE file. 4a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 5196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/v8.h" 64b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org 7196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/ast.h" 8196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/regexp-macro-assembler.h" 9196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/regexp-macro-assembler-tracer.h" 10a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 1171affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace v8 { 1271affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace internal { 13a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 14a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgRegExpMacroAssemblerTracer::RegExpMacroAssemblerTracer( 15a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org RegExpMacroAssembler* assembler) : 167028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org RegExpMacroAssembler(assembler->zone()), 17a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_(assembler) { 18a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org unsigned int type = assembler->Implementation(); 19e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(type < 6); 20fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org const char* impl_names[] = {"IA32", "ARM", "ARM64", 21864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org "MIPS", "X64", "X87", "Bytecode"}; 22a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org PrintF("RegExpMacroAssembler%s();\n", impl_names[type]); 23a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 24a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 25a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 26a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgRegExpMacroAssemblerTracer::~RegExpMacroAssemblerTracer() { 27a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 28a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 29a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 30f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org// This is used for printing out debugging information. It makes an integer 31f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org// that is closely related to the address of an object. 32f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.orgstatic int LabelToInt(Label* label) { 33f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org return static_cast<int>(reinterpret_cast<intptr_t>(label)); 34f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org} 35f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org 36f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org 37a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::Bind(Label* label) { 38f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org PrintF("label[%08x]: (Bind)\n", LabelToInt(label)); 39a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->Bind(label); 40a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 41a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 42a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 43a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::AdvanceCurrentPosition(int by) { 44a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org PrintF(" AdvanceCurrentPosition(by=%d);\n", by); 45a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->AdvanceCurrentPosition(by); 46a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 47a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 48a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 498bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.orgvoid RegExpMacroAssemblerTracer::CheckGreedyLoop(Label* label) { 50f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org PrintF(" CheckGreedyLoop(label[%08x]);\n\n", LabelToInt(label)); 518bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org assembler_->CheckGreedyLoop(label); 528bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org} 538bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 548bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 55a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::PopCurrentPosition() { 56a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org PrintF(" PopCurrentPosition();\n"); 57a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->PopCurrentPosition(); 58a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 59a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 60a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 61a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::PushCurrentPosition() { 62a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org PrintF(" PushCurrentPosition();\n"); 63a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->PushCurrentPosition(); 64a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 65a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 66a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 67a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::Backtrack() { 68a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org PrintF(" Backtrack();\n"); 69a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->Backtrack(); 70a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 71a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 72a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 73a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::GoTo(Label* label) { 74f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org PrintF(" GoTo(label[%08x]);\n\n", LabelToInt(label)); 75a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->GoTo(label); 76a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 77a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 78a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 79a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::PushBacktrack(Label* label) { 80f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org PrintF(" PushBacktrack(label[%08x]);\n", LabelToInt(label)); 81a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->PushBacktrack(label); 82a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 83a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 84a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 8515613d0b07bac19e341905ff374c930420b3b9c8mstarzinger@chromium.orgbool RegExpMacroAssemblerTracer::Succeed() { 8615613d0b07bac19e341905ff374c930420b3b9c8mstarzinger@chromium.org bool restart = assembler_->Succeed(); 8715613d0b07bac19e341905ff374c930420b3b9c8mstarzinger@chromium.org PrintF(" Succeed();%s\n", restart ? " [restart for global match]" : ""); 8815613d0b07bac19e341905ff374c930420b3b9c8mstarzinger@chromium.org return restart; 89a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 90a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 91a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 92a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::Fail() { 9315613d0b07bac19e341905ff374c930420b3b9c8mstarzinger@chromium.org PrintF(" Fail();"); 94a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->Fail(); 95a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 96a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 97a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 98a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::PopRegister(int register_index) { 99a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org PrintF(" PopRegister(register=%d);\n", register_index); 100a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->PopRegister(register_index); 101a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 102a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 103a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 1043291210ab99f306b74430ebbc4b7d939629e699fager@chromium.orgvoid RegExpMacroAssemblerTracer::PushRegister( 1053291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org int register_index, 1063291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org StackCheckFlag check_stack_limit) { 1073291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org PrintF(" PushRegister(register=%d, %s);\n", 1083291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org register_index, 1093291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org check_stack_limit ? "check stack limit" : ""); 1103291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org assembler_->PushRegister(register_index, check_stack_limit); 111a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 112a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 113a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 114a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::AdvanceRegister(int reg, int by) { 115a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org PrintF(" AdvanceRegister(register=%d, by=%d);\n", reg, by); 116a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->AdvanceRegister(reg, by); 117a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 118a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 119a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 1204a5224e84636d192e82f288bfab0d308bdae5c37whesse@chromium.orgvoid RegExpMacroAssemblerTracer::SetCurrentPositionFromEnd(int by) { 1214a5224e84636d192e82f288bfab0d308bdae5c37whesse@chromium.org PrintF(" SetCurrentPositionFromEnd(by=%d);\n", by); 1224a5224e84636d192e82f288bfab0d308bdae5c37whesse@chromium.org assembler_->SetCurrentPositionFromEnd(by); 1234a5224e84636d192e82f288bfab0d308bdae5c37whesse@chromium.org} 1244a5224e84636d192e82f288bfab0d308bdae5c37whesse@chromium.org 1254a5224e84636d192e82f288bfab0d308bdae5c37whesse@chromium.org 126a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::SetRegister(int register_index, int to) { 127a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org PrintF(" SetRegister(register=%d, to=%d);\n", register_index, to); 128a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->SetRegister(register_index, to); 129a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 130a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 131a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 1328bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.orgvoid RegExpMacroAssemblerTracer::WriteCurrentPositionToRegister(int reg, 1338bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org int cp_offset) { 1348bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org PrintF(" WriteCurrentPositionToRegister(register=%d,cp_offset=%d);\n", 1358bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org reg, 1368bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org cp_offset); 1378bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org assembler_->WriteCurrentPositionToRegister(reg, cp_offset); 138a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 139a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 140a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 141ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgvoid RegExpMacroAssemblerTracer::ClearRegisters(int reg_from, int reg_to) { 142ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org PrintF(" ClearRegister(from=%d, to=%d);\n", reg_from, reg_to); 143ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org assembler_->ClearRegisters(reg_from, reg_to); 1443291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org} 1453291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org 1463291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org 147a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::ReadCurrentPositionFromRegister(int reg) { 148a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org PrintF(" ReadCurrentPositionFromRegister(register=%d);\n", reg); 149a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->ReadCurrentPositionFromRegister(reg); 150a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 151a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 152a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 153a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::WriteStackPointerToRegister(int reg) { 154a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org PrintF(" WriteStackPointerToRegister(register=%d);\n", reg); 155a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->WriteStackPointerToRegister(reg); 156a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 157a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 158a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 159a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::ReadStackPointerFromRegister(int reg) { 160a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org PrintF(" ReadStackPointerFromRegister(register=%d);\n", reg); 161a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->ReadStackPointerFromRegister(reg); 162a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 163a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 164a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 165a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::LoadCurrentCharacter(int cp_offset, 16637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com Label* on_end_of_input, 16737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com bool check_bounds, 16837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com int characters) { 16937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com const char* check_msg = check_bounds ? "" : " (unchecked)"; 17037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com PrintF(" LoadCurrentCharacter(cp_offset=%d, label[%08x]%s (%d chars));\n", 1718bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org cp_offset, 172f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org LabelToInt(on_end_of_input), 17337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com check_msg, 17437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com characters); 17537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com assembler_->LoadCurrentCharacter(cp_offset, 17637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com on_end_of_input, 17737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com check_bounds, 17837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com characters); 1798bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org} 1808bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 1818bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 1821456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.orgclass PrintablePrinter { 1831456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org public: 1841456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org explicit PrintablePrinter(uc16 character) : character_(character) { } 1851456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org 1861456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org const char* operator*() { 1871456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org if (character_ >= ' ' && character_ <= '~') { 1881456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org buffer_[0] = '('; 1891456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org buffer_[1] = static_cast<char>(character_); 1901456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org buffer_[2] = ')'; 1911456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org buffer_[3] = '\0'; 1921456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org } else { 1931456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org buffer_[0] = '\0'; 1941456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org } 1951456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org return &buffer_[0]; 1963c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org } 1971456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org 1981456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org private: 1991456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org uc16 character_; 2001456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org char buffer_[4]; 2011456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org}; 2021456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org 2031456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org 204a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::CheckCharacterLT(uc16 limit, Label* on_less) { 2051456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintablePrinter printable(limit); 2061456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintF(" CheckCharacterLT(c=0x%04x%s, label[%08x]);\n", 2071456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org limit, 2081456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org *printable, 2091456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org LabelToInt(on_less)); 210a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->CheckCharacterLT(limit, on_less); 211a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 212a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 213a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 214a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::CheckCharacterGT(uc16 limit, 215a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org Label* on_greater) { 2161456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintablePrinter printable(limit); 2171456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintF(" CheckCharacterGT(c=0x%04x%s, label[%08x]);\n", 2181456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org limit, 2191456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org *printable, 2201456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org LabelToInt(on_greater)); 221a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->CheckCharacterGT(limit, on_greater); 222a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 223a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 224a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 225c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgvoid RegExpMacroAssemblerTracer::CheckCharacter(unsigned c, Label* on_equal) { 2261456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintablePrinter printable(c); 2271456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintF(" CheckCharacter(c=0x%04x%s, label[%08x]);\n", 2281456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org c, 2291456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org *printable, 2301456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org LabelToInt(on_equal)); 231a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->CheckCharacter(c, on_equal); 232a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 233a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 234a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 235ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgvoid RegExpMacroAssemblerTracer::CheckAtStart(Label* on_at_start) { 236f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org PrintF(" CheckAtStart(label[%08x]);\n", LabelToInt(on_at_start)); 237ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org assembler_->CheckAtStart(on_at_start); 238ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org} 239ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 240ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 241a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::CheckNotAtStart(Label* on_not_at_start) { 242f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org PrintF(" CheckNotAtStart(label[%08x]);\n", LabelToInt(on_not_at_start)); 243a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->CheckNotAtStart(on_not_at_start); 244a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 245a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 246a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 247c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgvoid RegExpMacroAssemblerTracer::CheckNotCharacter(unsigned c, 248a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org Label* on_not_equal) { 2491456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintablePrinter printable(c); 2501456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintF(" CheckNotCharacter(c=0x%04x%s, label[%08x]);\n", 2511456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org c, 2521456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org *printable, 2531456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org LabelToInt(on_not_equal)); 254a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->CheckNotCharacter(c, on_not_equal); 255a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 256a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 257a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 25837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comvoid RegExpMacroAssemblerTracer::CheckCharacterAfterAnd( 259c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org unsigned c, 260c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org unsigned mask, 26137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com Label* on_equal) { 2621456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintablePrinter printable(c); 2631456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintF(" CheckCharacterAfterAnd(c=0x%04x%s, mask=0x%04x, label[%08x]);\n", 26437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com c, 2651456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org *printable, 26637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com mask, 267f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org LabelToInt(on_equal)); 26837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com assembler_->CheckCharacterAfterAnd(c, mask, on_equal); 269a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 270a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 271a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 27237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comvoid RegExpMacroAssemblerTracer::CheckNotCharacterAfterAnd( 273c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org unsigned c, 274c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org unsigned mask, 27537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com Label* on_not_equal) { 2761456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintablePrinter printable(c); 2771456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintF(" CheckNotCharacterAfterAnd(c=0x%04x%s, mask=0x%04x, label[%08x]);\n", 27837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com c, 2791456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org *printable, 28037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com mask, 281f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org LabelToInt(on_not_equal)); 28237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com assembler_->CheckNotCharacterAfterAnd(c, mask, on_not_equal); 28337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com} 28437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 28537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 28637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comvoid RegExpMacroAssemblerTracer::CheckNotCharacterAfterMinusAnd( 287a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org uc16 c, 28837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com uc16 minus, 289a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org uc16 mask, 290a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org Label* on_not_equal) { 2911456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintF(" CheckNotCharacterAfterMinusAnd(c=0x%04x, minus=%04x, mask=0x%04x, " 29237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com "label[%08x]);\n", 29337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com c, 29437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com minus, 29537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com mask, 296f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org LabelToInt(on_not_equal)); 29737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com assembler_->CheckNotCharacterAfterMinusAnd(c, minus, mask, on_not_equal); 298a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 299a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 300a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 3011456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.orgvoid RegExpMacroAssemblerTracer::CheckCharacterInRange( 3021456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org uc16 from, 3031456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org uc16 to, 3041456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org Label* on_not_in_range) { 3051456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintablePrinter printable_from(from); 3061456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintablePrinter printable_to(to); 3071456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintF(" CheckCharacterInRange(from=0x%04x%s, to=0x%04x%s, label[%08x]);\n", 3081456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org from, 3091456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org *printable_from, 3101456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org to, 3111456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org *printable_to, 3121456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org LabelToInt(on_not_in_range)); 3131456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org assembler_->CheckCharacterInRange(from, to, on_not_in_range); 3141456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org} 3151456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org 3161456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org 3171456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.orgvoid RegExpMacroAssemblerTracer::CheckCharacterNotInRange( 3181456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org uc16 from, 3191456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org uc16 to, 3201456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org Label* on_in_range) { 3211456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintablePrinter printable_from(from); 3221456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintablePrinter printable_to(to); 3231456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintF( 3241456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org " CheckCharacterNotInRange(from=0x%04x%s," " to=%04x%s, label[%08x]);\n", 3251456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org from, 3261456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org *printable_from, 3271456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org to, 3281456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org *printable_to, 3291456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org LabelToInt(on_in_range)); 3301456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org assembler_->CheckCharacterNotInRange(from, to, on_in_range); 3311456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org} 3321456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org 3331456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org 3341456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.orgvoid RegExpMacroAssemblerTracer::CheckBitInTable( 3351456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org Handle<ByteArray> table, Label* on_bit_set) { 3361456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintF(" CheckBitInTable(label[%08x] ", LabelToInt(on_bit_set)); 3371456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org for (int i = 0; i < kTableSize; i++) { 3381456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintF("%c", table->get(i) != 0 ? 'X' : '.'); 3391456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org if (i % 32 == 31 && i != kTableMask) { 3401456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintF("\n "); 3411456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org } 3421456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org } 3431456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org PrintF(");\n"); 3441456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org assembler_->CheckBitInTable(table, on_bit_set); 3451456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org} 3461456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org 3471456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org 348a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::CheckNotBackReference(int start_reg, 349a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org Label* on_no_match) { 350a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org PrintF(" CheckNotBackReference(register=%d, label[%08x]);\n", start_reg, 351f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org LabelToInt(on_no_match)); 352a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->CheckNotBackReference(start_reg, on_no_match); 353a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 354a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 355a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 356a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::CheckNotBackReferenceIgnoreCase( 357a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org int start_reg, 358a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org Label* on_no_match) { 359a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org PrintF(" CheckNotBackReferenceIgnoreCase(register=%d, label[%08x]);\n", 360f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org start_reg, LabelToInt(on_no_match)); 361a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->CheckNotBackReferenceIgnoreCase(start_reg, on_no_match); 362a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 363a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 364a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 36537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.combool RegExpMacroAssemblerTracer::CheckSpecialCharacterClass( 36637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com uc16 type, 36737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com Label* on_no_match) { 36837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com bool supported = assembler_->CheckSpecialCharacterClass(type, 36937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com on_no_match); 3700c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org PrintF(" CheckSpecialCharacterClass(type='%c', label[%08x]): %s;\n", 37137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com type, 372f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org LabelToInt(on_no_match), 37337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com supported ? "true" : "false"); 37437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return supported; 37537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com} 37637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 37737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 378a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::IfRegisterLT(int register_index, 379a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org int comparand, Label* if_lt) { 380a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org PrintF(" IfRegisterLT(register=%d, number=%d, label[%08x]);\n", 381f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org register_index, comparand, LabelToInt(if_lt)); 382a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->IfRegisterLT(register_index, comparand, if_lt); 383a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 384a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 385a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 3863291210ab99f306b74430ebbc4b7d939629e699fager@chromium.orgvoid RegExpMacroAssemblerTracer::IfRegisterEqPos(int register_index, 3873291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org Label* if_eq) { 3883291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org PrintF(" IfRegisterEqPos(register=%d, label[%08x]);\n", 389f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org register_index, LabelToInt(if_eq)); 3903291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org assembler_->IfRegisterEqPos(register_index, if_eq); 3913291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org} 3923291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org 3933291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org 394a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::IfRegisterGE(int register_index, 395a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org int comparand, Label* if_ge) { 396a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org PrintF(" IfRegisterGE(register=%d, number=%d, label[%08x]);\n", 397f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org register_index, comparand, LabelToInt(if_ge)); 398a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org assembler_->IfRegisterGE(register_index, comparand, if_ge); 399a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 400a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 401a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 402a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgRegExpMacroAssembler::IrregexpImplementation 403a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org RegExpMacroAssemblerTracer::Implementation() { 404a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org return assembler_->Implementation(); 405a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 406a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 407a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 40883a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.orgHandle<HeapObject> RegExpMacroAssemblerTracer::GetCode(Handle<String> source) { 409afbdadc5f06365a7889e7c1c1fdb7dbf596cce68machenbach@chromium.org PrintF(" GetCode(%s);\n", source->ToCString().get()); 4108bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org return assembler_->GetCode(source); 411a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 412a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 413a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}} // namespace v8::internal 414