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.runtime.regexp.joni;
  21 
  22 final class StackEntry {
  23     int type;
  24     private int E1, E2, E3, E4;
  25 
  26     // first union member
  27     /* byte code position */
  28     void setStatePCode(final int pcode) {
  29         E1 = pcode;
  30     }
  31     int getStatePCode() {
  32         return E1;
  33     }
  34     /* string position */
  35     void setStatePStr(final int pstr) {
  36         E2 = pstr;
  37     }
  38     int getStatePStr() {
  39         return E2;
  40     }
  41     /* previous char position of pstr */
  42     void setStatePStrPrev(final int pstrPrev) {
  43         E3 = pstrPrev;
  44     }
  45     int getStatePStrPrev() {
  46         return E3;
  47     }
  48 
  49     void setStateCheck(final int check) {
  50         E4 = check;
  51     }
  52     int getStateCheck() {
  53         return E4;
  54     }
  55 
  56     // second union member
  57     /* for OP_REPEAT_INC, OP_REPEAT_INC_NG */
  58     void setRepeatCount(final int count) {
  59         E1 = count;
  60     }
  61     int getRepeatCount() {
  62         return E1;
  63     }
  64     void decreaseRepeatCount() {
  65         E1--;
  66     }
  67     void increaseRepeatCount() {
  68         E1++;
  69     }
  70     /* byte code position (head of repeated target) */
  71     void setRepeatPCode(final int pcode) {
  72         E2 = pcode;
  73     }
  74     int getRepeatPCode() {
  75         return E2;
  76     }
  77     /* repeat id */
  78     void setRepeatNum(final int num) {
  79         E3 = num;
  80     }
  81     int getRepeatNum() {
  82         return E3;
  83     }
  84 
  85     // third union member
  86     /* index of stack */ /*int repeat_inc struct*/
  87     void setSi(final int si) {
  88         E1 = si;
  89     }
  90     int getSi() {
  91         return E1;
  92     }
  93 
  94     // fourth union member
  95     /* memory num */
  96     void setMemNum(final int num) {
  97         E1 = num;
  98     }
  99     int getMemNum() {
 100         return E1;
 101     }
 102     /* start/end position */
 103     void setMemPstr(final int pstr) {
 104         E2 = pstr;
 105     }
 106     int getMemPStr() {
 107         return E2;
 108     }
 109 
 110     /* Following information is set, if this stack type is MEM-START */
 111     /* prev. info (for backtrack  "(...)*" ) */
 112     void setMemStart(final int start) {
 113         E3 = start;
 114     }
 115     int getMemStart() {
 116         return E3;
 117     }
 118     /* prev. info (for backtrack  "(...)*" ) */
 119     void setMemEnd(final int end) {
 120         E4 = end;
 121     }
 122     int getMemEnd() {
 123         return E4;
 124     }
 125 
 126     // fifth union member
 127     /* null check id */
 128     void setNullCheckNum(final int num) {
 129         E1 = num;
 130     }
 131     int getNullCheckNum() {
 132         return E1;
 133     }
 134     /* start position */
 135     void setNullCheckPStr(final int pstr) {
 136         E2 = pstr;
 137     }
 138     int getNullCheckPStr() {
 139         return E2;
 140     }
 141 
 142     // sixth union member
 143     /* byte code position */
 144     void setCallFrameRetAddr(final int addr) {
 145         E1 = addr;
 146     }
 147     int getCallFrameRetAddr() {
 148         return E1;
 149     }
 150     /* null check id */
 151     void setCallFrameNum(final int num) {
 152         E2 = num;
 153     }
 154     int getCallFrameNum() {
 155         return E2;
 156     }
 157     /* string position */
 158     void setCallFramePStr(final int pstr) {
 159         E3 = pstr;
 160     }
 161     int getCallFramePStr() {
 162         return E3;
 163     }
 164 }