Skip to content

Latest commit

 

History

History
1013 lines (915 loc) · 60.5 KB

CHANGELOG.md

File metadata and controls

1013 lines (915 loc) · 60.5 KB

CHANGELOG

Feature Enhancements:

  • FEATURE #1526: Implement ComputedPropertyName for accessor properties in ObjectLiteral (@raskad)
  • FEATURE #1365: Implement splice method (@neeldug)
  • FEATURE #1364: Implement spread for objects (@FrancisMurillo)
  • FEATURE #1525: Implement Object.preventExtensions() and Object.isExtensible() (@HalidOdat)
  • FEATURE #1508: Implement Object.values() (@HalidOdat)
  • FEATURE #1332: Implement Array.prototype.sort (@jedel1043)
  • FEATURE #1417: Implement Object.keys and Object.entries (@skyne98)
  • FEATURE #1406: Implement destructuring assignments (@raskad)
  • FEATURE #1469: Implement String.prototype.replaceAll (@raskad)
  • FEATURE #1442: Implement closure functions (@HalidOdat)
  • FEATURE #1390: Implement RegExp named capture groups (@raskad)
  • FEATURE #1424: Implement Symbol.for and Symbol.keyFor (@HalidOdat)
  • FEATURE #1375: Implement at method for string (@neeldug)
  • FEATURE #1369: Implement normalize method (@neeldug)
  • FEATURE #1334: Implement Array.prototype.copyWithin (@jedel1043)
  • FEATURE #1326: Implement get RegExp[@@species] (@raskad)
  • FEATURE #1314: Implement RegExp.prototype [ @@search ] ( string ) (@raskad)
  • FEATURE #1451: Feature prelude module (@HalidOdat)
  • FEATURE #1523: Allow moving NativeObject variables into closures as external captures (@jedel1043)

Bug Fixes:

  • BUG #1521: Added "js" feature for getrandom for WebAssembly builds (@Razican)
  • BUG #1528: Always return undefined from functions that do not return (@raskad)
  • BUG #1518: Moving a JsObject inside a closure caused a panic (@jedel1043)
  • BUG #1502: Adjust EnumerableOwnPropertyNames to use all String type property keys (@raskad)
  • BUG #1415: Fix panic on bigint size (@neeldug)
  • BUG #1477: Properly handle NaN in new Date() (@raskad)
  • BUG #1449: Make Array.prototype methods spec compliant (@HalidOdat)
  • BUG #1353: Make Array.prototype.concat spec compliant (@neeldug)
  • BUG #1384: bitwise not operation (spec improvements) (@neeldug)
  • BUG #1374: Match and regexp construct fixes (@neeldug)
  • BUG #1366: Use lock for map iteration (@joshwd36)
  • BUG #1360: Adjust a comment to be next to the correct module (@teymour-aldridge)
  • BUG #1349: Fixes Array.protoype.includes (@neeldug)
  • BUG #1348: Fixes unshift maximum size (@neeldug)
  • BUG #1339: Scripts should not be considered in a block (@macmv)
  • BUG #1312: Fix display for nodes (@macmv)
  • BUG #1347: Fix stringpad abstract operation (@neeldug)
  • BUG #1584: Refactor the Math builtin object (spec compliant) (@jedel1043)
  • BUG #1535: Refactor JSON.parse (@raskad)
  • BUG #1572: Refactor builtin Map intrinsics to follow more closely the spec (@jedel1043)
  • BUG #1445: improve map conformance without losing perf (@neeldug)
  • BUG #1488: Date refactor (@raskad)
  • BUG #1463: Return function execution result from constructor if the function returned (@raskad)
  • BUG #1434: Refactor regexp costructor (@raskad)
  • BUG #1350: Refactor / Implement RegExp functions (@RageKnify) (@raskad)
  • BUG #1331: Implement missing species getters (@raskad)

Internal Improvements:

Feature Enhancements:

