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

Side by Side Diff: src/ic.cc

Issue 77035: Add ENABLE_DEBUGGER_SUPPORT macro.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 years, 8 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/ic.h ('k') | src/ic-inl.h » ('j') | src/serialize.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 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 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 StackFrameIterator it; 93 StackFrameIterator it;
94 for (int i = 0; i < depth + 1; i++) it.Advance(); 94 for (int i = 0; i < depth + 1; i++) it.Advance();
95 StackFrame* frame = it.frame(); 95 StackFrame* frame = it.frame();
96 ASSERT(fp == frame->fp() && pc_address == frame->pc_address()); 96 ASSERT(fp == frame->fp() && pc_address == frame->pc_address());
97 #endif 97 #endif
98 fp_ = fp; 98 fp_ = fp;
99 pc_address_ = pc_address; 99 pc_address_ = pc_address;
100 } 100 }
101 101
102 102
103 #ifdef ENABLE_DEBUGGER_SUPPORT
103 Address IC::OriginalCodeAddress() { 104 Address IC::OriginalCodeAddress() {
104 HandleScope scope; 105 HandleScope scope;
105 // Compute the JavaScript frame for the frame pointer of this IC 106 // Compute the JavaScript frame for the frame pointer of this IC
106 // structure. We need this to be able to find the function 107 // structure. We need this to be able to find the function
107 // corresponding to the frame. 108 // corresponding to the frame.
108 StackFrameIterator it; 109 StackFrameIterator it;
109 while (it.frame()->fp() != this->fp()) it.Advance(); 110 while (it.frame()->fp() != this->fp()) it.Advance();
110 JavaScriptFrame* frame = JavaScriptFrame::cast(it.frame()); 111 JavaScriptFrame* frame = JavaScriptFrame::cast(it.frame());
111 // Find the function on the stack and both the active code for the 112 // Find the function on the stack and both the active code for the
112 // function and the original code. 113 // function and the original code.
113 JSFunction* function = JSFunction::cast(frame->function()); 114 JSFunction* function = JSFunction::cast(frame->function());
114 Handle<SharedFunctionInfo> shared(function->shared()); 115 Handle<SharedFunctionInfo> shared(function->shared());
115 Code* code = shared->code(); 116 Code* code = shared->code();
116 ASSERT(Debug::HasDebugInfo(shared)); 117 ASSERT(Debug::HasDebugInfo(shared));
117 Code* original_code = Debug::GetDebugInfo(shared)->original_code(); 118 Code* original_code = Debug::GetDebugInfo(shared)->original_code();
118 ASSERT(original_code->IsCode()); 119 ASSERT(original_code->IsCode());
119 // Get the address of the call site in the active code. This is the 120 // Get the address of the call site in the active code. This is the
120 // place where the call to DebugBreakXXX is and where the IC 121 // place where the call to DebugBreakXXX is and where the IC
121 // normally would be. 122 // normally would be.
122 Address addr = pc() - Assembler::kTargetAddrToReturnAddrDist; 123 Address addr = pc() - Assembler::kTargetAddrToReturnAddrDist;
123 // Return the address in the original code. This is the place where 124 // Return the address in the original code. This is the place where
124 // the call which has been overwritten by the DebugBreakXXX resides 125 // the call which has been overwritten by the DebugBreakXXX resides
125 // and the place where the inline cache system should look. 126 // and the place where the inline cache system should look.
126 int delta = original_code->instruction_start() - code->instruction_start(); 127 int delta = original_code->instruction_start() - code->instruction_start();
127 return addr + delta; 128 return addr + delta;
128 } 129 }
129 130 #endif
130 131
131 IC::State IC::StateFrom(Code* target, Object* receiver) { 132 IC::State IC::StateFrom(Code* target, Object* receiver) {
132 IC::State state = target->ic_state(); 133 IC::State state = target->ic_state();
133 134
134 if (state != MONOMORPHIC) return state; 135 if (state != MONOMORPHIC) return state;
135 if (receiver->IsUndefined() || receiver->IsNull()) return state; 136 if (receiver->IsUndefined() || receiver->IsNull()) return state;
136 137
137 Map* map = GetCodeCacheMapForObject(receiver); 138 Map* map = GetCodeCacheMapForObject(receiver);
138 139
139 // Decide whether the inline cache failed because of changes to the 140 // Decide whether the inline cache failed because of changes to the
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 // Ignored this will degrade performance for Array.prototype.{push,pop}. 350 // Ignored this will degrade performance for Array.prototype.{push,pop}.
350 // Please note we only return the optimized function iff 351 // Please note we only return the optimized function iff
351 // the JSObject has FastElements. 352 // the JSObject has FastElements.
352 if (object->IsJSObject() && JSObject::cast(*object)->HasFastElements()) { 353 if (object->IsJSObject() && JSObject::cast(*object)->HasFastElements()) {
353 Object* opt = Top::LookupSpecialFunction(JSObject::cast(*object), 354 Object* opt = Top::LookupSpecialFunction(JSObject::cast(*object),
354 lookup.holder(), 355 lookup.holder(),
355 JSFunction::cast(result)); 356 JSFunction::cast(result));
356 if (opt->IsJSFunction()) return opt; 357 if (opt->IsJSFunction()) return opt;
357 } 358 }
358 359
360 #ifdef ENABLE_DEBUGGER_SUPPORT
359 // Handle stepping into a function if step into is active. 361 // Handle stepping into a function if step into is active.
360 if (Debug::StepInActive()) { 362 if (Debug::StepInActive()) {
361 // Protect the result in a handle as the debugger can allocate and might 363 // Protect the result in a handle as the debugger can allocate and might
362 // cause GC. 364 // cause GC.
363 HandleScope scope; 365 HandleScope scope;
364 Handle<JSFunction> function(JSFunction::cast(result)); 366 Handle<JSFunction> function(JSFunction::cast(result));
365 Debug::HandleStepIn(function, fp(), false); 367 Debug::HandleStepIn(function, fp(), false);
366 return *function; 368 return *function;
367 } 369 }
370 #endif
368 371
369 return result; 372 return result;
370 } 373 }
371 374
372 // Try to find a suitable function delegate for the object at hand. 375 // Try to find a suitable function delegate for the object at hand.
373 result = TryCallAsFunction(result); 376 result = TryCallAsFunction(result);
374 return result->IsJSFunction() ? 377 return result->IsJSFunction() ?
375 result : TypeError("property_not_function", object, name); 378 result : TypeError("property_not_function", object, name);
376 } 379 }
377 380
(...skipping 831 matching lines...) Expand 10 before | Expand all | Expand 10 after
1209 #undef ADDR 1212 #undef ADDR
1210 }; 1213 };
1211 1214
1212 1215
1213 Address IC::AddressFromUtilityId(IC::UtilityId id) { 1216 Address IC::AddressFromUtilityId(IC::UtilityId id) {
1214 return IC_utilities[id]; 1217 return IC_utilities[id];
1215 } 1218 }
1216 1219
1217 1220
1218 } } // namespace v8::internal 1221 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/ic.h ('k') | src/ic-inl.h » ('j') | src/serialize.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698