1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-23 15:25:08 +00:00
Commit graph

1022 commits

Author SHA1 Message Date
Linus Groh
6cd16eceb3 LibJS: Implement Temporal.now.timeZone() 2021-07-07 00:42:01 +01:00
Linus Groh
265e89367e LibJS: Start implementing Temporal.TimeZone
Here we got our first Temporal object :^)
This patch adds the TimeZone object itself, its constructor and
prototype (currently empty), and a bunch of required abstract operations
2021-07-07 00:42:01 +01:00
Linus Groh
6735353b96 LibJS: Add preparation for Temporal constructors and prototypes
Add a JS_ENUMERATE_TEMPORAL_OBJECTS macro and use it to generate:

- Forward declarations
- CommonPropertyNames class name members
- Constructor and prototype GlobalObject members, getters, visitors,
  and initialize_constructor() calls
2021-07-07 00:42:01 +01:00
Linus Groh
7da1fcb2ef LibJS: Add the Temporal.now namespace object
This will be home to various functions:

- Temporal.now.timeZone()
- Temporal.now.instant()
- Temporal.now.plainDateTime()
- Temporal.now.plainDateTimeISO()
- Temporal.now.zonedDateTime()
- Temporal.now.zonedDateTimeISO()
- Temporal.now.plainDate()
- Temporal.now.plainDateISO()
- Temporal.now.plainTimeISO()
2021-07-07 00:42:01 +01:00
Linus Groh
8269921212 LibJS: Add the Temporal namespace object :^)
Currently empty, but we gotta start somewhere! This is the start of
implementing the Temporal proposal (currently stage 3).

I have decided to start a new subdirectory (Runtime/Temporal/) as well
as a new C++ namespace (JS::Temporal) for this so we don't have to
prefix all the files and classes with "Temporal" - there will be a lot.

https://tc39.es/proposal-temporal/
2021-07-07 00:42:01 +01:00
Hendi
37c4fbb6ca LibJS: Don't hoist functions under certain circumstances
When a lexical declaration with the same name as a function exists,
the function is not hoisted (annex B).
2021-07-06 22:55:16 +01:00
Timothy Flynn
e0d26fff8c LibJS: Replace strings with the search value coerced to a string
This only causes 1 new test262 test to pass. Other tests that rely on
this coercion fail due to receiving an unexpected value for 'this' when
invoking a functional replacement. For example:

    String/prototype/replaceAll/replaceValue-call-matching-empty.js

Receives 'undefined' for 'this' in the functional replacement invocation
but is expected to receive the global 'this'.
2021-07-06 22:33:17 +01:00
Timothy Flynn
81fec49ac3 LibJS: Evaluate replacement value before searching source string
The String.prototype.replace spec requires evaluating the replacement
value (if it is not a function) before searching the source string.

Fixes 4 test262 tests.
2021-07-06 22:33:17 +01:00
Timothy Flynn
65003241e4 LibRegex: Allow dollar signs in ECMA262 named capture groups
Fixes 1 test262 test.
2021-07-06 22:33:17 +01:00
Linus Groh
24c490c520 LibJS: Remove unused Lexer/Parser includes from GlobalObject.cpp 2021-07-06 18:41:24 +01:00
Idan Horowitz
5e621e494f LibJS: Implement Object.getOwnPropertyDescriptors() 2021-07-06 18:41:15 +01:00
Idan Horowitz
0f91883b17 LibJS: Rename ObjectConstructor::{define_property_ => define_property}
As the non-standard helper define_property is now removed, this doesnt
clash with it anymore.
2021-07-06 18:41:15 +01:00
Linus Groh
83f61748a5 LibJS: Don't treat 2^32 - 1 as numeric PropertyName
10.4.2 Array Exotic Objects
    https://tc39.es/ecma262/#sec-array-exotic-objects

    A String property name P is an array index if and only if
    ToString(ToUint32(P)) equals P and ToUint32(P) is not the same value
    as 𝔽(2^32 - 1).