Bug Fixes:

  • BUG #1071: Fix attribute configurable of the length property of arguments (@tofpie)
  • BUG #1073: Fixed spelling (@vishalsodani)
  • BUG #1072: Fix get/set as short method name in object (@tofpie)
  • BUG #1077: Fix panics from multiple borrows of Map (@joshwd36)
  • BUG #1079: Fix lexing escapes in string literal (@jevancc)
  • BUG #1075: Fix out-of-range panics of Date (@jevancc)
  • BUG #1084: Fix line terminator in string literal (@jevancc)
  • BUG #1110: Fix parsing floats panics and bugs (@jevancc)
  • BUG #1202: Fix a typo in gc.rs (@teymour-aldridge)
  • BUG #1201: Return optional value in to_json functions (@fermian)
  • BUG #1223: Update cli name in Readme (@sphinxc0re)
  • BUG #1175: Handle early errors for declarations in StatementList (@0x7D2B)
  • BUG #1270: Fix Context::register_global_function() (@HalidOdat)
  • BUG #1135: Fix of instructions.rs comment, to_precision impl and rfc changes (@NathanRoyer)
  • BUG #1272: Fix Array.prototype.filter (@tofpie & @Razican)
  • BUG #1280: Fix slice index panic in add_rest_param (@0x7D2B)
  • BUG #1284: Fix GcObject to_json mutable borrow panic (@0x7D2B)
  • BUG #1283: Fix panic in regex execution (@0x7D2B)
  • BUG #1286: Fix construct usage (@0x7D2B)
  • BUG #1288: Fixed Math.hypot.length bug (@moadmmh)
  • BUG #1285: Fix environment record panics (@0x7D2B)
  • BUG #1302: Fix VM branch (@jasonwilliams)

Internal Improvements:

Feature Enhancements:

  • FEATURE #836: Async/Await parse (@Lan2u)
  • FEATURE #704: Implement for...of loops (@joshwd36)
  • FEATURE #770: Support for symbols as property keys for Object.defineProperty (@georgeroman)
  • FEATURE #717: Strict Mode Lex/Parse (@Lan2u)
  • FEATURE #800: Implement console crate feature - Put console object behind a feature flag (@HalidOdat)
  • FEATURE #804: Implement EvalError (@HalidOdat)
  • FEATURE #805: Implement Function.prototype.call (@RageKnify)
  • FEATURE #806: Implement URIError (@HalidOdat)
  • FEATURE #811: Implement spread operator using iterator (@croraf)
  • FEATURE #844: Allow UnaryExpression with prefix increment/decrement (@croraf)
  • FEATURE #798: Implement Object.getOwnPropertyDescriptor() and Object.getOwnPropertyDescriptors() (@JohnDoneth)
  • FEATURE #847: Implement Map.prototype.entries() (@croraf)
  • FEATURE #859: Implement spec compliant Array constructor (@georgeroman)
  • FEATURE #874: Implement Map.prototype.values and Map.prototype.keys (@croraf)
  • FEATURE #877: Implement Function.prototype.apply (@georgeroman)
  • FEATURE #908: Implementation of instanceof operator (@morrien)
  • FEATURE #935: Implement String.prototype.codePointAt (@devinus)
  • FEATURE #961: Implement the optional space parameter in JSON.stringify (@tofpie)
  • FEATURE #962: Implement Number.prototype.toPrecision (@NathanRoyer)
  • FEATURE #983: Implement Object.prototype.isPrototypeOf (@tofpie)
  • FEATURE #995: Support Numeric separators (@tofpie)
  • FEATURE #1013: Implement nullish coalescing (?? and ??=) (@tofpie)
  • FEATURE #987: Implement property accessors (@tofpie)
  • FEATURE #1018: Implement logical assignment operators (&&= and ||=) (@tofpie)
  • FEATURE #1019: Implement early errors for non-assignable nodes in assignment (@tofpie)
  • FEATURE #1020: Implement Symbol.toPrimitive (@tofpie)
  • FEATURE #976: Implement for..in (@tofpie)
  • FEATURE #1026: Implement String.prototype.split (@jevancc)
  • FEATURE #1047: Added syntax highlighting for numbers, identifiers and template literals (@Razican)
  • FEATURE #1003: Improve Unicode support for identifier names (@jevancc)

