-/* Cycript - Optimizing JavaScript Compiler/Runtime
- * Copyright (C) 2009-2015 Jay Freeman (saurik)
+/* Cycript - The Truly Universal Scripting Language
+ * Copyright (C) 2009-2016 Jay Freeman (saurik)
*/
/* GNU Affero General Public License, Version 3 {{{ */
return protect_;
}
+ public Object call(String property, Object[] arguments) {
+ try {
+ return handle(protect_, property, arguments);
+ } catch (Throwable throwable) {
+ return new RuntimeException(throwable);
+ }
+ }
+
+ public String toString() {
+ return call("toString", null).toString();
+ }
+
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable
{
if (false)
return null;
else if (method.equals(Object$equals))
+ // XXX: this assumes there is only one proxy
return proxy == args[0];
else if (method == Object$hashCode)
- return System.identityHashCode(proxy);
+ // XXX: this assumes there is only one wrapper
+ return hashCode();
else
return handle(protect_, method.getName(), args);
}
}
-public static Object proxy(Class proxy, long protect) {
- return Proxy.newProxyInstance(proxy.getClassLoader(), new Class[] {proxy}, new Wrapper(protect));
+public static Object proxy(Class proxy, Wrapper wrapper) {
+ return Proxy.newProxyInstance(proxy.getClassLoader(), new Class[] {proxy}, wrapper);
}
}