diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-02-24 16:36:50 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-02-24 16:36:50 +0100 |
commit | ad0d549d4cc13433f77c1ac8f0ab379c83d93f28 (patch) | |
tree | b34b0daceb7c8e7fdde4b4ec43650ab7caadb0a9 /Source/JavaScriptCore/jsc.cpp | |
parent | 03e12282df9aa1e1fb05a8b90f1cfc2e08764cec (diff) | |
download | qtwebkit-ad0d549d4cc13433f77c1ac8f0ab379c83d93f28.tar.gz |
Imported WebKit commit bb52bf3c0119e8a128cd93afe5572413a8617de9 (http://svn.webkit.org/repository/webkit/trunk@108790)
Diffstat (limited to 'Source/JavaScriptCore/jsc.cpp')
-rw-r--r-- | Source/JavaScriptCore/jsc.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/Source/JavaScriptCore/jsc.cpp b/Source/JavaScriptCore/jsc.cpp index 47ec8c608..9f207c510 100644 --- a/Source/JavaScriptCore/jsc.cpp +++ b/Source/JavaScriptCore/jsc.cpp @@ -27,7 +27,9 @@ #include "CurrentTime.h" #include "ExceptionHelpers.h" #include "InitializeThreading.h" +#include "Interpreter.h" #include "JSArray.h" +#include "JSCTypedArrayStubs.h" #include "JSFunction.h" #include "JSLock.h" #include "JSString.h" @@ -78,6 +80,7 @@ static bool fillBufferWithContentsOfFile(const UString& fileName, Vector<char>& static EncodedJSValue JSC_HOST_CALL functionPrint(ExecState*); static EncodedJSValue JSC_HOST_CALL functionDebug(ExecState*); +static EncodedJSValue JSC_HOST_CALL functionJSCStack(ExecState*); static EncodedJSValue JSC_HOST_CALL functionGC(ExecState*); #ifndef NDEBUG static EncodedJSValue JSC_HOST_CALL functionReleaseExecutableMemory(ExecState*); @@ -184,12 +187,24 @@ protected: addFunction(globalData, "run", functionRun, 1); addFunction(globalData, "load", functionLoad, 1); addFunction(globalData, "checkSyntax", functionCheckSyntax, 1); + addFunction(globalData, "jscStack", functionJSCStack, 1); addFunction(globalData, "readline", functionReadline, 0); addFunction(globalData, "preciseTime", functionPreciseTime, 0); #if ENABLE(SAMPLING_FLAGS) addFunction(globalData, "setSamplingFlags", functionSetSamplingFlags, 1); addFunction(globalData, "clearSamplingFlags", functionClearSamplingFlags, 1); #endif + +#if ENABLE(COMMANDLINE_TYPEDARRAYS) + addConstructableFunction(globalData, "Uint8Array", constructJSUint8Array, 1); + addConstructableFunction(globalData, "Uint16Array", constructJSUint16Array, 1); + addConstructableFunction(globalData, "Uint32Array", constructJSUint32Array, 1); + addConstructableFunction(globalData, "Int8Array", constructJSInt8Array, 1); + addConstructableFunction(globalData, "Int16Array", constructJSInt16Array, 1); + addConstructableFunction(globalData, "Int32Array", constructJSInt32Array, 1); + addConstructableFunction(globalData, "Float32Array", constructJSFloat32Array, 1); + addConstructableFunction(globalData, "Float64Array", constructJSFloat64Array, 1); +#endif JSObject* array = constructEmptyArray(globalExec()); for (size_t i = 0; i < arguments.size(); ++i) @@ -202,6 +217,12 @@ protected: Identifier identifier(globalExec(), name); putDirect(globalData, identifier, JSFunction::create(globalExec(), this, arguments, identifier, function)); } + + void addConstructableFunction(JSGlobalData& globalData, const char* name, NativeFunction function, unsigned arguments) + { + Identifier identifier(globalExec(), name); + putDirect(globalData, identifier, JSFunction::create(globalExec(), this, arguments, identifier, function, function)); + } }; COMPILE_ASSERT(!IsInteger<GlobalObject>::value, WTF_IsInteger_GlobalObject_false); ASSERT_CLASS_FITS_IN_CELL(GlobalObject); @@ -252,6 +273,22 @@ EncodedJSValue JSC_HOST_CALL functionDebug(ExecState* exec) return JSValue::encode(jsUndefined()); } +EncodedJSValue JSC_HOST_CALL functionJSCStack(ExecState* exec) +{ + String trace = "--> Stack trace:\n"; + Vector<StackFrame> stackTrace; + Interpreter::getStackTrace(&exec->globalData(), -1, stackTrace); + int i = 0; + + for (Vector<StackFrame>::iterator iter = stackTrace.begin(); iter < stackTrace.end(); iter++) { + StackFrame level = *iter; + trace += String::format(" %i %s\n", i, level.toString(exec).utf8().data()); + i++; + } + fprintf(stderr, "%s", trace.utf8().data()); + return JSValue::encode(jsUndefined()); +} + EncodedJSValue JSC_HOST_CALL functionGC(ExecState* exec) { JSLock lock(SilenceAssertionsOnly); |