1 /* 2 Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies) 3 4 This library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Library General Public 6 License as published by the Free Software Foundation; either 7 version 2 of the License, or (at your option) any later version. 8 9 This library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Library General Public License for more details. 13 14 You should have received a copy of the GNU Library General Public License 15 along with this library; see the file COPYING.LIB. If not, write to 16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17 Boston, MA 02110-1301, USA. 18 */ 19 20 #ifndef qscriptengine_p_h 21 #define qscriptengine_p_h 22 23 #include "qscriptconverter_p.h" 24 #include "qscriptengine.h" 25 #include "qscriptvalue.h" 26 #include <JavaScriptCore/JavaScript.h> 27 #include <QtCore/qshareddata.h> 28 #include <QtCore/qstring.h> 29 30 class QScriptEngine; 31 32 class QScriptEnginePrivate : public QSharedData { 33 public: 34 static QScriptEnginePtr get(const QScriptEngine* q) { Q_ASSERT(q); return q->d_ptr; } 35 static QScriptEngine* get(const QScriptEnginePrivate* d) { Q_ASSERT(d); return d->q_ptr; } 36 37 QScriptEnginePrivate(const QScriptEngine*); 38 ~QScriptEnginePrivate(); 39 40 QScriptValuePrivate* evaluate(const QString& program, const QString& fileName, int lineNumber); 41 inline void collectGarbage(); 42 43 inline JSValueRef makeJSValue(double number) const; 44 inline JSValueRef makeJSValue(int number) const; 45 inline JSValueRef makeJSValue(uint number) const; 46 inline JSValueRef makeJSValue(const QString& string) const; 47 inline JSValueRef makeJSValue(bool number) const; 48 inline JSValueRef makeJSValue(QScriptValue::SpecialValue value) const; 49 50 inline JSGlobalContextRef context() const; 51 private: 52 QScriptEngine* q_ptr; 53 JSGlobalContextRef m_context; 54 }; 55 56 void QScriptEnginePrivate::collectGarbage() 57 { 58 JSGarbageCollect(m_context); 59 } 60 61 JSValueRef QScriptEnginePrivate::makeJSValue(double number) const 62 { 63 return JSValueMakeNumber(m_context, number); 64 } 65 66 JSValueRef QScriptEnginePrivate::makeJSValue(int number) const 67 { 68 return JSValueMakeNumber(m_context, number); 69 } 70 71 JSValueRef QScriptEnginePrivate::makeJSValue(uint number) const 72 { 73 return JSValueMakeNumber(m_context, number); 74 } 75 76 JSValueRef QScriptEnginePrivate::makeJSValue(const QString& string) const 77 { 78 return JSValueMakeString(m_context, QScriptConverter::toString(string)); 79 } 80 81 JSValueRef QScriptEnginePrivate::makeJSValue(bool value) const 82 { 83 return JSValueMakeBoolean(m_context, value); 84 } 85 86 JSValueRef QScriptEnginePrivate::makeJSValue(QScriptValue::SpecialValue value) const 87 { 88 if (value == QScriptValue::NullValue) 89 return JSValueMakeNull(m_context); 90 return JSValueMakeUndefined(m_context); 91 } 92 93 JSGlobalContextRef QScriptEnginePrivate::context() const 94 { 95 return m_context; 96 } 97 98 #endif 99