Andreas Kling
3c74dc9f4d
LibJS: Segregate GC-allocated objects by type
...
This patch adds two macros to declare per-type allocators:
- JS_DECLARE_ALLOCATOR(TypeName)
- JS_DEFINE_ALLOCATOR(TypeName)
When used, they add a type-specific CellAllocator that the Heap will
delegate allocation requests to.
The result of this is that GC objects of the same type always end up
within the same HeapBlock, drastically reducing the ability to perform
type confusion attacks.
It also improves HeapBlock utilization, since each block now has cells
sized exactly to the type used within that block. (Previously we only
had a handful of block sizes available, and most GC allocations ended
up with a large amount of slack in their tails.)
There is a small performance hit from this, but I'm sure we can make
up for it elsewhere.
Note that the old size-based allocators still exist, and we fall back
to them for any type that doesn't have its own CellAllocator.
2023-11-19 12:10:31 +01:00
networkException
33b40eaeed
LibJS: Add LoadedModules to Script and CyclicModule
2023-10-31 18:09:14 +01:00
Linus Groh
22089436ed
LibJS: Convert Heap::allocate{,_without_realm}() to NonnullGCPtr
2022-12-15 06:56:37 -05:00
Andreas Kling
e6331031c4
LibJS: Make Parser::Error a standalone ParserError class
...
This allows us to forward declare it and reduce the number of things
that need to include Parser.h.
2022-11-23 16:05:59 +00:00
Andreas Kling
d13d571844
LibJS: Make sure JS::Script visits its HostDefined object
...
This allows JS::Script to mark its corresponding HTML::Script, even if
it's a little roundabout looking. Fixes an issue where the JS::Script
was kept alive by the execution stack, but the HTML::Script was gone.
This was originally part of 8f9ed415a0
but got lost in a merging accident.
2022-09-06 01:21:09 +02:00
Andreas Kling
00c8f07192
LibJS: Make Script and Module GC-allocated
...
This ensures that code currently in any active or saved execution stack
always stays alive.
2022-09-06 00:27:09 +02:00
Linus Groh
7767f9be37
LibJS: Rename some variables from "script body" to "script"
...
This is an editorial change in the ECMA-262 spec.
See: 38a2584
2022-05-01 22:47:38 +02:00
Linus Groh
ee1379520a
LibJS: Add missing whitespace around namespace curly braces
2022-04-17 23:00:35 +02:00
Lenny Maiorani
d00b79568f
Libraries: Use default constructors/destructors in LibJS
...
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#cother-other-default-operation-rules
"The compiler is more likely to get the default semantics right and
you cannot implement these functions better than the compiler."
2022-03-16 16:19:40 +00:00
Idan Horowitz
c575710e5e
LibWeb: Use inline script tag source line as javascript line offset
...
This makes JS exception line numbers meaningful for inline script tags.
2022-03-14 00:25:33 +01:00
Andreas Kling
aeb72fe9d0
LibJS: Reduce header dependency graph in Realm.h
2022-02-07 19:16:46 +01:00
Andreas Kling
6ddbe8f953
LibJS: Add [[HostDefined]] internal slot to Script objects
...
In C++, this is a raw pointer to a Script::HostDefined.
2022-02-07 19:16:46 +01:00
davidot
12c2f30c54
LibJS: Add filename tracking to Script and Module
...
This will allow us to resolve modules dynamically loaded from a script.
2022-01-22 01:21:18 +00:00
Andreas Kling
20fb900937
LibJS+LibWeb: Move script parse time logging from JS::Script to LibWeb
...
Let's only log HTML::ClassicScript parse times for now. Otherwise things
will get excessively noisy in test-js and the test262 runner.
2021-09-14 21:41:51 +02:00
Andreas Kling
10c489713d
LibJS+LibWeb: Let JS::Script::parse() return a list of errors (on error)
...
These are really supposed to be a list of SyntaxError objects, but for
now we simply return all the Parser::Error objects we got from Parser.
2021-09-14 21:41:51 +02:00
Andreas Kling
f08a46bd9e
LibJS: Make JS::Script keep the VM alive
...
Script has a Handle member (m_realm), and for handles to remain valid,
the VM must stay alive.
2021-09-14 21:41:51 +02:00
Andreas Kling
3ca2e701e6
LibJS: Log scripts parsed by JS::Script::parse() and how long it took
2021-09-13 22:21:57 +02:00
Linus Groh
106f295916
LibJS+LibWeb: Make JS::Script and Web::HTML::ClassicScript use Realms
...
The spec wants Script Records to have a Realm, not a GlobalObject.
2021-09-12 15:18:25 +02:00
Andreas Kling
1484980f8f
LibWeb+LibJS: Remember source filenames when using HTML::Script
...
It's a lot easier to debug JavaScript problems if you can see which file
the errors are in. :^)
2021-09-11 00:36:37 +02:00
Andreas Kling
d823d7da54
LibJS: Implement the ParseScript AO (as JS::Script::parse())
2021-09-09 21:25:10 +02:00
Andreas Kling
612a23d6fc
LibJS: Start adding a JS::Script class (spec's "Script Record")
2021-09-09 21:25:10 +02:00