Bug Fixes:

  • BUG #782: Throw TypeError if regexp is passed to startsWith, endsWith, includes (@pt2121)
  • BUG #788: Fixing a duplicated attribute in test262 results (@Razican)
  • BUG #790: Throw RangeError when BigInt division by zero occurs (@JohnDoneth)
  • BUG #785: Fix zero argument panic in JSON.parse() (@JohnDoneth)
  • BUG #749: Fix Error constructors to return rather than throw (@RageKnify)
  • BUG #777: Fix cyclic JSON.stringify / primitive conversion stack overflows (@vgel)
  • BUG #799: Fix lexer span panic with carriage return (@vgel)
  • BUG #812: Fix 2 bugs that caused Test262 to fail (@RageKnify)
  • BUG #826: Fix tokenizing Unicode escape sequence in string literal (@HalidOdat)
  • BUG #825: calling "new" on a primitive value throw a type error (@dlemel8)
  • BUG #853 Handle invalid Unicode code point in the string literals (@jevancc)
  • BUG #870 Fix JSON stringification for fractional numbers (@georgeroman)
  • BUG #807: Make boa::parse emit error on invalid input, not panic (@georgeroman)
  • BUG #880: Support more number literals in BigInt's from string constructor (@georgeroman)
  • BUG #885: Fix BigInt.prototype.toString() radix checks (@georgeroman)
  • BUG #882: Fix (panic) remainder by zero (@georgeroman)
  • BUG #884: Fix some panics related to BigInt operations (@georgeroman)
  • BUG #888: Fix some panics in String.prototype properties (@georgeroman)
  • BUG #902: Fix Accessors panics (@HalidOdat)
  • BUG #959: Fix Unicode character escape sequence parsing (@tofpie)
  • BUG #964: Fix single line comment lexing with CRLF line ending (@tofpie)
  • BUG #919: Reduce the number of Array-related panics (@jakubfijalkowski)
  • BUG #968: Fix unit tests that can be failed due to daylight saving time (@tofpie)
  • BUG #972: Fix enumerable attribute on array length property (@tofpie)
  • BUG #974: Fix enumerable attribute on string length property (@tofpie)
  • BUG #981: Fix prototypes for Number, String and Boolean (@tofpie)
  • BUG #999: Fix logical expressions evaluation (@tofpie)
  • BUG #1001: Fix comparison with infinity (@tofpie)
  • BUG #1004: Fix panics surrounding Object.prototype.hasOwnProperty() (@HalidOdat)
  • BUG #1005: Fix panics surrounding Object.defineProperty() (@HalidOdat)
  • BUG #1021: Fix spread in new and call expressions (@tofpie)
  • BUG #1023: Fix attributes on properties of functions and constructors (@tofpie)
  • BUG #1017: Don't panic when function parameters share names (@AnnikaCodes)
  • BUG #1024: Fix delete when the property is not configurable (@tofpie)
  • BUG #1027: Supress regress errors on invalid escapes for regex (@jasonwilliams
  • BUG #1031: Fixed some extra regex panics (@Razican)
  • BUG #1049: Support overriding the arguments variable (@AnnikaCodes)
  • BUG #1050: Remove panic on named capture groups (@Razican)
  • BUG #1046: Remove a few different panics (@Razican)
  • BUG #1051: Fix parsing of arrow functions with 1 argument (@Lan2u)
  • BUG #1045: Add newTarget to construct (@tofpie)
  • BUG #659: Error handling in environment (@54k1)

