Curlで行番号&goto

こんなマクロを定義する。

{define-macro public {with-line ?v:verbatim}
    {return
        {expand-template
            {let 
                ?={expand-template line}: int = 0,
                ?={expand-template pc}:int = 0,
                ?={expand-template jump}:int = 0
            }
            {while true do            
                {value ?v}
                {break}
            }
        }
    }
}
{define-macro public {line-num ?n:expression  ?v:verbatim}
    {return
        {expand-template
            {set ?={expand-template line} = ?n}
            {if ?={expand-template line} >= ?={expand-template jump} then
                set ?={expand-template pc} = ?={expand-template line}
                {value ?v}
            }
        }
    }
}
{define-macro public {go-to ?n:expression}
    {return
        {expand-template
            set ?={expand-template jump} = ?n
            {continue}            
        }
    }
}


gotoができる

{with-line 
    {line-num 10 {output "aaa"}}
    {line-num 20 {go-to 50}}
    {line-num 30 {output "bbb"}}
    {line-num 32 {go-to 40}}
    {line-num 35 {output {dada}}}
    {line-num 40 {output "ccc"}}
    {line-num 45 {go-to 70}}
    {line-num 50 {output "ddd"}}
    {line-num 60 {go-to 30}}
    {line-num 70 {output "eee"}}
    {line-num 80 {output "fff"}}
}