(Object reader, Object caret, Object opts)
| 557 | |
| 558 | public 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 |
nothing calls this directly
no test coverage detected