ast: Move [Set]IsSwizzle() from IdentifierExpression to MemberAccessorExpression
This is more a property of a MemberAccessorExpression than the identifier itself. Change-Id: Icb17df1fe43a959332d73df026e77ca4e07d23ed Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/40140 Commit-Queue: Ben Clayton <bclayton@google.com> Reviewed-by: David Neto <dneto@google.com>
This commit is contained in:
parent
a568701d61
commit
ea9c86c296
|
@ -39,12 +39,6 @@ class IdentifierExpression : public Castable<IdentifierExpression, Expression> {
|
||||||
/// @returns the symbol for the identifier
|
/// @returns the symbol for the identifier
|
||||||
Symbol symbol() const { return sym_; }
|
Symbol symbol() const { return sym_; }
|
||||||
|
|
||||||
/// Sets the identifier as a swizzle
|
|
||||||
void SetIsSwizzle() { is_swizzle_ = true; }
|
|
||||||
|
|
||||||
/// @returns true if this is a swizzle identifier
|
|
||||||
bool IsSwizzle() const { return is_swizzle_; }
|
|
||||||
|
|
||||||
/// Clones this node and all transitive child nodes using the `CloneContext`
|
/// Clones this node and all transitive child nodes using the `CloneContext`
|
||||||
/// `ctx`.
|
/// `ctx`.
|
||||||
/// @note Semantic information such as resolved expression type and intrinsic
|
/// @note Semantic information such as resolved expression type and intrinsic
|
||||||
|
@ -68,8 +62,6 @@ class IdentifierExpression : public Castable<IdentifierExpression, Expression> {
|
||||||
IdentifierExpression(const IdentifierExpression&) = delete;
|
IdentifierExpression(const IdentifierExpression&) = delete;
|
||||||
|
|
||||||
Symbol const sym_;
|
Symbol const sym_;
|
||||||
|
|
||||||
bool is_swizzle_ = false; // Semantic info
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace ast
|
} // namespace ast
|
||||||
|
|
|
@ -45,6 +45,12 @@ class MemberAccessorExpression
|
||||||
/// @returns the member expression
|
/// @returns the member expression
|
||||||
IdentifierExpression* member() const { return member_; }
|
IdentifierExpression* member() const { return member_; }
|
||||||
|
|
||||||
|
/// Sets the identifier as a swizzle
|
||||||
|
void SetIsSwizzle() { is_swizzle_ = true; }
|
||||||
|
|
||||||
|
/// @returns true if this is a swizzle identifier
|
||||||
|
bool IsSwizzle() const { return is_swizzle_; }
|
||||||
|
|
||||||
/// Clones this node and all transitive child nodes using the `CloneContext`
|
/// Clones this node and all transitive child nodes using the `CloneContext`
|
||||||
/// `ctx`.
|
/// `ctx`.
|
||||||
/// @note Semantic information such as resolved expression type and intrinsic
|
/// @note Semantic information such as resolved expression type and intrinsic
|
||||||
|
@ -69,6 +75,8 @@ class MemberAccessorExpression
|
||||||
|
|
||||||
Expression* const struct_;
|
Expression* const struct_;
|
||||||
IdentifierExpression* const member_;
|
IdentifierExpression* const member_;
|
||||||
|
|
||||||
|
bool is_swizzle_ = false; // Semantic info
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace ast
|
} // namespace ast
|
||||||
|
|
|
@ -1029,7 +1029,7 @@ bool TypeDeterminer::DetermineMemberAccessor(
|
||||||
ret = builder_->create<type::Pointer>(ret, ptr->storage_class());
|
ret = builder_->create<type::Pointer>(ret, ptr->storage_class());
|
||||||
}
|
}
|
||||||
} else if (auto* vec = data_type->As<type::Vector>()) {
|
} else if (auto* vec = data_type->As<type::Vector>()) {
|
||||||
expr->member()->SetIsSwizzle();
|
expr->SetIsSwizzle();
|
||||||
|
|
||||||
auto size = builder_->Symbols().NameFor(expr->member()->symbol()).size();
|
auto size = builder_->Symbols().NameFor(expr->member()->symbol()).size();
|
||||||
if (size == 1) {
|
if (size == 1) {
|
||||||
|
|
|
@ -1165,12 +1165,7 @@ bool GeneratorImpl::EmitIdentifier(std::ostream&,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Swizzles output the name directly
|
out << namer_.NameFor(builder_.Symbols().NameFor(ident->symbol()));
|
||||||
if (ident->IsSwizzle()) {
|
|
||||||
out << builder_.Symbols().NameFor(ident->symbol());
|
|
||||||
} else {
|
|
||||||
out << namer_.NameFor(builder_.Symbols().NameFor(ident->symbol()));
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -2107,7 +2102,15 @@ bool GeneratorImpl::EmitMemberAccessor(std::ostream& pre,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
out << ".";
|
out << ".";
|
||||||
return EmitExpression(pre, out, expr->member());
|
|
||||||
|
// Swizzles output the name directly
|
||||||
|
if (expr->IsSwizzle()) {
|
||||||
|
out << builder_.Symbols().NameFor(expr->member()->symbol());
|
||||||
|
} else if (!EmitExpression(pre, out, expr->member())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GeneratorImpl::EmitReturn(std::ostream& out, ast::ReturnStatement* stmt) {
|
bool GeneratorImpl::EmitReturn(std::ostream& out, ast::ReturnStatement* stmt) {
|
||||||
|
|
|
@ -1593,12 +1593,7 @@ bool GeneratorImpl::EmitIdentifier(ast::IdentifierExpression* expr) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Swizzles get written out directly
|
out_ << namer_.NameFor(program_->Symbols().NameFor(ident->symbol()));
|
||||||
if (ident->IsSwizzle()) {
|
|
||||||
out_ << program_->Symbols().NameFor(ident->symbol());
|
|
||||||
} else {
|
|
||||||
out_ << namer_.NameFor(program_->Symbols().NameFor(ident->symbol()));
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1742,7 +1737,14 @@ bool GeneratorImpl::EmitMemberAccessor(ast::MemberAccessorExpression* expr) {
|
||||||
|
|
||||||
out_ << ".";
|
out_ << ".";
|
||||||
|
|
||||||
return EmitExpression(expr->member());
|
// Swizzles get written out directly
|
||||||
|
if (expr->IsSwizzle()) {
|
||||||
|
out_ << program_->Symbols().NameFor(expr->member()->symbol());
|
||||||
|
} else if (!EmitExpression(expr->member())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GeneratorImpl::EmitReturn(ast::ReturnStatement* stmt) {
|
bool GeneratorImpl::EmitReturn(ast::ReturnStatement* stmt) {
|
||||||
|
|
Loading…
Reference in New Issue