diff --git a/src/classes/file.c b/src/classes/file.c index 551c5db6..0eee0266 100644 --- a/src/classes/file.c +++ b/src/classes/file.c @@ -110,6 +110,19 @@ void file_setworkingdirectory(const char *path) { } } +/** Gets the global current working directory (relative to the filing systems cwd. + * @param[out] path - path to working directory. */ +void file_getworkingdirectory(varray_char *path) +{ + if (workingdir.count>0) { + for (unsigned int i=0; iout->code.count; @@ -4841,6 +4851,11 @@ static codeinfo compiler_import(compiler *c, syntaxtreenode *node, registerindx debugannotation_setmodule(&c->out->annotations, compiler_getmodule(c)); end=c->out->code.count; + + /* Restore old working directory */ + file_setworkingdirectory(wrkdir.data); + varray_charclear(&wrkdir); + varray_charclear(&fpath); compiler_clear(&cc); varray_charclear(&src); diff --git a/test/import/relative_directory.morpho b/test/import/relative_directory.morpho new file mode 100644 index 00000000..920cda8b --- /dev/null +++ b/test/import/relative_directory.morpho @@ -0,0 +1,5 @@ +import "relative_directory/target.m" +// expect: Successfully imported target + +folderfn("Hello world") +// expect: Hello world diff --git a/test/import/relative_directory/inner_target.m b/test/import/relative_directory/inner_target.m new file mode 100644 index 00000000..871e2888 --- /dev/null +++ b/test/import/relative_directory/inner_target.m @@ -0,0 +1,3 @@ +fn folderfn(message) { + print message +} \ No newline at end of file diff --git a/test/import/relative_directory/target.m b/test/import/relative_directory/target.m new file mode 100644 index 00000000..34d50eb6 --- /dev/null +++ b/test/import/relative_directory/target.m @@ -0,0 +1,3 @@ +import "inner_target.m" + +print "Successfully imported target"