sem: Have sem::Type derive from sem::Node

Having a common base class will tighten up some of the dynamic casting that we do.

Bug: tint:724
Change-Id: I45c6f200e1ec242ddb08ce75bd1c4c037a21a38d
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/49882
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: James Price <jrprice@google.com>
This commit is contained in:
Ben Clayton
2021-05-06 15:52:33 +00:00
committed by Commit Bot service account
parent a0174e613f
commit 58750eab19
4 changed files with 16 additions and 3 deletions

View File

@@ -304,7 +304,10 @@ class ProgramBuilder {
/// @param args the arguments to pass to the type constructor
/// @returns the node pointer
template <typename T, typename... ARGS>
traits::EnableIfIsType<T, sem::Node>* create(ARGS&&... args) {
traits::EnableIf<traits::IsTypeOrDerived<T, sem::Node>::value &&
!traits::IsTypeOrDerived<T, sem::Type>::value,
T>*
create(ARGS&&... args) {
AssertNotMoved();
return sem_nodes_.Create<T>(std::forward<ARGS>(args)...);
}