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

19 commits

Author SHA1 Message Date
Andreas Kling
4bbb0a5c35 LibJS: Add ConservativeVector<T>
This works very similarly to MarkedVector<T>, but instead of expecting
T to be Value or a GC-allocated pointer type, T can be anything.
Every pointer-sized value in the vector's storage will be checked during
conservative root scanning.

In other words, this allows you to put something like this in a
ConservativeVector<Foo> and it will be protected from GC:

    struct Foo {
        i64 number;
        Value some_value;
        GCPtr<Object> some_object;
    };
2024-02-22 16:44:54 +01:00
Andreas Kling
1d29f9081f LibJS: Remove JIT compiler
The JIT compiler was an interesting experiment, but ultimately the
security & complexity cost of doing arbitrary code generation at runtime
is far too high.

In subsequent commits, the bytecode format will change drastically, and
instead of rewriting the JIT to fit the new bytecode, this patch simply
removes the JIT instead.

Other engines, JavaScriptCore in particular, have already proven that
it's possible to handle the vast majority of contemporary web content
with an interpreter. They are currently ~5x faster than us on benchmarks
when running without a JIT. We need to catch up to them before
considering performance techniques with a heavy security cost.
2024-02-19 21:45:27 +01:00
Timothy Flynn
59716f807f Meta: Port recent changes to the GN build
187862ebe0
514af065a5
2024-01-29 07:21:59 +01:00
Timothy Flynn
71222845bd Meta: Port recent changes to the GN build
3c74dc9f4d
2023-12-26 11:16:10 +01:00
Timothy Flynn
a7073c3f1f LibJS: Skip test262 tests with the CanBlockIsFalse flag
From test262 documentation, this flag means:

    The test file should only be run when the [[CanBlock]] property of
    the Agent Record executing the file is `false`.

This patch stubs out the accessor for that internal slot and skips tests
with the CanBlockIsFalse if that internal slot is true.
2023-11-30 09:51:46 -05:00
Timothy Flynn
392d9d080d Meta: Port recent changes to GN build
80071b1d48face038a60b98fc8c3414de1cb9633
3f6a26d07d1536eb5e4e39eedfd4e0135eabf536
2023-11-18 01:16:05 -07:00
Simon Wanner
86b85aa68b LibJS: Introduce Builtins
Builtins are functions that can be detected during bytecode generation
and enable fast-paths in the JIT.
2023-11-17 19:06:25 +01:00
Simon Wanner
68f4d21de2 LibJS: Lazily collect stack trace information
The previous implementation was calling `backtrace()` for every
function call, which is quite slow.

Instead, this implementation provides VM::stack_trace() which unwinds
the native stack, maps it through NativeExecutable::get_source_range
and combines it with source ranges from interpreted call frames.
2023-11-02 07:37:41 +01:00
Andrew Kaster
95e2039abb Meta: Port ec8330b647 to gn build 2023-10-29 16:03:43 -06:00
Andrew Kaster
faa8ef98c9 Meta: Port recent changes to gn BUILD
5c7e5cc738
a8f0fa5dd4
0d417cd604
5b87d26027
 (and other friends from the JIT PR)
f915aa70cd
2023-10-27 16:51:03 -06:00
Andrew Kaster
9a3e9047a5 Meta: Update GN build for recent changes
9a026fc8d5
ae1ac9871b
07b332e17c

And some missed changes from the past that weren't hit because no one
was referencing those symbols :^).
2023-10-11 10:56:24 -06:00
Timothy Flynn
d0fd34112f LibJS: Remove the now-unused ThrowableStringBuilder 2023-09-09 13:03:25 -04:00
Sebastian Zaha
b4df4d66dc Meta: Port recent build changes to gn build
This ports the following commits:

f76c614a84
ddbe6bd7b4
2eaa528a0e
1b40bf9783
9f6ceff7cf
52d6df5ee5
9e22f01eba
bf4e2f3e9c
da2cd73bcf
2023-08-19 20:09:26 -06:00
Nico Weber
406b68a612 Meta: Port 77d7f715e3 to gn 2023-07-27 10:02:01 -06:00
Sebastian Zaha
7696738140 Meta: Port recent LibWeb and LibJS changes to gn build
This ports the following commits:
a8587fe54e
9d7215c636
2023-07-20 06:48:13 +01:00
Daniel Bertalan
e64a8751d1 LibJS: Do not use the $ special character in file names
The dollar sign is a special character in POSIX shells and in the Ninja
build file format. If the file name contains a `$`, something goes wrong
in the escaping/unescaping of this symbol, and CMake/GCC/Clang generate
invalid dependency files where not all instances of `$` are escaped
properly. Because of this, Ninja fails to rebuild `$262Object.cpp` if
the headers included by it have changed.

Stale `$262Object.cpp.o` files have been the cause of mysterious crashes
multiple times which only go away after doing a clean build. Let's
prevent these from happening again by removing the `$` from the
filename.
2023-07-15 11:09:22 -04:00
Andrew Kaster
8475ccc232 Meta: Port c0f985ffcf to gn build 2023-07-13 14:07:25 -06:00
Sebastian Zaha
c006a1ef41 Meta: Update gn build files with latest changes
Ports the recent CMakeFiles.txt changes and fixes the gn build.
2023-07-12 08:31:43 +01:00
Andrew Kaster
165a67b115 Meta: Add LibJS and its dependencies to gn build 2023-07-09 16:22:58 -06:00