comparison src/cjrize.sml @ 2221:278e10629ba1

Basic field-resolution invalidation.
author Ziv Scully <ziv@mit.edu>
date Sat, 29 Nov 2014 03:37:59 -0500
parents a9159911c3ba
children 25874084bf1f
comparison
equal deleted inserted replaced
2220:794017f378de 2221:278e10629ba1
14 * 14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
429 end 429 end
430 430
431 | L.EClosure _ => (ErrorMsg.errorAt loc "Nested closure remains in code generation"; 431 | L.EClosure _ => (ErrorMsg.errorAt loc "Nested closure remains in code generation";
432 (dummye, sm)) 432 (dummye, sm))
433 433
434 | L.EQuery {exps, tables, state, query, body, initial} => 434 | L.EQuery {exps, tables, state, query, body, initial, sqlcacheInfo} =>
435 let 435 let
436 val (exps', sm) = ListUtil.foldlMap (fn ((x, t), sm) => 436 val (exps', sm) = ListUtil.foldlMap (fn ((x, t), sm) =>
437 let 437 let
438 val (t, sm) = cifyTyp (t, sm) 438 val (t, sm) = cifyTyp (t, sm)
439 in 439 in
584 end 584 end
585 | L.DValRec vis => 585 | L.DValRec vis =>
586 let 586 let
587 val (vis, sm) = ListUtil.foldlMap 587 val (vis, sm) = ListUtil.foldlMap
588 (fn ((x, n, t, e, _), sm) => 588 (fn ((x, n, t, e, _), sm) =>
589 let 589 let
590 val (t, sm) = cifyTyp (t, sm) 590 val (t, sm) = cifyTyp (t, sm)
591 591
592 fun unravel (tAll as (t, _), eAll as (e, _)) = 592 fun unravel (tAll as (t, _), eAll as (e, _)) =
593 case (t, e) of 593 case (t, e) of
594 (L'.TFun (dom, ran), L.EAbs (ax, _, _, e)) => 594 (L'.TFun (dom, ran), L.EAbs (ax, _, _, e)) =>
599 end 599 end
600 | (L'.TFun _, _) => 600 | (L'.TFun _, _) =>
601 (ErrorMsg.errorAt loc "Function isn't explicit at code generation"; 601 (ErrorMsg.errorAt loc "Function isn't explicit at code generation";
602 ([], tAll, eAll)) 602 ([], tAll, eAll))
603 | _ => ([], tAll, eAll) 603 | _ => ([], tAll, eAll)
604 604
605 val (args, ran, e) = unravel (t, e) 605 val (args, ran, e) = unravel (t, e)
606 val (e, sm) = cifyExp (e, sm) 606 val (e, sm) = cifyExp (e, sm)
607 in 607 in
608 ((x, n, args, ran, e), sm) 608 ((x, n, args, ran, e), sm)
609 end) 609 end)
610 sm vis 610 sm vis
611 in 611 in
612 (SOME (L'.DFunRec vis, loc), NONE, sm) 612 (SOME (L'.DFunRec vis, loc), NONE, sm)
613 end 613 end
614 614
615 | L.DExport (ek, s, n, ts, t, b) => 615 | L.DExport (ek, s, n, ts, t, b) =>
616 let 616 let
617 val (ts, sm) = ListUtil.foldlMap cifyTyp sm ts 617 val (ts, sm) = ListUtil.foldlMap cifyTyp sm ts
618 val (t, sm) = cifyTyp (t, sm) 618 val (t, sm) = cifyTyp (t, sm)