Commit graph

29072 commits

Author SHA1 Message Date
Tim Schumacher a66c358c52 LibC: Stub out tdelete 2021-10-15 21:50:19 -07:00
Tim Schumacher 4b423a5ec7 LibC: Implement twalk 2021-10-15 21:50:19 -07:00
Tim Schumacher 7448626bae LibC: Implement tfind and tsearch 2021-10-15 21:50:19 -07:00
Marcin Undak d045181375 Documentation: Add RunningOnRaspberryPi page
This is a first draft targeted for existing developers.
2021-10-16 00:36:51 +01:00
Tim Schumacher 20fc93410c LibC: Mark termcap symbols as weak
Otherwise, we may end up preferring those over the more accurate
implementation in ncurses (if available).
2021-10-15 14:47:41 -07:00
Nico Weber ec9488a58c Lagom: Build with -fno-no-semantic-interposition
Lagom: Build with -fno-no-semantic-interposition

We build with this in non-lagom builds, and serenity's gcc even adds it
to its CC1_SPEC. Let's use it for lagom too.

Reduces the number of dynamic relocations in liblagom-js.so.0.0.0 (per
`objdump -R`) from 15133 to 14534, and increases its size back to 91M
(95156800 bytes), probably due to more inlining being possible.
This might help perf of lagom binaries.
2021-10-15 21:59:42 +01:00
Nico Weber b11d660ff8 Lagom: Build with -fno-exceptions
We build with this in non-lagom builds, so there's no reason not
to use it in lagom builds as well.

Reduces the size of liblagom-js.so.0.0.0 from 94M to 90M
(from 98352784 to 93831056 bytes to be exact).
2021-10-15 21:59:42 +01:00
James Mintram 3a9c7ce9d4 Kernel: Add StdLib.cpp to aarch64 build and update stubs in dummy.cpp 2021-10-15 21:48:45 +01:00
James Mintram e8f09279d3 Kernel: Move spinlock into Arch
Spinlocks are tied to the platform they are built for, this is why they
have been moved into the Arch folder. They are still available via
"Locking/Spinlock.h"

An Aarch64 stub has been created
2021-10-15 21:48:45 +01:00
James Mintram dfe4810c3a Kernel: Add cross platform RegisterState header and Aarch64 version
A new RegisterState header includes the platform specific RegisterState
header based on the platform being compiled.

The Aarch64 RegisterState header contains stubs for Debug
2021-10-15 21:48:45 +01:00
James Mintram 0fbeac6011 Kernel: Split SmapDisabler so header is platform independent
A new header file has been created in the Arch/ folder while the
implementation has been moved into a CPP living in the X86 folder.
2021-10-15 21:48:45 +01:00
James Mintram f4fb637914 Kernel: Split ScopedCritical so header is platform independent
A new header file has been created in the Arch/ folder while the
implementation has been moved into a CPP living in the X86 folder.
2021-10-15 21:48:45 +01:00
Sam Atkins 8b57e56d66 LibWeb: Parse "none" value for box-shadow property
Previously, `box-shadow: none` would fail to parse, meaning that in this
example:

```css
p {
  box-shadow: 20px 10px 5px magenta;
}

p.foo {
  box-shadow: none;
}
```

... a `<p class="foo">` would still have a box-shadow, when it should
not have one. Now, we handle the `none` value. :^)
2021-10-15 21:18:50 +01:00
Sam Atkins 7879b98f60 LibWeb: Use W3C urls for CSS-DISPLAY spec links 2021-10-15 21:05:35 +01:00
Sam Atkins d28eeeb207 LibWeb: Use W3C urls for CSS-VALUES-3 spec links 2021-10-15 21:05:35 +01:00
Sam Atkins 2d0c6bde01 LibWeb: Use W3C urls for CSS-CASCADE spec links 2021-10-15 21:05:35 +01:00
Sam Atkins e8d4236bbd LibWeb: Use W3C urls for CSSOM spec links
https://www.w3.org/TR/cssom/ is the more permanent home of the CSSOM
specification's latest version, and is up to date with the draft spec.

