Commit graph

780 commits

Author SHA1 Message Date
Tom
75f61fe3d9 AK: Make RefPtr, NonnullRefPtr, WeakPtr thread safe
This makes most operations thread safe, especially so that they
can safely be used in the Kernel. This includes obtaining a strong
reference from a weak reference, which now requires an explicit
call to WeakPtr::strong_ref(). Another major change is that
Weakable::make_weak_ref() may require the explicit target type.
Previously we used reinterpret_cast in WeakPtr, assuming that it
can be properly converted. But WeakPtr does not necessarily have
the knowledge to be able to do this. Instead, we now ask the class
itself to deliver a WeakPtr to the type that we want.

Also, WeakLink is no longer specific to a target type. The reason
for this is that we want to be able to safely convert e.g. WeakPtr<T>
to WeakPtr<U>, and before this we just reinterpret_cast the internal
WeakLink<T> to WeakLink<U>, which is a bold assumption that it would
actually produce the correct code. Instead, WeakLink now operates
on just a raw pointer and we only make those constructors/operators
available if we can verify that it can be safely cast.

In order to guarantee thread safety, we now use the least significant
bit in the pointer for locking purposes. This also means that only
properly aligned pointers can be used.
2020-11-10 19:11:52 +01:00
Andreas Kling
07a2d22c33 HackStudio: Scroll embedded terminals to bottom upon command execution
It was kinda annoying that you had to scroll down manually every time
you started a new build while looking at some error in the scrollback.
2020-11-10 11:55:18 +01:00
asynts
3b3edbc4d2 AK: Rename new_out to out and new_warn to warn. 2020-11-09 16:21:29 +01:00
Andreas Kling
9af1a4b9b1 UserspaceEmulator: Support the first two levels of CPUID
GCC uses these when deciding which memcpy implementation to use.
2020-11-08 22:47:02 +01:00
Andreas Kling
c4dd77a170 UserspaceEmulator+LibC: Have UE notice realloc() and update accounting
When a mallocation is shrunk/grown without moving, UE needs to update
its precise metadata about the mallocation, since it tracks *exactly*
how many bytes were allocated, not just the malloc chunk size.
2020-11-08 10:43:15 +01:00
Andreas Kling
ae10c9d8ec UserspaceEmulator: Fix busted backtraces with --report-to-debug
Some of the output was still going to stderr in this mode, we need to
use reportln() to make sure it goes to the right place.
2020-11-08 01:15:02 +01:00
Andreas Kling
013c7ccd73 UserspaceEmulator: Don't audit accesses within realloc(), malloc_size()
These functions access malloc-related memory outside of UE's accounting
boundaries, so just ignore them.
2020-11-08 01:15:02 +01:00
Andreas Kling
6913e2ab99 HackStudio: Run clang-format 2020-11-03 13:40:24 +01:00
Zac
85d65b06ab HackStudio: Store and restore the scrollbar values of ProjectFiles when they are closed and reopened from the list of open files. 2020-11-03 13:34:38 +01:00
Kesse Jones
6861cb8a23 HackStudio: Removes the file from the list of open files
When a file is deleted from the project it will
also be removed from the list of open files
2020-11-02 20:58:24 +01:00
Kesse Jones
8c4a2c34d3 HackStudio: Fixed opening the project by always opening the main.cpp file
Now when opening the project a search will be made for
a file with the extension cpp or js and opening it.
If not found, the first file will be opened.
2020-11-01 18:47:43 +01:00
Uma Sankar Yedida
d2beff41c9 Profiler: Set window title based on the selected View
This will help us identify which View that we are currently looking at.
2020-10-31 13:38:51 +01:00
Andreas Kling
aef56159a8 LibGUI: Add Widget focus policies
Every widget now has a GUI::FocusPolicy that determines how it can
receive focus:

- NoFocus: The widget is not focusable (default)
- TabFocus: The widget can be focused using the tab key.
- ClickFocus: The widget can be focused by clicking on it.
- StrongFocus: Both of the above.

