Brandon Jones b9d1540b31 Make use of std::string_view when parsing
There may very well be more places it can be used, but this updates
the easiest to identify cases that could be switched over with minimal
restructuring.

Change-Id: I5100f398731cc4e031c82548ac826d713d0a4cda
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/76640
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Brandon Jones <bajones@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
2022-01-25 17:15:37 +00:00

307 lines
8.2 KiB
C++

// 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_view Token::TypeToName(Type type) {
switch (type) {
case Token::Type::kError:
return "kError";
case Token::Type::kEOF:
return "kEOF";
case Token::Type::kIdentifier:
return "kIdentifier";
case Token::Type::kFloatLiteral:
return "kFloatLiteral";
case Token::Type::kSintLiteral:
return "kSintLiteral";
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::kAttr:
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::kShiftRight:
return ">>";
case Token::Type::kLessThan:
return "<";
case Token::Type::kLessThanEqual:
return "<=";
case Token::Type::kShiftLeft:
return "<<";
case Token::Type::kMod:
return "%";
case Token::Type::kNotEqual:
return "!=";
case Token::Type::kMinus:
return "-";
case Token::Type::kMinusMinus:
return "--";
case Token::Type::kPeriod:
return ".";
case Token::Type::kPlus:
return "+";
case Token::Type::kPlusPlus:
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::kTilde:
return "~";
case Token::Type::kUnderscore:
return "_";
case Token::Type::kXor:
return "^";
case Token::Type::kArray:
return "array";
case Token::Type::kAtomic:
return "atomic";
case Token::Type::kBitcast:
return "bitcast";
case Token::Type::kBool:
return "bool";
case Token::Type::kBreak:
return "break";
case Token::Type::kCase:
return "case";
case Token::Type::kContinue:
return "continue";
case Token::Type::kContinuing:
return "continuing";
case Token::Type::kDiscard:
return "discard";
case Token::Type::kDefault:
return "default";
case Token::Type::kElse:
return "else";
case Token::Type::kElseIf:
return "elseif";
case Token::Type::kF32:
return "f32";
case Token::Type::kFallthrough:
return "fallthrough";
case Token::Type::kFalse:
return "false";
case Token::Type::kFn:
return "fn";
case Token::Type::kFor:
return "for";
case Token::Type::kFunction:
return "function";
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::kLet:
return "let";
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::kPrivate:
return "private";
case Token::Type::kPtr:
return "ptr";
case Token::Type::kReturn:
return "return";
case Token::Type::kSampler:
return "sampler";
case Token::Type::kComparisonSampler:
return "sampler_comparison";
case Token::Type::kStorage:
return "storage";
case Token::Type::kStruct:
return "struct";
case Token::Type::kSwitch:
return "switch";
case Token::Type::kTextureDepth2d:
return "texture_depth_2d";
case Token::Type::kTextureDepth2dArray:
return "texture_depth_2d_array";
case Token::Type::kTextureDepthCube:
return "texture_depth_cube";
case Token::Type::kTextureDepthCubeArray:
return "texture_depth_cube_array";
case Token::Type::kTextureDepthMultisampled2d:
return "texture_depth_multisampled_2d";
case Token::Type::kTextureExternal:
return "texture_external";
case Token::Type::kTextureMultisampled2d:
return "texture_multisampled_2d";
case Token::Type::kTextureSampled1d:
return "texture_1d";
case Token::Type::kTextureSampled2d:
return "texture_2d";
case Token::Type::kTextureSampled2dArray:
return "texture_2d_array";
case Token::Type::kTextureSampled3d:
return "texture_3d";
case Token::Type::kTextureSampledCube:
return "texture_cube";
case Token::Type::kTextureSampledCubeArray:
return "texture_cube_array";
case Token::Type::kTextureStorage1d:
return "texture_storage_1d";
case Token::Type::kTextureStorage2d:
return "texture_storage_2d";
case Token::Type::kTextureStorage2dArray:
return "texture_storage_2d_array";
case Token::Type::kTextureStorage3d:
return "texture_storage_3d";
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::kVar:
return "var";
case Token::Type::kVec2:
return "vec2";
case Token::Type::kVec3:
return "vec3";
case Token::Type::kVec4:
return "vec4";
case Token::Type::kWorkgroup:
return "workgroup";
}
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::kSintLiteral), 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::kSintLiteral) {
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