Make ast::StructMember accept typ::Type
A minimal change to get a feel for what updating AST types to accept typ::Type (for now) looks like. Bug: tint:724 Change-Id: I33b33eb6af90e3629f76716a421f952f5a4bc11d Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/48841 Reviewed-by: Ben Clayton <bclayton@google.com> Commit-Queue: Ben Clayton <bclayton@google.com> Kokoro: Kokoro <noreply+kokoro@google.com>
This commit is contained in:
parent
05abdf5096
commit
0b9ea91fcf
|
@ -24,13 +24,13 @@ namespace ast {
|
|||
StructMember::StructMember(ProgramID program_id,
|
||||
const Source& source,
|
||||
const Symbol& sym,
|
||||
sem::Type* type,
|
||||
typ::Type type,
|
||||
DecorationList decorations)
|
||||
: Base(program_id, source),
|
||||
symbol_(sym),
|
||||
type_(type),
|
||||
decorations_(std::move(decorations)) {
|
||||
TINT_ASSERT(type);
|
||||
TINT_ASSERT(type.sem);
|
||||
TINT_ASSERT(symbol_.IsValid());
|
||||
TINT_ASSERT_PROGRAM_IDS_EQUAL_IF_VALID(symbol_, program_id);
|
||||
for (auto* deco : decorations_) {
|
||||
|
@ -59,7 +59,7 @@ StructMember* StructMember::Clone(CloneContext* ctx) const {
|
|||
// Clone arguments outside of create() call to have deterministic ordering
|
||||
auto src = ctx->Clone(source());
|
||||
auto sym = ctx->Clone(symbol_);
|
||||
auto* ty = ctx->Clone(type_);
|
||||
auto ty = ctx->Clone(type_);
|
||||
auto decos = ctx->Clone(decorations_);
|
||||
return ctx->dst->create<StructMember>(src, sym, ty, decos);
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include <vector>
|
||||
|
||||
#include "src/ast/decoration.h"
|
||||
#include "src/typepair.h"
|
||||
|
||||
namespace tint {
|
||||
namespace ast {
|
||||
|
@ -35,7 +36,7 @@ class StructMember : public Castable<StructMember, Node> {
|
|||
StructMember(ProgramID program_id,
|
||||
const Source& source,
|
||||
const Symbol& sym,
|
||||
sem::Type* type,
|
||||
typ::Type type,
|
||||
DecorationList decorations);
|
||||
/// Move constructor
|
||||
StructMember(StructMember&&);
|
||||
|
@ -44,8 +45,9 @@ class StructMember : public Castable<StructMember, Node> {
|
|||
|
||||
/// @returns the symbol
|
||||
const Symbol& symbol() const { return symbol_; }
|
||||
|
||||
/// @returns the type
|
||||
sem::Type* type() const { return type_; }
|
||||
typ::Type type() const { return type_; }
|
||||
|
||||
/// @returns the decorations
|
||||
const DecorationList& decorations() const { return decorations_; }
|
||||
|
@ -73,7 +75,7 @@ class StructMember : public Castable<StructMember, Node> {
|
|||
StructMember(const StructMember&) = delete;
|
||||
|
||||
Symbol const symbol_;
|
||||
sem::Type* const type_;
|
||||
typ::Type const type_;
|
||||
DecorationList const decorations_;
|
||||
};
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include "src/debug.h"
|
||||
#include "src/symbol.h"
|
||||
#include "src/traits.h"
|
||||
#include "src/typepair.h"
|
||||
|
||||
namespace tint {
|
||||
|
||||
|
@ -179,6 +180,15 @@ class CloneContext {
|
|||
return CheckedCast<T>(c);
|
||||
}
|
||||
|
||||
/// Clones the type pair
|
||||
/// @param tp the type pair to clone
|
||||
/// @return the cloned type pair
|
||||
template <typename AST, typename SEM>
|
||||
typ::TypePair<AST, SEM> Clone(const typ::TypePair<AST, SEM>& tp) {
|
||||
return {Clone(const_cast<ast::Type*>(tp.ast)),
|
||||
Clone(const_cast<sem::Type*>(tp.sem))};
|
||||
}
|
||||
|
||||
/// Clones the Source `s` into #dst
|
||||
/// TODO(bclayton) - Currently this 'clone' is a shallow copy. If/when
|
||||
/// `Source.File`s are owned by the Program this should make a copy of the
|
||||
|
|
|
@ -190,7 +190,7 @@ TEST_F(ParserImplTest, GlobalDecl_Struct_WithStride) {
|
|||
EXPECT_EQ(str->impl()->members().size(), 1u);
|
||||
EXPECT_FALSE(str->IsBlockDecorated());
|
||||
|
||||
const auto* ty = str->impl()->members()[0]->type();
|
||||
const auto ty = str->impl()->members()[0]->type();
|
||||
ASSERT_TRUE(ty->Is<sem::ArrayType>());
|
||||
const auto* arr = ty->As<sem::ArrayType>();
|
||||
|
||||
|
|
Loading…
Reference in New Issue