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.
Bug #86 exposes a bug in Flee where nested long branches are not handled.
When generating nested expressions, a "temp" generator is used. This is done to determine where the branches are and how long they should be, but nested expressions don't adjust for long branches when the generator is in temp mode, since the isTemp flag forces short branches even when it compiles twice.
When in temp compiling mode, the actual branches don't matter on the nested code, just the final offet, so instead of compiling twice to adjust for long branches, the nested expressions only need to add a few NOPs so that the proper offsets can be found by the calling frame of reference. Thus ComputeBranches now emits NOP to make the generated code the proper size.
A more elegant solution may be to have a single BranchManager for the entire expression, shared by all nested conditionals/IN/AndOr/etc. In that case, the entire expression would only be compiled twice, rather than multiple times. However, the ComputeBranches method would need to be changed as it also doesn't handle nested branches properly (at a minimum, needs to start with last branch and move backward)