org.apache.xalan.xsltc.compiler

## Class Pattern

- java.lang.Object
- - org.apache.xalan.xsltc.compiler.SyntaxTreeNode
  - - org.apache.xalan.xsltc.compiler.Pattern

All Implemented Interfaces:
  org.apache.bcel.generic.InstructionConstants, Constants

Direct Known Subclasses:
  LocationPathPattern

    public abstract class Pattern
    extends SyntaxTreeNode

Author:
  Jacek Ambroziak, Santiago Pericas-Geertsen

### Nested Class Summary

### Nested classes/interfaces inherited from interface org.apache.bcel.generic.InstructionConstants

`org.apache.bcel.generic.InstructionConstants.Clinit`

### Field Summary

### Fields inherited from class org.apache.xalan.xsltc.compiler.SyntaxTreeNode

`UNKNOWN_STYLESHEET_NODE_ID`

### Fields inherited from interface org.apache.xalan.xsltc.compiler.Constants

`ABSOLUTE_ITERATOR, ACC_FINAL, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_SUPER, ADD_ATTRIBUTE, ADD_ATTRIBUTE_SIG, ADD_ITERATOR, ADD_ITERATOR_SIG, ADD_PARAMETER, ADD_PARAMETER_SIG, APPLY_TEMPLATES, ATTR_SET_SIG, ATTRIBUTE_LIST_FIELD, ATTRIBUTE_LIST_IMPL_CLASS, ATTRIBUTE_LIST_IMPL_SIG, ATTRIBUTES_SIG, BASIS_LIBRARY_CLASS, BOOLEAN_CLASS, BOOLEAN_VALUE, BOOLEAN_VALUE_SIG, CACHED_NODE_LIST_ITERATOR_CLASS, CHARACTERS, CHARACTERS_SIG, CHARACTERSW, CHARACTERSW_SIG, CLEAR_ATTRIBUTES, CLEAR_ATTRIBUTES_SIG, COLLATOR_CLASS, COLLATOR_SIG, COMPILER_PACKAGE, CURRENT_NODE_LIST_FILTER, CURRENT_NODE_LIST_FILTER_SIG, CURRENT_NODE_LIST_ITERATOR, CURRENT_NODE_LIST_ITERATOR_SIG, DEFAULT_NODE_COUNTER, DEFAULT_NODE_COUNTER_SIG, DOCUMENT_PNAME, DOM_ADAPTER_CLASS, DOM_ADAPTER_SIG, DOM_FIELD, DOM_IMPL, DOM_IMPL_CLASS, DOM_IMPL_SIG, DOM_INTF, DOM_INTF_SIG, DOM_PNAME, DOUBLE_CLASS, DOUBLE_SIG, DOUBLE_VALUE, DOUBLE_VALUE_SIG, DUP_FILTERED_ITERATOR, EMPTYATTR_FIELD, EMPTYSTRING, ERROR, EXPAND_STYLESHEET_QNAME_REF, EXPAND_STYLESHEET_QNAME_SIG, FALLBACK_CLASS, FATAL, FILTER_INTERFACE, FILTER_INTERFACE_SIG, FILTER_ITERATOR, FILTER_STEP_ITERATOR, FORMAT_SYMBOLS_FIELD, GET_ATTRIBUTE_VALUE, GET_ATTRIBUTE_VALUE_SIG, GET_CHILDREN, GET_CHILDREN_SIG, GET_ELEMENT_VALUE, GET_ELEMENT_VALUE_SIG, GET_ITERATOR_SIG, GET_NODE_NAME, GET_NODE_NAME_SIG, GET_NODE_TYPE, GET_NODE_TYPE_SIG, GET_NODE_VALUE, GET_NODE_VALUE_ITERATOR, GET_NODE_VALUE_ITERATOR_SIG, GET_NODE_VALUE_SIG, GET_PARAMETER, GET_PARAMETER_SIG, GET_PARENT, GET_PARENT_SIG, GET_TYPED_CHILDREN, GET_TYPED_CHILDREN_SIG, GET_UNPARSED_ENTITY_URI, GET_UNPARSED_ENTITY_URI_SIG, HAS_ATTRIBUTE, HAS_ATTRIBUTE_SIG, HASIDCALL_INDEX, HASIDCALL_INDEX_SIG, INT_VALUE, INT_VALUE_SIG, INTEGER_CLASS, INTEGER_SIG, INTERNAL, INVOKE_METHOD, ITERATOR_FIELD_SIG, ITERATOR_PNAME, KEY_INDEX_CLASS, KEY_INDEX_ITERATOR_SIG, KEY_INDEX_SIG, LAST_INDEX, LOAD_DOCUMENT_CLASS, LOCALE_CLASS, LOCALE_SIG, LOOKUP_STYLESHEET_QNAME_NS_REF, LOOKUP_STYLESHEET_QNAME_NS_SIG, MAKE_NODE, MAKE_NODE_LIST, MAKE_NODE_LIST_SIG, MAKE_NODE_LIST_SIG2, MAKE_NODE_SIG, MAKE_NODE_SIG2, MATCHING_ITERATOR, MATH_CLASS, MULTI_DOM_CLASS, MULTI_DOM_SIG, NAMES_INDEX, NAMES_INDEX_SIG, NAMESPACE_FEATURE, NAMESPACE_INDEX, NAMESPACE_INDEX_SIG, NEXT, NEXT_SIG, NEXTID, NODE, NODE_COUNTER, NODE_COUNTER_SIG, NODE_FIELD, NODE_FIELD_SIG, NODE_ITERATOR, NODE_ITERATOR_BASE, NODE_ITERATOR_SIG, NODE_PNAME, NODE_SIG, NODE_SORT_FACTORY, NODE_SORT_FACTORY_SIG, NODE_SORT_RECORD, NODE_SORT_RECORD_SIG, NS_ANCESTORS_INDEX_SIG, NTH_ITERATOR_CLASS, OBJECT_CLASS, OBJECT_SIG, ORDER_ITERATOR, ORDER_ITERATOR_SIG, OUTPUT_BASE, OUTPUT_HANDLER, OUTPUT_HANDLER_SIG, POP_PARAM_FRAME, POP_PARAM_FRAME_SIG, POSITION_INDEX, PREFIX_URIS_ARRAY_SIG, PREFIX_URIS_IDX_SIG, PUSH_PARAM_FRAME, PUSH_PARAM_FRAME_SIG, REDIRECT_URI, RESET, RESET_SIG, RTF_INITIAL_SIZE, RUNTIME_NODE_CLASS, RUNTIME_PACKAGE, SAX_IMPL, SAX_IMPL_CLASS, SAX_IMPL_SIG, SET_START_NODE, SET_START_NODE_SIG, SINGLETON_ITERATOR, SORT_ITERATOR, SORT_ITERATOR_SIG, STATIC_CHAR_DATA_FIELD, STATIC_CHAR_DATA_FIELD_SIG, STATIC_NAMES_ARRAY_FIELD, STATIC_NAMESPACE_ARRAY_FIELD, STATIC_NS_ANCESTORS_ARRAY_FIELD, STATIC_PREFIX_URIS_ARRAY_FIELD, STATIC_PREFIX_URIS_IDX_ARRAY_FIELD, STATIC_TYPES_ARRAY_FIELD, STATIC_URIS_ARRAY_FIELD, STEP_ITERATOR_CLASS, STREAM_XML_OUTPUT, STRING, STRING_BUFFER_CLASS, STRING_BUFFER_SIG, STRING_CLASS, STRING_SIG, STRING_TO_INT, STRING_TO_INT_SIG, STRING_TO_REAL, STRING_TO_REAL_SIG, STRING_VALUE_HANDLER, STRING_VALUE_HANDLER_SIG, STRING_WRITER, STRIP_SPACE, STRIP_SPACE_INTF, STRIP_SPACE_PARAMS, STRIP_SPACE_SIG, TRANSLET_CLASS, TRANSLET_FIELD, TRANSLET_FIELD_SIG, TRANSLET_INTF, TRANSLET_INTF_SIG, TRANSLET_OUTPUT_BASE, TRANSLET_OUTPUT_INTERFACE, TRANSLET_OUTPUT_PNAME, TRANSLET_OUTPUT_SIG, TRANSLET_PNAME, TRANSLET_SIG, TRANSLET_URI, TRANSLET_VERSION_INDEX, TRANSLET_VERSION_INDEX_SIG, TYPES_INDEX, TYPES_INDEX_SIG, UNION_ITERATOR_CLASS, UNION_ITERATOR_SIG, UNSUPPORTED, URIS_INDEX, URIS_INDEX_SIG, WARNING, WRITER_SIG, XHTML_URI, XMLNS_PREFIX, XMLNS_STRING, XMLNS_URI, XSLT_PACKAGE, XSLT_URI`