Also, https://drafts.csswg.org/ has been down multiple times recently
which made looking things up a pain.
2021-10-15 21:05:35 +01:00
Sam Atkins df85832f32 LibWeb: Implement CSSStyleRule::set_selector_text() 2021-10-15 18:12:20 +01:00
Sam Atkins 0f88a47e58 LibWeb: Add serialization code for CSS{Media,Supports}Rule
The `CSSMediaRule::serialized()` code is to spec. The
`CSSSupportsRule::serialized()` code has no spec right now, but I'm
fairly confident it will be almost identical to media's, so I copied
that for now.
2021-10-15 18:12:20 +01:00
Sam Atkins 46bba44f8b LibWeb: Move media-query-list serialization code to MediaQuery.{h,cpp}
It's not a complicated algorithm, but having it in one place instead of
2, and with spec comments, is nice. :^)
2021-10-15 18:12:20 +01:00
Sam Atkins caac0706c2 LibWeb: Accept a Block token as the body of a CSS At-Rule
I previously fixed this for `consume_a_qualified_rule()` and didn't
notice the same comment in `consume_an_at_rule()` until now.
2021-10-15 18:10:23 +01:00
Nico Weber b135efe870 Kernel: List AK_SOURCES only once 2021-10-15 17:49:54 +01:00
Marcin Undak d14d7ee78b Kernel: Discover initial exception level when booting Aarch64
When booting on RPI3 firmware puts CPU in EL2 mode which is
different from QEMU's default EL3.

I've added logic to discover initial mode at boot
and then act accordingly. This results in Serenity corectly
switching to EL1 on target hardware now.
2021-10-15 17:47:39 +01:00
Marcin Undak ebf810f9a6 Kernel: Make Aarch64 register variables bit more descriptive 2021-10-15 17:47:39 +01:00
Marcin Undak 2d9fa8146c Kernel: Switch processor to EL1 immediately after boot on Aarch64 2021-10-15 17:47:39 +01:00
Marcin Undak d6021300d5 Kernel: Move wait_cycles() function to Aarch_asm_utils.S
Just a bit of housekeeping.
2021-10-15 17:47:39 +01:00
Marcin Undak 18eb4a59d6 Kernel: Print current CPU exception level after booting on Aarch64
This is a first step to switch to exception level 1.

This is also my first patch for SerenityOS :)
2021-10-15 17:47:39 +01:00
davidot 7beccaf41b LibJS: Add comment clarifying the order of function properties 2021-10-15 17:47:27 +01:00
davidot 021691753d LibJS: Fix that proxy always said that it had a [[Construct]] slot 2021-10-15 10:27:16 +01:00
davidot 1c7c53e5a0 LibJS: Define length and name in function in correct order 2021-10-15 10:27:16 +01:00
davidot 9394cbcd24 LibJS: Do not save state for peeking at the next token from the lexer
This saves having to save and load the parser state.
This could give an incorrect token in some cases where the parser
communicates to the lexer. However this is not applicable in any of the
current usages and this would require one to parse the current token
as normal which is exactly what you don't want to do in that scenario.
2021-10-15 10:27:16 +01:00
davidot c3cb44ca8a LibJS: Remove ErrorType::FixmeAddAnErrorStringWithMessage 2021-10-15 10:27:16 +01:00
davidot 1fe6a422f1 LibJS: Fix null deref in ObjectProperty::dump() 2021-10-15 10:27:16 +01:00
davidot 10bf91a293 LibJS: Enable now working tests for duplicated variable declarations 2021-10-15 10:27:16 +01:00
Ben Wiederhake a8930997f0 LibGUI: Make Ctrl-Right at the end of a span work
There used to be the silly bug that when the cursor was already at the
end of a span (e.g. because the user just pressed Ctrl-Right), then
Ctrl-Right had no effect.

This bug does not appear with Ctrl-Left because due to the order in
which the spans are iterated, the effective result is always correct.

