diff src/jscomp.sml @ 794:dc3fc3f3b834

Improving/reordering Unpoly and Especialize; pathmaps
author Adam Chlipala <adamc@hcoop.net>
date Thu, 14 May 2009 08:13:54 -0400
parents a28982de5645
children 83875a9eb9b8
line wrap: on
line diff
--- a/src/jscomp.sml	Tue May 12 20:15:11 2009 -0400
+++ b/src/jscomp.sml	Thu May 14 08:13:54 2009 -0400
@@ -400,6 +400,8 @@
             else
                 s
 
+        val foundJavaScript = ref false
+
         fun jsExp mode skip outer =
             let
                 val len = length outer
@@ -662,8 +664,10 @@
                             let
                                 val args =
                                     case (m, x, args) of
-                                        ("Basis", "new_client_source", [(EJavaScript (_, e, _), _)]) => [e]
-                                      | ("Basis", "set_client_source", [e1, (EJavaScript (_, e2, _), _)]) => [e1, e2]
+                                        ("Basis", "new_client_source", [(EJavaScript (_, e, _), _)]) =>
+                                        (foundJavaScript := true; [e])
+                                      | ("Basis", "set_client_source", [e1, (EJavaScript (_, e2, _), _)]) =>
+                                        (foundJavaScript := true; [e1, e2])
                                       | _ => args
 
                                 val name = case Settings.jsFunc (m, x) of
@@ -871,12 +875,15 @@
                                          str ")"], st)
                             end
 
-                          | EJavaScript (Source _, _, SOME _) => (e, st)
+                          | EJavaScript (Source _, _, SOME _) =>
+                            (foundJavaScript := true;
+                             (e, st))
                           | EJavaScript (_, _, SOME e) =>
-                            (strcat [str "cs(function(){return ",
-                                     e,
-                                     str "})"],
-                             st)
+                            (foundJavaScript := true;
+                             (strcat [str "cs(function(){return ",
+                                      e,
+                                      str "})"],
+                              st))
 
                           | EClosure _ => unsupported "EClosure"
                           | EQuery _ => unsupported "Query"
@@ -888,6 +895,7 @@
                             let
                                 val (e, st) = jsE inner (e, st)
                             in
+                                foundJavaScript := true;
                                 (strcat [str "cs(function(){return ",
                                          e,
                                          str "})"],
@@ -995,7 +1003,8 @@
                                       in
                                           case e of
                                               EJavaScript (m, orig, NONE) =>
-                                              doCode m 0 env orig orig
+                                              (foundJavaScript := true;
+                                               doCode m 0 env orig orig)
                                             | _ => (e, st)
                                       end,
                              decl = fn (_, e, st) => (e, st),
@@ -1031,9 +1040,15 @@
                 NONE => String.concat (rev acc)
               | SOME line => lines (line :: acc)
         val lines = lines []
+
+        val script =
+            if !foundJavaScript then
+                lines ^ String.concat (rev (#script st))
+            else
+                ""
     in
         TextIO.closeIn inf;
-        (DJavaScript (lines ^ String.concat (rev (#script st))), ErrorMsg.dummySpan) :: ds
+        (DJavaScript script, ErrorMsg.dummySpan) :: ds
     end
 
 end