tricu

An interpreted language for exploring Tree Calculus
Log | Files | Refs | README | LICENSE

consumer_cps_worker.tri (973B)


      1 !import "consumers.lowerings.cps-worker" C
      2 !import "consumers.structural" S
      3 !import "prelude" !Local
      4 simple = S.makeConsumer t [(S.makeRule (S.patCapture 0) S.patAny (S.outStem (S.outCapture 0)))]
      5 compiled = C.compile simple
      6 main = matchBool "cps-worker-ok" "cps-worker-DIFFER" (foldl and? true
      7   [(equal? (S.runConsumer simple 12) (bindResult compiled (program _ : C.runChecked program 12)))
      8    (equal? (C.compile (S.makeConsumer t [(S.makeRule S.patAny S.patAny (S.outCapture 1))])) (err "unknown capture" t))
      9    (equal? (C.compile (S.makeConsumer t [(S.makeRule S.patAny S.patAny (S.outBecome (S.outLiteral t) (S.outLiteral t) (S.outLiteral t)))])) (err "unsupported output form in CPS worker" t))
     10    (equal? (C.compile (S.makeConsumer t [(S.makeRule S.patAny S.patAny
     11      (S.outMatch (S.outLiteral true)
     12        [(pair S.patLeaf (S.outLiteral 7))
     13         (pair (S.patStem S.patLeaf) (S.outCapture 99))]))]))
     14      (err "unsupported output form in CPS worker" t))])
     15 main