Changeset 12921
- Timestamp:
- 09/25/10 00:36:29 (13 years ago)
- Location:
- branches/invokedynamic/abcl
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/invokedynamic/abcl/build.xml
r12901 r12921 176 176 <javac destdir="${build.classes.dir}" 177 177 debug="true" 178 target="1. 5"178 target="1.7" 179 179 includeantruntime="false" 180 180 failonerror="true"> … … 247 247 classname="org.armedbear.lisp.Main"> 248 248 <jvmarg value="-Dabcl.home=${abcl.home.dir}${file.separator}"/> 249 <jvmarg value="-XX:+UnlockExperimentalVMOptions" /> 250 <jvmarg value="-XX:+EnableInvokeDynamic" /> 249 251 <arg value="--noinit"/> 250 252 <arg value="--nosystem"/> -
branches/invokedynamic/abcl/src/org/armedbear/lisp/Function.java
r12826 r12921 34 34 package org.armedbear.lisp; 35 35 36 import java.dyn.CallSite; 37 import java.dyn.MethodType; 36 38 import static org.armedbear.lisp.Lisp.*; 37 39 … … 394 396 ++hotCount; 395 397 } 398 399 public static CallSite linkLispFunction(Class caller, String name, MethodType type) { 400 System.out.println("Linking " + name + " " + caller + " " + type); 401 CallSite c = ((Symbol) Lisp.readObjectFromString(name)).addCallSite(type); 402 return c; 403 } 396 404 } -
branches/invokedynamic/abcl/src/org/armedbear/lisp/LispObject.java
r12826 r12921 34 34 package org.armedbear.lisp; 35 35 36 import java.dyn.MethodHandle; 37 import java.dyn.MethodHandles; 38 import java.dyn.MethodType; 36 39 import static org.armedbear.lisp.Lisp.*; 37 40 import java.util.WeakHashMap; 41 import sun.dyn.Access; 38 42 39 43 public class LispObject //extends Lisp … … 839 843 } 840 844 845 public MethodHandle asMethodHandle(MethodType type) { 846 /*Class<?>[] params = new Class<?>[type.parameterCount()]; 847 if(params.length == 1 && type.parameterType(0).isArray()) { 848 params[0] = LispObject[].class; 849 } else for(int i = 0; i < params.length; i++) { 850 params[i] = LispObject.class; 851 }*/ 852 MethodHandle mh = MethodHandles.lookup().findVirtual(getClass(), "execute", type.changeReturnType(LispObject.class)); 853 mh = MethodHandles.insertArguments(mh, 0, this); 854 return mh;//MethodType.methodType(LispObject.class, params)); 855 } 856 841 857 // Used by COMPILE-MULTIPLE-VALUE-CALL. 842 858 public LispObject dispatch(LispObject[] args) -
branches/invokedynamic/abcl/src/org/armedbear/lisp/Main.java
r11391 r12921 34 34 package org.armedbear.lisp; 35 35 36 import java.dyn.InvokeDynamic; 37 import java.dyn.Linkage; 38 36 39 public final class Main 37 40 { 38 41 public static final long startTimeMillis = System.currentTimeMillis(); 42 43 static { Linkage.registerBootstrapMethod(Function.class, "linkLispFunction"); } 39 44 40 45 public static void main(final String[] args) … … 52 57 }; 53 58 new Thread(null, r, "interpreter", 4194304L).start(); 59 try { 60 for(int i = 0; i < 2; i++) { 61 Thread.sleep(5000); 62 InvokeDynamic.<LispObject>#"COMMON-LISP:PRINT"((LispObject) new SimpleString("foo")); 63 InvokeDynamic.<LispObject>#"COMMON-LISP:PRINT"((LispObject) new SimpleString("bar")); 64 InvokeDynamic.<LispObject>#"CL-USER::FOO"((LispObject) new SimpleString("baz")); 65 } 66 } catch(Throwable t) { 67 t.printStackTrace(); 68 } 69 //java.dyn.InvokeDynamic.foo(new SimpleString("foo")); 54 70 } 55 71 } -
branches/invokedynamic/abcl/src/org/armedbear/lisp/Symbol.java
r12749 r12921 34 34 package org.armedbear.lisp; 35 35 36 import java.dyn.CallSite; 37 import java.dyn.MethodType; 38 import java.util.Collections; 39 import java.util.Set; 40 import java.util.WeakHashMap; 36 41 import static org.armedbear.lisp.Lisp.*; 37 42 … … 62 67 private transient LispObject propertyList; 63 68 private int flags; 69 private final Set<CallSite> callSites = Collections.newSetFromMap(new WeakHashMap<CallSite, Boolean>()); //Weak, is it correct? 64 70 65 71 // Construct an uninterned symbol. … … 93 99 this.hash = hash; 94 100 this.pkg = pkg; 101 } 102 103 public CallSite addCallSite(MethodType type) { 104 LispObject f = getSymbolFunctionOrDie(); 105 CallSite c = new CallSite(f.asMethodHandle(type)); 106 synchronized(callSites) { 107 callSites.add(c); 108 } 109 return c; 95 110 } 96 111 … … 405 420 public final void setSymbolFunction(LispObject obj) 406 421 { 407 this.function = obj; 422 synchronized(callSites) { 423 this.function = obj; 424 for(CallSite c : callSites) { 425 c.setTarget(this.function.asMethodHandle(c.getTarget().type())); 426 } 427 } 408 428 } 409 429
Note: See TracChangeset
for help on using the changeset viewer.