For widgets that have a focus proxy, getting/setting the focus policy
will affect the proxy instead.
2020-10-30 17:03:28 +01:00
Andreas Kling
6365b44773 HackStudio: Use GUI::TextDocument::span_at() 2020-10-29 23:52:31 +01:00
Andreas Kling
4e0ab1dd22 HackStudio: Remove ProcessStateWidget
This was a little banner that would pop up when running something in
the "Build" tab. It didn't look very good and it was mostly distracting
how it would pop in and out of the window.
2020-10-29 23:40:20 +01:00
Andreas Kling
18739ba87e LanguageServers/Cpp: Find the right token under the cursor
When the cursor is immediately to the right of a token, the cursor's
column will be token.end.column + 1, so take this into account when
choosing which token to autocomplete.
2020-10-29 23:32:18 +01:00
Andreas Kling
d28127c807 LanguageServers/Cpp: Make token_in_position() return a StringView
This avoids a whole bunch of string allocation churn.
2020-10-29 23:32:18 +01:00
Andreas Kling
aaf4ec62cf LanguageServers/Cpp: Avoid some unnecessary vector copies 2020-10-29 23:32:18 +01:00
Andreas Kling
c3a79e1483 HackStudio: Don't track ctrl key state manually
Since we only need it in the mouse and key event handlers, we can get
the ctrl key state from the event. :^)
2020-10-29 23:32:18 +01:00
Andreas Kling
0391806eec LibGUI: Shrink the default selection rect of TreeView items
Instead of filling the whole row with selection color, only fill behind
the text. This gives a snugger, more focused appearance.

For embedders that want the entire row to get filled with the selection
color when selected, they can opt in to the old behavior by calling
TreeView::set_should_fill_selected_rows(). This is used by Profiler.
2020-10-27 20:33:30 +01:00
Andreas Kling
709b3ccb0a HackStudio: Reset the cursor to I-beam when switching between files 2020-10-26 16:43:28 +01:00
Andreas Kling
0bc740ab7f HackStudio: Run clang-format 2020-10-26 14:58:17 +01:00
Andreas Kling
3d50923c4d HackStudio: Allow toggling line wrapping on/off from the Edit menu :^) 2020-10-26 14:29:30 +01:00
Andreas Kling
333ab53b8d HackStudio: Add a simple "open files" view
Instead of files disappearing after you switch to something else,
we now keep track of them in a little ListView below the project tree.

