// Copyright 2021 The Tint Authors.
//
// 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.

////////////////////////////////////////////////////////////////////////////////
// File generated by tools/builtin-gen
// using the template:
//   src/tint/sem/builtin_type.cc.tmpl
// and the builtin defintion file:
//   src/tint/builtins.def
//
// Do not modify this file directly
////////////////////////////////////////////////////////////////////////////////

#include "src/tint/sem/builtin_type.h"

#include <sstream>

namespace tint::sem {

BuiltinType ParseBuiltinType(const std::string& name) {
  if (name == "abs") {
    return BuiltinType::kAbs;
  }
  if (name == "acos") {
    return BuiltinType::kAcos;
  }
  if (name == "all") {
    return BuiltinType::kAll;
  }
  if (name == "any") {
    return BuiltinType::kAny;
  }
  if (name == "arrayLength") {
    return BuiltinType::kArrayLength;
  }
  if (name == "asin") {
    return BuiltinType::kAsin;
  }
  if (name == "atan") {
    return BuiltinType::kAtan;
  }
  if (name == "atan2") {
    return BuiltinType::kAtan2;
  }
  if (name == "ceil") {
    return BuiltinType::kCeil;
  }
  if (name == "clamp") {
    return BuiltinType::kClamp;
  }
  if (name == "cos") {
    return BuiltinType::kCos;
  }
  if (name == "cosh") {
    return BuiltinType::kCosh;
  }
  if (name == "countLeadingZeros") {
    return BuiltinType::kCountLeadingZeros;
  }
  if (name == "countOneBits") {
    return BuiltinType::kCountOneBits;
  }
  if (name == "countTrailingZeros") {
    return BuiltinType::kCountTrailingZeros;
  }
  if (name == "cross") {
    return BuiltinType::kCross;
  }
  if (name == "degrees") {
    return BuiltinType::kDegrees;
  }
  if (name == "determinant") {
    return BuiltinType::kDeterminant;
  }
  if (name == "distance") {
    return BuiltinType::kDistance;
  }
  if (name == "dot") {
    return BuiltinType::kDot;
  }
  if (name == "dpdx") {
    return BuiltinType::kDpdx;
  }
  if (name == "dpdxCoarse") {
    return BuiltinType::kDpdxCoarse;
  }
  if (name == "dpdxFine") {
    return BuiltinType::kDpdxFine;
  }
  if (name == "dpdy") {
    return BuiltinType::kDpdy;
  }
  if (name == "dpdyCoarse") {
    return BuiltinType::kDpdyCoarse;
  }
  if (name == "dpdyFine") {
    return BuiltinType::kDpdyFine;
  }
  if (name == "exp") {
    return BuiltinType::kExp;
  }
  if (name == "exp2") {
    return BuiltinType::kExp2;
  }
  if (name == "extractBits") {
    return BuiltinType::kExtractBits;
  }
  if (name == "faceForward") {
    return BuiltinType::kFaceForward;
  }
  if (name == "firstLeadingBit") {
    return BuiltinType::kFirstLeadingBit;
  }
  if (name == "firstTrailingBit") {
    return BuiltinType::kFirstTrailingBit;
  }
  if (name == "floor") {
    return BuiltinType::kFloor;
  }
  if (name == "fma") {
    return BuiltinType::kFma;
  }
  if (name == "fract") {
    return BuiltinType::kFract;
  }
  if (name == "frexp") {
    return BuiltinType::kFrexp;
  }
  if (name == "fwidth") {
    return BuiltinType::kFwidth;
  }
  if (name == "fwidthCoarse") {
    return BuiltinType::kFwidthCoarse;
  }
  if (name == "fwidthFine") {
    return BuiltinType::kFwidthFine;
  }
  if (name == "insertBits") {
    return BuiltinType::kInsertBits;
  }
  if (name == "inverseSqrt") {
    return BuiltinType::kInverseSqrt;
  }
  if (name == "ldexp") {
    return BuiltinType::kLdexp;
  }
  if (name == "length") {
    return BuiltinType::kLength;
  }
  if (name == "log") {
    return BuiltinType::kLog;
  }
  if (name == "log2") {
    return BuiltinType::kLog2;
  }
  if (name == "max") {
    return BuiltinType::kMax;
  }
  if (name == "min") {
    return BuiltinType::kMin;
  }
  if (name == "mix") {
    return BuiltinType::kMix;
  }
  if (name == "modf") {
    return BuiltinType::kModf;
  }
  if (name == "normalize") {
    return BuiltinType::kNormalize;
  }
  if (name == "pack2x16float") {
    return BuiltinType::kPack2x16float;
  }
  if (name == "pack2x16snorm") {
    return BuiltinType::kPack2x16snorm;
  }
  if (name == "pack2x16unorm") {
    return BuiltinType::kPack2x16unorm;
  }
  if (name == "pack4x8snorm") {
    return BuiltinType::kPack4x8snorm;
  }
  if (name == "pack4x8unorm") {
    return BuiltinType::kPack4x8unorm;
  }
  if (name == "pow") {
    return BuiltinType::kPow;
  }
  if (name == "radians") {
    return BuiltinType::kRadians;
  }
  if (name == "reflect") {
    return BuiltinType::kReflect;
  }
  if (name == "refract") {
    return BuiltinType::kRefract;
  }
  if (name == "reverseBits") {
    return BuiltinType::kReverseBits;
  }
  if (name == "round") {
    return BuiltinType::kRound;
  }
  if (name == "select") {
    return BuiltinType::kSelect;
  }
  if (name == "sign") {
    return BuiltinType::kSign;
  }
  if (name == "sin") {
    return BuiltinType::kSin;
  }
  if (name == "sinh") {
    return BuiltinType::kSinh;
  }
  if (name == "smoothstep") {
    return BuiltinType::kSmoothstep;
  }
  if (name == "smoothStep") {
    return BuiltinType::kSmoothStep;
  }
  if (name == "sqrt") {
    return BuiltinType::kSqrt;
  }
  if (name == "step") {
    return BuiltinType::kStep;
  }
  if (name == "storageBarrier") {
    return BuiltinType::kStorageBarrier;
  }
  if (name == "tan") {
    return BuiltinType::kTan;
  }
  if (name == "tanh") {
    return BuiltinType::kTanh;
  }
  if (name == "transpose") {
    return BuiltinType::kTranspose;
  }
  if (name == "trunc") {
    return BuiltinType::kTrunc;
  }
  if (name == "unpack2x16float") {
    return BuiltinType::kUnpack2x16float;
  }
  if (name == "unpack2x16snorm") {
    return BuiltinType::kUnpack2x16snorm;
  }
  if (name == "unpack2x16unorm") {
    return BuiltinType::kUnpack2x16unorm;
  }
  if (name == "unpack4x8snorm") {
    return BuiltinType::kUnpack4x8snorm;
  }
  if (name == "unpack4x8unorm") {
    return BuiltinType::kUnpack4x8unorm;
  }
  if (name == "workgroupBarrier") {
    return BuiltinType::kWorkgroupBarrier;
  }
  if (name == "textureDimensions") {
    return BuiltinType::kTextureDimensions;
  }
  if (name == "textureGather") {
    return BuiltinType::kTextureGather;
  }
  if (name == "textureGatherCompare") {
    return BuiltinType::kTextureGatherCompare;
  }
  if (name == "textureNumLayers") {
    return BuiltinType::kTextureNumLayers;
  }
  if (name == "textureNumLevels") {
    return BuiltinType::kTextureNumLevels;
  }
  if (name == "textureNumSamples") {
    return BuiltinType::kTextureNumSamples;
  }
  if (name == "textureSample") {
    return BuiltinType::kTextureSample;
  }
  if (name == "textureSampleBias") {
    return BuiltinType::kTextureSampleBias;
  }
  if (name == "textureSampleCompare") {
    return BuiltinType::kTextureSampleCompare;
  }
  if (name == "textureSampleCompareLevel") {
    return BuiltinType::kTextureSampleCompareLevel;
  }
  if (name == "textureSampleGrad") {
    return BuiltinType::kTextureSampleGrad;
  }
  if (name == "textureSampleLevel") {
    return BuiltinType::kTextureSampleLevel;
  }
  if (name == "textureStore") {
    return BuiltinType::kTextureStore;
  }
  if (name == "textureLoad") {
    return BuiltinType::kTextureLoad;
  }
  if (name == "atomicLoad") {
    return BuiltinType::kAtomicLoad;
  }
  if (name == "atomicStore") {
    return BuiltinType::kAtomicStore;
  }
  if (name == "atomicAdd") {
    return BuiltinType::kAtomicAdd;
  }
  if (name == "atomicSub") {
    return BuiltinType::kAtomicSub;
  }
  if (name == "atomicMax") {
    return BuiltinType::kAtomicMax;
  }
  if (name == "atomicMin") {
    return BuiltinType::kAtomicMin;
  }
  if (name == "atomicAnd") {
    return BuiltinType::kAtomicAnd;
  }
  if (name == "atomicOr") {
    return BuiltinType::kAtomicOr;
  }
  if (name == "atomicXor") {
    return BuiltinType::kAtomicXor;
  }
  if (name == "atomicExchange") {
    return BuiltinType::kAtomicExchange;
  }
  if (name == "atomicCompareExchangeWeak") {
    return BuiltinType::kAtomicCompareExchangeWeak;
  }
  return BuiltinType::kNone;
}

const char* str(BuiltinType i) {
  switch (i) {
    case BuiltinType::kNone:
      return "<none>";
    case BuiltinType::kAbs:
      return "abs";
    case BuiltinType::kAcos:
      return "acos";
    case BuiltinType::kAll:
      return "all";
    case BuiltinType::kAny:
      return "any";
    case BuiltinType::kArrayLength:
      return "arrayLength";
    case BuiltinType::kAsin:
      return "asin";
    case BuiltinType::kAtan:
      return "atan";
    case BuiltinType::kAtan2:
      return "atan2";
    case BuiltinType::kCeil:
      return "ceil";
    case BuiltinType::kClamp:
      return "clamp";
    case BuiltinType::kCos:
      return "cos";
    case BuiltinType::kCosh:
      return "cosh";
    case BuiltinType::kCountLeadingZeros:
      return "countLeadingZeros";
    case BuiltinType::kCountOneBits:
      return "countOneBits";
    case BuiltinType::kCountTrailingZeros:
      return "countTrailingZeros";
    case BuiltinType::kCross:
      return "cross";
    case BuiltinType::kDegrees:
      return "degrees";
    case BuiltinType::kDeterminant:
      return "determinant";
    case BuiltinType::kDistance:
      return "distance";
    case BuiltinType::kDot:
      return "dot";
    case BuiltinType::kDpdx:
      return "dpdx";
    case BuiltinType::kDpdxCoarse:
      return "dpdxCoarse";
    case BuiltinType::kDpdxFine:
      return "dpdxFine";
    case BuiltinType::kDpdy:
      return "dpdy";
    case BuiltinType::kDpdyCoarse:
      return "dpdyCoarse";
    case BuiltinType::kDpdyFine:
      return "dpdyFine";
    case BuiltinType::kExp:
      return "exp";
    case BuiltinType::kExp2:
      return "exp2";
    case BuiltinType::kExtractBits:
      return "extractBits";
    case BuiltinType::kFaceForward:
      return "faceForward";
    case BuiltinType::kFirstLeadingBit:
      return "firstLeadingBit";
    case BuiltinType::kFirstTrailingBit:
      return "firstTrailingBit";
    case BuiltinType::kFloor:
      return "floor";
    case BuiltinType::kFma:
      return "fma";
    case BuiltinType::kFract:
      return "fract";
    case BuiltinType::kFrexp:
      return "frexp";
    case BuiltinType::kFwidth:
      return "fwidth";
    case BuiltinType::kFwidthCoarse:
      return "fwidthCoarse";
    case BuiltinType::kFwidthFine:
      return "fwidthFine";
    case BuiltinType::kInsertBits:
      return "insertBits";
    case BuiltinType::kInverseSqrt:
      return "inverseSqrt";
    case BuiltinType::kLdexp:
      return "ldexp";
    case BuiltinType::kLength:
      return "length";
    case BuiltinType::kLog:
      return "log";
    case BuiltinType::kLog2:
      return "log2";
    case BuiltinType::kMax:
      return "max";
    case BuiltinType::kMin:
      return "min";
    case BuiltinType::kMix:
      return "mix";
    case BuiltinType::kModf:
      return "modf";
    case BuiltinType::kNormalize:
      return "normalize";
    case BuiltinType::kPack2x16float:
      return "pack2x16float";
    case BuiltinType::kPack2x16snorm:
      return "pack2x16snorm";
    case BuiltinType::kPack2x16unorm:
      return "pack2x16unorm";
    case BuiltinType::kPack4x8snorm:
      return "pack4x8snorm";
    case BuiltinType::kPack4x8unorm:
      return "pack4x8unorm";
    case BuiltinType::kPow:
      return "pow";
    case BuiltinType::kRadians:
      return "radians";
    case BuiltinType::kReflect:
      return "reflect";
    case BuiltinType::kRefract:
      return "refract";
    case BuiltinType::kReverseBits:
      return "reverseBits";
    case BuiltinType::kRound:
      return "round";
    case BuiltinType::kSelect:
      return "select";
    case BuiltinType::kSign:
      return "sign";
    case BuiltinType::kSin:
      return "sin";
    case BuiltinType::kSinh:
      return "sinh";
    case BuiltinType::kSmoothstep:
      return "smoothstep";
    case BuiltinType::kSmoothStep:
      return "smoothStep";
    case BuiltinType::kSqrt:
      return "sqrt";
    case BuiltinType::kStep:
      return "step";
    case BuiltinType::kStorageBarrier:
      return "storageBarrier";
    case BuiltinType::kTan:
      return "tan";
    case BuiltinType::kTanh:
      return "tanh";
    case BuiltinType::kTranspose:
      return "transpose";
    case BuiltinType::kTrunc:
      return "trunc";
    case BuiltinType::kUnpack2x16float:
      return "unpack2x16float";
    case BuiltinType::kUnpack2x16snorm:
      return "unpack2x16snorm";
    case BuiltinType::kUnpack2x16unorm:
      return "unpack2x16unorm";
    case BuiltinType::kUnpack4x8snorm:
      return "unpack4x8snorm";
    case BuiltinType::kUnpack4x8unorm:
      return "unpack4x8unorm";
    case BuiltinType::kWorkgroupBarrier:
      return "workgroupBarrier";
    case BuiltinType::kTextureDimensions:
      return "textureDimensions";
    case BuiltinType::kTextureGather:
      return "textureGather";
    case BuiltinType::kTextureGatherCompare:
      return "textureGatherCompare";
    case BuiltinType::kTextureNumLayers:
      return "textureNumLayers";
    case BuiltinType::kTextureNumLevels:
      return "textureNumLevels";
    case BuiltinType::kTextureNumSamples:
      return "textureNumSamples";
    case BuiltinType::kTextureSample:
      return "textureSample";
    case BuiltinType::kTextureSampleBias:
      return "textureSampleBias";
    case BuiltinType::kTextureSampleCompare:
      return "textureSampleCompare";
    case BuiltinType::kTextureSampleCompareLevel:
      return "textureSampleCompareLevel";
    case BuiltinType::kTextureSampleGrad:
      return "textureSampleGrad";
    case BuiltinType::kTextureSampleLevel:
      return "textureSampleLevel";
    case BuiltinType::kTextureStore:
      return "textureStore";
    case BuiltinType::kTextureLoad:
      return "textureLoad";
    case BuiltinType::kAtomicLoad:
      return "atomicLoad";
    case BuiltinType::kAtomicStore:
      return "atomicStore";
    case BuiltinType::kAtomicAdd:
      return "atomicAdd";
    case BuiltinType::kAtomicSub:
      return "atomicSub";
    case BuiltinType::kAtomicMax:
      return "atomicMax";
    case BuiltinType::kAtomicMin:
      return "atomicMin";
    case BuiltinType::kAtomicAnd:
      return "atomicAnd";
    case BuiltinType::kAtomicOr:
      return "atomicOr";
    case BuiltinType::kAtomicXor:
      return "atomicXor";
    case BuiltinType::kAtomicExchange:
      return "atomicExchange";
    case BuiltinType::kAtomicCompareExchangeWeak:
      return "atomicCompareExchangeWeak";
  }
  return "<unknown>";
}

std::ostream& operator<<(std::ostream& out, BuiltinType i) {
  out << str(i);
  return out;
}

}  // namespace tint::sem
