summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-12-07UserspaceEmulator: Implement MOV_RM16_segAndreas Kling
2022-12-07UserspaceEmulator: Implement MOV_seg_RM32 and MOV_seg_RM16Andreas Kling
This allows hosted programs to write to segment registers. :^)
2022-12-07UserspaceEmulator: Implement PUSH_{CS,DS,ES,FS,GS,SS}Andreas Kling
You can now push the segment registers on the stack! :^)
2022-12-07UserspaceEmulator: Add SoftCPU getters for FS and GSAndreas Kling
2022-12-07UserspaceEmulator: Initialize the FS segment on startupAndreas Kling
Set it to 0x23, matching the initial value in a native process.
2022-12-07LibSQL+SQLServer+sql: Send and parse the correct number of changed rowsTimothy Flynn
The sql REPL had the created/updated rows swapped by mistake. Also make sure SQLServer fills in the correct value depending on the executed command, and that the DELETE command indicates the rows it deleted.
2022-12-07LibSQL+SQLServer+SQLStudio+sql: Send result rows over IPC as SQL::ValueTimothy Flynn
We've been sending the values converted to a string, but now that the Value type is transferrable over IPC, send the values themselves. Any client that wants the value as a string may do so easily, whereas this will allow less trivial clients to avoid string parsing.
2022-12-07SQLServer: Do not store statement execution results at the class levelTimothy Flynn
If a statement is executed multiple times in quick succession, we may overwrite the results of a previous execution. Instead of storing the result, pass it around as it is sent to the client.
2022-12-07LibSQL+SQLServer+SQLStudio+sql: Propagate connection errors immediatelyTimothy Flynn
Currently, when clients connect to SQL server, we inform them of any errors opening the database via an asynchronous IPC. But we already know about these errors before returning from the connect() IPC, so this roundabout propagation is a bit unnecessary. Now if we fail to open the database, we will simply not send back a valid connection ID. Disconnect has a similar story. Rather than disconnecting and invoking an asynchronous IPC to inform the client of the disconnect, make the disconnect() IPC synchronous (because all it does is remove the database from the map of open databases). Further, the only user of this command is the SQL REPL when it wants to connect to a different database, so it makes sense to block it. This did require moving a bit of logic around in the REPL to accommodate this change.
2022-12-07LibSQL+SQLServer+SQLStudio+sql: Allocate per-statement-execution IDsTimothy Flynn
In order to execute a prepared statement multiple times, and track each execution's results, clients will need to be provided an execution ID. This will create a monotonically increasing ID each time a prepared statement is executed for this purpose.
2022-12-07LibSQL+SQLServer+SQLStudio+sql: Use proper types for SQL IPC and IDsTimothy Flynn
When storing IDs and sending values over IPC, this changes SQLServer to: 1. Stop using -1 as a nominal "bad" ID. Store the IDs as unsigned, and use Optional in the one place that the IPC needs to indicate an ID was not allocated. 2. Let LibIPC encode/decode enumerations (SQLErrorCode) on our behalf. 3. Use size_t for array sizes.
2022-12-07IPCCompiler: Mark size_t as a primitive typeTimothy Flynn
This allows size_t to be used within an IPC message without being passed by const-reference.
2022-12-07SQLServer+SQLStudio+sql: Allow sending placeholder values to SQLServerTimothy Flynn
2022-12-07SQLServer: Parse SQL a single time to actually "prepare" the statementTimothy Flynn
One of the benefits of prepared statements is that the SQL string is parsed just once and re-used. This updates SQLStatement to do just that and store the parsed result.
2022-12-07LibSQL: Add an IPC encoder/decoder for SQL::ValueTimothy Flynn
This will allow clients to send placeholder values for prepared statements over IPC.
2022-12-07LibSQL: Parse and execute sequential placeholder valuesTimothy Flynn
This partially implements SQLite's bind-parameter expression to support indicating placeholder values in a SQL statement. For example: INSERT INTO table VALUES (42, ?); In the above statement, the '?' identifier is a placeholder. This will allow clients to compile statements a single time while running those statements any number of times with different placeholder values. Further, this will help mitigate SQL injection attacks.
2022-12-07LibSQL: Partially implement the UPDATE commandTimothy Flynn
This implements enough to update rows filtered by a WHERE clause.
2022-12-07Meta+Userland: Pass Gfx::FloatSize by valueMacDue
Just two floats like Gfx::FloatPoint.
2022-12-07Meta+Userland: Pass Gfx::IntSize by valueMacDue
Just two ints like Gfx::IntPoint.
2022-12-07Meta+Userland: Pass Gfx::FloatPoint by valueMacDue
Just a small 8-byte value like Gfx::IntPoint.
2022-12-07Meta+Userland: Pass Gfx::IntPoint by valueMacDue
This is just two ints or 8 bytes or the size of the reference on x86_64 or AArch64.
2022-12-07Meta+Userland: Pass Gfx::Color by valueMacDue
Gfx::Color is always 4 bytes (it's just a wrapper over u32) it's less work just to pass the color directly. This also updates IPCCompiler to prevent from generating Gfx::Color const &, which makes replacement easier.
2022-12-07LibGL: Generate GL_OUT_OF_MEMORY error in `glBufferData` when OOMMarcus Nilsson
2022-12-07LibJS: Remove redundant AK_MAKE_NON{COPYABLE,MOVABLE} from Symbol classLinus Groh
These are already applied to the Cell base class.
2022-12-07LibJS: Move creation of global symbols into Symbol.for()Linus Groh
This is now according to the spec. Having a non-standard lookup API that creates symbols on the fly doesn't seem ideal.
2022-12-07LibJS: Add const/non-const VM::global_symbol_registry() gettersLinus Groh
This will allow us to replace the strange get_global_symbol() API that creates symbols on the fly when not found.
2022-12-07LibJS: Store NonnullGCPtr<Symbol> values in m_global_symbol_registryLinus Groh
2022-12-07LibJS: Rename m_global_symbol_map to m_global_symbol_registryLinus Groh
The spec calls it "GlobalSymbolRegistry".
2022-12-07LibJS: Convert MarkupGenerator to the new StringLinus Groh
2022-12-07AK: Add StringView(String const&) constructorLinus Groh
This allows us to pass the new String type to functions that take a StringView directly, having to call bytes_as_string_view() every time gets old quickly.
2022-12-07LibJS: Move initialize_instance_elements() from VM to ObjectLinus Groh
This makes more sense as an Object method rather than living within the VM class for no good reason. Most of the other 7.3.xx AOs already work the same way. Also add spec comments while we're here.
2022-12-07LibJS: Add spec link and comment to VM::execution_context_stack()Linus Groh
2022-12-07LibJS: Add spec link and comment to VM::running_execution_context()Linus Groh
2022-12-06LibJS: Remove forgotten VM::construct() declarationLinus Groh
This has been a standalone AO function for a long time now.
2022-12-06LibJS: Remove unused VM::join_arguments() functionLinus Groh
The last uses of this were removed in ff5e07d.
2022-12-06LibWeb: Ignore -Wshadow in TRY_OR_RETURN_OOM()Linus Groh
2022-12-06AK: Ignore -Wshadow in TRY() and MUST()Linus Groh
This makes the warning in CLion disappear when nesting them.
2022-12-06AK: Add a helper macro to temporarily ignore diagnostics with _Pragma()Linus Groh
2022-12-063DFileViewer: Properly propagate errors from WavefrontOBJLoaderMaciej
Fixes 3 FIXMEs.
2022-12-06AK: Introduce the new String, replacement for DeprecatedStringAndreas Kling
DeprecatedString (formerly String) has been with us since the start, and it has served us well. However, it has a number of shortcomings that I'd like to address. Some of these issues are hard if not impossible to solve incrementally inside of DeprecatedString, so instead of doing that, let's build a new String class and then incrementally move over to it instead. Problems in DeprecatedString: - It assumes string allocation never fails. This makes it impossible to use in allocation-sensitive contexts, and is the reason we had to ban DeprecatedString from the kernel entirely. - The awkward null state. DeprecatedString can be null. It's different from the empty state, although null strings are considered empty. All code is immediately nicer when using Optional<DeprecatedString> but DeprecatedString came before Optional, which is how we ended up like this. - The encoding of the underlying data is ambiguous. For the most part, we use it as if it's always UTF-8, but there have been cases where we pass around strings in other encodings (e.g ISO8859-1) - operator[] and length() are used to iterate over DeprecatedString one byte at a time. This is done all over the codebase, and will *not* give the right results unless the string is all ASCII. How we solve these issues in the new String: - Functions that may allocate now return ErrorOr<String> so that ENOMEM errors can be passed to the caller. - String has no null state. Use Optional<String> when needed. - String is always UTF-8. This is validated when constructing a String. We may need to add a bypass for this in the future, for cases where you have a known-good string, but for now: validate all the things! - There is no operator[] or length(). You can get the underlying data with bytes(), but for iterating over code points, you should be using an UTF-8 iterator. Furthermore, it has two nifty new features: - String implements a small string optimization (SSO) for strings that can fit entirely within a pointer. This means up to 3 bytes on 32-bit platforms, and 7 bytes on 64-bit platforms. Such small strings will not be heap-allocated. - String can create substrings without making a deep copy of the substring. Instead, the superstring gets +1 refcount from the substring, and it acts like a view into the superstring. To make substrings like this, use the substring_with_shared_superstring() API. One caveat: - String does not guarantee that the underlying data is null-terminated like DeprecatedString does today. While this was nifty in a handful of places where we were calling C functions, it did stand in the way of shared-superstring substrings.
2022-12-06Meta: Manually compute the length of the WASM JS REPL source stringTimothy Flynn
The REPL does not have a reliable way to tell us the UTF-8 byte count of the source string, so we must use strlen() ourselves.
2022-12-06LibJS: Intercept returns through finally blocks in BytecodeHendiadyoin1
This is still not perfect, as we now actually crash in the `try-finally-continue` tests, while we now succeed all `try-catch-finally-*` tests. Note that we do not yet go through the finally block when exiting the unwind context through a break or continue.
2022-12-06LibJS: Don't try to manage unwind contexts in the execution loop in BCHendiadyoin1
We are already doing this in a good manner via the generated code, doing so in the execution loop as well will cause us to pop contexts multiple times, which is not very good.
2022-12-06LibJS: Remove FinishUnwind instructionHendiadyoin1
This is essentially a LeaveUnwind+Jump, so lets just do that, that will make it easier to optimize it, or see unwind state transitions
2022-12-06LibJS: Leave unwind contexts on enter of finally blocks in BytecodeHendiadyoin1
Before we were doing so while exiting the catch-block, but not when exiting the try-block. This now centralizes the responsibility to exit the unwind context to the finalizer, ignoring return/break/continue. This makes it easier to handle the return case in a future commit.
2022-12-06AK: Take the bump-allocated chunk header into account in destroy_all()Ali Mohammad Pur
Previously we allowed the end_offset to be larger than the chunk itself, which made it so that certain input sizes would make the logic attempt to delete a nonexistent object. Fixes #16308.
2022-12-06Everywhere: Rename to_{string => deprecated_string}() where applicableLinus Groh
This will make it easier to support both string types at the same time while we convert code, and tracking down remaining uses. One big exception is Value::to_string() in LibJS, where the name is dictated by the ToString AO.
2022-12-06AK+Everywhere: Rename String to DeprecatedStringLinus Groh
We have a new, improved string type coming up in AK (OOM aware, no null state), and while it's going to use UTF-8, the name UTF8String is a mouthful - so let's free up the String name by renaming the existing class. Making the old one have an annoying name will hopefully also help with quick adoption :^)
2022-12-06LibWeb: Do not try to place out-of-flow blocks in anonymous nodesAliaksandr Kalenik
Currently placing floating blocks in anonymous nodes makes https://stackoverflow.com/ hang so let's leave it to try to place only absolute blocks in anonymous nodes for now. Also it breaks flex formatting when element with floating is flex child.
2022-12-05Meta: Initialize the WASM JS REPL with a known time zoneTimothy Flynn
The runtime environment of the WASM REPL does not have time zone information; the file system is virtual (does not have /etc/localtime), and the TZ environment variable is not set. This causes LibTimeZone to always fall back to UTC. Instead, we can get the time zone from the user's browser before we enter this limited environment. The REPL website will pass the time zone into the WASM REPL.