/* * The Apache Software License, Version 1.1 * * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Xalan" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation and was * originally based on software copyright (c) 1999, Lotus * Development Corporation., http://www.lotus.com. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ package org.apache.xpath.compiler; /** * Operations codes for XPath. * * Code for the descriptions of the operations codes: * [UPPER CASE] indicates a literal value, * [lower case] is a description of a value, * ([length] always indicates the length of the operation, * including the operations code and the length integer.) * {UPPER CASE} indicates the given production, * {description} is the description of a new production, * (For instance, {boolean expression} means some expression * that should be resolved to a boolean.) * * means that it occurs zero or more times, * + means that it occurs one or more times, * ? means that it is optional. * * returns: indicates what the production should return. */ public class OpCodes { /** * <meta name="usage" content="advanced"/> * [ENDOP] * Some operators may like to have a terminator. */ public static final int ENDOP = -1; /** * [EMPTY] * Empty slot to indicate NULL. */ public static final int EMPTY = -2; /** * <meta name="usage" content="advanced"/> * [ELEMWILDCARD] * Means ELEMWILDCARD ("*"), used instead * of string index in some places. */ public static final int ELEMWILDCARD = -3; /** * <meta name="usage" content="advanced"/> * [OP_XPATH] * [length] * {expression} * * returns: * XNodeSet * XNumber * XString * XBoolean * XRTree * XObject */ public static final int OP_XPATH = 1; /** * <meta name="usage" content="advanced"/> * [OP_OR] * [length] * {boolean expression} * {boolean expression} * * returns: * XBoolean */ public static final int OP_OR = 2; /** * <meta name="usage" content="advanced"/> * [OP_AND] * [length] * {boolean expression} * {boolean expression} * * returns: * XBoolean */ public static final int OP_AND = 3; /** * <meta name="usage" content="advanced"/> * [OP_NOTEQUALS] * [length] * {expression} * {expression} * * returns: * XBoolean */ public static final int OP_NOTEQUALS = 4; /** * <meta name="usage" content="advanced"/> * [OP_EQUALS] * [length] * {expression} * {expression} * * returns: * XBoolean */ public static final int OP_EQUALS = 5; /** * <meta name="usage" content="advanced"/> * [OP_LTE] (less-than-or-equals) * [length] * {number expression} * {number expression} * * returns: * XBoolean */ public static final int OP_LTE = 6; /** * <meta name="usage" content="advanced"/> * [OP_LT] (less-than) * [length] * {number expression} * {number expression} * * returns: * XBoolean */ public static final int OP_LT = 7; /** * <meta name="usage" content="advanced"/> * [OP_GTE] (greater-than-or-equals) * [length] * {number expression} * {number expression} * * returns: * XBoolean */ public static final int OP_GTE = 8; /** * <meta name="usage" content="advanced"/> * [OP_GT] (greater-than) * [length] * {number expression} * {number expression} * * returns: * XBoolean */ public static final int OP_GT = 9; /** * <meta name="usage" content="advanced"/> * [OP_PLUS] * [length] * {number expression} * {number expression} * * returns: * XNumber */ public static final int OP_PLUS = 10; /** * <meta name="usage" content="advanced"/> * [OP_MINUS] * [length] * {number expression} * {number expression} * * returns: * XNumber */ public static final int OP_MINUS = 11; /** * <meta name="usage" content="advanced"/> * [OP_MULT] * [length] * {number expression} * {number expression} * * returns: * XNumber */ public static final int OP_MULT = 12; /** * <meta name="usage" content="advanced"/> * [OP_DIV] * [length] * {number expression} * {number expression} * * returns: * XNumber */ public static final int OP_DIV = 13; /** * <meta name="usage" content="advanced"/> * [OP_MOD] * [length] * {number expression} * {number expression} * * returns: * XNumber */ public static final int OP_MOD = 14; /** * <meta name="usage" content="advanced"/> * [OP_QUO] * [length] * {number expression} * {number expression} * * returns: * XNumber */ public static final int OP_QUO = 15; /** * <meta name="usage" content="advanced"/> * [OP_NEG] * [length] * {number expression} * * returns: * XNumber */ public static final int OP_NEG = 16; /** * <meta name="usage" content="advanced"/> * [OP_STRING] (cast operation) * [length] * {expression} * * returns: * XString */ public static final int OP_STRING = 17; /** * <meta name="usage" content="advanced"/> * [OP_BOOL] (cast operation) * [length] * {expression} * * returns: * XBoolean */ public static final int OP_BOOL = 18; /** * <meta name="usage" content="advanced"/> * [OP_NUMBER] (cast operation) * [length] * {expression} * * returns: * XBoolean */ public static final int OP_NUMBER = 19; /** * <meta name="usage" content="advanced"/> * [OP_UNION] * [length] * {PathExpr}+ * * returns: * XNodeSet */ public static final int OP_UNION = 20; /** * <meta name="usage" content="advanced"/> * [OP_LITERAL] * [3] * [index to token] * * returns: * XString */ public static final int OP_LITERAL = 21; /** The low opcode for nodesets, needed by getFirstPredicateOpPos and * getNextStepPos. */ static final int FIRST_NODESET_OP = 22; /** * <meta name="usage" content="advanced"/> * [OP_VARIABLE] * [4] * [index to namespace token, or EMPTY] * [index to function name token] * * returns: * XString */ public static final int OP_VARIABLE = 22; /** * <meta name="usage" content="advanced"/> * [OP_GROUP] * [length] * {expression} * * returns: * XNodeSet * XNumber * XString * XBoolean * XRTree * XObject */ public static final int OP_GROUP = 23; /** * <meta name="usage" content="advanced"/> * [OP_EXTFUNCTION] (Extension function.) * [length] * [index to namespace token] * [index to function name token] * {OP_ARGUMENT} * * returns: * XNodeSet * XNumber * XString * XBoolean * XRTree * XObject */ public static final int OP_EXTFUNCTION = 24; /** * <meta name="usage" content="advanced"/> * [OP_FUNCTION] * [length] * [FUNC_name] * {OP_ARGUMENT} * [ENDOP] * * returns: * XNodeSet * XNumber * XString * XBoolean * XRTree * XObject */ public static final int OP_FUNCTION = 25; /** The last opcode for stuff that can be a nodeset. */ static final int LAST_NODESET_OP = 25; /** * <meta name="usage" content="advanced"/> * [OP_ARGUMENT] (Function argument.) * [length] * {expression} * * returns: * XNodeSet * XNumber * XString * XBoolean * XRTree * XObject */ public static final int OP_ARGUMENT = 26; /** * <meta name="usage" content="advanced"/> * [OP_NUMBERLIT] (Number literal.) * [3] * [index to token] * * returns: * XString */ public static final int OP_NUMBERLIT = 27; /** * <meta name="usage" content="advanced"/> * [OP_LOCATIONPATH] * [length] * {FROM_stepType} * | {function} * {predicate} * [ENDOP] * * (Note that element and attribute namespaces and * names can be wildcarded '*'.) * * returns: * XNodeSet */ public static final int OP_LOCATIONPATH = 28; // public static final int LOCATIONPATHEX_MASK = 0x0000FFFF; // public static final int LOCATIONPATHEX_ISSIMPLE = 0x00010000; // public static final int OP_LOCATIONPATH_EX = (28 | 0x00010000); /** * <meta name="usage" content="advanced"/> * [OP_PREDICATE] * [length] * {expression} * [ENDOP] (For safety) * * returns: * XBoolean or XNumber */ public static final int OP_PREDICATE = 29; /** * <meta name="usage" content="advanced"/> * [OP_MATCHPATTERN] * [length] * {PathExpr}+ * * returns: * XNodeSet */ public static final int OP_MATCHPATTERN = 30; /** * <meta name="usage" content="advanced"/> * [OP_LOCATIONPATHPATTERN] * [length] * {FROM_stepType} * | {function}{predicate} * [ENDOP] * returns: * XNodeSet */ public static final int OP_LOCATIONPATHPATTERN = 31; /** * <meta name="usage" content="advanced"/> * [NODETYPE_COMMENT] * No size or arguments. * Note: must not overlap function OP number! * * returns: * XBoolean */ public static final int NODETYPE_COMMENT = 1030; /** * <meta name="usage" content="advanced"/> * [NODETYPE_TEXT] * No size or arguments. * Note: must not overlap function OP number! * * returns: * XBoolean */ public static final int NODETYPE_TEXT = 1031; /** * <meta name="usage" content="advanced"/> * [NODETYPE_PI] * [index to token] * Note: must not overlap function OP number! * * returns: * XBoolean */ public static final int NODETYPE_PI = 1032; /** * <meta name="usage" content="advanced"/> * [NODETYPE_NODE] * No size or arguments. * Note: must not overlap function OP number! * * returns: * XBoolean */ public static final int NODETYPE_NODE = 1033; /** * <meta name="usage" content="advanced"/> * [NODENAME] * [index to ns token or EMPTY] * [index to name token] * * returns: * XBoolean */ public static final int NODENAME = 34; /** * <meta name="usage" content="advanced"/> * [NODETYPE_ROOT] * No size or arguments. * * returns: * XBoolean */ public static final int NODETYPE_ROOT = 35; /** * <meta name="usage" content="advanced"/> * [NODETYPE_ANY] * No size or arguments. * * returns: * XBoolean */ public static final int NODETYPE_ANYELEMENT = 36; /** * <meta name="usage" content="advanced"/> * [NODETYPE_ANY] * No size or arguments. * * returns: * XBoolean */ public static final int NODETYPE_FUNCTEST = 1034; /** * <meta name="usage" content="advanced"/> * [FROM_stepType] * [length, including predicates] * [length of just the step, without the predicates] * {node test} * {predicates}? * * returns: * XBoolean */ public static final int AXES_START_TYPES = 37; /** ancestor axes opcode. */ public static final int FROM_ANCESTORS = 37; /** ancestor-or-self axes opcode. */ public static final int FROM_ANCESTORS_OR_SELF = 38; /** attribute axes opcode. */ public static final int FROM_ATTRIBUTES = 39; /** children axes opcode. */ public static final int FROM_CHILDREN = 40; /** descendants axes opcode. */ public static final int FROM_DESCENDANTS = 41; /** descendants-of-self axes opcode. */ public static final int FROM_DESCENDANTS_OR_SELF = 42; /** following axes opcode. */ public static final int FROM_FOLLOWING = 43; /** following-siblings axes opcode. */ public static final int FROM_FOLLOWING_SIBLINGS = 44; /** parent axes opcode. */ public static final int FROM_PARENT = 45; /** preceding axes opcode. */ public static final int FROM_PRECEDING = 46; /** preceding-sibling axes opcode. */ public static final int FROM_PRECEDING_SIBLINGS = 47; /** self axes opcode. */ public static final int FROM_SELF = 48; /** namespace axes opcode. */ public static final int FROM_NAMESPACE = 49; /** '/' axes opcode. */ public static final int FROM_ROOT = 50; /** * <meta name="usage" content="advanced"/> * For match patterns. */ public static final int MATCH_ATTRIBUTE = 51; /** * <meta name="usage" content="advanced"/> * For match patterns. */ public static final int MATCH_ANY_ANCESTOR = 52; /** * <meta name="usage" content="advanced"/> * For match patterns. */ public static final int MATCH_IMMEDIATE_ANCESTOR = 53; /** The end of the axes types. */ public static final int AXES_END_TYPES = 53; /** The next free ID. Please keep this up to date. */ private static final int NEXT_FREE_ID = 99; }