| // 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/intrinsic-gen |
| // using the template: |
| // src/tint/resolver/intrinsic_table.inl.tmpl |
| // and the intrinsic defintion file: |
| // src/tint/intrinsics.def |
| // |
| // Do not modify this file directly |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| // clang-format off |
| |
| /// TypeMatcher for 'type bool' |
| /// @see src/tint/intrinsics.def:73:6 |
| class Bool : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Bool::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_bool(ty)) { |
| return nullptr; |
| } |
| return build_bool(state); |
| } |
| |
| std::string Bool::String(MatchState*) const { |
| return "bool"; |
| } |
| |
| /// TypeMatcher for 'type af' |
| /// @see src/tint/intrinsics.def:74:48 |
| class Af : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Af::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_af(ty)) { |
| return nullptr; |
| } |
| return build_af(state); |
| } |
| |
| std::string Af::String(MatchState*) const { |
| std::stringstream ss; |
| ss << "abstract-float"; |
| return ss.str(); |
| } |
| |
| /// TypeMatcher for 'type ai' |
| /// @see src/tint/intrinsics.def:75:48 |
| class Ai : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Ai::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_ai(ty)) { |
| return nullptr; |
| } |
| return build_ai(state); |
| } |
| |
| std::string Ai::String(MatchState*) const { |
| std::stringstream ss; |
| ss << "abstract-int"; |
| return ss.str(); |
| } |
| |
| /// TypeMatcher for 'type i32' |
| /// @see src/tint/intrinsics.def:76:21 |
| class I32 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* I32::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_i32(ty)) { |
| return nullptr; |
| } |
| return build_i32(state); |
| } |
| |
| std::string I32::String(MatchState*) const { |
| return "i32"; |
| } |
| |
| /// TypeMatcher for 'type u32' |
| /// @see src/tint/intrinsics.def:77:21 |
| class U32 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* U32::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_u32(ty)) { |
| return nullptr; |
| } |
| return build_u32(state); |
| } |
| |
| std::string U32::String(MatchState*) const { |
| return "u32"; |
| } |
| |
| /// TypeMatcher for 'type f32' |
| /// @see src/tint/intrinsics.def:78:21 |
| class F32 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* F32::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_f32(ty)) { |
| return nullptr; |
| } |
| return build_f32(state); |
| } |
| |
| std::string F32::String(MatchState*) const { |
| return "f32"; |
| } |
| |
| /// TypeMatcher for 'type f16' |
| /// @see src/tint/intrinsics.def:79:21 |
| class F16 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* F16::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_f16(ty)) { |
| return nullptr; |
| } |
| return build_f16(state); |
| } |
| |
| std::string F16::String(MatchState*) const { |
| return "f16"; |
| } |
| |
| /// TypeMatcher for 'type vec2' |
| /// @see src/tint/intrinsics.def:80:6 |
| class Vec2 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Vec2::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_vec2(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_vec2(state, T); |
| } |
| |
| std::string Vec2::String(MatchState* state) const { |
| const std::string T = state->TypeName(); |
| return "vec2<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type vec3' |
| /// @see src/tint/intrinsics.def:81:6 |
| class Vec3 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Vec3::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_vec3(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_vec3(state, T); |
| } |
| |
| std::string Vec3::String(MatchState* state) const { |
| const std::string T = state->TypeName(); |
| return "vec3<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type vec4' |
| /// @see src/tint/intrinsics.def:82:6 |
| class Vec4 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Vec4::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_vec4(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_vec4(state, T); |
| } |
| |
| std::string Vec4::String(MatchState* state) const { |
| const std::string T = state->TypeName(); |
| return "vec4<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type mat2x2' |
| /// @see src/tint/intrinsics.def:83:6 |
| class Mat2X2 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Mat2X2::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_mat2x2(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_mat2x2(state, T); |
| } |
| |
| std::string Mat2X2::String(MatchState* state) const { |
| const std::string T = state->TypeName(); |
| return "mat2x2<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type mat2x3' |
| /// @see src/tint/intrinsics.def:84:6 |
| class Mat2X3 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Mat2X3::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_mat2x3(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_mat2x3(state, T); |
| } |
| |
| std::string Mat2X3::String(MatchState* state) const { |
| const std::string T = state->TypeName(); |
| return "mat2x3<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type mat2x4' |
| /// @see src/tint/intrinsics.def:85:6 |
| class Mat2X4 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Mat2X4::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_mat2x4(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_mat2x4(state, T); |
| } |
| |
| std::string Mat2X4::String(MatchState* state) const { |
| const std::string T = state->TypeName(); |
| return "mat2x4<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type mat3x2' |
| /// @see src/tint/intrinsics.def:86:6 |
| class Mat3X2 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Mat3X2::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_mat3x2(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_mat3x2(state, T); |
| } |
| |
| std::string Mat3X2::String(MatchState* state) const { |
| const std::string T = state->TypeName(); |
| return "mat3x2<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type mat3x3' |
| /// @see src/tint/intrinsics.def:87:6 |
| class Mat3X3 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Mat3X3::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_mat3x3(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_mat3x3(state, T); |
| } |
| |
| std::string Mat3X3::String(MatchState* state) const { |
| const std::string T = state->TypeName(); |
| return "mat3x3<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type mat3x4' |
| /// @see src/tint/intrinsics.def:88:6 |
| class Mat3X4 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Mat3X4::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_mat3x4(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_mat3x4(state, T); |
| } |
| |
| std::string Mat3X4::String(MatchState* state) const { |
| const std::string T = state->TypeName(); |
| return "mat3x4<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type mat4x2' |
| /// @see src/tint/intrinsics.def:89:6 |
| class Mat4X2 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Mat4X2::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_mat4x2(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_mat4x2(state, T); |
| } |
| |
| std::string Mat4X2::String(MatchState* state) const { |
| const std::string T = state->TypeName(); |
| return "mat4x2<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type mat4x3' |
| /// @see src/tint/intrinsics.def:90:6 |
| class Mat4X3 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Mat4X3::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_mat4x3(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_mat4x3(state, T); |
| } |
| |
| std::string Mat4X3::String(MatchState* state) const { |
| const std::string T = state->TypeName(); |
| return "mat4x3<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type mat4x4' |
| /// @see src/tint/intrinsics.def:91:6 |
| class Mat4X4 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Mat4X4::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_mat4x4(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_mat4x4(state, T); |
| } |
| |
| std::string Mat4X4::String(MatchState* state) const { |
| const std::string T = state->TypeName(); |
| return "mat4x4<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type vec' |
| /// @see src/tint/intrinsics.def:92:34 |
| class Vec : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Vec::Match(MatchState& state, const sem::Type* ty) const { |
| Number N = Number::invalid; |
| const sem::Type* T = nullptr; |
| if (!match_vec(ty, N, T)) { |
| return nullptr; |
| } |
| N = state.Num(N); |
| if (!N.IsValid()) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_vec(state, N, T); |
| } |
| |
| std::string Vec::String(MatchState* state) const { |
| const std::string N = state->NumName(); |
| const std::string T = state->TypeName(); |
| std::stringstream ss; |
| ss << "vec" << N << "<" << T << ">"; |
| return ss.str(); |
| } |
| |
| /// TypeMatcher for 'type mat' |
| /// @see src/tint/intrinsics.def:93:34 |
| class Mat : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Mat::Match(MatchState& state, const sem::Type* ty) const { |
| Number N = Number::invalid; |
| Number M = Number::invalid; |
| const sem::Type* T = nullptr; |
| if (!match_mat(ty, N, M, T)) { |
| return nullptr; |
| } |
| N = state.Num(N); |
| if (!N.IsValid()) { |
| return nullptr; |
| } |
| M = state.Num(M); |
| if (!M.IsValid()) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_mat(state, N, M, T); |
| } |
| |
| std::string Mat::String(MatchState* state) const { |
| const std::string N = state->NumName(); |
| const std::string M = state->NumName(); |
| const std::string T = state->TypeName(); |
| std::stringstream ss; |
| ss << "mat" << N << "x" << M << "<" << T << ">"; |
| return ss.str(); |
| } |
| |
| /// TypeMatcher for 'type ptr' |
| /// @see src/tint/intrinsics.def:94:6 |
| class Ptr : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Ptr::Match(MatchState& state, const sem::Type* ty) const { |
| Number S = Number::invalid; |
| const sem::Type* T = nullptr; |
| Number A = Number::invalid; |
| if (!match_ptr(ty, S, T, A)) { |
| return nullptr; |
| } |
| S = state.Num(S); |
| if (!S.IsValid()) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| A = state.Num(A); |
| if (!A.IsValid()) { |
| return nullptr; |
| } |
| return build_ptr(state, S, T, A); |
| } |
| |
| std::string Ptr::String(MatchState* state) const { |
| const std::string S = state->NumName(); |
| const std::string T = state->TypeName(); |
| const std::string A = state->NumName(); |
| return "ptr<" + S + ", " + T + ", " + A + ">"; |
| } |
| |
| /// TypeMatcher for 'type atomic' |
| /// @see src/tint/intrinsics.def:95:6 |
| class Atomic : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Atomic::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_atomic(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_atomic(state, T); |
| } |
| |
| std::string Atomic::String(MatchState* state) const { |
| const std::string T = state->TypeName(); |
| return "atomic<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type array' |
| /// @see src/tint/intrinsics.def:96:6 |
| class Array : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Array::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_array(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_array(state, T); |
| } |
| |
| std::string Array::String(MatchState* state) const { |
| const std::string T = state->TypeName(); |
| return "array<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type sampler' |
| /// @see src/tint/intrinsics.def:97:6 |
| class Sampler : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Sampler::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_sampler(ty)) { |
| return nullptr; |
| } |
| return build_sampler(state); |
| } |
| |
| std::string Sampler::String(MatchState*) const { |
| return "sampler"; |
| } |
| |
| /// TypeMatcher for 'type sampler_comparison' |
| /// @see src/tint/intrinsics.def:98:6 |
| class SamplerComparison : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* SamplerComparison::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_sampler_comparison(ty)) { |
| return nullptr; |
| } |
| return build_sampler_comparison(state); |
| } |
| |
| std::string SamplerComparison::String(MatchState*) const { |
| return "sampler_comparison"; |
| } |
| |
| /// TypeMatcher for 'type texture_1d' |
| /// @see src/tint/intrinsics.def:99:6 |
| class Texture1D : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Texture1D::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_texture_1d(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_texture_1d(state, T); |
| } |
| |
| std::string Texture1D::String(MatchState* state) const { |
| const std::string T = state->TypeName(); |
| return "texture_1d<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type texture_2d' |
| /// @see src/tint/intrinsics.def:100:6 |
| class Texture2D : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Texture2D::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_texture_2d(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_texture_2d(state, T); |
| } |
| |
| std::string Texture2D::String(MatchState* state) const { |
| const std::string T = state->TypeName(); |
| return "texture_2d<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type texture_2d_array' |
| /// @see src/tint/intrinsics.def:101:6 |
| class Texture2DArray : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Texture2DArray::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_texture_2d_array(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_texture_2d_array(state, T); |
| } |
| |
| std::string Texture2DArray::String(MatchState* state) const { |
| const std::string T = state->TypeName(); |
| return "texture_2d_array<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type texture_3d' |
| /// @see src/tint/intrinsics.def:102:6 |
| class Texture3D : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Texture3D::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_texture_3d(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_texture_3d(state, T); |
| } |
| |
| std::string Texture3D::String(MatchState* state) const { |
| const std::string T = state->TypeName(); |
| return "texture_3d<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type texture_cube' |
| /// @see src/tint/intrinsics.def:103:6 |
| class TextureCube : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* TextureCube::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_texture_cube(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_texture_cube(state, T); |
| } |
| |
| std::string TextureCube::String(MatchState* state) const { |
| const std::string T = state->TypeName(); |
| return "texture_cube<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type texture_cube_array' |
| /// @see src/tint/intrinsics.def:104:6 |
| class TextureCubeArray : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* TextureCubeArray::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_texture_cube_array(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_texture_cube_array(state, T); |
| } |
| |
| std::string TextureCubeArray::String(MatchState* state) const { |
| const std::string T = state->TypeName(); |
| return "texture_cube_array<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type texture_multisampled_2d' |
| /// @see src/tint/intrinsics.def:105:6 |
| class TextureMultisampled2D : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* TextureMultisampled2D::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_texture_multisampled_2d(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_texture_multisampled_2d(state, T); |
| } |
| |
| std::string TextureMultisampled2D::String(MatchState* state) const { |
| const std::string T = state->TypeName(); |
| return "texture_multisampled_2d<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type texture_depth_2d' |
| /// @see src/tint/intrinsics.def:106:6 |
| class TextureDepth2D : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* TextureDepth2D::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_texture_depth_2d(ty)) { |
| return nullptr; |
| } |
| return build_texture_depth_2d(state); |
| } |
| |
| std::string TextureDepth2D::String(MatchState*) const { |
| return "texture_depth_2d"; |
| } |
| |
| /// TypeMatcher for 'type texture_depth_2d_array' |
| /// @see src/tint/intrinsics.def:107:6 |
| class TextureDepth2DArray : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* TextureDepth2DArray::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_texture_depth_2d_array(ty)) { |
| return nullptr; |
| } |
| return build_texture_depth_2d_array(state); |
| } |
| |
| std::string TextureDepth2DArray::String(MatchState*) const { |
| return "texture_depth_2d_array"; |
| } |
| |
| /// TypeMatcher for 'type texture_depth_cube' |
| /// @see src/tint/intrinsics.def:108:6 |
| class TextureDepthCube : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* TextureDepthCube::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_texture_depth_cube(ty)) { |
| return nullptr; |
| } |
| return build_texture_depth_cube(state); |
| } |
| |
| std::string TextureDepthCube::String(MatchState*) const { |
| return "texture_depth_cube"; |
| } |
| |
| /// TypeMatcher for 'type texture_depth_cube_array' |
| /// @see src/tint/intrinsics.def:109:6 |
| class TextureDepthCubeArray : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* TextureDepthCubeArray::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_texture_depth_cube_array(ty)) { |
| return nullptr; |
| } |
| return build_texture_depth_cube_array(state); |
| } |
| |
| std::string TextureDepthCubeArray::String(MatchState*) const { |
| return "texture_depth_cube_array"; |
| } |
| |
| /// TypeMatcher for 'type texture_depth_multisampled_2d' |
| /// @see src/tint/intrinsics.def:110:6 |
| class TextureDepthMultisampled2D : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* TextureDepthMultisampled2D::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_texture_depth_multisampled_2d(ty)) { |
| return nullptr; |
| } |
| return build_texture_depth_multisampled_2d(state); |
| } |
| |
| std::string TextureDepthMultisampled2D::String(MatchState*) const { |
| return "texture_depth_multisampled_2d"; |
| } |
| |
| /// TypeMatcher for 'type texture_storage_1d' |
| /// @see src/tint/intrinsics.def:111:6 |
| class TextureStorage1D : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* TextureStorage1D::Match(MatchState& state, const sem::Type* ty) const { |
| Number F = Number::invalid; |
| Number A = Number::invalid; |
| if (!match_texture_storage_1d(ty, F, A)) { |
| return nullptr; |
| } |
| F = state.Num(F); |
| if (!F.IsValid()) { |
| return nullptr; |
| } |
| A = state.Num(A); |
| if (!A.IsValid()) { |
| return nullptr; |
| } |
| return build_texture_storage_1d(state, F, A); |
| } |
| |
| std::string TextureStorage1D::String(MatchState* state) const { |
| const std::string F = state->NumName(); |
| const std::string A = state->NumName(); |
| return "texture_storage_1d<" + F + ", " + A + ">"; |
| } |
| |
| /// TypeMatcher for 'type texture_storage_2d' |
| /// @see src/tint/intrinsics.def:112:6 |
| class TextureStorage2D : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* TextureStorage2D::Match(MatchState& state, const sem::Type* ty) const { |
| Number F = Number::invalid; |
| Number A = Number::invalid; |
| if (!match_texture_storage_2d(ty, F, A)) { |
| return nullptr; |
| } |
| F = state.Num(F); |
| if (!F.IsValid()) { |
| return nullptr; |
| } |
| A = state.Num(A); |
| if (!A.IsValid()) { |
| return nullptr; |
| } |
| return build_texture_storage_2d(state, F, A); |
| } |
| |
| std::string TextureStorage2D::String(MatchState* state) const { |
| const std::string F = state->NumName(); |
| const std::string A = state->NumName(); |
| return "texture_storage_2d<" + F + ", " + A + ">"; |
| } |
| |
| /// TypeMatcher for 'type texture_storage_2d_array' |
| /// @see src/tint/intrinsics.def:113:6 |
| class TextureStorage2DArray : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* TextureStorage2DArray::Match(MatchState& state, const sem::Type* ty) const { |
| Number F = Number::invalid; |
| Number A = Number::invalid; |
| if (!match_texture_storage_2d_array(ty, F, A)) { |
| return nullptr; |
| } |
| F = state.Num(F); |
| if (!F.IsValid()) { |
| return nullptr; |
| } |
| A = state.Num(A); |
| if (!A.IsValid()) { |
| return nullptr; |
| } |
| return build_texture_storage_2d_array(state, F, A); |
| } |
| |
| std::string TextureStorage2DArray::String(MatchState* state) const { |
| const std::string F = state->NumName(); |
| const std::string A = state->NumName(); |
| return "texture_storage_2d_array<" + F + ", " + A + ">"; |
| } |
| |
| /// TypeMatcher for 'type texture_storage_3d' |
| /// @see src/tint/intrinsics.def:114:6 |
| class TextureStorage3D : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* TextureStorage3D::Match(MatchState& state, const sem::Type* ty) const { |
| Number F = Number::invalid; |
| Number A = Number::invalid; |
| if (!match_texture_storage_3d(ty, F, A)) { |
| return nullptr; |
| } |
| F = state.Num(F); |
| if (!F.IsValid()) { |
| return nullptr; |
| } |
| A = state.Num(A); |
| if (!A.IsValid()) { |
| return nullptr; |
| } |
| return build_texture_storage_3d(state, F, A); |
| } |
| |
| std::string TextureStorage3D::String(MatchState* state) const { |
| const std::string F = state->NumName(); |
| const std::string A = state->NumName(); |
| return "texture_storage_3d<" + F + ", " + A + ">"; |
| } |
| |
| /// TypeMatcher for 'type texture_external' |
| /// @see src/tint/intrinsics.def:115:6 |
| class TextureExternal : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* TextureExternal::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_texture_external(ty)) { |
| return nullptr; |
| } |
| return build_texture_external(state); |
| } |
| |
| std::string TextureExternal::String(MatchState*) const { |
| return "texture_external"; |
| } |
| |
| /// TypeMatcher for 'type __modf_result' |
| /// @see src/tint/intrinsics.def:117:6 |
| class ModfResult : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* ModfResult::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_modf_result(ty)) { |
| return nullptr; |
| } |
| return build_modf_result(state); |
| } |
| |
| std::string ModfResult::String(MatchState*) const { |
| return "__modf_result"; |
| } |
| |
| /// TypeMatcher for 'type __modf_result_vec' |
| /// @see src/tint/intrinsics.def:118:39 |
| class ModfResultVec : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* ModfResultVec::Match(MatchState& state, const sem::Type* ty) const { |
| Number N = Number::invalid; |
| if (!match_modf_result_vec(ty, N)) { |
| return nullptr; |
| } |
| N = state.Num(N); |
| if (!N.IsValid()) { |
| return nullptr; |
| } |
| return build_modf_result_vec(state, N); |
| } |
| |
| std::string ModfResultVec::String(MatchState* state) const { |
| const std::string N = state->NumName(); |
| std::stringstream ss; |
| ss << "__modf_result_vec" << N; |
| return ss.str(); |
| } |
| |
| /// TypeMatcher for 'type __frexp_result' |
| /// @see src/tint/intrinsics.def:119:6 |
| class FrexpResult : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* FrexpResult::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_frexp_result(ty)) { |
| return nullptr; |
| } |
| return build_frexp_result(state); |
| } |
| |
| std::string FrexpResult::String(MatchState*) const { |
| return "__frexp_result"; |
| } |
| |
| /// TypeMatcher for 'type __frexp_result_vec' |
| /// @see src/tint/intrinsics.def:120:40 |
| class FrexpResultVec : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* FrexpResultVec::Match(MatchState& state, const sem::Type* ty) const { |
| Number N = Number::invalid; |
| if (!match_frexp_result_vec(ty, N)) { |
| return nullptr; |
| } |
| N = state.Num(N); |
| if (!N.IsValid()) { |
| return nullptr; |
| } |
| return build_frexp_result_vec(state, N); |
| } |
| |
| std::string FrexpResultVec::String(MatchState* state) const { |
| const std::string N = state->NumName(); |
| std::stringstream ss; |
| ss << "__frexp_result_vec" << N; |
| return ss.str(); |
| } |
| |
| /// TypeMatcher for 'type __atomic_compare_exchange_result' |
| /// @see src/tint/intrinsics.def:122:6 |
| class AtomicCompareExchangeResult : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* AtomicCompareExchangeResult::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_atomic_compare_exchange_result(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_atomic_compare_exchange_result(state, T); |
| } |
| |
| std::string AtomicCompareExchangeResult::String(MatchState* state) const { |
| const std::string T = state->TypeName(); |
| return "__atomic_compare_exchange_result<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'match f32f16' |
| /// @see src/tint/intrinsics.def:130:7 |
| class F32F16 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules, and returns the |
| /// expected, canonicalized type on success. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* F32F16::Match(MatchState& state, const sem::Type* ty) const { |
| if (match_f32(ty)) { |
| return build_f32(state); |
| } |
| if (match_f16(ty)) { |
| return build_f16(state); |
| } |
| return nullptr; |
| } |
| |
| std::string F32F16::String(MatchState*) const { |
| std::stringstream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << F32().String(nullptr) << " or " << F16().String(nullptr); |
| return ss.str(); |
| } |
| |
| /// TypeMatcher for 'match fiu32' |
| /// @see src/tint/intrinsics.def:131:7 |
| class Fiu32 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules, and returns the |
| /// expected, canonicalized type on success. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Fiu32::Match(MatchState& state, const sem::Type* ty) const { |
| if (match_i32(ty)) { |
| return build_i32(state); |
| } |
| if (match_u32(ty)) { |
| return build_u32(state); |
| } |
| if (match_f32(ty)) { |
| return build_f32(state); |
| } |
| return nullptr; |
| } |
| |
| std::string Fiu32::String(MatchState*) const { |
| std::stringstream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << F32().String(nullptr) << ", " << I32().String(nullptr) << " or " << U32().String(nullptr); |
| return ss.str(); |
| } |
| |
| /// TypeMatcher for 'match fi32' |
| /// @see src/tint/intrinsics.def:132:7 |
| class Fi32 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules, and returns the |
| /// expected, canonicalized type on success. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Fi32::Match(MatchState& state, const sem::Type* ty) const { |
| if (match_i32(ty)) { |
| return build_i32(state); |
| } |
| if (match_f32(ty)) { |
| return build_f32(state); |
| } |
| return nullptr; |
| } |
| |
| std::string Fi32::String(MatchState*) const { |
| std::stringstream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << F32().String(nullptr) << " or " << I32().String(nullptr); |
| return ss.str(); |
| } |
| |
| /// TypeMatcher for 'match iu32' |
| /// @see src/tint/intrinsics.def:133:7 |
| class Iu32 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules, and returns the |
| /// expected, canonicalized type on success. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Iu32::Match(MatchState& state, const sem::Type* ty) const { |
| if (match_i32(ty)) { |
| return build_i32(state); |
| } |
| if (match_u32(ty)) { |
| return build_u32(state); |
| } |
| return nullptr; |
| } |
| |
| std::string Iu32::String(MatchState*) const { |
| std::stringstream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << I32().String(nullptr) << " or " << U32().String(nullptr); |
| return ss.str(); |
| } |
| |
| /// TypeMatcher for 'match scalar' |
| /// @see src/tint/intrinsics.def:134:7 |
| class Scalar : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules, and returns the |
| /// expected, canonicalized type on success. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* Scalar::Match(MatchState& state, const sem::Type* ty) const { |
| if (match_i32(ty)) { |
| return build_i32(state); |
| } |
| if (match_u32(ty)) { |
| return build_u32(state); |
| } |
| if (match_f32(ty)) { |
| return build_f32(state); |
| } |
| if (match_f16(ty)) { |
| return build_f16(state); |
| } |
| if (match_bool(ty)) { |
| return build_bool(state); |
| } |
| return nullptr; |
| } |
| |
| std::string Scalar::String(MatchState*) const { |
| std::stringstream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << F32().String(nullptr) << ", " << F16().String(nullptr) << ", " << I32().String(nullptr) << ", " << U32().String(nullptr) << " or " << Bool().String(nullptr); |
| return ss.str(); |
| } |
| |
| /// TypeMatcher for 'match abstract_or_scalar' |
| /// @see src/tint/intrinsics.def:135:7 |
| class AbstractOrScalar : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules, and returns the |
| /// expected, canonicalized type on success. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* AbstractOrScalar::Match(MatchState& state, const sem::Type* ty) const { |
| if (match_af(ty)) { |
| return build_af(state); |
| } |
| if (match_ai(ty)) { |
| return build_ai(state); |
| } |
| if (match_i32(ty)) { |
| return build_i32(state); |
| } |
| if (match_u32(ty)) { |
| return build_u32(state); |
| } |
| if (match_f32(ty)) { |
| return build_f32(state); |
| } |
| if (match_f16(ty)) { |
| return build_f16(state); |
| } |
| if (match_bool(ty)) { |
| return build_bool(state); |
| } |
| return nullptr; |
| } |
| |
| std::string AbstractOrScalar::String(MatchState*) const { |
| std::stringstream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << Ai().String(nullptr) << ", " << Af().String(nullptr) << ", " << F32().String(nullptr) << ", " << F16().String(nullptr) << ", " << I32().String(nullptr) << ", " << U32().String(nullptr) << " or " << Bool().String(nullptr); |
| return ss.str(); |
| } |
| |
| /// TypeMatcher for 'match af_f32' |
| /// @see src/tint/intrinsics.def:136:7 |
| class AfF32 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules, and returns the |
| /// expected, canonicalized type on success. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* AfF32::Match(MatchState& state, const sem::Type* ty) const { |
| if (match_af(ty)) { |
| return build_af(state); |
| } |
| if (match_f32(ty)) { |
| return build_f32(state); |
| } |
| return nullptr; |
| } |
| |
| std::string AfF32::String(MatchState*) const { |
| std::stringstream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << Af().String(nullptr) << " or " << F32().String(nullptr); |
| return ss.str(); |
| } |
| |
| /// TypeMatcher for 'match af_f32f16' |
| /// @see src/tint/intrinsics.def:137:7 |
| class AfF32F16 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules, and returns the |
| /// expected, canonicalized type on success. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* AfF32F16::Match(MatchState& state, const sem::Type* ty) const { |
| if (match_af(ty)) { |
| return build_af(state); |
| } |
| if (match_f32(ty)) { |
| return build_f32(state); |
| } |
| if (match_f16(ty)) { |
| return build_f16(state); |
| } |
| return nullptr; |
| } |
| |
| std::string AfF32F16::String(MatchState*) const { |
| std::stringstream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << Af().String(nullptr) << ", " << F32().String(nullptr) << " or " << F16().String(nullptr); |
| return ss.str(); |
| } |
| |
| /// TypeMatcher for 'match scalar_no_f32' |
| /// @see src/tint/intrinsics.def:138:7 |
| class ScalarNoF32 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules, and returns the |
| /// expected, canonicalized type on success. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* ScalarNoF32::Match(MatchState& state, const sem::Type* ty) const { |
| if (match_i32(ty)) { |
| return build_i32(state); |
| } |
| if (match_u32(ty)) { |
| return build_u32(state); |
| } |
| if (match_f16(ty)) { |
| return build_f16(state); |
| } |
| if (match_bool(ty)) { |
| return build_bool(state); |
| } |
| return nullptr; |
| } |
| |
| std::string ScalarNoF32::String(MatchState*) const { |
| std::stringstream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << I32().String(nullptr) << ", " << F16().String(nullptr) << ", " << U32().String(nullptr) << " or " << Bool().String(nullptr); |
| return ss.str(); |
| } |
| |
| /// TypeMatcher for 'match scalar_no_f16' |
| /// @see src/tint/intrinsics.def:139:7 |
| class ScalarNoF16 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules, and returns the |
| /// expected, canonicalized type on success. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* ScalarNoF16::Match(MatchState& state, const sem::Type* ty) const { |
| if (match_i32(ty)) { |
| return build_i32(state); |
| } |
| if (match_u32(ty)) { |
| return build_u32(state); |
| } |
| if (match_f32(ty)) { |
| return build_f32(state); |
| } |
| if (match_bool(ty)) { |
| return build_bool(state); |
| } |
| return nullptr; |
| } |
| |
| std::string ScalarNoF16::String(MatchState*) const { |
| std::stringstream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << F32().String(nullptr) << ", " << I32().String(nullptr) << ", " << U32().String(nullptr) << " or " << Bool().String(nullptr); |
| return ss.str(); |
| } |
| |
| /// TypeMatcher for 'match scalar_no_i32' |
| /// @see src/tint/intrinsics.def:140:7 |
| class ScalarNoI32 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules, and returns the |
| /// expected, canonicalized type on success. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* ScalarNoI32::Match(MatchState& state, const sem::Type* ty) const { |
| if (match_u32(ty)) { |
| return build_u32(state); |
| } |
| if (match_f32(ty)) { |
| return build_f32(state); |
| } |
| if (match_f16(ty)) { |
| return build_f16(state); |
| } |
| if (match_bool(ty)) { |
| return build_bool(state); |
| } |
| return nullptr; |
| } |
| |
| std::string ScalarNoI32::String(MatchState*) const { |
| std::stringstream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << F32().String(nullptr) << ", " << F16().String(nullptr) << ", " << U32().String(nullptr) << " or " << Bool().String(nullptr); |
| return ss.str(); |
| } |
| |
| /// TypeMatcher for 'match scalar_no_u32' |
| /// @see src/tint/intrinsics.def:141:7 |
| class ScalarNoU32 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules, and returns the |
| /// expected, canonicalized type on success. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* ScalarNoU32::Match(MatchState& state, const sem::Type* ty) const { |
| if (match_i32(ty)) { |
| return build_i32(state); |
| } |
| if (match_f32(ty)) { |
| return build_f32(state); |
| } |
| if (match_f16(ty)) { |
| return build_f16(state); |
| } |
| if (match_bool(ty)) { |
| return build_bool(state); |
| } |
| return nullptr; |
| } |
| |
| std::string ScalarNoU32::String(MatchState*) const { |
| std::stringstream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << F32().String(nullptr) << ", " << F16().String(nullptr) << ", " << I32().String(nullptr) << " or " << Bool().String(nullptr); |
| return ss.str(); |
| } |
| |
| /// TypeMatcher for 'match scalar_no_bool' |
| /// @see src/tint/intrinsics.def:142:7 |
| class ScalarNoBool : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules, and returns the |
| /// expected, canonicalized type on success. |
| /// Match may define and refine the template types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| const sem::Type* ScalarNoBool::Match(MatchState& state, const sem::Type* ty) const { |
| if (match_i32(ty)) { |
| return build_i32(state); |
| } |
| if (match_u32(ty)) { |
| return build_u32(state); |
| } |
| if (match_f32(ty)) { |
| return build_f32(state); |
| } |
| if (match_f16(ty)) { |
| return build_f16(state); |
| } |
| return nullptr; |
| } |
| |
| std::string ScalarNoBool::String(MatchState*) const { |
| std::stringstream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << F32().String(nullptr) << ", " << F16().String(nullptr) << ", " << I32().String(nullptr) << " or " << U32().String(nullptr); |
| return ss.str(); |
| } |
| |
| /// EnumMatcher for 'match f32_texel_format' |
| /// @see src/tint/intrinsics.def:153:7 |
| class F32TexelFormat : public NumberMatcher { |
| public: |
| /// Checks whether the given number matches the enum matcher rules. |
| /// Match may define template numbers in state. |
| /// @param state the MatchState |
| /// @param number the enum value as a Number |
| /// @return true if the enum value matches the set |
| Number Match(MatchState& state, Number number) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| Number F32TexelFormat::Match(MatchState&, Number number) const { |
| switch (static_cast<TexelFormat>(number.Value())) { |
| case TexelFormat::kRgba8Unorm: |
| case TexelFormat::kRgba8Snorm: |
| case TexelFormat::kRgba16Float: |
| case TexelFormat::kR32Float: |
| case TexelFormat::kRg32Float: |
| case TexelFormat::kRgba32Float: |
| return number; |
| default: |
| return Number::invalid; |
| } |
| } |
| |
| std::string F32TexelFormat::String(MatchState*) const { |
| return "rgba8unorm, rgba8snorm, rgba16float, r32float, rg32float or rgba32float"; |
| } |
| |
| /// EnumMatcher for 'match i32_texel_format' |
| /// @see src/tint/intrinsics.def:155:7 |
| class I32TexelFormat : public NumberMatcher { |
| public: |
| /// Checks whether the given number matches the enum matcher rules. |
| /// Match may define template numbers in state. |
| /// @param state the MatchState |
| /// @param number the enum value as a Number |
| /// @return true if the enum value matches the set |
| Number Match(MatchState& state, Number number) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| Number I32TexelFormat::Match(MatchState&, Number number) const { |
| switch (static_cast<TexelFormat>(number.Value())) { |
| case TexelFormat::kRgba8Sint: |
| case TexelFormat::kRgba16Sint: |
| case TexelFormat::kR32Sint: |
| case TexelFormat::kRg32Sint: |
| case TexelFormat::kRgba32Sint: |
| return number; |
| default: |
| return Number::invalid; |
| } |
| } |
| |
| std::string I32TexelFormat::String(MatchState*) const { |
| return "rgba8sint, rgba16sint, r32sint, rg32sint or rgba32sint"; |
| } |
| |
| /// EnumMatcher for 'match u32_texel_format' |
| /// @see src/tint/intrinsics.def:157:7 |
| class U32TexelFormat : public NumberMatcher { |
| public: |
| /// Checks whether the given number matches the enum matcher rules. |
| /// Match may define template numbers in state. |
| /// @param state the MatchState |
| /// @param number the enum value as a Number |
| /// @return true if the enum value matches the set |
| Number Match(MatchState& state, Number number) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| Number U32TexelFormat::Match(MatchState&, Number number) const { |
| switch (static_cast<TexelFormat>(number.Value())) { |
| case TexelFormat::kRgba8Uint: |
| case TexelFormat::kRgba16Uint: |
| case TexelFormat::kR32Uint: |
| case TexelFormat::kRg32Uint: |
| case TexelFormat::kRgba32Uint: |
| return number; |
| default: |
| return Number::invalid; |
| } |
| } |
| |
| std::string U32TexelFormat::String(MatchState*) const { |
| return "rgba8uint, rgba16uint, r32uint, rg32uint or rgba32uint"; |
| } |
| |
| /// EnumMatcher for 'match write_only' |
| /// @see src/tint/intrinsics.def:160:7 |
| class WriteOnly : public NumberMatcher { |
| public: |
| /// Checks whether the given number matches the enum matcher rules. |
| /// Match may define template numbers in state. |
| /// @param state the MatchState |
| /// @param number the enum value as a Number |
| /// @return true if the enum value matches the set |
| Number Match(MatchState& state, Number number) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| Number WriteOnly::Match(MatchState&, Number number) const { |
| if (number.IsAny() || number.Value() == static_cast<uint32_t>(Access::kWrite)) { |
| return Number(static_cast<uint32_t>(Access::kWrite)); |
| } |
| return Number::invalid; |
| } |
| |
| std::string WriteOnly::String(MatchState*) const { |
| return "write"; |
| } |
| |
| /// EnumMatcher for 'match function_private_workgroup' |
| /// @see src/tint/intrinsics.def:162:7 |
| class FunctionPrivateWorkgroup : public NumberMatcher { |
| public: |
| /// Checks whether the given number matches the enum matcher rules. |
| /// Match may define template numbers in state. |
| /// @param state the MatchState |
| /// @param number the enum value as a Number |
| /// @return true if the enum value matches the set |
| Number Match(MatchState& state, Number number) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| Number FunctionPrivateWorkgroup::Match(MatchState&, Number number) const { |
| switch (static_cast<StorageClass>(number.Value())) { |
| case StorageClass::kFunction: |
| case StorageClass::kPrivate: |
| case StorageClass::kWorkgroup: |
| return number; |
| default: |
| return Number::invalid; |
| } |
| } |
| |
| std::string FunctionPrivateWorkgroup::String(MatchState*) const { |
| return "function, private or workgroup"; |
| } |
| |
| /// EnumMatcher for 'match workgroup_or_storage' |
| /// @see src/tint/intrinsics.def:163:7 |
| class WorkgroupOrStorage : public NumberMatcher { |
| public: |
| /// Checks whether the given number matches the enum matcher rules. |
| /// Match may define template numbers in state. |
| /// @param state the MatchState |
| /// @param number the enum value as a Number |
| /// @return true if the enum value matches the set |
| Number Match(MatchState& state, Number number) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| Number WorkgroupOrStorage::Match(MatchState&, Number number) const { |
| switch (static_cast<StorageClass>(number.Value())) { |
| case StorageClass::kWorkgroup: |
| case StorageClass::kStorage: |
| return number; |
| default: |
| return Number::invalid; |
| } |
| } |
| |
| std::string WorkgroupOrStorage::String(MatchState*) const { |
| return "workgroup or storage"; |
| } |
| |
| /// EnumMatcher for 'match storage' |
| class Storage : public NumberMatcher { |
| public: |
| /// Checks whether the given number matches the enum matcher rules. |
| /// Match may define template numbers in state. |
| /// @param state the MatchState |
| /// @param number the enum value as a Number |
| /// @return true if the enum value matches the set |
| Number Match(MatchState& state, Number number) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| Number Storage::Match(MatchState&, Number number) const { |
| if (number.IsAny() || number.Value() == static_cast<uint32_t>(StorageClass::kStorage)) { |
| return Number(static_cast<uint32_t>(StorageClass::kStorage)); |
| } |
| return Number::invalid; |
| } |
| |
| std::string Storage::String(MatchState*) const { |
| return "storage"; |
| } |
| |
| /// EnumMatcher for 'match write' |
| class Write : public NumberMatcher { |
| public: |
| /// Checks whether the given number matches the enum matcher rules. |
| /// Match may define template numbers in state. |
| /// @param state the MatchState |
| /// @param number the enum value as a Number |
| /// @return true if the enum value matches the set |
| Number Match(MatchState& state, Number number) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| Number Write::Match(MatchState&, Number number) const { |
| if (number.IsAny() || number.Value() == static_cast<uint32_t>(Access::kWrite)) { |
| return Number(static_cast<uint32_t>(Access::kWrite)); |
| } |
| return Number::invalid; |
| } |
| |
| std::string Write::String(MatchState*) const { |
| return "write"; |
| } |
| |
| /// EnumMatcher for 'match read_write' |
| class ReadWrite : public NumberMatcher { |
| public: |
| /// Checks whether the given number matches the enum matcher rules. |
| /// Match may define template numbers in state. |
| /// @param state the MatchState |
| /// @param number the enum value as a Number |
| /// @return true if the enum value matches the set |
| Number Match(MatchState& state, Number number) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState* state) const override; |
| }; |
| |
| Number ReadWrite::Match(MatchState&, Number number) const { |
| if (number.IsAny() || number.Value() == static_cast<uint32_t>(Access::kReadWrite)) { |
| return Number(static_cast<uint32_t>(Access::kReadWrite)); |
| } |
| return Number::invalid; |
| } |
| |
| std::string ReadWrite::String(MatchState*) const { |
| return "read_write"; |
| } |
| |
| /// Matchers holds type and number matchers |
| class Matchers { |
| private: |
| TemplateTypeMatcher template_type_0_{0}; |
| TemplateTypeMatcher template_type_1_{1}; |
| TemplateNumberMatcher template_number_0_{0}; |
| TemplateNumberMatcher template_number_1_{1}; |
| TemplateNumberMatcher template_number_2_{2}; |
| Bool Bool_; |
| Af Af_; |
| Ai Ai_; |
| I32 I32_; |
| U32 U32_; |
| F32 F32_; |
| F16 F16_; |
| Vec2 Vec2_; |
| Vec3 Vec3_; |
| Vec4 Vec4_; |
| Mat2X2 Mat2X2_; |
| Mat2X3 Mat2X3_; |
| Mat2X4 Mat2X4_; |
| Mat3X2 Mat3X2_; |
| Mat3X3 Mat3X3_; |
| Mat3X4 Mat3X4_; |
| Mat4X2 Mat4X2_; |
| Mat4X3 Mat4X3_; |
| Mat4X4 Mat4X4_; |
| Vec Vec_; |
| Mat Mat_; |
| Ptr Ptr_; |
| Atomic Atomic_; |
| Array Array_; |
| Sampler Sampler_; |
| SamplerComparison SamplerComparison_; |
| Texture1D Texture1D_; |
| Texture2D Texture2D_; |
| Texture2DArray Texture2DArray_; |
| Texture3D Texture3D_; |
| TextureCube TextureCube_; |
| TextureCubeArray TextureCubeArray_; |
| TextureMultisampled2D TextureMultisampled2D_; |
| TextureDepth2D TextureDepth2D_; |
| TextureDepth2DArray TextureDepth2DArray_; |
| TextureDepthCube TextureDepthCube_; |
| TextureDepthCubeArray TextureDepthCubeArray_; |
| TextureDepthMultisampled2D TextureDepthMultisampled2D_; |
| TextureStorage1D TextureStorage1D_; |
| TextureStorage2D TextureStorage2D_; |
| TextureStorage2DArray TextureStorage2DArray_; |
| TextureStorage3D TextureStorage3D_; |
| TextureExternal TextureExternal_; |
| ModfResult ModfResult_; |
| ModfResultVec ModfResultVec_; |
| FrexpResult FrexpResult_; |
| FrexpResultVec FrexpResultVec_; |
| AtomicCompareExchangeResult AtomicCompareExchangeResult_; |
| F32F16 F32F16_; |
| Fiu32 Fiu32_; |
| Fi32 Fi32_; |
| Iu32 Iu32_; |
| Scalar Scalar_; |
| AbstractOrScalar AbstractOrScalar_; |
| AfF32 AfF32_; |
| AfF32F16 AfF32F16_; |
| ScalarNoF32 ScalarNoF32_; |
| ScalarNoF16 ScalarNoF16_; |
| ScalarNoI32 ScalarNoI32_; |
| ScalarNoU32 ScalarNoU32_; |
| ScalarNoBool ScalarNoBool_; |
| F32TexelFormat F32TexelFormat_; |
| I32TexelFormat I32TexelFormat_; |
| U32TexelFormat U32TexelFormat_; |
| WriteOnly WriteOnly_; |
| FunctionPrivateWorkgroup FunctionPrivateWorkgroup_; |
| WorkgroupOrStorage WorkgroupOrStorage_; |
| Storage Storage_; |
| Write Write_; |
| ReadWrite ReadWrite_; |
| |
| public: |
| /// Constructor |
| Matchers(); |
| /// Destructor |
| ~Matchers(); |
| |
| /// The template types, types, and type matchers |
| TypeMatcher const* const type[63] = { |
| /* [0] */ &template_type_0_, |
| /* [1] */ &template_type_1_, |
| /* [2] */ &Bool_, |
| /* [3] */ &Af_, |
| /* [4] */ &Ai_, |
| /* [5] */ &I32_, |
| /* [6] */ &U32_, |
| /* [7] */ &F32_, |
| /* [8] */ &F16_, |
| /* [9] */ &Vec2_, |
| /* [10] */ &Vec3_, |
| /* [11] */ &Vec4_, |
| /* [12] */ &Mat2X2_, |
| /* [13] */ &Mat2X3_, |
| /* [14] */ &Mat2X4_, |
| /* [15] */ &Mat3X2_, |
| /* [16] */ &Mat3X3_, |
| /* [17] */ &Mat3X4_, |
| /* [18] */ &Mat4X2_, |
| /* [19] */ &Mat4X3_, |
| /* [20] */ &Mat4X4_, |
| /* [21] */ &Vec_, |
| /* [22] */ &Mat_, |
| /* [23] */ &Ptr_, |
| /* [24] */ &Atomic_, |
| /* [25] */ &Array_, |
| /* [26] */ &Sampler_, |
| /* [27] */ &SamplerComparison_, |
| /* [28] */ &Texture1D_, |
| /* [29] */ &Texture2D_, |
| /* [30] */ &Texture2DArray_, |
| /* [31] */ &Texture3D_, |
| /* [32] */ &TextureCube_, |
| /* [33] */ &TextureCubeArray_, |
| /* [34] */ &TextureMultisampled2D_, |
| /* [35] */ &TextureDepth2D_, |
| /* [36] */ &TextureDepth2DArray_, |
| /* [37] */ &TextureDepthCube_, |
| /* [38] */ &TextureDepthCubeArray_, |
| /* [39] */ &TextureDepthMultisampled2D_, |
| /* [40] */ &TextureStorage1D_, |
| /* [41] */ &TextureStorage2D_, |
| /* [42] */ &TextureStorage2DArray_, |
| /* [43] */ &TextureStorage3D_, |
| /* [44] */ &TextureExternal_, |
| /* [45] */ &ModfResult_, |
| /* [46] */ &ModfResultVec_, |
| /* [47] */ &FrexpResult_, |
| /* [48] */ &FrexpResultVec_, |
| /* [49] */ &AtomicCompareExchangeResult_, |
| /* [50] */ &F32F16_, |
| /* [51] */ &Fiu32_, |
| /* [52] */ &Fi32_, |
| /* [53] */ &Iu32_, |
| /* [54] */ &Scalar_, |
| /* [55] */ &AbstractOrScalar_, |
| /* [56] */ &AfF32_, |
| /* [57] */ &AfF32F16_, |
| /* [58] */ &ScalarNoF32_, |
| /* [59] */ &ScalarNoF16_, |
| /* [60] */ &ScalarNoI32_, |
| /* [61] */ &ScalarNoU32_, |
| /* [62] */ &ScalarNoBool_, |
| }; |
| |
| /// The template numbers, and number matchers |
| NumberMatcher const* const number[12] = { |
| /* [0] */ &template_number_0_, |
| /* [1] */ &template_number_1_, |
| /* [2] */ &template_number_2_, |
| /* [3] */ &F32TexelFormat_, |
| /* [4] */ &I32TexelFormat_, |
| /* [5] */ &U32TexelFormat_, |
| /* [6] */ &WriteOnly_, |
| /* [7] */ &FunctionPrivateWorkgroup_, |
| /* [8] */ &WorkgroupOrStorage_, |
| /* [9] */ &Storage_, |
| /* [10] */ &Write_, |
| /* [11] */ &ReadWrite_, |
| }; |
| }; |
| |
| Matchers::Matchers() = default; |
| Matchers::~Matchers() = default; |
| |
| constexpr MatcherIndex kMatcherIndices[] = { |
| /* [0] */ 23, |
| /* [1] */ 0, |
| /* [2] */ 24, |
| /* [3] */ 0, |
| /* [4] */ 11, |
| /* [5] */ 0, |
| /* [6] */ 23, |
| /* [7] */ 9, |
| /* [8] */ 25, |
| /* [9] */ 0, |
| /* [10] */ 0, |
| /* [11] */ 22, |
| /* [12] */ 0, |
| /* [13] */ 1, |
| /* [14] */ 7, |
| /* [15] */ 22, |
| /* [16] */ 0, |
| /* [17] */ 2, |
| /* [18] */ 7, |
| /* [19] */ 22, |
| /* [20] */ 1, |
| /* [21] */ 0, |
| /* [22] */ 7, |
| /* [23] */ 22, |
| /* [24] */ 1, |
| /* [25] */ 2, |
| /* [26] */ 7, |
| /* [27] */ 22, |
| /* [28] */ 0, |
| /* [29] */ 0, |
| /* [30] */ 7, |
| /* [31] */ 21, |
| /* [32] */ 0, |
| /* [33] */ 0, |
| /* [34] */ 21, |
| /* [35] */ 0, |
| /* [36] */ 7, |
| /* [37] */ 43, |
| /* [38] */ 5, |
| /* [39] */ 10, |
| /* [40] */ 7, |
| /* [41] */ 42, |
| /* [42] */ 5, |
| /* [43] */ 10, |
| /* [44] */ 2, |
| /* [45] */ 21, |
| /* [46] */ 0, |
| /* [47] */ 2, |
| /* [48] */ 41, |
| /* [49] */ 5, |
| /* [50] */ 10, |
| /* [51] */ 1, |
| /* [52] */ 40, |
| /* [53] */ 5, |
| /* [54] */ 10, |
| /* [55] */ 6, |
| /* [56] */ 43, |
| /* [57] */ 4, |
| /* [58] */ 10, |
| /* [59] */ 5, |
| /* [60] */ 42, |
| /* [61] */ 0, |
| /* [62] */ 1, |
| /* [63] */ 42, |
| /* [64] */ 4, |
| /* [65] */ 10, |
| /* [66] */ 8, |
| /* [67] */ 41, |
| /* [68] */ 4, |
| /* [69] */ 10, |
| /* [70] */ 0, |
| /* [71] */ 40, |
| /* [72] */ 4, |
| /* [73] */ 10, |
| /* [74] */ 43, |
| /* [75] */ 3, |
| /* [76] */ 10, |
| /* [77] */ 21, |
| /* [78] */ 1, |
| /* [79] */ 7, |
| /* [80] */ 42, |
| /* [81] */ 3, |
| /* [82] */ 10, |
| /* [83] */ 41, |
| /* [84] */ 3, |
| /* [85] */ 10, |
| /* [86] */ 43, |
| /* [87] */ 0, |
| /* [88] */ 1, |
| /* [89] */ 41, |
| /* [90] */ 0, |
| /* [91] */ 1, |
| /* [92] */ 40, |
| /* [93] */ 0, |
| /* [94] */ 1, |
| /* [95] */ 21, |
| /* [96] */ 0, |
| /* [97] */ 5, |
| /* [98] */ 21, |
| /* [99] */ 0, |
| /* [100] */ 6, |
| /* [101] */ 40, |
| /* [102] */ 3, |
| /* [103] */ 10, |
| /* [104] */ 9, |
| /* [105] */ 0, |
| /* [106] */ 11, |
| /* [107] */ 7, |
| /* [108] */ 9, |
| /* [109] */ 7, |
| /* [110] */ 9, |
| /* [111] */ 2, |
| /* [112] */ 9, |
| /* [113] */ 1, |
| /* [114] */ 46, |
| /* [115] */ 0, |
| /* [116] */ 11, |
| /* [117] */ 1, |
| /* [118] */ 9, |
| /* [119] */ 6, |
| /* [120] */ 11, |
| /* [121] */ 8, |
| /* [122] */ 9, |
| /* [123] */ 5, |
| /* [124] */ 9, |
| /* [125] */ 8, |
| /* [126] */ 28, |
| /* [127] */ 0, |
| /* [128] */ 29, |
| /* [129] */ 0, |
| /* [130] */ 30, |
| /* [131] */ 0, |
| /* [132] */ 31, |
| /* [133] */ 0, |
| /* [134] */ 32, |
| /* [135] */ 0, |
| /* [136] */ 11, |
| /* [137] */ 5, |
| /* [138] */ 33, |
| /* [139] */ 0, |
| /* [140] */ 34, |
| /* [141] */ 0, |
| /* [142] */ 11, |
| /* [143] */ 6, |
| /* [144] */ 11, |
| /* [145] */ 2, |
| /* [146] */ 12, |
| /* [147] */ 0, |
| /* [148] */ 12, |
| /* [149] */ 7, |
| /* [150] */ 12, |
| /* [151] */ 8, |
| /* [152] */ 13, |
| /* [153] */ 0, |
| /* [154] */ 20, |
| /* [155] */ 7, |
| /* [156] */ 13, |
| /* [157] */ 7, |
| /* [158] */ 13, |
| /* [159] */ 8, |
| /* [160] */ 14, |
| /* [161] */ 0, |
| /* [162] */ 48, |
| /* [163] */ 0, |
| /* [164] */ 14, |
| /* [165] */ 7, |
| /* [166] */ 14, |
| /* [167] */ 8, |
| /* [168] */ 15, |
| /* [169] */ 0, |
| /* [170] */ 15, |
| /* [171] */ 7, |
| /* [172] */ 15, |
| /* [173] */ 8, |
| /* [174] */ 16, |
| /* [175] */ 0, |
| /* [176] */ 16, |
| /* [177] */ 7, |
| /* [178] */ 16, |
| /* [179] */ 8, |
| /* [180] */ 17, |
| /* [181] */ 0, |
| /* [182] */ 17, |
| /* [183] */ 7, |
| /* [184] */ 17, |
| /* [185] */ 8, |
| /* [186] */ 18, |
| /* [187] */ 0, |
| /* [188] */ 18, |
| /* [189] */ 7, |
| /* [190] */ 18, |
| /* [191] */ 8, |
| /* [192] */ 28, |
| /* [193] */ 7, |
| /* [194] */ 29, |
| /* [195] */ 7, |
| /* [196] */ 19, |
| /* [197] */ 0, |
| /* [198] */ 30, |
| /* [199] */ 7, |
| /* [200] */ 49, |
| /* [201] */ 0, |
| /* [202] */ 31, |
| /* [203] */ 7, |
| /* [204] */ 32, |
| /* [205] */ 7, |
| /* [206] */ 33, |
| /* [207] */ 7, |
| /* [208] */ 19, |
| /* [209] */ 7, |
| /* [210] */ 19, |
| /* [211] */ 8, |
| /* [212] */ 20, |
| /* [213] */ 0, |
| /* [214] */ 20, |
| /* [215] */ 8, |
| /* [216] */ 26, |
| /* [217] */ 27, |
| /* [218] */ 38, |
| /* [219] */ 37, |
| /* [220] */ 36, |
| /* [221] */ 35, |
| /* [222] */ 44, |
| /* [223] */ 39, |
| /* [224] */ 45, |
| /* [225] */ 47, |
| }; |
| |
| // Assert that the MatcherIndex is big enough to index all the matchers, plus |
| // kNoMatcher. |
| static_assert(static_cast<int>(sizeof(kMatcherIndices) / sizeof(kMatcherIndices[0])) < |
| static_cast<int>(std::numeric_limits<MatcherIndex>::max() - 1), |
| "MatcherIndex is not large enough to index kMatcherIndices"); |
| |
| constexpr ParameterInfo kParameters[] = { |
| { |
| /* [0] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [1] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [2] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [3] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [4] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [5] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [6] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [7] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [8] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [9] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [10] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [11] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [12] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [13] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [14] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [15] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [16] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [17] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [18] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [19] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [20] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [21] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [22] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [23] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [24] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [25] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [26] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [27] */ |
| /* usage */ ParameterUsage::kNone, |
| /* matcher indices */ &kMatcherIndices[1], |
| }, |
| { |
| /* [28] */ |
| /* usage */ ParameterUsage::kNone, |
| |