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 }