Mercurial > urweb
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 |