Linus Groh
c503a28e19
LibJS: Make AggregateError inherit from Error
...
This is our way of implementing the [[ErrorData]] internal slot, which
is being used in Object.prototype.toString().
2021-06-23 13:59:17 +01:00
Anonymous
2822da8c8f
LibJS: Correct behaviour of direct vs. indirect eval
...
eval only has direct access to the local scope when accessed through
the name eval. This includes locals named eval, because of course it
does.
2021-06-23 09:38:33 +01:00
davidot
f7e2994f35
LibJS: Make string to integer parsing for properties more strict
...
This does break two TypedArray test262 test but those really were not
correct because hasProperty was not implemented
2021-06-22 20:49:28 +01:00
davidot
9d1fd403af
LibJS: Fix small issues in Array.prototype.concat
2021-06-22 20:49:28 +01:00
davidot
15edad8202
LibJS: Make define_property always throw if specified
...
Now put uses is_strict_mode to determine define_property should throw
2021-06-22 20:49:28 +01:00
Linus Groh
8a06a93ce2
LibJS: Return non-object argument unaltered from Object.setPrototypeOf()
...
This was missing step 3 from the spec:
3. If Type(O) is not Object, return O.
Also use RequireObjectCoercible() for a better error message and make
the rest of the code a bit easier to read and more similar to the spec
text.
2021-06-22 18:59:24 +01:00
Idan Horowitz
c31392510a
LibJS: Add the Number.prototype.toFixed method
2021-06-19 16:13:59 +01:00
Andreas Kling
f86e241699
LibJS: Object.getOwnPropertyNames() should enumerate String's .length
...
We were incorrectly aborting property name enumeration after generating
names for all the indexable properties in the underlying string.
2021-06-19 11:46:08 +02:00
Andreas Kling
686213c2b8
LibJS: Make Object.getOwnPropertyDescriptor() work on String subscripts
...
String objects are a bit special since the indexed properties are
overridden by the contents of the underlying PrimitiveString.
getOwnPropertyDescriptor() was not taking this into account, and would
instead return undefined when asked about an indexed property in a
String object.
2021-06-19 11:34:19 +02:00
Linus Groh
8e26c7a1dd
LibJS: Make Number() constructor spec compliant
...
By using to_numeric() and adding BigInt handling, we get support for
`Number(123n)`.
Fixes #8125 .
2021-06-19 01:34:17 +01:00
Linus Groh
597cf88c08
LibJS: Implement the 'Hashbang Grammar for JS' proposal
...
Stage 3 since August 2019 - we already have shebang stripping
implemented in js(1), so this removes it from there in favor of adding
support to the lexer directly.
Most straightforward proposal and implementation I've ever seen :^)
https://github.com/tc39/proposal-hashbang
2021-06-18 20:35:23 +01:00
Linus Groh
299c3069c1
LibJS/Tests: Use eval() for toEvalTo(), not Function()
...
Since we have had eval() for a while now, we can finally use it here -
this allows us to get rid of the confusing return statements in tested
source code.
2021-06-18 20:35:23 +01:00
sin-ack
c5073cb287
LibJS: Do not trim whitespace from property names when they're numbers
...
Fixes #7803 .
2021-06-18 19:18:15 +01:00
Luke
8be7bdaac3
LibJS: Add %TypedArray%.prototype.some
2021-06-18 18:13:31 +01:00
Luke
68f11a272b
LibJS: Add %TypedArray%.prototype.forEach
2021-06-18 18:13:31 +01:00
Luke
91af985718
LibJS: Add %TypedArray%.prototype.findIndex
2021-06-18 18:13:31 +01:00
Luke
61a8c19556
LibJS: Add %TypedArray%.prototype.find
2021-06-18 18:13:31 +01:00
Luke
65ca2d98af
LibJS: Add %TypedArray%.prototype.every
2021-06-18 18:13:31 +01:00
Luke
02de3cbce3
LibJS: Add Number.parseInt
...
This is initialized to be the same function object as the initial value
of the parseInt function on the global object.
2021-06-18 10:29:33 +01:00
Idan Horowitz
cc5c1df64b
LibJS: Add the TypedArray.of() method
2021-06-17 18:13:20 +01:00
Luke
9cbd90fdb6
LibJS: Add BigInt64Array and BigUint64Array
...
This fixes ~297 test262 test cases :^)
2021-06-17 02:20:03 +01:00
Luke
8d90e137a5
LibJS: Fix check for byteOffset instead of byteLength in byteLength test
2021-06-17 02:20:03 +01:00
Linus Groh
7489189645
LibJS/Tests: Use Object.prototype.toString() for values in test details
...
Using String() like we did before depends on objects having either
toString, valueOf, or @@toPrimitive, which is not the case for objects
with no prototype.
2021-06-16 22:49:04 +01:00
Idan Horowitz
c619ad4fec
LibJS: Allow no-op define property calls on non-configurable objects
...
This brings us slightly closer to the specification's 10.1.6.3
ValidateAndApplyPropertyDescriptor.
2021-06-16 12:57:48 +01:00
Idan Horowitz
2299be474b
LibJS: Add the String.fromCodePoint() method
2021-06-16 10:29:10 +01:00
Idan Horowitz
e1b0719435
LibJS: Add all of the FinalizationRegistry.prototype methods
...
More specifically: cleanupSome, register & unregister.
FinalizationRegistery.prototype.cleanupSome is actually still a stage 2
proposal, but since test262 test cases already exist for it, i decided
to go for it :)
2021-06-15 23:59:21 +01:00
Idan Horowitz
de9fa6622a
LibJS: Add the FinalizationRegistry built-in object
...
As well as the needed functionality in VM to enqueue and run cleanup
jobs for the FinalizationRegistry instances.
2021-06-15 23:59:21 +01:00
Ali Mohammad Pur
3194177dce
LibJS: Correctly parse yield-from expressions
...
This commit implements parsing for `yield *expr`, and the multiple
ways something can or can't be parsed like that.
Also makes yield-from a TODO in the bytecode generator.
Behold, the glory of javascript syntax:
```js
// 'yield' = expression in generators.
function* foo() {
yield
*bar; // <- Syntax error here, expression can't start with *
}
// 'yield' = identifier anywhere else.
function foo() {
yield
*bar; // Perfectly fine, this is just `yield * bar`
}
```
2021-06-14 13:06:08 +01:00
Ali Mohammad Pur
d374295a26
LibJS: Parse generator functions in object literals
...
Also add some parser tests
2021-06-14 13:06:08 +01:00
Ali Mohammad Pur
2661a88108
LibJS: Add a test file for generator function parsing
...
Note that the yield-from expression tests are skipped for now since
they're not implemented yet.
2021-06-14 13:06:08 +01:00
davidot
ae8b55a80a
LibJS: Add additional generic Array.prototype.slice tests
2021-06-14 09:57:06 +01:00
davidot
6c13cc67c6
LibJS: Implement Array.prototype.copyWithin generically
2021-06-14 09:57:06 +01:00
davidot
417f752306
LibJS: Implement Array.prototype.entries
2021-06-14 09:57:06 +01:00
davidot
910b803d8d
LibJS: Implement Array.prototype.flatMap
...
Also made recursive_array_flat more compliant with the spec
So renamed it to flatten_into_array
2021-06-14 09:57:06 +01:00
davidot
4152409ac5
LibJS: Make Array.prototype.concat generic
2021-06-14 09:57:06 +01:00
davidot
2ef9df989f
LibJS: Make Array.prototype.reverse generic
2021-06-14 09:57:06 +01:00
davidot
516f6240e8
LibJS: Add additional Array.prototype.reverse tests
2021-06-14 09:57:06 +01:00
davidot
d723c01af7
LibJS: Make Array.prototype.unshift generic
2021-06-14 09:57:06 +01:00
davidot
7c1e2adf8a
LibJS: Make Array.prototype.shift generic
2021-06-14 09:57:06 +01:00
Idan Horowitz
690eb3bb8a
LibJS: Add support for hex, octal & binary big integer literals
2021-06-14 01:45:04 +01:00
Idan Horowitz
e4e6e03364
LibJS: Add tests for DataView.prototype getters and setters
2021-06-14 01:45:04 +01:00
Idan Horowitz
e4d267d4fb
LibJS: Add the DataView built-in object
2021-06-14 01:45:04 +01:00
Luke
d72aeb2e1a
LibJS: Rewrite Array.prototype.slice to be spec compliant
...
This makes it generic in the process (which is required by jQuery)
This fixes 19 test262 test cases :^)
2021-06-13 16:21:34 +01:00
Linus Groh
33eea1f722
LibJS: Fix Object.prototype.valueOf() behavior
...
No idea why it was implemented like this, but a value_of() call on the
coerced object is not part of the spec. Also added some tests.
2021-06-13 01:06:36 +01:00
Idan Horowitz
322c8a3995
LibJS: Add the MapIterator built-in and the key/values/entries methods
...
While this implementation should be complete it is based on HashMap's
iterator, which currently follows bucket-order instead of the required
insertion order. This can be simply fixed by replacing the underlying
HashMap member in Map with an enhanced one that maintains a linked
list in insertion order.
2021-06-13 00:33:18 +01:00
Idan Horowitz
6c0d5163a1
LibJS: Add most of the Map.prototype methods
...
Specifically all aside from "keys", "values" and "entries" which
require an implementation of the MapIterator object.
2021-06-13 00:33:18 +01:00
Idan Horowitz
a96ac8bd56
LibJS: Add the Map built-in object
2021-06-13 00:33:18 +01:00
Idan Horowitz
3c83298a26
LibJS: Use undefined as the fallback value for iterable entry key/value
...
As defined in OdinaryGet in the specification.
2021-06-12 22:34:28 +01:00
Idan Horowitz
bd9e20ef79
LibJS: Add the Object.getOwnPropertySymbols method
2021-06-12 18:39:23 +01:00
Idan Horowitz
a2da3f97ef
LibJS: Remove argument count checks in Object.* methods
...
These are inconsistent with the specification.
2021-06-12 18:39:23 +01:00