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

Method invoke

src/jvm/clojure/lang/EdnReader.java:559–597  ·  view source on GitHub ↗
(Object reader, Object caret, Object opts)

Source from the content-addressed store, hash-verified

557
558public static class MetaReader extends AFn{
559 public Object invoke(Object reader, Object caret, Object opts) {
560 PushbackReader r = (PushbackReader) reader;
561 int line = -1;
562 int column = -1;
563 if(r instanceof LineNumberingPushbackReader)
564 {
565 line = ((LineNumberingPushbackReader) r).getLineNumber();
566 column = ((LineNumberingPushbackReader) r).getColumnNumber()-1;
567 }
568 Object meta = read(r, true, null, true, opts);
569 if(meta instanceof Symbol || meta instanceof String)
570 meta = RT.map(RT.TAG_KEY, meta);
571 else if (meta instanceof Keyword)
572 meta = RT.map(meta, RT.T);
573 else if(!(meta instanceof IPersistentMap))
574 throw new IllegalArgumentException("Metadata must be Symbol,Keyword,String or Map");
575
576 Object o = read(r, true, null, true, opts);
577 if(o instanceof IMeta)
578 {
579 if(line != -1 && o instanceof ISeq)
580 {
581 meta = ((IPersistentMap) meta).assoc(RT.LINE_KEY, line).assoc(RT.COLUMN_KEY, column);
582 }
583 if(o instanceof IReference)
584 {
585 ((IReference)o).resetMeta((IPersistentMap) meta);
586 return o;
587 }
588 Object ometa = RT.meta(o);
589 for(ISeq s = RT.seq(meta); s != null; s = s.next()) {
590 IMapEntry kv = (IMapEntry) s.first();
591 ometa = RT.assoc(ometa, kv.getKey(), kv.getValue());
592 }
593 return ((IObj) o).withMeta((IPersistentMap) ometa);
594 }
595 else
596 throw new IllegalArgumentException("Metadata can only be applied to IMetas");
597 }
598
599}
600

Callers

nothing calls this directly

Calls 14

mapMethod · 0.95
metaMethod · 0.95
seqMethod · 0.95
nextMethod · 0.95
firstMethod · 0.95
assocMethod · 0.95
assocMethod · 0.65
resetMetaMethod · 0.65
withMetaMethod · 0.65
getLineNumberMethod · 0.45
getColumnNumberMethod · 0.45
readMethod · 0.45

Tested by

no test coverage detected