From 2461b469086f64b4d11c04e51e8b2d1967438d1d Mon Sep 17 00:00:00 2001 From: Ian Farmer Date: Fri, 11 Jan 2008 07:56:42 +0000 Subject: [PATCH] Fix equality test for userdata. Includes improved test7.lua. --- build.xml | 2 +- src/core/org/luaj/vm/LUserData.java | 10 +++++++-- src/sample/org/luaj/sample/SampleClass.java | 9 ++++++++ src/test/res/test7-expected.out | 7 ++++--- src/test/res/test7.lua | 23 ++++++++++++++------- 5 files changed, 37 insertions(+), 14 deletions(-) diff --git a/build.xml b/build.xml index 8873f8c4..39fe573e 100644 --- a/build.xml +++ b/build.xml @@ -1,5 +1,5 @@ - + diff --git a/src/core/org/luaj/vm/LUserData.java b/src/core/org/luaj/vm/LUserData.java index b2814876..7c93d8bf 100644 --- a/src/core/org/luaj/vm/LUserData.java +++ b/src/core/org/luaj/vm/LUserData.java @@ -43,7 +43,7 @@ public class LUserData extends LValue { public int hashCode() { return System.identityHashCode( m_instance ); } - + public int luaGetType() { return Lua.LUA_TUSERDATA; } @@ -51,8 +51,14 @@ public class LUserData extends LValue { public LTable luaGetMetatable() { return m_metatable; } - + public Object toJavaInstance() { return m_instance; } + + public boolean luaBinCmpUnknown( int opcode, LValue lhs ) { + if ( opcode == Lua.OP_EQ ) + return lhs.equals( this ); + return super.luaBinCmpUnknown( opcode, lhs ); + } } diff --git a/src/sample/org/luaj/sample/SampleClass.java b/src/sample/org/luaj/sample/SampleClass.java index bdb21d6c..1771a67f 100644 --- a/src/sample/org/luaj/sample/SampleClass.java +++ b/src/sample/org/luaj/sample/SampleClass.java @@ -23,6 +23,7 @@ package org.luaj.sample; public class SampleClass { + public Object o; public String s; public String t; @@ -41,4 +42,12 @@ public class SampleClass { public void setS(String s) { this.s = s; } + + public void setObj(Object o) { + this.o = o; + } + + public Object getObj() { + return o; + } } diff --git a/src/test/res/test7-expected.out b/src/test/res/test7-expected.out index 5d3459be..a8f9d418 100644 --- a/src/test/res/test7-expected.out +++ b/src/test/res/test7-expected.out @@ -1,6 +1,7 @@ -java.lang.Object@b1b4c3 -SampleClass@72ffb +java.lang.Object@xxxxxx +org.luaj.sample.SampleClass@xxxxxx Hello Hello +true World -Square root of 9 is 3.0 +Square root of 9 is 3 diff --git a/src/test/res/test7.lua b/src/test/res/test7.lua index eec647e7..fdbfb0fc 100644 --- a/src/test/res/test7.lua +++ b/src/test/res/test7.lua @@ -1,14 +1,21 @@ +local function fixhash(msg) + return string.gsub(msg, "@(%x+)", function(s) return "@"..(string.rep("x", 6)) end) +end + obj = luajava.newInstance("java.lang.Object") -print( obj ) +print( fixhash( tostring(obj) ) ) -obj = luajava.newInstance("org.luaj.sample.SampleClass") -print( obj ) -obj.s = "Hello" -print( obj.s ) -print( obj:getS() ) +sample = luajava.newInstance("org.luaj.sample.SampleClass") +print( fixhash( tostring(sample) ) ) +sample.s = "Hello" +print( sample.s ) +print( sample:getS() ) -obj:setS( "World" ) -print( obj.s ) +sample:setObj(obj) +print( obj == sample:getObj() ) + +sample:setS( "World" ) +print( sample.s ) math = luajava.bindClass("java.lang.Math") print("Square root of 9 is", math:sqrt(9.0))