<?xml version="1.0"?>
<paste-with-annotations>
  <paste>
    <number>
      <integer>75496</integer>
    </number>
    <user>
      <string>hannes</string>
    </user>
    <title>
      <string>test case for &quot;Error: Unable to find class mapping for {{ succb }}&quot;</string>
    </title>
    <contents>
      <string>
define open class &lt;token&gt; (&lt;object&gt;)
end;

define constant &lt;positionable-stream&gt; = &lt;object&gt;;
define constant &lt;parse-failure&gt; = &lt;object&gt;;
define constant &lt;parse-context&gt; = &lt;object&gt;;

define function seq1 (#rest sub-rules) =&gt; (rule-parser :: &lt;function&gt;)
  local method foo (stream, context)
          values(if (context) #t end, #f, #t);
        end;
  foo;
end;

define constant program-parser-rule = seq1 (parse-ablock);


define function parse-program
 (stream :: &lt;positionable-stream&gt;, context :: &lt;parse-context&gt;)
 =&gt; (value :: false-or (&lt;ablock-token&gt;),
     success? :: &lt;boolean&gt;,
     failure :: false-or (&lt;parse-failure&gt;))
  let (prod, succb :: &lt;boolean&gt;, err :: false-or (&lt;parse-failure&gt;))
    = program-parser-rule (stream, context);
  succb := #f;
  values (succb, succb, err);
end function;

define class &lt;ablock-token&gt; (&lt;token&gt;) end class;

define constant ablock-parser-rule = seq1 (parse-procedure-block);

define function parse-ablock
 (stream :: &lt;positionable-stream&gt;, context :: &lt;parse-context&gt;)
 =&gt; (value :: false-or (&lt;ablock-token&gt;),
     success? :: &lt;boolean&gt;,
     failure :: false-or (&lt;parse-failure&gt;))
  let (prod, succb :: &lt;boolean&gt;, err :: false-or(&lt;parse-failure&gt;))
    = ablock-parser-rule (stream, context);
  succb := #f;
  values(succb, succb, err);
end function;

define class &lt;procedure-block-token&gt; (&lt;token&gt;) end class;

define constant procedure-block-parser-rule = seq1 ( parse-ablock);
define function parse-procedure-block
 (stream :: &lt;positionable-stream&gt;, context :: &lt;parse-context&gt;)
 =&gt; (value :: false-or (&lt;procedure-block-token&gt;),
     success? :: &lt;boolean&gt;,
     failure :: false-or (&lt;parse-failure&gt;))
  let (prod, succb :: &lt;boolean&gt;, err :: false-or (&lt;parse-failure&gt;))
    = procedure-block-parser-rule (stream, context);
  succb := #f;
  values (succb, succb, err);
end function;</string>
    </contents>
    <universal-time>
      <integer>3443652960</integer>
    </universal-time>
    <channel>
      <string>#dylan</string>
    </channel>
    <colorization-mode>
      <string>None</string>
    </colorization-mode>
    <maybe-spam>
      <null/>
    </maybe-spam>
    <is-unicode>
      <keyword>TRUE</keyword>
    </is-unicode>
    <deletion-requested>
      <null/>
    </deletion-requested>
    <deletion-requested-email>
      <null/>
    </deletion-requested-email>
    <expiration-time>
      <null/>
    </expiration-time>
  </paste>
  <annotation>
    <number>
      <integer>1</integer>
    </number>
    <user>
      <string>hannes</string>
    </user>
    <title>
      <string>could simplify it to</string>
    </title>
    <contents>
      <string>define constant &lt;positionable-stream&gt; = &lt;object&gt;;
define constant &lt;parse-failure&gt; = &lt;object&gt;;
define constant &lt;parse-context&gt; = &lt;object&gt;;

define function seq1 (#rest sub-rules) =&gt; (rule-parser :: &lt;function&gt;)
  local method foo (stream, context)
          values(if (context) #t end, #f, #t);
        end;
  foo;
end;

define constant program-parser-rule = seq1(parse-ablock);

define function parse-program
 (stream :: &lt;positionable-stream&gt;, context :: &lt;parse-context&gt;)
  program-parser-rule(stream, context);
end function;

define constant ablock-parser-rule = seq1 (parse-ablock);

define function parse-ablock
 (stream :: &lt;positionable-stream&gt;, context :: &lt;parse-context&gt;)
  let (prod, succb :: &lt;boolean&gt;, err :: false-or(&lt;parse-failure&gt;))
    = ablock-parser-rule (stream, context);
  succb := #f;
  values(#t, #t, #t);
end function;
</string>
    </contents>
    <universal-time>
      <integer>3443653529</integer>
    </universal-time>
    <channel>
      <string>#dylan</string>
    </channel>
    <colorization-mode>
      <string></string>
    </colorization-mode>
    <maybe-spam>
      <null/>
    </maybe-spam>
    <is-unicode>
      <keyword>TRUE</keyword>
    </is-unicode>
    <deletion-requested>
      <null/>
    </deletion-requested>
    <deletion-requested-email>
      <null/>
    </deletion-requested-email>
    <expiration-time>
      <null/>
    </expiration-time>
  </annotation>
  <annotation>
    <number>
      <integer>2</integer>
    </number>
    <user>
      <string>hannes</string>
    </user>
    <title>
      <string>could also remove the constants</string>
    </title>
    <contents>
      <string>define function seq1 (#rest sub-rules) =&gt; (rule-parser :: &lt;function&gt;)
  local method foo (stream, context)
          values(if (context) #t end, #f, #t);
        end;
  foo;
end;

define constant program-parser-rule = seq1(parse-ablock);

define function parse-program
 (stream, context)
  program-parser-rule(stream, context);
end function;

define constant ablock-parser-rule = seq1 (parse-ablock);

define function parse-ablock
 (stream, context)
  let (prod, succb, err)
    = ablock-parser-rule (stream, context);
  succb := #f;
  values(#t, #t, #t);
end function;</string>
    </contents>
    <universal-time>
      <integer>3443654328</integer>
    </universal-time>
    <channel>
      <string>#dylan</string>
    </channel>
    <colorization-mode>
      <string></string>
    </colorization-mode>
    <maybe-spam>
      <null/>
    </maybe-spam>
    <is-unicode>
      <keyword>TRUE</keyword>
    </is-unicode>
    <deletion-requested>
      <null/>
    </deletion-requested>
    <deletion-requested-email>
      <null/>
    </deletion-requested-email>
    <expiration-time>
      <null/>
    </expiration-time>
  </annotation>
</paste-with-annotations>
