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

Method matchSymbol

src/jvm/clojure/lang/LispReader.java:418–472  ·  view source on GitHub ↗
(String s, Resolver resolver)

Source from the content-addressed store, hash-verified

416
417
418private static Object matchSymbol(String s, Resolver resolver){
419 Matcher m = symbolPat.matcher(s);
420 if(m.matches())
421 {
422 int gc = m.groupCount();
423 String ns = m.group(1);
424 String name = m.group(2);
425 if(ns != null && ns.endsWith(":/")
426 || name.endsWith(":")
427 || s.indexOf("::", 1) != -1)
428 return null;
429 if(s.startsWith("::"))
430 {
431 Symbol ks = Symbol.intern(s.substring(2));
432 if(resolver != null)
433 {
434 Symbol nsym;
435 if(ks.ns != null)
436 nsym = resolver.resolveAlias(Symbol.intern(ks.ns));
437 else
438 nsym = resolver.currentNS();
439 //auto-resolving keyword
440 if(nsym != null)
441 return Keyword.intern(nsym.name, ks.name);
442 else
443 return null;
444 }
445 else
446 {
447 Namespace kns;
448 if(ks.ns != null)
449 kns = Compiler.currentNS().lookupAlias(Symbol.intern(ks.ns));
450 else
451 kns = Compiler.currentNS();
452 //auto-resolving keyword
453 if(kns != null)
454 return Keyword.intern(kns.name.name, ks.name);
455 else
456 return null;
457 }
458 }
459 boolean isKeyword = s.charAt(0) == ':';
460 Symbol sym = Symbol.intern(s.substring(isKeyword ? 1 : 0));
461 if(isKeyword)
462 return Keyword.intern(sym);
463 return sym;
464 }
465 else
466 {
467 Matcher am = arraySymbolPat.matcher(s);
468 if(am.matches())
469 return Symbol.intern(am.group(1), am.group(2));
470 }
471 return null;
472}
473
474
475private static Object matchNumber(String s){

Callers 1

interpretTokenMethod · 0.95

Calls 7

internMethod · 0.95
internMethod · 0.95
currentNSMethod · 0.95
resolveAliasMethod · 0.80
lookupAliasMethod · 0.80
currentNSMethod · 0.65
indexOfMethod · 0.45

Tested by

no test coverage detected