mirror of
https://github.com/RGBCube/serenity
synced 2025-05-14 22:34:59 +00:00
38 lines
866 B
C++
38 lines
866 B
C++
/*
|
|
* Copyright (c) 2023, Dan Klishch <danilklishch@gmail.com>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "Compiler/GenericASTPass.h"
|
|
|
|
namespace JSSpecCompiler {
|
|
|
|
// IfBranchMergingPass, unsurprisingly, merges if-elseif-else chains, represented as a separate
|
|
// nodes after parsing, into one IfElseIfChain node. It also deals with the following nonsense from
|
|
// the spec:
|
|
// ```
|
|
// 1. If <condition>, then
|
|
// ...
|
|
// 2. Else,
|
|
// a. If <condition>, then
|
|
// ...
|
|
// 3. Else,
|
|
// ...
|
|
// ```
|
|
class IfBranchMergingPass : public GenericASTPass {
|
|
public:
|
|
inline static constexpr StringView name = "if-branch-merging"sv;
|
|
|
|
using GenericASTPass::GenericASTPass;
|
|
|
|
protected:
|
|
RecursionDecision on_entry(Tree tree) override;
|
|
|
|
private:
|
|
static Tree merge_branches(Vector<Tree> const& unmerged_branches);
|
|
};
|
|
|
|
}
|