Add new built-in function type() that returns the name of the type of

the given value as a string. Includes test case.
This commit is contained in:
Ian Farmer
2007-07-16 02:37:08 +00:00
parent c65dec54fb
commit 635f127cd0
14 changed files with 69 additions and 11 deletions

View File

@@ -6,6 +6,8 @@ public final class LBoolean extends LValue {
public static final LBoolean FALSE = new LBoolean("false",false);
public static final LString TYPE_NAME = new LString("boolean");
private final String m_name;
private final boolean m_value;
@@ -25,4 +27,8 @@ public final class LBoolean extends LValue {
public final static LBoolean valueOf(boolean value) {
return value? TRUE: FALSE;
}
public LString luaGetType() {
return TYPE_NAME;
}
}

View File

@@ -5,6 +5,8 @@ import lua.CallFrame;
public class LFunction extends LValue {
public static final LString TYPE_NAME = new LString("function");
public String luaAsString() {
return "function: "+hashCode();
}
@@ -26,4 +28,8 @@ public class LFunction extends LValue {
this.luaStackCall(call, base, call.top, 1);
}
public LString luaGetType() {
return TYPE_NAME;
}
}

View File

@@ -2,6 +2,7 @@ package lua.value;
public final class LNil extends LValue {
public static final LNil NIL = new LNil();
public static final LString TYPE_NAME = new LString("nil");
public final String luaAsString() {
return "nil";
@@ -10,4 +11,8 @@ public final class LNil extends LValue {
public boolean luaAsBoolean() {
return false;
}
public LString luaGetType() {
return TYPE_NAME;
}
}

View File

@@ -5,6 +5,8 @@ import lua.Lua;
abstract
public class LNumber extends LValue {
public static final LString TYPE_NAME = new LString("number");
/** Compare for equivalence by using lua op comparator */
public boolean equals(Object o) {
if ( ! ( o instanceof LValue) )
@@ -13,4 +15,8 @@ public class LNumber extends LValue {
return this.luaBinCmpUnknown(Lua.OP_EQ, v );
}
public LString luaGetType() {
return TYPE_NAME;
}
}

View File

@@ -5,6 +5,8 @@ import lua.StackState;
public class LString extends LValue {
public static final LString TYPE_NAME = new LString("string");
final String m_string;
final int m_hash;
@@ -53,4 +55,8 @@ public class LString extends LValue {
return new LInteger( m_string.length() );
}
public LString luaGetType() {
return TYPE_NAME;
}
}

View File

@@ -7,6 +7,8 @@ import lua.CallFrame;
public class LTable extends LValue {
public static final LString TYPE_NAME = new LString("table");
/** Metatable tag for intercepting table gets */
private static final LString TM_INDEX = new LString("__index");
@@ -95,7 +97,7 @@ public class LTable extends LValue {
}
/** Iterator for tables */
private static final class LTableIterator extends LValue {
private static final class LTableIterator extends LFunction {
private final LTable t;
private final Enumeration e;
@@ -121,4 +123,8 @@ public class LTable extends LValue {
}
}
public LString luaGetType() {
return TYPE_NAME;
}
}

View File

@@ -1,5 +1,10 @@
package lua.value;
public class LThread extends LValue {
public static final LString TYPE_NAME = new LString("thread");
public LString luaGetType() {
return TYPE_NAME;
}
}

View File

@@ -137,4 +137,6 @@ public class LValue {
luaUnsupportedOperation();
}
/** Valid for all types: return the type of this value as an LString */
public abstract LString luaGetType();
}