/*
 * Copyright 2020 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.
 */

DELEGATE(Nop);
DELEGATE(Block);
DELEGATE(If);
DELEGATE(Loop);
DELEGATE(Break);
DELEGATE(Switch);
DELEGATE(Call);
DELEGATE(CallIndirect);
DELEGATE(LocalGet);
DELEGATE(LocalSet);
DELEGATE(GlobalGet);
DELEGATE(GlobalSet);
DELEGATE(Load);
DELEGATE(Store);
DELEGATE(AtomicRMW);
DELEGATE(AtomicCmpxchg);
DELEGATE(AtomicWait);
DELEGATE(AtomicNotify);
DELEGATE(AtomicFence);
DELEGATE(Pause);
DELEGATE(SIMDExtract);
DELEGATE(SIMDReplace);
DELEGATE(SIMDShuffle);
DELEGATE(SIMDTernary);
DELEGATE(SIMDShift);
DELEGATE(SIMDLoad);
DELEGATE(SIMDLoadStoreLane);
DELEGATE(MemoryInit);
DELEGATE(DataDrop);
DELEGATE(MemoryCopy);
DELEGATE(MemoryFill);
DELEGATE(Const);
DELEGATE(Unary);
DELEGATE(Binary);
DELEGATE(Select);
DELEGATE(Drop);
DELEGATE(Return);
DELEGATE(MemorySize);
DELEGATE(MemoryGrow);
DELEGATE(Unreachable);
DELEGATE(Pop);
DELEGATE(RefNull);
DELEGATE(RefIsNull);
DELEGATE(RefFunc);
DELEGATE(RefEq);
DELEGATE(TableGet);
DELEGATE(TableSet);
DELEGATE(TableSize);
DELEGATE(TableGrow);
DELEGATE(TableFill);
DELEGATE(TableCopy);
DELEGATE(TableInit);
DELEGATE(ElemDrop);
DELEGATE(Try);
DELEGATE(TryTable);
DELEGATE(Throw);
DELEGATE(Rethrow);
DELEGATE(ThrowRef);
DELEGATE(TupleMake);
DELEGATE(TupleExtract);
DELEGATE(RefI31);
DELEGATE(I31Get);
DELEGATE(CallRef);
DELEGATE(RefTest);
DELEGATE(RefCast);
DELEGATE(RefGetDesc);
DELEGATE(BrOn);
DELEGATE(StructNew);
DELEGATE(StructGet);
DELEGATE(StructSet);
DELEGATE(StructRMW);
DELEGATE(StructCmpxchg);
DELEGATE(ArrayNew);
DELEGATE(ArrayNewData);
DELEGATE(ArrayNewElem);
DELEGATE(ArrayNewFixed);
DELEGATE(ArrayGet);
DELEGATE(ArraySet);
DELEGATE(ArrayLen);
DELEGATE(ArrayCopy);
DELEGATE(ArrayFill);
DELEGATE(ArrayInitData);
DELEGATE(ArrayInitElem);
DELEGATE(ArrayRMW);
DELEGATE(ArrayCmpxchg);
DELEGATE(RefAs);
DELEGATE(StringNew);
DELEGATE(StringConst);
DELEGATE(StringMeasure);
DELEGATE(StringEncode);
DELEGATE(StringConcat);
DELEGATE(StringEq);
DELEGATE(StringTest);
DELEGATE(StringWTF16Get);
DELEGATE(StringSliceWTF);
DELEGATE(ContNew);
DELEGATE(ContBind);
DELEGATE(Suspend);
DELEGATE(Resume);
DELEGATE(ResumeThrow);
DELEGATE(StackSwitch);
DELEGATE(StructWait);
DELEGATE(StructNotify);

#undef DELEGATE
