* Fixed a bug where UHT folders belonging to modules referenced through public includes which recursively referenced more modules with public include dependencies. Code was not recursively traversing public include dependencies.
[FYI] joe.kirchoff
[CL 33152725 by henrik karlsson in ue5-main branch]
Allow a plugin descriptor to remove the localization target field from a .uplugin file if all localization targets have been removed from a plugin descriptor.
#rb: Vincent.Gauthier
#jira: UE-194877
#rnx
[CL 32870464 by leon huang in ue5-main branch]
#rb Russell.Johnston Tim.Smith
This patch implements deep mutability in the new VM. To do this, I implemented the following:
- Renamed IndexSet to CallSet for name parity with call.
- Made it so we can freeze and melt structs. This wasn't implemented before. To melt a struct, we create a new emergent type where all fields live in the object itself. The melted struct will use this emergent type. We also cache this resulting emergent type on the source emergent type so that freezing all structs with emergent type E1 always produce and object with emergent type E2.
- Emit freeze/melt inside the bytecode generator at the right times. This patch emits freeze/melt unoptimally. We'll need to do FoX in the future to get better perf.
- We pattern match against the AST to match the section of AST that corresponds to a successive list of accesses that are all part of the same deep mutation. We use this to drive codegen for deep mutability.
- Refactor our intrinsics so the code for `set ... = ` can be shared with things like `set ... +=`.
[CL 32869234 by saam barati in ue5-main branch]
- Removes VUTF8String and replaces its usage with VArray's of Char8's.
- Reworks VUniqueString to derive from VArray
- Re-enables majority of string related verse-tests for VM
Minor:
- Updated some ToStringImpl for VFalse and VFunction
#okforversepublic
#rb saam.barati, Tim.Smith
#rb tim.smith
[CL 32803034 by jared cotton in ue5-main branch]
Defer blocks run for one of several reasons: normal block exit, exit via break or return, or (not yet implemented) task cancellation. To accommodate this, defer bytecode accepts a jump target index and switches on it after running. This index is stored in a register allocated for the defer block, which is sufficient because defers are not re-entrant. The register and switch are elided when the block runs only on the normal exit path.
The switch instruction has a variadic label operand. To simplify label fixup, all variadic operands are moved from `TArray` fields in the instructions to a shared trailing array in `VProcedure`. (Variadic operands to suspension captures remain `TArray`s.)
Early exit may cross several defer blocks on the way to its eventual jump target. Each defer block wraps these jump targets in a thunk, which passes the index for the wrapped target to the defer block. Exit control flow thus executes a chain of these thunks, ending with the actual exit jump when it reaches the appropriate scope.
#rb Markus.Breyer, Tim.Smith
[CL 32670628 by russell johnston in ue5-main branch]