2 * Copyright (C) 2011 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().
59 DataFormatArguments
= 34 // Implies that the arguments object must be reified.
62 inline const char* dataFormatToString(DataFormat dataFormat
)
71 case DataFormatStrictInt52
:
73 case DataFormatDouble
:
77 case DataFormatBoolean
:
79 case DataFormatStorage
:
83 case DataFormatJSInt32
:
85 case DataFormatJSDouble
:
87 case DataFormatJSCell
:
89 case DataFormatJSBoolean
:
93 case DataFormatArguments
:
96 RELEASE_ASSERT_NOT_REACHED();
101 inline bool isJSFormat(DataFormat format
, DataFormat expectedFormat
)
103 ASSERT(expectedFormat
& DataFormatJS
);
104 return (format
| DataFormatJS
) == expectedFormat
;
107 inline bool isJSInt32(DataFormat format
)
109 return isJSFormat(format
, DataFormatJSInt32
);
112 inline bool isJSDouble(DataFormat format
)
114 return isJSFormat(format
, DataFormatJSDouble
);
117 inline bool isJSCell(DataFormat format
)
119 return isJSFormat(format
, DataFormatJSCell
);
122 inline bool isJSBoolean(DataFormat format
)
124 return isJSFormat(format
, DataFormatJSBoolean
);
129 #endif // DataFormat_h