Internal Improvements:

  • INTERNAL #735: Move exec implementations together with AST node structs (@georgeroman)
  • INTERNAL #724: Ignore tests for code coverage count (@HalidOdat)
  • INTERNAL #768 Update the benchmark Github action (@Razican)
  • INTERNAL #722: ConstructorBuilder, ObjectInitializer, cache standard objects and fix global object attributes (@HalidOdat)
  • INTERNAL #783: New test262 results format (This also reduces the payload size for the website) (@Razican)
  • INTERNAL #787: Refactor ast/node/expression into ast/node/call and ast/node/new (@croraf)
  • INTERNAL #802: Make Function.prototype a function (@HalidOdat)
  • INTERNAL #746: Add Object.defineProperties and handle props argument in Object.create (@dvtkrlbs)
  • INTERNAL #774: Switch from regex to regress for ECMA spec-compliant regex implementation (@neeldug)
  • INTERNAL #794: Refactor PropertyDescriptor (Improved performance) (@HalidOdat)
  • INTERNAL #824: [parser Expression] minor expression macro simplification (@croraf)
  • INTERNAL #833: Using unstable sort for sorting keys on to_json() for GC objects (@Razican)
  • INTERNAL #837: Set default-run to boa removing need for --bin (@RageKnify)
  • INTERNAL #841: Minor refactor and rename in eval() method (@croraf)
  • INTERNAL #840: fix(profiler): update profiler to match current measureme api (@neeldug)
  • INTERNAL #838: style(boa): minor cleanup (@neeldug)
  • INTERNAL #869: Updated cache in workflows (@Razican)
  • INTERNAL #873 Removed cache from MacOS builds (@Razican)
  • INTERNAL #835: Move Object internal object methods to GcObject (@HalidOdat)
  • INTERNAL #886: Support running a specific test/suite in boa_tester (@georgeroman)
  • INTERNAL #901: Added "unimplemented" syntax errors (@Razican)
  • INTERNAL #911: Change Symbol hash to u64 (@HalidOdat)
  • INTERNAL #912: Feature Context::register_global_property() (@HalidOdat)
  • INTERNAL #913: Added check to ignore semicolon in parser (@AngelOnFira)
  • INTERNAL #915: Improve lexer by make cursor iterate over bytes (@jevancc)
  • INTERNAL #952: Upgraded rustyline and test262 (@Razican)
  • INTERNAL #960: Fix unresolved links in documentation (@tofpie)
  • INTERNAL #979: Read file input in bytes instead of string (@tofpie)
  • INTERNAL #1014: StatementList: Rename statements to items (@AnnikaCodes)
  • INTERNAL #860: Investigation into ByteCode Interpreter (@jasonwilliams)
  • INTERNAL #1042: Add receiver parameter to object internal methods (@tofpie)
  • INTERNAL #1030: VM: Implement variable declaration (var, const, and let) (@AnnikaCodes)
  • INTERNAL #1010: Modify environment binding behaviour of function (@54k1)

Feature Enhancements:

  • FEATURE #524: Implement remaining Math methods (@mr-rodgers)
  • FEATURE #562: Implement remaining Number methods (@joshwd36)
  • FEATURE #536: Implement SyntaxError (@HalidOdat)
  • FEATURE #543: Implements Object.create builtin method (@croraf)
  • FEATURE #492: Switch to rustyline for the CLI (@IovoslavIovchev & @Razican)
  • FEATURE #595: Added syntax highlighting for strings in REPL (@HalidOdat)
  • FEATURE #586: Better error formatting and cli color (@HalidOdat)
  • FEATURE #590: Added keyword and operator colors and matching bracket validator to REPL (@HalidOdat)
  • FEATURE #555: Implement Array.prototype.reduce (@benjaminflin)
  • FEATURE #550: Initial implementation of Map() (@joshwd36 & @HalidOdat)
  • FEATURE #579: Implement Array.prototype.reduceRight (@benjaminflin)
  • FEATURE #585: Implement Well-Known Symbols (@joshwd36)
  • FEATURE #589: Implement the comma operator (@KashParty)
  • FEATURE #341: Ability to create multiline blocks in boa shell (@HalidOdat)
  • FEATURE #252: Implement Date (@jcdickinson)
  • FEATURE #711: Add support for >>>= (@arpit-saxena)
  • FEATURE #549: Implement label statements (@jasonwilliams)
  • FEATURE #373: Introduce PropertyKey for field acces (@RageKnify)
  • FEATURE #627: Feature native class objects (NativeObject and Class traits) (@HalidOdat)
  • FEATURE #694: Feature gc module (@HalidOdat)
  • FEATURE #656: Feature Context (@HalidOdat)
  • FEATURE #673: Add #[track_caller] to GcObject methods that can panic (@HalidOdat)
  • FEATURE #661: Add documentation to GcObject methods (@HalidOdat)
  • FEATURE #662: Implement std::error::Error for GcObject borrow errors (@HalidOdat)
  • FEATURE #660: Make GcObject::contruct not take 'this' (@HalidOdat)
  • FEATURE #654: Move require_object_coercible to Value (@HalidOdat)
  • FEATURE #603: Index PropertyKey, Object iterators and symbol support (@HalidOdat)
  • FEATURE #637: Feature boa::Result<T> (@HalidOdat)
  • FEATURE #625: Moved value operations from Interpreter to Value (@HalidOdat)
  • FEATURE #638: Changed to Value::to_*int32 => Value::to_*32 (@HalidOdat)

