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 */ 20 package jdk.nashorn.internal.joni.ast; 21 22 import jdk.nashorn.internal.joni.constants.NodeStatus; 23 24 public abstract class StateNode extends Node implements NodeStatus { 25 protected int state; 26 27 @Override 28 public String toString(int level) { 29 return "\n state: " + stateToString(); 30 } 31 32 public String stateToString() { 33 StringBuilder states = new StringBuilder(); 34 if (isMinFixed()) states.append("MIN_FIXED "); 35 if (isMaxFixed()) states.append("MAX_FIXED "); 36 if (isMark1()) states.append("MARK1 "); 37 if (isMark2()) states.append("MARK2 "); 38 if (isMemBackrefed()) states.append("MEM_BACKREFED "); 39 if (isStopBtSimpleRepeat()) states.append("STOP_BT_SIMPLE_REPEAT "); 40 if (isRecursion()) states.append("RECURSION "); 41 if (isCalled()) states.append("CALLED "); 42 if (isAddrFixed()) states.append("ADDR_FIXED "); 43 if (isNamedGroup()) states.append("NAMED_GROUP "); 44 if (isNameRef()) states.append("NAME_REF "); 45 if (isInRepeat()) states.append("IN_REPEAT "); 46 if (isNestLevel()) states.append("NEST_LEVEL "); 47 if (isByNumber()) states.append("BY_NUMBER "); 48 49 return states.toString(); 50 } 51 52 public boolean isMinFixed() { 53 return (state & NST_MIN_FIXED) != 0; 54 } 55 56 public void setMinFixed() { 57 state |= NST_MIN_FIXED; 58 } 59 60 public void clearMinFixed() { 61 state &= ~NST_MIN_FIXED; 62 } 63 64 public boolean isMaxFixed() { 65 return (state & NST_MAX_FIXED) != 0; 66 } 67 68 public void setMaxFixed() { 69 state |= NST_MAX_FIXED; 70 } 71 72 public void clearMaxFixed() { 73 state &= ~NST_MAX_FIXED; 74 } 75 76 public boolean isCLenFixed() { 77 return (state & NST_CLEN_FIXED) != 0; 78 } 79 80 public void setCLenFixed() { 81 state |= NST_CLEN_FIXED; 82 } 83 84 public void clearCLenFixed() { 85 state &= ~NST_CLEN_FIXED; 86 } 87 88 public boolean isMark1() { 89 return (state & NST_MARK1) != 0; 90 } 91 92 public void setMark1() { 93 state |= NST_MARK1; 94 } 95 96 public void clearMark1() { 97 state &= ~NST_MARK1; 98 } 99 100 public boolean isMark2() { 101 return (state & NST_MARK2) != 0; 102 } 103 104 public void setMark2() { 105 state |= NST_MARK2; 106 } 107 108 public void clearMark2() { 109 state &= ~NST_MARK2; 110 } 111 112 public boolean isMemBackrefed() { 113 return (state & NST_MEM_BACKREFED) != 0; 114 } 115 116 public void setMemBackrefed() { 117 state |= NST_MEM_BACKREFED; 118 } 119 120 public void clearMemBackrefed() { 121 state &= ~NST_MEM_BACKREFED; 122 } 123 124 public boolean isStopBtSimpleRepeat() { 125 return (state & NST_STOP_BT_SIMPLE_REPEAT) != 0; 126 } 127 128 public void setStopBtSimpleRepeat() { 129 state |= NST_STOP_BT_SIMPLE_REPEAT; 130 } 131 132 public void clearStopBtSimpleRepeat() { 133 state &= ~NST_STOP_BT_SIMPLE_REPEAT; 134 } 135 136 public boolean isRecursion() { 137 return (state & NST_RECURSION) != 0; 138 } 139 140 public void setRecursion() { 141 state |= NST_RECURSION; 142 } 143 144 public void clearRecursion() { 145 state &= ~NST_RECURSION; 146 } 147 148 public boolean isCalled() { 149 return (state & NST_CALLED) != 0; 150 } 151 152 public void setCalled() { 153 state |= NST_CALLED; 154 } 155 156 public void clearCAlled() { 157 state &= ~NST_CALLED; 158 } 159 160 public boolean isAddrFixed() { 161 return (state & NST_ADDR_FIXED) != 0; 162 } 163 164 public void setAddrFixed() { 165 state |= NST_ADDR_FIXED; 166 } 167 168 public void clearAddrFixed() { 169 state &= ~NST_ADDR_FIXED; 170 } 171 172 public boolean isNamedGroup() { 173 return (state & NST_NAMED_GROUP) != 0; 174 } 175 176 public void setNamedGroup() { 177 state |= NST_NAMED_GROUP; 178 } 179 180 public void clearNamedGroup() { 181 state &= ~NST_NAMED_GROUP; 182 } 183 184 public boolean isNameRef() { 185 return (state & NST_NAME_REF) != 0; 186 } 187 188 public void setNameRef() { 189 state |= NST_NAME_REF; 190 } 191 192 public void clearNameRef() { 193 state &= ~NST_NAME_REF; 194 } 195 196 public boolean isInRepeat() { 197 return (state & NST_IN_REPEAT) != 0; 198 } 199 200 public void setInRepeat() { 201 state |= NST_IN_REPEAT; 202 } 203 204 public void clearInRepeat() { 205 state &= ~NST_IN_REPEAT; 206 } 207 208 public boolean isNestLevel() { 209 return (state & NST_NEST_LEVEL) != 0; 210 } 211 212 public void setNestLevel() { 213 state |= NST_NEST_LEVEL; 214 } 215 216 public void clearNestLevel() { 217 state &= ~NST_NEST_LEVEL; 218 } 219 220 public boolean isByNumber() { 221 return (state & NST_BY_NUMBER) != 0; 222 } 223 224 public void setByNumber() { 225 state |= NST_BY_NUMBER; 226 } 227 228 public void clearByNumber() { 229 state &= ~NST_BY_NUMBER; 230 } 231 232 }