Changeset 12662
- Timestamp:
- 05/09/10 15:44:04 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abcl/src/org/armedbear/lisp/Java.java
r12561 r12662 116 116 } 117 117 118 // ### jclass name-or-class-ref => class-ref118 // ### jclass name-or-class-ref &optional class-loader => class-ref 119 119 private static final Primitive JCLASS = new pf_jclass(); 120 120 private static final class pf_jclass extends Primitive … … 123 123 { 124 124 super(Symbol.JCLASS, "name-or-class-ref", 125 "Returns a reference to the Java class designated by NAME-OR-CLASS-REF. ");125 "Returns a reference to the Java class designated by NAME-OR-CLASS-REF. If the CLASS-LOADER parameter is passed, the class is resolved with respect to the given ClassLoader."); 126 126 } 127 127 … … 130 130 { 131 131 return JavaObject.getInstance(javaClass(arg)); 132 } 133 134 @Override 135 public LispObject execute(LispObject className, LispObject classLoader) 136 { 137 ClassLoader loader = (ClassLoader) classLoader.javaInstance(ClassLoader.class); 138 if(loader != null) { 139 return JavaObject.getInstance(javaClass(className, loader)); 140 } else { 141 return JavaObject.getInstance(javaClass(className)); 142 } 132 143 } 133 144 }; … … 1150 1161 } 1151 1162 1152 static Class classForName(String className) 1153 { 1163 private static Class classForName(String className) { 1164 return classForName(className, JavaClassLoader.getPersistentInstance()); 1165 } 1166 1167 private static Class classForName(String className, ClassLoader classLoader) { 1154 1168 try { 1155 return Class.forName(className );1169 return Class.forName(className, true, classLoader); 1156 1170 } 1157 1171 catch (ClassNotFoundException e) { 1158 try { 1159 return Class.forName(className, true, JavaClassLoader.getPersistentInstance()); 1160 } 1161 catch (ClassNotFoundException ex) { 1162 error(new LispError("Class not found: " + className)); 1163 // Not reached. 1164 return null; 1165 } 1166 } 1172 error(new LispError("Class not found: " + className)); 1173 // Not reached. 1174 return null; 1175 } 1176 } 1177 1178 private static Class javaClass(LispObject obj) { 1179 return javaClass(obj, null); 1167 1180 } 1168 1181 1169 1182 // Supports Java primitive types too. 1170 static Class javaClass(LispObject obj )1183 static Class javaClass(LispObject obj, ClassLoader classLoader) 1171 1184 { 1172 1185 if (obj instanceof AbstractString || obj instanceof Symbol) { … … 1189 1202 return Double.TYPE; 1190 1203 // Not a primitive Java type. 1191 Class c = classForName(s); 1204 Class c; 1205 if(classLoader != null) { 1206 c = classForName(s, classLoader); 1207 } else { 1208 c = classForName(s); 1209 } 1192 1210 if (c == null) 1193 1211 error(new LispError(s + " does not designate a Java class."));
Note: See TracChangeset
for help on using the changeset viewer.