Bug Fixes:

  • BUG #405: Fix json.stringify symbol handling (@n14little)
  • BUG #520: Fix all Value operations and add unsigned shift right (@HalidOdat)
  • BUG #529: Refactor exec/expression into exec/call and exec/new (@croraf)
  • BUG #510: [[Call]] calling an undefined method does not throw (@joshwd36)
  • BUG #493: Use correct exponential representation for rational values (@Tropid)
  • BUG #572: Spec Compliant Number.prototype.toString(), better Number object formating and -0 (@HalidOdat)
  • BUG #599: Fixed String.prototype.indexOf() bug, when the search string is empty (@HalidOdat)
  • BUG #615: Fix abstract relational comparison operators (@HalidOdat)
  • BUG #608: Debug::fmt Causes Causes a Stack Overflow (@jcdickinson)
  • BUG #532 [builtins - Object] Object.getPrototypeOf returning incorrectly (@54k1)
  • BUG #533 [exec - function] function.prototype doesn't have own constructor property pointing to this function (@54k1)
  • BUG #641 Test new_instance_should_point_to_prototype is not checked correctly (@54k1)
  • BUG #644 undefined constants panic on execution (@jcdickinson)
  • BUG #631: Unexpected result when applying typeof to undefined value (@jcdickinson)
  • BUG #667: Fix panic when calling function that mutates itself (@dvtkrlbs)
  • BUG #668: Fix clippy on Nightly (@dvtkrlbs)
  • BUG #582: Make String.prototype.repeat() ECMAScript specification compliant (@HalidOdat)
  • BUG #541: Made all Math methods spec compliant (@HalidOdat)
  • BUG #597: Made String.prototype.indexOf spec compliant. (@HalidOdat)
  • BUG #598: Made String.prototype.lastIndexOf() spec compliant (@HalidOdat)
  • BUG #583: Fix string prototype trim methods (@HalidOdat)
  • BUG #728: Fix bug when setting the length on String objects (@jasonwilliams)
  • BUG #710: Fix panic when a self mutating function is constructing an object (@HalidOdat)
  • BUG #699: Fix Value::to_json order of items in array (@sele9)
  • BUG #610: Fix: String.prototype.replace substitutions (@RageKnify)
  • BUG #645: Fix undefined constant expression evaluation (@jcdickinson)
  • BUG #643: Change default return type from null to undefined (@54k1)
  • BUG #642: Missing constructor field in ordinary functions (@54k1)
  • BUG #604: Missing __proto__ field in functions instances (@54k1)
  • BUG #561: Throw a TypeError when a non-object is called (@joshwd36)
  • BUG #748: Fix parse error throwing a TypeError, instead of SyntaxError (@iamsaquib8)
  • BUG #737: Make Object.toString() spec compliant (@RageKnify)

Internal Improvements:

Feature Enhancements:

  • FEATURE #414: Implement Number object constants (@Lan2u) (@HalidOdat)
  • FEATURE #345: Implement the optional replacer parameter in JSON.stringify( value[, replacer [, space] ] ) (@n14little)
  • FEATURE #480: Implement global Infinity property (@AnirudhKonduru)
  • FEATURE #410: Add support for the reviver function to JSON.parse (@abhijeetbhagat)
  • FEATURE #425: Specification compliant ToString (to_string) (@HalidOdat)
  • FEATURE #442: Added TypeError implementation (@HalidOdat)
  • FEATURE #450: Specification compliant ToBigInt (to_bigint) (@HalidOdat)
  • FEATURE #455: TemplateLiteral Basic lexer implementation (@croraf)
  • FEATURE #447: parseInt, parseFloat implementation (@Lan2u)
  • FEATURE #468: Add BigInt.asIntN() and BigInt.asUintN() functions (@Tropid)
  • FEATURE #428: [Feature Request] - Create benchmark for Array manipulation (@abhijeetbhagat)
  • FEATURE #439: Implement break handling in switch statements (@Lan2u)
  • FEATURE #301: Implementing the switch statement in the new parser (@Lan2u)
  • FEATURE #120: Implement globalThis (@zanayr)
  • FEATURE #513: Implement Object.is() method (@tylermorten)
  • FEATURE #481: Implement global undefined property (@croraf)

