109
JSValuePtr jsNumberCell(JSGlobalData*, double);
121
JSValue jsNumberCell(JSGlobalData*, double);
111
inline bool isNumberCell(JSValuePtr v)
123
inline bool isNumberCell(JSValue v)
113
125
return v.isCell() && v.asCell()->isNumber();
116
inline JSNumberCell* asNumberCell(JSValuePtr v)
128
inline JSNumberCell* asNumberCell(JSValue v)
118
130
ASSERT(isNumberCell(v));
119
131
return static_cast<JSNumberCell*>(v.asCell());
122
ALWAYS_INLINE JSValuePtr jsNumber(ExecState* exec, double d)
124
JSValuePtr v = JSImmediate::from(d);
125
return v ? v : jsNumberCell(exec, d);
128
ALWAYS_INLINE JSValuePtr jsNumber(ExecState* exec, int i)
130
JSValuePtr v = JSImmediate::from(i);
131
return v ? v : jsNumberCell(exec, i);
134
ALWAYS_INLINE JSValuePtr jsNumber(ExecState* exec, unsigned i)
136
JSValuePtr v = JSImmediate::from(i);
137
return v ? v : jsNumberCell(exec, i);
140
ALWAYS_INLINE JSValuePtr jsNumber(ExecState* exec, long i)
142
JSValuePtr v = JSImmediate::from(i);
143
return v ? v : jsNumberCell(exec, i);
146
ALWAYS_INLINE JSValuePtr jsNumber(ExecState* exec, unsigned long i)
148
JSValuePtr v = JSImmediate::from(i);
149
return v ? v : jsNumberCell(exec, i);
152
ALWAYS_INLINE JSValuePtr jsNumber(ExecState* exec, long long i)
154
JSValuePtr v = JSImmediate::from(i);
155
return v ? v : jsNumberCell(exec, static_cast<double>(i));
158
ALWAYS_INLINE JSValuePtr jsNumber(ExecState* exec, unsigned long long i)
160
JSValuePtr v = JSImmediate::from(i);
161
return v ? v : jsNumberCell(exec, static_cast<double>(i));
164
ALWAYS_INLINE JSValuePtr jsNumber(JSGlobalData* globalData, double d)
166
JSValuePtr v = JSImmediate::from(d);
167
return v ? v : jsNumberCell(globalData, d);
170
ALWAYS_INLINE JSValuePtr jsNumber(JSGlobalData* globalData, int i)
172
JSValuePtr v = JSImmediate::from(i);
173
return v ? v : jsNumberCell(globalData, i);
176
ALWAYS_INLINE JSValuePtr jsNumber(JSGlobalData* globalData, unsigned i)
178
JSValuePtr v = JSImmediate::from(i);
179
return v ? v : jsNumberCell(globalData, i);
182
ALWAYS_INLINE JSValuePtr jsNumber(JSGlobalData* globalData, long i)
184
JSValuePtr v = JSImmediate::from(i);
185
return v ? v : jsNumberCell(globalData, i);
188
ALWAYS_INLINE JSValuePtr jsNumber(JSGlobalData* globalData, unsigned long i)
190
JSValuePtr v = JSImmediate::from(i);
191
return v ? v : jsNumberCell(globalData, i);
194
ALWAYS_INLINE JSValuePtr jsNumber(JSGlobalData* globalData, long long i)
196
JSValuePtr v = JSImmediate::from(i);
197
return v ? v : jsNumberCell(globalData, static_cast<double>(i));
200
ALWAYS_INLINE JSValuePtr jsNumber(JSGlobalData* globalData, unsigned long long i)
202
JSValuePtr v = JSImmediate::from(i);
203
return v ? v : jsNumberCell(globalData, static_cast<double>(i));
206
inline bool JSValuePtr::isDoubleNumber() const
135
inline JSValue::JSValue(ExecState* exec, double d)
137
JSValue v = JSImmediate::from(d);
138
*this = v ? v : jsNumberCell(exec, d);
141
inline JSValue::JSValue(ExecState* exec, int i)
143
JSValue v = JSImmediate::from(i);
144
*this = v ? v : jsNumberCell(exec, i);
147
inline JSValue::JSValue(ExecState* exec, unsigned i)
149
JSValue v = JSImmediate::from(i);
150
*this = v ? v : jsNumberCell(exec, i);
153
inline JSValue::JSValue(ExecState* exec, long i)
155
JSValue v = JSImmediate::from(i);
156
*this = v ? v : jsNumberCell(exec, i);
159
inline JSValue::JSValue(ExecState* exec, unsigned long i)
161
JSValue v = JSImmediate::from(i);
162
*this = v ? v : jsNumberCell(exec, i);
165
inline JSValue::JSValue(ExecState* exec, long long i)
167
JSValue v = JSImmediate::from(i);
168
*this = v ? v : jsNumberCell(exec, static_cast<double>(i));
171
inline JSValue::JSValue(ExecState* exec, unsigned long long i)
173
JSValue v = JSImmediate::from(i);
174
*this = v ? v : jsNumberCell(exec, static_cast<double>(i));
177
inline JSValue::JSValue(JSGlobalData* globalData, double d)
179
JSValue v = JSImmediate::from(d);
180
*this = v ? v : jsNumberCell(globalData, d);
183
inline JSValue::JSValue(JSGlobalData* globalData, int i)
185
JSValue v = JSImmediate::from(i);
186
*this = v ? v : jsNumberCell(globalData, i);
189
inline JSValue::JSValue(JSGlobalData* globalData, unsigned i)
191
JSValue v = JSImmediate::from(i);
192
*this = v ? v : jsNumberCell(globalData, i);
195
inline JSValue::JSValue(JSGlobalData* globalData, long i)
197
JSValue v = JSImmediate::from(i);
198
*this = v ? v : jsNumberCell(globalData, i);
201
inline JSValue::JSValue(JSGlobalData* globalData, unsigned long i)
203
JSValue v = JSImmediate::from(i);
204
*this = v ? v : jsNumberCell(globalData, i);
207
inline JSValue::JSValue(JSGlobalData* globalData, long long i)
209
JSValue v = JSImmediate::from(i);
210
*this = v ? v : jsNumberCell(globalData, static_cast<double>(i));
213
inline JSValue::JSValue(JSGlobalData* globalData, unsigned long long i)
215
JSValue v = JSImmediate::from(i);
216
*this = v ? v : jsNumberCell(globalData, static_cast<double>(i));
219
inline bool JSValue::isDoubleNumber() const
208
221
return isNumberCell(asValue());
211
inline double JSValuePtr::getDoubleNumber() const
224
inline double JSValue::getDoubleNumber() const
213
226
return asNumberCell(asValue())->value();
216
inline bool JSValuePtr::isNumber() const
229
inline bool JSValue::isNumber() const
218
231
return JSImmediate::isNumber(asValue()) || isDoubleNumber();
221
inline double JSValuePtr::uncheckedGetNumber() const
234
inline double JSValue::uncheckedGetNumber() const
223
236
ASSERT(isNumber());
224
237
return JSImmediate::isImmediate(asValue()) ? JSImmediate::toDouble(asValue()) : getDoubleNumber();
240
inline bool JSValue::isAPIMangledNumber()
243
return JSImmediate::isImmediate(asValue()) ? false : asNumberCell(asValue())->isAPIMangledNumber();
229
ALWAYS_INLINE JSValuePtr jsNumber(ExecState*, double d)
231
JSValuePtr v = JSImmediate::from(d);
236
ALWAYS_INLINE JSValuePtr jsNumber(ExecState*, int i)
238
JSValuePtr v = JSImmediate::from(i);
243
ALWAYS_INLINE JSValuePtr jsNumber(ExecState*, unsigned i)
245
JSValuePtr v = JSImmediate::from(i);
250
ALWAYS_INLINE JSValuePtr jsNumber(ExecState*, long i)
252
JSValuePtr v = JSImmediate::from(i);
257
ALWAYS_INLINE JSValuePtr jsNumber(ExecState*, unsigned long i)
259
JSValuePtr v = JSImmediate::from(i);
264
ALWAYS_INLINE JSValuePtr jsNumber(ExecState*, long long i)
266
JSValuePtr v = JSImmediate::from(static_cast<double>(i));
271
ALWAYS_INLINE JSValuePtr jsNumber(ExecState*, unsigned long long i)
273
JSValuePtr v = JSImmediate::from(static_cast<double>(i));
278
ALWAYS_INLINE JSValuePtr jsNumber(JSGlobalData*, double d)
280
JSValuePtr v = JSImmediate::from(d);
285
ALWAYS_INLINE JSValuePtr jsNumber(JSGlobalData*, int i)
287
JSValuePtr v = JSImmediate::from(i);
292
ALWAYS_INLINE JSValuePtr jsNumber(JSGlobalData*, unsigned i)
294
JSValuePtr v = JSImmediate::from(i);
299
ALWAYS_INLINE JSValuePtr jsNumber(JSGlobalData*, long i)
301
JSValuePtr v = JSImmediate::from(i);
306
ALWAYS_INLINE JSValuePtr jsNumber(JSGlobalData*, unsigned long i)
308
JSValuePtr v = JSImmediate::from(i);
313
ALWAYS_INLINE JSValuePtr jsNumber(JSGlobalData*, long long i)
315
JSValuePtr v = JSImmediate::from(static_cast<double>(i));
320
ALWAYS_INLINE JSValuePtr jsNumber(JSGlobalData*, unsigned long long i)
322
JSValuePtr v = JSImmediate::from(static_cast<double>(i));
327
inline bool JSValuePtr::isDoubleNumber() const
248
inline JSValue::JSValue(ExecState*, double d)
250
JSValue v = JSImmediate::from(d);
255
inline JSValue::JSValue(ExecState*, int i)
257
JSValue v = JSImmediate::from(i);
262
inline JSValue::JSValue(ExecState*, unsigned i)
264
JSValue v = JSImmediate::from(i);
269
inline JSValue::JSValue(ExecState*, long i)
271
JSValue v = JSImmediate::from(i);
276
inline JSValue::JSValue(ExecState*, unsigned long i)
278
JSValue v = JSImmediate::from(i);
283
inline JSValue::JSValue(ExecState*, long long i)
285
JSValue v = JSImmediate::from(static_cast<double>(i));
290
inline JSValue::JSValue(ExecState*, unsigned long long i)
292
JSValue v = JSImmediate::from(static_cast<double>(i));
297
inline JSValue::JSValue(JSGlobalData*, double d)
299
JSValue v = JSImmediate::from(d);
304
inline JSValue::JSValue(JSGlobalData*, int i)
306
JSValue v = JSImmediate::from(i);
311
inline JSValue::JSValue(JSGlobalData*, unsigned i)
313
JSValue v = JSImmediate::from(i);
318
inline JSValue::JSValue(JSGlobalData*, long i)
320
JSValue v = JSImmediate::from(i);
325
inline JSValue::JSValue(JSGlobalData*, unsigned long i)
327
JSValue v = JSImmediate::from(i);
332
inline JSValue::JSValue(JSGlobalData*, long long i)
334
JSValue v = JSImmediate::from(static_cast<double>(i));
339
inline JSValue::JSValue(JSGlobalData*, unsigned long long i)
341
JSValue v = JSImmediate::from(static_cast<double>(i));
346
inline bool JSValue::isDoubleNumber() const
329
348
return JSImmediate::isDoubleNumber(asValue());
332
inline double JSValuePtr::getDoubleNumber() const
351
inline double JSValue::getDoubleNumber() const
334
353
return JSImmediate::doubleValue(asValue());
337
inline bool JSValuePtr::isNumber() const
356
inline bool JSValue::isNumber() const
339
358
return JSImmediate::isNumber(asValue());
342
inline double JSValuePtr::uncheckedGetNumber() const
361
inline double JSValue::uncheckedGetNumber() const
344
363
ASSERT(isNumber());
345
364
return JSImmediate::toDouble(asValue());
350
ALWAYS_INLINE JSValuePtr jsNumber(ExecState*, char i)
352
ASSERT(JSImmediate::from(i));
353
return JSImmediate::from(i);
356
ALWAYS_INLINE JSValuePtr jsNumber(ExecState*, unsigned char i)
358
ASSERT(JSImmediate::from(i));
359
return JSImmediate::from(i);
362
ALWAYS_INLINE JSValuePtr jsNumber(ExecState*, short i)
364
ASSERT(JSImmediate::from(i));
365
return JSImmediate::from(i);
368
ALWAYS_INLINE JSValuePtr jsNumber(ExecState*, unsigned short i)
370
ASSERT(JSImmediate::from(i));
371
return JSImmediate::from(i);
374
ALWAYS_INLINE JSValuePtr jsNumber(JSGlobalData*, short i)
376
ASSERT(JSImmediate::from(i));
377
return JSImmediate::from(i);
380
ALWAYS_INLINE JSValuePtr jsNumber(JSGlobalData*, unsigned short i)
382
ASSERT(JSImmediate::from(i));
383
return JSImmediate::from(i);
386
inline JSValuePtr jsNaN(ExecState* exec)
369
inline JSValue::JSValue(ExecState*, char i)
371
ASSERT(JSImmediate::from(i));
372
*this = JSImmediate::from(i);
375
inline JSValue::JSValue(ExecState*, unsigned char i)
377
ASSERT(JSImmediate::from(i));
378
*this = JSImmediate::from(i);
381
inline JSValue::JSValue(ExecState*, short i)
383
ASSERT(JSImmediate::from(i));
384
*this = JSImmediate::from(i);
387
inline JSValue::JSValue(ExecState*, unsigned short i)
389
ASSERT(JSImmediate::from(i));
390
*this = JSImmediate::from(i);
393
inline JSValue::JSValue(JSGlobalData*, char i)
395
ASSERT(JSImmediate::from(i));
396
*this = JSImmediate::from(i);
399
inline JSValue::JSValue(JSGlobalData*, unsigned char i)
401
ASSERT(JSImmediate::from(i));
402
*this = JSImmediate::from(i);
405
inline JSValue::JSValue(JSGlobalData*, short i)
407
ASSERT(JSImmediate::from(i));
408
*this = JSImmediate::from(i);
411
inline JSValue::JSValue(JSGlobalData*, unsigned short i)
413
ASSERT(JSImmediate::from(i));
414
*this = JSImmediate::from(i);
417
inline JSValue jsNaN(ExecState* exec)
388
419
return jsNumber(exec, NaN);
391
inline JSValuePtr jsNaN(JSGlobalData* globalData)
422
inline JSValue jsNaN(JSGlobalData* globalData)
393
424
return jsNumber(globalData, NaN);
396
427
// --- JSValue inlines ----------------------------
398
ALWAYS_INLINE JSValuePtr JSValuePtr::toJSNumber(ExecState* exec) const
429
ALWAYS_INLINE JSValue JSValue::toJSNumber(ExecState* exec) const
400
431
return isNumber() ? asValue() : jsNumber(exec, this->toNumber(exec));
403
inline bool JSValuePtr::getNumber(double &result) const
434
inline bool JSValue::getNumber(double &result) const
405
436
if (isInt32Fast())
406
437
result = getInt32Fast();