Bugfix : Resolving module aliasing for nested modules
Motivation and Context
The current implementation of aggregation use module aliases' resolution before removing the module in order to avoid duplicating effectful declaration. However the current naive implementation was incomplete and didn't resolved aliases correctly when dealing with nested modules.
module A = struct
module B = struct
let nested : int = 0
end
module Bx = B
end
let main (action, store : int * int) : operation list * int =
[], A.Bx.nested
Here the algorithem resolved A.Bx.nested in B.nested instead of A.B.nested as if B was declared at the top-level leading to not being able to compile.
The issues was related to not storing path for modules correctly in Aliases.t which was first solved but lead to further bug in
module A = struct
module B = struct
let nested : int = 0
end
module Bx = B
let toto = Bx.nested
end
The aliasing of Bx.nested was resolved as A.B.nested instead of B.nested which was leading to many of your current test failing, while they were passing before (the resolution was correct before because the module path of Bx was wrongly recorded as [B]).
This was solve by applying a "path difference" in module_accessor between the current path "[A]" and the stored path "[B;A]"
A "nested_modules.mligo" have been added in the test which should cover most scenario, and should be extended if we find new ones.
Description
Fix some bug when compiling nested modules and nested module access
Types of changes
-
Bug fix (non-breaking change which fixes an issue) -
New feature (non-breaking change which adds functionality) -
Breaking change (fix or feature that would cause existing functionality to not work as expected) -
Performance improvement (non-breaking change that improves performance) -
None (change with no changelog)
Changelog
Checklist:
-
Changes follow the existing coding style (use dune @fmtto check). -
Tests for the changes have been added (for bug fixes / feature). -
Documentation has been updated. -
Changelog description has been added (if appropriate). -
Examples in changed behaviour have been added to the changelog (for breaking change / feature).