Bug Fixes:

  • BUG #412: Fixed parsing if statement without else block preceded by a newline (@HalidOdat)
  • BUG #409: Fix function object constructable/callable (@HalidOdat)
  • BUG #403 Value::to_json() does not handle undefined correctly (@n14little)
  • BUG #443: HasOwnProperty should call GetOwnProperty and not GetProperty (@n14little)
  • BUG #210: builtinfun.length undefined (@Croraf)
  • BUG #466: Change ToPrimitive() (to_primitive()) hint to be an enum, instead of string (@HalidOdat)
  • BUG #421: NaN is lexed as a number, not as an identifier (@croraf)
  • BUG #454: Function declaration returns the function, it should return undefined (@croraf)
  • BUG #482: Field access should propagate the exception (Err(_)) (@neeldug)
  • BUG #463: Use of undefined variable should throw an error (@croraf)
  • BUG #502: Fixed global objects initialization order (@HalidOdat)
  • BUG #509: JSON.stringify(undefined) panics (@n14little)
  • BUG #514: Clean up Math Methods (@n14little)
  • BUG #511: [Call] Usage of "this" in methods is not supported (@jasonwilliams)

Internal Improvements

v0.8.0 brings more language implementations, such as do..while, function objects and also more recent EcmaScript additions, like BigInt. We have now moved the Web Assembly build into the wasm package, plus added a code of conduct for those contributing.

The parser has been even more modularized in this release making it easier to add new parsing rules.

Boa has migrated it's object implemention to FXHash which brings much improved results over the built-in Rust hashmaps (at the cost of less DOS Protection).

Feature Enhancements:

Bug fixes:

  • BUG #308: Assignment operator not working in tests (a = a +1) (@ptasz3k)
  • BUG #322: Benchmarks are failing in master (@Razican)
  • BUG #325: Put JSON functions on the object, not the prototype (@coolreader18)
  • BUG #331: We only get Const::Num, never Const::Int (@HalidOdat)
  • BUG #209: Calling new Array with 1 argument doesn't work properly (@HalidOdat)
  • BUG #266: Panic assigning named function to variable (@Razican)
  • BUG #397: fix NaN is lexed as identifier, not as a number (@attliaLin)
  • BUG #362: Remove Monaco Editor Webpack Plugin and Manually Vendor Editor Workers (@subhankar-panda)
  • BUG #406: Dependency Upgrade (@Razican)
  • BUG #407: String() wasn't defaulting to empty string on call (@jasonwilliams)
  • BUG #404: Fix for 0 length new String(@tylermorten)

Code Of Conduct:

  • COC #384: Code of conduct added (@Razican)

Security:

  • SEC #391: run security audit daily at midnight. (@n14little)

v0.7.0 brings a REPL, Improved parser messages and a new parser! This is now the default behaviour of Boa, so running Boa without a file argument will bring you into a javascript shell. Tests have also been moved to their own files, we had a lot of tests in some modules so it was time to separate.

New Parser

Most of the work in this release has been on rewriting the parser. A big task taken on by HalidOdat, Razican and myself.

The majority of the old parser was 1 big function (called parse) which had some pattern matching on each token coming in.
The easy branches could generate expressions (which were basically AST Nodes), the more involved branches would recursively call into the same function, until eventually you had an expression generated.

This only worked so far, eventually debugging parsing problems were difficult, also more bugs were being raised against the parser which couldn't be fixed.

