Improve __eq metatag processing.
This commit is contained in:
@@ -69,5 +69,5 @@ public class LuaBoolean extends LuaValue {
|
||||
|
||||
public LuaValue getmetatable() {
|
||||
return s_metatable;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,7 +75,8 @@ public class LuaDouble extends LuaNumber {
|
||||
public boolean equals(Object o) { return o instanceof LuaDouble? ((LuaDouble)o).v == v: false; }
|
||||
|
||||
// arithmetic equality
|
||||
public boolean eq_b( LuaValue rhs ) { return rhs.eq_b(v); }
|
||||
public LuaValue eq( LuaValue rhs ) { return rhs.eq_b(v)? TRUE: FALSE; }
|
||||
public boolean eq_b( LuaValue rhs ) { return rhs.eq_b(v); }
|
||||
public boolean eq_b( double rhs ) { return v == rhs; }
|
||||
public boolean eq_b( int rhs ) { return v == rhs; }
|
||||
|
||||
|
||||
@@ -105,7 +105,8 @@ public class LuaInteger extends LuaNumber {
|
||||
public boolean equals(Object o) { return o instanceof LuaInteger? ((LuaInteger)o).v == v: false; }
|
||||
|
||||
// arithmetic equality
|
||||
public boolean eq_b( LuaValue rhs ) { return rhs.eq_b(v); }
|
||||
public LuaValue eq( LuaValue rhs ) { return rhs.eq_b(v)? TRUE: FALSE; }
|
||||
public boolean eq_b( LuaValue rhs ) { return rhs.eq_b(v); }
|
||||
public boolean eq_b( double rhs ) { return v == rhs; }
|
||||
public boolean eq_b( int rhs ) { return v == rhs; }
|
||||
|
||||
|
||||
@@ -286,6 +286,18 @@ public class LuaTable extends LuaValue {
|
||||
public LuaValue len() {
|
||||
return LuaInteger.valueOf(length());
|
||||
}
|
||||
|
||||
public LuaValue eq( LuaValue rhs ) {
|
||||
return rhs.eq_b(this)? TRUE: FALSE;
|
||||
}
|
||||
|
||||
public boolean eq_b( LuaValue rhs ) {
|
||||
return rhs.eq_b(this);
|
||||
}
|
||||
|
||||
public boolean eq_b( LuaTable val ) {
|
||||
return this == val || val.eqmt_b(this);
|
||||
}
|
||||
|
||||
public int maxn() {
|
||||
int n = 0;
|
||||
|
||||
@@ -96,14 +96,23 @@ public class LuaUserdata extends LuaValue {
|
||||
}
|
||||
|
||||
public boolean equals( Object val ) {
|
||||
if ( this == val )
|
||||
return true;
|
||||
if ( ! (val instanceof LuaUserdata) )
|
||||
return false;
|
||||
LuaUserdata u = (LuaUserdata) val;
|
||||
return m_instance.equals(u.m_instance);
|
||||
}
|
||||
|
||||
public boolean eq_b( LuaValue val ) {
|
||||
return equals(val);
|
||||
public LuaValue eq( LuaValue rhs ) {
|
||||
return rhs.eq_b(this)? TRUE: FALSE;
|
||||
}
|
||||
|
||||
public boolean eq_b( LuaValue rhs ) {
|
||||
return rhs.eq_b(this);
|
||||
}
|
||||
|
||||
public boolean eq_b( LuaUserdata val ) {
|
||||
return this == val || m_instance.equals(val.m_instance) || val.eqmt_b(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -262,22 +262,20 @@ public class LuaValue extends Varargs {
|
||||
public boolean equals(Object obj) { return this == obj; }
|
||||
|
||||
// arithmetic equality
|
||||
public LuaValue eq( LuaValue val ) { return eqmt(val); }
|
||||
public LuaValue eq( LuaValue val ) { return eq_b(val)? TRUE: FALSE; }
|
||||
public boolean eq_b( LuaValue val ) { return this == val; }
|
||||
public boolean eq_b( LuaTable val ) { return false; }
|
||||
public boolean eq_b( LuaUserdata val ) { return false; }
|
||||
public boolean eq_b( LuaString val ) { return false; }
|
||||
public boolean eq_b( double val ) { return false; }
|
||||
public boolean eq_b( int val ) { return false; }
|
||||
public LuaValue neq( LuaValue val ) { return eq(val).not(); }
|
||||
public boolean neq_b( LuaValue val ) { return this != val; }
|
||||
public LuaValue neq( LuaValue val ) { return eq_b(val)? FALSE: TRUE; }
|
||||
public boolean neq_b( LuaValue val ) { return ! eq_b(val); }
|
||||
public boolean neq_b( double val ) { return ! eq_b(val); }
|
||||
public boolean neq_b( int val ) { return ! eq_b(val); }
|
||||
public LuaValue eqmt( LuaValue op2 ) {
|
||||
if ( type() != op2.type() )
|
||||
return FALSE;
|
||||
if ( eq_b(op2) )
|
||||
return TRUE;
|
||||
protected boolean eqmt_b( LuaValue op2 ) {
|
||||
LuaValue h = metatag(EQ);
|
||||
return !h.isnil() && h == op2.metatag(EQ)? h.call(this,op2): FALSE;
|
||||
return !h.isnil() && h==op2.metatag(EQ)? h.call(this,op2).toboolean(): false;
|
||||
}
|
||||
|
||||
// arithmetic operators
|
||||
|
||||
Reference in New Issue
Block a user