Fix mismatched external parser with binary exports #93166
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 was caused by the
reload
method that was recreating a new parser for a base class even if the source was the same. The hash used was not based on the binary tokens but always on the text source. That’s why the problem was only on binary exports.I adjusted to calculate the hash on binary tokens when present. I was wondering if we should skip this hash calculation and this check for binary exports since it’s probably not possible to change the binary at runtime?
Having 2 instances of the same parser/class was causing problem in
has_class
because the comparison is done on pointers only.Example of the problem:
To reproduce the problem, I used the MRP from #92021 (https://github.com/godotengine/godot/files/15337905/reprobug.zip)
I exported the pck.
And I ran godot in debug with --main-pack test.pck
There is the test.pck I used if you want to test it without having to reexport the project:
test.pck.zip