gpgscm: Change associativity of ::.
authorJustus Winter <justus@g10code.com>
Mon, 19 Dec 2016 14:29:07 +0000 (15:29 +0100)
committerJustus Winter <justus@g10code.com>
Mon, 19 Dec 2016 14:42:35 +0000 (15:42 +0100)
* tests/gpgscm/scheme.c (mk_atom): Change associativity of the ::
infix-operator.  This makes it possible to naturally express accessing
nested structures (e.g. a::b::c).

Signed-off-by: Justus Winter <justus@g10code.com>
tests/gpgscm/scheme.c

index 3abe12a..a5b7691 100644 (file)
@@ -1409,14 +1409,23 @@ static pointer mk_atom(scheme *sc, char *q) {
      int has_fp_exp = 0;
 
 #if USE_COLON_HOOK
-     if((p=strstr(q,"::"))!=0) {
+     char *next;
+     next = p = q;
+     while ((next = strstr(next, "::")) != 0) {
+         /* Keep looking for the last occurrence.  */
+         p = next;
+         next = next + 2;
+     }
+
+     if (p != q) {
           *p=0;
           return cons(sc, sc->COLON_HOOK,
                           cons(sc,
                               cons(sc,
                                    sc->QUOTE,
-                                   cons(sc, mk_atom(sc,p+2), sc->NIL)),
-                              cons(sc, mk_symbol(sc,strlwr(q)), sc->NIL)));
+                                   cons(sc, mk_symbol(sc, strlwr(p + 2)),
+                                       sc->NIL)),
+                              cons(sc, mk_atom(sc, q), sc->NIL)));
      }
 #endif