Commit graph

21662 commits

Author SHA1 Message Date
Jelle Raaijmakers d6a3f1fcd7 Kernel: Simplify execve shebang argument handling 2021-06-08 11:30:58 +02:00
Jelle Raaijmakers 250f8eccf3 LibCore: Support fine-grained failure behavior for ArgsParser 2021-06-08 11:30:58 +02:00
Luke 1dc31842cb LibJS: Add sequence expression bytecode generation 2021-06-08 11:20:10 +02:00
Max Wipfli cac94b1c16 Kernel: Implement InodeFile::stat() and simplify FileDescription::stat() 2021-06-08 11:12:31 +02:00
Andreas Kling 675b0aee24 Websites: Some updates for the serenityos.org front page
- Add link to the Discord server
- Remove reference to Freenode IRC channel since it's no longer used
- Add sponsorship links for Linus :^)
2021-06-08 10:56:52 +02:00
Luke de3ee701ce LibJS: Add conditional expression bytecode generation
Or, by its more common name, the ternary operator :^)
2021-06-08 09:53:56 +01:00
Gunnar Beutner 6da587b59b LibJS: Implement bytecode ops for logical expressions 2021-06-08 10:42:45 +02:00
Gunnar Beutner 216d27d4c1 LibJS: Convert values to boolean for JumpIfTrue/JumpIfFalse
Value::as_bool() might fail if the underlying value isn't already a
boolean value.
2021-06-08 10:42:45 +02:00
Idan Horowitz aefb7995f1 LibJS: Add the Symbol.species getter to the appropriate built-ins 2021-06-08 09:09:51 +01:00
Linus Groh 39c3aefe5d LibJS: Use to_property_key() a bunch in ReflectObject
Yay for correctness. :^)
2021-06-07 23:11:08 +01:00
Linus Groh 7565bf0590 LibJS: Remove redundant exception checks 2021-06-07 23:09:06 +01:00
Linus Groh 3fdad563e2 LibJS: Never omit setter/getter attributes in accessor descriptor object
These should not be omitted, an accessor with out getter or setter still
yields an undefined for the attribute in its descriptor object.
2021-06-07 23:07:13 +01:00
Linus Groh 8c964ef9f8 LibJS: Fix get_own_property_descriptor_object() field name order
This is defined by the spec: enumerable and configurable come last.
2021-06-07 23:02:52 +01:00
Linus Groh 4e555fae22 LibJS: Add missing cyclic prototype check to Object.setPrototypeOf() 2021-06-07 22:56:16 +01:00
Andreas Kling ebb40e7d7b LibJS: Use macros to generate the common unary/binary bytecode ops 2021-06-07 23:20:48 +02:00
Jelle Raaijmakers 3067ee9c4c Toolchain: Add gettext as a dependency to Dockerfile
We need `msgfmt` inside of the `gettext` package in order to build the
git port.
2021-06-07 22:46:53 +02:00
Jelle Raaijmakers 774fb4dede Ports: Make curl detect our OpenSSL port
Without a proper prefix, the `configure` script will probably pick up
the host's OpenSSL library. This change makes sure the script always
looks at the library present in the Serenity build dir.
2021-06-07 22:43:43 +02:00
Nick Miller 17c78be334 SoundPlayer: Enable stop button when play button clicked
Previously, if you play a file, then stop, then play again, the stop
button will be permanently disabled until you open a file again.

The stop button should be enabled whenever a file is loaded.

This commit fixes the GUI bug by enabling the stop button whenever the
play button is clicked (if a file is currently loaded).
2021-06-08 00:54:07 +04:30
Linus Groh e0a2c1544f LibJS: Fix whitespace errors in ASTCodegen.cpp 2021-06-07 21:19:12 +01:00
Linus Groh 9c0d83d11d LibJS: Add bytecode generation for BinaryOp::InstanceOf 2021-06-07 21:18:35 +01:00
Linus Groh 5e996de8c6 LibJS: Add bytecode generation for BinaryOp::In 2021-06-07 21:18:35 +01:00
Gunnar Beutner 93eae063a1 LibJS: Make sure that if expressions yield the correct value
When evaluated as an expression "if (true) { 3 } else { 5 }"
should yield 3. This updates the bytecode interpreter to make
it so.
2021-06-07 22:10:57 +02:00
Gunnar Beutner 2c10bd72f2 LibJS: Make sure scope expressions yield the correct value
When evaluated as an expression "{ 3 }" should yield 3. This updates
the bytecode interpreter to make it so.
2021-06-07 22:10:57 +02:00
Nick Miller ed5777eb0a LibAudio: WavLoader: Avoid reading partial samples
When samples are requested in `Audio::Loader::get_more_samples`,
the request comes in as a max number of bytes to read.

However, the requested number of bytes may not be an even multiple
of the bytes per sample of the loaded file. If this is the case, and
the bytes are read from the file/stream, then
the last sample will be a partial/runt sample, which then offsets
the remainder of the stream, causing white noise in playback.

This bug was discovered when trying to play 24-bit Wave files, which
happened to have a sample size that never aligned with the number
of requested bytes.

This commit fixes the bug by only reading a multiple of
"bytes per sample" for the loaded file.
2021-06-08 00:38:54 +04:30
Nick Miller 3938b56577 LibAudio+LibCore: Remove unnecessary IODeviceStreamReader.h
IODeviceStreamReader isn't pulling its weight.
It's essentially a subset of InputFileStream with only one user
(WavLoader).

