@@ -25,7 +25,7 @@ public class LispReader{
25
25
static final Symbol QUOTE = Symbol .create ("quote" );
26
26
static final Symbol THE_VAR = Symbol .create ("var" );
27
27
//static Symbol SYNTAX_QUOTE = Symbol.create(null, "syntax-quote");
28
- // static Symbol UNQUOTE = Symbol.create(null , "unquote");
28
+ static Symbol UNQUOTE = Symbol .create ("clojure.core" , "unquote" );
29
29
//static Symbol UNQUOTE_SPLICING = Symbol.create(null, "unquote-splicing");
30
30
static Symbol CONCAT = Symbol .create ("clojure.core" , "concat" );
31
31
static Symbol LIST = Symbol .create ("clojure.core" , "list" );
@@ -683,8 +683,8 @@ else if(form instanceof Symbol)
683
683
sym = Compiler .resolveSymbol (sym );
684
684
ret = RT .list (Compiler .QUOTE , sym );
685
685
}
686
- else if (form instanceof Unquote )
687
- return (( Unquote ) form ). o ;
686
+ else if (isUnquote ( form ) )
687
+ return RT . second ( form );
688
688
else if (form instanceof UnquoteSplicing )
689
689
throw new IllegalStateException ("splice not in list" );
690
690
else if (form instanceof IPersistentCollection )
@@ -733,8 +733,8 @@ private static ISeq sqExpandList(ISeq seq) throws Exception{
733
733
for (; seq != null ; seq = seq .rest ())
734
734
{
735
735
Object item = seq .first ();
736
- if (item instanceof Unquote )
737
- ret = ret .cons (RT .list (LIST , (( Unquote ) item ). o ));
736
+ if (isUnquote ( item ) )
737
+ ret = ret .cons (RT .list (LIST , RT . second ( item )));
738
738
else if (item instanceof UnquoteSplicing )
739
739
ret = ret .cons (((UnquoteSplicing ) item ).o );
740
740
else
@@ -756,13 +756,6 @@ private static IPersistentVector flattenMap(Object form){
756
756
757
757
}
758
758
759
- static class Unquote {
760
- final Object o ;
761
-
762
- public Unquote (Object o ){
763
- this .o = o ;
764
- }
765
- }
766
759
767
760
static class UnquoteSplicing {
768
761
final Object o ;
@@ -772,6 +765,10 @@ public UnquoteSplicing(Object o){
772
765
}
773
766
}
774
767
768
+ static boolean isUnquote (Object form ){
769
+ return form instanceof ISeq && RT .first (form ).equals (UNQUOTE );
770
+ }
771
+
775
772
static class UnquoteReader extends AFn {
776
773
public Object invoke (Object reader , Object comma ) throws Exception {
777
774
PushbackReader r = (PushbackReader ) reader ;
@@ -787,7 +784,7 @@ public Object invoke(Object reader, Object comma) throws Exception{
787
784
{
788
785
unread (r , ch );
789
786
Object o = read (r , true , null , true );
790
- return new Unquote ( o );
787
+ return RT . list ( UNQUOTE , o );
791
788
}
792
789
}
793
790
0 commit comments