Suggestion : Assign 'this' to slot 0 only if the current context is a class, not the global scope #1202
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.
This pull request is a suggestion to improve compiler internal safety and clarity.
It addresses an issue where the compiler assigns the local variable
"this"to slot 0 even when compiling non-method functions. This behavior causesthisto behave like a valid local variable outside of class methods, which is unintended and can hide runtime errors.What was wrong?
The compiler code did not check whether the current function was inside a class (
currentClass != NULL) before assigning"this"to slot 0. As a result, even functions that are not methods received"this"as a local variable.What is fixed?
Added a check to ensure
"this"is only assigned to slot 0 when compiling class methods.This prevents
thisfrom being a local variable outside of methods, allowing the runtime to properly catch errors whenthisis misused.Additional notes
This fix improves the safety and correctness of
thishandling in Lox.Existing tests pass; additional test cases for
thisusage outside of classes can be added if desired.Closes #1203