<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    /*<a name="line.1"></a>
<FONT color="green">002</FONT>     * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<FONT color="green">003</FONT>     * or more contributor license agreements. See the NOTICE file<a name="line.3"></a>
<FONT color="green">004</FONT>     * distributed with this work for additional information<a name="line.4"></a>
<FONT color="green">005</FONT>     * regarding copyright ownership. The ASF licenses this file<a name="line.5"></a>
<FONT color="green">006</FONT>     * to you under the Apache License, Version 2.0 (the  "License");<a name="line.6"></a>
<FONT color="green">007</FONT>     * you may not use this file except in compliance with the License.<a name="line.7"></a>
<FONT color="green">008</FONT>     * You may obtain a copy of the License at<a name="line.8"></a>
<FONT color="green">009</FONT>     *<a name="line.9"></a>
<FONT color="green">010</FONT>     *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<FONT color="green">011</FONT>     *<a name="line.11"></a>
<FONT color="green">012</FONT>     * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
<FONT color="green">013</FONT>     * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
<FONT color="green">014</FONT>     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
<FONT color="green">015</FONT>     * See the License for the specific language governing permissions and<a name="line.15"></a>
<FONT color="green">016</FONT>     * limitations under the License.<a name="line.16"></a>
<FONT color="green">017</FONT>     */<a name="line.17"></a>
<FONT color="green">018</FONT>    /*<a name="line.18"></a>
<FONT color="green">019</FONT>     * $Id: StepPattern.java 468650 2006-10-28 07:03:30Z minchau $<a name="line.19"></a>
<FONT color="green">020</FONT>     */<a name="line.20"></a>
<FONT color="green">021</FONT>    <a name="line.21"></a>
<FONT color="green">022</FONT>    package org.apache.xalan.xsltc.compiler;<a name="line.22"></a>
<FONT color="green">023</FONT>    <a name="line.23"></a>
<FONT color="green">024</FONT>    import java.util.Vector;<a name="line.24"></a>
<FONT color="green">025</FONT>    <a name="line.25"></a>
<FONT color="green">026</FONT>    import org.apache.bcel.classfile.Field;<a name="line.26"></a>
<FONT color="green">027</FONT>    import org.apache.bcel.generic.ALOAD;<a name="line.27"></a>
<FONT color="green">028</FONT>    import org.apache.bcel.generic.ASTORE;<a name="line.28"></a>
<FONT color="green">029</FONT>    import org.apache.bcel.generic.BranchHandle;<a name="line.29"></a>
<FONT color="green">030</FONT>    import org.apache.bcel.generic.ConstantPoolGen;<a name="line.30"></a>
<FONT color="green">031</FONT>    import org.apache.bcel.generic.GETFIELD;<a name="line.31"></a>
<FONT color="green">032</FONT>    import org.apache.bcel.generic.GOTO;<a name="line.32"></a>
<FONT color="green">033</FONT>    import org.apache.bcel.generic.GOTO_W;<a name="line.33"></a>
<FONT color="green">034</FONT>    import org.apache.bcel.generic.IFLT;<a name="line.34"></a>
<FONT color="green">035</FONT>    import org.apache.bcel.generic.IFNE;<a name="line.35"></a>
<FONT color="green">036</FONT>    import org.apache.bcel.generic.IFNONNULL;<a name="line.36"></a>
<FONT color="green">037</FONT>    import org.apache.bcel.generic.IF_ICMPEQ;<a name="line.37"></a>
<FONT color="green">038</FONT>    import org.apache.bcel.generic.IF_ICMPLT;<a name="line.38"></a>
<FONT color="green">039</FONT>    import org.apache.bcel.generic.IF_ICMPNE;<a name="line.39"></a>
<FONT color="green">040</FONT>    import org.apache.bcel.generic.ILOAD;<a name="line.40"></a>
<FONT color="green">041</FONT>    import org.apache.bcel.generic.INVOKEINTERFACE;<a name="line.41"></a>
<FONT color="green">042</FONT>    import org.apache.bcel.generic.INVOKESPECIAL;<a name="line.42"></a>
<FONT color="green">043</FONT>    import org.apache.bcel.generic.ISTORE;<a name="line.43"></a>
<FONT color="green">044</FONT>    import org.apache.bcel.generic.InstructionHandle;<a name="line.44"></a>
<FONT color="green">045</FONT>    import org.apache.bcel.generic.InstructionList;<a name="line.45"></a>
<FONT color="green">046</FONT>    import org.apache.bcel.generic.LocalVariableGen;<a name="line.46"></a>
<FONT color="green">047</FONT>    import org.apache.bcel.generic.NEW;<a name="line.47"></a>
<FONT color="green">048</FONT>    import org.apache.bcel.generic.PUSH;<a name="line.48"></a>
<FONT color="green">049</FONT>    import org.apache.bcel.generic.PUTFIELD;<a name="line.49"></a>
<FONT color="green">050</FONT>    import org.apache.xalan.xsltc.compiler.util.ClassGenerator;<a name="line.50"></a>
<FONT color="green">051</FONT>    import org.apache.xalan.xsltc.compiler.util.MethodGenerator;<a name="line.51"></a>
<FONT color="green">052</FONT>    import org.apache.xalan.xsltc.compiler.util.Type;<a name="line.52"></a>
<FONT color="green">053</FONT>    import org.apache.xalan.xsltc.compiler.util.TypeCheckError;<a name="line.53"></a>
<FONT color="green">054</FONT>    import org.apache.xalan.xsltc.compiler.util.Util;<a name="line.54"></a>
<FONT color="green">055</FONT>    import org.apache.xml.dtm.Axis;<a name="line.55"></a>
<FONT color="green">056</FONT>    import org.apache.xml.dtm.DTM;<a name="line.56"></a>
<FONT color="green">057</FONT>    <a name="line.57"></a>
<FONT color="green">058</FONT>    /**<a name="line.58"></a>
<FONT color="green">059</FONT>     * @author Jacek Ambroziak<a name="line.59"></a>
<FONT color="green">060</FONT>     * @author Santiago Pericas-Geertsen<a name="line.60"></a>
<FONT color="green">061</FONT>     * @author Erwin Bolwidt &lt;ejb@klomp.org&gt;<a name="line.61"></a>
<FONT color="green">062</FONT>     */<a name="line.62"></a>
<FONT color="green">063</FONT>    class StepPattern extends RelativePathPattern {<a name="line.63"></a>
<FONT color="green">064</FONT>    <a name="line.64"></a>
<FONT color="green">065</FONT>        private static final int NO_CONTEXT = 0;<a name="line.65"></a>
<FONT color="green">066</FONT>        private static final int SIMPLE_CONTEXT = 1;<a name="line.66"></a>
<FONT color="green">067</FONT>        private static final int GENERAL_CONTEXT = 2;<a name="line.67"></a>
<FONT color="green">068</FONT>    <a name="line.68"></a>
<FONT color="green">069</FONT>        protected final int _axis;<a name="line.69"></a>
<FONT color="green">070</FONT>        protected final int _nodeType;<a name="line.70"></a>
<FONT color="green">071</FONT>        protected Vector _predicates;<a name="line.71"></a>
<FONT color="green">072</FONT>    <a name="line.72"></a>
<FONT color="green">073</FONT>        private Step    _step = null;<a name="line.73"></a>
<FONT color="green">074</FONT>        private boolean _isEpsilon = false;<a name="line.74"></a>
<FONT color="green">075</FONT>        private int     _contextCase;<a name="line.75"></a>
<FONT color="green">076</FONT>    <a name="line.76"></a>
<FONT color="green">077</FONT>        private double  _priority = Double.MAX_VALUE;<a name="line.77"></a>
<FONT color="green">078</FONT>    <a name="line.78"></a>
<FONT color="green">079</FONT>        public StepPattern(int axis, int nodeType, Vector predicates) {<a name="line.79"></a>
<FONT color="green">080</FONT>            _axis = axis;<a name="line.80"></a>
<FONT color="green">081</FONT>            _nodeType = nodeType;<a name="line.81"></a>
<FONT color="green">082</FONT>            _predicates = predicates;<a name="line.82"></a>
<FONT color="green">083</FONT>        }<a name="line.83"></a>
<FONT color="green">084</FONT>    <a name="line.84"></a>
<FONT color="green">085</FONT>        public void setParser(Parser parser) {<a name="line.85"></a>
<FONT color="green">086</FONT>            super.setParser(parser);<a name="line.86"></a>
<FONT color="green">087</FONT>            if (_predicates != null) {<a name="line.87"></a>
<FONT color="green">088</FONT>                final int n = _predicates.size();<a name="line.88"></a>
<FONT color="green">089</FONT>                for (int i = 0; i &lt; n; i++) {<a name="line.89"></a>
<FONT color="green">090</FONT>                    final Predicate exp = (Predicate)_predicates.elementAt(i);<a name="line.90"></a>
<FONT color="green">091</FONT>                    exp.setParser(parser);<a name="line.91"></a>
<FONT color="green">092</FONT>                    exp.setParent(this);<a name="line.92"></a>
<FONT color="green">093</FONT>                }<a name="line.93"></a>
<FONT color="green">094</FONT>            }<a name="line.94"></a>
<FONT color="green">095</FONT>        }<a name="line.95"></a>
<FONT color="green">096</FONT>    <a name="line.96"></a>
<FONT color="green">097</FONT>        public int getNodeType() {<a name="line.97"></a>
<FONT color="green">098</FONT>            return _nodeType;<a name="line.98"></a>
<FONT color="green">099</FONT>        }<a name="line.99"></a>
<FONT color="green">100</FONT>    <a name="line.100"></a>
<FONT color="green">101</FONT>        public void setPriority(double priority) {<a name="line.101"></a>
<FONT color="green">102</FONT>            _priority = priority;<a name="line.102"></a>
<FONT color="green">103</FONT>        }<a name="line.103"></a>
<FONT color="green">104</FONT>        <a name="line.104"></a>
<FONT color="green">105</FONT>        public StepPattern getKernelPattern() {<a name="line.105"></a>
<FONT color="green">106</FONT>            return this;<a name="line.106"></a>
<FONT color="green">107</FONT>        }<a name="line.107"></a>
<FONT color="green">108</FONT>            <a name="line.108"></a>
<FONT color="green">109</FONT>        public boolean isWildcard() {<a name="line.109"></a>
<FONT color="green">110</FONT>            return _isEpsilon &amp;&amp; hasPredicates() == false;<a name="line.110"></a>
<FONT color="green">111</FONT>        }<a name="line.111"></a>
<FONT color="green">112</FONT>    <a name="line.112"></a>
<FONT color="green">113</FONT>        public StepPattern setPredicates(Vector predicates) {<a name="line.113"></a>
<FONT color="green">114</FONT>            _predicates = predicates;<a name="line.114"></a>
<FONT color="green">115</FONT>            return(this);<a name="line.115"></a>
<FONT color="green">116</FONT>        }<a name="line.116"></a>
<FONT color="green">117</FONT>        <a name="line.117"></a>
<FONT color="green">118</FONT>        protected boolean hasPredicates() {<a name="line.118"></a>
<FONT color="green">119</FONT>            return _predicates != null &amp;&amp; _predicates.size() &gt; 0;<a name="line.119"></a>
<FONT color="green">120</FONT>        }<a name="line.120"></a>
<FONT color="green">121</FONT>    <a name="line.121"></a>
<FONT color="green">122</FONT>        public double getDefaultPriority() {<a name="line.122"></a>
<FONT color="green">123</FONT>            if (_priority != Double.MAX_VALUE) {<a name="line.123"></a>
<FONT color="green">124</FONT>                return _priority;<a name="line.124"></a>
<FONT color="green">125</FONT>            }<a name="line.125"></a>
<FONT color="green">126</FONT>    <a name="line.126"></a>
<FONT color="green">127</FONT>            if (hasPredicates()) {<a name="line.127"></a>
<FONT color="green">128</FONT>                return 0.5;<a name="line.128"></a>
<FONT color="green">129</FONT>            }<a name="line.129"></a>
<FONT color="green">130</FONT>            else {<a name="line.130"></a>
<FONT color="green">131</FONT>                switch(_nodeType) {<a name="line.131"></a>
<FONT color="green">132</FONT>                case -1:<a name="line.132"></a>
<FONT color="green">133</FONT>                    return -0.5;    // node()<a name="line.133"></a>
<FONT color="green">134</FONT>                case 0:<a name="line.134"></a>
<FONT color="green">135</FONT>                    return 0.0;<a name="line.135"></a>
<FONT color="green">136</FONT>                default:<a name="line.136"></a>
<FONT color="green">137</FONT>                    return (_nodeType &gt;= NodeTest.GTYPE) ? 0.0 : -0.5;<a name="line.137"></a>
<FONT color="green">138</FONT>                }<a name="line.138"></a>
<FONT color="green">139</FONT>            }<a name="line.139"></a>
<FONT color="green">140</FONT>        }<a name="line.140"></a>
<FONT color="green">141</FONT>        <a name="line.141"></a>
<FONT color="green">142</FONT>        public int getAxis() {<a name="line.142"></a>
<FONT color="green">143</FONT>            return _axis;<a name="line.143"></a>
<FONT color="green">144</FONT>        }<a name="line.144"></a>
<FONT color="green">145</FONT>    <a name="line.145"></a>
<FONT color="green">146</FONT>        public void reduceKernelPattern() {<a name="line.146"></a>
<FONT color="green">147</FONT>            _isEpsilon = true;<a name="line.147"></a>
<FONT color="green">148</FONT>        }<a name="line.148"></a>
<FONT color="green">149</FONT>            <a name="line.149"></a>
<FONT color="green">150</FONT>        public String toString() {<a name="line.150"></a>
<FONT color="green">151</FONT>            final StringBuffer buffer = new StringBuffer("stepPattern(\"");<a name="line.151"></a>
<FONT color="green">152</FONT>        buffer.append(Axis.getNames(_axis))<a name="line.152"></a>
<FONT color="green">153</FONT>                .append("\", ")<a name="line.153"></a>
<FONT color="green">154</FONT>                .append(_isEpsilon ? <a name="line.154"></a>
<FONT color="green">155</FONT>                            ("epsilon{" + Integer.toString(_nodeType) + "}") :<a name="line.155"></a>
<FONT color="green">156</FONT>                             Integer.toString(_nodeType));<a name="line.156"></a>
<FONT color="green">157</FONT>            if (_predicates != null)<a name="line.157"></a>
<FONT color="green">158</FONT>                buffer.append(", ").append(_predicates.toString());<a name="line.158"></a>
<FONT color="green">159</FONT>            return buffer.append(')').toString();<a name="line.159"></a>
<FONT color="green">160</FONT>        }<a name="line.160"></a>
<FONT color="green">161</FONT>        <a name="line.161"></a>
<FONT color="green">162</FONT>        private int analyzeCases() {<a name="line.162"></a>
<FONT color="green">163</FONT>            boolean noContext = true;<a name="line.163"></a>
<FONT color="green">164</FONT>            final int n = _predicates.size();<a name="line.164"></a>
<FONT color="green">165</FONT>    <a name="line.165"></a>
<FONT color="green">166</FONT>            for (int i = 0; i &lt; n &amp;&amp; noContext; i++) {<a name="line.166"></a>
<FONT color="green">167</FONT>                Predicate pred = (Predicate) _predicates.elementAt(i);<a name="line.167"></a>
<FONT color="green">168</FONT>                if (pred.isNthPositionFilter() || <a name="line.168"></a>
<FONT color="green">169</FONT>                    pred.hasPositionCall() || <a name="line.169"></a>
<FONT color="green">170</FONT>                    pred.hasLastCall()) <a name="line.170"></a>
<FONT color="green">171</FONT>                {<a name="line.171"></a>
<FONT color="green">172</FONT>                    noContext = false;<a name="line.172"></a>
<FONT color="green">173</FONT>                }<a name="line.173"></a>
<FONT color="green">174</FONT>            }<a name="line.174"></a>
<FONT color="green">175</FONT>    <a name="line.175"></a>
<FONT color="green">176</FONT>            if (noContext) {<a name="line.176"></a>
<FONT color="green">177</FONT>                return NO_CONTEXT;<a name="line.177"></a>
<FONT color="green">178</FONT>            }<a name="line.178"></a>
<FONT color="green">179</FONT>            else if (n == 1) {<a name="line.179"></a>
<FONT color="green">180</FONT>                return SIMPLE_CONTEXT;<a name="line.180"></a>
<FONT color="green">181</FONT>            }<a name="line.181"></a>
<FONT color="green">182</FONT>            return GENERAL_CONTEXT;<a name="line.182"></a>
<FONT color="green">183</FONT>        }<a name="line.183"></a>
<FONT color="green">184</FONT>    <a name="line.184"></a>
<FONT color="green">185</FONT>        private String getNextFieldName() {<a name="line.185"></a>
<FONT color="green">186</FONT>            return  "__step_pattern_iter_" + getXSLTC().nextStepPatternSerial();<a name="line.186"></a>
<FONT color="green">187</FONT>        }<a name="line.187"></a>
<FONT color="green">188</FONT>    <a name="line.188"></a>
<FONT color="green">189</FONT>        public Type typeCheck(SymbolTable stable) throws TypeCheckError {<a name="line.189"></a>
<FONT color="green">190</FONT>            if (hasPredicates()) {<a name="line.190"></a>
<FONT color="green">191</FONT>                // Type check all the predicates (e -&gt; position() = e)<a name="line.191"></a>
<FONT color="green">192</FONT>                final int n = _predicates.size();<a name="line.192"></a>
<FONT color="green">193</FONT>                for (int i = 0; i &lt; n; i++) {<a name="line.193"></a>
<FONT color="green">194</FONT>                    final Predicate pred = (Predicate)_predicates.elementAt(i);<a name="line.194"></a>
<FONT color="green">195</FONT>                    pred.typeCheck(stable);<a name="line.195"></a>
<FONT color="green">196</FONT>                }<a name="line.196"></a>
<FONT color="green">197</FONT>    <a name="line.197"></a>
<FONT color="green">198</FONT>                // Analyze context cases<a name="line.198"></a>
<FONT color="green">199</FONT>                _contextCase = analyzeCases();<a name="line.199"></a>
<FONT color="green">200</FONT>    <a name="line.200"></a>
<FONT color="green">201</FONT>                Step step = null;<a name="line.201"></a>
<FONT color="green">202</FONT>    <a name="line.202"></a>
<FONT color="green">203</FONT>                // Create an instance of Step to do the translation<a name="line.203"></a>
<FONT color="green">204</FONT>                if (_contextCase == SIMPLE_CONTEXT) {<a name="line.204"></a>
<FONT color="green">205</FONT>                    Predicate pred = (Predicate)_predicates.elementAt(0);<a name="line.205"></a>
<FONT color="green">206</FONT>                    if (pred.isNthPositionFilter()) {<a name="line.206"></a>
<FONT color="green">207</FONT>                        _contextCase = GENERAL_CONTEXT;<a name="line.207"></a>
<FONT color="green">208</FONT>                        step = new Step(_axis, _nodeType, _predicates);<a name="line.208"></a>
<FONT color="green">209</FONT>                    } else {<a name="line.209"></a>
<FONT color="green">210</FONT>                        step = new Step(_axis, _nodeType, null);<a name="line.210"></a>
<FONT color="green">211</FONT>                    }<a name="line.211"></a>
<FONT color="green">212</FONT>                } else if (_contextCase == GENERAL_CONTEXT) {<a name="line.212"></a>
<FONT color="green">213</FONT>                    final int len = _predicates.size();<a name="line.213"></a>
<FONT color="green">214</FONT>                    for (int i = 0; i &lt; len; i++) {<a name="line.214"></a>
<FONT color="green">215</FONT>                        ((Predicate)_predicates.elementAt(i)).dontOptimize();<a name="line.215"></a>
<FONT color="green">216</FONT>                    }<a name="line.216"></a>
<FONT color="green">217</FONT>    <a name="line.217"></a>
<FONT color="green">218</FONT>                    step = new Step(_axis, _nodeType, _predicates);<a name="line.218"></a>
<FONT color="green">219</FONT>                }<a name="line.219"></a>
<FONT color="green">220</FONT>                <a name="line.220"></a>
<FONT color="green">221</FONT>                if (step != null) {<a name="line.221"></a>
<FONT color="green">222</FONT>                    step.setParser(getParser());<a name="line.222"></a>
<FONT color="green">223</FONT>                    step.typeCheck(stable);<a name="line.223"></a>
<FONT color="green">224</FONT>                    _step = step;<a name="line.224"></a>
<FONT color="green">225</FONT>                }<a name="line.225"></a>
<FONT color="green">226</FONT>            }<a name="line.226"></a>
<FONT color="green">227</FONT>            return _axis == Axis.CHILD ? Type.Element : Type.Attribute;<a name="line.227"></a>
<FONT color="green">228</FONT>        }<a name="line.228"></a>
<FONT color="green">229</FONT>    <a name="line.229"></a>
<FONT color="green">230</FONT>        private void translateKernel(ClassGenerator classGen, <a name="line.230"></a>
<FONT color="green">231</FONT>                                     MethodGenerator methodGen) {<a name="line.231"></a>
<FONT color="green">232</FONT>            final ConstantPoolGen cpg = classGen.getConstantPool();<a name="line.232"></a>
<FONT color="green">233</FONT>            final InstructionList il = methodGen.getInstructionList();<a name="line.233"></a>
<FONT color="green">234</FONT>            <a name="line.234"></a>
<FONT color="green">235</FONT>            if (_nodeType == DTM.ELEMENT_NODE) {<a name="line.235"></a>
<FONT color="green">236</FONT>                final int check = cpg.addInterfaceMethodref(DOM_INTF,<a name="line.236"></a>
<FONT color="green">237</FONT>                                                            "isElement", "(I)Z");<a name="line.237"></a>
<FONT color="green">238</FONT>                il.append(methodGen.loadDOM());<a name="line.238"></a>
<FONT color="green">239</FONT>                il.append(SWAP);<a name="line.239"></a>
<FONT color="green">240</FONT>                il.append(new INVOKEINTERFACE(check, 2));<a name="line.240"></a>
<FONT color="green">241</FONT>            <a name="line.241"></a>
<FONT color="green">242</FONT>                // Need to allow for long jumps here<a name="line.242"></a>
<FONT color="green">243</FONT>                final BranchHandle icmp = il.append(new IFNE(null));<a name="line.243"></a>
<FONT color="green">244</FONT>                _falseList.add(il.append(new GOTO_W(null)));<a name="line.244"></a>
<FONT color="green">245</FONT>                icmp.setTarget(il.append(NOP));<a name="line.245"></a>
<FONT color="green">246</FONT>            }<a name="line.246"></a>
<FONT color="green">247</FONT>            else if (_nodeType == DTM.ATTRIBUTE_NODE) {<a name="line.247"></a>
<FONT color="green">248</FONT>                final int check = cpg.addInterfaceMethodref(DOM_INTF,<a name="line.248"></a>
<FONT color="green">249</FONT>                                                            "isAttribute", "(I)Z");<a name="line.249"></a>
<FONT color="green">250</FONT>                il.append(methodGen.loadDOM());<a name="line.250"></a>
<FONT color="green">251</FONT>                il.append(SWAP);<a name="line.251"></a>
<FONT color="green">252</FONT>                il.append(new INVOKEINTERFACE(check, 2));<a name="line.252"></a>
<FONT color="green">253</FONT>            <a name="line.253"></a>
<FONT color="green">254</FONT>                // Need to allow for long jumps here<a name="line.254"></a>
<FONT color="green">255</FONT>                final BranchHandle icmp = il.append(new IFNE(null));<a name="line.255"></a>
<FONT color="green">256</FONT>                _falseList.add(il.append(new GOTO_W(null)));<a name="line.256"></a>
<FONT color="green">257</FONT>                icmp.setTarget(il.append(NOP));<a name="line.257"></a>
<FONT color="green">258</FONT>            }<a name="line.258"></a>
<FONT color="green">259</FONT>            else {<a name="line.259"></a>
<FONT color="green">260</FONT>                // context node is on the stack<a name="line.260"></a>
<FONT color="green">261</FONT>                final int getEType = cpg.addInterfaceMethodref(DOM_INTF,<a name="line.261"></a>
<FONT color="green">262</FONT>                                                              "getExpandedTypeID",<a name="line.262"></a>
<FONT color="green">263</FONT>                                                              "(I)I");<a name="line.263"></a>
<FONT color="green">264</FONT>                il.append(methodGen.loadDOM());<a name="line.264"></a>
<FONT color="green">265</FONT>                il.append(SWAP);<a name="line.265"></a>
<FONT color="green">266</FONT>                il.append(new INVOKEINTERFACE(getEType, 2));<a name="line.266"></a>
<FONT color="green">267</FONT>                il.append(new PUSH(cpg, _nodeType));<a name="line.267"></a>
<FONT color="green">268</FONT>            <a name="line.268"></a>
<FONT color="green">269</FONT>                // Need to allow for long jumps here<a name="line.269"></a>
<FONT color="green">270</FONT>                final BranchHandle icmp = il.append(new IF_ICMPEQ(null));<a name="line.270"></a>
<FONT color="green">271</FONT>                _falseList.add(il.append(new GOTO_W(null)));<a name="line.271"></a>
<FONT color="green">272</FONT>                icmp.setTarget(il.append(NOP));<a name="line.272"></a>
<FONT color="green">273</FONT>            }<a name="line.273"></a>
<FONT color="green">274</FONT>        }<a name="line.274"></a>
<FONT color="green">275</FONT>    <a name="line.275"></a>
<FONT color="green">276</FONT>        private void translateNoContext(ClassGenerator classGen, <a name="line.276"></a>
<FONT color="green">277</FONT>                                        MethodGenerator methodGen) {<a name="line.277"></a>
<FONT color="green">278</FONT>            final ConstantPoolGen cpg = classGen.getConstantPool();<a name="line.278"></a>
<FONT color="green">279</FONT>            final InstructionList il = methodGen.getInstructionList();<a name="line.279"></a>
<FONT color="green">280</FONT>    <a name="line.280"></a>
<FONT color="green">281</FONT>            // Push current node on the stack<a name="line.281"></a>
<FONT color="green">282</FONT>            il.append(methodGen.loadCurrentNode());<a name="line.282"></a>
<FONT color="green">283</FONT>            il.append(SWAP);<a name="line.283"></a>
<FONT color="green">284</FONT>    <a name="line.284"></a>
<FONT color="green">285</FONT>            // Overwrite current node with matching node<a name="line.285"></a>
<FONT color="green">286</FONT>            il.append(methodGen.storeCurrentNode());<a name="line.286"></a>
<FONT color="green">287</FONT>    <a name="line.287"></a>
<FONT color="green">288</FONT>            // If pattern not reduced then check kernel<a name="line.288"></a>
<FONT color="green">289</FONT>            if (!_isEpsilon) {<a name="line.289"></a>
<FONT color="green">290</FONT>                il.append(methodGen.loadCurrentNode());<a name="line.290"></a>
<FONT color="green">291</FONT>                translateKernel(classGen, methodGen);<a name="line.291"></a>
<FONT color="green">292</FONT>            }<a name="line.292"></a>
<FONT color="green">293</FONT>    <a name="line.293"></a>
<FONT color="green">294</FONT>            // Compile the expressions within the predicates<a name="line.294"></a>
<FONT color="green">295</FONT>            final int n = _predicates.size();<a name="line.295"></a>
<FONT color="green">296</FONT>            for (int i = 0; i &lt; n; i++) {<a name="line.296"></a>
<FONT color="green">297</FONT>                Predicate pred = (Predicate)_predicates.elementAt(i);<a name="line.297"></a>
<FONT color="green">298</FONT>                Expression exp = pred.getExpr();<a name="line.298"></a>
<FONT color="green">299</FONT>                exp.translateDesynthesized(classGen, methodGen);<a name="line.299"></a>
<FONT color="green">300</FONT>                _trueList.append(exp._trueList);<a name="line.300"></a>
<FONT color="green">301</FONT>                _falseList.append(exp._falseList);<a name="line.301"></a>
<FONT color="green">302</FONT>            }<a name="line.302"></a>
<FONT color="green">303</FONT>    <a name="line.303"></a>
<FONT color="green">304</FONT>            // Backpatch true list and restore current iterator/node<a name="line.304"></a>
<FONT color="green">305</FONT>            InstructionHandle restore;<a name="line.305"></a>
<FONT color="green">306</FONT>            restore = il.append(methodGen.storeCurrentNode());<a name="line.306"></a>
<FONT color="green">307</FONT>            backPatchTrueList(restore);<a name="line.307"></a>
<FONT color="green">308</FONT>            BranchHandle skipFalse = il.append(new GOTO(null));<a name="line.308"></a>
<FONT color="green">309</FONT>    <a name="line.309"></a>
<FONT color="green">310</FONT>            // Backpatch false list and restore current iterator/node<a name="line.310"></a>
<FONT color="green">311</FONT>            restore = il.append(methodGen.storeCurrentNode());<a name="line.311"></a>
<FONT color="green">312</FONT>            backPatchFalseList(restore);<a name="line.312"></a>
<FONT color="green">313</FONT>            _falseList.add(il.append(new GOTO(null)));<a name="line.313"></a>
<FONT color="green">314</FONT>    <a name="line.314"></a>
<FONT color="green">315</FONT>            // True list falls through<a name="line.315"></a>
<FONT color="green">316</FONT>            skipFalse.setTarget(il.append(NOP));<a name="line.316"></a>
<FONT color="green">317</FONT>        }<a name="line.317"></a>
<FONT color="green">318</FONT>    <a name="line.318"></a>
<FONT color="green">319</FONT>        private void translateSimpleContext(ClassGenerator classGen, <a name="line.319"></a>
<FONT color="green">320</FONT>                                            MethodGenerator methodGen) {<a name="line.320"></a>
<FONT color="green">321</FONT>            int index;<a name="line.321"></a>
<FONT color="green">322</FONT>            final ConstantPoolGen cpg = classGen.getConstantPool();<a name="line.322"></a>
<FONT color="green">323</FONT>            final InstructionList il = methodGen.getInstructionList();<a name="line.323"></a>
<FONT color="green">324</FONT>    <a name="line.324"></a>
<FONT color="green">325</FONT>            // Store matching node into a local variable<a name="line.325"></a>
<FONT color="green">326</FONT>            LocalVariableGen match;<a name="line.326"></a>
<FONT color="green">327</FONT>            match = methodGen.addLocalVariable("step_pattern_tmp1", <a name="line.327"></a>
<FONT color="green">328</FONT>                                               Util.getJCRefType(NODE_SIG),<a name="line.328"></a>
<FONT color="green">329</FONT>                                               null, null);<a name="line.329"></a>
<FONT color="green">330</FONT>            match.setStart(il.append(new ISTORE(match.getIndex())));<a name="line.330"></a>
<FONT color="green">331</FONT>    <a name="line.331"></a>
<FONT color="green">332</FONT>            // If pattern not reduced then check kernel<a name="line.332"></a>
<FONT color="green">333</FONT>            if (!_isEpsilon) {<a name="line.333"></a>
<FONT color="green">334</FONT>                il.append(new ILOAD(match.getIndex()));<a name="line.334"></a>
<FONT color="green">335</FONT>                translateKernel(classGen, methodGen);<a name="line.335"></a>
<FONT color="green">336</FONT>            }<a name="line.336"></a>
<FONT color="green">337</FONT>    <a name="line.337"></a>
<FONT color="green">338</FONT>            // Push current iterator and current node on the stack<a name="line.338"></a>
<FONT color="green">339</FONT>            il.append(methodGen.loadCurrentNode());<a name="line.339"></a>
<FONT color="green">340</FONT>            il.append(methodGen.loadIterator());<a name="line.340"></a>
<FONT color="green">341</FONT>    <a name="line.341"></a>
<FONT color="green">342</FONT>            // Create a new matching iterator using the matching node<a name="line.342"></a>
<FONT color="green">343</FONT>            index = cpg.addMethodref(MATCHING_ITERATOR, "&lt;init&gt;", <a name="line.343"></a>
<FONT color="green">344</FONT>                                     "(I" + NODE_ITERATOR_SIG + ")V");<a name="line.344"></a>
<FONT color="green">345</FONT>    <a name="line.345"></a>
<FONT color="green">346</FONT>            // Backwards branches are prohibited if an uninitialized object is<a name="line.346"></a>
<FONT color="green">347</FONT>            // on the stack by section 4.9.4 of the JVM Specification, 2nd Ed.<a name="line.347"></a>
<FONT color="green">348</FONT>            // We don't know whether this code might contain backwards branches,<a name="line.348"></a>
<FONT color="green">349</FONT>            // so we mustn't create the new object until after we've created<a name="line.349"></a>
<FONT color="green">350</FONT>            // the suspect arguments to its constructor.  Instead we calculate<a name="line.350"></a>
<FONT color="green">351</FONT>            // the values of the arguments to the constructor first, store them<a name="line.351"></a>
<FONT color="green">352</FONT>            // in temporary variables, create the object and reload the<a name="line.352"></a>
<FONT color="green">353</FONT>            // arguments from the temporaries to avoid the problem.<a name="line.353"></a>
<FONT color="green">354</FONT>    <a name="line.354"></a>
<FONT color="green">355</FONT>            _step.translate(classGen, methodGen);<a name="line.355"></a>
<FONT color="green">356</FONT>            LocalVariableGen stepIteratorTemp =<a name="line.356"></a>
<FONT color="green">357</FONT>                    methodGen.addLocalVariable("step_pattern_tmp2",<a name="line.357"></a>
<FONT color="green">358</FONT>                                               Util.getJCRefType(NODE_ITERATOR_SIG),<a name="line.358"></a>
<FONT color="green">359</FONT>                                               null, null);<a name="line.359"></a>
<FONT color="green">360</FONT>            stepIteratorTemp.setStart(<a name="line.360"></a>
<FONT color="green">361</FONT>                    il.append(new ASTORE(stepIteratorTemp.getIndex())));<a name="line.361"></a>
<FONT color="green">362</FONT>    <a name="line.362"></a>
<FONT color="green">363</FONT>            il.append(new NEW(cpg.addClass(MATCHING_ITERATOR)));<a name="line.363"></a>
<FONT color="green">364</FONT>            il.append(DUP);<a name="line.364"></a>
<FONT color="green">365</FONT>            il.append(new ILOAD(match.getIndex()));<a name="line.365"></a>
<FONT color="green">366</FONT>            stepIteratorTemp.setEnd(<a name="line.366"></a>
<FONT color="green">367</FONT>                    il.append(new ALOAD(stepIteratorTemp.getIndex())));<a name="line.367"></a>
<FONT color="green">368</FONT>            il.append(new INVOKESPECIAL(index));<a name="line.368"></a>
<FONT color="green">369</FONT>    <a name="line.369"></a>
<FONT color="green">370</FONT>            // Get the parent of the matching node<a name="line.370"></a>
<FONT color="green">371</FONT>            il.append(methodGen.loadDOM());<a name="line.371"></a>
<FONT color="green">372</FONT>            il.append(new ILOAD(match.getIndex()));<a name="line.372"></a>
<FONT color="green">373</FONT>            index = cpg.addInterfaceMethodref(DOM_INTF, GET_PARENT, GET_PARENT_SIG);<a name="line.373"></a>
<FONT color="green">374</FONT>            il.append(new INVOKEINTERFACE(index, 2));<a name="line.374"></a>
<FONT color="green">375</FONT>    <a name="line.375"></a>
<FONT color="green">376</FONT>            // Start the iterator with the parent <a name="line.376"></a>
<FONT color="green">377</FONT>            il.append(methodGen.setStartNode());<a name="line.377"></a>
<FONT color="green">378</FONT>    <a name="line.378"></a>
<FONT color="green">379</FONT>            // Overwrite current iterator and current node<a name="line.379"></a>
<FONT color="green">380</FONT>            il.append(methodGen.storeIterator());<a name="line.380"></a>
<FONT color="green">381</FONT>            match.setEnd(il.append(new ILOAD(match.getIndex())));<a name="line.381"></a>
<FONT color="green">382</FONT>            il.append(methodGen.storeCurrentNode());<a name="line.382"></a>
<FONT color="green">383</FONT>    <a name="line.383"></a>
<FONT color="green">384</FONT>            // Translate the expression of the predicate <a name="line.384"></a>
<FONT color="green">385</FONT>            Predicate pred = (Predicate) _predicates.elementAt(0);<a name="line.385"></a>
<FONT color="green">386</FONT>            Expression exp = pred.getExpr();<a name="line.386"></a>
<FONT color="green">387</FONT>            exp.translateDesynthesized(classGen, methodGen);<a name="line.387"></a>
<FONT color="green">388</FONT>    <a name="line.388"></a>
<FONT color="green">389</FONT>            // Backpatch true list and restore current iterator/node<a name="line.389"></a>
<FONT color="green">390</FONT>            InstructionHandle restore = il.append(methodGen.storeIterator());<a name="line.390"></a>
<FONT color="green">391</FONT>            il.append(methodGen.storeCurrentNode());<a name="line.391"></a>
<FONT color="green">392</FONT>            exp.backPatchTrueList(restore);<a name="line.392"></a>
<FONT color="green">393</FONT>            BranchHandle skipFalse = il.append(new GOTO(null));<a name="line.393"></a>
<FONT color="green">394</FONT>    <a name="line.394"></a>
<FONT color="green">395</FONT>            // Backpatch false list and restore current iterator/node<a name="line.395"></a>
<FONT color="green">396</FONT>            restore = il.append(methodGen.storeIterator());<a name="line.396"></a>
<FONT color="green">397</FONT>            il.append(methodGen.storeCurrentNode());<a name="line.397"></a>
<FONT color="green">398</FONT>            exp.backPatchFalseList(restore);<a name="line.398"></a>
<FONT color="green">399</FONT>            _falseList.add(il.append(new GOTO(null)));<a name="line.399"></a>
<FONT color="green">400</FONT>    <a name="line.400"></a>
<FONT color="green">401</FONT>            // True list falls through<a name="line.401"></a>
<FONT color="green">402</FONT>            skipFalse.setTarget(il.append(NOP));<a name="line.402"></a>
<FONT color="green">403</FONT>        }<a name="line.403"></a>
<FONT color="green">404</FONT>    <a name="line.404"></a>
<FONT color="green">405</FONT>        private void translateGeneralContext(ClassGenerator classGen, <a name="line.405"></a>
<FONT color="green">406</FONT>                                             MethodGenerator methodGen) {<a name="line.406"></a>
<FONT color="green">407</FONT>            final ConstantPoolGen cpg = classGen.getConstantPool();<a name="line.407"></a>
<FONT color="green">408</FONT>            final InstructionList il = methodGen.getInstructionList();<a name="line.408"></a>
<FONT color="green">409</FONT>    <a name="line.409"></a>
<FONT color="green">410</FONT>            int iteratorIndex = 0;<a name="line.410"></a>
<FONT color="green">411</FONT>            BranchHandle ifBlock = null;<a name="line.411"></a>
<FONT color="green">412</FONT>            LocalVariableGen iter, node, node2;<a name="line.412"></a>
<FONT color="green">413</FONT>            final String iteratorName = getNextFieldName();<a name="line.413"></a>
<FONT color="green">414</FONT>    <a name="line.414"></a>
<FONT color="green">415</FONT>            // Store node on the stack into a local variable<a name="line.415"></a>
<FONT color="green">416</FONT>            node = methodGen.addLocalVariable("step_pattern_tmp1", <a name="line.416"></a>
<FONT color="green">417</FONT>                                              Util.getJCRefType(NODE_SIG),<a name="line.417"></a>
<FONT color="green">418</FONT>                                              null, null);<a name="line.418"></a>
<FONT color="green">419</FONT>            node.setStart(il.append(new ISTORE(node.getIndex())));<a name="line.419"></a>
<FONT color="green">420</FONT>    <a name="line.420"></a>
<FONT color="green">421</FONT>            // Create a new local to store the iterator<a name="line.421"></a>
<FONT color="green">422</FONT>            iter = methodGen.addLocalVariable("step_pattern_tmp2", <a name="line.422"></a>
<FONT color="green">423</FONT>                                              Util.getJCRefType(NODE_ITERATOR_SIG),<a name="line.423"></a>
<FONT color="green">424</FONT>                                              null, null);<a name="line.424"></a>
<FONT color="green">425</FONT>    <a name="line.425"></a>
<FONT color="green">426</FONT>            // Add a new private field if this is the main class<a name="line.426"></a>
<FONT color="green">427</FONT>            if (!classGen.isExternal()) {<a name="line.427"></a>
<FONT color="green">428</FONT>                final Field iterator =<a name="line.428"></a>
<FONT color="green">429</FONT>                    new Field(ACC_PRIVATE, <a name="line.429"></a>
<FONT color="green">430</FONT>                              cpg.addUtf8(iteratorName),<a name="line.430"></a>
<FONT color="green">431</FONT>                              cpg.addUtf8(NODE_ITERATOR_SIG),<a name="line.431"></a>
<FONT color="green">432</FONT>                              null, cpg.getConstantPool());<a name="line.432"></a>
<FONT color="green">433</FONT>                classGen.addField(iterator);<a name="line.433"></a>
<FONT color="green">434</FONT>                iteratorIndex = cpg.addFieldref(classGen.getClassName(), <a name="line.434"></a>
<FONT color="green">435</FONT>                                                iteratorName,<a name="line.435"></a>
<FONT color="green">436</FONT>                                                NODE_ITERATOR_SIG);<a name="line.436"></a>
<FONT color="green">437</FONT>    <a name="line.437"></a>
<FONT color="green">438</FONT>                il.append(classGen.loadTranslet());<a name="line.438"></a>
<FONT color="green">439</FONT>                il.append(new GETFIELD(iteratorIndex));<a name="line.439"></a>
<FONT color="green">440</FONT>                il.append(DUP);<a name="line.440"></a>
<FONT color="green">441</FONT>                iter.setStart(il.append(new ASTORE(iter.getIndex())));<a name="line.441"></a>
<FONT color="green">442</FONT>                ifBlock = il.append(new IFNONNULL(null));<a name="line.442"></a>
<FONT color="green">443</FONT>                il.append(classGen.loadTranslet());<a name="line.443"></a>
<FONT color="green">444</FONT>            }       <a name="line.444"></a>
<FONT color="green">445</FONT>    <a name="line.445"></a>
<FONT color="green">446</FONT>            // Compile the step created at type checking time<a name="line.446"></a>
<FONT color="green">447</FONT>            _step.translate(classGen, methodGen);<a name="line.447"></a>
<FONT color="green">448</FONT>            InstructionHandle iterStore = il.append(new ASTORE(iter.getIndex()));<a name="line.448"></a>
<FONT color="green">449</FONT>    <a name="line.449"></a>
<FONT color="green">450</FONT>            // If in the main class update the field too<a name="line.450"></a>
<FONT color="green">451</FONT>            if (!classGen.isExternal()) {<a name="line.451"></a>
<FONT color="green">452</FONT>                il.append(new ALOAD(iter.getIndex()));<a name="line.452"></a>
<FONT color="green">453</FONT>                il.append(new PUTFIELD(iteratorIndex));<a name="line.453"></a>
<FONT color="green">454</FONT>                ifBlock.setTarget(il.append(NOP));<a name="line.454"></a>
<FONT color="green">455</FONT>            } else {<a name="line.455"></a>
<FONT color="green">456</FONT>                // If class is not external, start of range for iter variable was<a name="line.456"></a>
<FONT color="green">457</FONT>                // set above<a name="line.457"></a>
<FONT color="green">458</FONT>                iter.setStart(iterStore);       <a name="line.458"></a>
<FONT color="green">459</FONT>            }<a name="line.459"></a>
<FONT color="green">460</FONT>    <a name="line.460"></a>
<FONT color="green">461</FONT>            // Get the parent of the node on the stack<a name="line.461"></a>
<FONT color="green">462</FONT>            il.append(methodGen.loadDOM());<a name="line.462"></a>
<FONT color="green">463</FONT>            il.append(new ILOAD(node.getIndex()));<a name="line.463"></a>
<FONT color="green">464</FONT>            int index = cpg.addInterfaceMethodref(DOM_INTF,<a name="line.464"></a>
<FONT color="green">465</FONT>                                                  GET_PARENT, GET_PARENT_SIG);<a name="line.465"></a>
<FONT color="green">466</FONT>            il.append(new INVOKEINTERFACE(index, 2));<a name="line.466"></a>
<FONT color="green">467</FONT>    <a name="line.467"></a>
<FONT color="green">468</FONT>            // Initialize the iterator with the parent<a name="line.468"></a>
<FONT color="green">469</FONT>            il.append(new ALOAD(iter.getIndex()));<a name="line.469"></a>
<FONT color="green">470</FONT>            il.append(SWAP);<a name="line.470"></a>
<FONT color="green">471</FONT>            il.append(methodGen.setStartNode());<a name="line.471"></a>
<FONT color="green">472</FONT>    <a name="line.472"></a>
<FONT color="green">473</FONT>            /* <a name="line.473"></a>
<FONT color="green">474</FONT>             * Inline loop:<a name="line.474"></a>
<FONT color="green">475</FONT>             *<a name="line.475"></a>
<FONT color="green">476</FONT>             * int node2;<a name="line.476"></a>
<FONT color="green">477</FONT>             * while ((node2 = iter.next()) != NodeIterator.END <a name="line.477"></a>
<FONT color="green">478</FONT>             *                &amp;&amp; node2 &lt; node);<a name="line.478"></a>
<FONT color="green">479</FONT>             * return node2 == node; <a name="line.479"></a>
<FONT color="green">480</FONT>             */<a name="line.480"></a>
<FONT color="green">481</FONT>            BranchHandle skipNext;<a name="line.481"></a>
<FONT color="green">482</FONT>            InstructionHandle begin, next;<a name="line.482"></a>
<FONT color="green">483</FONT>            node2 = methodGen.addLocalVariable("step_pattern_tmp3", <a name="line.483"></a>
<FONT color="green">484</FONT>                                               Util.getJCRefType(NODE_SIG),<a name="line.484"></a>
<FONT color="green">485</FONT>                                               null, null);<a name="line.485"></a>
<FONT color="green">486</FONT>    <a name="line.486"></a>
<FONT color="green">487</FONT>            skipNext = il.append(new GOTO(null));<a name="line.487"></a>
<FONT color="green">488</FONT>            next = il.append(new ALOAD(iter.getIndex()));<a name="line.488"></a>
<FONT color="green">489</FONT>            node2.setStart(next);<a name="line.489"></a>
<FONT color="green">490</FONT>            begin = il.append(methodGen.nextNode());<a name="line.490"></a>
<FONT color="green">491</FONT>            il.append(DUP);<a name="line.491"></a>
<FONT color="green">492</FONT>            il.append(new ISTORE(node2.getIndex()));<a name="line.492"></a>
<FONT color="green">493</FONT>            _falseList.add(il.append(new IFLT(null)));      // NodeIterator.END<a name="line.493"></a>
<FONT color="green">494</FONT>    <a name="line.494"></a>
<FONT color="green">495</FONT>            il.append(new ILOAD(node2.getIndex()));<a name="line.495"></a>
<FONT color="green">496</FONT>            il.append(new ILOAD(node.getIndex()));<a name="line.496"></a>
<FONT color="green">497</FONT>            iter.setEnd(il.append(new IF_ICMPLT(next)));<a name="line.497"></a>
<FONT color="green">498</FONT>    <a name="line.498"></a>
<FONT color="green">499</FONT>            node2.setEnd(il.append(new ILOAD(node2.getIndex())));<a name="line.499"></a>
<FONT color="green">500</FONT>            node.setEnd(il.append(new ILOAD(node.getIndex())));<a name="line.500"></a>
<FONT color="green">501</FONT>            _falseList.add(il.append(new IF_ICMPNE(null)));<a name="line.501"></a>
<FONT color="green">502</FONT>    <a name="line.502"></a>
<FONT color="green">503</FONT>            skipNext.setTarget(begin);<a name="line.503"></a>
<FONT color="green">504</FONT>        }<a name="line.504"></a>
<FONT color="green">505</FONT>            <a name="line.505"></a>
<FONT color="green">506</FONT>        public void translate(ClassGenerator classGen, MethodGenerator methodGen) {<a name="line.506"></a>
<FONT color="green">507</FONT>            final ConstantPoolGen cpg = classGen.getConstantPool();<a name="line.507"></a>
<FONT color="green">508</FONT>            final InstructionList il = methodGen.getInstructionList();<a name="line.508"></a>
<FONT color="green">509</FONT>    <a name="line.509"></a>
<FONT color="green">510</FONT>            if (hasPredicates()) {<a name="line.510"></a>
<FONT color="green">511</FONT>                switch (_contextCase) {<a name="line.511"></a>
<FONT color="green">512</FONT>                case NO_CONTEXT:<a name="line.512"></a>
<FONT color="green">513</FONT>                    translateNoContext(classGen, methodGen);<a name="line.513"></a>
<FONT color="green">514</FONT>                    break;<a name="line.514"></a>
<FONT color="green">515</FONT>                    <a name="line.515"></a>
<FONT color="green">516</FONT>                case SIMPLE_CONTEXT:<a name="line.516"></a>
<FONT color="green">517</FONT>                    translateSimpleContext(classGen, methodGen);<a name="line.517"></a>
<FONT color="green">518</FONT>                    break;<a name="line.518"></a>
<FONT color="green">519</FONT>                    <a name="line.519"></a>
<FONT color="green">520</FONT>                default:<a name="line.520"></a>
<FONT color="green">521</FONT>                    translateGeneralContext(classGen, methodGen);<a name="line.521"></a>
<FONT color="green">522</FONT>                    break;<a name="line.522"></a>
<FONT color="green">523</FONT>                }<a name="line.523"></a>
<FONT color="green">524</FONT>            }<a name="line.524"></a>
<FONT color="green">525</FONT>            else if (isWildcard()) {<a name="line.525"></a>
<FONT color="green">526</FONT>                il.append(POP);     // true list falls through<a name="line.526"></a>
<FONT color="green">527</FONT>            }<a name="line.527"></a>
<FONT color="green">528</FONT>            else {<a name="line.528"></a>
<FONT color="green">529</FONT>                translateKernel(classGen, methodGen);<a name="line.529"></a>
<FONT color="green">530</FONT>            }<a name="line.530"></a>
<FONT color="green">531</FONT>        }<a name="line.531"></a>
<FONT color="green">532</FONT>    }<a name="line.532"></a>




























































</PRE>
</BODY>
</HTML>
