2 * Copyright (C) 2011, 2015 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 #include <wtf/Assertions.h>
35 // This enum tracks the current representation in which a value is being held.
36 // Values may be unboxed primitives (int32, double, or cell), or boxed as a JSValue.
37 // For boxed values, we may know the type of boxing that has taken place.
38 // (May also need bool, array, object, string types!)
42 DataFormatInt52
= 2, // Int52's are left-shifted by 16 by default.
43 DataFormatStrictInt52
= 3, // "Strict" Int52 means it's not shifted.
45 DataFormatBoolean
= 5,
47 DataFormatStorage
= 7,
49 DataFormatJSInt32
= DataFormatJS
| DataFormatInt32
,
50 DataFormatJSDouble
= DataFormatJS
| DataFormatDouble
,
51 DataFormatJSCell
= DataFormatJS
| DataFormatCell
,
52 DataFormatJSBoolean
= DataFormatJS
| DataFormatBoolean
,
54 // Marker deliminating ordinary data formats and OSR-only data formats.
55 DataFormatOSRMarker
= 32,
57 // Special data formats used only for OSR.
58 DataFormatDead
= 33, // Implies jsUndefined().
61 inline const char* dataFormatToString(DataFormat dataFormat
)
70 case DataFormatStrictInt52
:
72 case DataFormatDouble
:
76 case DataFormatBoolean
:
78 case DataFormatStorage
:
82 case DataFormatJSInt32
:
84 case DataFormatJSDouble
:
86 case DataFormatJSCell
:
88 case DataFormatJSBoolean
:
93 RELEASE_ASSERT_NOT_REACHED();
98 inline bool isJSFormat(DataFormat format
, DataFormat expectedFormat
)
100 ASSERT(expectedFormat
& DataFormatJS
);
101 return (format
| DataFormatJS
) == expectedFormat
;
104 inline bool isJSInt32(DataFormat format
)
106 return isJSFormat(format
, DataFormatJSInt32
);
109 inline bool isJSDouble(DataFormat format
)
111 return isJSFormat(format
, DataFormatJSDouble
);
114 inline bool isJSCell(DataFormat format
)
116 return isJSFormat(format
, DataFormatJSCell
);
119 inline bool isJSBoolean(DataFormat format
)
121 return isJSFormat(format
, DataFormatJSBoolean
);
126 #endif // DataFormat_h