Commit graph

7564 commits

Author SHA1 Message Date
Andreas Kling
1ec4771904 Meta: Update .clang-format to not indent nested namespaces 2020-03-14 10:10:21 +01:00
Stephan Unverwerth
15d5b2d29e LibJS: Add operator precedence parsing
Obey precedence and associativity rules when parsing expressions
with chained operators.
2020-03-14 00:11:24 +01:00
Tibor Nagy
f347dd5c5e Applications: Use "Document - AppName" window title format
Fixes #1444
2020-03-13 23:30:12 +01:00
Oriko
b4381be0ba LibGUI: Add missing copyright headers 2020-03-13 23:09:58 +01:00
Oriko
2d7f4bea90 LibJS: Fix endless loop in string lexing 2020-03-13 22:53:13 +01:00
Oriko
b6e1c1b516 HackStudio: Use Javascript syntax highlighter 2020-03-13 22:53:13 +01:00
Oriko
c2884d29d6 TextEditor: Use Javascript syntax highlighter 2020-03-13 22:53:13 +01:00
Oriko
196352ef67 LibGUI: Add Javascript syntax highlighter 2020-03-13 22:53:13 +01:00
Oriko
c02037e944 LibGUI: Abstract token pair matching 2020-03-13 22:53:13 +01:00
Stephan Unverwerth
ac524b632f LibJS: Fix lexing of the last character in a file
Before this commit the last character in a file would be swallowed.
This also fixes parsing of empty files which would previously ASSERT.
2020-03-13 21:47:57 +01:00
Oriko
8285102b6d HackStudio: Add Javascript projects 2020-03-13 20:19:01 +01:00
Oriko
792a709765 HackStudio: Fix the wrong cursor being drawn 2020-03-13 20:19:01 +01:00
Linus Groh
0e04e2cff0 LibJS: Add parsed parameters to FunctionDeclaration 2020-03-13 20:16:01 +01:00
0xtechnobabble
83ea7bb9e7 LibJS: Don't allow the redeclaration of a var variable using let/const
Previously, we were allowing the redeclaration of a variable with `let`
or `const` if it was declared initially using `var`, we should not
tolerate any form of variable redeclaration using let/const.
2020-03-13 20:15:52 +01:00
Andreas Kling
9f38f4dbfb LibJS: Add Object::put_native_function() for convenience
This makes it a little bit nicer to add native function properties
to JavaScript objects.

Thanks to Sergey for suggesting it! :^)
2020-03-13 11:08:16 +01:00
Andreas Kling
6089d6566b LibJS: Make it possible to go from a Cell* to its Heap&
This patch makes all HeapBlock allocations aligned to their block size,
enabling us to find the HeapBlock* for a given Cell* by simply masking
bits off of the cell address.

Use this to make a simple Heap& getter for Cell, which lets us avoid
plumbing the Heap& everywhere.
2020-03-13 11:08:16 +01:00
Andreas Kling
d9c7009604 LibJS: Split Function into subclasses NativeFunction and ScriptFunction
Both types of functions are now Function and implement calling via:

    virtual Value call(Interpreter&, Vector<Value> arguments);

This removes the need for CallExpression::execute() to care about which
kind of function it's calling. :^)
2020-03-13 11:08:16 +01:00
Till Mayer
de6f697eba Solitaire: Fix automatic moving of cards
A previous change trying to fix an assertion error completely broke
the automatic moving of cards, this commit will fix this problem
2020-03-13 10:40:45 +01:00
Till Mayer
3e25c58755 Solitaire: Minor tweaks to animation x_velocity and bouncyness 2020-03-13 10:40:45 +01:00
Till Mayer
62422eecdc Solitaire: Add about dialog and 32x32 icon 2020-03-13 10:40:45 +01:00
Andreas Kling
1448f4384d LibJS: Move GlobalObject to its own Object subclass
This is mostly for tidiness at the moment.
2020-03-12 20:11:35 +01:00
Andreas Kling
d1d136b4e5 LibJS: Replace $gc() hack with a NativeFunction on the global object
To make this work, also start passing Interpreter& to native functions.
2020-03-12 20:04:54 +01:00
Andreas Kling
9ad17d4674 LibJS: Fix broken parsing of 0-argument CallExpression 2020-03-12 20:03:12 +01:00
Andreas Kling
32963cf74a LibJS: Allow implicit Value construction from GC-allocated things 2020-03-12 19:57:40 +01:00
Andreas Kling
7912f33ea0 LibJS: Add NativeFunction, a callable wrapper around a C++ lambda
This can be used to implement arbitrary functionality, callable from
JavaScript.

