This adds a debug server to `goalc` that sends JSON over the socket to
communicate with an external debugger using the Debug Adapter Protocol.
This lets us debug GOAL code in a proper debugger with breakpoints, step
over, step in and step out per line, stack frames and supports watches
for global symbols, registers and local variables (local variables only
work within the most recent stack frame). Special registers (`r13`,
`r14`, `r15`, argument registers, etc.) are tracked separately and the
current process register even displays the type of the current `pp` if
possible.
Watches that track addresses holding a reference type generate a list of
field names according to the object's type. All fields will show their
name, type and value and, depending on the type, will try to infer extra
info like symbol names/values, function names for `function` fields,
enum values and more. This also works nested, so any field that is also
a reference type can also be accessed and display its fields, etc.
Dynamic arrays are also supported where possible, e.g. in
`inline-array-class` children and boxed arrays, it will figure out the
value of the `length` field and access the memory up to that point so
all the elements can be accessed and viewed from the `data` field.
Our VS Code extension implements the DAP in
open-goal/opengoal-vscode#375.
Using it is as simple as connecting a REPL to a running game instance
with `(lt)`, compiling with `(mi)` and, with the extension installed,
pressing F5 in VS Code to start the debugger. By default, it will try to
connect to the game that the active `.gc` file is from, the socket port
is different per game (8128 for Jak 1, 8129 for Jak 2, 8130 for Jak 3).
The `launch.json` was updated with two entries for this, the second
entry lets you pick the game/port manually if desired.
~~Not tested on Windows.~~ Only supports x86 for now.
This updates `fmt` to the latest version and moves to just being a copy
of their repo to make updating easier (no editing their cmake / figuring
out which files to minimally include).
The motivation for this is now that we switched to C++ 20, there were a
ton of deprecated function usages that is going away in future compiler
versions. This gets rid of all those warnings.
* lsp: json-rpc example is working, a decent place to start...
* lsp: vendor library
* lsp: cleanup and time to get started
* lsp: commit what i got so far
* lsp: example `initialize` payload
* lsp: switch to `stdio`
* stash
* modularize the lsp implementation
* lsp: implement first actual LSP feature - function names in outline
* lsp: produce document diagnostics
* lsp: remove unused third-party lib
* lsp: support hovering MIPS instructions in IR files
* lsp: basic go-to all-types definition
* stash
* lsp: cleanup code, just need to add it to the release artifacts
* fix some project configuration
* fix linux build
* lsp: add lsp to PR artifacts and release assets
* lsp: address feedback
* decomp: finish `sidekick`
* decomp: got a lot of `target` done
* decompiler: Add support for non power of 2 offsets for inline arr access
* decomp: finish `target` mostly
* decomp: finish `water`
* decomp: finished `robotboss-weapon`
* decomp: finish `robotboss-misc`
* decomp: finish the majority of `robotboss`
* blocked: `racer` has an issue around entering a state
* blocked: `target-racer` done mostly, but NYI case in one function
* blocked: `racer-states` mostly finished, but bitfield issue
* blocked: `billy` on state decomping
* blocked: `bully` on state decomping
* waiting: `rolling-lightning-mole` waiting on navigate for 2 funcs
* blocked: `rolling-robber` finished but `s6-1` issue
* blocked: `ogreboss` uint64's for types cant label load em!
* blocked: `mother-spider` state decompilation
* half-done `target-flut`
* blocked: `target-flut` some sort of new bitfield state
* some improvements in `racer-states` with my new-found knowledge
* progress: started on `target-death`
* blocked: `target-death` handle casts
* decomp: finish `collide-reaction-racer`
* blocked: `target-handler` handler forced to return `none`
* decomp: 99% of `target2` finished
* decomp: finish `target2`
* gsrc: update
* update post merge
* address feedback
* scripts: add script to detect decomp issues
* fix wide-spread `collide-shape` method missing arg
* some small things i changed from master
* address feedback
* fix typeconsistency issue
* set up types
* cleaned up type analysis and got things working through atomic ops
* expression working, need types
* improved types and names
* getting close
* finish up dma-disasm
* fix
* fix warnings in repl lib and add macros to autocomplete
* fix crash on ctrl-c, build runtime as static lib and make goos prompt look fancier
* some tweaks for linux build