Fixes #37. Lookup Constants in both static and instance scopes. #38
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.
References to Constants can be done from both static and instance scopes. Until now, the lookup was always naively being performed on the
current_scope
, which could be either static or instance, but both would not be checked.This led to the bug described in #37, where the
current_scope
was the scope of an instance, while the constant was defined on the static scope ofcurrent_self
. In this case, the constant should have been resolved, but wasn't because only the instance scope was being checked.An example of this behavior is
An interesting observation is that if
Bar
was defined outside ofFoo
, this bug would not occur, because both static and instance scopes have their parent set to the lexical scope they are defined in, and in that caseBar
would have been defined in that lexical scope. In this case, however,Bar
is defined on the static scope ofFoo
.This behavior of lexical scoping might change in the future, where instance scopes won't see their lexical scope, but shouldn't cause issues beyond this.