/* * Copyright (c) 2023, Dan Klishch * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include #include "Compiler/FunctionCallCanonicalizationPass.h" #include "Compiler/IfBranchMergingPass.h" #include "Function.h" #include "Parser/SpecParser.h" ErrorOr 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()) }; auto maybe_document = parser.parse(); if (maybe_document.is_error()) { outln("{}", maybe_document.error()); return 1; } auto document = maybe_document.release_value(); auto maybe_function = JSSpecCompiler::SpecFunction::create(&document.root()); if (maybe_function.is_error()) { outln("{}", maybe_function.error()->to_string()); return 1; } auto spec_function = maybe_function.value(); auto function = make_ref_counted(&context, spec_function.m_name, spec_function.m_algorithm.m_tree); FunctionCallCanonicalizationPass(function).run(); IfBranchMergingPass(function).run(); out("{}", function->m_ast); return 0; }