286N/A * reserved comment block 286N/A * DO NOT REMOVE OR ALTER! 286N/A * Copyright 2001-2005 The Apache Software Foundation. 286N/A * Licensed under the Apache License, Version 2.0 (the "License"); 286N/A * you may not use this file except in compliance with the License. 286N/A * You may obtain a copy of the License at 286N/A * Unless required by applicable law or agreed to in writing, software 286N/A * distributed under the License is distributed on an "AS IS" BASIS, 286N/A * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 286N/A * See the License for the specific language governing permissions and 286N/A * limitations under the License. 286N/A * @author Jacek Ambroziak 286N/A * @author Santiago Pericas-Geertsen 286N/A * Type check a FilterParentPath. If the filter is not a node-set add a 286N/A * cast to node-set only if it is of reference type. This type coercion is 286N/A * needed for expressions like $x/LINE where $x is a parameter reference. 286N/A else if (ftype instanceof ResultTreeType) { 286N/A _filterExpr = new CastExpr(_filterExpr, Type.NodeSet); 286N/A // Wrap single node path in a node set 286N/A // Create new StepIterator 286N/A // Backwards branches are prohibited if an uninitialized object is 286N/A // on the stack by section 4.9.4 of the JVM Specification, 2nd Ed. 286N/A // We don't know whether this code might contain backwards branches, 286N/A // so we mustn't create the new object until after we've created 286N/A // the suspect arguments to its constructor. Instead we calculate 286N/A // the values of the arguments to the constructor first, store them 286N/A // in temporary variables, create the object and reload the 286N/A // arguments from the temporaries to avoid the problem. 286N/A // Recursively compile 2 iterators 286N/A // Initialize StepIterator with iterators from the stack 286N/A // This is a special case for the //* path with or without predicates