Mercurial > urweb
comparison src/corify.sml @ 182:d11754ffe252
Compiled pattern matching to C
author | Adam Chlipala <adamc@hcoop.net> |
---|---|
date | Sun, 03 Aug 2008 12:43:20 -0400 |
parents | 5d030ee143e2 |
children | 19ee24bffbc0 |
comparison
equal
deleted
inserted
replaced
181:31dfab1d4050 | 182:d11754ffe252 |
---|---|
409 end | 409 end |
410 | 410 |
411 fun corifyPat st (p, loc) = | 411 fun corifyPat st (p, loc) = |
412 case p of | 412 case p of |
413 L.PWild => (L'.PWild, loc) | 413 L.PWild => (L'.PWild, loc) |
414 | L.PVar x => (L'.PVar x, loc) | 414 | L.PVar (x, t) => (L'.PVar (x, corifyCon st t), loc) |
415 | L.PPrim p => (L'.PPrim p, loc) | 415 | L.PPrim p => (L'.PPrim p, loc) |
416 | L.PCon (pc, po) => (L'.PCon (corifyPatCon st pc, Option.map (corifyPat st) po), loc) | 416 | L.PCon (pc, po) => (L'.PCon (corifyPatCon st pc, Option.map (corifyPat st) po), loc) |
417 | L.PRecord xps => (L'.PRecord (map (fn (x, p) => (x, corifyPat st p)) xps), loc) | 417 | L.PRecord xps => (L'.PRecord (map (fn (x, p, t) => (x, corifyPat st p, corifyCon st t)) xps), loc) |
418 | 418 |
419 fun corifyExp st (e, loc) = | 419 fun corifyExp st (e, loc) = |
420 case e of | 420 case e of |
421 L.EPrim p => (L'.EPrim p, loc) | 421 L.EPrim p => (L'.EPrim p, loc) |
422 | L.ERel n => (L'.ERel n, loc) | 422 | L.ERel n => (L'.ERel n, loc) |
471 {field = corifyCon st field, rest = corifyCon st rest}), loc) | 471 {field = corifyCon st field, rest = corifyCon st rest}), loc) |
472 | L.ECut (e1, c, {field, rest}) => (L'.ECut (corifyExp st e1, corifyCon st c, | 472 | L.ECut (e1, c, {field, rest}) => (L'.ECut (corifyExp st e1, corifyCon st c, |
473 {field = corifyCon st field, rest = corifyCon st rest}), loc) | 473 {field = corifyCon st field, rest = corifyCon st rest}), loc) |
474 | L.EFold k => (L'.EFold (corifyKind k), loc) | 474 | L.EFold k => (L'.EFold (corifyKind k), loc) |
475 | 475 |
476 | L.ECase (e, pes, t) => (L'.ECase (corifyExp st e, | 476 | L.ECase (e, pes, {disc, result}) => |
477 map (fn (p, e) => (corifyPat st p, corifyExp st e)) pes, | 477 (L'.ECase (corifyExp st e, |
478 corifyCon st t), | 478 map (fn (p, e) => (corifyPat st p, corifyExp st e)) pes, |
479 loc) | 479 {disc = corifyCon st disc, result = corifyCon st result}), |
480 loc) | |
480 | 481 |
481 | L.EWrite e => (L'.EWrite (corifyExp st e), loc) | 482 | L.EWrite e => (L'.EWrite (corifyExp st e), loc) |
482 | 483 |
483 fun corifyDecl ((d, loc : EM.span), st) = | 484 fun corifyDecl ((d, loc : EM.span), st) = |
484 case d of | 485 case d of |