MCPcopy Index your code
hub / github.com/clojure/clojure / DefExpr

Class DefExpr

src/jvm/clojure/lang/Compiler.java:417–593  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

415}
416
417static class DefExpr implements Expr{
418 public final Var var;
419 public final Expr init;
420 public final Expr meta;
421 public final boolean initProvided;
422 public final boolean isDynamic;
423 public final String source;
424 public final int line;
425 public final int column;
426 final static Method bindRootMethod = Method.getMethod("void bindRoot(Object)");
427 final static Method setTagMethod = Method.getMethod("void setTag(clojure.lang.Symbol)");
428 final static Method setMetaMethod = Method.getMethod("void setMeta(clojure.lang.IPersistentMap)");
429 final static Method setDynamicMethod = Method.getMethod("clojure.lang.Var setDynamic(boolean)");
430 final static Method symintern = Method.getMethod("clojure.lang.Symbol intern(String, String)");
431
432 public DefExpr(String source, int line, int column, Var var, Expr init, Expr meta, boolean initProvided, boolean isDynamic){
433 this.source = source;
434 this.line = line;
435 this.column = column;
436 this.var = var;
437 this.init = init;
438 this.meta = meta;
439 this.isDynamic = isDynamic;
440 this.initProvided = initProvided;
441 }
442
443 private boolean includesExplicitMetadata(MapExpr expr) {
444 for(int i=0; i < expr.keyvals.count(); i += 2)
445 {
446 Keyword k = ((KeywordExpr) expr.keyvals.nth(i)).k;
447 if ((k != RT.FILE_KEY) &&
448 (k != RT.DECLARED_KEY) &&
449 (k != RT.LINE_KEY) &&
450 (k != RT.COLUMN_KEY))
451 return true;
452 }
453 return false;
454 }
455
456 public Object eval() {
457 try
458 {
459 if(initProvided)
460 {
461// if(init instanceof FnExpr && ((FnExpr) init).closes.count()==0)
462// var.bindRoot(new FnLoaderThunk((FnExpr) init,var));
463// else
464 var.bindRoot(init.eval());
465 }
466 if(meta != null)
467 {
468 IPersistentMap metaMap = (IPersistentMap) meta.eval();
469 if (initProvided || true)//includesExplicitMetadata((MapExpr) meta))
470 var.setMeta(metaMap);
471 }
472 return var.setDynamic(isDynamic);
473 }
474 catch(Throwable e)

Callers

nothing calls this directly

Calls 1

getMethodMethod · 0.95

Tested by

no test coverage detected