diff options
Diffstat (limited to 'JavaScriptCore/qt/api/qscriptengine_p.h')
-rw-r--r-- | JavaScriptCore/qt/api/qscriptengine_p.h | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/JavaScriptCore/qt/api/qscriptengine_p.h b/JavaScriptCore/qt/api/qscriptengine_p.h index 8e27c42..2bda68e 100644 --- a/JavaScriptCore/qt/api/qscriptengine_p.h +++ b/JavaScriptCore/qt/api/qscriptengine_p.h @@ -22,12 +22,16 @@ #include "qscriptconverter_p.h" #include "qscriptengine.h" +#include "qscriptstring_p.h" +#include "qscriptsyntaxcheckresult_p.h" #include "qscriptvalue.h" #include <JavaScriptCore/JavaScript.h> +#include <JSBasePrivate.h> #include <QtCore/qshareddata.h> #include <QtCore/qstring.h> class QScriptEngine; +class QScriptSyntaxCheckResultPrivate; class QScriptEnginePrivate : public QSharedData { public: @@ -37,8 +41,13 @@ public: QScriptEnginePrivate(const QScriptEngine*); ~QScriptEnginePrivate(); + QScriptSyntaxCheckResultPrivate* checkSyntax(const QString& program); QScriptValuePrivate* evaluate(const QString& program, const QString& fileName, int lineNumber); + QScriptValuePrivate* evaluate(const QScriptProgramPrivate* program); + inline JSValueRef evaluate(JSStringRef program, JSStringRef fileName, int lineNumber); + inline void collectGarbage(); + inline void reportAdditionalMemoryCost(int cost); inline JSValueRef makeJSValue(double number) const; inline JSValueRef makeJSValue(int number) const; @@ -47,17 +56,42 @@ public: inline JSValueRef makeJSValue(bool number) const; inline JSValueRef makeJSValue(QScriptValue::SpecialValue value) const; + QScriptValuePrivate* globalObject() const; + + inline QScriptStringPrivate* toStringHandle(const QString& str) const; + inline JSGlobalContextRef context() const; private: QScriptEngine* q_ptr; JSGlobalContextRef m_context; }; + +/*! + Evaluates given JavaScript program and returns result of the evaluation. + \attention this function doesn't take ownership of the parameters. + \internal +*/ +JSValueRef QScriptEnginePrivate::evaluate(JSStringRef program, JSStringRef fileName, int lineNumber) +{ + JSValueRef exception; + JSValueRef result = JSEvaluateScript(m_context, program, /* Global Object */ 0, fileName, lineNumber, &exception); + if (!result) + return exception; // returns an exception + return result; +} + void QScriptEnginePrivate::collectGarbage() { JSGarbageCollect(m_context); } +void QScriptEnginePrivate::reportAdditionalMemoryCost(int cost) +{ + if (cost > 0) + JSReportExtraMemoryCost(m_context, cost); +} + JSValueRef QScriptEnginePrivate::makeJSValue(double number) const { return JSValueMakeNumber(m_context, number); @@ -75,7 +109,10 @@ JSValueRef QScriptEnginePrivate::makeJSValue(uint number) const JSValueRef QScriptEnginePrivate::makeJSValue(const QString& string) const { - return JSValueMakeString(m_context, QScriptConverter::toString(string)); + JSStringRef tmp = QScriptConverter::toString(string); + JSValueRef result = JSValueMakeString(m_context, tmp); + JSStringRelease(tmp); + return result; } JSValueRef QScriptEnginePrivate::makeJSValue(bool value) const @@ -90,6 +127,11 @@ JSValueRef QScriptEnginePrivate::makeJSValue(QScriptValue::SpecialValue value) c return JSValueMakeUndefined(m_context); } +QScriptStringPrivate* QScriptEnginePrivate::toStringHandle(const QString& str) const +{ + return new QScriptStringPrivate(str); +} + JSGlobalContextRef QScriptEnginePrivate::context() const { return m_context; |