Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(189)

Side by Side Diff: src/deoptimizer.cc

Issue 88043002: Out-of-line constant pool on Arm: Stage 3 - Set Constant Pool Pointer on Function Entry (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Sync and Rebase Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/deoptimizer.h ('k') | src/frames.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 941 matching lines...) Expand 10 before | Expand all | Expand 10 after
952 if (is_topmost) output_frame->SetRegister(fp_reg.code(), fp_value); 952 if (is_topmost) output_frame->SetRegister(fp_reg.code(), fp_value);
953 if (trace_scope_ != NULL) { 953 if (trace_scope_ != NULL) {
954 PrintF(trace_scope_->file(), 954 PrintF(trace_scope_->file(),
955 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" 955 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
956 V8PRIxPTR " ; caller's fp\n", 956 V8PRIxPTR " ; caller's fp\n",
957 fp_value, output_offset, value); 957 fp_value, output_offset, value);
958 } 958 }
959 ASSERT(!is_bottommost || !has_alignment_padding_ || 959 ASSERT(!is_bottommost || !has_alignment_padding_ ||
960 (fp_value & kPointerSize) != 0); 960 (fp_value & kPointerSize) != 0);
961 961
962 if (FLAG_enable_ool_constant_pool) {
963 // For the bottommost output frame the constant pool pointer can be gotten
964 // from the input frame. For subsequent output frames, it can be gotten from
965 // the function's code.
966 Register constant_pool_reg =
967 JavaScriptFrame::constant_pool_pointer_register();
968 output_offset -= kPointerSize;
969 input_offset -= kPointerSize;
970 if (is_bottommost) {
971 value = input_->GetFrameSlot(input_offset);
972 } else {
973 value = reinterpret_cast<intptr_t>(
974 function->shared()->code()->constant_pool());
975 }
976 output_frame->SetFrameSlot(output_offset, value);
977 output_frame->SetConstantPool(value);
978 if (is_topmost) output_frame->SetRegister(constant_pool_reg.code(), value);
979 if (trace_scope_) {
980 PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
981 V8PRIxPTR "; constant_pool\n",
982 top_address + output_offset, output_offset, value);
983 }
984 }
985
962 // For the bottommost output frame the context can be gotten from the input 986 // For the bottommost output frame the context can be gotten from the input
963 // frame. For all subsequent output frames it can be gotten from the function 987 // frame. For all subsequent output frames it can be gotten from the function
964 // so long as we don't inline functions that need local contexts. 988 // so long as we don't inline functions that need local contexts.
965 Register context_reg = JavaScriptFrame::context_register(); 989 Register context_reg = JavaScriptFrame::context_register();
966 output_offset -= kPointerSize; 990 output_offset -= kPointerSize;
967 input_offset -= kPointerSize; 991 input_offset -= kPointerSize;
968 if (is_bottommost) { 992 if (is_bottommost) {
969 value = input_->GetFrameSlot(input_offset); 993 value = input_->GetFrameSlot(input_offset);
970 } else { 994 } else {
971 value = reinterpret_cast<intptr_t>(function->context()); 995 value = reinterpret_cast<intptr_t>(function->context());
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
1087 output_frame->SetCallerFp(output_offset, value); 1111 output_frame->SetCallerFp(output_offset, value);
1088 intptr_t fp_value = top_address + output_offset; 1112 intptr_t fp_value = top_address + output_offset;
1089 output_frame->SetFp(fp_value); 1113 output_frame->SetFp(fp_value);
1090 if (trace_scope_ != NULL) { 1114 if (trace_scope_ != NULL) {
1091 PrintF(trace_scope_->file(), 1115 PrintF(trace_scope_->file(),
1092 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" 1116 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
1093 V8PRIxPTR " ; caller's fp\n", 1117 V8PRIxPTR " ; caller's fp\n",
1094 fp_value, output_offset, value); 1118 fp_value, output_offset, value);
1095 } 1119 }
1096 1120
1121 if (FLAG_enable_ool_constant_pool) {
1122 // A marker value is used in place of the constant pool.
1123 output_offset -= kPointerSize;
1124 intptr_t constant_pool = reinterpret_cast<intptr_t>(
1125 Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR));
1126 output_frame->SetFrameSlot(output_offset, constant_pool);
1127 if (trace_scope_) {
1128 PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
1129 V8PRIxPTR " ; constant_pool (adaptor sentinel)\n",
1130 top_address + output_offset, output_offset, constant_pool);
1131 }
1132 }
1133
1097 // A marker value is used in place of the context. 1134 // A marker value is used in place of the context.
1098 output_offset -= kPointerSize; 1135 output_offset -= kPointerSize;
1099 intptr_t context = reinterpret_cast<intptr_t>( 1136 intptr_t context = reinterpret_cast<intptr_t>(
1100 Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)); 1137 Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR));
1101 output_frame->SetFrameSlot(output_offset, context); 1138 output_frame->SetFrameSlot(output_offset, context);
1102 if (trace_scope_ != NULL) { 1139 if (trace_scope_ != NULL) {
1103 PrintF(trace_scope_->file(), 1140 PrintF(trace_scope_->file(),
1104 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" 1141 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
1105 V8PRIxPTR " ; context (adaptor sentinel)\n", 1142 V8PRIxPTR " ; context (adaptor sentinel)\n",
1106 top_address + output_offset, output_offset, context); 1143 top_address + output_offset, output_offset, context);
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
1204 output_frame->SetCallerFp(output_offset, value); 1241 output_frame->SetCallerFp(output_offset, value);
1205 intptr_t fp_value = top_address + output_offset; 1242 intptr_t fp_value = top_address + output_offset;
1206 output_frame->SetFp(fp_value); 1243 output_frame->SetFp(fp_value);
1207 if (trace_scope_ != NULL) { 1244 if (trace_scope_ != NULL) {
1208 PrintF(trace_scope_->file(), 1245 PrintF(trace_scope_->file(),
1209 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" 1246 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
1210 V8PRIxPTR " ; caller's fp\n", 1247 V8PRIxPTR " ; caller's fp\n",
1211 fp_value, output_offset, value); 1248 fp_value, output_offset, value);
1212 } 1249 }
1213 1250
1251 if (FLAG_enable_ool_constant_pool) {
1252 // The constant pool pointer can be gotten from the previous frame.
1253 output_offset -= kPointerSize;
1254 value = output_[frame_index - 1]->GetConstantPool();
1255 output_frame->SetFrameSlot(output_offset, value);
1256 if (trace_scope_) {
1257 PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
1258 V8PRIxPTR " ; constant pool\n",
1259 top_address + output_offset, output_offset, value);
1260 }
1261 }
1262
1214 // The context can be gotten from the previous frame. 1263 // The context can be gotten from the previous frame.
1215 output_offset -= kPointerSize; 1264 output_offset -= kPointerSize;
1216 value = output_[frame_index - 1]->GetContext(); 1265 value = output_[frame_index - 1]->GetContext();
1217 output_frame->SetFrameSlot(output_offset, value); 1266 output_frame->SetFrameSlot(output_offset, value);
1218 if (trace_scope_ != NULL) { 1267 if (trace_scope_ != NULL) {
1219 PrintF(trace_scope_->file(), 1268 PrintF(trace_scope_->file(),
1220 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" 1269 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
1221 V8PRIxPTR " ; context\n", 1270 V8PRIxPTR " ; context\n",
1222 top_address + output_offset, output_offset, value); 1271 top_address + output_offset, output_offset, value);
1223 } 1272 }
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1299 // frame. This means that we have to use a height of 0. 1348 // frame. This means that we have to use a height of 0.
1300 unsigned height = 0; 1349 unsigned height = 0;
1301 unsigned height_in_bytes = height * kPointerSize; 1350 unsigned height_in_bytes = height * kPointerSize;
1302 const char* kind = is_setter_stub_frame ? "setter" : "getter"; 1351 const char* kind = is_setter_stub_frame ? "setter" : "getter";
1303 if (trace_scope_ != NULL) { 1352 if (trace_scope_ != NULL) {
1304 PrintF(trace_scope_->file(), 1353 PrintF(trace_scope_->file(),
1305 " translating %s stub => height=%u\n", kind, height_in_bytes); 1354 " translating %s stub => height=%u\n", kind, height_in_bytes);
1306 } 1355 }
1307 1356
1308 // We need 1 stack entry for the return address and enough entries for the 1357 // We need 1 stack entry for the return address and enough entries for the
1309 // StackFrame::INTERNAL (FP, context, frame type and code object - see 1358 // StackFrame::INTERNAL (FP, context, frame type, code object and constant
1310 // MacroAssembler::EnterFrame). For a setter stub frame we need one additional 1359 // pool (if FLAG_enable_ool_constant_pool)- see MacroAssembler::EnterFrame).
1311 // entry for the implicit return value, see 1360 // For a setter stub frame we need one additional entry for the implicit
1312 // StoreStubCompiler::CompileStoreViaSetter. 1361 // return value, see StoreStubCompiler::CompileStoreViaSetter.
1313 unsigned fixed_frame_entries = 1362 unsigned fixed_frame_entries =
1314 (StandardFrameConstants::kFixedFrameSize / kPointerSize) + 1 + 1363 (StandardFrameConstants::kFixedFrameSize / kPointerSize) + 1 +
1315 (is_setter_stub_frame ? 1 : 0); 1364 (is_setter_stub_frame ? 1 : 0);
1316 unsigned fixed_frame_size = fixed_frame_entries * kPointerSize; 1365 unsigned fixed_frame_size = fixed_frame_entries * kPointerSize;
1317 unsigned output_frame_size = height_in_bytes + fixed_frame_size; 1366 unsigned output_frame_size = height_in_bytes + fixed_frame_size;
1318 1367
1319 // Allocate and store the output frame description. 1368 // Allocate and store the output frame description.
1320 FrameDescription* output_frame = 1369 FrameDescription* output_frame =
1321 new(output_frame_size) FrameDescription(output_frame_size, accessor); 1370 new(output_frame_size) FrameDescription(output_frame_size, accessor);
1322 output_frame->SetFrameType(StackFrame::INTERNAL); 1371 output_frame->SetFrameType(StackFrame::INTERNAL);
(...skipping 27 matching lines...) Expand all
1350 output_frame->SetCallerFp(output_offset, value); 1399 output_frame->SetCallerFp(output_offset, value);
1351 intptr_t fp_value = top_address + output_offset; 1400 intptr_t fp_value = top_address + output_offset;
1352 output_frame->SetFp(fp_value); 1401 output_frame->SetFp(fp_value);
1353 if (trace_scope_ != NULL) { 1402 if (trace_scope_ != NULL) {
1354 PrintF(trace_scope_->file(), 1403 PrintF(trace_scope_->file(),
1355 " 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR 1404 " 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR
1356 " ; caller's fp\n", 1405 " ; caller's fp\n",
1357 fp_value, output_offset, value); 1406 fp_value, output_offset, value);
1358 } 1407 }
1359 1408
1409 if (FLAG_enable_ool_constant_pool) {
1410 // The constant pool pointer can be gotten from the previous frame.
1411 output_offset -= kPointerSize;
1412 value = output_[frame_index - 1]->GetConstantPool();
1413 output_frame->SetFrameSlot(output_offset, value);
1414 if (trace_scope_) {
1415 PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
1416 V8PRIxPTR " ; constant pool\n",
1417 top_address + output_offset, output_offset, value);
1418 }
1419 }
1420
1360 // The context can be gotten from the previous frame. 1421 // The context can be gotten from the previous frame.
1361 output_offset -= kPointerSize; 1422 output_offset -= kPointerSize;
1362 value = output_[frame_index - 1]->GetContext(); 1423 value = output_[frame_index - 1]->GetContext();
1363 output_frame->SetFrameSlot(output_offset, value); 1424 output_frame->SetFrameSlot(output_offset, value);
1364 if (trace_scope_ != NULL) { 1425 if (trace_scope_ != NULL) {
1365 PrintF(trace_scope_->file(), 1426 PrintF(trace_scope_->file(),
1366 " 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR 1427 " 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR
1367 " ; context\n", 1428 " ; context\n",
1368 top_address + output_offset, output_offset, value); 1429 top_address + output_offset, output_offset, value);
1369 } 1430 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1420 void Deoptimizer::DoComputeCompiledStubFrame(TranslationIterator* iterator, 1481 void Deoptimizer::DoComputeCompiledStubFrame(TranslationIterator* iterator,
1421 int frame_index) { 1482 int frame_index) {
1422 // 1483 //
1423 // FROM TO 1484 // FROM TO
1424 // | .... | | .... | 1485 // | .... | | .... |
1425 // +-------------------------+ +-------------------------+ 1486 // +-------------------------+ +-------------------------+
1426 // | JSFunction continuation | | JSFunction continuation | 1487 // | JSFunction continuation | | JSFunction continuation |
1427 // +-------------------------+ +-------------------------+ 1488 // +-------------------------+ +-------------------------+
1428 // | | saved frame (FP) | | saved frame (FP) | 1489 // | | saved frame (FP) | | saved frame (FP) |
1429 // | +=========================+<-fpreg +=========================+<-fpreg 1490 // | +=========================+<-fpreg +=========================+<-fpreg
1491 // | |constant pool (if ool_cp)| |constant pool (if ool_cp)|
1492 // | +-------------------------+ +-------------------------|
1430 // | | JSFunction context | | JSFunction context | 1493 // | | JSFunction context | | JSFunction context |
1431 // v +-------------------------+ +-------------------------| 1494 // v +-------------------------+ +-------------------------|
1432 // | COMPILED_STUB marker | | STUB_FAILURE marker | 1495 // | COMPILED_STUB marker | | STUB_FAILURE marker |
1433 // +-------------------------+ +-------------------------+ 1496 // +-------------------------+ +-------------------------+
1434 // | | | caller args.arguments_ | 1497 // | | | caller args.arguments_ |
1435 // | ... | +-------------------------+ 1498 // | ... | +-------------------------+
1436 // | | | caller args.length_ | 1499 // | | | caller args.length_ |
1437 // |-------------------------|<-spreg +-------------------------+ 1500 // |-------------------------|<-spreg +-------------------------+
1438 // | caller args pointer | 1501 // | caller args pointer |
1439 // +-------------------------+ 1502 // +-------------------------+
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1508 intptr_t frame_ptr = input_->GetRegister(fp_reg.code()); 1571 intptr_t frame_ptr = input_->GetRegister(fp_reg.code());
1509 output_frame->SetRegister(fp_reg.code(), frame_ptr); 1572 output_frame->SetRegister(fp_reg.code(), frame_ptr);
1510 output_frame->SetFp(frame_ptr); 1573 output_frame->SetFp(frame_ptr);
1511 if (trace_scope_ != NULL) { 1574 if (trace_scope_ != NULL) {
1512 PrintF(trace_scope_->file(), 1575 PrintF(trace_scope_->file(),
1513 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" 1576 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
1514 V8PRIxPTR " ; caller's fp\n", 1577 V8PRIxPTR " ; caller's fp\n",
1515 top_address + output_frame_offset, output_frame_offset, value); 1578 top_address + output_frame_offset, output_frame_offset, value);
1516 } 1579 }
1517 1580
1581 if (FLAG_enable_ool_constant_pool) {
1582 // The constant pool pointer can be gotten from the input frame.
1583 Register constant_pool_pointer_register =
1584 StubFailureTrampolineFrame::constant_pool_pointer_register();
1585 input_frame_offset -= kPointerSize;
1586 value = input_->GetFrameSlot(input_frame_offset);
1587 output_frame->SetRegister(constant_pool_pointer_register.code(), value);
1588 output_frame_offset -= kPointerSize;
1589 output_frame->SetFrameSlot(output_frame_offset, value);
1590 if (trace_scope_) {
1591 PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
1592 V8PRIxPTR " ; constant_pool_pointer\n",
1593 top_address + output_frame_offset, output_frame_offset, value);
1594 }
1595 }
1596
1518 // The context can be gotten from the input frame. 1597 // The context can be gotten from the input frame.
1519 Register context_reg = StubFailureTrampolineFrame::context_register(); 1598 Register context_reg = StubFailureTrampolineFrame::context_register();
1520 input_frame_offset -= kPointerSize; 1599 input_frame_offset -= kPointerSize;
1521 value = input_->GetFrameSlot(input_frame_offset); 1600 value = input_->GetFrameSlot(input_frame_offset);
1522 output_frame->SetRegister(context_reg.code(), value); 1601 output_frame->SetRegister(context_reg.code(), value);
1523 output_frame_offset -= kPointerSize; 1602 output_frame_offset -= kPointerSize;
1524 output_frame->SetFrameSlot(output_frame_offset, value); 1603 output_frame->SetFrameSlot(output_frame_offset, value);
1525 ASSERT(reinterpret_cast<Object*>(value)->IsContext()); 1604 ASSERT(reinterpret_cast<Object*>(value)->IsContext());
1526 if (trace_scope_ != NULL) { 1605 if (trace_scope_ != NULL) {
1527 PrintF(trace_scope_->file(), 1606 PrintF(trace_scope_->file(),
(...skipping 920 matching lines...) Expand 10 before | Expand all | Expand 10 after
2448 DoTranslateObject(iterator, object_index, i); 2527 DoTranslateObject(iterator, object_index, i);
2449 } 2528 }
2450 return; 2529 return;
2451 } 2530 }
2452 } 2531 }
2453 } 2532 }
2454 2533
2455 2534
2456 unsigned Deoptimizer::ComputeInputFrameSize() const { 2535 unsigned Deoptimizer::ComputeInputFrameSize() const {
2457 unsigned fixed_size = ComputeFixedSize(function_); 2536 unsigned fixed_size = ComputeFixedSize(function_);
2458 // The fp-to-sp delta already takes the context and the function 2537 // The fp-to-sp delta already takes the context, constant pool pointer and the
2459 // into account so we have to avoid double counting them. 2538 // function into account so we have to avoid double counting them.
2460 unsigned result = fixed_size + fp_to_sp_delta_ - 2539 unsigned result = fixed_size + fp_to_sp_delta_ -
2461 StandardFrameConstants::kFixedFrameSizeFromFp; 2540 StandardFrameConstants::kFixedFrameSizeFromFp;
2462 #ifdef DEBUG 2541 #ifdef DEBUG
2463 if (compiled_code_->kind() == Code::OPTIMIZED_FUNCTION) { 2542 if (compiled_code_->kind() == Code::OPTIMIZED_FUNCTION) {
2464 unsigned stack_slots = compiled_code_->stack_slots(); 2543 unsigned stack_slots = compiled_code_->stack_slots();
2465 unsigned outgoing_size = ComputeOutgoingArgumentSize(); 2544 unsigned outgoing_size = ComputeOutgoingArgumentSize();
2466 ASSERT(result == fixed_size + (stack_slots * kPointerSize) + outgoing_size); 2545 ASSERT(result == fixed_size + (stack_slots * kPointerSize) + outgoing_size);
2467 } 2546 }
2468 #endif 2547 #endif
2469 return result; 2548 return result;
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
2574 } 2653 }
2575 2654
2576 2655
2577 FrameDescription::FrameDescription(uint32_t frame_size, 2656 FrameDescription::FrameDescription(uint32_t frame_size,
2578 JSFunction* function) 2657 JSFunction* function)
2579 : frame_size_(frame_size), 2658 : frame_size_(frame_size),
2580 function_(function), 2659 function_(function),
2581 top_(kZapUint32), 2660 top_(kZapUint32),
2582 pc_(kZapUint32), 2661 pc_(kZapUint32),
2583 fp_(kZapUint32), 2662 fp_(kZapUint32),
2584 context_(kZapUint32) { 2663 context_(kZapUint32),
2664 constant_pool_(kZapUint32) {
2585 // Zap all the registers. 2665 // Zap all the registers.
2586 for (int r = 0; r < Register::kNumRegisters; r++) { 2666 for (int r = 0; r < Register::kNumRegisters; r++) {
2587 SetRegister(r, kZapUint32); 2667 SetRegister(r, kZapUint32);
2588 } 2668 }
2589 2669
2590 // Zap all the slots. 2670 // Zap all the slots.
2591 for (unsigned o = 0; o < frame_size; o += kPointerSize) { 2671 for (unsigned o = 0; o < frame_size; o += kPointerSize) {
2592 SetFrameSlot(o, kZapUint32); 2672 SetFrameSlot(o, kZapUint32);
2593 } 2673 }
2594 } 2674 }
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after
3055 3135
3056 void DeoptimizedFrameInfo::Iterate(ObjectVisitor* v) { 3136 void DeoptimizedFrameInfo::Iterate(ObjectVisitor* v) {
3057 v->VisitPointer(BitCast<Object**>(&function_)); 3137 v->VisitPointer(BitCast<Object**>(&function_));
3058 v->VisitPointers(parameters_, parameters_ + parameters_count_); 3138 v->VisitPointers(parameters_, parameters_ + parameters_count_);
3059 v->VisitPointers(expression_stack_, expression_stack_ + expression_count_); 3139 v->VisitPointers(expression_stack_, expression_stack_ + expression_count_);
3060 } 3140 }
3061 3141
3062 #endif // ENABLE_DEBUGGER_SUPPORT 3142 #endif // ENABLE_DEBUGGER_SUPPORT
3063 3143
3064 } } // namespace v8::internal 3144 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/deoptimizer.h ('k') | src/frames.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698