00001
00002
00003 package org.objectweb.jonas_ejb.deployment.ejbql;
00004
00005 class JJTEJBQLState {
00006 private java.util.Stack nodes;
00007 private java.util.Stack marks;
00008
00009 private int sp;
00010 private int mk;
00011 private boolean node_created;
00012
00013 JJTEJBQLState() {
00014 nodes = new java.util.Stack();
00015 marks = new java.util.Stack();
00016 sp = 0;
00017 mk = 0;
00018 }
00019
00020
00021
00022
00023 boolean nodeCreated() {
00024 return node_created;
00025 }
00026
00027
00028
00029 void reset() {
00030 nodes.removeAllElements();
00031 marks.removeAllElements();
00032 sp = 0;
00033 mk = 0;
00034 }
00035
00036
00037
00038 Node rootNode() {
00039 return (Node)nodes.elementAt(0);
00040 }
00041
00042
00043 void pushNode(Node n) {
00044 nodes.push(n);
00045 ++sp;
00046 }
00047
00048
00049
00050 Node popNode() {
00051 if (--sp < mk) {
00052 mk = ((Integer)marks.pop()).intValue();
00053 }
00054 return (Node)nodes.pop();
00055 }
00056
00057
00058 Node peekNode() {
00059 return (Node)nodes.peek();
00060 }
00061
00062
00063
00064 int nodeArity() {
00065 return sp - mk;
00066 }
00067
00068
00069 void clearNodeScope(Node n) {
00070 while (sp > mk) {
00071 popNode();
00072 }
00073 mk = ((Integer)marks.pop()).intValue();
00074 }
00075
00076
00077 void openNodeScope(Node n) {
00078 marks.push(new Integer(mk));
00079 mk = sp;
00080 n.jjtOpen();
00081 }
00082
00083
00084
00085
00086
00087
00088 void closeNodeScope(Node n, int num) {
00089 mk = ((Integer)marks.pop()).intValue();
00090 while (num-- > 0) {
00091 Node c = popNode();
00092 c.jjtSetParent(n);
00093 n.jjtAddChild(c, num);
00094 }
00095 n.jjtClose();
00096 pushNode(n);
00097 node_created = true;
00098 }
00099
00100
00101
00102
00103
00104
00105
00106 void closeNodeScope(Node n, boolean condition) {
00107 if (condition) {
00108 int a = nodeArity();
00109 mk = ((Integer)marks.pop()).intValue();
00110 while (a-- > 0) {
00111 Node c = popNode();
00112 c.jjtSetParent(n);
00113 n.jjtAddChild(c, a);
00114 }
00115 n.jjtClose();
00116 pushNode(n);
00117 node_created = true;
00118 } else {
00119 mk = ((Integer)marks.pop()).intValue();
00120 node_created = false;
00121 }
00122 }
00123 }