Package 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
-
-
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 Description Pattern()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description 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 typectype
.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 aNodeType
.-
Methods inherited from class org.apache.xalan.xsltc.compiler.SyntaxTreeNode
display, getLineNumber, getParser, getStylesheet, parseContents
-
-
-
-
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 aNodeType
. ANodeType
has a number of subtypes defined byNodeType._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 callingtranslate
on a pattern, make sure that the node being matched is on top of the stack. After callingtranslate
, 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., seetranslate(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 callingtranslate
.- Parameters:
classGen
- BCEL Java class generatormethodGen
- 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 classjava.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 typectype
. 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.
-
-