From a84b75ddcfaceff6b68b9a3ce2d58d821d4c7c1a Mon Sep 17 00:00:00 2001 From: Paul Cadman Date: Fri, 16 Feb 2024 08:49:02 +0000 Subject: [PATCH 1/3] Add failing test for import nested local module --- test/Compilation/Positive.hs | 7 ++++++- tests/Compilation/positive/out/test074.out | 1 + .../positive/test074/ImportNestedLocalModule.juvix | 11 +++++++++++ tests/Compilation/positive/test074/Package.juvix | 5 +++++ tests/Compilation/positive/test074/test074.juvix | 6 ++++++ 5 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 tests/Compilation/positive/out/test074.out create mode 100644 tests/Compilation/positive/test074/ImportNestedLocalModule.juvix create mode 100644 tests/Compilation/positive/test074/Package.juvix create mode 100644 tests/Compilation/positive/test074/test074.juvix diff --git a/test/Compilation/Positive.hs b/test/Compilation/Positive.hs index cc7c4ff7c1..27a752b68f 100644 --- a/test/Compilation/Positive.hs +++ b/test/Compilation/Positive.hs @@ -440,5 +440,10 @@ tests = "Test073: Import and use a syntax alias" $(mkRelDir "test073") $(mkRelFile "test073.juvix") - $(mkRelFile "out/test073.out") + $(mkRelFile "out/test073.out"), + posTest + "Test074: Import nested local module" + $(mkRelDir "test074") + $(mkRelFile "test074.juvix") + $(mkRelFile "out/test074.out") ] diff --git a/tests/Compilation/positive/out/test074.out b/tests/Compilation/positive/out/test074.out new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/tests/Compilation/positive/out/test074.out @@ -0,0 +1 @@ +1 diff --git a/tests/Compilation/positive/test074/ImportNestedLocalModule.juvix b/tests/Compilation/positive/test074/ImportNestedLocalModule.juvix new file mode 100644 index 0000000000..771c9f9ca7 --- /dev/null +++ b/tests/Compilation/positive/test074/ImportNestedLocalModule.juvix @@ -0,0 +1,11 @@ +module ImportNestedLocalModule; + +import Stdlib.Prelude open; + +module A; + + module B; + x : Nat := 1; + end; + +end; diff --git a/tests/Compilation/positive/test074/Package.juvix b/tests/Compilation/positive/test074/Package.juvix new file mode 100644 index 0000000000..d43d8425c9 --- /dev/null +++ b/tests/Compilation/positive/test074/Package.juvix @@ -0,0 +1,5 @@ +module Package; + +import PackageDescription.V2 open; + +package : Package := defaultPackage {name := "test074"}; diff --git a/tests/Compilation/positive/test074/test074.juvix b/tests/Compilation/positive/test074/test074.juvix new file mode 100644 index 0000000000..89971ab37b --- /dev/null +++ b/tests/Compilation/positive/test074/test074.juvix @@ -0,0 +1,6 @@ +module test074; + +import Stdlib.Prelude open; +import ImportNestedLocalModule open; + +main : Nat := ImportNestedLocalModule.A.B.x; From 52139f0e2acaed68dc29a77e2f7339e607df72d6 Mon Sep 17 00:00:00 2001 From: Paul Cadman Date: Fri, 16 Feb 2024 12:08:31 +0000 Subject: [PATCH 2/3] Transitively register local modules in ScoperState --- .../Translation/FromParsed/Analysis/Scoping.hs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Juvix/Compiler/Concrete/Translation/FromParsed/Analysis/Scoping.hs b/src/Juvix/Compiler/Concrete/Translation/FromParsed/Analysis/Scoping.hs index 873f6fec0b..6cfb2b864a 100644 --- a/src/Juvix/Compiler/Concrete/Translation/FromParsed/Analysis/Scoping.hs +++ b/src/Juvix/Compiler/Concrete/Translation/FromParsed/Analysis/Scoping.hs @@ -405,7 +405,6 @@ checkImport import_@Import {..} = do smodule <- readScopeModule import_ let sname :: S.TopModulePath = smodule ^. scopedModulePath sname' :: S.Name = set S.nameConcrete (topModulePathToName _importModulePath) sname - mid = sname ^. S.nameId cmodule = set scopedModuleName sname' smodule importName :: S.TopModulePath = set S.nameConcrete _importModulePath sname synonymName :: Maybe S.TopModulePath = do @@ -418,9 +417,7 @@ checkImport import_@Import {..} = do addModuleToScope cmodule registerName importName whenJust synonymName registerName - modify (over scoperModules (HashMap.insert mid cmodule)) - -- TODO: this needs to be transitive - modify (over scoperModules (HashMap.union (cmodule ^. scopedModuleLocalModules))) + registerScoperModules cmodule importOpen' <- mapM (checkImportOpenParams cmodule) _importOpen return Import @@ -437,6 +434,11 @@ checkImport import_@Import {..} = do singTbl = HashMap.singleton uid smod modify (over (scopeTopModules . at mpath) (Just . maybe singTbl (HashMap.insert uid smod))) + registerScoperModules :: ScopedModule -> Sem r () + registerScoperModules m = do + modify (over scoperModules (HashMap.insert (m ^. scopedModulePath . S.nameId) m)) + forM_ (m ^. scopedModuleLocalModules) registerScoperModules + getTopModulePath :: Module 'Parsed 'ModuleTop -> S.AbsModulePath getTopModulePath Module {..} = S.AbsModulePath From 3760d58679776340967fc2252008ff8d6106e559 Mon Sep 17 00:00:00 2001 From: Paul Cadman Date: Fri, 16 Feb 2024 12:41:32 +0000 Subject: [PATCH 3/3] Make import nested local module a scoper test --- test/Compilation/Positive.hs | 7 +------ test/Scope/Positive.hs | 6 +++++- tests/Compilation/positive/out/test074.out | 1 - tests/Compilation/positive/test074/test074.juvix | 6 ------ .../ImportNestedLocalModule/ImportNestedLocalModule.juvix | 6 ++++++ .../ImportNestedLocalModule/ImportedModule.juvix} | 2 +- .../ImportNestedLocalModule}/Package.juvix | 0 7 files changed, 13 insertions(+), 15 deletions(-) delete mode 100644 tests/Compilation/positive/out/test074.out delete mode 100644 tests/Compilation/positive/test074/test074.juvix create mode 100644 tests/positive/ImportNestedLocalModule/ImportNestedLocalModule.juvix rename tests/{Compilation/positive/test074/ImportNestedLocalModule.juvix => positive/ImportNestedLocalModule/ImportedModule.juvix} (72%) rename tests/{Compilation/positive/test074 => positive/ImportNestedLocalModule}/Package.juvix (100%) diff --git a/test/Compilation/Positive.hs b/test/Compilation/Positive.hs index 27a752b68f..cc7c4ff7c1 100644 --- a/test/Compilation/Positive.hs +++ b/test/Compilation/Positive.hs @@ -440,10 +440,5 @@ tests = "Test073: Import and use a syntax alias" $(mkRelDir "test073") $(mkRelFile "test073.juvix") - $(mkRelFile "out/test073.out"), - posTest - "Test074: Import nested local module" - $(mkRelDir "test074") - $(mkRelFile "test074.juvix") - $(mkRelFile "out/test074.out") + $(mkRelFile "out/test073.out") ] diff --git a/test/Scope/Positive.hs b/test/Scope/Positive.hs index f93ed26c05..c0c5d55262 100644 --- a/test/Scope/Positive.hs +++ b/test/Scope/Positive.hs @@ -233,5 +233,9 @@ tests = "Package file" $(mkRelDir "package") $(mkRelFile "Package.juvix") - PackagePathResolver + PackagePathResolver, + posTest + "Import nested local module" + $(mkRelDir "ImportNestedLocalModule") + $(mkRelFile "ImportNestedLocalModule.juvix") ] diff --git a/tests/Compilation/positive/out/test074.out b/tests/Compilation/positive/out/test074.out deleted file mode 100644 index d00491fd7e..0000000000 --- a/tests/Compilation/positive/out/test074.out +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/tests/Compilation/positive/test074/test074.juvix b/tests/Compilation/positive/test074/test074.juvix deleted file mode 100644 index 89971ab37b..0000000000 --- a/tests/Compilation/positive/test074/test074.juvix +++ /dev/null @@ -1,6 +0,0 @@ -module test074; - -import Stdlib.Prelude open; -import ImportNestedLocalModule open; - -main : Nat := ImportNestedLocalModule.A.B.x; diff --git a/tests/positive/ImportNestedLocalModule/ImportNestedLocalModule.juvix b/tests/positive/ImportNestedLocalModule/ImportNestedLocalModule.juvix new file mode 100644 index 0000000000..54809c7f75 --- /dev/null +++ b/tests/positive/ImportNestedLocalModule/ImportNestedLocalModule.juvix @@ -0,0 +1,6 @@ +module ImportNestedLocalModule; + +import Stdlib.Prelude open; +import ImportedModule open; + +main : Nat := ImportedModule.A.B.x; diff --git a/tests/Compilation/positive/test074/ImportNestedLocalModule.juvix b/tests/positive/ImportNestedLocalModule/ImportedModule.juvix similarity index 72% rename from tests/Compilation/positive/test074/ImportNestedLocalModule.juvix rename to tests/positive/ImportNestedLocalModule/ImportedModule.juvix index 771c9f9ca7..ba8f77a3c0 100644 --- a/tests/Compilation/positive/test074/ImportNestedLocalModule.juvix +++ b/tests/positive/ImportNestedLocalModule/ImportedModule.juvix @@ -1,4 +1,4 @@ -module ImportNestedLocalModule; +module ImportedModule; import Stdlib.Prelude open; diff --git a/tests/Compilation/positive/test074/Package.juvix b/tests/positive/ImportNestedLocalModule/Package.juvix similarity index 100% rename from tests/Compilation/positive/test074/Package.juvix rename to tests/positive/ImportNestedLocalModule/Package.juvix