This patch also makes it more apparent that the algorithm is
unnecessarily inefficient.
2021-10-15 10:38:57 +02:00
Ben Wiederhake 3647001c93 LibGUI: Don't update selection twice after Ctrl-Right 2021-10-15 10:38:57 +02:00
Ben Wiederhake 68884eefc6 LibGUI: Make Ctrl-Shift-Home/-End work again
Previously, the initial call to update_selection() was missing, so if no
text was already selected, then Ctrl-Shift-End would only move the
cursor to the document end, but not select any text.
2021-10-15 10:38:57 +02:00
Ben Wiederhake 2f023acf78 LibGUI: Convert always-valid pointer to reference
The pointer is always assumed to be non-null, so let's change it to a
reference.
2021-10-15 10:38:57 +02:00
Linus Groh 5910a41adb LibJS: Implement ShadowRealm.prototype.importValue()
Well... sort of. This adds the function itself and all the scaffolding
from the ShadowRealm API (and basically completes its implementation).
However, we do not nearly have enough support for modules and imports,
so we currently pretend whatever was attempted to be imported failed -
once we have HostImportModuleDynamically it should be relatively easy to
complete the implementation.
2021-10-15 09:36:21 +01:00
Linus Groh 2ffb30a996 LibJS: Don't return empty value from PromiseReactionJob::call(), for now 2021-10-15 09:36:21 +01:00
Linus Groh fb85fd4867 LibJS/Tests: Test ShadowRealm.prototype.evaluate() this value type check 2021-10-15 09:36:21 +01:00
Luke Wilde 09536f5f48 LibJS: Fix typo in LHS Object and RHS BigInt loosely equals check
Step 12 was using `lhs.is_bigint()` instead of `rhs.is_bigint()`,
meaning you got:
```js
1n == Object(1n); // true
Object(1n) == 1n; // false
```

This also adds spec comments to is_loosely_equal.
2021-10-15 01:59:09 +01:00
Timothy Flynn 3ad159537e LibUnicode: Use u16 for unique string indices instead of size_t
Typically size_t is used for indices, but we can take advantage of the
knowledge that there is approximately only 46K unique strings in the
generated UnicodeLocale.cpp file. Therefore, we can get away with using
u16 to store indices. There is a VERIFY that will fail if we ever exceed
the limits of u16.

On x86_64 builds, this reduces libunicode.so from 9.2 MiB to 7.3 MiB.
On i686 builds, this reduces libunicode.so from 3.9 MiB to 3.3 MiB.

These savings are entirely in the .rodata section of the shared library.
2021-10-15 00:06:18 +01:00
Andreas Kling 07096b7765 LibWeb: Compute horizontal overflow for the initial containing block
This finally allows LibWeb to scroll pages horizontally instead of just
clipping things at the right edge.
2021-10-15 00:11:21 +02:00
Linus Groh 0241071ca2 LibJS: Use GlobalObject::associated_realm() for function object realms
As outlined in the previous commit, this should be more reliable than
Interpreter::realm(), as we don't always have access to an Interpreter.
2021-10-14 23:02:19 +01:00
Linus Groh cbbf4abb0d LibJS: Add a way to get from a GlobalObject to its associated Realm
This is just another workaround, but it should be much more reliable
than Interpreter::realm(), especially when allocating NativeFunctions
and ECMAScriptFunctionObjects: we're guaranteed to have a GlobalObject
at that point, and it likely was set as the GlobalObject of a Realm and
can lead us back to it. We're however not guaranteed that the VM can
give us an Interpreter, which is why functions in LibWeb can be a bit
crashy at the moment.

We use a WeakPtr<Realm> to properly handle the unlikely case where the
Realm goes away after associating a GlobalObject to it.

We'll always need _something_ of this sort if we want to support
OrdinaryFunctionCreate and CreateBuiltinFunction without the explicit
realm argument while no JS is running, because they want to use the
current Realm Record (always in the first and as fallback in the second
case).
2021-10-14 23:02:19 +01:00
Andreas Kling 2447b27d97 LibWeb: Implement position:fixed painting at the stacking context level
This makes everything within the stacking context stick show up in the
correct position.
2021-10-14 23:50:33 +02:00
Andreas Kling 7b0cd15495 LibWeb: Cleanup + spec comments in replaced element height computation 2021-10-14 23:22:59 +02:00
Andreas Kling 463ee07c00 LibWeb: Cleanup + spec comments in replaced element width computation 2021-10-14 23:22:59 +02:00
Andreas Kling 27d4ac316f LibWeb: Introduce simple scrollable overflow, size ICB to viewport
Per spec, the initial containing block (ICB) should have the size of the
viewport. We have only done this for the width until now, since we had
no way to express scrollable overflow.

This patch adds Layout::Box::m_overflow_data, an optional struct that
can hold on to information about a box's overflow. Then we have BFC
set the ICB up with some scrollable overflow instead of sizing it to fit
its content vertically.

This fixes a number of broken layouts where correctness depends on
having the appropriate ICB height.
2021-10-14 23:22:59 +02:00