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

#include "src/reader/wgsl/token.h"

namespace tint {
namespace reader {
namespace wgsl {

// static
std::string Token::TypeToName(Type type) {
  switch (type) {
    case Token::Type::kError:
      return "kError";
    case Token::Type::kReservedKeyword:
      return "kReservedKeyword";
    case Token::Type::kEOF:
      return "kEOF";
    case Token::Type::kIdentifier:
      return "kIdentifier";
    case Token::Type::kStringLiteral:
      return "kStringLiteral";
    case Token::Type::kFloatLiteral:
      return "kFloatLiteral";
    case Token::Type::kIntLiteral:
      return "kIntLiteral";
    case Token::Type::kUintLiteral:
      return "kUintLiteral";
    case Token::Type::kUninitialized:
      return "kUninitialized";

    case Token::Type::kAnd:
      return "&";
    case Token::Type::kAndAnd:
      return "&&";
    case Token::Type::kArrow:
      return "->";
    case Token::Type::kAttrLeft:
      return "[[";
    case Token::Type::kAttrRight:
      return "]]";
    case Token::Type::kForwardSlash:
      return "/";
    case Token::Type::kBang:
      return "!";
    case Token::Type::kBracketLeft:
      return "[";
    case Token::Type::kBracketRight:
      return "]";
    case Token::Type::kBraceLeft:
      return "{";
    case Token::Type::kBraceRight:
      return "}";
    case Token::Type::kColon:
      return ":";
    case Token::Type::kComma:
      return ",";
    case Token::Type::kEqual:
      return "=";
    case Token::Type::kEqualEqual:
      return "==";
    case Token::Type::kGreaterThan:
      return ">";
    case Token::Type::kGreaterThanEqual:
      return ">=";
    case Token::Type::kLessThan:
      return "<";
    case Token::Type::kLessThanEqual:
      return "<=";
    case Token::Type::kMod:
      return "%";
    case Token::Type::kNotEqual:
      return "!=";
    case Token::Type::kMinus:
      return "-";
    case Token::Type::kNamespace:
      return "::";
    case Token::Type::kPeriod:
      return ".";
    case Token::Type::kPlus:
      return "+";
    case Token::Type::kOr:
      return "|";
    case Token::Type::kOrOr:
      return "||";
    case Token::Type::kParenLeft:
      return "(";
    case Token::Type::kParenRight:
      return ")";
    case Token::Type::kSemicolon:
      return ";";
    case Token::Type::kStar:
      return "*";
    case Token::Type::kXor:
      return "^";

    case Token::Type::kAll:
      return "all";
    case Token::Type::kAny:
      return "any";
    case Token::Type::kArray:
      return "array";
    case Token::Type::kAs:
      return "as";
    case Token::Type::kBinding:
      return "binding";
    case Token::Type::kBlock:
      return "block";
    case Token::Type::kBool:
      return "bool";
    case Token::Type::kBreak:
      return "break";
    case Token::Type::kBuiltin:
      return "builtin";
    case Token::Type::kCase:
      return "case";
    case Token::Type::kCast:
      return "cast";
    case Token::Type::kCompute:
      return "compute";
    case Token::Type::kConst:
      return "const";
    case Token::Type::kContinue:
      return "continue";
    case Token::Type::kContinuing:
      return "continuing";
    case Token::Type::kCoarse:
      return "coarse";
    case Token::Type::kDefault:
      return "default";
    case Token::Type::kDot:
      return "dot";
    case Token::Type::kDpdx:
      return "dpdx";
    case Token::Type::kDpdy:
      return "dpdy";
    case Token::Type::kElse:
      return "else";
    case Token::Type::kElseIf:
      return "elseif";
    case Token::Type::kEntryPoint:
      return "entry_point";
    case Token::Type::kF32:
      return "f32";
    case Token::Type::kFallthrough:
      return "fallthrough";
    case Token::Type::kFalse:
      return "false";
    case Token::Type::kFine:
      return "fine";
    case Token::Type::kFn:
      return "fn";
    case Token::Type::kFragCoord:
      return "frag_coord";
    case Token::Type::kFragDepth:
      return "frag_depth";
    case Token::Type::kFragment:
      return "fragment";
    case Token::Type::kFrontFacing:
      return "front_facing";
    case Token::Type::kFunction:
      return "function";
    case Token::Type::kFwidth:
      return "fwidth";
    case Token::Type::kGlobalInvocationId:
      return "global_invocation_id";
    case Token::Type::kI32:
      return "i32";
    case Token::Type::kIf:
      return "if";
    case Token::Type::kImage:
      return "image";
    case Token::Type::kImport:
      return "import";
    case Token::Type::kIn:
      return "in";
    case Token::Type::kInstanceIdx:
      return "instance_idx";
    case Token::Type::kIsNan:
      return "is_nan";
    case Token::Type::kIsInf:
      return "is_inf";
    case Token::Type::kIsFinite:
      return "is_finite";
    case Token::Type::kIsNormal:
      return "is_normal";
    case Token::Type::kKill:
      return "kill";
    case Token::Type::kLocalInvocationId:
      return "local_invocation_id";
    case Token::Type::kLocalInvocationIdx:
      return "local_invocation_idx";
    case Token::Type::kLocation:
      return "location";
    case Token::Type::kLoop:
      return "loop";
    case Token::Type::kMat2x2:
      return "mat2x2";
    case Token::Type::kMat2x3:
      return "mat2x3";
    case Token::Type::kMat2x4:
      return "mat2x4";
    case Token::Type::kMat3x2:
      return "mat3x2";
    case Token::Type::kMat3x3:
      return "mat3x3";
    case Token::Type::kMat3x4:
      return "mat3x4";
    case Token::Type::kMat4x2:
      return "mat4x2";
    case Token::Type::kMat4x3:
      return "mat4x3";
    case Token::Type::kMat4x4:
      return "mat4x4";
    case Token::Type::kNop:
      return "nop";
    case Token::Type::kNumWorkgroups:
      return "num_workgroups";
    case Token::Type::kOffset:
      return "offset";
    case Token::Type::kOut:
      return "out";
    case Token::Type::kOuterProduct:
      return "outer_product";
    case Token::Type::kPosition:
      return "position";
    case Token::Type::kPremerge:
      return "premerge";
    case Token::Type::kPrivate:
      return "private";
    case Token::Type::kPtr:
      return "ptr";
    case Token::Type::kRegardless:
      return "regardless";
    case Token::Type::kReturn:
      return "return";
    case Token::Type::kSet:
      return "set";
    case Token::Type::kStorageBuffer:
      return "storage_buffer";
    case Token::Type::kStruct:
      return "struct";
    case Token::Type::kSwitch:
      return "switch";
    case Token::Type::kTrue:
      return "true";
    case Token::Type::kType:
      return "type";
    case Token::Type::kU32:
      return "u32";
    case Token::Type::kUniform:
      return "uniform";
    case Token::Type::kUniformConstant:
      return "uniform_constant";
    case Token::Type::kUnless:
      return "unless";
    case Token::Type::kVar:
      return "var";
    case Token::Type::kVec2:
      return "vec2";
    case Token::Type::kVec3:
      return "vec3";
    case Token::Type::kVec4:
      return "vec4";
    case Token::Type::kVertex:
      return "vertex";
    case Token::Type::kVertexIdx:
      return "vertex_idx";
    case Token::Type::kVoid:
      return "void";
    case Token::Type::kWorkgroup:
      return "workgroup";
    case Token::Type::kWorkgroupSize:
      return "workgroup_size";
  }

  return "<unknown>";
}

Token::Token() : type_(Type::kUninitialized) {}

Token::Token(Type type, const Source& source, const std::string& val)
    : type_(type), source_(source), val_str_(val) {}

Token::Token(const Source& source, uint32_t val)
    : type_(Type::kUintLiteral), source_(source), val_uint_(val) {}

Token::Token(const Source& source, int32_t val)
    : type_(Type::kIntLiteral), source_(source), val_int_(val) {}

Token::Token(const Source& source, float val)
    : type_(Type::kFloatLiteral), source_(source), val_float_(val) {}

Token::Token(Type type, const Source& source) : Token(type, source, "") {}

Token::Token(Token&&) = default;

Token::Token(const Token&) = default;

Token::~Token() = default;

Token& Token::operator=(const Token&) = default;

std::string Token::to_str() const {
  if (type_ == Type::kFloatLiteral) {
    return std::to_string(val_float_);
  }
  if (type_ == Type::kIntLiteral) {
    return std::to_string(val_int_);
  }
  if (type_ == Type::kUintLiteral) {
    return std::to_string(val_uint_);
  }
  return val_str_;
}

float Token::to_f32() const {
  return val_float_;
}

uint32_t Token::to_u32() const {
  return val_uint_;
}

int32_t Token::to_i32() const {
  return val_int_;
}

}  // namespace wgsl
}  // namespace reader
}  // namespace tint
