<?xml version="1.0"?>
<paste-with-annotations>
  <paste>
    <number>
      <integer>55628</integer>
    </number>
    <user>
      <string>turbo24prg</string>
    </user>
    <title>
      <string>broken responders-definer</string>
    </title>
    <contents>
      <string>define responders
  &quot;/about&quot;
    get () =&gt; show-about;
end;


define macro responders-definer
  { define responders
      ?responders:*
    end }
   =&gt; { ?responders }

  responders:
    { } =&gt; { }
    { ?responder:* ... } =&gt; { ?responder ... }

  responder:
    { ?url:expression ?responder-methods:* }
     =&gt; { begin
            let responder = make(&lt;responder&gt;);
            ?responder-methods
            add-responder(?url, responder);
          end }

  responder-methods:
    { } =&gt; { }
    { ?responder-method:* ; ... } =&gt; { ?responder-method ; ... }

  responder-method:
    { ?request-method:expression ( ?regex:* ) =&gt;
      ?actions:* }
     =&gt; { begin
            let map = element(responder.responder-map,
                              ?#&quot;request-method&quot;,
                              default: #f);
            unless (map)
              map := make(&lt;table&gt;);
              responder.responder-map[?#&quot;request-method&quot;] := map;
            end unless;
            map[compile-regex(?regex)] := list(?actions);
          end }

  regex:
    { } =&gt; { &quot;^$&quot; }
    { ?pattern:expression } =&gt; { ?pattern }


// do(method (foo) foo() | error(&lt;action-sequence-error&gt;) end, ...)

end macro responders-definer;


</string>
    </contents>
    <universal-time>
      <integer>3411579597</integer>
    </universal-time>
    <channel>
      <string>#dylan</string>
    </channel>
    <colorization-mode>
      <string></string>
    </colorization-mode>
    <maybe-spam>
      <null/>
    </maybe-spam>
    <is-unicode>
      <null/>
    </is-unicode>
  </paste>
  <annotation>
    <number>
      <integer>1</integer>
    </number>
    <user>
      <string>turbo24prg</string>
    </user>
    <title>
      <string>another try, still not working</string>
    </title>
    <contents>
      <string>define responders
  &quot;/foo&quot;
    get () =&gt; (test, foo-get),
    post () =&gt; (foo-post);
  &quot;/bar&quot;
    post () =&gt; (bar-post);
end;



Invalid syntax in macro-case macro call.


define macro responders-definer
  { define responders
      ?responders:*
    end }
   =&gt; { ?responders }

  responders:
    { } =&gt; { }
    { ?responder:* ; ... } =&gt; { ?responder ; ... }

  responder:
    { ?url:* ?responder-methods:* }
     =&gt; { begin
            let responder = make(&lt;responder&gt;);
            ?responder-methods
            add-responder(?url, responder);
          end }

  responder-methods:
    { } =&gt; { }
    { ?responder-method:* , ... } =&gt; { ?responder-method ; ... }

  responder-method:
    { ?request-method:* ( ?regex:* ) =&gt; ( ?actions:* ) }
     =&gt; { begin
            let map = element(responder.responder-map,
                              ?#&quot;request-method&quot;,
                              default: #f);
            unless (map)
              map := make(&lt;table&gt;);
              responder.responder-map[?#&quot;request-method&quot;] := map;
            end unless;
            map[compile-regex(?regex)] := list(?actions);
          end }

  regex:
    { } =&gt; { &quot;^$&quot; }
    { ?pattern:* } =&gt; { ?pattern }


// do(method (foo) foo() | error(&lt;action-sequence-error&gt;) end, ...)

end macro responders-definer;

</string>
    </contents>
    <universal-time>
      <integer>3411583611</integer>
    </universal-time>
    <channel>
      <string>#dylan</string>
    </channel>
    <colorization-mode>
      <string></string>
    </colorization-mode>
    <maybe-spam>
      <null/>
    </maybe-spam>
    <is-unicode>
      <null/>
    </is-unicode>
  </annotation>
</paste-with-annotations>