2021-07-06 17:29:12 +01:00
Linus Groh
47bd25a2f1 LibJS: Make Value::as_u32() slightly less broken
Still a horrible mess, but at least it can actually return numbers > i32
max now.
2021-07-06 17:29:12 +01:00
Linus Groh
30fe0529bd LibJS: Fix second argument passed to Proxy [[Call]] trap (thisArgument) 2021-07-06 17:29:12 +01:00
Timothy Flynn
8fcdc57ae1 LibJS: Coerce named captures to an object before calling GetSubstitution
Per the spec, before invoking the GetSubstitution abstraction, the named
capture groups (if not undefined) should be coerced to an object via the
ToObject abstraction.
2021-07-06 15:07:26 +01:00
Timothy Flynn
424c7eaa40 LibJS: Fix replaceAll crash for overlapping search string positions
The implementation of String.prototype.replaceAll cannot use AK's
implementation of String::find_all when finding the indices of the
search string in the source string. String::find_all will return indices
[0, 1] for String("aaa").find_all("aa") - i.e. it returns overlapping
results. This is not allowed by the JavaScript specification for
replaceAll.
2021-07-06 15:07:26 +01:00
Linus Groh
30615ac2bb LibJS: Do s/define_property/define_direct_property/ in a comment 2021-07-06 14:36:00 +01:00
Linus Groh
0ba81dc0b7 LibJS: Remove Object::is_array() in favor of Value::is_array() and RTTI
It's way too easy to get this wrong: for the IsArray abstract operation,
Value::is_array() needs to be called. Since we have RTTI, the virtual
Object::is_array() method is not needed anymore - if we need to know
whether something is *actually* a JS::Array (we currently check in more
cases than we should, I think) and not a Proxy with an Array target, we
should do that in a way that doesn't look like an abstract operation.
2021-07-06 14:26:18 +01:00
Idan Horowitz
e3ef241108 LibJS: Remove the non-standard put helper and replace it's usages
This removes all usages of the non-standard put helper method and
replaces all of it's usages with the specification required alternative
or with define_direct_property where appropriate.
2021-07-06 14:20:30 +01:00
Idan Horowitz
53f70e5208 LibJS: Remove the default length & attributes from define_native_*
These are usually incorrect, and people sometimes forget to add the
correct values as a result of them being optional, so they should just
be specified explicitly.
2021-07-06 14:20:30 +01:00
Idan Horowitz
a6b8291a9b LibJS: Add define_direct_property and remove the define_property helper
This removes all usages of the non-standard define_property helper
method and replaces all it's usages with the specification required
alternative or with define_direct_property where appropriate.
2021-07-06 14:20:30 +01:00
Idan Horowitz
e915155ca4 LibJS: Remove impossible check from Array's native length getter/setter
Since the object rewrite native property getters/setters are always
called with the owning object as the this_value, which in this case is
an Array object, and as such this checks are always false.
2021-07-06 14:20:30 +01:00
Idan Horowitz
6787e86a3a LibJS: Add and use the CreateNonEnumerableDataPropertyOrThrow AO 2021-07-06 14:20:30 +01:00
Idan Horowitz
6da7f43580 LibJS: Bring String.prototype.split closer to the specification
Specifically, add a couple of missing exception checks and use the
CreateDataPropertyOrThrow abstract operation.
2021-07-06 14:20:30 +01:00
Idan Horowitz
28172fde10 LibJS: Add missing exception check to the ArraySpeciesCreate AO 2021-07-06 14:20:30 +01:00
Luke
d89f539d16 LibJS: Add %TypedArray%.prototype.reverse
This fixes 13 test262 cases.
2021-07-06 13:40:27 +01:00
Luke
275092bb03 LibJS: Fix byteOffset copy-paste error in TypedArray buffer test 2021-07-06 13:40:19 +01:00
Luke
c8db607c00 LibJS: Fix byteOffset copy-paste error in TypedArray byteLength test 2021-07-06 13:40:19 +01:00
Luke
651becbfb1 LibJS: Use Number instead of parseInt in TypedArray forEach BigInt tests
The Number constructor previously didn't support converting BigInts to
regular numbers, so I used parseInt as a workaround.

