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 #include "config.h"
21
22 #include "qscriptvalue.h"
23
24 #include "qscriptengine.h"
25 #include "qscriptengine_p.h"
26 #include "qscriptvalue_p.h"
27 #include <QtCore/qdebug.h>
28
29 /*!
30 Constructs an invalid value.
31 */
QScriptValue()32 QScriptValue::QScriptValue()
33 : d_ptr(new QScriptValuePrivate())
34 {
35 }
36
37 /*!
38 Constructs a new QScriptValue with a boolean \a value.
39 */
QScriptValue(bool value)40 QScriptValue::QScriptValue(bool value)
41 : d_ptr(new QScriptValuePrivate(value))
42 {
43 }
44
45 /*!
46 Constructs a new QScriptValue with a number \a value.
47 */
QScriptValue(int value)48 QScriptValue::QScriptValue(int value)
49 : d_ptr(new QScriptValuePrivate(value))
50 {
51 }
52
53 /*!
54 Constructs a new QScriptValue with a number \a value.
55 */
QScriptValue(uint value)56 QScriptValue::QScriptValue(uint value)
57 : d_ptr(new QScriptValuePrivate(value))
58 {
59 }
60
61 /*!
62 Constructs a new QScriptValue with a number \a value.
63 */
QScriptValue(qsreal value)64 QScriptValue::QScriptValue(qsreal value)
65 : d_ptr(new QScriptValuePrivate(value))
66 {
67 }
68
69 /*!
70 Constructs a new QScriptValue with a string \a value.
71 */
QScriptValue(const QString & value)72 QScriptValue::QScriptValue(const QString& value)
73 : d_ptr(new QScriptValuePrivate(value))
74 {
75 }
76
77 /*!
78 Constructs a new QScriptValue with a special \a value.
79 */
QScriptValue(SpecialValue value)80 QScriptValue::QScriptValue(SpecialValue value)
81 : d_ptr(new QScriptValuePrivate(value))
82 {
83 }
84
85 /*!
86 Constructs a new QScriptValue with a string \a value.
87 */
QScriptValue(const char * value)88 QScriptValue::QScriptValue(const char* value)
89 : d_ptr(new QScriptValuePrivate(QString::fromUtf8(value)))
90 {
91 }
92
93 /*!
94 Block automatic convertion to bool
95 \internal
96 */
QScriptValue(void * d)97 QScriptValue::QScriptValue(void* d)
98 {
99 Q_ASSERT(false);
100 }
101
102 /*!
103 Constructs a new QScriptValue from private
104 \internal
105 */
QScriptValue(QScriptValuePrivate * d)106 QScriptValue::QScriptValue(QScriptValuePrivate* d)
107 : d_ptr(d)
108 {
109 }
110
111 /*!
112 \obsolete
113
114 Constructs a new QScriptValue with the boolean \a value and
115 registers it with the script \a engine.
116 */
QScriptValue(QScriptEngine * engine,bool value)117 QScriptValue::QScriptValue(QScriptEngine* engine, bool value)
118 {
119 if (engine)
120 d_ptr = new QScriptValuePrivate(QScriptEnginePrivate::get(engine), value);
121 else
122 d_ptr = new QScriptValuePrivate(value);
123 }
124
125 /*!
126 \obsolete
127
128 Constructs a new QScriptValue with the integer \a value and
129 registers it with the script \a engine.
130 */
QScriptValue(QScriptEngine * engine,int value)131 QScriptValue::QScriptValue(QScriptEngine* engine, int value)
132 {
133 if (engine)
134 d_ptr = new QScriptValuePrivate(QScriptEnginePrivate::get(engine), value);
135 else
136 d_ptr = new QScriptValuePrivate(value);
137 }
138
139 /*!
140 \obsolete
141
142 Constructs a new QScriptValue with the unsigned integer \a value and
143 registers it with the script \a engine.
144 */
QScriptValue(QScriptEngine * engine,uint value)145 QScriptValue::QScriptValue(QScriptEngine* engine, uint value)
146 {
147 if (engine)
148 d_ptr = new QScriptValuePrivate(QScriptEnginePrivate::get(engine), value);
149 else
150 d_ptr = new QScriptValuePrivate(value);
151 }
152
153 /*!
154 \obsolete
155
156 Constructs a new QScriptValue with the qsreal \a value and
157 registers it with the script \a engine.
158 */
QScriptValue(QScriptEngine * engine,qsreal value)159 QScriptValue::QScriptValue(QScriptEngine* engine, qsreal value)
160 {
161 if (engine)
162 d_ptr = new QScriptValuePrivate(QScriptEnginePrivate::get(engine), value);
163 else
164 d_ptr = new QScriptValuePrivate(value);
165 }
166
167 /*!
168 \obsolete
169
170 Constructs a new QScriptValue with the string \a value and
171 registers it with the script \a engine.
172 */
QScriptValue(QScriptEngine * engine,const QString & value)173 QScriptValue::QScriptValue(QScriptEngine* engine, const QString& value)
174 {
175 if (engine)
176 d_ptr = new QScriptValuePrivate(QScriptEnginePrivate::get(engine), value);
177 else
178 d_ptr = new QScriptValuePrivate(value);
179 }
180
181 /*!
182 \obsolete
183
184 Constructs a new QScriptValue with the string \a value and
185 registers it with the script \a engine.
186 */
QScriptValue(QScriptEngine * engine,const char * value)187 QScriptValue::QScriptValue(QScriptEngine* engine, const char* value)
188 {
189 if (engine)
190 d_ptr = new QScriptValuePrivate(QScriptEnginePrivate::get(engine), QString::fromUtf8(value));
191 else
192 d_ptr = new QScriptValuePrivate(QString::fromUtf8(value));
193 }
194
195 /*!
196 \obsolete
197
198 Constructs a new QScriptValue with the special \a value and
199 registers it with the script \a engine.
200 */
QScriptValue(QScriptEngine * engine,SpecialValue value)201 QScriptValue::QScriptValue(QScriptEngine* engine, SpecialValue value)
202 {
203 if (engine)
204 d_ptr = new QScriptValuePrivate(QScriptEnginePrivate::get(engine), value);
205 else
206 d_ptr = new QScriptValuePrivate(value);
207 }
208
209 /*!
210 Constructs a new QScriptValue that is a copy of \a other.
211
212 Note that if \a other is an object (i.e., isObject() would return
213 true), then only a reference to the underlying object is copied into
214 the new script value (i.e., the object itself is not copied).
215 */
QScriptValue(const QScriptValue & other)216 QScriptValue::QScriptValue(const QScriptValue& other)
217 : d_ptr(other.d_ptr)
218 {
219 }
220
221 /*!
222 Destroys this QScriptValue.
223 */
~QScriptValue()224 QScriptValue::~QScriptValue()
225 {
226 }
227
228 /*!
229 Returns true if this QScriptValue is valid; otherwise returns
230 false.
231 */
isValid() const232 bool QScriptValue::isValid() const
233 {
234 return d_ptr->isValid();
235 }
236
237 /*!
238 Returns true if this QScriptValue is of the primitive type Boolean;
239 otherwise returns false.
240
241 \sa toBool()
242 */
isBool() const243 bool QScriptValue::isBool() const
244 {
245 return d_ptr->isBool();
246 }
247
248 /*!
249 \obsolete
250
251 Use isBool() instead.
252 Returns true if this QScriptValue is of the primitive type Boolean;
253 otherwise returns false.
254 */
isBoolean() const255 bool QScriptValue::isBoolean() const
256 {
257 return d_ptr->isBool();
258 }
259
260 /*!
261 Returns true if this QScriptValue is of the primitive type Number;
262 otherwise returns false.
263
264 \sa toNumber()
265 */
isNumber() const266 bool QScriptValue::isNumber() const
267 {
268 return d_ptr->isNumber();
269 }
270
271 /*!
272 Returns true if this QScriptValue is of the primitive type Null;
273 otherwise returns false.
274
275 \sa QScriptEngine::nullValue()
276 */
isNull() const277 bool QScriptValue::isNull() const
278 {
279 return d_ptr->isNull();
280 }
281
282 /*!
283 Returns true if this QScriptValue is of the primitive type String;
284 otherwise returns false.
285
286 \sa toString()
287 */
isString() const288 bool QScriptValue::isString() const
289 {
290 return d_ptr->isString();
291 }
292
293 /*!
294 Returns true if this QScriptValue is of the primitive type Undefined;
295 otherwise returns false.
296
297 \sa QScriptEngine::undefinedValue()
298 */
isUndefined() const299 bool QScriptValue::isUndefined() const
300 {
301 return d_ptr->isUndefined();
302 }
303
304 /*!
305 Returns true if this QScriptValue is an object of the Error class;
306 otherwise returns false.
307
308 \sa QScriptContext::throwError()
309 */
isError() const310 bool QScriptValue::isError() const
311 {
312 return d_ptr->isError();
313 }
314
315 /*!
316 Returns true if this QScriptValue is an object of the Array class;
317 otherwise returns false.
318
319 \sa QScriptEngine::newArray()
320 */
isArray() const321 bool QScriptValue::isArray() const
322 {
323 return d_ptr->isArray();
324 }
325
326 /*!
327 Returns true if this QScriptValue is an object of the Date class;
328 otherwise returns false.
329
330 \sa QScriptEngine::newDate()
331 */
isDate() const332 bool QScriptValue::isDate() const
333 {
334 return d_ptr->isDate();
335 }
336
337 /*!
338 Returns true if this QScriptValue is of the Object type; otherwise
339 returns false.
340
341 Note that function values, variant values, and QObject values are
342 objects, so this function returns true for such values.
343
344 \sa toObject(), QScriptEngine::newObject()
345 */
isObject() const346 bool QScriptValue::isObject() const
347 {
348 return d_ptr->isObject();
349 }
350
351 /*!
352 Returns true if this QScriptValue is a function; otherwise returns
353 false.
354
355 \sa call()
356 */
isFunction() const357 bool QScriptValue::isFunction() const
358 {
359 return d_ptr->isFunction();
360 }
361
362 /*!
363 Returns the string value of this QScriptValue, as defined in
364 \l{ECMA-262} section 9.8, "ToString".
365
366 Note that if this QScriptValue is an object, calling this function
367 has side effects on the script engine, since the engine will call
368 the object's toString() function (and possibly valueOf()) in an
369 attempt to convert the object to a primitive value (possibly
370 resulting in an uncaught script exception).
371
372 \sa isString()
373 */
toString() const374 QString QScriptValue::toString() const
375 {
376 return d_ptr->toString();
377 }
378
379 /*!
380 Returns the number value of this QScriptValue, as defined in
381 \l{ECMA-262} section 9.3, "ToNumber".
382
383 Note that if this QScriptValue is an object, calling this function
384 has side effects on the script engine, since the engine will call
385 the object's valueOf() function (and possibly toString()) in an
386 attempt to convert the object to a primitive value (possibly
387 resulting in an uncaught script exception).
388
389 \sa isNumber(), toInteger(), toInt32(), toUInt32(), toUInt16()
390 */
toNumber() const391 qsreal QScriptValue::toNumber() const
392 {
393 return d_ptr->toNumber();
394 }
395
396 /*!
397 Returns the boolean value of this QScriptValue, using the conversion
398 rules described in \l{ECMA-262} section 9.2, "ToBoolean".
399
400 Note that if this QScriptValue is an object, calling this function
401 has side effects on the script engine, since the engine will call
402 the object's valueOf() function (and possibly toString()) in an
403 attempt to convert the object to a primitive value (possibly
404 resulting in an uncaught script exception).
405
406 \sa isBool()
407 */
toBool() const408 bool QScriptValue::toBool() const
409 {
410 return d_ptr->toBool();
411 }
412
413 /*!
414 \obsolete
415
416 Use toBool() instead.
417 */
toBoolean() const418 bool QScriptValue::toBoolean() const
419 {
420 return d_ptr->toBool();
421 }
422
423 /*!
424 Returns the integer value of this QScriptValue, using the conversion
425 rules described in \l{ECMA-262} section 9.4, "ToInteger".
426
427 Note that if this QScriptValue is an object, calling this function
428 has side effects on the script engine, since the engine will call
429 the object's valueOf() function (and possibly toString()) in an
430 attempt to convert the object to a primitive value (possibly
431 resulting in an uncaught script exception).
432
433 \sa toNumber()
434 */
toInteger() const435 qsreal QScriptValue::toInteger() const
436 {
437 return d_ptr->toInteger();
438 }
439
440 /*!
441 Returns the signed 32-bit integer value of this QScriptValue, using
442 the conversion rules described in \l{ECMA-262} section 9.5, "ToInt32".
443
444 Note that if this QScriptValue is an object, calling this function
445 has side effects on the script engine, since the engine will call
446 the object's valueOf() function (and possibly toString()) in an
447 attempt to convert the object to a primitive value (possibly
448 resulting in an uncaught script exception).
449
450 \sa toNumber(), toUInt32()
451 */
toInt32() const452 qint32 QScriptValue::toInt32() const
453 {
454 return d_ptr->toInt32();
455 }
456
457 /*!
458 Returns the unsigned 32-bit integer value of this QScriptValue, using
459 the conversion rules described in \l{ECMA-262} section 9.6, "ToUint32".
460
461 Note that if this QScriptValue is an object, calling this function
462 has side effects on the script engine, since the engine will call
463 the object's valueOf() function (and possibly toString()) in an
464 attempt to convert the object to a primitive value (possibly
465 resulting in an uncaught script exception).
466
467 \sa toNumber(), toInt32()
468 */
toUInt32() const469 quint32 QScriptValue::toUInt32() const
470 {
471 return d_ptr->toUInt32();
472 }
473
474 /*!
475 Returns the unsigned 16-bit integer value of this QScriptValue, using
476 the conversion rules described in \l{ECMA-262} section 9.7, "ToUint16".
477
478 Note that if this QScriptValue is an object, calling this function
479 has side effects on the script engine, since the engine will call
480 the object's valueOf() function (and possibly toString()) in an
481 attempt to convert the object to a primitive value (possibly
482 resulting in an uncaught script exception).
483
484 \sa toNumber()
485 */
toUInt16() const486 quint16 QScriptValue::toUInt16() const
487 {
488 return d_ptr->toUInt16();
489 }
490
491 /*!
492 \obsolete
493
494 This function is obsolete; use QScriptEngine::toObject() instead.
495 */
toObject() const496 QScriptValue QScriptValue::toObject() const
497 {
498 return QScriptValuePrivate::get(d_ptr->toObject());
499 }
500
501 /*!
502 Returns a QDateTime representation of this value, in local time.
503 If this QScriptValue is not a date, or the value of the date is
504 NaN (Not-a-Number), an invalid QDateTime is returned.
505
506 \sa isDate()
507 */
toDateTime() const508 QDateTime QScriptValue::toDateTime() const
509 {
510 return d_ptr->toDateTime();
511 }
512
513 /*!
514 Calls this QScriptValue as a function, using \a thisObject as
515 the `this' object in the function call, and passing \a args
516 as arguments to the function. Returns the value returned from
517 the function.
518
519 If this QScriptValue is not a function, call() does nothing
520 and returns an invalid QScriptValue.
521
522 Note that if \a thisObject is not an object, the global object
523 (see \l{QScriptEngine::globalObject()}) will be used as the
524 `this' object.
525
526 Calling call() can cause an exception to occur in the script engine;
527 in that case, call() returns the value that was thrown (typically an
528 \c{Error} object). You can call
529 QScriptEngine::hasUncaughtException() to determine if an exception
530 occurred.
531
532 \snippet doc/src/snippets/code/src_script_qscriptvalue.cpp 2
533
534 \sa construct()
535 */
call(const QScriptValue & thisObject,const QScriptValueList & args)536 QScriptValue QScriptValue::call(const QScriptValue& thisObject, const QScriptValueList& args)
537 {
538 return d_ptr->call(thisObject.d_ptr.data(), args);
539 }
540
541 /*!
542 Returns the QScriptEngine that created this QScriptValue,
543 or 0 if this QScriptValue is invalid or the value is not
544 associated with a particular engine.
545 */
engine() const546 QScriptEngine* QScriptValue::engine() const
547 {
548 QScriptEnginePrivate* engine = d_ptr->engine();
549 if (engine)
550 return QScriptEnginePrivate::get(engine);
551 return 0;
552 }
553
554 /*!
555 If this QScriptValue is an object, returns the internal prototype
556 (\c{__proto__} property) of this object; otherwise returns an
557 invalid QScriptValue.
558
559 \sa setPrototype(), isObject()
560 */
prototype() const561 QScriptValue QScriptValue::prototype() const
562 {
563 return QScriptValuePrivate::get(d_ptr->prototype());
564 }
565
566 /*!
567 If this QScriptValue is an object, sets the internal prototype
568 (\c{__proto__} property) of this object to be \a prototype;
569 otherwise does nothing.
570
571 The internal prototype should not be confused with the public
572 property with name "prototype"; the public prototype is usually
573 only set on functions that act as constructors.
574
575 \sa prototype(), isObject()
576 */
setPrototype(const QScriptValue & prototype)577 void QScriptValue::setPrototype(const QScriptValue& prototype)
578 {
579 d_ptr->setPrototype(QScriptValuePrivate::get(prototype));
580 }
581
582 /*!
583 Assigns the \a other value to this QScriptValue.
584
585 Note that if \a other is an object (isObject() returns true),
586 only a reference to the underlying object will be assigned;
587 the object itself will not be copied.
588 */
operator =(const QScriptValue & other)589 QScriptValue& QScriptValue::operator=(const QScriptValue& other)
590 {
591 d_ptr = other.d_ptr;
592 return *this;
593 }
594
595 /*!
596 Returns true if this QScriptValue is equal to \a other, otherwise
597 returns false. The comparison follows the behavior described in
598 \l{ECMA-262} section 11.9.3, "The Abstract Equality Comparison
599 Algorithm".
600
601 This function can return true even if the type of this QScriptValue
602 is different from the type of the \a other value; i.e. the
603 comparison is not strict. For example, comparing the number 9 to
604 the string "9" returns true; comparing an undefined value to a null
605 value returns true; comparing a \c{Number} object whose primitive
606 value is 6 to a \c{String} object whose primitive value is "6"
607 returns true; and comparing the number 1 to the boolean value
608 \c{true} returns true. If you want to perform a comparison
609 without such implicit value conversion, use strictlyEquals().
610
611 Note that if this QScriptValue or the \a other value are objects,
612 calling this function has side effects on the script engine, since
613 the engine will call the object's valueOf() function (and possibly
614 toString()) in an attempt to convert the object to a primitive value
615 (possibly resulting in an uncaught script exception).
616
617 \sa strictlyEquals(), lessThan()
618 */
equals(const QScriptValue & other) const619 bool QScriptValue::equals(const QScriptValue& other) const
620 {
621 return d_ptr->equals(QScriptValuePrivate::get(other));
622 }
623
624 /*!
625 Returns true if this QScriptValue is equal to \a other using strict
626 comparison (no conversion), otherwise returns false. The comparison
627 follows the behavior described in \l{ECMA-262} section 11.9.6, "The
628 Strict Equality Comparison Algorithm".
629
630 If the type of this QScriptValue is different from the type of the
631 \a other value, this function returns false. If the types are equal,
632 the result depends on the type, as shown in the following table:
633
634 \table
635 \header \o Type \o Result
636 \row \o Undefined \o true
637 \row \o Null \o true
638 \row \o Boolean \o true if both values are true, false otherwise
639 \row \o Number \o false if either value is NaN (Not-a-Number); true if values are equal, false otherwise
640 \row \o String \o true if both values are exactly the same sequence of characters, false otherwise
641 \row \o Object \o true if both values refer to the same object, false otherwise
642 \endtable
643
644 \sa equals()
645 */
strictlyEquals(const QScriptValue & other) const646 bool QScriptValue::strictlyEquals(const QScriptValue& other) const
647 {
648 return d_ptr->strictlyEquals(QScriptValuePrivate::get(other));
649 }
650
651 /*!
652 Returns true if this QScriptValue is an instance of
653 \a other; otherwise returns false.
654
655 This QScriptValue is considered to be an instance of \a other if
656 \a other is a function and the value of the \c{prototype}
657 property of \a other is in the prototype chain of this
658 QScriptValue.
659 */
instanceOf(const QScriptValue & other) const660 bool QScriptValue::instanceOf(const QScriptValue& other) const
661 {
662 return d_ptr->instanceOf(QScriptValuePrivate::get(other));
663 }
664
665 /*!
666 Returns the value of this QScriptValue's property with the given \a name,
667 using the given \a mode to resolve the property.
668
669 If no such property exists, an invalid QScriptValue is returned.
670
671 If the property is implemented using a getter function (i.e. has the
672 PropertyGetter flag set), calling property() has side-effects on the
673 script engine, since the getter function will be called (possibly
674 resulting in an uncaught script exception). If an exception
675 occurred, property() returns the value that was thrown (typically
676 an \c{Error} object).
677
678 \sa setProperty(), propertyFlags(), QScriptValueIterator
679 */
property(const QString & name,const ResolveFlags & mode) const680 QScriptValue QScriptValue::property(const QString& name, const ResolveFlags& mode) const
681 {
682 return QScriptValuePrivate::get(d_ptr->property(name, mode));
683 }
684
685 /*!
686 \overload
687
688 Returns the value of this QScriptValue's property with the given \a name,
689 using the given \a mode to resolve the property.
690
691 This overload of property() is useful when you need to look up the
692 same property repeatedly, since the lookup can be performed faster
693 when the name is represented as an interned string.
694
695 \sa QScriptEngine::toStringHandle(), setProperty()
696 */
property(const QScriptString & name,const ResolveFlags & mode) const697 QScriptValue QScriptValue::property(const QScriptString& name, const ResolveFlags& mode) const
698 {
699 return QScriptValuePrivate::get(d_ptr->property(QScriptStringPrivate::get(name).constData(), mode));
700 }
701
702 /*!
703 \overload
704
705 Returns the property at the given \a arrayIndex, using the given \a
706 mode to resolve the property.
707
708 This function is provided for convenience and performance when
709 working with array objects.
710
711 If this QScriptValue is not an Array object, this function behaves
712 as if property() was called with the string representation of \a
713 arrayIndex.
714 */
property(quint32 arrayIndex,const ResolveFlags & mode) const715 QScriptValue QScriptValue::property(quint32 arrayIndex, const ResolveFlags& mode) const
716 {
717 return QScriptValuePrivate::get(d_ptr->property(arrayIndex, mode));
718 }
719
720 /*!
721 Sets the value of this QScriptValue's property with the given \a name to
722 the given \a value.
723
724 If this QScriptValue is not an object, this function does nothing.
725
726 If this QScriptValue does not already have a property with name \a name,
727 a new property is created; the given \a flags then specify how this
728 property may be accessed by script code.
729
730 If \a value is invalid, the property is removed.
731
732 If the property is implemented using a setter function (i.e. has the
733 PropertySetter flag set), calling setProperty() has side-effects on
734 the script engine, since the setter function will be called with the
735 given \a value as argument (possibly resulting in an uncaught script
736 exception).
737
738 Note that you cannot specify custom getter or setter functions for
739 built-in properties, such as the \c{length} property of Array objects
740 or meta properties of QObject objects.
741
742 \sa property()
743 */
setProperty(const QString & name,const QScriptValue & value,const PropertyFlags & flags)744 void QScriptValue::setProperty(const QString& name, const QScriptValue& value, const PropertyFlags& flags)
745 {
746 d_ptr->setProperty(name, QScriptValuePrivate::get(value), flags);
747 }
748
749 /*!
750 \overload
751
752 Sets the property at the given \a arrayIndex to the given \a value.
753
754 This function is provided for convenience and performance when
755 working with array objects.
756
757 If this QScriptValue is not an Array object, this function behaves
758 as if setProperty() was called with the string representation of \a
759 arrayIndex.
760 */
setProperty(quint32 arrayIndex,const QScriptValue & value,const PropertyFlags & flags)761 void QScriptValue::setProperty(quint32 arrayIndex, const QScriptValue& value, const PropertyFlags& flags)
762 {
763 d_ptr->setProperty(arrayIndex, QScriptValuePrivate::get(value), flags);
764 }
765
766 /*!
767 Sets the value of this QScriptValue's property with the given \a
768 name to the given \a value. The given \a flags specify how this
769 property may be accessed by script code.
770
771 This overload of setProperty() is useful when you need to set the
772 same property repeatedly, since the operation can be performed
773 faster when the name is represented as an interned string.
774
775 \sa QScriptEngine::toStringHandle()
776 */
setProperty(const QScriptString & name,const QScriptValue & value,const PropertyFlags & flags)777 void QScriptValue::setProperty(const QScriptString& name, const QScriptValue& value, const PropertyFlags& flags)
778 {
779 d_ptr->setProperty(QScriptStringPrivate::get(name).constData(), QScriptValuePrivate::get(value), flags);
780 }
781
782 /*!
783 Returns the flags of the property with the given \a name, using the
784 given \a mode to resolve the property.
785
786 \sa property()
787 */
propertyFlags(const QString & name,const ResolveFlags & mode) const788 QScriptValue::PropertyFlags QScriptValue::propertyFlags(const QString& name, const ResolveFlags& mode) const
789 {
790 return d_ptr->propertyFlags(name, mode);
791 }
792
793 /*!
794 Returns the flags of the property with the given \a name, using the
795 given \a mode to resolve the property.
796
797 \sa property()
798 */
propertyFlags(const QScriptString & name,const ResolveFlags & mode) const799 QScriptValue::PropertyFlags QScriptValue::propertyFlags(const QScriptString& name, const ResolveFlags& mode) const
800 {
801 return d_ptr->propertyFlags(QScriptStringPrivate::get(name).constData(), mode);
802 }
803