From 06afefebb52374c695d58e3b83cb94cff54c6524 Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Wed, 28 May 2008 00:32:39 +0000 Subject: [PATCH] Add implementation for luajava.createProxy --- src/j2se/org/luaj/lib/j2se/LuajavaLib.java | 36 +++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/j2se/org/luaj/lib/j2se/LuajavaLib.java b/src/j2se/org/luaj/lib/j2se/LuajavaLib.java index 8a2cc7aa..9d0b1fdf 100644 --- a/src/j2se/org/luaj/lib/j2se/LuajavaLib.java +++ b/src/j2se/org/luaj/lib/j2se/LuajavaLib.java @@ -28,7 +28,9 @@ package org.luaj.lib.j2se; */ import java.lang.reflect.Constructor; import java.lang.reflect.Field; +import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; +import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -83,7 +85,7 @@ public final class LuajavaLib extends LFunction { } // perform a lua call - public boolean luaStackCall(LuaState vm) { + public boolean luaStackCall(final LuaState vm) { String className; switch ( id ) { case INIT: @@ -121,6 +123,38 @@ public final class LuajavaLib extends LFunction { } break; case CREATEPROXY: + final int ninterfaces = Math.max(0,vm.gettop()-2); + if ( ninterfaces <= 0 ) + throw new LuaErrorException("no interfaces"); + final LValue function = vm.tojavafunction(-1); + try { + // get the interfaces + final Class[] ifaces = new Class[ninterfaces]; + for ( int i=0; i