This refactors WavLoader to use InputFileStream instead.
2021-06-08 00:38:54 +04:30
Brian Gianforcaro 06ea31d0d5 CatDog: Enhance the speech bubble artificial intelligence
Enable cat dog to greet you, and help you with yak shave sessions.
2021-06-07 21:52:16 +02:00
Nick Miller c3a60a5dcd LibGUI+SoundPlayer: Add Slider option to jump to cursor
When the cursor is clicked outside of the slider knob,
the current behavior is that it will step up or down by the
Slider page step amount.

This commit adds an option to jump the slider knob
directly to the where the mouse cursor is on mouse down events.

This behavior is disabled by default. It must be enabled with
`Slider::set_jump_to_cursor()`.

Jump to cursor is enabled in SoundPlayer since most music players
have this behavior.
2021-06-08 00:10:54 +04:30
Ryan Chandler 6612e026ba LibJS: Add <<, >> and >>> assignment operators 2021-06-07 21:23:11 +02:00
Luke 1e10965e61 LibJS: Add bytecode ops for <<, >> and >>> 2021-06-07 21:18:34 +02:00
Ryan Chandler 6681415f58 LibJS: Add support for various assignment operators 2021-06-07 21:18:19 +02:00
Ryan Chandler 18ac7fde12 LibJS: Add support for typed equality checks 2021-06-07 21:17:29 +02:00
Gunnar Beutner 9e69ffc1b1 LibJS: Add bytecode generation for EmptyStatement 2021-06-07 20:06:46 +01:00
Linus Groh 2b8a2542a0 LibJS: Add bytecode generation for DebuggerStatement
No-op. :^)
2021-06-07 20:05:50 +01:00
Linus Groh fa9bad912e LibJS: Add bytecode instructions for a bunch of unary operators
~, !, +, -, typeof, and void.
2021-06-07 19:53:47 +01:00
Linus Groh 54fc7079c6 LibJS: Remove redundant Value() from bytecode bitwise ops execute() 2021-06-07 19:53:22 +01:00
Gunnar Beutner 8ed5b7dcfa LibJS: Add bytecode ops for loading boolean and null values 2021-06-07 20:26:45 +02:00
Ryan Chandler 6e2b266534 LibJS: Fix AbstractInequals returning result of AbstractEquals 2021-06-07 20:25:56 +02:00
Luke ae763f1ade LibJS: Add bytecode ops for &, | and ^ 2021-06-07 20:17:24 +02:00
Gunnar Beutner 4be3374b24 LibJS: Add bytecode ops for >, >= and <= 2021-06-07 20:09:23 +02:00
Nick Miller 73b8acf432 CONTRIBUTING.md: Add Pull Request Q&A section
This is an attempt to clarify general pull request etiquette.
Answers are copied verbatim from `@awesomekling`'s responses in Discord.
2021-06-07 20:08:35 +02:00
Gunnar Beutner 55f0791b13 LibJS: Add bytecode instructions for modulo and exponentiation 2021-06-07 19:40:27 +02:00
Jelle Raaijmakers 6af9d87258 Toolchain: Add ccache to Dockerfile
Following up on 2d38d56e, we were missing this in our Dockerfile.
2021-06-07 19:22:03 +02:00
Gunnar Beutner 3c5ce9b5b7 LibJS: Add bytecode instructions for multiplication and division 2021-06-07 19:21:36 +02:00
Jelle Raaijmakers 5183952d1d Ports: Add Beneath a Steel Sky 2021-06-07 19:04:57 +02:00
Andreas Kling 4776c50d5f LibJS: Remove unused Bytecode::Block::m_buffer_end 2021-06-07 18:30:39 +02:00
Andreas Kling 312297ac38 LibJS: Add placeholder bytecode block sealing mechanism
After compiling bytecode, we should mark the memory read-only.
This currently does not work because it breaks instruction destruction.

I'm adding this anyway with a FIXME so we don't forget about it. :^)
2021-06-07 18:11:59 +02:00
Andreas Kling 4ba2eb8fe5 LibJS: Cache generated bytecode for ScriptFunction
It's silly to generate new bytecode every time you call a function.
Let's just cache the code instead. :^)
2021-06-07 18:11:59 +02:00
Andreas Kling 7cbe4daa7c LibJS: Move bytecode debug spam behind JS_BYTECODE_DEBUG :^) 2021-06-07 18:11:59 +02:00
Andreas Kling e7d69c5d3c LibJS: Devirtualize and pack the bytecode stream :^)
This patch changes the LibJS bytecode to be a stream of instructions
packed one-after-the-other in contiguous memory, instead of a vector
of OwnPtr<Instruction>. This should be a lot more cache-friendly. :^)

Instructions are also devirtualized and instead have a type field
using a new Instruction::Type enum.

To iterate over a bytecode stream, one must now use
Bytecode::InstructionStreamIterator.
2021-06-07 18:11:59 +02:00
Andreas Kling 845f2826aa LibJS: Reset Bytecode::Interpreter's m_return_value when leaving run()
Otherwise it will cause complete unwind since all parent run() loops
will see the same m_return_value being non-empty and break out.
2021-06-07 18:11:59 +02:00