To make this work, I had to change the way CallExpression passes
arguments to the callee. Instead of a HashMap<String, Value>, we now
pass an ordered list of Argument { String name; Value value; }.

This patch includes a native "print(argument)" function. :^)
2020-03-12 19:54:47 +01:00
Andreas Kling
cc8e3048bc LibJS: Fix NumericLiteral::dump() output 2020-03-12 19:36:24 +01:00
Andreas Kling
92d1014051 LibJS: Parse CallExpression arguments 2020-03-12 19:35:23 +01:00
Andreas Kling
25db856134 LibJS: Dump CallExpression arguments (if any) 2020-03-12 19:34:59 +01:00
Oriko
137d68a2ae HackStudio: Abstract over syntax highlighter 2020-03-12 19:04:59 +01:00
Oriko
bacd3dd57a HackStudio: Underline header links 2020-03-12 19:04:59 +01:00
Oriko
6d89f48dd8 LibGUI: Add underlines to highlighting 2020-03-12 19:04:59 +01:00
Tibor Nagy
b58893cfe1 LibGUI: Take scroll offset into account on ItemView rubberband selection
Same kind of issue as #1271.
2020-03-12 15:48:32 +01:00
0xtechnobabble
ee5a49e2fe LibJS: Implement const variable declarations
This also tightens the means of redeclaration of a variable by proxy,
since we now have a way of knowing how a variable was initially
declared, we can check if it was declared using `let` or `const` and
not tolerate redeclaration like we did previously.
2020-03-12 14:58:16 +01:00
0xtechnobabble
8557bc56f7 LibJS: Implement update expressions
Note that currently only the non-prefixed variant is supported (i.e i++
not ++i), this variant returns the value of the argument before the
update.
2020-03-12 14:58:16 +01:00
0xtechnobabble
dc9a702aa8 LibJS/Parser: Parse let declarations 2020-03-12 14:58:16 +01:00
Andreas Kling
4dc1d6654f LibJS: Tweak AssignmentOp names 2020-03-12 13:54:56 +01:00
Andreas Kling
4781e3fb72 LibJS: Fix some coding style mistakes in Lexer 2020-03-12 13:52:54 +01:00
Conrad Pankoff
023d121e05 Meta: Add for-loop JavaScript test program 2020-03-12 13:42:23 +01:00
Conrad Pankoff
097e1af4e8 LibJS: Implement for statement 2020-03-12 13:42:23 +01:00
Conrad Pankoff
e88f2f15ee LibJS: Parse === and !== binary operators 2020-03-12 13:42:23 +01:00
Conrad Pankoff
9d41aa4d5d LibJS: Parse > and < binary operators 2020-03-12 13:42:23 +01:00
Conrad Pankoff
2b36b4f09f LibJS: Implement +=, -=, *=, and /= assignment operators 2020-03-12 13:42:23 +01:00
Conrad Pankoff
0fe87c5fec LibJS: Implement <= and >= binary operators 2020-03-12 13:42:23 +01:00
Conrad Pankoff
fdf7f81ba9 LibJS: Implement multiplication and division operators 2020-03-12 13:42:23 +01:00
howar6hill
9f3f0d9983 LibJS: Add test for function with arguments 2020-03-12 13:27:28 +01:00
Andreas Kling
f405cb6a77 LibJS: Implement basic MemberExpression parsing
At last we can parse "hello friends".length :^)
2020-03-12 13:05:57 +01:00
Andreas Kling
ed100bc6f4 LibJS: Implement basic lexing + parsing of StringLiteral
This still includes the double-quote characters (") but at least the
AST comes out right.
2020-03-12 13:05:06 +01:00
Oriko
879bf3e97b HackStudio: Add header navigation 2020-03-12 12:37:13 +01:00
Oriko
d8a73dd979 LibGUI: Parse #include statements separately 2020-03-12 12:37:13 +01:00
Liav A
b13417ddb4 ACPI: Examine bit width in Generic address structure before asserting
Also, the switch-case flow is simplified for IO access within a Generic
address strucuture's handling.
2020-03-12 12:36:38 +01:00