comparison src/compiler.sml @ 1126:c01fb6f1b31f

-path and -root command-line flags
author Adam Chlipala <adamc@hcoop.net>
date Tue, 12 Jan 2010 11:07:39 -0500
parents c9137606733a
children d4cd54a4ea06
comparison
equal deleted inserted replaced
1125:e06bfeb6c2aa 1126:c01fb6f1b31f
336 acc 336 acc
337 else 337 else
338 let 338 let
339 val fname = String.implode (List.filter (fn x => not (Char.isSpace x)) 339 val fname = String.implode (List.filter (fn x => not (Char.isSpace x))
340 (String.explode line)) 340 (String.explode line))
341 val fname = relify fname 341 val fname = relifyA fname
342 in 342 in
343 fname :: acc 343 fname :: acc
344 end 344 end
345 in 345 in
346 readSources acc 346 readSources acc
707 last = ErrorMsg.dummyPos} 707 last = ErrorMsg.dummyPos}
708 708
709 val ds = #func parseUr ur 709 val ds = #func parseUr ur
710 val d = (Source.DStr (mname, sgnO, (Source.StrConst ds, loc)), loc) 710 val d = (Source.DStr (mname, sgnO, (Source.StrConst ds, loc)), loc)
711 711
712 val fname = OS.Path.mkCanonical fname
712 val d = case List.find (fn (root, name) => 713 val d = case List.find (fn (root, name) =>
713 String.isPrefix (root ^ "/") fname) mrs of 714 String.isPrefix (root ^ "/") fname) mrs of
714 NONE => d 715 NONE => d
715 | SOME (root, name) => 716 | SOME (root, name) =>
716 let 717 let
764 ErrorMsg.error "Parse failure" 765 ErrorMsg.error "Parse failure"
765 else 766 else
766 (); 767 ();
767 768
768 let 769 let
769 val final = nameOf (List.last fnames) 770 val final = List.last fnames
771 val final = case List.find (fn (root, name) =>
772 String.isPrefix (root ^ "/") final) mrs of
773 NONE => (Source.StrVar (nameOf final), loc)
774 | SOME (root, name) =>
775 let
776 val m = (Source.StrVar name, loc)
777 val final = String.extract (final, size root + 1, NONE)
778 in
779 foldl (fn (x, m) => (Source.StrProj (m, capitalize x), loc))
780 m (String.fields (fn ch => ch = #"/") final)
781 end
770 782
771 val ds = dsFfi @ ds 783 val ds = dsFfi @ ds
772 @ [(Source.DExport (Source.StrVar final, loc), loc)] 784 @ [(Source.DExport final, loc)]
773 785
774 val ds = case database of 786 val ds = case database of
775 NONE => ds 787 NONE => ds
776 | SOME s => (Source.DDatabase s, loc) :: ds 788 | SOME s => (Source.DDatabase s, loc) :: ds
777 in 789 in