@Override public Object eval(Reader reader, ScriptContext context) throws ScriptException { try { // Get engine bindings and send them to Clojure Bindings engineBindings = context.getBindings(ScriptContext.ENGINE_SCOPE); engineBindings.entrySet().forEach((entry) -> Var.intern(Namespace.findOrCreate(NAMESPACE_SYMBOL), Symbol.create(entry.getKey().intern()), entry.getValue(), true)); Var.pushThreadBindings( RT.map(RT.CURRENT_NS, RT.CURRENT_NS.deref(), RT.IN, new LineNumberingPushbackReader(context.getReader()), RT.OUT, context.getWriter(), RT.ERR, context.getErrorWriter())); Object result = Compiler.load(reader); return result; } catch (Exception e) { throw new ScriptException(e); } finally { Namespace.remove(NAMESPACE_SYMBOL); } }
/** * Returns the var associated with qualifiedName. * * @param qualifiedName a String or clojure.lang.Symbol * @return a clojure.lang.IFn */ public static IFn var(Object qualifiedName) { Symbol s = asSym(qualifiedName); return var(s.getNamespace(), s.getName()); }
static void doInit() throws ClassNotFoundException, IOException{ Protocol.init(); load("clojure/core"); Var.pushThreadBindings( RT.mapUniqueKeys(CURRENT_NS, CURRENT_NS.deref(), WARN_ON_REFLECTION, WARN_ON_REFLECTION.deref() ,RT.UNCHECKED_MATH, RT.UNCHECKED_MATH.deref())); try { Symbol USER = Symbol.intern("user"); Symbol CLOJURE = Symbol.intern("clojure.core"); Var in_ns = var("clojure.core", "in-ns"); Var refer = var("clojure.core", "refer"); in_ns.invoke(USER); refer.invoke(CLOJURE); maybeLoadResourceScript("user.clj"); } finally { Var.popThreadBindings(); } }
protected Var var(String namespacedFunction) { ClassLoader origLoader = preInvoke(); try { Var var = (Var)this.resolve.invoke(Symbol.create(namespacedFunction)); if (var == null) { String[] parts = namespacedFunction.split("/"); this.require.invoke(Symbol.create(parts[0])); var = RT.var(parts[0], parts[1]); } return var; } catch (Exception e) { throw new RuntimeException( "Failed to load Var " + namespacedFunction, e ); } finally { postInvoke( origLoader ); } }
return analyze(context, RT.list(RT.list(FNONCE, PersistentVector.EMPTY, form))); Var.pushThreadBindings(RT.map(NO_RECUR, true)); bodyExpr = (new BodyExpr.Parser()).parse(context, RT.seq(body)); } finally { Var.popThreadBindings(); "Bad binding form, expected symbol, got: " + RT.third(f)); Symbol sym = (Symbol) RT.third(f); if(sym.getNamespace() != null) throw Util.runtimeException("Can't bind qualified name:" + sym); IPersistentMap dynamicBindings = RT.map(LOCAL_ENV, LOCAL_ENV.deref(), NEXT_LOCAL_NUM, NEXT_LOCAL_NUM.deref(), IN_CATCH_FINALLY, RT.T);
ret.name = className.toString(); ret.classMeta = RT.meta(className); ret.internalName = ret.name.replace('.', '/'); ret.objtype = Type.getObjectType(ret.internalName); for(ISeq s = RT.seq(interfaceSyms);s!=null;s = s.next()) Map[] mc = gatherMethods(superClass,RT.seq(interfaces)); Map overrideables = mc[0]; Map covariants = mc[1]; Symbol thistag = Symbol.intern(null,stub.getName()); Var.pushThreadBindings( RT.mapUniqueKeys(CONSTANTS, PersistentVector.EMPTY, CONSTANT_IDS, new IdentityHashMap(), if(ret.isDeftype()) Var.pushThreadBindings(RT.mapUniqueKeys(METHOD, null, LOCAL_ENV, ret.fields , COMPILE_STUB_SYM, Symbol.intern(null, tagName) , COMPILE_STUB_CLASS, stub)); ret.keywords = (IPersistentMap) KEYWORDS.deref(); ret.vars = (IPersistentMap) VARS.deref(); ret.constants = (PersistentVector) CONSTANTS.deref();
NewInstanceMethod method = new NewInstanceMethod(objx, (ObjMethod) METHOD.deref()); Symbol dotname = (Symbol)RT.first(form); Symbol name = (Symbol) Symbol.intern(null,munge(dotname.name)).withMeta(RT.meta(dotname)); IPersistentVector parms = (IPersistentVector) RT.second(form); if(parms.count() == 0) method.column = columnDeref(); PathNode pnode = new PathNode(PATHTYPE.PATH, (PathNode) CLEAR_PATH.get()); Var.pushThreadBindings( RT.mapUniqueKeys( METHOD, method, if(tag != null) hinted = true; if(p.getNamespace() != null) p = Symbol.intern(p.name); Class pclass = tagClass(tag); pclasses[i] = pclass;
public static void main(String[] args) throws IOException{ OutputStreamWriter out = (OutputStreamWriter) RT.OUT.deref(); PrintWriter err = RT.errPrintWriter(); String path = System.getProperty(PATH_PROP); int count = args.length; Var.pushThreadBindings(RT.map(compile_path, path, warn_on_reflection, warnOnReflection, unchecked_math, uncheckedMath)); compile.invoke(Symbol.intern(lib));
static FnMethod parse(ObjExpr objx, ISeq form, boolean isStatic) { IPersistentVector parms = (IPersistentVector) RT.first(form); ISeq body = RT.next(form); try FnMethod method = new FnMethod(objx, (ObjMethod) METHOD.deref()); method.line = lineDeref(); method.column = columnDeref(); registerLocal(Symbol.intern(objx.thisName), null, null,false); else getAndIncLocalNum(); throw new IllegalArgumentException("fn params must be Symbols"); Symbol p = (Symbol) parms.nth(i); if(p.equals(_AMP_) || p.equals(QAMP)) { else throw Util.runtimeException("Invalid parameter list"); } else if(p.getNamespace() != null) { throw Util.runtimeException("Can't use qualified name as parameter: " + p); } else {
public Expr parse(C context, Object frm) { ISeq form = (ISeq) frm; boolean isLoop = RT.first(form).equals(LOOP) || RT.first(form).equals(QLOOP) || RT.first(form).equals(ILOOP) || RT.first(form).equals(QILOOP); boolean isIntLoop = RT.first(form).equals(ILOOP) || RT.first(form).equals(QILOOP); if(!(RT.second(form) instanceof IPersistentVector)) return analyze(context, RT.list(RT.list(FNONCE, PersistentVector.EMPTY, form))); ObjMethod method = (ObjMethod) METHOD.deref(); IPersistentMap backupMethodLocals = method.locals; IPersistentMap backupMethodIndexLocals = method.indexlocals; IPersistentMap dynamicBindings = RT.map(LOCAL_ENV, LOCAL_ENV.deref(), NEXT_LOCAL_NUM, NEXT_LOCAL_NUM.deref()); method.locals = backupMethodLocals; method.indexlocals = backupMethodIndexLocals; "Bad binding form, expected symbol, got: " + bindings.nth(i)); Symbol sym = (Symbol) bindings.nth(i); if(sym.getNamespace() != null) throw Util.runtimeException("Can't let qualified name: " + sym); Expr init = analyze(C.EXPRESSION, bindings.nth(i + 1), sym.name);
/** * Generates a string for freetext questions. If the input question's freetextPattern field is not null, it will * generate a random regular expression. If the freetextPattern field is null, but the freetextDefault field is not, * it will return the default string. Otherwise, it will return the string "DEFAULT". * @param q The question whose string response we wish to generate. * @return A string for this respondent's response. */ protected String generateStringComponent(Question q) { if (q.freetextPattern!=null){ String pat = String.format("(re-rand/re-rand #\"%s\")", q.freetextPattern.pattern()); Var require = RT.var("clojure.core", "require"); Var eval = RT.var("clojure.core", "eval"); Var readString = RT.var("clojure.core", "read-string"); require.invoke(Symbol.intern("re-rand")); Object str = eval.invoke(readString.invoke(pat)); if (str instanceof String) return (String) str; return (String) ((PersistentVector) str).nth(0); } else if (q.freetextDefault!=null) return q.freetextDefault; else return "DEFAULT"; }
public Object invoke(Object reader, Object eq, Object opts, Object pendingForms) { if (!RT.booleanCast(RT.READEVAL.deref())) if(o instanceof Symbol) return RT.classForName(o.toString()); Symbol fs = (Symbol) RT.first(o); if(fs.equals(THE_VAR) || (!Compiler.isQualifiedSpecials() && fs.equals(Compiler.QTHE_VAR))) Symbol vs = (Symbol) RT.second(o);
private static final class DefaultComparator implements Comparator, Serializable { public int compare(Object o1, Object o2){ return Util.compare(o1, o2); } private Object readResolve() throws ObjectStreamException { // ensures that we aren't hanging onto a new default comparator for every // sorted set, etc., we deserialize return DEFAULT_COMPARATOR; } }
@SuppressWarnings("unchecked") @Override public void prepare(final Map stormConf, final TopologyContext context, final OutputCollector collector) { IFn hof = Utils.loadClojureFn(_fnSpec.get(0), _fnSpec.get(1)); try { IFn preparer = (IFn) hof.applyTo(RT.seq(_params)); final Map<Keyword, Object> collectorMap = new PersistentArrayMap(new Object[]{Keyword.intern(Symbol.create("output-collector")), collector, Keyword.intern(Symbol.create("context")), context}); List<Object> args = new ArrayList<Object>() { { add(stormConf); add(context); add(collectorMap); } }; _bolt = (IBolt) preparer.applyTo(RT.seq(args)); // this is kind of unnecessary for clojure try { _bolt.prepare(stormConf, context, collector); } catch (AbstractMethodError ignored) { } } catch (Exception e) { throw new RuntimeException(e); } }
public Model read(final Reader input, final Map<String, ?> options) throws IOException { assert input != null; try { String location = PolyglotModelUtil.getLocation(options); final Var USE = Var.intern(RT.CLOJURE_NS, Symbol.create("use")); final Symbol READER = Symbol.create("org.sonatype.maven.polyglot.clojure.dsl.reader"); final Symbol LEININGEN = Symbol.create("org.sonatype.maven.polyglot.clojure.dsl.leiningen"); USE.invoke(READER); USE.invoke(LEININGEN); clojure.lang.Compiler.load(input, location, location); final Var MODEL = Var.intern(Namespace.findOrCreate(READER), Symbol.create("*MODEL*")); return (Model) ((Atom) MODEL.get()).deref(); } catch (Exception e) { // Don't use new IOException(e) because it doesn't exist in Java 5 throw (IOException) new IOException(e.toString()).initCause(e); } } }
@Override public EvalResult interpret(Environment e, IPersistentMap bindings) { try { Var v=RT.var(sym.getNamespace(),sym.getName()); if (v!=null) return e.withResult(v.deref()); } catch (Throwable t) { String err="Error trying to lookp var "+sym+" "; err+=" with Environment "+e.toString(); throw new KissException(err,t); } throw new KissException("Cannot find Clojure symbol "+sym+" in environment"); }
private void createUserNamespace() throws ClassNotFoundException, IOException { Namespace userNs = Namespace.findOrCreate(Symbol.create(null, "user")); RT.load("clojure/repl"); List<String> replFns = new ArrayList<String>(Arrays.asList("source", "apropos", "dir")); if (!clojure1_2) { replFns.add("doc"); replFns.add("find-doc"); } for (String name : replFns) { userNs.refer(Symbol.create(null, name), var("clojure.repl", name)); } if (!clojure1_2) { RT.load("clojure/java/javadoc"); userNs.refer(Symbol.create(null, "javadoc"), var("clojure.java.javadoc", "javadoc")); } RT.load("clojure/pprint"); userNs.refer(Symbol.create(null, "pprint"), var("clojure.pprint", "pprint")); RT.load("clj_stacktrace/repl"); userNs.refer(Symbol.create(null, "pst"), var("clj-stacktrace.repl", "pst")); RT.load("cd_client/core"); userNs.refer(Symbol.create(null, "cdoc"), var("cd-client.core", "cdoc")); this.ns.set(userNs); }