Releases: ferus-web/bali
0.4.2
This is a new release with several breaking changes, with 38 commits in total.
Engine Additions
- The engine now has support for multiple instances of a type that are created via the constructor syntax.
- Alongside this, a new way to define a function for a type's prototype has been added via
definePrototypeFn
.
- Implemented some of the
String
prototype functions
String.prototype.toLowerCase
String.prototype.toUpperCase
String.prototype.indexOf
String.prototype.trimLeft
String.prototype.trimRight
console
is a standalone type now, instead of a name-mangling hack. This means that all engine components now use the new type interface.- Calls are parsed as field accesses whenever necessary. This means that the bytecode interface
consoledotlog
is now justlog
, which takes in theconsole
type as an argument alongside the rest of the arguments.
Bug Fixes
- String trim implementation was wrongly written, resulting in right-facing whitespace not being trimmed (#58)
- Scope hashing would result in an infinite recursion if two scopes were linked
- The runner would incorrectly output unrelated errors to stderr, which'd result in expected errors being treated as unexpected, giving us a lower score on test262.fyi
REPL Changes
- Added the
.express
command. You must provide an integer argument to it and it will pretty-print the atom at the address, if it exists.
Dependencies
- Bumped Mirage from 1.0.42 to 1.0.43
- Added Kaleidoscope: a library providing SIMD accelerated routines for strings (as you might have guessed, it is related to the above additions :^) )
Breaking Changes
- The command for running a file with Balde is just
balde <file>
now. - Old, cached compressed-bytecode is incompatible with this new release. There's unfortunately no invalidation mechanism for different bytecode versions right now, so you're advised to remove the
~/.cache/mirage
directory entirely in order to prevent weird bugs.
0.4.13
This is a minor release and lays down some scaffolding for the next few versions.
Additions
- Implemented
encodeURI
- Implemented string padding implementations used internally
- We now have CI builds per push, which automatically runs the test262 runner, our internal tests and generates a build artifact
- Added
Date
as an experimental feature. To enable it in Balde, use--enable-experiment:date-routines
. Currently, onlyDate.now()
is supported. - Added field-write helper for Nim primitives, which makes wrapping objects between the Nim <-> JS layer much more convenient.
Fixes
- Fixed reassignment parsing algorithm (#54, #55)
-d:baliUseStdBase64
no longer tries importingsimdutf
- We now return the index address to
undefined
when an identifier can not be found viaindex()
- The engine now uses the
Runtime
abstraction instead of directly requesting for a mutable reference to the Pulsar VM whenever possible
0.4.13-alpha2
Please do not use this release, it is not meant for production as it isn't as thoroughly tested!
Fixes
- Undefined identifiers now return
undefined
correctly
Additions
encodeURI
implementation
0.4.13-alpha1
This is an unstable release and is not suitable for production!
It brings major changes, some of which are breaking.
Bali is now at 4.6K LoC!
Additions
- Added field-write helper for Nim primitives.
- Began work on JavaScript Date API.
- This is currently hidden by an experiment. To use it, pass
--enable-experiment:date-routines
to Balde.
- This is currently hidden by an experiment. To use it, pass
Fixes
- Fixed numerical tokenization algorithm. This breaks the REPL in some cases, it'll be fixed soon.
- Fixed declaration parsing algorithm for more syntax flexibility.
- Balde no longer enables REPL mode in script-runner mode.
Full Changelog: 0.4.1...0.4.13-alpha1
0.4.1
This release builds on top of Bali 0.4.0 and brings a REPL environment to test JavaScript in.
Changes
- Bali no longer has a dependency on
climate
, it uses its own argument parser based off ofstd/parseopt
, derived from the Lucem project. - Added the
--dump-bytecode
flag to dump the generated bytecode and exit. - Added a REPL to evaluate JavaScript inside of. It is powered by the noise library.
Breaking Changes
There are no breaking changes this release.
0.4.0
This is a new Bali release, and as usual, brings new features and improvements.
Bug Fixes
- Fixed a bug where JavaScript code could call internal Bali APIs, which'd make fingerprinting the runtime very trivial.
- Initializing a mutable array would result in the address index pointing to its last element instead of the container itself (#45)
- Fixed decrement parsing, yet again
- Improved loop elision algorithm (#46)
- Value capture would result in invalid codegen (#44)
ToNumber
now handles floats correctly instead of reaching the unreachable branch
Dependencies
- Bali now uses Sanchar 2.0.2, which brings improvements to the URL parser
New Features
- Added array indexing. You can now access elements of an array. If you do an out-of-bounds read,
undefined
will be returned.
Breaking Changes
There should be no breaking changes in this release. You can safely upgrade to it.
0.3.83
This release brings some improvements and loop elision optimizations.
Fixes
- Fixes #43 (Loop generates unnecessary code)
- Removed some dead code
- Stray atoms are marked as "wasted" instead of raising syntax errors
Full Changelog: 0.3.82...0.3.83
0.3.82
This is another minor release. It brings support for arrays into Bali.
Improvements
- Removed dead code from parser
- We now use Mirage 1.0.41, bringing a single bugfix for sequence atoms.
- The parser can now parse arrays, including nested ones.
- Improved codegen for loading atoms
- Removed Herobrine
Additions
- Arrays are now implemented
0.3.81
This is a very minor release building on top of the 0.3.8 series. If you want to check the full changelog, it's here.
Fixes
- Booleans are now treated as atoms, meaning this is valid syntax now:
while (true) { }
instead of
while (true == true) { }
- Removed Herobrine
Additions
- There is now a variant of
ret
that accepts all Nim primitives that can be converted into atoms by thewrap
function. - Added support for
typeof
.
0.3.8
As always, this release brings tons of new things.
Fixes
- Type fields are now initialized with their default values instead of
undefined
- The parser can now parse nested field accesses (eg.
x.y.z
) - Commas are now treated like semicolons when found outside of a known parsing context
- Fixed deadlock in tokenizer when encountering decrements (
--
) - Numbers can now be part of identifiers (eg.
player2
)
Additions
- Improved type member field resolution algorithm to account for nested field access
- Add support for
break
keyword, allowing for proper control flow. - The Test262 runner has been given a makeover and is a lot more informative now.
- The
Math
object now has all of the constant fields the spec expects (PI
,E
,SQRT1_2
,SQRT2
, etc.)
Breaking Changes
There are no breaking changes and this version of Bali is fully backwards compatible.