We decided to break the parser into more of a state-machine. The initial decision for this was inspired by Fedor Indutny who did a talk at (the last) JSConf EU about how he broke up the old node-parser to make it more maintanable. He goes into more detail here https://www.youtube.com/watch?v=x3k_5Mi66sY&feature=youtu.be&t=530

The new parser has functions to match the states of parsing in the spec. For example https://tc39.es/ecma262/#prod-VariableDeclaration has a matching function read_variable_declaration. This not only makes it better to maintain but easier for new contributors to get involed, as following the parsing logic of the spec is easier than before.

Once finished some optimisations were added by HalidOdat to use references to the tokens instead of cloning them each time we take them from the lexer.
This works because the tokens live just as long as the parser operations do, so we don't need to copy the tokens.
What this brings is a huge performance boost, the parser is 67% faster than before!

Parser Improvement

Feature enhancements:

  • FEATURE #281: Rebuild the parser (@jasonwilliams, @Razican, @HalidOdat)
  • FEATURE #278: Added the ability to dump the token stream or ast in bin. (@HalidOdat)
  • FEATURE #253: Implement Array.isArray (@cisen)
  • FEATURE Switch to normal output instead of debugged output (stdout/stdout) (@jasonwilliams)
  • FEATURE #258: Moved test modules to their own files (@Razican)
  • FEATURE #267: Add print & REPL functionality to CLI (@JohnDoneth)
  • FEATURE #268: Addition of forEach() (@jasonwilliams) (@xSke)
  • FEATURE #262: Implement Array.prototype.filter (@Nickforall)
  • FEATURE #261: Improved parser error messages (@Razican)
  • FEATURE #277: Add a logo to the project (@HalidOdat)
  • FEATURE #260: Add methods with f64 std equivelant to Math object (@Nickforall)

Bug fixes:

  • BUG #249: fix(parser): handle trailing comma in object literals (@gomesalexandre)
  • BUG #244: Fixed more Lexer Panics (@adumbidiot)
  • BUG #256: Fixed comments lexing (@Razican)
  • BUG #251: Fixed empty returns (@Razican)
  • BUG #272: Fix parsing of floats that start with a zero (@Nickforall)
  • BUG #240: Fix parser panic
  • BUG #273: new Class().method() has incorrect precedence

Documentation Updates:

  • DOC #297: Better user contributed documentation

The lexer has had several fixes in this release, including how it parses numbers, scientific notation should be improved. On top of that the lexer no longer panics on errors including Syntax Errors (thanks @adumbidiot), instead you get some output on where the error happened.

Moving to a workspace architecture

Boa offers both a CLI and a library, initially these were all in the same binary. The downside is those who want to embed boa as-is end up with all of the command-line dependencies. So the time has come to separate out the two, this is normal procedure, this should be analogous to ripgrep and the regex crate. Cargo has great support for workspaces, so this shouldn't be an issue.

Benchmarks

We now have benchmarks which run against master! Thanks to Github Actions these will run automatically a commit is merged.

Feature enhancements:

Bug fixes:

  • BUG #222: Fixed clippy errors (@IovoslavIovchev)
  • BUG #228: [lexer: single-line-comment] Fix bug when single line comment is last line of file (@croraf)
  • BUG #229: Replace error throwing with panic in "Lexer::next()" (@croraf)
  • BUG #232/BUG #238: Clippy checking has been scaled right back to just Perf and Style (@jasonwilliams)
  • BUG #227: Array.prototype.toString should be called by ES value (@cisen)
  • BUG #242: Fixed some panics in the lexer (@adumbidiot)
  • BUG #235: Fixed arithmetic operations with no space (@gomesalexandre)
  • BUG #245: Fixed parsing of floats with scientific notation (@adumbidiot)

Feature enhancements:

  • FEATURE #151: Implement the Rest/Spread operator (functions and arrays).
  • FEATURE #193: Implement macro for setting builtin functions
  • FEATURE #211: Better Display support for all Objects (pretty printing)

