Fix #354 by not exporting extern resources #379
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The problem underlying the error
observed by @phischu in #354 was that extern resources have been "exported" in the separate-compilation-based Javascript backends. That is, JS code like
was generated, but extern resources don't have a term-level representation so the right-hand side of
my_resource_1396
was unbound.Solution Attempt
First attempt to solve #354 the problem was
However, after
core
we should not match on symbols anymore; so this is not a good solution, since it is not stable under renaming.In particular, we currently do not include extern resources in the core representation:
effekt/effekt/shared/src/main/scala/effekt/core/Transformer.scala
Lines 111 to 112 in 3aa78e8
Same holds for
ExternType
,ExternResource
,ExternInterface
Chosen Solution
Instead, now I do not use
module.exports
on the symbol, anymore. We should try to avoid this after going tocore
, anyways.This also helped simplifying the separate compilation aspect of JS a bit (3c26361) since now we do not need to filter twice. I am a little bit afraid that this might introduce a regression, but checked that the tests actually caught this before performing the refactoring.