gnu.kawa.xml

Class NodeType

Implemented Interfaces:
Externalizable, ItemPredicate, NodePredicate, TypeValue
Known Direct Subclasses:
AttributeType, ElementType, ProcessingInstructionType

public class NodeType
extends ObjectType
implements TypeValue, NodePredicate, Externalizable

A SeqPosition used to represent a node in (usually) a TreeList. This is special in that the represented node is the current position of the SeqPosition - but when passed to a method it is only valid during that method. After the method returns, the caller is free to change the position, so if the node is saved in a data structure it must be copied.

Field Summary

static int
ATTRIBUTE_OK
static int
COMMENT_OK
static int
DOCUMENT_OK
static int
ELEMENT_OK
static int
PI_OK
static int
TEXT_OK
static NodeType
anyNodeTest
static NodeType
commentNodeTest
static NodeType
documentNodeTest
static NodeType
nodeType
static NodeType
textNodeTest
static ClassType
typeKNode
static ClassType
typeNodeType

Fields inherited from class gnu.bytecode.ObjectType

flags

Fields inherited from class gnu.bytecode.Type

booleanValue_method, boolean_ctype, boolean_type, byte_type, char_type, clone_method, doubleValue_method, double_type, floatValue_method, float_type, intValue_method, int_type, java_lang_Class_type, longValue_method, long_type, neverReturnsType, nullType, number_type, pointer_type, reflectClass, short_type, string_type, throwable_type, toString_method, tostring_type, typeArray0, void_type

Constructor Summary

NodeType(String name)
NodeType(String name, int kinds)

Method Summary

static KNode
coerceForce(Object obj, int kinds)
Object
coerceFromObject(Object obj)
Convert an object to a value of this Type.
static KNode
coerceOrNull(Object obj, int kinds)
int
compare(Type other)
Return a numeric code showing "subtype" relationship: 1: if other is a pure subtype of this; 0: if has the same values; -1: if this is a pure subtype of other; -2: if they have values in common but neither is a subtype of the other; -3: if the types have no values in common.
void
emitCoerceFromObject(CodeAttr code)
Compile code to coerce/convert from Object to this type.
protected void
emitCoerceOrNullMethod(Variable incoming, Compilation comp)
void
emitIsInstance(Variable incoming, Compilation comp, Target target)
void
emitTestIf(Variable incoming, Declaration decl, Compilation comp)
Procedure
getConstructor()
Type
getImplementationType()
The type used to implement types not natively understood by the JVM.
boolean
isInstance(Object obj)
static boolean
isInstance(AbstractSequence seq, int ipos, int kinds)
boolean
isInstancePos(AbstractSequence seq, int ipos)
void
readExternal(ObjectInput in)
String
toString()
void
writeExternal(ObjectOutput out)

Methods inherited from class gnu.bytecode.ObjectType

coerceFromObject, compare, emitCoerceFromObject, getContextClass, getImplementationType, getInternalName, getMethods, getReflectClass, isExisting, isInstance, promote, setExisting

Methods inherited from class gnu.bytecode.Type

coerceFromObject, coerceToObject, compare, emitCoerceFromObject, emitCoerceToObject, emitIsInstance, getImplementationType, getName, getReflectClass, getSignature, getSize, getSizeInWords, getType, hashCode, isInstance, isMoreSpecific, isSubtype, isValidJavaTypeName, isVoid, lookupType, lowestCommonSuperType, make, promote, registerTypeForClass, setName, setReflectClass, setSignature, signatureLength, signatureLength, signatureToName, signatureToPrimitive, signatureToType, signatureToType, swappedCompareResult, toString

Field Details

ATTRIBUTE_OK

public static final int ATTRIBUTE_OK
Field Value:
4

COMMENT_OK

public static final int COMMENT_OK
Field Value:
16

DOCUMENT_OK

public static final int DOCUMENT_OK
Field Value:
8

ELEMENT_OK

public static final int ELEMENT_OK
Field Value:
2

PI_OK

public static final int PI_OK
Field Value:
32

TEXT_OK

public static final int TEXT_OK
Field Value:
1

anyNodeTest

public static final NodeType anyNodeTest

commentNodeTest

public static final NodeType commentNodeTest

documentNodeTest

public static final NodeType documentNodeTest

nodeType

public static final NodeType nodeType

textNodeTest

public static final NodeType textNodeTest

typeKNode

public static final ClassType typeKNode

typeNodeType

public static final ClassType typeNodeType

Constructor Details

NodeType

public NodeType(String name)

NodeType

public NodeType(String name,
                int kinds)

Method Details

coerceForce

public static KNode coerceForce(Object obj,
                                int kinds)

coerceFromObject

public Object coerceFromObject(Object obj)
Convert an object to a value of this Type. Throw a ClassCastException when this is not possible.
Overrides:
coerceFromObject in interface ObjectType

coerceOrNull

public static KNode coerceOrNull(Object obj,
                                 int kinds)

compare

public int compare(Type other)
Return a numeric code showing "subtype" relationship: 1: if other is a pure subtype of this; 0: if has the same values; -1: if this is a pure subtype of other; -2: if they have values in common but neither is a subtype of the other; -3: if the types have no values in common. "Same member" is rather loose; by "A is a subtype of B" we mean that all instance of A can be "widened" to B. More formally, A.compare(B) returns: 1: all B values can be converted to A without a coercion failure (i.e. a ClassCastException or overflow or major loss of information), but not vice versa. 0: all A values can be converted to B without a coercion failure and vice versa; -1: all A values can be converted to B without a coercion failure not not vice versa; -2: there are (potentially) some A values that can be converted to B, and some B values can be converted to A; -3: there are no A values that can be converted to B, and neither are there any B values that can be converted to A.
Overrides:
compare in interface ObjectType

emitCoerceFromObject

public void emitCoerceFromObject(CodeAttr code)
Compile code to coerce/convert from Object to this type.
Overrides:
emitCoerceFromObject in interface ObjectType

emitCoerceOrNullMethod

protected void emitCoerceOrNullMethod(Variable incoming,
                                      Compilation comp)

emitIsInstance

public void emitIsInstance(Variable incoming,
                           Compilation comp,
                           Target target)
Specified by:
emitIsInstance in interface TypeValue

emitTestIf

public void emitTestIf(Variable incoming,
                       Declaration decl,
                       Compilation comp)
Specified by:
emitTestIf in interface TypeValue

getConstructor

public Procedure getConstructor()
Specified by:
getConstructor in interface TypeValue

getImplementationType

public Type getImplementationType()
The type used to implement types not natively understood by the JVM. Usually, the identity function. However, a language might handle union types or template types or type expressions calculated at run time. In that case return the type used at the JVM level, and known at compile time.
Specified by:
getImplementationType in interface TypeValue
Overrides:
getImplementationType in interface ObjectType

isInstance

public boolean isInstance(Object obj)
Overrides:
isInstance in interface ObjectType

isInstance

public static boolean isInstance(AbstractSequence seq,
                                 int ipos,
                                 int kinds)

isInstancePos

public boolean isInstancePos(AbstractSequence seq,
                             int ipos)
Specified by:
isInstancePos in interface ItemPredicate

readExternal

public void readExternal(ObjectInput in)
            throws IOException,
                   ClassNotFoundException

toString

public String toString()
Overrides:
toString in interface Type

writeExternal

public void writeExternal(ObjectOutput out)
            throws IOException