/*
 * Copyright 2024 WebAssembly Community Group participants
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "ir/effects.h"
#include "wasm.h"

namespace wasm {

std::ostream& operator<<(std::ostream& o, const EffectAnalyzer& effects) {
  o << "EffectAnalyzer {\n";
  if (effects.branchesOut) {
    o << "branchesOut\n";
  }
  if (effects.calls) {
    o << "calls\n";
  }
  if (effects.localsRead.size()) {
    o << "localsRead\n";
  }
  if (effects.localsWritten.size()) {
    o << "localsWritten\n";
  }
  if (effects.mutableGlobalsRead.size()) {
    o << "mutableGlobalsRead\n";
  }
  if (effects.globalsWritten.size()) {
    o << "globalsWritten\n";
  }
  if (effects.readsMemory) {
    o << "readsMemory\n";
  }
  if (effects.writesMemory) {
    o << "writesMemory\n";
  }
  if (effects.readsSharedMemory) {
    o << "readsSharedMemory\n";
  }
  if (effects.writesSharedMemory) {
    o << "writesSharedMemory\n";
  }
  if (effects.readsTable) {
    o << "readsTable\n";
  }
  if (effects.writesTable) {
    o << "writesTable\n";
  }
  if (effects.readsMutableStruct) {
    o << "readsMutableStruct\n";
  }
  if (effects.writesStruct) {
    o << "writesStruct\n";
  }
  if (effects.readsSharedMutableStruct) {
    o << "readsSharedMutableStruct\n";
  }
  if (effects.writesSharedStruct) {
    o << "writesSharedStruct\n";
  }
  if (effects.readsMutableArray) {
    o << "readsArray\n";
  }
  if (effects.writesArray) {
    o << "writesArray\n";
  }
  if (effects.readsSharedMutableArray) {
    o << "readsSharedMutableArray\n";
  }
  if (effects.writesSharedArray) {
    o << "writesSharedArray\n";
  }
  if (effects.mustTrap) {
    o << "mustTrap\n";
  }
  if (effects.hasImplicitTrap()) {
    o << "implicitTrap\n";
  }
  if (effects.readOrder != MemoryOrder::Unordered) {
    o << "readOrder " << effects.readOrder << "\n";
  }
  if (effects.writeOrder != MemoryOrder::Unordered) {
    o << "writeOrder " << effects.writeOrder << "\n";
  }
  if (effects.throws_) {
    o << "throws_\n";
  }
  if (effects.tryDepth) {
    o << "tryDepth\n";
  }
  if (effects.catchDepth) {
    o << "catchDepth\n";
  }
  if (effects.danglingPop) {
    o << "danglingPop\n";
  }
  if (effects.mayNotReturn) {
    o << "mayNotReturn\n";
  }
  if (effects.hasReturnCallThrow) {
    o << "hasReturnCallThrow\n";
  }
  if (effects.accessesLocal()) {
    o << "accessesLocal\n";
  }
  if (effects.accessesMutableGlobal()) {
    o << "accessesMutableGlobal\n";
  }
  if (effects.accessesMemory()) {
    o << "accessesMemory\n";
  }
  if (effects.accessesTable()) {
    o << "accessesTable\n";
  }
  if (effects.accessesMutableStruct()) {
    o << "accessesMutableStruct\n";
  }
  if (effects.accessesArray()) {
    o << "accessesArray\n";
  }
  if (effects.throws()) {
    o << "throws\n";
  }
  if (effects.transfersControlFlow()) {
    o << "transfersControlFlow\n";
  }
  if (effects.writesGlobalState()) {
    o << "writesGlobalState\n";
  }
  if (effects.readsMutableGlobalState()) {
    o << "readsMutableGlobalState\n";
  }
  if (effects.hasNonTrapSideEffects()) {
    o << "hasNonTrapSideEffects\n";
  }
  if (effects.hasSideEffects()) {
    o << "hasSideEffects\n";
  }
  if (effects.hasUnremovableSideEffects()) {
    o << "hasUnremovableSideEffects\n";
  }
  if (effects.hasAnything()) {
    o << "hasAnything\n";
  }
  if (effects.hasExternalBreakTargets()) {
    o << "hasExternalBreakTargets\n";
  }
  o << "}";
  return o;
}

} // namespace wasm
