org.apache.xalan.xsltc.compiler
Class LocationPathPattern

java.lang.Object
  extended by org.apache.xalan.xsltc.compiler.SyntaxTreeNode
      extended by org.apache.xalan.xsltc.compiler.Pattern
          extended by org.apache.xalan.xsltc.compiler.LocationPathPattern
All Implemented Interfaces:
org.apache.bcel.generic.InstructionConstants, Constants

public abstract class LocationPathPattern
extends Pattern

Author:
Jacek Ambroziak, Santiago Pericas-Geertsen, Morten Jorgensen

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 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, CALL_FUNCTION_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, 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_SIG, LAST_INDEX, LOAD_DOCUMENT_CLASS, LOCALE_CLASS, LOCALE_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, 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, 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_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
LocationPathPattern()
           
 
Method Summary
 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.
 int getAxis()
           
 double getDefaultPriority()
           
 FlowList getFalseList()
           
abstract  org.apache.xalan.xsltc.compiler.StepPattern getKernelPattern()
           
 double getPriority()
          Returns the priority of this pattern (section 5.5 in the XSLT spec).
 Template getTemplate()
          Get the Template node that represents the element that this node occured under.
 FlowList getTrueList()
           
 Type getType()
           
 boolean hasLastCall()
           
 boolean hasPositionCall()
           
abstract  boolean isWildcard()
           
 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.
 boolean noSmallerThan(LocationPathPattern other)
          This method is used by the Mode class to prioritise patterns and template.
abstract  void reduceKernelPattern()
           
 void setTemplate(Template template)
           
 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.
 java.lang.String toString()
           
 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.
 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

LocationPathPattern

public LocationPathPattern()
Method Detail

typeCheck

public Type typeCheck(org.apache.xalan.xsltc.compiler.SymbolTable stable)
               throws TypeCheckError
Description copied from class: Pattern
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.

Specified by:
typeCheck in class Pattern
Parameters:
stable - The compiler/parser's symbol table
Throws:
TypeCheckError

translate

public void translate(ClassGenerator classGen,
                      MethodGenerator methodGen)
Description copied from class: Pattern
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.

Specified by:
translate in class Pattern
Parameters:
classGen - BCEL Java class generator
methodGen - BCEL Java method generator

setTemplate

public void setTemplate(Template template)

getTemplate

public Template getTemplate()
Description copied from class: SyntaxTreeNode
Get the Template node that represents the element that this node occured under. Note that this method will return 'null' for nodes that represent top-level elements.

Returns:
The Template ancestor node of this node or 'null'.

getPriority

public final double getPriority()
Description copied from class: Pattern
Returns the priority of this pattern (section 5.5 in the XSLT spec).

Specified by:
getPriority in class Pattern

getDefaultPriority

public double getDefaultPriority()

noSmallerThan

public boolean noSmallerThan(LocationPathPattern other)
This method is used by the Mode class to prioritise patterns and template. This method is called for templates that are in the same mode and that match on the same core pattern. The rules used are: o) first check precedence - highest precedence wins o) then check priority - highest priority wins o) then check the position - the template that occured last wins


getKernelPattern

public abstract org.apache.xalan.xsltc.compiler.StepPattern getKernelPattern()

reduceKernelPattern

public abstract void reduceKernelPattern()

isWildcard

public abstract boolean isWildcard()

getAxis

public int getAxis()

toString

public java.lang.String toString()

getType

public Type getType()

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.



Copyright © 2005 Apache XML Project. All Rights Reserved.