### Fields inherited from interface org.apache.bcel.generic.InstructionConstants

`AALOAD, AASTORE, ACONST_NULL, ALOAD_0, ALOAD_1, ALOAD_2, ARETURN, ARRAYLENGTH, ASTORE_0, ASTORE_1, ASTORE_2, ATHROW, BALOAD, BASTORE, bla, CALOAD, CASTORE, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DMUL, DNEG, DREM, DRETURN, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FMUL, FNEG, FREM, FRETURN, FSUB, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, ILOAD_0, ILOAD_1, ILOAD_2, IMUL, INEG, INSTRUCTIONS, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE_0, ISTORE_1, ISTORE_2, ISUB, IUSHR, IXOR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDIV, LMUL, LNEG, LOR, LREM, LRETURN, LSHL, LSHR, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, NOP, POP, POP2, RETURN, SALOAD, SASTORE, SWAP, THIS`

### Constructor Summary

Constructors
Constructor and Description
`Pattern()`

### Method Summary

Methods
`void` `backPatchFalseList(org.apache.bcel.generic.InstructionHandle ih)`
`void` `backPatchTrueList(org.apache.bcel.generic.InstructionHandle ih)`
`org.apache.bcel.generic.InstructionList` `compile(ClassGenerator classGen, MethodGenerator methodGen)` Translate this node into a fresh instruction list.
`void` `desynthesize(ClassGenerator classGen, MethodGenerator methodGen)`
`java.lang.Object` `evaluateAtCompileTime()` Returns an object representing the compile-time evaluation of an expression.
`FlowList` `getFalseList()`
`abstract double` `getPriority()` Returns the priority of this pattern (section 5.5 in the XSLT spec).
`FlowList` `getTrueList()`
`Type` `getType()`
`boolean` `hasLastCall()`
`boolean` `hasPositionCall()`
`MethodType` `lookupPrimop(org.apache.xalan.xsltc.compiler.SymbolTable stable, java.lang.String op, MethodType ctype)` Search for a primop in the symbol table that matches the method type `ctype`.
`void` `startIterator(ClassGenerator classGen, MethodGenerator methodGen)` If this expression is of type node-set and it is not a variable reference, then call setStartNode() passing the context node.
`void` `synthesize(ClassGenerator classGen, MethodGenerator methodGen)` Synthesize a boolean expression, i.e., either push a 0 or 1 onto the operand stack for the next statement to succeed.
`abstract java.lang.String` `toString()`
`abstract void` `translate(ClassGenerator classGen, MethodGenerator methodGen)` Translate this node into JVM bytecodes.
`void` `translateDesynthesized(ClassGenerator classGen, MethodGenerator methodGen)` Redefined by expressions of type boolean that use flow lists.
`abstract Type` `typeCheck(org.apache.xalan.xsltc.compiler.SymbolTable stable)` Returns the type of a pattern, which is always a `NodeType`.

