net.sf.saxon.expr

Class CastExpression

public final class CastExpression extends UnaryExpression

Cast Expression: implements "cast as data-type ( expression )". It also allows an internal cast, which has the same semantics as a user-requested cast, but maps an empty sequence to an empty sequence.
Field Summary
static IntHashMap<int[]>castingTable
Constructor Summary
CastExpression(Expression source, AtomicType target, boolean allowEmpty)
Create a cast expression
Method Summary
static voidaddAllowedCasts(int source, int[] target)
booleanallowsEmpty()
Ask whether the expression accepts an empty sequence as input (producing an empty sequence as output)
static AtomicValuecastStringToQName(CharSequence operand, AtomicType targetType, StaticContext env)
Evaluate the "pseudo-cast" of a string literal to a QName or NOTATION value.
intcomputeCardinality()
Get the static cardinality of the expression
intcomputeSpecialProperties()
Determine the special properties of this expression
Expressioncopy()
Copy an expression.
booleanequals(Object other)
Is this expression the same as another expression?
ItemevaluateItem(XPathContext context)
Evaluate the expression
voidexplain(ExpressionPresenter out)
Diagnostic print of expression structure.
ItemTypegetItemType(TypeHierarchy th)
Get the static type of the expression
AtomicTypegetTargetPrimitiveType()
Get the primitive base type of the target type of the cast
AtomicTypegetTargetType()
Get the target type (the result type)
static booleanisPossibleCast(int source, int target)
Determine whether casting from a source type to a target type is possible
booleanisUpCast()
Ask whether this is a cast to a supertype of the original type
Expressionsimplify(ExpressionVisitor visitor)
Simplify the expression
booleantargetIsDerived()
Ask whether the target type is a derived type (not a primitive type)
StringtoString()
The toString() method for an expression attempts to give a representation of the expression in an XPath-like form, but there is no guarantee that the syntax will actually be true XPath.
ExpressiontypeCheck(ExpressionVisitor visitor, ItemType contextItemType)
Type-check the expression

Field Detail

castingTable

static IntHashMap<int[]> castingTable

Constructor Detail

CastExpression

public CastExpression(Expression source, AtomicType target, boolean allowEmpty)
Create a cast expression

Parameters: source expression giving the value to be converted target the type to which the value is to be converted allowEmpty true if the expression allows an empty sequence as input, producing an empty sequence as output. If false, an empty sequence is a type error.

Method Detail

addAllowedCasts

static void addAllowedCasts(int source, int[] target)

allowsEmpty

public boolean allowsEmpty()
Ask whether the expression accepts an empty sequence as input (producing an empty sequence as output)

Returns: true if an empty sequence is accepted

castStringToQName

public static AtomicValue castStringToQName(CharSequence operand, AtomicType targetType, StaticContext env)
Evaluate the "pseudo-cast" of a string literal to a QName or NOTATION value. This can only happen at compile time

Parameters: operand the value to be converted targetType the type to which it is to be converted env the static context

Returns: the QName or NOTATION value that results from casting the string to a QName. This will either be a QNameValue or a derived AtomicValue derived from QName or NOTATION

computeCardinality

public int computeCardinality()
Get the static cardinality of the expression

computeSpecialProperties

public int computeSpecialProperties()
Determine the special properties of this expression

Returns: NON_CREATIVE.

copy

public Expression copy()
Copy an expression. This makes a deep copy.

Returns: the copy of the original expression

equals

public boolean equals(Object other)
Is this expression the same as another expression?

evaluateItem

public Item evaluateItem(XPathContext context)
Evaluate the expression

explain

public void explain(ExpressionPresenter out)
Diagnostic print of expression structure. The abstract expression tree is written to the supplied output destination.

getItemType

public ItemType getItemType(TypeHierarchy th)
Get the static type of the expression

Parameters: th the type hierarchy cache

getTargetPrimitiveType

public AtomicType getTargetPrimitiveType()
Get the primitive base type of the target type of the cast

Returns: the primitive type of the target type

getTargetType

public AtomicType getTargetType()
Get the target type (the result type)

Returns: the target type

isPossibleCast

public static boolean isPossibleCast(int source, int target)
Determine whether casting from a source type to a target type is possible

Parameters: source a primitive type (one that has an entry in the casting table) target another primitive type

Returns: true if the entry in the casting table is either "Y" (casting always succeeds) or "M" (casting allowed but may fail for some values)

isUpCast

public boolean isUpCast()
Ask whether this is a cast to a supertype of the original type

Returns: true if this is an upcast. This means the value stays unchanged and only the type label changes

simplify

public Expression simplify(ExpressionVisitor visitor)
Simplify the expression

Parameters: visitor an expression visitor

Returns: the simplified expression

targetIsDerived

public boolean targetIsDerived()
Ask whether the target type is a derived type (not a primitive type)

Returns: true if the target type is a derived type

toString

public String toString()
The toString() method for an expression attempts to give a representation of the expression in an XPath-like form, but there is no guarantee that the syntax will actually be true XPath. In the case of XSLT instructions, the toString() method gives an abstracted view of the syntax

typeCheck

public Expression typeCheck(ExpressionVisitor visitor, ItemType contextItemType)
Type-check the expression