Since it now supports this, this workaround is no longer needed.
2021-07-06 13:40:19 +01:00
Luke
8244d7916e LibJS: Add Uint8ClampedArray to TypedArray tests 2021-07-06 13:40:19 +01:00
Linus Groh
3faeabf1dc Revert "LibJS: Don't hoist functions under certain circumstances"
This reverts commit 3411d50737.

It was causing LeakSanitizer on CI to fail, possibly due to a circular
reference.
2021-07-06 13:25:37 +01:00
Luke
99cb54670f LibJS: Add missing exception check in internalize_json_property
The call to enumerable_own_property_names in the non-array case was
missing an exception check.

Fixes 1 test262 case (JSON/parse/reviver-object-own-keys-err.js)
2021-07-06 01:33:52 +01:00
Hendi
3411d50737 LibJS: Don't hoist functions under certain circumstances
When a lexical declaration with the same name as a function exists,
the function is not hoisted (annex B).
2021-07-06 00:15:37 +01:00
Hendi
c194afd17c LibJS: Fix runaway let scope when parsing for-in/of statements
This requires variables that should be exported to the script host
or to other scripts to be declared as var (such as in test-common.js),
since lexically-scoped variables won't be visible.
2021-07-06 00:15:37 +01:00
Hendi
793e1bf28a LibJS: Fix variable scoping issues in two tests 2021-07-06 00:15:37 +01:00
Hendi
38fd980b0c LibJS: Improve function hoisting across blocks
The parser now keeps track of a scope chain so that it can hoist
function declarations to the closest function scope.
2021-07-06 00:15:37 +01:00
Hendi
72f8d90dc5 LibJS: Remove variables from FunctionNode
They weren't consumed anywhere outside the AST and went
against the usual concept of having declaration in ScopeNode.
2021-07-06 00:15:37 +01:00
Timothy Flynn
e0c9f58b0c LibJS: Implement and use the GetSubstitution abstract operation
Used by String.prototype.replace, String.prototype.replaceAll, and
RegExp.prototype [ @@replace ].
2021-07-05 23:26:41 +01:00
Timothy Flynn
4985d3ef42 LibJS: Fix linked specification of String.prototype.concat 2021-07-05 23:26:41 +01:00
Linus Groh
339ccba354 LibJS: Make Object.prototype.toString() fully spec compliant
- Fix evaluation order: IsArray(O) should always be called and before
  Get(O, @@toStringTag), previously it was the other way around and
  IsArray would only be called if @@toStringTag is not a string
- Add missing exception checks to both function calls
- Add missing builtin tag for arguments object

Also, while we're here:
- Update variable names to match spec
- Add spec step comments
2021-07-05 20:21:26 +01:00
Linus Groh
598842c5b7 LibJS: Fix bogus target.[[OwnPropertyKeys]]() call in Proxy 2021-07-05 18:19:45 +01:00
Linus Groh
34c28b981a LibJS: Add a missing exception check in Object.assign() 2021-07-05 18:19:45 +01:00
Linus Groh
2e94fa25d0 LibJS: Add spec step comments to Object.assign() 2021-07-05 18:19:45 +01:00
Linus Groh
4f2af65836 LibJS: Add spec step comments to Object.hasOwn() 2021-07-05 18:19:45 +01:00
Idan Horowitz
8195c31965 LibJS: Remove the non-standard get_own_property_descriptor helper 2021-07-05 18:19:39 +01:00
Idan Horowitz
557424a141 LibJS: Remove usage of define_native_property in OrdinaryFunctionObject
The length & name properties are supposed to be normal data properties.
2021-07-05 17:26:31 +01:00
davidot
f998cc156f LibJS: Remove PropertyName::to_value since it is not used anymore :^) 2021-07-05 16:04:52 +01:00
davidot
ce59e49e27 LibJS: Use a custom property_name_to_value method instead of to_value 2021-07-05 16:04:52 +01:00
davidot
721238f41c LibJS: Use the direct formatter of PropertyName instead of via to_value 2021-07-05 16:04:52 +01:00