### Methods inherited from class org.apache.xalan.xsltc.compiler.SyntaxTreeNode

`display, getLineNumber, getParser, getStylesheet, parseContents`

### Methods inherited from class java.lang.Object

`equals, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Constructor Detail

#### Pattern

    public Pattern()

### Method Detail

#### typeCheck

    public abstract Type typeCheck(org.apache.xalan.xsltc.compiler.SymbolTable stable)
                            throws TypeCheckError

Returns the type of a pattern, which is always a `NodeType`. A `NodeType` has a number of subtypes defined by `NodeType._type` corresponding to each type of node.

Parameters:
  `stable` - The compiler/parser's symbol table
Throws:
  `TypeCheckError`

#### translate

    public abstract void translate(ClassGenerator classGen,
                 MethodGenerator methodGen)

Translate this node into JVM bytecodes. Patterns are translated as boolean expressions with true/false lists. Before calling `translate` on a pattern, make sure that the node being matched is on top of the stack. After calling `translate`, make sure to backpatch both true and false lists. True lists are the default, in the sense that they always "fall through". If this is not the intended semantics (e.g., see `AlternativePattern.translate(org.apache.xalan.xsltc.compiler.util.ClassGenerator, org.apache.xalan.xsltc.compiler.util.MethodGenerator)`) then a GOTO must be appended to the instruction list after calling `translate`.

Parameters:
  `classGen` - BCEL Java class generator
  `methodGen` - BCEL Java method generator

#### getPriority

    public abstract double getPriority()

Returns the priority of this pattern (section 5.5 in the XSLT spec).

#### getType

    public Type getType()

#### toString

    public abstract java.lang.String toString()

Overrides:
  `toString` in class `java.lang.Object`

#### hasPositionCall

    public boolean hasPositionCall()

#### hasLastCall

    public boolean hasLastCall()

#### evaluateAtCompileTime

    public java.lang.Object evaluateAtCompileTime()

Returns an object representing the compile-time evaluation of an expression. We are only using this for function-available and element-available at this time.

#### compile

    public final org.apache.bcel.generic.InstructionList compile(ClassGenerator classGen,
                                                  MethodGenerator methodGen)

Translate this node into a fresh instruction list. The original instruction list is saved and restored.

#### translateDesynthesized

    public void translateDesynthesized(ClassGenerator classGen,
                              MethodGenerator methodGen)

Redefined by expressions of type boolean that use flow lists.

#### startIterator

    public void startIterator(ClassGenerator classGen,
                     MethodGenerator methodGen)

If this expression is of type node-set and it is not a variable reference, then call setStartNode() passing the context node.

#### synthesize

    public void synthesize(ClassGenerator classGen,
                  MethodGenerator methodGen)

Synthesize a boolean expression, i.e., either push a 0 or 1 onto the operand stack for the next statement to succeed. Returns the handle of the instruction to be backpatched.

#### desynthesize

    public void desynthesize(ClassGenerator classGen,
                    MethodGenerator methodGen)

#### getFalseList

    public FlowList getFalseList()

#### getTrueList

    public FlowList getTrueList()

#### backPatchFalseList

    public void backPatchFalseList(org.apache.bcel.generic.InstructionHandle ih)

#### backPatchTrueList

    public void backPatchTrueList(org.apache.bcel.generic.InstructionHandle ih)

#### lookupPrimop

    public MethodType lookupPrimop(org.apache.xalan.xsltc.compiler.SymbolTable stable,
                          java.lang.String op,
                          MethodType ctype)

Search for a primop in the symbol table that matches the method type `ctype`. Two methods match if they have the same arity. If a primop is overloaded then the "closest match" is returned. The first entry in the vector of primops that has the right arity is considered to be the default one.