summaryrefslogtreecommitdiff
path: root/src/compiler.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2009-12-24 15:49:52 -0500
committerGravatar Adam Chlipala <adamc@hcoop.net>2009-12-24 15:49:52 -0500
commit4acc576d52308431a4d0311e8b37984ab3d0b0bc (patch)
treea85cf2491794d4c0615efc0411e96bfe01159bb2 /src/compiler.sml
parentea12b669d50bb0a397ec5449359607ae5d66386a (diff)
Convenience libifying; allow more NULLs with globals
Diffstat (limited to 'src/compiler.sml')
-rw-r--r--src/compiler.sml24
1 files changed, 21 insertions, 3 deletions
diff --git a/src/compiler.sml b/src/compiler.sml
index fc764205..b793ab60 100644
--- a/src/compiler.sml
+++ b/src/compiler.sml
@@ -270,9 +270,13 @@ structure M = BinaryMapFn(struct
val compare = String.compare
end)
+val pathmap = ref (M.insert (M.empty, "", Config.libUr))
+
+fun addPath (k, v) = pathmap := M.insert (!pathmap, k, v)
+
fun parseUrp' accLibs fname =
let
- val pathmap = ref (M.insert (M.empty, "", Config.libUr))
+ val pathmap = ref (!pathmap)
val bigLibs = ref []
fun pu filename =
@@ -304,6 +308,20 @@ fun parseUrp' accLibs fname =
handle OS.Path.Path => fname
end
+ fun libify path =
+ (if Posix.FileSys.access (path ^ ".urp", []) then
+ path
+ else
+ path ^ "/lib")
+ handle SysErr => path
+
+ fun libify' path =
+ (if Posix.FileSys.access (relify path ^ ".urp", []) then
+ path
+ else
+ path ^ "/lib")
+ handle SysErr => path
+
val absDir = OS.Path.mkAbsolute {path = dir, relativeTo = OS.FileSys.getDir ()}
fun relifyA fname =
@@ -559,9 +577,9 @@ fun parseUrp' accLibs fname =
end
| _ => ErrorMsg.error "Bad 'deny' syntax")
| "library" => if accLibs then
- libs := pu (relify arg) :: !libs
+ libs := pu (libify (relify arg)) :: !libs
else
- bigLibs := arg :: !bigLibs
+ bigLibs := libify' arg :: !bigLibs
| "path" =>
(case String.fields (fn ch => ch = #"=") arg of
[n, v] => pathmap := M.insert (!pathmap, n, v)