# HG changeset patch # User Adam Chlipala # Date 1262890978 18000 # Node ID 74f2eb3b0606e58922e095c12db5247cb86c36a6 # Parent 951fced704d6679043d3d3f83751658b2c68c0d2 Basis.debug; more restrictive type for Basis.form; weaken definition of polymorphic-ness for especialization diff -r 951fced704d6 -r 74f2eb3b0606 include/urweb.h --- a/include/urweb.h Tue Jan 05 15:53:35 2010 -0500 +++ b/include/urweb.h Thu Jan 07 14:02:58 2010 -0500 @@ -270,4 +270,6 @@ void uw_set_deadline(uw_context, int); void uw_check_deadline(uw_context); +uw_Basis_unit uw_Basis_debug(uw_context, uw_Basis_string); + #endif diff -r 951fced704d6 -r 74f2eb3b0606 lib/ur/basis.urs --- a/lib/ur/basis.urs Tue Jan 05 15:53:35 2010 -0500 +++ b/lib/ur/basis.urs Thu Jan 07 14:02:58 2010 -0500 @@ -657,7 +657,7 @@ Onload = transaction unit] ++ boxAttrs) val form : ctx ::: {Unit} -> bind ::: {Type} - -> [[Body, Form] ~ ctx] => + -> [[Body, Form, Table] ~ ctx] => xml ([Body, Form] ++ ctx) [] bind -> xml ([Body] ++ ctx) [] [] @@ -777,3 +777,6 @@ type task_kind val initialize : task_kind + + +val debug : string -> transaction unit diff -r 951fced704d6 -r 74f2eb3b0606 src/c/urweb.c --- a/src/c/urweb.c Tue Jan 05 15:53:35 2010 -0500 +++ b/src/c/urweb.c Thu Jan 07 14:02:58 2010 -0500 @@ -3375,3 +3375,9 @@ } size_t uw_database_max = SIZE_MAX; + +uw_Basis_unit uw_Basis_debug(uw_context ctx, uw_Basis_string s) { + fprintf(stderr, "%s\n", s); + + return uw_unit_v; +} diff -r 951fced704d6 -r 74f2eb3b0606 src/especialize.sml --- a/src/especialize.sml Tue Jan 05 15:53:35 2010 -0500 +++ b/src/especialize.sml Thu Jan 07 14:02:58 2010 -0500 @@ -59,12 +59,18 @@ | _ => bound} 0 IS.empty -val isPoly = U.Decl.exists {kind = fn _ => false, - con = fn _ => false, - exp = fn ECAbs _ => true - | EKAbs _ => true - | _ => false, - decl = fn _ => false} +fun isPolyT (t, _) = + case t of + TFun (_, ran) => isPolyT ran + | TCFun _ => true + | TKFun _ => true + | _ => false + +fun isPoly (d, _) = + case d of + DVal (_, _, t, _, _) => isPolyT t + | DValRec vis => List.exists (isPolyT o #3) vis + | _ => false fun positionOf (v : int, ls) = let @@ -184,8 +190,8 @@ in ((ECApp (e, c), loc), st) end - | ECAbs _ => raise Fail "Especialize: Impossible ECAbs" - | EKAbs _ => raise Fail "Especialize: Impossible EKAbs" + | ECAbs _ => (e, st) + | EKAbs _ => (e, st) | EKApp (e, k) => let val (e, st) = exp (env, e, st) @@ -325,6 +331,7 @@ orelse (IS.numItems fvs >= length fxs andalso IS.exists (fn n => functionInside (#2 (List.nth (env, n)))) fvs) then ((*Print.prefaces "No" [("name", Print.PD.string name), + ("f", Print.PD.string (Int.toString f)), ("fxs'", Print.p_list (CorePrint.p_exp CoreEnv.empty) fxs')];*) default ()) @@ -417,6 +424,7 @@ e' fvs val e' = foldl (fn (arg, e) => (EApp (e, arg), loc)) e' xs + (*val () = print ("NEW: " ^ name ^ "__" ^ Int.toString f' ^ "\n");*) (*val () = Print.prefaces "Brand new" [("e'", CorePrint.p_exp CoreEnv.empty e'), ("e", CorePrint.p_exp CoreEnv.empty e), @@ -471,8 +479,15 @@ end | DValRec vis => let + (*val () = Print.preface ("Visiting", Print.p_list (fn vi => + Print.PD.string (#1 vi ^ "__" + ^ Int.toString + (#2 vi))) + vis)*) + val (vis, st) = ListUtil.foldlMap (fn ((x, n, t, e, s), st) => let + val () = mayNotSpec := SS.empty val (e, st) = exp ([], e, st) in ((x, n, t, e, s), st) @@ -537,6 +552,7 @@ specialized = #specialized st}, changed)) end + (*val () = Print.preface ("RESET", CorePrint.p_file CoreEnv.empty file)*) val (ds, (st, changed)) = ListUtil.foldlMapConcat doDecl ({maxName = U.File.maxName file + 1, funcs = funcs, @@ -545,6 +561,7 @@ false) file in + (*print ("Changed = " ^ Bool.toString changed ^ "\n");*) (changed, ds, #funcs st, #specialized st) end diff -r 951fced704d6 -r 74f2eb3b0606 src/settings.sml --- a/src/settings.sml Tue Jan 05 15:53:35 2010 -0500 +++ b/src/settings.sml Thu Jan 07 14:02:58 2010 -0500 @@ -95,7 +95,8 @@ "onConnectFail", "onDisconnect", "onServerError", - "kc"] + "kc", + "debug"] val effectful = ref effectfulBase fun setEffectful ls = effectful := S.addList (effectfulBase, ls)