annotate src/sidecheck.sml @ 1963:fec7beec96c7

Make that purity analysis a bit more lax again
author Adam Chlipala <adam@chlipala.net>
date Sun, 19 Jan 2014 14:31:55 -0500
parents 7bb8c560f23d
children ebfaab689570
rev   line source
adam@1595 1 (* Copyright (c) 2011, Adam Chlipala
adam@1595 2 * All rights reserved.
adam@1595 3 *
adam@1595 4 * Redistribution and use in source and binary forms, with or without
adam@1595 5 * modification, are permitted provided that the following conditions are met:
adam@1595 6 *
adam@1595 7 * - Redistributions of source code must retain the above copyright notice,
adam@1595 8 * this list of conditions and the following disclaimer.
adam@1595 9 * - Redistributions in binary form must reproduce the above copyright notice,
adam@1595 10 * this list of conditions and the following disclaimer in the documentation
adam@1595 11 * and/or other materials provided with the distribution.
adam@1595 12 * - The names of contributors may not be used to endorse or promote products
adam@1595 13 * derived from this software without specific prior written permission.
adam@1595 14 *
adam@1595 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
adam@1595 16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
adam@1595 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
adam@1595 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
adam@1595 19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
adam@1595 20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
adam@1595 21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
adam@1595 22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
adam@1595 23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
adam@1595 24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
adam@1595 25 * POSSIBILITY OF SUCH DAMAGE.
adam@1595 26 *)
adam@1595 27
adam@1595 28 structure SideCheck :> SIDE_CHECK = struct
adam@1595 29
adam@1595 30 open Mono
adam@1595 31
adam@1595 32 structure E = ErrorMsg
adam@1595 33
adam@1595 34 fun check ds =
adam@1612 35 (MonoUtil.File.appLoc (fn (e, loc) =>
adam@1612 36 let
adam@1612 37 fun error (k as (k1, k2)) =
adam@1612 38 if Settings.isClientOnly k then
adam@1612 39 let
adam@1612 40 val k2 = case k1 of
adam@1612 41 "Basis" =>
adam@1612 42 (case k2 of
adam@1612 43 "get_client_source" => "get"
adam@1612 44 | _ => k2)
adam@1612 45 | _ => k2
adam@1612 46 in
adam@1612 47 E.errorAt loc ("Server-side code uses client-side-only identifier \"" ^ k1 ^ "." ^ k2 ^ "\"")
adam@1612 48 end
adam@1612 49 else
adam@1612 50 ()
adam@1612 51 in
adam@1612 52 case e of
adam@1612 53 EFfi k => error k
adam@1612 54 | EFfiApp (k1, k2, _) => error (k1, k2)
adam@1612 55 | _ => ()
adam@1612 56 end) ds;
adam@1612 57 ds)
adam@1595 58
adam@1595 59 end