Dan Klishch
14ee25b8ba
JSSpecCompiler: Make -xspec capable of parsing the whole specification
...
... in theory. In practice, we fail to parse all of the functions.
2024-01-21 14:57:10 -07:00
Dan Klishch
483e195e48
JSSpecCompiler: Store arguments in declaration instead of definition
...
And create a struct encapsulating argument name in the preparation for
argument types and optional arguments.
2024-01-21 14:57:10 -07:00
Dan Klishch
0806ccaeec
JSSpecCompiler: Start converting crashes to error messages
...
I got fed up with looking at error messages that tell me "VERIFICATION
FAILED: !is_error()". So this commit introduces DiagnosticEngine class
whose purpose is to accumulate and print more user-friendly errors.
2024-01-21 14:57:10 -07:00
Dan Klishch
3aec6952a2
JSSpecCompiler: Make TranslationUnit fields private
...
For some reason I was afraid to add trivial accessors to classes
in earlier PRs, so we now have dozens of classes with public fields. I'm
not exactly looking forward to refactoring them all at once but I'll
do so gradually.
2024-01-21 14:57:10 -07:00
Dan Klishch
5825eaa264
JSSpecCompiler: Save references to return value and function arguments
2024-01-14 16:05:51 -07:00
Dan Klishch
7f47340c82
JSSpecCompiler: Create FunctionDeclaration
s for all external functions
2024-01-14 16:05:51 -07:00
Dan Klishch
5338cdd153
JSSpecCompiler: Add bare-bones DCE pass
...
Right now the only dead code it eliminates is the unused phi nodes.
2024-01-14 16:05:51 -07:00
Dan Klishch
fbdb1a3d61
JSSpecCompiler: Add SSA form building pass
2024-01-12 16:22:22 -07:00
Dan Klishch
12072dbac5
JSSpecCompiler: Add control flow graph simplification pass
...
It removes empty `BasicBlock`s with an unconditional jump continuation
and then removes unreferenced blocks from the graph.
2024-01-04 12:06:56 -07:00
Dan Klishch
ce6b987330
JSSpecCompiler: Add --dump-cfg
option
2023-12-14 09:06:05 -07:00
Dan Klishch
ff44aea917
JSSpecCompiler: Add control flow building pass
2023-12-14 09:06:05 -07:00
Dan Klishch
dbd624e875
JSSpecCompiler: Allow dumping AST after specified passes
2023-12-07 10:13:21 -07:00
Dan Klishch
6ed069ea8d
JSSpecCompiler: Provide an adequate command line interface
2023-10-26 15:45:31 -06:00
Dan Klishch
867ce0df52
JSSpecCompiler: Move passes to Passes subdirectory of Compiler/
2023-10-26 15:45:31 -06:00
Dan Klishch
61fa00d46c
JSSpecCompiler: Refactor CompilerPass
to accept TranslationUnitRef
2023-10-26 15:45:31 -06:00
Dan Klishch
567b1f6e7c
JSSpecCompiler: Adopt more C++ terminology
...
Let's not use strange names like `ExecutionContext`, which nobody will
understand in the future.
2023-10-02 21:15:08 +02:00
Dan Klishch
81519975c5
JSSpecCompiler: Add reference resolving pass
...
It replaces UnresolvedReference with Variable, FunctionPointer, or
SlotName nodes. Also, it gathers all variable names from their
declarations.
2023-09-17 16:04:42 -06:00
Dan Klishch
4c4e1e1aed
JSSpecCompiler: Add if branch merging pass
...
It merges standalone IfBranch/ElseIfBranch nodes into IfElseIfChain
nodes. This will ease CFG generation later.
2023-09-09 11:20:43 -06:00
Dan Klishch
72794e7843
JSSpecCompiler: Add function call canonicalization pass
...
It simplifies ladders of BinaryOperators nodes in the function call
arguments into nice and neat FunctionCall node. Ladders initially appear
since I do not want to complicate expression parser, so it interprets
`f(a, b, c, d)` as `f "function_call_operator" (a, (b, (c, d))))`.
2023-09-09 11:20:43 -06:00
Dan Klishch
cd8f4aaa7d
JSSpecCompiler: Introduce Function and ExecutionContext classes
...
Currently, they are not extremely useful, but the plan is to store
all function-local state in JSSpecCompiler::Function and all
"translation unit" state in ExecutionContext.
2023-09-02 19:57:06 +02:00
Dan Klishch
66f4cdba85
JSSpecCompiler: Make it compile and dump AST created from stdin input
2023-08-31 11:00:31 +02:00