]> git.saurik.com Git - apple/javascriptcore.git/blame - dfg/DFGDoubleFormatState.h
JavaScriptCore-1097.3.tar.gz
[apple/javascriptcore.git] / dfg / DFGDoubleFormatState.h
CommitLineData
6fe7ccc8
A
1/*
2 * Copyright (C) 2012 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
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.
12 *
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.
24 */
25
26#ifndef DFGDoubleFormatState_h
27#define DFGDoubleFormatState_h
28
29namespace JSC { namespace DFG {
30
31enum DoubleFormatState {
32 EmptyDoubleFormatState, // bottom
33 UsingDoubleFormat,
34 NotUsingDoubleFormat,
35 CantUseDoubleFormat // top
36};
37
38inline DoubleFormatState mergeDoubleFormatStates(DoubleFormatState a, DoubleFormatState b)
39{
40 switch (a) {
41 case EmptyDoubleFormatState:
42 return b;
43 case UsingDoubleFormat:
44 switch (b) {
45 case EmptyDoubleFormatState:
46 case UsingDoubleFormat:
47 return UsingDoubleFormat;
48 case NotUsingDoubleFormat:
49 case CantUseDoubleFormat:
50 return CantUseDoubleFormat;
51 }
52 case NotUsingDoubleFormat:
53 switch (b) {
54 case EmptyDoubleFormatState:
55 case NotUsingDoubleFormat:
56 return NotUsingDoubleFormat;
57 case UsingDoubleFormat:
58 case CantUseDoubleFormat:
59 return CantUseDoubleFormat;
60 }
61 case CantUseDoubleFormat:
62 return CantUseDoubleFormat;
63 }
64 ASSERT_NOT_REACHED();
65 return CantUseDoubleFormat;
66}
67
68inline bool mergeDoubleFormatState(DoubleFormatState& dest, DoubleFormatState src)
69{
70 DoubleFormatState newState = mergeDoubleFormatStates(dest, src);
71 if (newState == dest)
72 return false;
73 dest = newState;
74 return true;
75}
76
77inline const char* doubleFormatStateToString(DoubleFormatState state)
78{
79 switch (state) {
80 case EmptyDoubleFormatState:
81 return "Empty";
82 case UsingDoubleFormat:
83 return "DoubleFormat";
84 case NotUsingDoubleFormat:
85 return "ValueFormat";
86 case CantUseDoubleFormat:
87 return "ForceValue";
88 }
89 ASSERT_NOT_REACHED();
90 return 0;
91}
92
93} } // namespace JSC::DFG
94
95#endif // DFGDoubleFormatState_h
96