You can return to any previously opened file by activating it in the
open files list. :^)
2020-10-26 14:29:26 +01:00
Andreas Kling
e6505a95f1 HackStudio: Include missing files in the project tree
If some file is in the project but missing on disk, let's still show
it in the project tree (instead of obscuring the fact that a file
is missing.)
2020-10-25 14:38:07 +01:00
Andreas Kling
47a3d81731 HackStudio: Don't assert when project has non-existent file
If a project contains "foo.cpp" but we can't open "foo.cpp", just go
with an empty text document for now, and we'll create "foo.cpp" when
the user saves.
2020-10-25 14:38:07 +01:00
AnotherTest
4d756c7d2d UserspaceEmulator: Remove some unneeded String copies 2020-10-25 10:13:03 +01:00
AnotherTest
57f0f8c9b7 UserspaceEmulator: Handle SO_BINDTODEVICE in setsockopt 2020-10-25 10:13:03 +01:00
AnotherTest
290e7957b7 UserspaceEmulator: Add support for setsid 2020-10-25 10:13:03 +01:00
AnotherTest
fcc38422c6 UserspaceEmulator: Add support for set_thread_name
It should be noted that creating threads is still not supported.
2020-10-25 10:13:03 +01:00
AnotherTest
617c5ba045 UserspaceEmulator: Add support for fchown 2020-10-25 10:13:03 +01:00
AnotherTest
41aa78f6de UserspaceEmulator: Add support for chmod 2020-10-25 10:13:03 +01:00
AnotherTest
b1d36243e5 UserspaceEmulator: Add support for setgroups 2020-10-25 10:13:03 +01:00
AnotherTest
457e00f319 UserspaceEmulator: Add support for sched_(g s)etparam 2020-10-25 10:13:03 +01:00
AnotherTest
33730cbd92 UserspaceEmulator: Add support for some more ioctl() requests 2020-10-25 10:13:03 +01:00
AnotherTest
aee0df19c1 UserspaceEmulator: Add support for emulating SC_mount 2020-10-25 10:13:03 +01:00
AnotherTest
9afe9069a9 UserspaceEmulator: Optionally write reports to the debug log
...and take a flag '--report-to-debug' that determines this behaviour.
2020-10-25 10:13:03 +01:00
asynts
61e73b1a7b AK: Introduce SourceGenerator::fork().
Previously, I abused the copy constructor, this is a lot better.
2020-10-24 12:56:25 +02:00
Lenny Maiorani
d1fe6a0b53
Everywhere: Redundant inline specifier on constexpr functions (#3807)
Problem:
- `constexpr` functions are decorated with the `inline` specifier
  keyword. This is redundant because `constexpr` functions are
  implicitly `inline`.
- [dcl.constexpr], §7.1.5/2 in the C++11 standard): "constexpr
  functions and constexpr constructors are implicitly inline (7.1.2)".

Solution:
- Remove the redundant `inline` keyword.
2020-10-20 18:08:13 +02:00
Andreas Kling
be4005cb9e Profiler: Implement "Top functions" feature like Instruments.app has
This view mode takes every stack frame and turns it into a root in the
profile graph. This allows functions that are called from many places
to bubble up to the top. It's a very handy way to discover heavy things
in a profile that are otherwise obscured by having many callers.
2020-10-19 20:08:57 +02:00
Andreas Kling
1d96ecf148 Everywhere: Add missing <AK/TemporaryChange.h> includes
Don't rely on HashTable.h pulling this in.
2020-10-15 23:49:53 +02:00
Paul Scharnofske
d94f674bbb
Use new format functions in remaining DevTools. (#3755)
* AK: Add formatter for JsonValue.

* Inspector: Use new format functions.

* Profiler: Use new format functions.

* UserspaceEmulator: Use new format functions.
2020-10-13 18:34:27 +02:00
asynts
0c5497829e IPCCompiler: Use new SourceGenerator class. 2020-10-12 19:40:49 +02:00
Linus Groh
2d84c0c184 HackStudio: Fix running JavaScript files
s/String::format/String::formatted/ - the command was not being
formatted properly.
2020-10-10 00:53:09 +02:00
asynts
7c4fb2b804 HackStudio: Use new format functions. 2020-10-09 20:52:17 +02:00
Linus Groh
b797de3adf HackStudio: Replace InProcessWebView with OutOfProcessWebView 2020-10-08 23:20:52 +02:00
Andreas Kling
f31ff86d14 IPCCompiler: Declare nested namespaces with a single "namespace" 2020-10-05 21:29:06 +02:00
AnotherTest
6b55b007dd HackStudio: Add a Shell language server 2020-10-04 23:12:28 +02:00
AnotherTest
34039d6639 HackStudio: Do not change the cursor in the LSP autocomplete request
The C++ completion somehow depends on this, so move that behaviour into
the C++ language server instead.
2020-10-04 23:12:28 +02:00
AnotherTest
9e73b0b696 HackStudio: Relay completions requests to the language server unfiltered
Previously, the client would decide when to ask the server for
completions, and it would only do so for identifiers that had spans
(determined via the highlighter!).
Swap this around and make the server decide if it wants to complete
something.
This commit also adds a CompletionKind (which only has one value:
Identifier), to work with other kinds of completions as well.
2020-10-04 23:12:28 +02:00