Andreas Kling
d8e9a176cd
LibJS: Implement the NewDeclarativeEnvironment() abstract operation
2021-06-22 01:17:15 +02:00
Andreas Kling
c6baeca6d7
LibJS: Add ObjectEnvironmentRecord to Forward.h
...
And sort the forward declared classes alphabetically, for our friends
who enjoy alphabetically sorted things. :^)
2021-06-22 01:17:15 +02:00
Andreas Kling
08510a0c80
LibJS: Rename VM::current_scope() => current_environment_record()
...
And rename some related functions that wrapped this as well.
2021-06-21 23:49:50 +02:00
Andreas Kling
d407f247b7
LibJS: Rename virtuals in EnvironmentRecord
...
This patch makes the following renames:
- get_from_scope() => get_from_environment_record()
- put_to_scope() => put_into_environment_record()
- delete_from_scope() => delete_from_environment_record()
2021-06-21 23:49:50 +02:00
Andreas Kling
5edd259b0a
LibJS: Rename EnvironmentRecord::parent() => outer_environment()
...
This name matches the spec (corresponds to the [[OuterEnv]] slot.)
2021-06-21 23:49:50 +02:00
Andreas Kling
46f2c23030
LibJS: Convert EnvironmentRecord & friends to east-const style
2021-06-21 23:49:50 +02:00
Andreas Kling
6c6dbcfc36
LibJS: Rename Environment Records so they match the spec :^)
...
This patch makes the following name changes:
- ScopeObject => EnvironmentRecord
- LexicalEnvironment => DeclarativeEnvironmentRecord
- WithScope => ObjectEnvironmentRecord
2021-06-21 23:49:50 +02:00
Ali Mohammad Pur
eb5c92d4e2
LibJS: Don't assert for empty reciever if AllowSideEffects::No is given
...
This parameter is only used if AllowSideEffects::Yes, so there's no
reason to pass anything to it if that's not used.
2021-06-22 00:26:25 +04:30
Andreas Kling
0d2aba07aa
LibJS: Add VM::dump_scope_chain()
...
This is a handy helper that dumps the current scope chain, starting at
the innermost scope.
2021-06-21 20:58:55 +02:00
Andreas Kling
4c8df58e08
LibJS: Rename Parser::m_parser_state => m_state
...
Also remove the "m_" prefix from all the public data members.
2021-06-21 20:58:55 +02:00
Andreas Kling
5b16b5d7c1
LibJS: Fix spelling mistake in VariableDeclaration::execute()
2021-06-21 20:58:55 +02:00
Matthew Olsson
df65ff8a1e
LibJS: Add bytecode support for regexp literals
2021-06-21 00:28:07 +02:00
Linus Groh
e9388408db
LibJS: Implement support for the [[IsHTMLDDA]] internal slot
...
Best regards from Annex B and document.all :^)
2021-06-20 17:52:09 +01:00
Gunnar Beutner
fbaf763e2a
LibJS: Let if yield undefined for branches that don't yield a value
...
According to 13.6.7 the return value for if expressions should be
undefined when the branch statements don't yield a value.
2021-06-20 15:01:11 +02:00
Linus Groh
8f6ac0db1c
LibJS: Use OrdinaryCreateFromConstructor() in a bunch of constructors
...
Resolves various FIXMEs :^)
2021-06-20 12:12:39 +02:00
Linus Groh
e5753443ae
LibJS: Consistently make prototype the last argument in Object ctors
...
This is so that we can reliably allocate them in a template function,
e.g. in ordinary_create_from_constructor():
global_object.heap().allocate<T>(
global_object, forward<Args>(args)..., *prototype);
The majority of objects already take the prototype as the last argument,
so I updated the ones that didn't.
2021-06-20 12:12:39 +02:00
Linus Groh
df095afbcc
LibJS: Implement the OrdinaryCreateFromConstructor() abstract operation
2021-06-20 12:12:39 +02:00
Linus Groh
500818e73d
LibJS: Implement the GetPrototypeFromConstructor() abstract operation
2021-06-20 12:12:39 +02:00
Linus Groh
6312627218
LibJS: Implement the GetFunctionRealm() abstract operation
2021-06-20 12:12:39 +02:00
Linus Groh
55db9539a5
LibJS: Introduce AbstractOperations.{cpp,h} and move various AOs there
...
Value.{cpp,h} has become a dumping ground, let's change that.
Things that are directly related to Values (e.g. bitwise/binary ops,
equality related functions) can remain, but everything else that's not a
Value or Object method and globally required (not just a static function
somewhere) is being moved.
Also convert to east-const while we're here.
I haven't touched IteratorOperations.{cpp,h}, it seems fine to still
have those separately.
2021-06-20 12:12:39 +02: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
Matthew Olsson
25baefdd1e
LibJS: Support object rest elements in the bytecode interpreter
2021-06-19 09:38:26 +02:00
Matthew Olsson
57b9a228ab
LibJS: Support array rest elements in the bytecode interpreter
2021-06-19 09:38:26 +02:00
Matthew Olsson
7983324639
LibJS: Implement array destructuring for the bytecode interpreter
2021-06-19 09:38:26 +02:00
Matthew Olsson
14fff5df06
LibJS: Implement more IteratorOperations and organize file
...
Implemented IteratorComplete and IteratorValue, and sorted functions
based on their spec ordering.
2021-06-19 09:38:26 +02:00
Matthew Olsson
1f8e643ef0
LibJS: Support object destructuring in the bytecode interpreter
2021-06-19 09:38:26 +02:00
Matthew Olsson
f39ab2e60a
LibJS: Add JumpUndefined bytecode
2021-06-19 09:38:26 +02:00
Matthew Olsson
3ee627909a
LibJS: Ensure GetBy{Id,Value} never load <empty> into the accumulator
2021-06-19 09:38:26 +02:00
Matthew Olsson
ce04c2259f
LibJS: Restructure and fully implement BindingPatterns
2021-06-19 09:38:26 +02:00
Matthew Olsson
10372b8118
LibJS: Remove bad spread check in declaration parsing
...
This would allow assignments such as `let ...{ a } = { a: 20 }`
2021-06-19 09:38:26 +02:00
Linus Groh
fba3c77a04
LibJS: Add missing exception checks to Number() constructor
2021-06-19 02:03:37 +01: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
7f8245439b
LibJS: Add a bunch more missing ECMA-262 section/title/URL comments
2021-06-19 00:38:41 +01:00
Matthew Olsson
7f97e33778
LibJS: Disallow 'yield' identifier initializer in GeneratorFunctions
2021-06-19 00:04:57 +01:00
Matthew Olsson
9253fa1bad
LibJS: Implement GeneratorFunctionConstructor::construct
2021-06-19 00:04:57 +01:00
Matthew Olsson
22b17219ff
LibJS: Add the remaining generator objects
...
- %GeneratorFunction%
- %GeneratorFunction.prototype%
- %GeneratorFunction.prototype.prototype%
- %Generator%.prototype
2021-06-19 00:04:57 +01:00
Idan Horowitz
4dc63896de
LibJS: Add and use the ArraySpeciesCreate abstract operation
...
This ensures that the Array.prototype methods produce results using the
constructor of the derived object if it is one instead of always using
the default constructor.
2021-06-18 21:25:16 +01:00
Idan Horowitz
271eeadf25
LibJS: Bring FlattenIntoArray closer to the specification
...
This fixes the incorrect exception order and missing exception checks
that were caused by the implementation not conforming exactly to the
specification.
2021-06-18 21:25:16 +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
Idan Horowitz
2e9f665bda
LibJS: Throw on detached viewed ArrayBuffer when validating TypedArrays
2021-06-18 20:17:45 +01:00
Idan Horowitz
d5c836dd64
LibJS: Add the TypedArray.prototype.toString property
...
This is initialized to be the same function object as the initial value
of the Array.prototype.toString generic function.
2021-06-18 20:17:45 +01:00
Idan Horowitz
57db27bcc4
LibJS: Add the TypedArray.prototype.join method
2021-06-18 20:17:45 +01:00
Idan Horowitz
2922a6c053
LibJS: Add the TypedArray.prototype[Symbol.toString] getter accessor
2021-06-18 20:17:45 +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