summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-01-15LibVT: Don't clip TerminalWidget's drawing to avoid scrollerMatt Jacobson
The scroller might be hidden or (in theory) non-opaque.
2022-01-16LibJS: Implement create_dynamic_function() according to the specLinus Groh
The three major changes are: - Parsing parameters, the function body, and then the full assembled function source all separately. This is required by the spec, as function parameters and body must be valid each on their own, which cannot be guaranteed if we only ever parse the full function. - Returning an ECMAScriptFunctionObject instead of a FunctionExpression that needs to be evaluated separately. This vastly simplifies the {Async,AsyncGenerator,Generator,}Function constructor implementations. Drop '_node' from the function name accordingly. - The prototype is now determined via GetPrototypeFromConstructor and passed to OrdinaryFunctionCreate.
2022-01-16LibJS: Allow passing prototype to ECMAScriptFunctionObject::create()Linus Groh
This should have been the default as it roughly represents the OrdinaryFunctionCreate AO. For now, keep two overloads and continue to guess the required prototype from the function kind in most cases. The prototype needs to be passed in explicitly when it may be derived from user code, such as in the CreateDynamicFunction AO.
2022-01-16LibJS: Don't require ParenClose in Parser::parse_formal_parameters()Linus Groh
The parentheses are dealt with outside this function, so we shouldn't use the (non)existence of one as the condition for consuming another comma and then parameter. Just check for a comma instead. This becomes relevant when parsing standalone function parameters as per the spec in the CreateDynamicFunction AO.
2022-01-16LibJS: Consume curly braces outside of Parser::parse_function_body()Linus Groh
The curly braces are not part of the FunctionBody production. This becomes relevant when parsing a standalone function body as per the spec in the CreateDynamicFunction AO.
2022-01-16LibJS: Add VM::active_function_object()Linus Groh
2022-01-16LibJS: Rename FunctionKind::{Regular => Normal}Linus Groh
This is what CreateDynamicFunction calls it.
2022-01-15Kernel: Wait for NVMe controller to change enabled stateTom
We need to wait up to CAP.TO units of 500ms when changing CC.EN to enable or disable the controller.
2022-01-16AK: Mark the error branch of the TRY() macro as unlikelyIdan Horowitz
This results in a measurable (and free!) 2% improvement in test-js run time.
2022-01-16Kernel: Use kernelputstr instead of dbgln when printing backtracesIdan Horowitz
This will allow us to eventually switch dbgln in the kernel to an allocation-free (although length-bounded) formatter.
2022-01-16Kernel: Make Processor::capture_stack_trace fallible using ErrorOrIdan Horowitz
2022-01-16Kernel: Specify inline capacity of return type in capture_stack_traceIdan Horowitz
Since the inline capacity of the Vector return type was not specified explicitly, the vector was automatically copied to a 0-length inline capacity one, essentially eliminating the optimization.
2022-01-15PixelPaint: Add delete selection behaviorOlivier De Cannière
The delete key can now be used to erase the pixels on the active layer contained within the selection rectangle. Closes #11861
2022-01-16Kernel: Remove useless return value from procfs_get_thread_stackIdan Horowitz
2022-01-16AK: Explicitly name types in Iterator.hcreator1creeper1
In this particular case, auto is a footgun, because we are very certain about the type that we want to return. const-correctness could have been violated (as Vector did), because Iterator did not enforce that the returned pointer was actually const if the Iterator was an Iterator over a const container.
2022-01-16AK: Make Vector more const-correct by using RemoveReference<T>creator1creeper1
Methods marked as const should always only return Foo const&, never Foo&. Previously, this only worked correctly with Foo, but not with Foo&: If someone fetched a T const&, this would have been expanded to Foo& const& which is just Foo&. Therefore, they were able to modify the elements of the Vector, even though it was marked as const. This commit fixes that by introducing VisibleType as an alias for RemoveReference<T> and using it throughout Vector. There are also other cases where we don't require a mutable reference to the underlying type, only a const reference (for example in a find operation). In these cases, we now also correctly expand the type to Foo const&.
2022-01-16Everywhere: Mark Vector of mutable references as mutablecreator1creeper1
The point of a reference type is to behave just like the referred-to type. So, a Foo& should behave just like a Foo. In these cases, we had a const Vector. If it was a const Vector of Foo, iterating over the Vector would only permit taking const references to the individual Foos. However, we had a const Vector of Foo&. The behavior should not change. We should still only be permitted to take const references to the individual Foos. Otherwise, we would be allowed to mutate the individual Foos, which would mutate the elements of the const Vector. This wouldn't modify the stored pointers, but it would modify the objects that the references refer to. Since references should be transparent, this should not be legal. So it should be impossible to get mutable references into a const Vector. Since we need mutable references in these cases to call the mutating member functions, we need to mark the Vector as mutable as well.
2022-01-15nc: Port to LibMainKenneth Myhra
2022-01-15PixelPaint: Restrict "crop to selection" to image boundariesMateusz Krajewski
2022-01-15Assistant: Fix crash in FileProvider background thread upon exitRummskartoffel
If the Threading::BackgroundAction for filesystem indexing in FileProvider hadn't finished by the time the main thread exited, it would still try to access the FileProvider object that lived in the main thread, thereby causing a segfault and crashing. This commit prevents FileProvider from being destroyed while the background thread is still running by giving the background thread a strong reference to its FileProvider.
2022-01-15Assistant: Make Provider ref-countedRummskartoffel
2022-01-15Documentation: Update names of RefPtr helper functionsRummskartoffel
This seems to have been missed when these functions were renamed.
2022-01-15unzip: Don't fail from mmap when trying to decompress empty filesRummskartoffel
Given an empty file, unzip would try to create a zero-size memory mapping of that file, which would fail with EINVAL. With this commit, attempting to unzip an empty file of course still fails, since that's not a valid PKZIP file, but it now fails for the correct reason and with the correct error message.
2022-01-15Kernel: Remove infallible VMObject resource factory functionscreator1creeper1
These infallible resource factory functions were only there to ease the conversion to the new factory functions. Since all child classes of VMObject now use the fallible resource factory functions, we don't need the infallible versions anymore.
2022-01-15Kernel: Make SharedInodeVMObject construction OOM-awarecreator1creeper1
This commit moves the allocation of the resources required for SharedInodeVMObject from its constructors to its factory functions. We're making this change to expose the fallibility of the allocation.
2022-01-15Kernel: Make PrivateInodeVMObject construction OOM-awarecreator1creeper1
This commit moves the allocation of the resources required for PrivateInodeVMObject from its constructors to its factory functions. We're making this change to expose the fallibility of the allocation.
2022-01-15Kernel: Make InodeVMOBject construction OOM-awarecreator1creeper1
This commit moves the allocation of the resources required for InodeVMObject from its constructors to the constructors of its child classes. We're making this change to give the child classes the chance to expose the fallibility of the allocation.
2022-01-15Kernel: Make AnonymousVMObject construction OOM-awarecreator1creeper1
This commit moves the allocation of the resources required for AnonymousVMObject from its constructors to its factory functions. We're making this change to expose the fallibility of the allocation.
2022-01-15Kernel: Make VMOBject construction OOM-awarecreator1creeper1
This commit moves the allocation of the resources required for VMObject from its constructors to the constructors of its child classes. We're making this change to give the child classes the chance to expose the fallibility of the allocation.
2022-01-15AK: Add a constructor from Span for FixedArraycreator1creeper1
This is particularly useful in the Kernel, where the physical pages of a VMObject are stored as a FixedArray but often passed around as a Span from which a new FixedArray should be cloned.
2022-01-15AK: Add a constructor from C-style arrays for FixedArraycreator1creeper1
We really want to be able to construct FixedArray from a list of non-copyable but movable objects. This constructor is useful for such things.
2022-01-15LibJS: Implement Date.prototype.getTimezoneOffsetTimothy Flynn
2022-01-15LibJS: Implement MakeDay without using AK::years_to_days_since_epochTimothy Flynn
Implementing years_to_days_since_epoch without a loop will be tricky. The TimeFromYear AO gives a good enough approximation for MakeDay until we figure that out.
2022-01-15LibJS: Move time conversion constants to the Date headerTimothy Flynn
These are needed outside of the Date object .cpp file, so move them to the header.
2022-01-15LibJS: Remove Core::DateTime logic from the Date object :^)Timothy Flynn
2022-01-15LibJS+js: Pretty-print Date objects using the ToDateString AOTimothy Flynn
2022-01-15LibJS: Re-implement the Date constructor / prototype for spec complianceTimothy Flynn
First, this adds a constructor to the Date object to be created from a plain double. This is a first step to removing Core::DateTime as the basis for the Date object. A subsequent commit will remove the now- unused data from the object. Next, this implements the constructor in accordance to the spec. The constructor when NewTarget is undefined no longer allocates a Date on the heap. The other constructor properly uses recently created AOs to handle time zone and ensure the created [[DateValue]] is valid. Other methods on the constructor (Date.now) have not been touched yet. Last, the prototype is reimplemented. Again, we use other AOs to handle time zones and time clipping. Not all prototypes are fixed; most of them are, but a few (e.g. Date.prototype.getTimezoneOffset) were not fixed, but left in a mostly unimplemented state for another commit. In all of the above, spec comments are added. This is a rather large change; but it's tough to do any of these parts individually without breaking everything else.
2022-01-15LibJS: Make the thisTimeValue AO publicTimothy Flynn
It will be needed by the Date constructor.
2022-01-15LibJS: Implement spec-compliant ToDateString and its underlying AOsTimothy Flynn
2022-01-15LibJS: Protect LocalTZA against non-finite timesTimothy Flynn
It is undefined behavior to cast from a double to an integer if the value does not fit in the limits of the integer.
2022-01-15LibJS: Do not negate offset in LocalTZA for isUTC=falseTimothy Flynn
In commmit 7d2834344a7635ec45aba28a0351feca8e5f1c17, I think I combined the definitions of the LocalTZA and UTC AOs in my head, and thought the offset should be negated within LocalTZA. Instead, the offset should be left untouched, and the UTC AO is responsible for doing the subtraction.
2022-01-15LibJS: Implement the LocalTime, UTC, and TimeWithinDay AOsTimothy Flynn
2022-01-15LibJS: Sort Date.prototype methods by spec orderTimothy Flynn
When viewing the code side-by-side with the spec, it's much nicer when everything is in the same order. Also fixes the spec link for Date.prototype.getMilliseconds (it pointed at setMilliseconds by mistake).
2022-01-15LibTimeZone: Canonicalize the current time zone and fall back to UTCTimothy Flynn
If the tzname is unknown, fall back to UTC for now. Unknown time zones are most likely due to not parsing RULE entries yet, but at the very least, it only makes sense for current_time_zone to return a time zone that LibTimeZone actually knows about.
2022-01-15Kernel: Don't remap already non-writable regions when they become CoWAndreas Kling
The only purpose of the remap() in Region::try_clone() is to ensure non-writable page table entries for CoW regions. If a region is already non-writable, there's no need to waste time updating the page tables.
2022-01-15Kernel: Don't bother with page tables for PROT_NONE mappingsAndreas Kling
When mapping or unmapping completely inaccessible memory regions, we don't need to update the page tables at all. This saves a bunch of time in some situations, most notably during dynamic linking, where we make a large VM reservation and immediately throw it away. :^)
2022-01-15Kernel: Use move() in Region::try_clone() to avoid a VMObject::unref()Andreas Kling
2022-01-15LibELF: Use shared memory mapping when loading ELF objectsAndreas Kling
There's no reason to make a private read-only mapping just for reading (and validating) the ELF headers, and copying out the data segments.
2022-01-15Kernel: Only register kernel regions with MemoryManagerAndreas Kling
We were already only tracking kernel regions, this patch just makes it more clear by having it reflected in the name of the registration helpers. We also stop calling them for userspace regions, avoiding some spinlock action in such cases.
2022-01-15Kernel: Remove old "region lookup cache" optimizationAndreas Kling
This optimization was added when region lookup was O(n), before we had the O(log n) RedBlackTree. Let's remove it to simplify the code, as we have no evidence that it remains valuable.