I renamed the current `IndexKind` enum to `PropertyAccessKind` purely
based off of the fact that somewhere in the byond ref both procs and
vars are referred to as a datum's "properties" and I had no better name
ideas.
The checker treats conditional list accesses exactly the same as normal
ones. I was going to add some linting stuff for them but their expected
behaviour is completely up in the air at the moment.
I noticed that this was different from BYOND's behaviour where
`new x[y]` actually compiles as `(new x)[y]`. The same behaviour
applies for `new x?[y]` so I don't anticipate the code I am removing
being needed for that.
I confirmed that BYOND has been compiling it this way since at least
513.1490, so if it changed it was long ago.
[SpaceManiac] As far as I can tell, there was no BYOND change and this
code was wrong all along.
This only becomes a problem when stuff we haven't got control over
decides to output to stdin or stderr.
vgstation-coders/vgstation13#28789 shows (in the most recent responses)
that they're using an internet explorer plugin which outputs some debug
info to stderr and terminates it with some invalid utf-8 or something.
I don't think the details on that side are too important, we just need
to fix the next part: This makes the language server's pipe_output
close the stream which then makes auxtools panic when it tries writing
to said stream (because eprintln!() will panic in such a case.)
Auxtools could handle this better, but there's no reason for the
debugger to just stop piping output because it sees some wacky bytes.
Allows for `rgb()` with arguments of form
`[r,g,b|h,s,[v|l|y]],(a),(space)`
Also allows the full names of the arguments. Technically, BYOND
supports just the first letter so `halifax` works for `hue` but fuck
that.
Also now lints to see if the values are in the valid ranges.
Co-authored-by: Tad Hardesty <tad@platymuus.com>
It is much faster now, way less terrible blitting code.
---
SpaceManiac's benchmarks indicate about 9% speedup when rendering MetaStation with `--release` on.
Don't know if you want to put this based on a 514 branch or something,
for full support. Here's the bulk of the work done for the builtins
though.
- gradient()
- animate(space) // weird form
- rgb(space) // weird form
- rgb2num()
- filter(type="bloom")
- load_resource()
- splicetext()
- list.Splice()
- time2text()
- world.timezone
- client.timezone
- ||=
- &&=
- world.movement_mode + enums
- := walrus/assign-into/expression assign
- world.map_cpu
- particles/
- generator/
- embedded winget syntax // don't think we need to add anything
- mouse actions // don't think we need to add anything
note: uncovered http://www.byond.com/forum/post/2652280
Tested the produced executable:

This requires an update to
https://github.com/willox/auxtools/releases/tag/debug-v1.0.0.
Basically, this'll let me add new debug console commands without having
to touch SpacemanDMM. I'm gonna be adding some as I push my way through
some DM bytecode related stuff so this'll save me a bunch of effort.
There's no new functionality here, it's still only `#help` and `#dis`.
The DLL is starting to get a bit big (it's still much smaller than a
tiny example implementing maptick which for some reason comes out at
2.5MB) so I'll try to get them smaller before making any new releases.
This fulfils some auxtool debugger requests you had.
1) All connection modes except for `BACKGROUND` wait for the DAP client
to be configured before continuing.
2) stddef.dm contents are sent to the debug client
3) disassemble eval command works (with the added benefit of being able
to disassemble procs that aren't currently running)
The updated auxtools also does some other stuff you wanted:
1) src/usr moved to arguments
2) your PR https://github.com/willox/auxtools/pull/11
3) arguments with no formal parameter in a proc that is being debugged
should show up