summaryrefslogtreecommitdiff
path: root/Libraries/LibJS
AgeCommit message (Collapse)Author
2020-04-09LibJS: Fix BooleanPrototype buildAndreas Kling
2020-04-09LibJS: Make BooleanPrototype inherit from ObjectLinus Groh
BooleanPrototype should inherit from Object, not BooleanObject.
2020-04-08LibWeb: Add XMLHttpRequest object :^)Andreas Kling
This patch adds very basic XMLHttpRequest support to LibWeb. Here's an example that currently works: var callback = function() { alert(this.responseText); } var xhr = new XMLHttpRequest(); xhr.addEventListener("load", callback); xhr.open("GET", "http://serenityos.org/~kling/test/example.txt"); xhr.send(); There are many limitations and bugs, but it's pretty dang awesome that we have XHR. :^)
2020-04-08LibJS: Handle empty values in Array.prototype.toString()Linus Groh
2020-04-08LibJS: Add Value::to_double() for convenienceAndreas Kling
2020-04-08LibJS: rename JS::DeclarationType => JS::DeclarationKindEmanuele Torre
Many other parsers call it with this name. Also Type can be confusing in this context since the DeclarationType is not the type (number, string, etc.) of the variables that are being declared by the VariableDeclaration.
2020-04-08LibJS: Add "constructor" property to constructor prototypesAndreas Kling
2020-04-07LibJS: Add Number.isSafeInteger()Linus Groh
2020-04-07LibJS: Add Number constantsLinus Groh
2020-04-07LibJS: Break loop on EOF when parsing object expressionLinus Groh
2020-04-07LibJS: Add Number()Linus Groh
2020-04-07LibJS: Reformat BooleanConstructor.{cpp,h}Linus Groh
2020-04-07LibJS: Add SequenceExpression AST node (comma operator)Andreas Kling
This patch only adds the AST node, the parser doesn't create them yet.
2020-04-07LibJS: Allow parsing numeric and string literals in object expressionsDexesTTP
Also updated the object-basic.js test to include this change
2020-04-07LibJS: Add String.prototype.toUpperCase()Linus Groh
2020-04-07LibJS: Add Boolean constructor objectJack Karamanian
2020-04-07LibJS: Return false for NaN numbers in Value::to_boolean()Jack Karamanian
2020-04-06LibJS: Fix impossible member access for negative integersDexesTTP
The PropertyName class able to match a number or an array can only accept positive numerical values. However, the computed_property_name method sometimes returned negative values. This commit also adds a basic object access test case.
2020-04-06LibJS: Add String.prototype.toLowerCase()Andreas Kling
2020-04-06LibJS: Inline JS::Value()Andreas Kling
I had this out of line for debugging reasons. Put it back inline.
2020-04-06LibJS: Support array holes, encoded as empty JS::ValueAndreas Kling
This patch adds a new kind of JS::Value, the empty value. It's what you get when you do JSValue() (or most commonly, {} in C++.) An empty Value signifies the absence of a value, and should never be visible to JavaScript itself. As of right now, it's used for array holes and as a return value when an exception has been thrown and we just want to unwind. This patch is a bit of a mess as I had to fix a whole bunch of code that was relying on JSValue() being undefined, etc.
2020-04-06LibJS: Give argument vectors an inline capacity of 8Andreas Kling
This avoids one malloc/free pair for every function call if there are 8 arguments or fewer.
2020-04-06LibJS: Add a PropertyName class that represents a string or a numberAndreas Kling
Now that we have two separate storages for Object properties depending on what kind of index they have, it's nice to have an abstraction that still allows us to say "here's a property name". We use PropertyName to always choose the optimal storage path directly while interpreting the AST. :^)
2020-04-06LibJS: Add a number-indexed property storage to all ObjectsAndreas Kling
Objects can have both named and indexed properties. Previously we kept all property names as strings. This patch separates named and indexed properties and splits them between Object::m_storage and m_elements. This allows us to do much faster array-style access using numeric indices. It also makes the Array class much less special, since all Objects now have number-indexed storage. :^)
2020-04-06LibJS: Do a garbage collection every N allocations (N=10'000)Andreas Kling
To prevent the heap from growing infinitely large, we now do a full GC every 10'000 allocations. :^)
2020-04-06LibJS: Fix some tests for Math.min()Emanuele Torre
In some of the tests in Math.min.js, we were testing Math.max() instead of Math.min()
2020-04-06LibJS: Rename variable "max" to "min" in MathObject::min() (#1665)Emanuele Torre
2020-04-06LibJS: Object needs to protect values in its storageAndreas Kling
Otherwise the garbage collector will eat them way too soon! This made it impossible to use "js -g" without crashing.
2020-04-06Meta: Add missing copyright headersAndreas Kling
2020-04-06LibJS: Add Math.{cos,sin,tan}()Linus Groh
2020-04-06LibJS: Simplify MathObject functionsLinus Groh
2020-04-06LibJS: Remove unnecessary malloc+free in AssignmentExpression::executeAndreas Kling
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-06LibJS: Add Math.min()Andreas Kling
2020-04-05LibJS: Return -Infinity in Math.max() with no argumentLinus Groh
2020-04-05LibJS: Make Object::to_string() call the "toString" property if presentAndreas Kling
2020-04-05LibJS: Add Array.prototype.toString()Andreas Kling
2020-04-05LibJS: Fix do..while parsing by consuming parentheses explicitly (#1652)Maxim Brunnmeier
Before this patch the parser accepted conditions without enclosing parentheses (like: .."while number < 9").
2020-04-05LibJS: Report the start position of a token as its line columnAnotherTest
2020-04-05LibJS: Allow lexer to run without logging errorsAnotherTest
2020-04-05LibJS: Remove assert function from exponentiation-basic.jsLinus Groh
2020-04-05LibJS: Simplify Math-constants.js testLinus Groh
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-05LibJS: Update to-number-basic.js testLinus Groh
Uncomment lines that are now parsing correctly :^)
2020-04-05LibJS: Fix Math.SQRT1_2Linus Groh
The value of Math.SQRT1_2 was zero as we were dividing two integers.
2020-04-05LibJS: Add numeric literal parsing for different bases and exponentsStephan Unverwerth
2020-04-05LibJS: Implement exponentiation (** operator)Linus Groh
2020-04-05LibJS: Rename BinaryOp::{Plus,Minus,Asterisk,Slash}Linus Groh
2020-04-05LibJS: Use the native assert() implementation now avaiable in 'js -t'Brian Gianforcaro
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-05Lagom: Add clang address/memory/undefined-behavior analyzer supportBrian Gianforcaro
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-05LibJS: Plumb line and column information through Lexer / ParserBrian Gianforcaro
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-05AK: Stop allowing implicit downcast with RefPtr and NonnullRefPtrAndreas Kling
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. :^)