X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/824bc1ec28c62ea1d63622c46e1edfd911c38b64..1e8d80477a3e058a30c477955f1e0c56deb6e956:/Java/Cycript.java?ds=inline diff --git a/Java/Cycript.java b/Java/Cycript.java index 02805cb..8fb7817 100644 --- a/Java/Cycript.java +++ b/Java/Cycript.java @@ -1,5 +1,5 @@ -/* 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 {{{ */ @@ -62,22 +62,36 @@ public static class Wrapper 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); } }