Changeset 153218 in webkit for trunk/Source/JavaScriptCore/API/JSContextRef.cpp
- Timestamp:
- Jul 24, 2013, 9:02:28 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/API/JSContextRef.cpp
r153183 r153218 29 29 30 30 #include "APICast.h" 31 #include "CallFrameInlines.h" 31 32 #include "InitializeThreading.h" 32 33 #include <interpreter/CallFrame.h> 33 #include <interpreter/Interpreter.h>34 34 #include "JSCallbackObject.h" 35 35 #include "JSClassRef.h" … … 38 38 #include "Operations.h" 39 39 #include "SourceProvider.h" 40 #include "StackIterator.h" 40 41 #include <wtf/text/StringBuilder.h> 41 42 #include <wtf/text/StringHash.h> … … 222 223 JSLockHolder lock(exec); 223 224 StringBuilder builder; 224 Vector<StackFrame> stackTrace; 225 Interpreter::getStackTrace(&exec->vm(), stackTrace, maxStackSize); 226 227 for (size_t i = 0; i < stackTrace.size(); i++) { 228 String urlString; 229 String functionName; 230 StackFrame& frame = stackTrace[i]; 231 JSValue function = frame.callee.get(); 232 if (frame.callee) 233 functionName = frame.friendlyFunctionName(exec); 234 else { 235 // Caller is unknown, but if frame is empty we should still add the frame, because 236 // something called us, and gave us arguments. 237 if (i) 238 break; 239 } 240 unsigned lineNumber; 241 unsigned column; 242 frame.computeLineAndColumn(lineNumber, column); 225 CallFrame* frame = exec->vm().topCallFrame; 226 size_t i = 0; 227 ASSERT(maxStackSize); 228 for (StackIterator iter = frame->begin(); iter != frame->end() && maxStackSize--; ++iter, ++i) { 229 JSObject* callee = iter->callee(); 230 // If callee is unknown, but we've not added any frame yet, we should 231 // still add the frame, because something called us, and gave us arguments. 232 if (!callee && i) 233 break; 234 243 235 if (!builder.isEmpty()) 244 236 builder.append('\n'); … … 246 238 builder.appendNumber(i); 247 239 builder.append(' '); 248 builder.append( stackTrace[i].friendlyFunctionName(exec));240 builder.append(iter->functionName()); 249 241 builder.appendLiteral("() at "); 250 builder.append( urlString);251 if ( frame.codeType != StackFrameNativeCode) {242 builder.append(iter->sourceURL()); 243 if (iter->isJSFrame()) { 252 244 builder.append(':'); 245 unsigned lineNumber; 246 unsigned unusedColumn; 247 iter->computeLineAndColumn(lineNumber, unusedColumn); 253 248 builder.appendNumber(lineNumber); 254 249 } 255 if (!function) 250 251 if (!callee) 256 252 break; 257 253 }
Note:
See TracChangeset
for help on using the changeset viewer.