Commit graph

23440 commits

Author SHA1 Message Date
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
ngc6302h
a39ec19cd7 Kernel: Fix kernel crash when remote peer resets unexpectedly 2021-07-07 01:18:25 +02:00
Linus Groh
15070b76b3 js: Convert to east const 2021-07-06 23:58:50 +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
Max Wipfli
d3a2e492fb Documentation: Document the ConfigureComponents utility
This adds documentation for the ConfigureComponents utility to the build
instructions.
2021-07-06 21:54:51 +02:00
Max Wipfli
2d71eaadcd Meta: Add the ConfigureComponents utility
This adds a utility program which is essentially a command generator for
CMake. It reads the 'components.ini' file generated by CMake in the
build directory, prompts the user to select a build type and optionally
customize it, generates and runs a CMake command as well as 'ninja
clean' and 'rm -rf Root', which are needed to properly remove system
components.

The program uses whiptail(1) for user interaction.
2021-07-06 21:54:51 +02: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
Gunnar Beutner
148679d1b5 Ports: Update gcc patch to match the toolchain 2021-07-06 19:08:22 +02:00
Gunnar Beutner
d86275d271 Kernel+Toolchain: Remove the kernel-specific toolchain
This is no longer necessary now that the kernel doesn't use libsupc++
anymore.
2021-07-06 19:08:22 +02:00
Gunnar Beutner
67f0c0d5f0 Kernel+LibELF: Don't demangle symbols in the kernel
Instead we should just generate kernel.map in such a way that it already
contains demangled symbols.
2021-07-06 19:08:22 +02:00
Liav A
8e8a5680d5 Kernel/x86_64: Print if machine doesn't support x86_64 mode
We drop to real mode and use two BIOS calls to do this.
2021-07-06 19:01:27 +02:00
Idan Horowitz
7d40987ab6 Meta: Add a note about commit hooks to the contribution guide
These are pretty useful but are not documented anywhere, so this should
fix that :^)
2021-07-06 17:32:46 +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
LuK1337
f15ad9523d LibGUI: Fix go_upwards_instead check in ComboBox
This change addresses an issue where ComboBox list window would always
be drawn upwards if the number of elements is lower or equal 3.
2021-07-06 17:26:50 +02:00
Sergey Bugaev
d91119ba78 test-pthread: Add semaphore tests 2021-07-06 17:25:34 +02:00
Sergey Bugaev
5aa629717e LibPthread: Fix some assertions 2021-07-06 17:25:34 +02:00
Sergey Bugaev
78f5c4a4c2 LibPthread: Fix ordering
It would be enough to use relaxed ordering here if it weren't for
the mutex, which we also need to store and retrieve. To ensure the
pthread_cond_broadcast() call sees the store, use release and acquire
as appropriate. Thankfully, both of these are on the slow paths.
2021-07-06 17:25:34 +02:00
Sergey Bugaev
30caa33f7e LibC: Only set owner on recursive mutexes
This lets us skip the gettid() calls on fast paths.

Also, verify that futex_wake() succeeds.
2021-07-06 17:25:34 +02:00
Andrew Kaster
d0447f23b8 Tests+Base: Convert stack-smash to be LibTest based and stop skipping it
Now that the test is converted to be LibTest based, we can remove it
from the exclude list in /home/anon/.config/Tests.ini.

Prior to this it would crash and fail because it was signaled instead of
returning normally with exit code 0.
2021-07-06 17:22:45 +02:00
Andrew Kaster
f0d562131f Tests: Generate data in memory for TestXSV benchmark case
The actual data file for this benchmark was never actually committed to
the repository, so let's generate 100k identical lines in memory to be
the fairly large data for this test instead.
2021-07-06 17:22:45 +02:00
Andrew Kaster
b7ae561945 LibTest: Clear core dump flag for CrashTest child processes
Because these processes are expected to crash, generating a core dump
from them and throwing up a CrashReporter window is less helpful than
it is distracting while running many tests at a time.

Use the prctl for controlling the core dump-able flag to tell the kernel
we don't want core dumps from these processes. Note that because we also
build LibTest for Lagom, we have to check for MacOS which doesn't
support prctl(PR_SET_DUMPABLE).
2021-07-06 17:22:45 +02:00
Andrew Kaster
e4013f6cc6 Tests: Set a default font in BenchmarkGfxPainter to prevent crashes
After the changes to LibGfx to make default font management handled in
WindowServer instead of each GUI application to allow for global font
broadcasts, the two LibGfx tests broke. The non-benchmark was fixed in
8f96d2, but the benchmark was left in the dust because nobody really
runs it manually :^(
2021-07-06 17:22:45 +02:00
Andrew Kaster
ad0b8b42eb Base: Pass show-progress=false to run-tests to avoid confusing CI
We pass this to test-js, and since they share some common code, it makes
sense to pass it to run-tests as well. This prevents the OSC 9 escape
sequences from being emitted when running tests via the script.
2021-07-06 17:22:45 +02: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
Ali Mohammad Pur
06ffc0c4db LibWasm: Don't create useless temporary strings for trap reasons
These strings are only used when execution traps, so there's no reason
to create actual strings until that happens; instead switch to using
StringViews.
2021-07-06 17:55:00 +04:30
Ali Mohammad Pur
2fc0040ceb LibWasm: Tweak the implementation-defined limits a bit 2021-07-06 17:55:00 +04:30
Ali Mohammad Pur
5636f8143d LibWasm: Allow overflow in normal 64-bit arithmetic instructions 2021-07-06 17:55:00 +04:30
Ali Mohammad Pur
c4d4c657d0 LibWasm: Limit module memory to 65536 pages
The spec mentions this, and anything past that can't be correctly
addressed by the 32-bit indices anyhow.
2021-07-06 17:55:00 +04:30
Ali Mohammad Pur
03fe50d5e7 LibWasm: Fix data section initialization bounds checking 2021-07-06 17:55:00 +04:30
Ali Mohammad Pur
d2212a1f51 LibWasm: Jump to the default label in br_table with negative values
Also adds a forgotten Wasm::Printer implementation for printing table
branch arguments.
2021-07-06 17:55:00 +04:30
Ali Mohammad Pur
f5d4e26ff7 Meta+LibWasm: Correctly parse the invokee name in toplevel invokes 2021-07-06 17:55:00 +04:30
Ali Mohammad Pur
0b08392e54 LibWasm: Use the number of bytes when comparing memory limits
...instead of comparing page count with byte count.
2021-07-06 17:55:00 +04:30
Ali Mohammad Pur
4bdb0ad132 LibWasm: Guard stack accesses with checks
If the stack is empty, let's just trap.
2021-07-06 17:55:00 +04:30
Ali Mohammad Pur
963f5e69e0 Meta+LibWasm: Generate calls to functions when they don't have results 2021-07-06 17:55:00 +04:30
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