* Fixed a bunch of test262 panics (#817)
This also implements a spec-compliant `parseInt()` function.
* Reverted a test
* Addressed long comments from review
- Add BuiltIn trait
- Add ConstructorBuilder
- Add ObjectInitializer
- Cache core standard objects
- More efficient ConstructorBuilder::build()
- Allow to specify which prototype to inherit
- Refactor object property insertion
- Made ClassBuilder use ConstructorBuilder
- Make ConstructorBuilder::build() return GcObject
- Implement Debug for ClassBuilder and ConstructorBuilder
- Make ClassBuilder methods return &mut Self
- Make ObjectBuilder::build() return a GcObject
- Fixed global objects/properies attributes
- Fixed function prototype and attributes
- doc cached standard objects
- Set error object types to inherit from `Error.prototype`
- Added FunctionBuilder
- Add #[inline]
- Refactor `String` => `Rc<str>`
- Refactor `Symbol` => `Rc<Symbol>`
- Refactor `BigInt` => `RcBigInt`
- Changed function signature, from `&mut Value` to `&Value`
- Removed `Interpreter::value_to_rust_number()
- Abstracted `Gc<GcCell<Object>>` to `GcObject`
- Removed unnecessary `Box`s in global environment
- Extracted `extensible` from internal slots
- Made `to_primitive` throw errors
- Removed `strict` parameter in `SameValue` function.
- The `SameValue` function is not dependent on strict mode.
- Maded arrow functions non-constructable
- Simplified Function object and removed FunctionKind
- Rnamed create_ordinary -> ordinary, create_builtin -> builtin
- Added name and length properties in global objects
* implement this
* remove construct/call from Object instead set func
* get_this_binding() was wrong, fixed
* BindingStatus is now properly set
* `this` now works on dynamic functions
* Migrates all builtins to use a single constructor/call fucntion to match the spec
* Ensure new object has an existing prototype
* create_function utility
* needing to clone before passing through
New parser!
Plus loads of tidy up in various places.
Co-authored-by: Jason Williams <jwilliams720@bloomberg.net>
Co-authored-by: HalidOdat <halidodat@gmail.com>
Co-authored-by: Iban Eguia <iban.eguia@cern.ch>
Co-authored-by: Iban Eguia <razican@protonmail.ch>
* Add make_fn macro in builtins module
* Replace all array methods with the make_fn macro
* Set builtins method with make_fn for bool, console, error, json, math, number, object, regexp and string
* Rename make_fn macro to make_builtin_fn
* Rename the actual macro rule to make_builtin_fn
* make_builtin_fn macro without length will result to length 0
* Add length property for every builtin method
* Remove duplicate definition of toString method in regexp
* Add missing length attributes to builtins methods
* Implement block scoped variable declarations
`const` and `let` are now scoped to the block, while `var` is scoped to
the surronding function (or global).
Another bigger change is that all tests have been changed to use `var`
instead of `let` or `const`. This is because every time `forward` is
called with some new Javascript to evaluate, we parse it as a block,
hence variables can only persist across calls to `forward` if they are
defined using `var`. I assume it is intentional to parse each call as a
separate block, because a block is the only `ExprDef` which can contain
multiple statements.
Closes#39
* Prefer environment parent over environment_stack
Instead of iterating over the `environment_stack` we rather use
`get_outer_environment` as it will be a better fit when asyncronous
functions are implemented.
* Ensure variable from outer scope is assigned
Variables that are defined outside a block should be changeable within
the scope. Just because variable is undefined does not mean it is not
initialized.
* Fixed clippy warnings option_unwrap_used and result_unwrap_used.
* Fixed float_cmp clippy error and the option_unwrap_used it was hiding.
* Fixed shadowing issues.
* Disabled some clippy lints in tests.
* Fixed clippy string_add issues.
* Added allow else_if_without_else since an else-block would not make sense.
* Fixed integer arithmetic issues.
* Fixed all clippy get_unwrap issues.
* Fixed usage of unimplemented and an occurrence of variable name shadowing.
* Fixed indexing may panic issues.
* Fixed a slicing may panic issue.
* Changed some unnecessary uses of match that I introduced for expect.