Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qqmllocale.cpp
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "qqmllocale_p.h"
5#include <private/qqmlcontext_p.h>
6#include <QtCore/qnumeric.h>
7#include <QtCore/qdatetime.h>
8#include <QtCore/qtimezone.h>
9
10#include <private/qlocale_p.h>
11#include <private/qlocale_data_p.h>
12
13#include <private/qv4dateobject_p.h>
14#include <private/qv4numberobject_p.h>
15#include <private/qv4stringobject_p.h>
16#include <private/qqmlvaluetypewrapper_p.h>
17
19
20using namespace QV4;
21
22#define THROW_ERROR(string) \
23 do { \
24 return scope.engine->throwError(QString::fromUtf8(string)); \
25 } while (false)
26
27
28#define GET_LOCALE_DATA_RESOURCE(OBJECT) \
29 QLocale *r = [&]() { \
30 QV4::Scoped<QQmlValueTypeWrapper> r(scope, OBJECT.as<QQmlValueTypeWrapper>()); \
31 return r ? r->cast<QLocale>() : nullptr; \
32 }(); \
33 if (!r) \
34 THROW_ERROR("Not a valid Locale object")
35
36static bool isLocaleObject(const QV4::Value &val)
37{
39 return wrapper->type() == QMetaType::fromType<QLocale>();
40 return false;
41}
42
43//--------------
44// Date extension
45
47{
48 engine->datePrototype()->defineDefaultProperty(engine->id_toLocaleString(), method_toLocaleString);
49 engine->datePrototype()->defineDefaultProperty(QStringLiteral("toLocaleTimeString"), method_toLocaleTimeString);
50 engine->datePrototype()->defineDefaultProperty(QStringLiteral("toLocaleDateString"), method_toLocaleDateString);
51 engine->dateCtor()->defineDefaultProperty(QStringLiteral("fromLocaleString"), method_fromLocaleString);
52 engine->dateCtor()->defineDefaultProperty(QStringLiteral("fromLocaleTimeString"), method_fromLocaleTimeString);
53 engine->dateCtor()->defineDefaultProperty(QStringLiteral("fromLocaleDateString"), method_fromLocaleDateString);
54 engine->dateCtor()->defineDefaultProperty(QStringLiteral("timeZoneUpdated"), method_timeZoneUpdated);
55}
56
57ReturnedValue QQmlDateExtension::method_toLocaleString(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
58{
59 Scope scope(b);
60 if (argc > 2)
61 return QV4::DatePrototype::method_toLocaleString(b, thisObject, argv, argc);
62
63 const QV4::DateObject *date = thisObject->as<DateObject>();
64 if (!date)
65 return QV4::DatePrototype::method_toLocaleString(b, thisObject, argv, argc);
66
67 QDateTime dt = date->toQDateTime();
68
69 if (argc == 0) {
70 // Use QLocale for standard toLocaleString() function
71 QLocale locale;
72 RETURN_RESULT(scope.engine->newString(locale.toString(dt)));
73 }
74
75 if (!isLocaleObject(argv[0]))
76 return QV4::DatePrototype::method_toLocaleString(b, thisObject, argv, argc); // Use the default Date toLocaleString()
77
79
81 QString formattedDt;
82 if (argc == 2) {
83 if (String *s = argv[1].stringValue()) {
84 QString format = s->toQString();
85 formattedDt = r->toString(dt, format);
86 } else if (argv[1].isNumber()) {
87 quint32 intFormat = argv[1].toNumber();
89 formattedDt = r->toString(dt, format);
90 } else {
91 THROW_ERROR("Locale: Date.toLocaleString(): Invalid datetime format");
92 }
93 } else {
94 formattedDt = r->toString(dt, enumFormat);
95 }
96
97 RETURN_RESULT(scope.engine->newString(formattedDt));
98}
99
100ReturnedValue QQmlDateExtension::method_toLocaleTimeString(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
101{
102 Scope scope(b);
103 if (argc > 2)
104 return QV4::DatePrototype::method_toLocaleTimeString(b, thisObject, argv, argc);
105
106 const QV4::DateObject *date = thisObject->as<DateObject>();
107 if (!date)
108 return QV4::DatePrototype::method_toLocaleTimeString(b, thisObject, argv, argc);
109
110 QDateTime dt = date->toQDateTime();
111 QTime time = dt.time();
112
113 if (argc == 0) {
114 // Use QLocale for standard toLocaleString() function
116 RETURN_RESULT(scope.engine->newString(locale.toString(time)));
117 }
118
119 if (!isLocaleObject(argv[0]))
120 return QV4::DatePrototype::method_toLocaleTimeString(b, thisObject, argv, argc); // Use the default Date toLocaleTimeString()
121
123
125 QString formattedTime;
126 if (argc == 2) {
127 if (String *s = argv[1].stringValue()) {
128 QString format = s->toQString();
129 formattedTime = r->toString(time, format);
130 } else if (argv[1].isNumber()) {
131 quint32 intFormat = argv[1].toNumber();
133 formattedTime = r->toString(time, format);
134 } else {
135 THROW_ERROR("Locale: Date.toLocaleTimeString(): Invalid time format");
136 }
137 } else {
138 formattedTime = r->toString(time, enumFormat);
139 }
140
141 RETURN_RESULT(scope.engine->newString(formattedTime));
142}
143
144ReturnedValue QQmlDateExtension::method_toLocaleDateString(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
145{
146 Scope scope(b);
147 if (argc > 2)
148 return QV4::DatePrototype::method_toLocaleDateString(b, thisObject, argv, argc);
149
150 const QV4::DateObject *dateObj = thisObject->as<DateObject>();
151 if (!dateObj)
152 return QV4::DatePrototype::method_toLocaleDateString(b, thisObject, argv, argc);
153
154 QDateTime dt = dateObj->toQDateTime();
155 QDate date = dt.date();
156
157 if (argc == 0) {
158 // Use QLocale for standard toLocaleString() function
160 RETURN_RESULT(scope.engine->newString(locale.toString(date)));
161 }
162
163 if (!isLocaleObject(argv[0]))
164 return QV4::DatePrototype::method_toLocaleDateString(b, thisObject, argv, argc); // Use the default Date toLocaleDateString()
165
167
169 QString formattedDate;
170 if (argc == 2) {
171 if (String *s = argv[1].stringValue()) {
172 QString format = s->toQString();
173 formattedDate = r->toString(date, format);
174 } else if (argv[1].isNumber()) {
175 quint32 intFormat = argv[1].toNumber();
177 formattedDate = r->toString(date, format);
178 } else {
179 THROW_ERROR("Locale: Date.loLocaleDateString(): Invalid date format");
180 }
181 } else {
182 formattedDate = r->toString(date, enumFormat);
183 }
184
185 RETURN_RESULT(scope.engine->newString(formattedDate));
186}
187
188ReturnedValue QQmlDateExtension::method_fromLocaleString(const QV4::FunctionObject *b, const QV4::Value *, const QV4::Value *argv, int argc)
189{
190 QV4::Scope scope(b);
191 QV4::ExecutionEngine * const engine = scope.engine;
192 if (argc == 1) {
193 if (String *s = argv[0].stringValue()) {
195 QString dateString = s->toQString();
196 QDateTime dt = locale.toDateTime(dateString);
197 RETURN_RESULT(engine->newDateObject(dt));
198 }
199 }
200
201 if (argc < 1 || argc > 3 || !isLocaleObject(argv[0]))
202 THROW_ERROR("Locale: Date.fromLocaleString(): Invalid arguments");
203
205
207 QDateTime dt;
208 QString dateString = argv[1].toQStringNoThrow();
209 if (argc == 3) {
210 if (String *s = argv[2].stringValue()) {
211 QString format = s->toQString();
212 dt = r->toDateTime(dateString, format);
213 } else if (argv[2].isNumber()) {
214 quint32 intFormat = argv[2].toNumber();
216 dt = r->toDateTime(dateString, format);
217 } else {
218 THROW_ERROR("Locale: Date.fromLocaleString(): Invalid datetime format");
219 }
220 } else {
221 dt = r->toDateTime(dateString, enumFormat);
222 }
223
224 RETURN_RESULT(engine->newDateObject(dt));
225}
226
227ReturnedValue QQmlDateExtension::method_fromLocaleTimeString(const QV4::FunctionObject *b, const QV4::Value *, const QV4::Value *argv, int argc)
228{
229 QV4::Scope scope(b);
230 QV4::ExecutionEngine * const engine = scope.engine;
231
232 if (argc == 1) {
233 if (String *s = argv[0].stringValue()) {
235 QString timeString = s->toQString();
236 QTime time = locale.toTime(timeString);
238 dt.setTime(time);
239 RETURN_RESULT(engine->newDateObject(dt));
240 }
241 }
242
243 if (argc < 1 || argc > 3 || !isLocaleObject(argv[0]))
244 THROW_ERROR("Locale: Date.fromLocaleTimeString(): Invalid arguments");
245
247
249 QTime tm;
250 QString dateString = argv[1].toQStringNoThrow();
251 if (argc == 3) {
252 if (String *s = argv[2].stringValue()) {
253 QString format = s->toQString();
254 tm = r->toTime(dateString, format);
255 } else if (argv[2].isNumber()) {
256 quint32 intFormat = argv[2].toNumber();
258 tm = r->toTime(dateString, format);
259 } else {
260 THROW_ERROR("Locale: Date.fromLocaleTimeString(): Invalid datetime format");
261 }
262 } else {
263 tm = r->toTime(dateString, enumFormat);
264 }
265
266 QDateTime dt;
267 if (tm.isValid()) {
269 dt.setTime(tm);
270 }
271
272 RETURN_RESULT(engine->newDateObject(dt));
273}
274
275ReturnedValue QQmlDateExtension::method_fromLocaleDateString(const QV4::FunctionObject *b, const QV4::Value *, const QV4::Value *argv, int argc)
276{
277 QV4::Scope scope(b);
278 QV4::ExecutionEngine * const engine = scope.engine;
279
280 if (argc == 1) {
281 if (String *s = argv[0].stringValue()) {
283 QString dateString = s->toQString();
284 QDate date = locale.toDate(dateString);
286 }
287 }
288
289 if (argc < 1 || argc > 3 || !isLocaleObject(argv[0]))
290 THROW_ERROR("Locale: Date.fromLocaleDateString(): Invalid arguments");
291
293
295 QDate dt;
296 QString dateString = argv[1].toQStringNoThrow();
297 if (argc == 3) {
298 if (String *s = argv[2].stringValue()) {
299 QString format = s->toQString();
300 dt = r->toDate(dateString, format);
301 } else if (argv[2].isNumber()) {
302 quint32 intFormat = argv[2].toNumber();
304 dt = r->toDate(dateString, format);
305 } else {
306 THROW_ERROR("Locale: Date.fromLocaleDateString(): Invalid datetime format");
307 }
308 } else {
309 dt = r->toDate(dateString, enumFormat);
310 }
311
312 RETURN_RESULT(engine->newDateObject(dt.startOfDay(QTimeZone::UTC)));
313}
314
315ReturnedValue QQmlDateExtension::method_timeZoneUpdated(const QV4::FunctionObject *b, const QV4::Value *, const QV4::Value *, int argc)
316{
317 QV4::Scope scope(b);
318 if (argc != 0)
319 THROW_ERROR("Locale: Date.timeZoneUpdated(): Invalid arguments");
320
322
324}
325
326//-----------------
327// Number extension
328
330{
331 engine->numberPrototype()->defineDefaultProperty(engine->id_toLocaleString(), method_toLocaleString);
332 engine->numberPrototype()->defineDefaultProperty(QStringLiteral("toLocaleCurrencyString"), method_toLocaleCurrencyString);
333 engine->numberCtor()->defineDefaultProperty(QStringLiteral("fromLocaleString"), method_fromLocaleString);
334}
335
336QV4::ReturnedValue QQmlNumberExtension::method_toLocaleString(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
337{
338 QV4::Scope scope(b);
339 if (argc > 3)
340 THROW_ERROR("Locale: Number.toLocaleString(): Invalid arguments");
341
342 double number = thisObject->toNumber();
343
344 if (argc == 0) {
345 // Use QLocale for standard toLocaleString() function
346 QLocale locale;
347 RETURN_RESULT(scope.engine->newString(locale.toString(number)));
348 }
349
350 if (!isLocaleObject(argv[0]))
351 return QV4::NumberPrototype::method_toLocaleString(b, thisObject, argv, argc); // Use the default Number toLocaleString()
352
354
355 quint16 format = 'f';
356 if (argc > 1) {
357 if (!argv[1].isString())
358 THROW_ERROR("Locale: Number.toLocaleString(): Invalid arguments");
359 QString fs = argv[1].toQString();
360 if (fs.size())
361 format = fs.at(0).unicode();
362 }
363 int prec = 2;
364 if (argc > 2) {
365 if (!argv[2].isNumber())
366 THROW_ERROR("Locale: Number.toLocaleString(): Invalid arguments");
367 prec = argv[2].toInt32();
368 }
369
370 RETURN_RESULT(scope.engine->newString(r->toString(number, (char)format, prec)));
371}
372
373ReturnedValue QQmlNumberExtension::method_toLocaleCurrencyString(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
374{
375 QV4::Scope scope(b);
376 if (argc > 2)
377 THROW_ERROR("Locale: Number.toLocaleCurrencyString(): Invalid arguments");
378
379 double number = thisObject->toNumber();
380
381 if (argc == 0) {
382 // Use QLocale for standard toLocaleString() function
384 RETURN_RESULT(scope.engine->newString(locale.toString(number)));
385 }
386
387 if (!isLocaleObject(argv[0]))
388 THROW_ERROR("Locale: Number.toLocaleCurrencyString(): Invalid arguments");
389
391
393 if (argc > 1) {
394 if (!argv[1].isString())
395 THROW_ERROR("Locale: Number.toLocaleString(): Invalid arguments");
396 symbol = argv[1].toQStringNoThrow();
397 }
398
399 RETURN_RESULT(scope.engine->newString(r->toCurrencyString(number, symbol)));
400}
401
402ReturnedValue QQmlNumberExtension::method_fromLocaleString(const QV4::FunctionObject *b, const QV4::Value *, const QV4::Value *argv, int argc)
403{
404 QV4::Scope scope(b);
405 if (argc < 1 || argc > 2)
406 THROW_ERROR("Locale: Number.fromLocaleString(): Invalid arguments");
407
408 int numberIdx = 0;
410
411 if (argc == 2) {
412 if (!isLocaleObject(argv[0]))
413 THROW_ERROR("Locale: Number.fromLocaleString(): Invalid arguments");
414
416 locale = *r;
417
418 numberIdx = 1;
419 }
420
421 QString ns = argv[numberIdx].toQString();
422 if (!ns.size())
424
425 bool ok = false;
426 double val = locale.toDouble(ns, &ok);
427
428 if (!ok)
429 THROW_ERROR("Locale: Number.fromLocaleString(): Invalid format");
430
432}
433
434//--------------
435// Locale object
436
438{
439 QV4::Scope scope(args->v4engine());
440 const auto doThrow = [&](const QString &message) {
441 args->setReturnValue(scope.engine->throwError(message));
442 };
443
444 const int argc = args->length();
445
446 if (argc < 1 || argc > 3) {
447 doThrow(QString::fromLatin1(
448 "Locale: formattedDataSize(): Expected 1-3 arguments, but received %1")
449 .arg(argc));
450 return;
451 }
452
453 QV4::ScopedValue arg0(scope, (*args)[0]);
454 bool mismatched0 = false;
455 if (!arg0->isNumber()) {
456 // ### Qt7: Throw an exception here, so that we don't have to handle mismatched0 below.
457 qWarning() << "Locale: formattedDataSize(): Invalid argument ('bytes' should be a number)";
458 if (argc == 1) {
459 args->setReturnValue(
460 scope.engine->newString(locale.formattedDataSize(qint64(arg0->toInteger())))
461 ->asReturnedValue());
462 return;
463 }
464
465 mismatched0 = true;
466 }
467
468 // Anything can be coerced to a number, for better or worse ...
469 Q_ASSERT(argc >= 2);
470
471 QV4::ScopedValue arg1(scope, (*args)[1]);
472 if (!arg1->isInteger()) {
473 doThrow(QLatin1String(
474 "Locale: formattedDataSize(): Invalid argument ('precision' must be an int)"));
475 return;
476 }
477
478 if (mismatched0) {
479 if (argc == 2) {
480 const QString result = locale.formattedDataSize(
481 qint64(arg0->toInteger()), arg1->integerValue());
482 args->setReturnValue(scope.engine->newString(result)->asReturnedValue());
483 return;
484 }
485
486 QV4::ScopedValue arg2(scope, (*args)[2]);
487 if (arg2->isNumber()) {
488 const QString result = locale.formattedDataSize(
489 qint64(arg0->toInteger()), arg1->integerValue(),
490 QLocale::DataSizeFormats(arg2->integerValue()));
491 args->setReturnValue(scope.engine->newString(result)->asReturnedValue());
492 return;
493 }
494 }
495
496 Q_ASSERT(argc == 3);
497 Q_ASSERT(!QV4::ScopedValue(scope, (*args)[2])->isNumber());
498
499 doThrow(QLatin1String(
500 "Locale: formattedDataSize(): Invalid argument ('format' must be DataSizeFormat)"));
501}
502
507
509{
510 return qtDayToQmlDay(locale.firstDayOfWeek());
511}
512
513QList<QQmlLocale::DayOfWeek> QQmlLocaleValueType::weekDays() const
514{
515 const QList<Qt::DayOfWeek> days = locale.weekdays();
516 QList<QQmlLocale::DayOfWeek> result;
517 result.reserve(days.size());
518 for (Qt::DayOfWeek day : days)
519 result.append(qtDayToQmlDay(day));
520 return result;
521}
522
524{
525 Scope scope(args->v4engine());
526 const auto doThrow = [&](const QString &message) {
527 args->setReturnValue(scope.engine->throwError(message));
528 };
529
530 const int argc = args->length();
531
532 // toString()
533 Q_ASSERT(argc > 0);
534
535 if (argc > 3) {
536 doThrow(QString::fromLatin1("Locale: toString(): Expected 1-3 arguments, but received %1")
537 .arg(argc));
538 return;
539 }
540
541 QV4::ScopedValue arg0(scope, (*args)[0]);
542 if (arg0->isNumber()) {
543
544 // toString(int)
545 // toString(double)
546 Q_ASSERT(argc != 1);
547
548 QV4::ScopedValue arg1(scope, (*args)[1]);
549 if (!arg1->isString()) {
550 doThrow(QLatin1String("Locale: the second argument to the toString overload "
551 "whose first argument is a double should be a char"));
552 return;
553 }
554
555 // toString(double, const QString &)
556 // toString(double, const QString &, int)
557 Q_ASSERT(argc == 3);
558 Q_ASSERT(!QV4::ScopedValue(scope, (*args)[2])->isInteger());
559
560 doThrow(QLatin1String("Locale: the third argument to the toString overload "
561 "whose first argument is a double should be an int"));
562 return;
563 }
564
565 if (arg0->as<DateObject>()) {
566 if (argc > 2) {
567 doThrow(QString::fromLatin1(
568 "Locale: the toString() overload that takes a Date as its first "
569 "argument expects 1 or 2 arguments, but received %1").arg(argc));
570 return;
571 }
572
573 // toString(QDateTime)
574 Q_ASSERT(argc == 2);
575 QV4::ScopedValue arg1(scope, (*args)[1]);
576
577 // toString(QDateTime, QString)
578 Q_ASSERT(!arg1->isString());
579
580 // toString(QDateTime, QLocale::FormatType)
581 Q_ASSERT(!arg1->isNumber());
582
583 doThrow(QLatin1String("Locale: the second argument to the toString overloads whose "
584 "first argument is a Date should be a string or FormatType"));
585 return;
586 }
587
588 doThrow(QLatin1String("Locale: toString() expects either an int, double, "
589 "or Date as its first argument"));
590}
591
595
685{
686 if (localeName.isEmpty()) {
688 engine, nullptr, &QQmlLocaleValueType::staticMetaObject,
689 QMetaType::fromType<QLocale>());
690 }
691
692 QLocale qlocale(localeName);
694 engine, &qlocale, &QQmlLocaleValueType::staticMetaObject,
695 QMetaType::fromType<QLocale>());
696}
697
699{
700 engine->stringPrototype()->defineDefaultProperty(QStringLiteral("localeCompare"), method_localeCompare);
701}
702
704{
705 if (argc != 1 || (!argv[0].isString() && !argv[0].as<StringObject>()))
706 return QV4::StringPrototype::method_localeCompare(b, thisObject, argv, argc);
707
708 if (!thisObject->isString() && !thisObject->as<StringObject>())
709 return QV4::StringPrototype::method_localeCompare(b, thisObject, argv, argc);
710
711 QString thisString = thisObject->toQStringNoThrow();
712 QString thatString = argv[0].toQStringNoThrow();
713
714 return QV4::Encode(QString::localeAwareCompare(thisString, thatString));
715}
716
1029
1030#include "moc_qqmllocale_p.cpp"
\inmodule QtCore\reentrant
Definition qdatetime.h:283
static QDateTime currentDateTime()
This is an overloaded member function, provided for convenience. It differs from the above function o...
\inmodule QtCore \reentrant
Definition qdatetime.h:29
QDateTime startOfDay(const QTimeZone &zone) const
qsizetype length() const noexcept
Definition qlist.h:399
@ LongFormat
Definition qlocale.h:875
static void registerExtension(QV4::ExecutionEngine *engine)
QList< QQmlLocale::DayOfWeek > weekDays
Q_INVOKABLE void formattedDataSize(QQmlV4FunctionPtr args) const
Q_INVOKABLE QString toString() const
QQmlLocale::DayOfWeek firstDayOfWeek
static void registerExtension(QV4::ExecutionEngine *engine)
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
static QString fromLatin1(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:5871
qsizetype size() const noexcept
Returns the number of characters in this string.
Definition qstring.h:186
const QChar at(qsizetype i) const
Returns the character at the given index position in the string.
Definition qstring.h:1226
int localeAwareCompare(const QString &s) const
Definition qstring.cpp:6907
\inmodule QtCore \reentrant
Definition qdatetime.h:215
bool isValid() const
Returns true if the time is valid; otherwise returns false.
QDate date
[1]
Q_QML_EXPORT void registerStringLocaleCompare(QV4::ExecutionEngine *engine)
Q_QML_EXPORT QV4::ReturnedValue method_localeCompare(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
Q_QML_EXPORT QV4::ReturnedValue locale(QV4::ExecutionEngine *engine, const QString &localeName)
Provides locale specific properties and formatted data.
Combined button and popup list for selecting options.
quint64 ReturnedValue
static const void * symbol()
DayOfWeek
@ Sunday
#define qWarning
Definition qlogging.h:166
static bool isNumber(char s)
#define Q_QNAN
Definition qnumeric.h:81
GLboolean GLboolean GLboolean b
GLboolean r
[2]
GLuint GLsizei const GLchar * message
GLint GLsizei GLsizei GLenum format
GLdouble s
[6]
Definition qopenglext.h:235
GLuint GLfloat * val
GLuint GLuint GLuint GLuint arg1
GLuint GLuint GLuint GLuint GLuint GLuint GLuint arg2
GLuint64EXT * result
[6]
#define GET_LOCALE_DATA_RESOURCE(OBJECT)
static bool isLocaleObject(const QV4::Value &val)
#define THROW_ERROR(string)
static QQmlLocale::DayOfWeek qtDayToQmlDay(Qt::DayOfWeek day)
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
SSL_CTX int void * arg
QLatin1StringView QLatin1String
Definition qstringfwd.h:31
#define QStringLiteral(str)
unsigned int quint32
Definition qtypes.h:50
unsigned short quint16
Definition qtypes.h:48
long long qint64
Definition qtypes.h:60
#define RETURN_UNDEFINED()
#define RETURN_RESULT(r)
QJSValueList args
QJSEngine engine
[0]
static ReturnedValue method_toLocaleDateString(const FunctionObject *, const Value *thisObject, const Value *argv, int argc)
static ReturnedValue method_toLocaleTimeString(const FunctionObject *, const Value *thisObject, const Value *argv, int argc)
static void timezoneUpdated(ExecutionEngine *e)
static ReturnedValue method_toLocaleString(const FunctionObject *, const Value *thisObject, const Value *argv, int argc)
ReturnedValue throwError(const Value &value)
Heap::String * newString(char16_t c)
ReturnedValue asReturnedValue() const
Definition qv4value_p.h:342
static ReturnedValue method_toLocaleString(const FunctionObject *, const Value *thisObject, const Value *argv, int argc)
static ReturnedValue create(ExecutionEngine *engine, const void *data, const QMetaObject *metaObject, QMetaType type, Heap::Object *object, int property, Heap::ReferenceObject::Flags flags)
ExecutionEngine * engine
static ReturnedValue method_localeCompare(const FunctionObject *, const Value *thisObject, const Value *argv, int argc)
bool isString() const
Definition qv4value_p.h:284
int toInt32() const
Definition qv4value_p.h:353
double toNumber() const
Definition qv4value_p.h:323
const T * as() const
Definition qv4value_p.h:132
QString toQString() const
Definition qv4value.cpp:158
QString toQStringNoThrow() const
Definition qv4value.cpp:122
void wrapper()