]> git.saurik.com Git - cycript.git/blobdiff - Java/Cycript.java
Allow users to tab complete struct and enum names.
[cycript.git] / Java / Cycript.java
index 02805cb33ba8f82e10d0b9e5d847d9b6d30c3938..8fb7817f14e4c2e309ceaf2f07c46fadb61fe12a 100644 (file)
@@ -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 {{{ */
 */
 
 /* GNU Affero General Public License, Version 3 {{{ */
@@ -62,22 +62,36 @@ public static class Wrapper
         return protect_;
     }
 
         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))
     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 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);
     }
 }
 
         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);
 }
 
 }
 }
 
 }