[wasm][debugger] Add support for invoking getters on ValueTypes (#40548)
* [wasm][debugger][tests] Fix negative pointer tests
* [wasm][debugger][tests] Fix test to correctly check the valuetype local
test: `CheckUpdatedValueTypeFieldsOnResume`
* [wasm][debugger][tests] Make value checks consistent
- In some places we weren't checking for the `description` property
- and this hid a bug where sometimes that property wasn't added (eg. for
numbers)
- Instead, we were working around that by "fixing it up" later
- Now, we use the same checks for `Check{Number,String,*}` API, and the
`CheckValue/CheckProps` API used with `TNumber` etc.
- So, this commit:
- fixes the checks, and the tests
- and fixes the bug
* [wasm][debugger] Add new `id` types, which have associated properties
- these are of the form `dotnet:${scheme}:{id-args-object}`
- Examples:
- `dotnet:valuetype:{ containerId: 4 }`
- `dotnet:valuetype:{ num: 2 }` - the `num` field is
autogenerated if no id-args are provided. This gets used when
valuetypes are expanded.
- `this._id_table [id-string]` has associated property objects for every
`id`
- This might contain, for example, `klass` pointer, and base64
representation of a valuetype
* [wasm][debugger] Update valuetype code to use the new `id`s
* [wasm][debugger] Simplify array API in `mini-wasm-debugger.c`
.. to use a single function to get details of the full array, and
individual elements.
* [wasm][debugger] library_mono.js: improvements to valuetype code
- Allow `_new_id` to update properties for existing objectIds
- Extract valuetype id assigment code to a separate function
* [wasm][debugger] mini-wasm-debugger.c- extract object id lookup into a function
* [wasm][debugger][tests] Rename method param to be self descriptive
* [wasm][debugger][tests] Rework cfo test for getters
- add some new getters to the test classes
- this will become useful in subsequent commits that add support for
invoking getters on valuetypes
* [wasm][debugger][tests] Improve valuetype locals/method args tests
- this also becomes useful in subsequent commits which enable invoking
getters on valuetypes
* [wasm][debugger] Add support for invoking getters on valuetypes
- keep a copy of the value bytes, and the klass pointer
- this allows being able to invoke getters on such a valuetype, at a
later point
- This allows getters like `DateTime.Date`, which has the type
`DateTime`
* [wasm][debugger] mono.js: fix warnings
.. and replace `var` with `let`, or `const`, where appropriate.
* [wasm][debugger] mono.js: _split_object_id -> _parse_object_id
* [wasm][debugger] Streamline accessing exported debugger.c functions
.. especially the ones that return data in `MONO.var_info`.
To use:
1. `this._register_c_var_fn ('mono_wasm_get_object_properties', 'bool', [ 'number', 'bool' ]);`
2. Now, this function can be called as `this.mono_wasm_get_object_properties_info (.. )`
- returns `res` which has the contents of `MONO.var_info`, after running
`_fixup_name_value_objects` on it.
* [wasm][debugger] Return errors from debugger.c's details functions
- functions like those for getting object/vt properties, can fail, for
example, if the objectId is invalid.
- We now return that bool result, and that gets surfaced to the caller
- This will also help to differentiate the case where the result of such
a function was a failure vs just an empty result
* [wasm][debugger] Small checks on inputs, and some negative tests
- These tests don't actually depend on the error message, and we don't
have another to way to differentiate why a command might have failed
with an exception. So, right now, they will pass as long as the commands
fail as expected.
- Future TODO: return `error`, instead of exception details for issues
in `mono.js`, like incorrect input, invalid id etc, and update these
tests accordingly.
* Update src/mono/mono/mini/mini-wasm-debugger.c
Co-authored-by: Larry Ewing <lewing@microsoft.com>
* Remove description checking from TString
Co-authored-by: Larry Ewing <lewing@microsoft.com>