1/*
2 * Permission is hereby granted, free of charge, to any person obtaining a copy of
3 * this software and associated documentation files (the "Software"), to deal in
4 * the Software without restriction, including without limitation the rights to
5 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
6 * of the Software, and to permit persons to whom the Software is furnished to do
7 * so, subject to the following conditions:
8 *
9 * The above copyright notice and this permission notice shall be included in all
10 * copies or substantial portions of the Software.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
13 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
16 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
17 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
18 * SOFTWARE.
19 */
20package jdk.nashorn.internal.runtime.regexp.joni.ast;
21
22import jdk.nashorn.internal.runtime.regexp.joni.constants.NodeStatus;
23
24@SuppressWarnings("javadoc")
25public abstract class StateNode extends Node implements NodeStatus {
26    protected int state;
27
28    @Override
29    public String toString(final int level) {
30        return "\n  state: " + stateToString();
31    }
32
33    public String stateToString() {
34        final StringBuilder states = new StringBuilder();
35        if (isMinFixed()) states.append("MIN_FIXED ");
36        if (isMaxFixed()) states.append("MAX_FIXED ");
37        if (isMark1()) states.append("MARK1 ");
38        if (isMark2()) states.append("MARK2 ");
39        if (isMemBackrefed()) states.append("MEM_BACKREFED ");
40        if (isStopBtSimpleRepeat()) states.append("STOP_BT_SIMPLE_REPEAT ");
41        if (isRecursion()) states.append("RECURSION ");
42        if (isCalled()) states.append("CALLED ");
43        if (isAddrFixed()) states.append("ADDR_FIXED ");
44        if (isInRepeat()) states.append("IN_REPEAT ");
45        if (isNestLevel()) states.append("NEST_LEVEL ");
46        if (isByNumber()) states.append("BY_NUMBER ");
47
48        return states.toString();
49    }
50
51    public boolean isMinFixed() {
52        return (state & NST_MIN_FIXED) != 0;
53    }
54
55    public void setMinFixed() {
56        state |= NST_MIN_FIXED;
57    }
58
59    public boolean isMaxFixed() {
60        return (state & NST_MAX_FIXED) != 0;
61    }
62
63    public void setMaxFixed() {
64        state |= NST_MAX_FIXED;
65    }
66
67    public boolean isCLenFixed() {
68        return (state & NST_CLEN_FIXED) != 0;
69    }
70
71    public void setCLenFixed() {
72        state |= NST_CLEN_FIXED;
73    }
74
75    public boolean isMark1() {
76        return (state & NST_MARK1) != 0;
77    }
78
79    public void setMark1() {
80        state |= NST_MARK1;
81    }
82
83    public boolean isMark2() {
84        return (state & NST_MARK2) != 0;
85    }
86
87    public void setMark2() {
88        state |= NST_MARK2;
89    }
90
91    public void clearMark2() {
92        state &= ~NST_MARK2;
93    }
94
95    public boolean isMemBackrefed() {
96        return (state & NST_MEM_BACKREFED) != 0;
97    }
98
99    public void setMemBackrefed() {
100        state |= NST_MEM_BACKREFED;
101    }
102
103    public boolean isStopBtSimpleRepeat() {
104        return (state & NST_STOP_BT_SIMPLE_REPEAT) != 0;
105    }
106
107    public void setStopBtSimpleRepeat() {
108        state |= NST_STOP_BT_SIMPLE_REPEAT;
109    }
110
111    public boolean isRecursion() {
112        return (state & NST_RECURSION) != 0;
113    }
114
115    public void setRecursion() {
116        state |= NST_RECURSION;
117    }
118
119    public boolean isCalled() {
120        return (state & NST_CALLED) != 0;
121    }
122
123    public void setCalled() {
124        state |= NST_CALLED;
125    }
126
127    public boolean isAddrFixed() {
128        return (state & NST_ADDR_FIXED) != 0;
129    }
130
131    public void setAddrFixed() {
132        state |= NST_ADDR_FIXED;
133    }
134
135    public boolean isInRepeat() {
136        return (state & NST_IN_REPEAT) != 0;
137    }
138
139    public void setInRepeat() {
140        state |= NST_IN_REPEAT;
141    }
142
143    public boolean isNestLevel() {
144        return (state & NST_NEST_LEVEL) != 0;
145    }
146
147    public void setNestLevel() {
148        state |= NST_NEST_LEVEL;
149    }
150
151    public boolean isByNumber() {
152        return (state & NST_BY_NUMBER) != 0;
153    }
154
155    public void setByNumber() {
156        state |= NST_BY_NUMBER;
157    }
158
159}
160