Dirk
ddv.tools
Dirk
@ddv.tools
Backends & tooling. Working on a JS runtime, Maligator, for learning purposes.
GH: @dirkdev98
Also started to work on static-semantics. With this we should get a good idea of variable scopes, if they are captured by closures and more, so we can hand over this information to the engine.

For now, we collect the different scopes and the initialization of variables and parameters.
February 16, 2026 at 7:02 AM
With support for for-loops, `new String()` and various new prototype methods, our Test262 number just went up to 4166.
February 16, 2026 at 7:02 AM
And finally, a Test262 runner! We skip like ~40% of the tests and only pass ~5%. But the number goes up, so that's great!
February 8, 2026 at 9:37 PM
And the combination of try-catch, Array#map and Function#bind brings the following.

With a TIL: Array#map works on many object-likes that have the `{ length }` property. Note that the callback is only called here if the element of an index exists as well. Otherwise, use `Array.from({ length })`.
February 8, 2026 at 9:37 PM
The switch-implementation is not fully complete yet. We don't evaluate any `case` blocks after the default-case yet.

Making this post revealed a bug in CompletionRecord-handling. The `break;` value is returned from the script instead of the final statement. Got that fixed now as well.
February 8, 2026 at 9:37 PM
Some more has gone in to Maligator, my JS runtime implemented in TypeScript.
I've started with the real basic intrinsics and finally a way to create JS objects. Combine that with member expressions and we have `[object Object]`.
January 18, 2026 at 2:19 PM
And with a final push of adding TODO's everywhere, we got function declarations and calling working 🤓
January 12, 2026 at 9:21 PM
Builtin function calls landed in Maligator! Now supporting calling isFinite, isNaN, parseInt and parseFloat :)
January 11, 2026 at 7:03 PM
With if-statements and (do-)while-loops supported in Maligator, it all starts to get some shape.
January 10, 2026 at 8:39 AM
Chipped away at a few more things, so updating variables is supported as well. As well as some relational expressions. Next up are the if-, while-, etc-statements.
January 8, 2026 at 7:19 AM
Got basic variables going! Skipped the static semantics for now, which suggest to initialize all new variable bindings before executing a block.
Also an interesting thing in the spec is that `undefined` and a few others are properties on `global`. So only now can `undefined` actually be resolved.
January 5, 2026 at 7:16 PM
Figured it was time to get code running, so dove straight in to environment records, realms and execution context. For parsing, we just use Meriyah for now.
So with all that prep work, implementing binary expressions (1 + "foo") was really straight-forward.
January 5, 2026 at 7:04 AM