Andreas Kling
9aaf19f4de
LibJS: Do a garbage collection every N allocations (N=10'000)
...
To prevent the heap from growing infinitely large, we now do a full GC
every 10'000 allocations. :^)
2020-04-06 15:54:46 +02:00
Emanuele Torre
1d6c8724b9
LibJS: Fix some tests for Math.min()
...
In some of the tests in Math.min.js, we were testing Math.max() instead
of Math.min()
2020-04-06 15:14:34 +02:00
Emanuele Torre
ba67fc68b8
LibJS: Rename variable "max" to "min" in MathObject::min() ( #1665 )
2020-04-06 14:08:56 +02:00
Andreas Kling
67f7763ab9
LibJS: Object needs to protect values in its storage
...
Otherwise the garbage collector will eat them way too soon! This made
it impossible to use "js -g" without crashing.
2020-04-06 13:35:20 +02:00
Andreas Kling
e323246517
Meta: Add missing copyright headers
2020-04-06 11:09:01 +02:00
Linus Groh
f5dacfbb5b
LibJS: Add Math.{cos,sin,tan}()
2020-04-06 10:58:16 +02:00
Linus Groh
04a36b247b
LibJS: Simplify MathObject functions
2020-04-06 10:58:16 +02:00
Andreas Kling
6e7713a5f4
LibJS: Remove unnecessary malloc+free in AssignmentExpression::execute
...
We were creating a temporary AK::Function for no good reason, and this
was dominating profiles. Reorganize the code so it's not necessary.
2020-04-06 08:26:26 +02:00
Andreas Kling
003741db1c
LibJS: Add Math.min()
2020-04-06 08:26:26 +02:00
Linus Groh
9e7dcaa106
LibJS: Return -Infinity in Math.max() with no argument
2020-04-05 19:30:47 +02:00
Andreas Kling
8bfee015bc
LibJS: Make Object::to_string() call the "toString" property if present
2020-04-05 18:19:56 +02:00
Andreas Kling
a7b21ec0f4
LibJS: Add Array.prototype.toString()
2020-04-05 18:07:41 +02:00
Maxim Brunnmeier
2c4a5849f6
LibJS: Fix do..while parsing by consuming parentheses explicitly ( #1652 )
...
Before this patch the parser accepted conditions without enclosing
parentheses (like: .."while number < 9").
2020-04-05 16:57:01 +02:00
AnotherTest
7b54274ac5
LibJS: Report the start position of a token as its line column
2020-04-05 16:11:13 +02:00
AnotherTest
cdb627a516
LibJS: Allow lexer to run without logging errors
2020-04-05 16:11:13 +02:00
Linus Groh
4509350391
LibJS: Remove assert function from exponentiation-basic.js
2020-04-05 16:01:46 +02:00
Linus Groh
30ba2c7cec
LibJS: Simplify Math-constants.js test
...
By borrowing an "expect close" function from LibM/TestMath.cpp, we can
make this a lot simpler. Also the parser now understands decimals!
2020-04-05 16:01:46 +02:00
Linus Groh
0d7a1c3157
LibJS: Update to-number-basic.js test
...
Uncomment lines that are now parsing correctly :^)
2020-04-05 16:01:46 +02:00
Linus Groh
2f775a925b
LibJS: Fix Math.SQRT1_2
...
The value of Math.SQRT1_2 was zero as we were dividing two integers.
2020-04-05 16:01:46 +02:00
Stephan Unverwerth
500f6d9e3a
LibJS: Add numeric literal parsing for different bases and exponents
2020-04-05 16:01:22 +02:00
Linus Groh
0403845d3e
LibJS: Implement exponentiation (** operator)
2020-04-05 15:32:06 +02:00
Linus Groh
eafd3dbaf8
LibJS: Rename BinaryOp::{Plus,Minus,Asterisk,Slash}
2020-04-05 15:31:12 +02:00
Brian Gianforcaro
bc40908d32
LibJS: Use the native assert() implementation now avaiable in 'js -t'
...
Switch the LibJS test suite to use the native assert implementation
surfaced inside the js repl when it's launched in test mode.
2020-04-05 15:28:45 +02:00
Brian Gianforcaro
1e67efc5c1
Lagom: Add clang address/memory/undefined-behavior analyzer support
...
Adding the ability to turn on Clang analyzer support in the Lagom build.
Right now the following are working warning free on the LibJS test suite:
-DENABLE_MEMORY_SANITIZER:BOOL=ON
-DENABLE_ADDRESS_SANITIZER:BOOL=ON
The following analyzer produces errors when running the LibJS test suite:
-DENABLE_UNDEFINED_SANITIZER:BOOL=ON
2020-04-05 12:49:06 +02:00
Brian Gianforcaro
dd112421b4
LibJS: Plumb line and column information through Lexer / Parser
...
While debugging test failures, it's pretty frustrating to have to go do
printf debugging to figure out what test is failing right now. While
watching your JS Raytracer stream it seemed like this was pretty
furstrating as well. So I wanted to start working on improving the
diagnostics here.
In the future I hope we can eventually be able to plumb the info down
to the Error classes so any thrown exceptions will contain enough
metadata to know where they came from.
2020-04-05 12:43:39 +02:00
Andreas Kling
1d468ed6d3
AK: Stop allowing implicit downcast with RefPtr and NonnullRefPtr
...
We were allowing this dangerous kind of thing:
RefPtr<Base> base;
RefPtr<Derived> derived = base;
This patch changes the {Nonnull,}RefPtr constructors so this is no
longer possible.
To downcast one of these pointers, there is now static_ptr_cast<T>:
RefPtr<Derived> derived = static_ptr_cast<Derived>(base);
Fixing this exposed a ton of cowboy-downcasts in various places,
which we're now forced to fix. :^)
2020-04-05 11:19:00 +02:00
Andreas Kling
058c614110
LibJS: Fix missing paren in modulo-basic.js test
2020-04-05 11:19:00 +02:00
Brian Gianforcaro
240a5b5fd7
LibJS: Add support for Math.ceil() and Math.trunc()
...
Introduce support for the both of these Math methods.
Math.trunc is implemented in terms of Math.ceil or Math.floor
based on the input value. Added tests as well.
2020-04-05 10:56:23 +02:00
Brian Gianforcaro
b8cef3a2d3
LibJS: Add support for floating point modulous
...
This change implements floating point mod based on the algorithm
used in LibM's fmod() implementation. To avoid taking a dependency
on LibM from LibJS I reimplemented the formula in LibJS.
I've incuded some of the example MDM test cases as well.
This surfaced and issue handling NaN which I've fixed as well.
2020-04-05 10:38:13 +02:00
Brian Gianforcaro
41bfff1abe
LibJS: Correctness fixes for bitwise_or, address FIXME's in test.
2020-04-05 10:37:02 +02:00
Brian Gianforcaro
4e54d0ff21
LibJS: Add support for arbitrary arguments to Math.max
...
Address the FIXME in MathObject::max to handle an arbitrary
number of arguments. Also adding a test case to verify the
behavior of Math.max() while I'm here.
2020-04-05 09:28:58 +02:00
Andreas Kling
d84de532f1
LibJS: Add Math.max()
2020-04-05 00:57:00 +02:00
Andreas Kling
16bd99aa52
LibJS: Add Math.round()
2020-04-05 00:29:01 +02:00
Andreas Kling
afff228308
LibJS: Add Math.floor()
2020-04-05 00:26:56 +02:00
Andreas Kling
3c99c27db4
LibJS: Clean up the anonymous wrapper block in "for" using ScopeGuard
...
This ensures that we don't forget to pop the wrapper off of the scope
stack when returning early due to an exception or some such. :^)
2020-04-05 00:24:32 +02:00
Andreas Kling
9ebd066ac8
LibJS: Add support for "continue" inside "for" statements :^)
2020-04-05 00:22:42 +02:00
Andreas Kling
e3b92caa6d
LibJS: Make "break" actually work inside "switch"
2020-04-05 00:09:48 +02:00
Andreas Kling
2db8716a6f
LibJS: Don't return the "last computed value" from Interpreter::run()
...
Only return whatever a "return" statment told us to return.
The last computed value is now available in Interpreter::last_value()
instead, where the REPL can pick it up.
2020-04-04 23:45:13 +02:00
Andreas Kling
97cd1173fa
LibJS: Add String.prototype.indexOf()
2020-04-04 23:44:29 +02:00
Andreas Kling
9e05672f87
LibJS: Math.sqrt.length should be 1
2020-04-04 23:28:38 +02:00
Andreas Kling
a860a3f793
LibJS: Hack the lexer to allow numbers with decimals
...
This is very hackish and should definitely be improved. :^)
2020-04-04 23:13:48 +02:00
Andreas Kling
3a026a1ede
LibJS: Add NumberObject and make to_object() on number values create it
2020-04-04 23:13:13 +02:00
Andreas Kling
d4dfe7e525
LibJS: Add Math.sqrt()
2020-04-04 22:44:48 +02:00
Andreas Kling
d155491122
LibJS: Add basic Array constructor
...
We only support Array() with 0 or 1 parameters so far.
2020-04-04 22:28:21 +02:00
Andreas Kling
eabdbe0ee9
LibJS: Log when we throw a JavaScript Error
...
This makes debugging a lot easier since we actually learn that an Error
got thrown.
2020-04-04 22:14:38 +02:00
Andreas Kling
5e40aa182b
LibJS: Support VariableDeclaration with multiple declarators
...
This patch adds support in the parser and interpreter for this:
var a = 1, b = 2, c = a + b;
VariableDeclaration is now a sequence of VariableDeclarators. :^)
2020-04-04 21:47:12 +02:00
Andreas Kling
9691286cf0
LibJS: Add Declaration class to the AST
...
This is just here to make the AST class hierarchy more spec-like.
2020-04-04 21:32:10 +02:00
Andreas Kling
f8393b80e3
LibJS: Add support for do..while statements
2020-04-04 21:29:23 +02:00
Andreas Kling
da0715aba9
LibJS: Rename WhileStatement::predicate() => body()
...
This name matches other parsers.
2020-04-04 21:22:03 +02:00
Andreas Kling
644ff1bbfd
LibJS: Add basic support for modulo (%) in binary expressions
2020-04-04 21:17:34 +02:00