Module search revamp for pkg managers
The search path listed in an import directive can now be an array. The top-level search path is appended. Null and empty strings in the path terminate any search. The "." in "." and "./*" is replaced with the directory containing the file doing the import (for command-line programs this is the current directory, though that may be a bad idea). No version numbers or anything of the sort are gratuitously added to the search paths. All this makes external package managers possible by allowing dependencies to be installed local to dependents.
This commit is contained in:
1 parent
1cdcff1c01
commit
56ae88d9d5
10 files changed
+167
-80
No files matched your search
+11
-2
@@ -1,5 +1,14 @@
|
||||
module c {whatever:null};
|
||||
import a as foo;
|
||||
import d as d {search:"$ORIGIN/"};
|
||||
import d as d {search:"./"};
|
||||
import d {search:"./"};
|
||||
import e as e {search:"./../lib/jq"};
|
||||
import f as f {search:"./../lib/jq"};
|
||||
def a: 0;
|
||||
def c: foo::a + "c" + d::meh;
|
||||
def c:
|
||||
if meh != d::meh then error("import into namespace doesn't work")
|
||||
elif foo::a != "a" then error("foo::a didn't work as expected")
|
||||
elif d::meh != "meh" then error("d::meh didn't work as expected")
|
||||
elif e::bah != "bah" then error("e::bah didn't work as expected")
|
||||
elif f::f != "f is here" then error("f::f didn't work as expected")
|
||||
else foo::a + "c" + d::meh + e::bah end;
|
||||
@@ -0,0 +1 @@
|
||||
def bah: "bah";
|
||||
@@ -0,0 +1 @@
|
||||
def f: "f is here";
|
||||
@@ -137,12 +137,12 @@ if ! $VALGRIND $Q ./jq -ner -L $mods 'import a as foo; import b as bar; import a
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! $VALGRIND $Q ./jq -ner -L $mods 'import c as foo; [foo::a, foo::c] | . == [0,"acmeh"]' > /dev/null; then
|
||||
if ! $VALGRIND $Q ./jq -ner -L $mods 'import c as foo; [foo::a, foo::c] | . == [0,"acmehbah"]' > /dev/null; then
|
||||
echo "Module system appears to be broken" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "`$VALGRIND $Q ./jq -cner -L $mods '\"c\" | modulemeta'`" != '{"whatever":null,"name":"c","deps":[{"as":"foo","name":"a"},{"search":"$ORIGIN/","as":"d","name":"d"}]}' ]; then
|
||||
if [ "`$VALGRIND $Q ./jq -cner -L $mods '\"c\" | modulemeta'`" != '{"whatever":null,"name":"c","deps":[{"as":"foo","name":"a"},{"search":"./","as":"d","name":"d"},{"search":"./","name":"d"},{"search":"./../lib/jq","as":"e","name":"e"},{"search":"./../lib/jq","as":"f","name":"f"}]}' ]; then
|
||||
echo "modulemeta builtin appears to be broken" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
@@ -171,3 +171,14 @@ if [ -n "$VALGRIND" ] && ! grep 'ERROR SUMMARY: 0 errors from 0 contexts' $d/out
|
||||
cat $d/out
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! $VALGRIND ./jq -ner -L $mods -f $mods/test_bind_order.jq > $d/out 2>&1; then
|
||||
echo "Import bind order is broken" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -n "$VALGRIND" ] && ! grep 'ERROR SUMMARY: 0 errors from 0 contexts' $d/out > /dev/null; then
|
||||
echo "Memory errors when programs have syntax errors" 1>&2
|
||||
cat $d/out
|
||||
exit 1
|
||||
fi
|
||||
Reference in new issue
Block a user