Feature enhancements:

  • FEATURE #119: Introduce realm struct to hold realm context and global object.
  • FEATURE #89: Implement exponentiation operator. Thanks @arbroween
  • FEATURE #47: Add tests for comments in source code. Thanks @Emanon42
  • FEATURE #137: Use Monaco theme for the demo page
  • FEATURE #114: String.match(regExp) is implemented (@muskuloes)
  • FEATURE #115: String.matchAll(regExp) is implemented (@bojan88)
  • FEATURE #163: Implement Array.prototype.every() (@letmutx)
  • FEATURE #165: Implement Array.prototype.find() (@letmutx)
  • FEATURE #166: Implement Array.prototype.findIndex() (@felipe-fg)
  • FEATURE #39: Implement block scoped variable declarations (@barskern)
  • FEATURE #161: Enable obj[key] = value syntax.
  • FEATURE #179: Implement the Tilde operator (@letmutx)
  • FEATURE #189: Implement Array.prototype.includes (incl tests) (@simonbrahan)
  • FEATURE #180: Implement Array.prototype.slice (@muskuloes @letmutx)
  • FEATURE #152: Short Function syntax (no arguments)
  • FEATURE #164: Implement Array.prototype.fill() (@bojan88)
  • Array tests: Tests implemented for shift, unshift and reverse, pop and push (@muskuloes)
  • Demo page has been improved, new font plus change on input. Thanks @WofWca
  • FEATURE #182: Implement some Number prototype methods (incl tests) (@pop)
  • FEATURE #34: Number object and Constructore are implemented (including methods) (@pop)
  • FEATURE #194: Array.prototype.map (@IovoslavIovchev)
  • FEATURE #90: Symbol Implementation (@jasonwilliams)

Bug fixes:

  • BUG #113: Unassigned variables have default of undefined (@pop)
  • BUG #61: Clippy warnings/errors fixed (@korpen)
  • BUG #147: Updated object global
  • BUG #154: Correctly handle all whitespaces within the lexer
  • Tidy up Globals being added to Global Object. Thanks @DomParfitt

0.4.0 (2019-09-25)

v0.4.0 brings quite a big release. The biggest feature to land is the support of regular expressions. Functions now have the arguments object supported and we have a debugging section in the docs.

Feature enhancements:

  • FEATURE #6: Support for regex literals. (Big thanks @999eagle)
  • FEATURE #13: toLowerCase, toUpperCase, substring, substr and valueOf implemented (thanks @arbroween)
  • Support for arguments object within functions
  • StringData instead of PrimitieData to match spec
  • Native function signatures changed, operations added to match spec
  • Primitives can now be boxed/unboxed when methods are ran on them
  • Spelling edits (thanks @someguynamedmatt)
  • Ability to set global values before interpreter starts (thanks @999eagle)
  • Assign operators implemented (thanks @oll3)

Bug fixes:

  • BUG #57: Fixed issue with stackoverflow by implementing early returns.
  • Allow to re-assign value to an existing binding. (Thanks @oll3)

0.3.0 (2019-07-26)

  • UnexpectedKeyword(Else) bug fixed boa-dev#38
  • Contributing guide added
  • Ability to specify file - Thanks @callumquick
  • Travis fixes
  • Parser Tests - Thanks @Razican
  • Migrate to dyn traits - Thanks @Atul9
  • Added implementations for Array.prototype: concat(), push(), pop() and join() - Thanks @callumquick
  • Some clippy Issues fixed - Thanks @Razican
  • Objects have been refactored to use structs which are more closely aligned with the specification
  • Benchmarks have been added
  • String and Array specific console.log formats - Thanks @callumquick
  • isPropertyKey implementation added - Thanks @KrisChambers
  • Unit Tests for Array and Strings - Thanks @GalAster
  • typo fix - Thanks @palerdot
  • dist cleanup, thanks @zgotsch

0.2.1 (2019-06-30)

Some String prototype methods are implemented. Thanks to @lennartbuit we have trim/trimStart/trimEnd added to the string prototype

Feature enhancements:

Bug fixes:

  • Plenty

0.2.0 (2019-06-10)

Working state reached

  • Tests on the lexer, conforms with puncturators and keywords from TC39 specification
  • wasm-bindgen added with working demo in Web Assembly
  • snapshot of boa in a working state for the first time