gnu.expr

Interface TypeValue

public interface TypeValue

A Type or a Type expression. Can be used for higher-level types that do not map directly to a Type.
Method Summary
voidemitIsInstance(Variable incoming, Compilation comp, Target target)
Emit code for incoming instanceof this_type.
voidemitTestIf(Variable incoming, Declaration decl, Compilation comp)
Emit code for if (incoming instanceof this_type) decl = incoming ....
ProceduregetConstructor()
Get the constructor function for this type.
TypegetImplementationType()
The lower-level Type used to represent instances of this type.

Method Detail

emitIsInstance

public void emitIsInstance(Variable incoming, Compilation comp, Target target)
Emit code for incoming instanceof this_type. The implementation can use {@link gnu.kawa.reflect.InstanceOf#emitIsInstance InstanceOf .emitIsInstance} which is a conveniece method that calls {@link #emitTestIf emitTestIf}.

Parameters: incoming Contains the value we are testing to see if it has the the type of 'this'. If null, use top-of-stack. comp The compilation state. target Where to leave the result.

emitTestIf

public void emitTestIf(Variable incoming, Declaration decl, Compilation comp)
Emit code for if (incoming instanceof this_type) decl = incoming .... This method is designed for typeswitch applications, where this call is the first part of a conditional, so it must be followed by calls to emitElse and emitFi.

Parameters: incoming Contains the value we are testing to see if it has the type of this. If null, use top-of-stack. May not be null if incoming is non-null. decl If non-null, assign value after coercion to Declaration. comp The compilation state.

getConstructor

public Procedure getConstructor()
Get the constructor function for this type. Returns null if there is no contructor function. Also returns null if this extends ClassType or ArrayType and standard Java constructors ( methods) should be used.

getImplementationType

public Type getImplementationType()
The lower-level Type used to represent instances of this type.