Age | Commit message (Collapse) | Author |
|
Before this change, we did a non-specific EOI, which could lead to
problems with other IRQs that are handled in the PIC. Since the original
8259A datasheet permits such functionality and we are not losing any
functionality, this change is acceptable even though we don't experience
problems with the EOI currently.
|
|
This is not a complete fix, since spurious IRQs under heavy loads can
still occur. However, this fix limits the amount of spurious IRQs.
It is encouraged to provide a better fix in the future, probably
something that takes into account handling of PCI level-triggered
interrupts.
|
|
Installing an interrupt handler on the syscall IDT vector can lead to
fatal results, so we must assert if that happens.
|
|
Now we don't send raw numbers, but we let the IRQController object to
figure out the correct IRQ number.
This helps in a situation when we have 2 or more IOAPICs, so if IOAPIC
1 is assigned for IRQs 0-23 and IOAPIC 2 is assigned for IRQs 24-47,
if an IRQHandler of IRQ 25 invokes disable() for example, it will call
his responsible IRQController (IOAPIC 2), and the IRQController will
subtract the IRQ number with his assigned offset, and the result is that
the second redirection entry in IOAPIC 2 will be masked.
|
|
We don't return blindly the IRQ controller's model(), if the Spurious
IRQ handler is installed in IOAPIC environment, it's misleading to
return "IOAPIC" string since IOAPIC doesn't really handle Spurious
IRQs, therefore we return a "" string.
|
|
|
|
|
|
This change prevents a race condition, in which case we send a command
and we are losing an interrupt.
|
|
The Spurious Interrupt Handler number that is written to
APIC_REG_SIV is correct now.
|
|
|
|
|
|
|
|
|
|
|
|
You can now throw exceptions by calling Interpreter::throw_exception().
Anyone who calls ASTNode::execute() needs to check afterwards if the
Interpreter now has an exception(), and if so, stop what they're doing
and simply return.
When catching an exception, we'll first execute the CatchClause node
if present. After that, we'll execute the finalizer block if present.
This is unlikely to be completely correct, but it's a start! :^)
|
|
This is the first step towards support exceptions. :^)
|
|
|
|
This momentarily handles the CSS property "position: absolute;" in
combination with the properties "top" and "left", so that elements can
be placed anywhere on the page independently from their parents.
Statically positioned elements ignore absolute positioned elements when
calculating their position as they don't take up space.
|
|
We now unwind until the nearest function-level scope on the scope stack
when executing a return statement.
|
|
A bunch of code was relying on this not happenind, in particular the
parsing of "for" statements. Reorganized things so they work again.
|
|
We can now handle scripts with if/else in LibJS. Most of the changes
are about fixing IfStatement to store the consequent and alternate node
as Statements.
Interpreter now also runs Statements, rather than running ScopeNodes.
|
|
When the Heap is going down, it's our last chance to run destructors,
so add a separate collector mode where we simply skip over the marking
phase and go directly to sweeping. This causes everything to get swept
and all live cells get destroyed.
This way, valgrind reports 0 leaks on exit. :^)
|
|
|
|
String.h no longer pulls in StringView.h. We do this by moving a bunch
of String functions out-of-line.
|
|
|
|
You can now get a full Linux build of the "js" test program by simply
building in Meta/Lagom :^)
|
|
Well that was easy. LibJS can now run on Linux :^)
|
|
I bet we could be smarter here and use arc4random() on systems where
it is present. I'm not sure how to detect it though.
|
|
|
|
Ever closer to C++20! Also fix up some of those pesky "'s
|
|
|
|
These functions (rAF and cAF) should eventually stop using raw ID's
from GUI::DisplayLink as their identifiers. That's a FIXME for now. :^)
|
|
We now support rAF, driven by GUI::DisplayLink callbacks. It's a bit
strange how we keep registering new callbacks over and over.
That's something we can definitely optimize.
This allows you to update animations/whatever without doing it more
often than the browser can display.
|
|
This patch adds GUI::DisplayLink, a mechanism for registering callbacks
that will fire at the display refresh rate.
Note that we don't actually know the screen refresh rate, but this is
instead completely driven by WindowServer's compositing timer. For all
current intents and purposes it does the job well enough. :^)
|
|
|
|
|
|
This makes selector matching a lot more efficient, and also reduces the
number of strings on the heap.
|
|
|
|
|
|
Attribute names occur again and again.
|
|
And share the code with String by moving the logic to StringUtils. :^)
|
|
|
|
This makes variable and property lookups a lot faster since comparing
two FlyStrings is O(1).
|
|
FlyString is a flyweight string class that wraps a RefPtr<StringImpl>
known to be unique among the set of FlyStrings. The class is very
unoptimized at the moment.
When to use FlyString:
- When you want O(1) string comparison
- When you want to deduplicate a lot of identical strings
When not to use FlyString:
- For strings that don't need either of the above features
- For strings that are likely to be unique
|
|
|
|
|
|
We can also remove an outdated FIXME as dbg() does now support unsigned
longs :^)
|
|
Let's use the helper function for this :)
|
|
Let's rip off the band-aid
|
|
Now expanding a tilde isn't hardcoded to just work for `cd`. It is instead
expanded while processing shell arguments. Autocompletion still doesn't
work, but this is definitely an improvement over the last iteration.
|