Changeset 147818 in webkit for trunk/Source/JavaScriptCore/API/JSContextRef.cpp
- Timestamp:
- Apr 5, 2013, 4:53:12 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/API/JSContextRef.cpp
r141321 r147818 37 37 #include "JSObject.h" 38 38 #include "Operations.h" 39 #include "SourceProvider.h" 39 40 #include <wtf/text/StringBuilder.h> 40 41 #include <wtf/text/StringHash.h> … … 176 177 ExecState* exec = toJS(ctx); 177 178 JSLockHolder lock(exec); 178 179 unsigned count = 0;180 179 StringBuilder builder; 181 CallFrame* callFrame = exec; 182 String functionName; 183 if (exec->callee()) { 184 if (asObject(exec->callee())->inherits(&InternalFunction::s_info)) { 185 functionName = asInternalFunction(exec->callee())->name(exec); 186 builder.appendLiteral("#0 "); 187 builder.append(functionName); 188 builder.appendLiteral("() "); 189 count++; 190 } 191 } 192 while (true) { 193 RELEASE_ASSERT(callFrame); 194 int signedLineNumber; 195 intptr_t sourceID; 180 Vector<StackFrame> stackTrace; 181 Interpreter::getStackTrace(&exec->globalData(), stackTrace, maxStackSize); 182 183 for (size_t i = 0; i < stackTrace.size(); i++) { 196 184 String urlString; 197 JSValue function; 198 199 exec->interpreter()->retrieveLastCaller(callFrame, signedLineNumber, sourceID, urlString, function); 200 201 if (function) 202 functionName = jsCast<JSFunction*>(function)->name(exec); 185 String functionName; 186 StackFrame& frame = stackTrace[i]; 187 JSValue function = frame.callee.get(); 188 if (frame.callee) 189 functionName = frame.friendlyFunctionName(exec); 203 190 else { 204 191 // Caller is unknown, but if frame is empty we should still add the frame, because 205 192 // something called us, and gave us arguments. 206 if ( count)193 if (i) 207 194 break; 208 195 } 209 unsigned lineNumber = signedLineNumber >= 0 ? signedLineNumber : 0;196 unsigned lineNumber = frame.line(); 210 197 if (!builder.isEmpty()) 211 198 builder.append('\n'); 212 199 builder.append('#'); 213 builder.appendNumber( count);200 builder.appendNumber(i); 214 201 builder.append(' '); 215 202 builder.append(functionName); 216 203 builder.appendLiteral("() at "); 217 204 builder.append(urlString); 218 builder.append(':'); 219 builder.appendNumber(lineNumber); 220 if (!function || ++count == maxStackSize) 205 if (frame.codeType != StackFrameNativeCode) { 206 builder.append(':'); 207 builder.appendNumber(lineNumber); 208 } 209 if (!function) 221 210 break; 222 callFrame = callFrame->callerFrame();223 211 } 224 212 return OpaqueJSString::create(builder.toString()).leakRef();
Note:
See TracChangeset
for help on using the changeset viewer.