mirror of
https://github.com/RGBCube/serenity
synced 2025-05-30 17:48:12 +00:00
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))))`.
This commit is contained in:
parent
1c4cd34320
commit
72794e7843
4 changed files with 71 additions and 2 deletions
|
@ -9,12 +9,16 @@
|
|||
#include <LibMain/Main.h>
|
||||
#include <LibXML/Parser/Parser.h>
|
||||
|
||||
#include "Compiler/FunctionCallCanonicalizationPass.h"
|
||||
#include "Function.h"
|
||||
#include "Parser/SpecParser.h"
|
||||
|
||||
ErrorOr<int> serenity_main(Main::Arguments)
|
||||
{
|
||||
using namespace JSSpecCompiler;
|
||||
|
||||
ExecutionContext context;
|
||||
|
||||
auto input = TRY(TRY(Core::File::standard_input())->read_until_eof());
|
||||
XML::Parser parser { StringView(input.bytes()) };
|
||||
|
||||
|
@ -30,8 +34,12 @@ ErrorOr<int> serenity_main(Main::Arguments)
|
|||
outln("{}", maybe_function.error()->to_string());
|
||||
return 1;
|
||||
}
|
||||
auto function = maybe_function.value();
|
||||
auto spec_function = maybe_function.value();
|
||||
|
||||
out("{}", function.m_algorithm.m_tree);
|
||||
auto function = make_ref_counted<JSSpecCompiler::Function>(&context, spec_function.m_name, spec_function.m_algorithm.m_tree);
|
||||
|
||||
FunctionCallCanonicalizationPass(function).run();
|
||||
|
||||
out("{}", function->m_ast);
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue