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

Method lookupVar

src/jvm/clojure/lang/Compiler.java:8046–8088  ·  view source on GitHub ↗
(Symbol sym, boolean internNew, boolean registerMacro)

Source from the content-addressed store, hash-verified

8044
8045
8046static Var lookupVar(Symbol sym, boolean internNew, boolean registerMacro) {
8047 Var var = null;
8048
8049 //note - ns-qualified vars in other namespaces must already exist
8050 if(sym.ns != null)
8051 {
8052 Namespace ns = namespaceFor(sym);
8053 if(ns == null)
8054 return null;
8055 //throw Util.runtimeException("No such namespace: " + sym.ns);
8056 Symbol name = Symbol.intern(sym.name);
8057 if(internNew && ns == currentNS())
8058 var = currentNS().intern(name);
8059 else
8060 var = ns.findInternedVar(name);
8061 }
8062 else if(sym.equals(NS))
8063 var = RT.NS_VAR;
8064 else if(sym.equals(IN_NS))
8065 var = RT.IN_NS_VAR;
8066 else
8067 {
8068 //is it mapped?
8069 Object o = currentNS().getMapping(sym);
8070 if(o == null)
8071 {
8072 //introduce a new var in the current ns
8073 if(internNew)
8074 var = currentNS().intern(Symbol.intern(sym.name));
8075 }
8076 else if(o instanceof Var)
8077 {
8078 var = (Var) o;
8079 }
8080 else
8081 {
8082 throw Util.runtimeException("Expecting var, but " + sym + " is mapped to " + o);
8083 }
8084 }
8085 if(var != null && (!var.isMacro() || registerMacro))
8086 registerVar(var);
8087 return var;
8088}
8089static Var lookupVar(Symbol sym, boolean internNew) {
8090 return lookupVar(sym, internNew, true);
8091}

Callers 4

isMacroMethod · 0.95
isInlineMethod · 0.95
parseMethod · 0.80
parseMethod · 0.80

Calls 10

namespaceForMethod · 0.95
internMethod · 0.95
currentNSMethod · 0.95
findInternedVarMethod · 0.95
runtimeExceptionMethod · 0.95
isMacroMethod · 0.95
registerVarMethod · 0.95
getMappingMethod · 0.80
internMethod · 0.45
equalsMethod · 0.45

Tested by

no test coverage detected