diff --git a/src/ast/access_decoration.cc b/src/ast/access_decoration.cc
index 6d5e726..2346357 100644
--- a/src/ast/access_decoration.cc
+++ b/src/ast/access_decoration.cc
@@ -22,7 +22,7 @@
 namespace tint {
 namespace ast {
 
-AccessDecoration::AccessDecoration(AccessControl val, const Source& source)
+AccessDecoration::AccessDecoration(const Source& source, AccessControl val)
     : Base(source), value_(val) {}
 
 AccessDecoration::~AccessDecoration() = default;
@@ -33,7 +33,7 @@
 }
 
 AccessDecoration* AccessDecoration::Clone(CloneContext* ctx) const {
-  return ctx->mod->create<AccessDecoration>(value_, ctx->Clone(source()));
+  return ctx->mod->create<AccessDecoration>(ctx->Clone(source()), value_);
 }
 
 }  // namespace ast
diff --git a/src/ast/access_decoration.h b/src/ast/access_decoration.h
index 07d437e..dcf2d95 100644
--- a/src/ast/access_decoration.h
+++ b/src/ast/access_decoration.h
@@ -27,9 +27,9 @@
 class AccessDecoration : public Castable<AccessDecoration, TypeDecoration> {
  public:
   /// constructor
-  /// @param value the access value
   /// @param source the source of this decoration
-  explicit AccessDecoration(AccessControl value, const Source& source);
+  /// @param value the access value
+  explicit AccessDecoration(const Source& source, AccessControl value);
   ~AccessDecoration() override;
 
   /// @returns the access control value
diff --git a/src/ast/binding_decoration.cc b/src/ast/binding_decoration.cc
index 127e600..13d48d7 100644
--- a/src/ast/binding_decoration.cc
+++ b/src/ast/binding_decoration.cc
@@ -22,7 +22,7 @@
 namespace tint {
 namespace ast {
 
-BindingDecoration::BindingDecoration(uint32_t val, const Source& source)
+BindingDecoration::BindingDecoration(const Source& source, uint32_t val)
     : Base(source), value_(val) {}
 
 BindingDecoration::~BindingDecoration() = default;
@@ -33,7 +33,7 @@
 }
 
 BindingDecoration* BindingDecoration::Clone(CloneContext* ctx) const {
-  return ctx->mod->create<BindingDecoration>(value_, ctx->Clone(source()));
+  return ctx->mod->create<BindingDecoration>(ctx->Clone(source()), value_);
 }
 
 }  // namespace ast
diff --git a/src/ast/binding_decoration.h b/src/ast/binding_decoration.h
index 0299ddc..ae4cc45 100644
--- a/src/ast/binding_decoration.h
+++ b/src/ast/binding_decoration.h
@@ -29,7 +29,7 @@
   /// constructor
   /// @param value the binding value
   /// @param source the source of this decoration
-  BindingDecoration(uint32_t value, const Source& source);
+  BindingDecoration(const Source& source, uint32_t value);
   ~BindingDecoration() override;
 
   /// @returns the binding value
diff --git a/src/ast/binding_decoration_test.cc b/src/ast/binding_decoration_test.cc
index 54e6f74..5824236 100644
--- a/src/ast/binding_decoration_test.cc
+++ b/src/ast/binding_decoration_test.cc
@@ -24,12 +24,12 @@
 using BindingDecorationTest = TestHelper;
 
 TEST_F(BindingDecorationTest, Creation) {
-  BindingDecoration d{2, Source{}};
+  BindingDecoration d{Source{}, 2};
   EXPECT_EQ(2u, d.value());
 }
 
 TEST_F(BindingDecorationTest, Is) {
-  BindingDecoration bd{2, Source{}};
+  BindingDecoration bd{Source{}, 2};
   Decoration* d = &bd;
   EXPECT_TRUE(d->Is<BindingDecoration>());
   EXPECT_FALSE(d->Is<BuiltinDecoration>());
@@ -39,7 +39,7 @@
 }
 
 TEST_F(BindingDecorationTest, ToStr) {
-  BindingDecoration d{2, Source{}};
+  BindingDecoration d{Source{}, 2};
   std::ostringstream out;
   d.to_str(out, 0);
   EXPECT_EQ(out.str(), R"(BindingDecoration{2}
diff --git a/src/ast/builtin_decoration.cc b/src/ast/builtin_decoration.cc
index 051761c..d7abdbe 100644
--- a/src/ast/builtin_decoration.cc
+++ b/src/ast/builtin_decoration.cc
@@ -22,7 +22,7 @@
 namespace tint {
 namespace ast {
 
-BuiltinDecoration::BuiltinDecoration(Builtin builtin, const Source& source)
+BuiltinDecoration::BuiltinDecoration(const Source& source, Builtin builtin)
     : Base(source), builtin_(builtin) {}
 
 BuiltinDecoration::~BuiltinDecoration() = default;
@@ -33,7 +33,7 @@
 }
 
 BuiltinDecoration* BuiltinDecoration::Clone(CloneContext* ctx) const {
-  return ctx->mod->create<BuiltinDecoration>(builtin_, ctx->Clone(source()));
+  return ctx->mod->create<BuiltinDecoration>(ctx->Clone(source()), builtin_);
 }
 
 }  // namespace ast
diff --git a/src/ast/builtin_decoration.h b/src/ast/builtin_decoration.h
index c907f69..5a1419b 100644
--- a/src/ast/builtin_decoration.h
+++ b/src/ast/builtin_decoration.h
@@ -26,9 +26,9 @@
     : public Castable<BuiltinDecoration, VariableDecoration> {
  public:
   /// constructor
-  /// @param builtin the builtin value
   /// @param source the source of this decoration
-  BuiltinDecoration(Builtin builtin, const Source& source);
+  /// @param builtin the builtin value
+  BuiltinDecoration(const Source& source, Builtin builtin);
   ~BuiltinDecoration() override;
 
   /// @returns the builtin value
diff --git a/src/ast/builtin_decoration_test.cc b/src/ast/builtin_decoration_test.cc
index 3122651..0618f65 100644
--- a/src/ast/builtin_decoration_test.cc
+++ b/src/ast/builtin_decoration_test.cc
@@ -24,12 +24,12 @@
 using BuiltinDecorationTest = TestHelper;
 
 TEST_F(BuiltinDecorationTest, Creation) {
-  BuiltinDecoration d{Builtin::kFragDepth, Source{}};
+  BuiltinDecoration d{Source{}, Builtin::kFragDepth};
   EXPECT_EQ(Builtin::kFragDepth, d.value());
 }
 
 TEST_F(BuiltinDecorationTest, Is) {
-  BuiltinDecoration bd{Builtin::kFragDepth, Source{}};
+  BuiltinDecoration bd{Source{}, Builtin::kFragDepth};
   Decoration* d = &bd;
   EXPECT_FALSE(d->Is<BindingDecoration>());
   EXPECT_TRUE(d->Is<BuiltinDecoration>());
@@ -39,7 +39,7 @@
 }
 
 TEST_F(BuiltinDecorationTest, ToStr) {
-  BuiltinDecoration d{Builtin::kFragDepth, Source{}};
+  BuiltinDecoration d{Source{}, Builtin::kFragDepth};
   std::ostringstream out;
   d.to_str(out, 0);
   EXPECT_EQ(out.str(), R"(BuiltinDecoration{frag_depth}
diff --git a/src/ast/constant_id_decoration.cc b/src/ast/constant_id_decoration.cc
index dbdd8ff..840a30d 100644
--- a/src/ast/constant_id_decoration.cc
+++ b/src/ast/constant_id_decoration.cc
@@ -22,7 +22,7 @@
 namespace tint {
 namespace ast {
 
-ConstantIdDecoration::ConstantIdDecoration(uint32_t val, const Source& source)
+ConstantIdDecoration::ConstantIdDecoration(const Source& source, uint32_t val)
     : Base(source), value_(val) {}
 
 ConstantIdDecoration::~ConstantIdDecoration() = default;
@@ -33,7 +33,7 @@
 }
 
 ConstantIdDecoration* ConstantIdDecoration::Clone(CloneContext* ctx) const {
-  return ctx->mod->create<ConstantIdDecoration>(value_, ctx->Clone(source()));
+  return ctx->mod->create<ConstantIdDecoration>(ctx->Clone(source()), value_);
 }
 
 }  // namespace ast
diff --git a/src/ast/constant_id_decoration.h b/src/ast/constant_id_decoration.h
index d683e2a..bb990ae 100644
--- a/src/ast/constant_id_decoration.h
+++ b/src/ast/constant_id_decoration.h
@@ -26,9 +26,9 @@
     : public Castable<ConstantIdDecoration, VariableDecoration> {
  public:
   /// constructor
-  /// @param val the constant_id value
   /// @param source the source of this decoration
-  ConstantIdDecoration(uint32_t val, const Source& source);
+  /// @param val the constant_id value
+  ConstantIdDecoration(const Source& source, uint32_t val);
   ~ConstantIdDecoration() override;
 
   /// @returns the constant id value
diff --git a/src/ast/constant_id_decoration_test.cc b/src/ast/constant_id_decoration_test.cc
index 28f77ee..493c6da 100644
--- a/src/ast/constant_id_decoration_test.cc
+++ b/src/ast/constant_id_decoration_test.cc
@@ -23,12 +23,12 @@
 using ConstantIdDecorationTest = TestHelper;
 
 TEST_F(ConstantIdDecorationTest, Creation) {
-  ConstantIdDecoration d{12, Source{}};
+  ConstantIdDecoration d{Source{}, 12};
   EXPECT_EQ(12u, d.value());
 }
 
 TEST_F(ConstantIdDecorationTest, Is) {
-  ConstantIdDecoration cd{27, Source{}};
+  ConstantIdDecoration cd{Source{}, 27};
   Decoration* d = &cd;
   EXPECT_FALSE(d->Is<BindingDecoration>());
   EXPECT_FALSE(d->Is<BuiltinDecoration>());
@@ -38,7 +38,7 @@
 }
 
 TEST_F(ConstantIdDecorationTest, ToStr) {
-  ConstantIdDecoration d{1200, Source{}};
+  ConstantIdDecoration d{Source{}, 1200};
   std::ostringstream out;
   d.to_str(out, 0);
   EXPECT_EQ(out.str(), R"(ConstantIdDecoration{1200}
diff --git a/src/ast/decoration_test.cc b/src/ast/decoration_test.cc
index f3feae8..8ec0a01 100644
--- a/src/ast/decoration_test.cc
+++ b/src/ast/decoration_test.cc
@@ -43,21 +43,21 @@
 using DecorationTest = TestHelper;
 
 TEST_F(DecorationTest, AsCorrectType) {
-  auto* decoration = create<ConstantIdDecoration>(1, Source{});
+  auto* decoration = create<ConstantIdDecoration>(Source{}, 1);
   auto* upcast = static_cast<Decoration*>(decoration);
   auto* downcast = As<VariableDecoration>(upcast);
   EXPECT_EQ(decoration, downcast);
 }
 
 TEST_F(DecorationTest, AsIncorrectType) {
-  auto* decoration = create<ConstantIdDecoration>(1, Source{});
+  auto* decoration = create<ConstantIdDecoration>(Source{}, 1);
   auto* upcast = static_cast<Decoration*>(decoration);
   auto* downcast = As<ArrayDecoration>(upcast);
   EXPECT_EQ(nullptr, downcast);
 }
 
 TEST_F(DecorationTest, Is) {
-  Decoration* decoration = create<ConstantIdDecoration>(1, Source{});
+  Decoration* decoration = create<ConstantIdDecoration>(Source{}, 1);
   EXPECT_TRUE(decoration->Is<VariableDecoration>());
   EXPECT_FALSE(decoration->Is<ArrayDecoration>());
 }
diff --git a/src/ast/function_test.cc b/src/ast/function_test.cc
index 546e969..0d9f645 100644
--- a/src/ast/function_test.cc
+++ b/src/ast/function_test.cc
@@ -107,25 +107,25 @@
   auto* loc1 = create<Variable>(Source{}, "loc1", StorageClass::kInput, &i32,
                                 false, nullptr,
                                 ast::VariableDecorationList{
-                                    create<LocationDecoration>(0, Source{}),
+                                    create<LocationDecoration>(Source{}, 0),
                                 });
 
   auto* loc2 = create<Variable>(Source{}, "loc2", StorageClass::kInput, &i32,
                                 false, nullptr,
                                 ast::VariableDecorationList{
-                                    create<LocationDecoration>(1, Source{}),
+                                    create<LocationDecoration>(Source{}, 1),
                                 });
 
   auto* builtin1 = create<Variable>(
       Source{}, "builtin1", StorageClass::kInput, &i32, false, nullptr,
       ast::VariableDecorationList{
-          create<BuiltinDecoration>(Builtin::kPosition, Source{}),
+          create<BuiltinDecoration>(Source{}, Builtin::kPosition),
       });
 
   auto* builtin2 = create<Variable>(
       Source{}, "builtin2", StorageClass::kInput, &i32, false, nullptr,
       ast::VariableDecorationList{
-          create<BuiltinDecoration>(Builtin::kFragDepth, Source{}),
+          create<BuiltinDecoration>(Source{}, Builtin::kFragDepth),
       });
 
   Function f(Source{}, func_sym, "func", VariableList{}, &void_type,
@@ -155,25 +155,25 @@
   auto* loc1 = create<Variable>(Source{}, "loc1", StorageClass::kInput, &i32,
                                 false, nullptr,
                                 ast::VariableDecorationList{
-                                    create<LocationDecoration>(0, Source{}),
+                                    create<LocationDecoration>(Source{}, 0),
                                 });
 
   auto* loc2 = create<Variable>(Source{}, "loc2", StorageClass::kInput, &i32,
                                 false, nullptr,
                                 ast::VariableDecorationList{
-                                    create<LocationDecoration>(1, Source{}),
+                                    create<LocationDecoration>(Source{}, 1),
                                 });
 
   auto* builtin1 = create<Variable>(
       Source{}, "builtin1", StorageClass::kInput, &i32, false, nullptr,
       ast::VariableDecorationList{
-          create<BuiltinDecoration>(Builtin::kPosition, Source{}),
+          create<BuiltinDecoration>(Source{}, Builtin::kPosition),
       });
 
   auto* builtin2 = create<Variable>(
       Source{}, "builtin2", StorageClass::kInput, &i32, false, nullptr,
       ast::VariableDecorationList{
-          create<BuiltinDecoration>(Builtin::kFragDepth, Source{}),
+          create<BuiltinDecoration>(Source{}, Builtin::kFragDepth),
       });
 
   Function f(Source{}, func_sym, "func", VariableList{}, &void_type,
@@ -382,7 +382,7 @@
                                        });
   Function f(
       Source{}, func_sym, "func", {}, &void_type, body,
-      FunctionDecorationList{create<WorkgroupDecoration>(2, 4, 6, Source{})});
+      FunctionDecorationList{create<WorkgroupDecoration>(Source{}, 2, 4, 6)});
 
   std::ostringstream out;
   f.to_str(out, 2);
@@ -512,7 +512,7 @@
 
   Function f(Source{}, func_sym, "func", {}, &void_type,
              create<BlockStatement>(Source{}, StatementList{}),
-             {create<WorkgroupDecoration>(2u, 4u, 6u, Source{})});
+             {create<WorkgroupDecoration>(Source{}, 2u, 4u, 6u)});
 
   uint32_t x = 0;
   uint32_t y = 0;
diff --git a/src/ast/location_decoration.cc b/src/ast/location_decoration.cc
index 64990a8..db28f0a 100644
--- a/src/ast/location_decoration.cc
+++ b/src/ast/location_decoration.cc
@@ -22,7 +22,7 @@
 namespace tint {
 namespace ast {
 
-LocationDecoration::LocationDecoration(uint32_t val, const Source& source)
+LocationDecoration::LocationDecoration(const Source& source, uint32_t val)
     : Base(source), value_(val) {}
 
 LocationDecoration::~LocationDecoration() = default;
@@ -33,7 +33,7 @@
 }
 
 LocationDecoration* LocationDecoration::Clone(CloneContext* ctx) const {
-  return ctx->mod->create<LocationDecoration>(value_, ctx->Clone(source()));
+  return ctx->mod->create<LocationDecoration>(ctx->Clone(source()), value_);
 }
 
 }  // namespace ast
diff --git a/src/ast/location_decoration.h b/src/ast/location_decoration.h
index dc641e4..f6583ea 100644
--- a/src/ast/location_decoration.h
+++ b/src/ast/location_decoration.h
@@ -27,9 +27,9 @@
     : public Castable<LocationDecoration, VariableDecoration> {
  public:
   /// constructor
-  /// @param value the location value
   /// @param source the source of this decoration
-  LocationDecoration(uint32_t value, const Source& source);
+  /// @param value the location value
+  LocationDecoration(const Source& source, uint32_t value);
   ~LocationDecoration() override;
 
   /// @returns the location value
diff --git a/src/ast/location_decoration_test.cc b/src/ast/location_decoration_test.cc
index f402abe..0e32216 100644
--- a/src/ast/location_decoration_test.cc
+++ b/src/ast/location_decoration_test.cc
@@ -26,12 +26,12 @@
 using LocationDecorationTest = TestHelper;
 
 TEST_F(LocationDecorationTest, Creation) {
-  LocationDecoration d{2, Source{}};
+  LocationDecoration d{Source{}, 2};
   EXPECT_EQ(2u, d.value());
 }
 
 TEST_F(LocationDecorationTest, Is) {
-  LocationDecoration ld{2, Source{}};
+  LocationDecoration ld{Source{}, 2};
   Decoration* d = &ld;
   EXPECT_FALSE(d->Is<BindingDecoration>());
   EXPECT_FALSE(d->Is<BuiltinDecoration>());
@@ -41,7 +41,7 @@
 }
 
 TEST_F(LocationDecorationTest, ToStr) {
-  LocationDecoration d{2, Source{}};
+  LocationDecoration d{Source{}, 2};
   std::ostringstream out;
   d.to_str(out, 0);
   EXPECT_EQ(out.str(), R"(LocationDecoration{2}
diff --git a/src/ast/set_decoration.cc b/src/ast/set_decoration.cc
index 3b5ea5e..3f6607c 100644
--- a/src/ast/set_decoration.cc
+++ b/src/ast/set_decoration.cc
@@ -22,7 +22,7 @@
 namespace tint {
 namespace ast {
 
-SetDecoration::SetDecoration(uint32_t val, const Source& source)
+SetDecoration::SetDecoration(const Source& source, uint32_t val)
     : Base(source), value_(val) {}
 
 SetDecoration::~SetDecoration() = default;
@@ -33,7 +33,7 @@
 }
 
 SetDecoration* SetDecoration::Clone(CloneContext* ctx) const {
-  return ctx->mod->create<SetDecoration>(value_, ctx->Clone(source()));
+  return ctx->mod->create<SetDecoration>(ctx->Clone(source()), value_);
 }
 
 }  // namespace ast
diff --git a/src/ast/set_decoration.h b/src/ast/set_decoration.h
index a58e334..1ea07b2 100644
--- a/src/ast/set_decoration.h
+++ b/src/ast/set_decoration.h
@@ -28,7 +28,7 @@
   /// constructor
   /// @param value the set value
   /// @param source the source of this decoration
-  SetDecoration(uint32_t value, const Source& source);
+  SetDecoration(const Source& source, uint32_t value);
   ~SetDecoration() override;
 
   /// @returns the set value
diff --git a/src/ast/set_decoration_test.cc b/src/ast/set_decoration_test.cc
index 088f3f0..c0d6a15 100644
--- a/src/ast/set_decoration_test.cc
+++ b/src/ast/set_decoration_test.cc
@@ -24,12 +24,12 @@
 using SetDecorationTest = TestHelper;
 
 TEST_F(SetDecorationTest, Creation) {
-  SetDecoration d{2, Source{}};
+  SetDecoration d{Source{}, 2};
   EXPECT_EQ(2u, d.value());
 }
 
 TEST_F(SetDecorationTest, Is) {
-  SetDecoration sd{2, Source{}};
+  SetDecoration sd{Source{}, 2};
   Decoration* d = &sd;
   EXPECT_FALSE(d->Is<BindingDecoration>());
   EXPECT_FALSE(d->Is<BuiltinDecoration>());
@@ -39,7 +39,7 @@
 }
 
 TEST_F(SetDecorationTest, ToStr) {
-  SetDecoration d{2, Source{}};
+  SetDecoration d{Source{}, 2};
   std::ostringstream out;
   d.to_str(out, 0);
   EXPECT_EQ(out.str(), R"(SetDecoration{2}
diff --git a/src/ast/stage_decoration.cc b/src/ast/stage_decoration.cc
index d66817f..50525f3 100644
--- a/src/ast/stage_decoration.cc
+++ b/src/ast/stage_decoration.cc
@@ -22,7 +22,7 @@
 namespace tint {
 namespace ast {
 
-StageDecoration::StageDecoration(PipelineStage stage, const Source& source)
+StageDecoration::StageDecoration(const Source& source, PipelineStage stage)
     : Base(source), stage_(stage) {}
 
 StageDecoration::~StageDecoration() = default;
@@ -33,7 +33,7 @@
 }
 
 StageDecoration* StageDecoration::Clone(CloneContext* ctx) const {
-  return ctx->mod->create<StageDecoration>(stage_, ctx->Clone(source()));
+  return ctx->mod->create<StageDecoration>(ctx->Clone(source()), stage_);
 }
 
 }  // namespace ast
diff --git a/src/ast/stage_decoration.h b/src/ast/stage_decoration.h
index 4339f98..a8ee49f 100644
--- a/src/ast/stage_decoration.h
+++ b/src/ast/stage_decoration.h
@@ -27,7 +27,7 @@
   /// constructor
   /// @param stage the pipeline stage
   /// @param source the source of this decoration
-  StageDecoration(PipelineStage stage, const Source& source);
+  StageDecoration(const Source& source, PipelineStage stage);
   ~StageDecoration() override;
 
   /// @returns the stage
diff --git a/src/ast/stage_decoration_test.cc b/src/ast/stage_decoration_test.cc
index 4bfdad9..966d7e0 100644
--- a/src/ast/stage_decoration_test.cc
+++ b/src/ast/stage_decoration_test.cc
@@ -26,19 +26,19 @@
 using StageDecorationTest = TestHelper;
 
 TEST_F(StageDecorationTest, Creation_1param) {
-  StageDecoration d{PipelineStage::kFragment, Source{}};
+  StageDecoration d{Source{}, PipelineStage::kFragment};
   EXPECT_EQ(d.value(), PipelineStage::kFragment);
 }
 
 TEST_F(StageDecorationTest, Is) {
-  StageDecoration sd{PipelineStage::kFragment, Source{}};
+  StageDecoration sd{Source{}, PipelineStage::kFragment};
   Decoration* d = &sd;
   EXPECT_FALSE(d->Is<WorkgroupDecoration>());
   EXPECT_TRUE(d->Is<StageDecoration>());
 }
 
 TEST_F(StageDecorationTest, ToStr) {
-  StageDecoration d{PipelineStage::kFragment, Source{}};
+  StageDecoration d{Source{}, PipelineStage::kFragment};
   std::ostringstream out;
   d.to_str(out, 0);
   EXPECT_EQ(out.str(), R"(StageDecoration{fragment}
diff --git a/src/ast/stride_decoration.cc b/src/ast/stride_decoration.cc
index 094ec56..9e42cd7 100644
--- a/src/ast/stride_decoration.cc
+++ b/src/ast/stride_decoration.cc
@@ -22,7 +22,7 @@
 namespace tint {
 namespace ast {
 
-StrideDecoration::StrideDecoration(uint32_t stride, const Source& source)
+StrideDecoration::StrideDecoration(const Source& source, uint32_t stride)
     : Base(source), stride_(stride) {}
 
 StrideDecoration::~StrideDecoration() = default;
@@ -33,7 +33,7 @@
 }
 
 StrideDecoration* StrideDecoration::Clone(CloneContext* ctx) const {
-  return ctx->mod->create<StrideDecoration>(stride_, ctx->Clone(source()));
+  return ctx->mod->create<StrideDecoration>(ctx->Clone(source()), stride_);
 }
 
 }  // namespace ast
diff --git a/src/ast/stride_decoration.h b/src/ast/stride_decoration.h
index 317ac93..dc89978 100644
--- a/src/ast/stride_decoration.h
+++ b/src/ast/stride_decoration.h
@@ -28,7 +28,7 @@
   /// constructor
   /// @param stride the stride value
   /// @param source the source of this decoration
-  StrideDecoration(uint32_t stride, const Source& source);
+  StrideDecoration(const Source& source, uint32_t stride);
   ~StrideDecoration() override;
 
   /// @returns the stride value
diff --git a/src/ast/stride_decoration_test.cc b/src/ast/stride_decoration_test.cc
index 6b97255..34a1079 100644
--- a/src/ast/stride_decoration_test.cc
+++ b/src/ast/stride_decoration_test.cc
@@ -23,18 +23,18 @@
 using StrideDecorationTest = TestHelper;
 
 TEST_F(StrideDecorationTest, Creation) {
-  StrideDecoration d{2, Source{}};
+  StrideDecoration d{Source{}, 2};
   EXPECT_EQ(2u, d.stride());
 }
 
 TEST_F(StrideDecorationTest, Is) {
-  StrideDecoration d{2, Source{}};
+  StrideDecoration d{Source{}, 2};
   EXPECT_TRUE(d.Is<StrideDecoration>());
 }
 
 TEST_F(StrideDecorationTest, Source) {
   StrideDecoration d{
-      2, Source{Source::Range{Source::Location{1, 2}, Source::Location{3, 4}}}};
+      Source{Source::Range{Source::Location{1, 2}, Source::Location{3, 4}}}, 2};
   EXPECT_EQ(d.source().range.begin.line, 1u);
   EXPECT_EQ(d.source().range.begin.column, 2u);
   EXPECT_EQ(d.source().range.end.line, 3u);
diff --git a/src/ast/struct_member_offset_decoration.cc b/src/ast/struct_member_offset_decoration.cc
index abd2161..4c3af19 100644
--- a/src/ast/struct_member_offset_decoration.cc
+++ b/src/ast/struct_member_offset_decoration.cc
@@ -22,8 +22,8 @@
 namespace tint {
 namespace ast {
 
-StructMemberOffsetDecoration::StructMemberOffsetDecoration(uint32_t offset,
-                                                           const Source& source)
+StructMemberOffsetDecoration::StructMemberOffsetDecoration(const Source& source,
+                                                           uint32_t offset)
     : Base(source), offset_(offset) {}
 
 StructMemberOffsetDecoration::~StructMemberOffsetDecoration() = default;
@@ -36,8 +36,8 @@
 
 StructMemberOffsetDecoration* StructMemberOffsetDecoration::Clone(
     CloneContext* ctx) const {
-  return ctx->mod->create<StructMemberOffsetDecoration>(offset_,
-                                                        ctx->Clone(source()));
+  return ctx->mod->create<StructMemberOffsetDecoration>(ctx->Clone(source()),
+                                                        offset_);
 }
 
 }  // namespace ast
diff --git a/src/ast/struct_member_offset_decoration.h b/src/ast/struct_member_offset_decoration.h
index a153758..001d777 100644
--- a/src/ast/struct_member_offset_decoration.h
+++ b/src/ast/struct_member_offset_decoration.h
@@ -27,9 +27,9 @@
     : public Castable<StructMemberOffsetDecoration, StructMemberDecoration> {
  public:
   /// constructor
-  /// @param offset the offset value
   /// @param source the source of this decoration
-  StructMemberOffsetDecoration(uint32_t offset, const Source& source);
+  /// @param offset the offset value
+  StructMemberOffsetDecoration(const Source& source, uint32_t offset);
   ~StructMemberOffsetDecoration() override;
 
   /// @returns the offset value
diff --git a/src/ast/struct_member_offset_decoration_test.cc b/src/ast/struct_member_offset_decoration_test.cc
index 2197f03..49a4796 100644
--- a/src/ast/struct_member_offset_decoration_test.cc
+++ b/src/ast/struct_member_offset_decoration_test.cc
@@ -23,12 +23,12 @@
 using StructMemberOffsetDecorationTest = TestHelper;
 
 TEST_F(StructMemberOffsetDecorationTest, Creation) {
-  StructMemberOffsetDecoration d{2, Source{}};
+  StructMemberOffsetDecoration d{Source{}, 2};
   EXPECT_EQ(2u, d.offset());
 }
 
 TEST_F(StructMemberOffsetDecorationTest, Is) {
-  StructMemberOffsetDecoration d{2, Source{}};
+  StructMemberOffsetDecoration d{Source{}, 2};
   EXPECT_TRUE(d.Is<StructMemberOffsetDecoration>());
 }
 
diff --git a/src/ast/struct_member_test.cc b/src/ast/struct_member_test.cc
index e698302..1c9a6d7 100644
--- a/src/ast/struct_member_test.cc
+++ b/src/ast/struct_member_test.cc
@@ -30,7 +30,7 @@
 TEST_F(StructMemberTest, Creation) {
   type::I32 i32;
   StructMemberDecorationList decorations;
-  decorations.emplace_back(create<StructMemberOffsetDecoration>(4, Source{}));
+  decorations.emplace_back(create<StructMemberOffsetDecoration>(Source{}, 4));
 
   StructMember st{Source{}, "a", &i32, decorations};
   EXPECT_EQ(st.name(), "a");
@@ -77,7 +77,7 @@
 TEST_F(StructMemberTest, IsValid_Null_Decoration) {
   type::I32 i32;
   StructMemberDecorationList decorations;
-  decorations.emplace_back(create<StructMemberOffsetDecoration>(4, Source{}));
+  decorations.emplace_back(create<StructMemberOffsetDecoration>(Source{}, 4));
   decorations.push_back(nullptr);
 
   StructMember st{Source{}, "a", &i32, decorations};
@@ -87,7 +87,7 @@
 TEST_F(StructMemberTest, ToStr) {
   type::I32 i32;
   StructMemberDecorationList decorations;
-  decorations.emplace_back(create<StructMemberOffsetDecoration>(4, Source{}));
+  decorations.emplace_back(create<StructMemberOffsetDecoration>(Source{}, 4));
 
   StructMember st{Source{}, "a", &i32, decorations};
   std::ostringstream out;
diff --git a/src/ast/type/access_control_type_test.cc b/src/ast/type/access_control_type_test.cc
index 2927685..ef803ac 100644
--- a/src/ast/type/access_control_type_test.cc
+++ b/src/ast/type/access_control_type_test.cc
@@ -107,7 +107,7 @@
 TEST_F(AccessControlTest, MinBufferBindingSizeArray) {
   U32 u32;
   Array array(&u32, 4,
-              ArrayDecorationList{create<StrideDecoration>(4, Source{})});
+              ArrayDecorationList{create<StrideDecoration>(Source{}, 4)});
   AccessControl at{ast::AccessControl::kReadOnly, &array};
   EXPECT_EQ(16u, at.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
 }
@@ -115,7 +115,7 @@
 TEST_F(AccessControlTest, MinBufferBindingSizeRuntimeArray) {
   U32 u32;
   Array array(&u32, 0,
-              ArrayDecorationList{create<StrideDecoration>(4, Source{})});
+              ArrayDecorationList{create<StrideDecoration>(Source{}, 4)});
   AccessControl at{ast::AccessControl::kReadOnly, &array};
   EXPECT_EQ(4u, at.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
 }
@@ -125,11 +125,11 @@
   StructMemberList members;
 
   StructMemberDecorationList deco;
-  deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+  deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<StructMember>(Source{}, "foo", &u32, deco));
 
   deco = StructMemberDecorationList();
-  deco.push_back(create<StructMemberOffsetDecoration>(4, Source{}));
+  deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<StructMember>(Source{}, "bar", &u32, deco));
 
   StructDecorationList decos;
@@ -150,7 +150,7 @@
 TEST_F(AccessControlTest, BaseAlignmentArray) {
   U32 u32;
   Array array(&u32, 4,
-              ArrayDecorationList{create<StrideDecoration>(4, Source{})});
+              ArrayDecorationList{create<StrideDecoration>(Source{}, 4)});
   AccessControl at{ast::AccessControl::kReadOnly, &array};
   EXPECT_EQ(16u, at.BaseAlignment(MemoryLayout::kUniformBuffer));
 }
@@ -158,7 +158,7 @@
 TEST_F(AccessControlTest, BaseAlignmentRuntimeArray) {
   U32 u32;
   Array array(&u32, 0,
-              ArrayDecorationList{create<StrideDecoration>(4, Source{})});
+              ArrayDecorationList{create<StrideDecoration>(Source{}, 4)});
   AccessControl at{ast::AccessControl::kReadOnly, &array};
   EXPECT_EQ(16u, at.BaseAlignment(MemoryLayout::kUniformBuffer));
 }
@@ -169,12 +169,12 @@
 
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 0));
     members.push_back(create<StructMember>(Source{}, "foo", &u32, deco));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(4, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 4));
     members.push_back(create<StructMember>(Source{}, "bar", &u32, deco));
   }
   StructDecorationList decos;
diff --git a/src/ast/type/alias_type_test.cc b/src/ast/type/alias_type_test.cc
index 55bc94c..dc34994 100644
--- a/src/ast/type/alias_type_test.cc
+++ b/src/ast/type/alias_type_test.cc
@@ -175,7 +175,7 @@
   U32 u32;
   Array array(&u32, 4,
               ArrayDecorationList{
-                  create<StrideDecoration>(4, Source{}),
+                  create<StrideDecoration>(Source{}, 4),
               });
   Alias alias{mod.RegisterSymbol("alias"), "alias", &array};
   EXPECT_EQ(16u, alias.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
@@ -185,7 +185,7 @@
   U32 u32;
   Array array(&u32, 0,
               ArrayDecorationList{
-                  create<StrideDecoration>(4, Source{}),
+                  create<StrideDecoration>(Source{}, 4),
               });
   Alias alias{mod.RegisterSymbol("alias"), "alias", &array};
   EXPECT_EQ(4u, alias.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
@@ -197,12 +197,12 @@
 
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 0));
     members.push_back(create<StructMember>(Source{}, "foo", &u32, deco));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(4, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 4));
     members.push_back(create<StructMember>(Source{}, "bar", &u32, deco));
   }
   StructDecorationList decos;
@@ -224,7 +224,7 @@
   U32 u32;
   Array array(&u32, 4,
               ArrayDecorationList{
-                  create<StrideDecoration>(4, Source{}),
+                  create<StrideDecoration>(Source{}, 4),
               });
   Alias alias{mod.RegisterSymbol("alias"), "alias", &array};
   EXPECT_EQ(16u, alias.BaseAlignment(MemoryLayout::kUniformBuffer));
@@ -234,7 +234,7 @@
   U32 u32;
   Array array(&u32, 0,
               ArrayDecorationList{
-                  create<StrideDecoration>(4, Source{}),
+                  create<StrideDecoration>(Source{}, 4),
               });
   Alias alias{mod.RegisterSymbol("alias"), "alias", &array};
   EXPECT_EQ(16u, alias.BaseAlignment(MemoryLayout::kUniformBuffer));
@@ -246,12 +246,12 @@
 
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 0));
     members.push_back(create<StructMember>(Source{}, "foo", &u32, deco));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(4, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 4));
     members.push_back(create<StructMember>(Source{}, "bar", &u32, deco));
   }
   StructDecorationList decos;
diff --git a/src/ast/type/array_type_test.cc b/src/ast/type/array_type_test.cc
index 5d929fa..4de28df 100644
--- a/src/ast/type/array_type_test.cc
+++ b/src/ast/type/array_type_test.cc
@@ -90,7 +90,7 @@
 TEST_F(ArrayTest, TypeName_WithStride) {
   I32 i32;
   Array arr{&i32, 3,
-            ArrayDecorationList{create<StrideDecoration>(16, Source{})}};
+            ArrayDecorationList{create<StrideDecoration>(Source{}, 16)}};
   EXPECT_EQ(arr.type_name(), "__array__i32_3_stride_16");
 }
 
@@ -103,21 +103,21 @@
 TEST_F(ArrayTest, MinBufferBindingSizeArray) {
   U32 u32;
   Array arr(&u32, 4,
-            ArrayDecorationList{create<StrideDecoration>(4, Source{})});
+            ArrayDecorationList{create<StrideDecoration>(Source{}, 4)});
   EXPECT_EQ(16u, arr.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
 }
 
 TEST_F(ArrayTest, MinBufferBindingSizeRuntimeArray) {
   U32 u32;
   Array arr(&u32, 0,
-            ArrayDecorationList{create<StrideDecoration>(4, Source{})});
+            ArrayDecorationList{create<StrideDecoration>(Source{}, 4)});
   EXPECT_EQ(4u, arr.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
 }
 
 TEST_F(ArrayTest, BaseAlignmentArray) {
   U32 u32;
   Array arr(&u32, 4,
-            ArrayDecorationList{create<StrideDecoration>(4, Source{})});
+            ArrayDecorationList{create<StrideDecoration>(Source{}, 4)});
   EXPECT_EQ(16u, arr.BaseAlignment(MemoryLayout::kUniformBuffer));
   EXPECT_EQ(4u, arr.BaseAlignment(MemoryLayout::kStorageBuffer));
 }
@@ -125,7 +125,7 @@
 TEST_F(ArrayTest, BaseAlignmentRuntimeArray) {
   U32 u32;
   Array arr(&u32, 0,
-            ArrayDecorationList{create<StrideDecoration>(4, Source{})});
+            ArrayDecorationList{create<StrideDecoration>(Source{}, 4)});
   EXPECT_EQ(16u, arr.BaseAlignment(MemoryLayout::kUniformBuffer));
   EXPECT_EQ(4u, arr.BaseAlignment(MemoryLayout::kStorageBuffer));
 }
diff --git a/src/ast/type/struct_type_test.cc b/src/ast/type/struct_type_test.cc
index 0a7b2d1..ad1131b 100644
--- a/src/ast/type/struct_type_test.cc
+++ b/src/ast/type/struct_type_test.cc
@@ -83,12 +83,12 @@
 
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 0));
     members.push_back(create<StructMember>(Source{}, "foo", &u32, deco));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(4, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 4));
     members.push_back(create<StructMember>(Source{}, "bar", &u32, deco));
   }
   StructDecorationList decos;
@@ -103,22 +103,22 @@
 TEST_F(StructTest, MinBufferBindingSizeArray) {
   U32 u32;
   Array arr(&u32, 4,
-            ArrayDecorationList{create<StrideDecoration>(4, Source{})});
+            ArrayDecorationList{create<StrideDecoration>(Source{}, 4)});
 
   StructMemberList members;
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 0));
     members.push_back(create<StructMember>(Source{}, "foo", &u32, deco));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(4, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 4));
     members.push_back(create<StructMember>(Source{}, "bar", &u32, deco));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(8, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 8));
     members.push_back(create<StructMember>(Source{}, "bar", &arr, deco));
   }
   StructDecorationList decos;
@@ -134,22 +134,22 @@
 TEST_F(StructTest, MinBufferBindingSizeRuntimeArray) {
   U32 u32;
   Array arr(&u32, 0,
-            ArrayDecorationList{create<StrideDecoration>(4, Source{})});
+            ArrayDecorationList{create<StrideDecoration>(Source{}, 4)});
 
   StructMemberList members;
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 0));
     members.push_back(create<StructMember>(Source{}, "foo", &u32, deco));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(4, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 4));
     members.push_back(create<StructMember>(Source{}, "bar", &u32, deco));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(8, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 8));
     members.push_back(create<StructMember>(Source{}, "bar", &u32, deco));
   }
   StructDecorationList decos;
@@ -167,7 +167,7 @@
   StructMemberList members;
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 0));
     members.push_back(create<StructMember>(Source{}, "foo", &vec2, deco));
   }
   StructDecorationList decos;
@@ -186,7 +186,7 @@
   StructMemberList members;
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 0));
     members.push_back(create<StructMember>(Source{}, "foo", &vec3, deco));
   }
   StructDecorationList decos;
@@ -206,7 +206,7 @@
   StructMemberList members;
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 0));
     members.push_back(create<StructMember>(Source{}, "foo", &vec4, deco));
   }
   StructDecorationList decos;
@@ -225,12 +225,12 @@
 
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 0));
     members.push_back(create<StructMember>(Source{}, "foo", &u32, deco));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(4, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 4));
     members.push_back(create<StructMember>(Source{}, "bar", &u32, deco));
   }
   StructDecorationList decos;
@@ -244,22 +244,22 @@
 TEST_F(StructTest, BaseAlignmentArray) {
   U32 u32;
   Array arr(&u32, 4,
-            ArrayDecorationList{create<StrideDecoration>(4, Source{})});
+            ArrayDecorationList{create<StrideDecoration>(Source{}, 4)});
 
   StructMemberList members;
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 0));
     members.push_back(create<StructMember>(Source{}, "foo", &u32, deco));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(4, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 4));
     members.push_back(create<StructMember>(Source{}, "bar", &u32, deco));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(8, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 8));
     members.push_back(create<StructMember>(Source{}, "bar", &arr, deco));
   }
   StructDecorationList decos;
@@ -273,22 +273,22 @@
 TEST_F(StructTest, BaseAlignmentRuntimeArray) {
   U32 u32;
   Array arr(&u32, 0,
-            ArrayDecorationList{create<StrideDecoration>(4, Source{})});
+            ArrayDecorationList{create<StrideDecoration>(Source{}, 4)});
 
   StructMemberList members;
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 0));
     members.push_back(create<StructMember>(Source{}, "foo", &u32, deco));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(4, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 4));
     members.push_back(create<StructMember>(Source{}, "bar", &u32, deco));
   }
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(8, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 8));
     members.push_back(create<StructMember>(Source{}, "bar", &u32, deco));
   }
   StructDecorationList decos;
@@ -305,7 +305,7 @@
   StructMemberList members;
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 0));
     members.push_back(create<StructMember>(Source{}, "foo", &vec2, deco));
   }
   StructDecorationList decos;
@@ -323,7 +323,7 @@
   StructMemberList members;
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 0));
     members.push_back(create<StructMember>(Source{}, "foo", &vec3, deco));
   }
   StructDecorationList decos;
@@ -341,7 +341,7 @@
   StructMemberList members;
   {
     StructMemberDecorationList deco;
-    deco.push_back(create<StructMemberOffsetDecoration>(0, Source{}));
+    deco.push_back(create<StructMemberOffsetDecoration>(Source{}, 0));
     members.push_back(create<StructMember>(Source{}, "foo", &vec4, deco));
   }
   StructDecorationList decos;
diff --git a/src/ast/variable_test.cc b/src/ast/variable_test.cc
index 5fb2a26..778b4b7 100644
--- a/src/ast/variable_test.cc
+++ b/src/ast/variable_test.cc
@@ -140,9 +140,9 @@
   auto* var = create<Variable>(
       Source{}, "my_var", StorageClass::kFunction, &t, false, nullptr,
       VariableDecorationList{
-          create<LocationDecoration>(1, Source{}),
-          create<BuiltinDecoration>(Builtin::kPosition, Source{}),
-          create<ConstantIdDecoration>(1200, Source{}),
+          create<LocationDecoration>(Source{}, 1),
+          create<BuiltinDecoration>(Source{}, Builtin::kPosition),
+          create<ConstantIdDecoration>(Source{}, 1200),
       });
 
   EXPECT_TRUE(var->HasLocationDecoration());
@@ -155,7 +155,7 @@
   auto* var = create<Variable>(Source{}, "my_var", StorageClass::kFunction, &t,
                                false, nullptr,
                                VariableDecorationList{
-                                   create<ConstantIdDecoration>(1200, Source{}),
+                                   create<ConstantIdDecoration>(Source{}, 1200),
                                });
 
   EXPECT_EQ(var->constant_id(), 1200u);
@@ -168,8 +168,8 @@
                        create<IdentifierExpression>(
                            Source{}, mod.RegisterSymbol("expr"), "expr"),
                        VariableDecorationList{
-                           create<BindingDecoration>(2, Source{}),
-                           create<SetDecoration>(1, Source{}),
+                           create<BindingDecoration>(Source{}, 2),
+                           create<SetDecoration>(Source{}, 1),
                        });
 
   std::ostringstream out;
diff --git a/src/ast/workgroup_decoration.cc b/src/ast/workgroup_decoration.cc
index b1935b9..63fdf20 100644
--- a/src/ast/workgroup_decoration.cc
+++ b/src/ast/workgroup_decoration.cc
@@ -22,18 +22,18 @@
 namespace tint {
 namespace ast {
 
-WorkgroupDecoration::WorkgroupDecoration(uint32_t x, const Source& source)
+WorkgroupDecoration::WorkgroupDecoration(const Source& source, uint32_t x)
     : Base(source), x_(x) {}
 
-WorkgroupDecoration::WorkgroupDecoration(uint32_t x,
-                                         uint32_t y,
-                                         const Source& source)
+WorkgroupDecoration::WorkgroupDecoration(const Source& source,
+                                         uint32_t x,
+                                         uint32_t y)
     : Base(source), x_(x), y_(y) {}
 
-WorkgroupDecoration::WorkgroupDecoration(uint32_t x,
+WorkgroupDecoration::WorkgroupDecoration(const Source& source,
+                                         uint32_t x,
                                          uint32_t y,
-                                         uint32_t z,
-                                         const Source& source)
+                                         uint32_t z)
     : Base(source), x_(x), y_(y), z_(z) {}
 
 WorkgroupDecoration::~WorkgroupDecoration() = default;
@@ -45,8 +45,8 @@
 }
 
 WorkgroupDecoration* WorkgroupDecoration::Clone(CloneContext* ctx) const {
-  return ctx->mod->create<WorkgroupDecoration>(x_, y_, z_,
-                                               ctx->Clone(source()));
+  return ctx->mod->create<WorkgroupDecoration>(ctx->Clone(source()), x_, y_,
+                                               z_);
 }
 
 }  // namespace ast
diff --git a/src/ast/workgroup_decoration.h b/src/ast/workgroup_decoration.h
index ac16b41..9946108 100644
--- a/src/ast/workgroup_decoration.h
+++ b/src/ast/workgroup_decoration.h
@@ -29,20 +29,20 @@
     : public Castable<WorkgroupDecoration, FunctionDecoration> {
  public:
   /// constructor
-  /// @param x the workgroup x dimension size
   /// @param source the source of this decoration
-  WorkgroupDecoration(uint32_t x, const Source& source);
+  /// @param x the workgroup x dimension size
+  WorkgroupDecoration(const Source& source, uint32_t x);
   /// constructor
+  /// @param source the source of this decoration
   /// @param x the workgroup x dimension size
   /// @param y the workgroup x dimension size
-  /// @param source the source of this decoration
-  WorkgroupDecoration(uint32_t x, uint32_t y, const Source& source);
+  WorkgroupDecoration(const Source& source, uint32_t x, uint32_t y);
   /// constructor
+  /// @param source the source of this decoration
   /// @param x the workgroup x dimension size
   /// @param y the workgroup x dimension size
   /// @param z the workgroup x dimension size
-  /// @param source the source of this decoration
-  WorkgroupDecoration(uint32_t x, uint32_t y, uint32_t z, const Source& source);
+  WorkgroupDecoration(const Source& source, uint32_t x, uint32_t y, uint32_t z);
   ~WorkgroupDecoration() override;
 
   /// @returns the workgroup dimensions
diff --git a/src/ast/workgroup_decoration_test.cc b/src/ast/workgroup_decoration_test.cc
index e285d35..b45dff8 100644
--- a/src/ast/workgroup_decoration_test.cc
+++ b/src/ast/workgroup_decoration_test.cc
@@ -26,7 +26,7 @@
 using WorkgroupDecorationTest = TestHelper;
 
 TEST_F(WorkgroupDecorationTest, Creation_1param) {
-  WorkgroupDecoration d{2, Source{}};
+  WorkgroupDecoration d{Source{}, 2};
   uint32_t x = 0;
   uint32_t y = 0;
   uint32_t z = 0;
@@ -36,7 +36,7 @@
   EXPECT_EQ(z, 1u);
 }
 TEST_F(WorkgroupDecorationTest, Creation_2param) {
-  WorkgroupDecoration d{2, 4, Source{}};
+  WorkgroupDecoration d{Source{}, 2, 4};
   uint32_t x = 0;
   uint32_t y = 0;
   uint32_t z = 0;
@@ -47,7 +47,7 @@
 }
 
 TEST_F(WorkgroupDecorationTest, Creation_3param) {
-  WorkgroupDecoration d{2, 4, 6, Source{}};
+  WorkgroupDecoration d{Source{}, 2, 4, 6};
   uint32_t x = 0;
   uint32_t y = 0;
   uint32_t z = 0;
@@ -58,14 +58,14 @@
 }
 
 TEST_F(WorkgroupDecorationTest, Is) {
-  WorkgroupDecoration wd{2, 4, 6, Source{}};
+  WorkgroupDecoration wd{Source{}, 2, 4, 6};
   Decoration* d = &wd;
   EXPECT_TRUE(d->Is<WorkgroupDecoration>());
   EXPECT_FALSE(d->Is<StageDecoration>());
 }
 
 TEST_F(WorkgroupDecorationTest, ToStr) {
-  WorkgroupDecoration d{2, 4, 6, Source{}};
+  WorkgroupDecoration d{Source{}, 2, 4, 6};
   std::ostringstream out;
   d.to_str(out, 0);
   EXPECT_EQ(out.str(), R"(WorkgroupDecoration{2 4 6}
diff --git a/src/inspector/inspector_test.cc b/src/inspector/inspector_test.cc
index d149929..192e7bd 100644
--- a/src/inspector/inspector_test.cc
+++ b/src/inspector/inspector_test.cc
@@ -231,7 +231,7 @@
         constructor,               // constructor
         ast::VariableDecorationList{
             // decorations
-            create<ast::ConstantIdDecoration>(id, Source{}),
+            create<ast::ConstantIdDecoration>(Source{}, id),
         });
     mod()->AddGlobalVariable(var);
   }
@@ -303,7 +303,7 @@
 
       ast::StructMemberDecorationList deco;
       deco.push_back(
-          create<ast::StructMemberOffsetDecoration>(offset, Source{}));
+          create<ast::StructMemberOffsetDecoration>(Source{}, offset));
 
       members.push_back(create<ast::StructMember>(
           Source{}, StructMemberName(members.size(), type), type, deco));
@@ -394,8 +394,8 @@
         nullptr,        // constructor
         ast::VariableDecorationList{
             // decorations
-            create<ast::BindingDecoration>(binding, Source{}),
-            create<ast::SetDecoration>(set, Source{}),
+            create<ast::BindingDecoration>(Source{}, binding),
+            create<ast::SetDecoration>(Source{}, set),
         });
 
     mod()->AddGlobalVariable(var);
@@ -801,7 +801,7 @@
       array_type_memo_[count] = create<ast::type::Array>(
           u32_type(), count,
           ast::ArrayDecorationList{
-              create<ast::StrideDecoration>(4, Source{}),
+              create<ast::StrideDecoration>(Source{}, 4),
           });
     }
     return array_type_memo_[count];
@@ -915,7 +915,7 @@
   auto* foo = MakeEmptyBodyFunction(
       "foo",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(foo);
 
@@ -934,14 +934,14 @@
   auto* foo = MakeEmptyBodyFunction(
       "foo",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(foo);
 
   auto* bar = MakeEmptyBodyFunction(
       "bar",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kCompute),
       });
   mod()->AddFunction(bar);
 
@@ -966,14 +966,14 @@
   auto* foo = MakeCallerBodyFunction(
       "foo", "func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(foo);
 
   auto* bar = MakeCallerBodyFunction(
       "bar", "func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
   mod()->AddFunction(bar);
 
@@ -995,7 +995,7 @@
   auto* foo = MakeCallerBodyFunction(
       "foo", "func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(foo);
 
@@ -1014,8 +1014,8 @@
   auto* foo = MakeEmptyBodyFunction(
       "foo",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{}),
-          create<ast::WorkgroupDecoration>(8u, 2u, 1u, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kCompute),
+          create<ast::WorkgroupDecoration>(Source{}, 8u, 2u, 1u),
       });
   mod()->AddFunction(foo);
 
@@ -1037,7 +1037,7 @@
   auto* foo = MakeCallerBodyFunction(
       "foo", "func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(foo);
 
@@ -1055,7 +1055,7 @@
   auto* foo = MakeInOutVariableBodyFunction(
       "foo", {{"in_var", "out_var"}},
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(foo);
 
@@ -1081,7 +1081,7 @@
   auto* foo = MakeCallerBodyFunction(
       "foo", "func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(foo);
 
@@ -1107,7 +1107,7 @@
   auto* foo = MakeInOutVariableCallerBodyFunction(
       "foo", "func", {{"in_var", "out_var"}},
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(foo);
 
@@ -1130,7 +1130,7 @@
   auto* foo = MakeInOutVariableBodyFunction(
       "foo", {{"in_var", "out_var"}, {"in2_var", "out2_var"}},
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(foo);
 
@@ -1159,7 +1159,7 @@
   auto* foo = MakeCallerBodyFunction(
       "foo", "func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(foo);
 
@@ -1184,14 +1184,14 @@
   auto* foo = MakeInOutVariableBodyFunction(
       "foo", {{"in_var", "out2_var"}},
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(foo);
 
   auto* bar = MakeInOutVariableBodyFunction(
       "bar", {{"in2_var", "out_var"}},
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kCompute),
       });
   mod()->AddFunction(bar);
 
@@ -1228,14 +1228,14 @@
   auto* foo = MakeInOutVariableCallerBodyFunction(
       "foo", "func", {{"in_var", "out_var"}},
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(foo);
 
   auto* bar = MakeCallerBodyFunction(
       "bar", "func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kCompute),
       });
   mod()->AddFunction(bar);
 
@@ -1291,7 +1291,7 @@
   auto* foo = MakeEmptyBodyFunction(
       "foo",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(foo);
 
@@ -1310,7 +1310,7 @@
   auto* foo = MakeEmptyBodyFunction(
       "foo",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(foo);
 
@@ -1319,7 +1319,7 @@
   auto* bar = MakeEmptyBodyFunction(
       "bar",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kCompute),
       });
   mod()->AddFunction(bar);
 
@@ -1444,7 +1444,7 @@
   auto* ep_func = MakeCallerBodyFunction(
       "ep_func", "ub_func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(ep_func);
 
@@ -1458,7 +1458,7 @@
 TEST_F(InspectorGetUniformBufferResourceBindingsTest, MissingBlockDeco) {
   ast::StructMemberList members;
   ast::StructMemberDecorationList deco;
-  deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
 
   members.push_back(create<ast::StructMember>(
       Source{}, StructMemberName(members.size(), i32_type()), i32_type(),
@@ -1479,7 +1479,7 @@
   auto* ep_func = MakeCallerBodyFunction(
       "ep_func", "ub_func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(ep_func);
 
@@ -1504,7 +1504,7 @@
   auto* ep_func = MakeCallerBodyFunction(
       "ep_func", "ub_func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(ep_func);
 
@@ -1533,7 +1533,7 @@
   auto* ep_func = MakeCallerBodyFunction(
       "ep_func", "ub_func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(ep_func);
 
@@ -1587,7 +1587,7 @@
       Source{}, mod()->RegisterSymbol("ep_func"), "ep_func",
       ast::VariableList(), void_type(), body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(func);
 
@@ -1624,7 +1624,7 @@
   auto* ep_func = MakeCallerBodyFunction(
       "ep_func", "ub_func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(ep_func);
 
@@ -1653,7 +1653,7 @@
   auto* ep_func = MakeCallerBodyFunction(
       "ep_func", "sb_func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(ep_func);
 
@@ -1682,7 +1682,7 @@
   auto* ep_func = MakeCallerBodyFunction(
       "ep_func", "sb_func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(ep_func);
 
@@ -1736,7 +1736,7 @@
       Source{}, mod()->RegisterSymbol("ep_func"), "ep_func",
       ast::VariableList(), void_type(), body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(func);
 
@@ -1773,7 +1773,7 @@
   auto* ep_func = MakeCallerBodyFunction(
       "ep_func", "sb_func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(ep_func);
 
@@ -1802,7 +1802,7 @@
   auto* ep_func = MakeCallerBodyFunction(
       "ep_func", "sb_func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(ep_func);
 
@@ -1831,7 +1831,7 @@
   auto* ep_func = MakeCallerBodyFunction(
       "ep_func", "sb_func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(ep_func);
 
@@ -1856,7 +1856,7 @@
   auto* ep_func = MakeCallerBodyFunction(
       "ep_func", "sb_func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(ep_func);
 
@@ -1912,7 +1912,7 @@
       Source{}, mod()->RegisterSymbol("ep_func"), "ep_func",
       ast::VariableList(), void_type(), body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(func);
 
@@ -1950,7 +1950,7 @@
   auto* ep_func = MakeCallerBodyFunction(
       "ep_func", "sb_func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(ep_func);
 
@@ -1981,7 +1981,7 @@
   auto* ep_func = MakeCallerBodyFunction(
       "ep_func", "sb_func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(ep_func);
 
@@ -2011,7 +2011,7 @@
   auto* ep_func = MakeCallerBodyFunction(
       "ep_func", "sb_func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(ep_func);
 
@@ -2033,7 +2033,7 @@
   auto* func = MakeSamplerReferenceBodyFunction(
       "ep", "foo_texture", "foo_sampler", "foo_coords", f32_type(),
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(func);
 
@@ -2051,7 +2051,7 @@
   auto* func = MakeEmptyBodyFunction(
       "ep_func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(func);
 
@@ -2077,7 +2077,7 @@
   auto* ep_func = MakeCallerBodyFunction(
       "ep_func", "foo_func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(ep_func);
 
@@ -2101,7 +2101,7 @@
   auto* func = MakeSamplerReferenceBodyFunction(
       "ep", "foo_texture", "foo_sampler", "foo_coords", f32_type(),
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(func);
 
@@ -2122,7 +2122,7 @@
   auto* func = MakeComparisonSamplerReferenceBodyFunction(
       "ep", "foo_texture", "foo_sampler", "foo_coords", "foo_depth", f32_type(),
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(func);
 
@@ -2145,7 +2145,7 @@
   auto* func = MakeComparisonSamplerReferenceBodyFunction(
       "ep", "foo_texture", "foo_sampler", "foo_coords", "foo_depth", f32_type(),
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(func);
 
@@ -2163,7 +2163,7 @@
   auto* func = MakeEmptyBodyFunction(
       "ep_func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(func);
 
@@ -2191,7 +2191,7 @@
   auto* ep_func = MakeCallerBodyFunction(
       "ep_func", "foo_func",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(ep_func);
 
@@ -2216,7 +2216,7 @@
   auto* func = MakeComparisonSamplerReferenceBodyFunction(
       "ep", "foo_texture", "foo_sampler", "foo_coords", "foo_depth", f32_type(),
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(func);
 
@@ -2236,7 +2236,7 @@
   auto* func = MakeSamplerReferenceBodyFunction(
       "ep", "foo_texture", "foo_sampler", "foo_coords", f32_type(),
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(func);
 
@@ -2252,7 +2252,7 @@
   auto* foo = MakeEmptyBodyFunction(
       "foo",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(foo);
 
@@ -2275,7 +2275,7 @@
       "ep", "foo_texture", "foo_sampler", "foo_coords",
       GetBaseType(GetParam().sampled_kind),
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(func);
 
@@ -2359,7 +2359,7 @@
       "ep", "foo_texture", "foo_sampler", "foo_coords", "foo_array_index",
       GetBaseType(GetParam().sampled_kind),
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(func);
 
@@ -2430,7 +2430,7 @@
       "ep", "foo_texture", "foo_sampler", "foo_coords",
       GetBaseType(GetParam().sampled_kind),
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(func);
 
@@ -2479,7 +2479,7 @@
   auto* foo = MakeEmptyBodyFunction(
       "foo",
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(foo);
 
@@ -2504,7 +2504,7 @@
       "ep", "foo_texture", "foo_sampler", "foo_coords", "foo_array_index",
       GetBaseType(GetParam().sampled_kind),
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(func);
 
diff --git a/src/reader/spirv/function.cc b/src/reader/spirv/function.cc
index 82d9ec5..c699115 100644
--- a/src/reader/spirv/function.cc
+++ b/src/reader/spirv/function.cc
@@ -906,7 +906,7 @@
   }
   ast::FunctionDecorationList decos;
   if (ep_info_ != nullptr) {
-    decos.emplace_back(create<ast::StageDecoration>(ep_info_->stage, Source{}));
+    decos.emplace_back(create<ast::StageDecoration>(Source{}, ep_info_->stage));
   }
 
   decl->name = name;
diff --git a/src/reader/spirv/parser_impl.cc b/src/reader/spirv/parser_impl.cc
index 122ce2f..a75725f 100644
--- a/src/reader/spirv/parser_impl.cc
+++ b/src/reader/spirv/parser_impl.cc
@@ -447,7 +447,7 @@
             << ShowType(struct_type_id);
         return nullptr;
       }
-      return create<ast::StructMemberOffsetDecoration>(decoration[1], Source{});
+      return create<ast::StructMemberOffsetDecoration>(Source{}, decoration[1]);
     case SpvDecorationNonReadable:
       // WGSL doesn't have a member decoration for this.  Silently drop it.
       return nullptr;
@@ -845,7 +845,7 @@
                       << ": multiple ArrayStride decorations";
       }
       has_array_stride = true;
-      decorations->push_back(create<ast::StrideDecoration>(stride, Source{}));
+      decorations->push_back(create<ast::StrideDecoration>(Source{}, stride));
     } else {
       return Fail() << "invalid array type ID " << type_id
                     << ": unknown decoration "
@@ -1072,7 +1072,7 @@
       ast::VariableDecorationList spec_id_decos;
       for (const auto& deco : GetDecorationsFor(inst.result_id())) {
         if ((deco.size() == 2) && (deco[0] == SpvDecorationSpecId)) {
-          auto* cid = create<ast::ConstantIdDecoration>(deco[1], Source{});
+          auto* cid = create<ast::ConstantIdDecoration>(Source{}, deco[1]);
           spec_id_decos.push_back(cid);
           break;
         }
@@ -1210,7 +1210,7 @@
         enum_converter_.ToStorageClass(builtin_position_.storage_class),
         ConvertType(builtin_position_.member_type_id), false, nullptr,
         ast::VariableDecorationList{
-            create<ast::BuiltinDecoration>(ast::Builtin::kPosition, Source{}),
+            create<ast::BuiltinDecoration>(Source{}, ast::Builtin::kPosition),
         });
 
     ast_module_.AddGlobalVariable(var);
@@ -1255,7 +1255,7 @@
         return nullptr;
       }
       decorations.emplace_back(
-          create<ast::BuiltinDecoration>(ast_builtin, Source{}));
+          create<ast::BuiltinDecoration>(Source{}, ast_builtin));
     }
     if (deco[0] == SpvDecorationLocation) {
       if (deco.size() != 2) {
@@ -1264,7 +1264,7 @@
         return nullptr;
       }
       decorations.emplace_back(
-          create<ast::LocationDecoration>(deco[1], Source{}));
+          create<ast::LocationDecoration>(Source{}, deco[1]));
     }
     if (deco[0] == SpvDecorationDescriptorSet) {
       if (deco.size() == 1) {
@@ -1272,7 +1272,7 @@
                << ": has no operand";
         return nullptr;
       }
-      decorations.emplace_back(create<ast::SetDecoration>(deco[1], Source{}));
+      decorations.emplace_back(create<ast::SetDecoration>(Source{}, deco[1]));
     }
     if (deco[0] == SpvDecorationBinding) {
       if (deco.size() == 1) {
@@ -1281,7 +1281,7 @@
         return nullptr;
       }
       decorations.emplace_back(
-          create<ast::BindingDecoration>(deco[1], Source{}));
+          create<ast::BindingDecoration>(Source{}, deco[1]));
     }
   }
 
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc
index 663bdc6..e1d3061 100644
--- a/src/reader/wgsl/parser_impl.cc
+++ b/src/reader/wgsl/parser_impl.cc
@@ -2865,7 +2865,7 @@
       if (val.errored)
         return Failure::kErrored;
 
-      return create<ast::AccessDecoration>(val.value, val.source);
+      return create<ast::AccessDecoration>(val.source, val.value);
     });
   }
 
@@ -2876,7 +2876,7 @@
       if (val.errored)
         return Failure::kErrored;
 
-      return create<ast::LocationDecoration>(val.value, val.source);
+      return create<ast::LocationDecoration>(val.source, val.value);
     });
   }
 
@@ -2887,7 +2887,7 @@
       if (val.errored)
         return Failure::kErrored;
 
-      return create<ast::BindingDecoration>(val.value, val.source);
+      return create<ast::BindingDecoration>(val.source, val.value);
     });
   }
 
@@ -2898,7 +2898,7 @@
       if (val.errored)
         return Failure::kErrored;
 
-      return create<ast::SetDecoration>(val.value, val.source);
+      return create<ast::SetDecoration>(val.source, val.value);
     });
   }
 
@@ -2908,7 +2908,7 @@
       if (builtin.errored)
         return Failure::kErrored;
 
-      return create<ast::BuiltinDecoration>(builtin.value, builtin.source);
+      return create<ast::BuiltinDecoration>(builtin.source, builtin.value);
     });
   }
 
@@ -2937,7 +2937,7 @@
         }
       }
 
-      return create<ast::WorkgroupDecoration>(x, y, z, t.source());
+      return create<ast::WorkgroupDecoration>(t.source(), x, y, z);
     });
   }
 
@@ -2947,7 +2947,7 @@
       if (stage.errored)
         return Failure::kErrored;
 
-      return create<ast::StageDecoration>(stage.value, stage.source);
+      return create<ast::StageDecoration>(stage.source, stage.value);
     });
   }
 
@@ -2962,7 +2962,7 @@
       if (val.errored)
         return Failure::kErrored;
 
-      return create<ast::StrideDecoration>(val.value, t.source());
+      return create<ast::StrideDecoration>(t.source(), val.value);
     });
   }
 
@@ -2973,7 +2973,7 @@
       if (val.errored)
         return Failure::kErrored;
 
-      return create<ast::StructMemberOffsetDecoration>(val.value, t.source());
+      return create<ast::StructMemberOffsetDecoration>(t.source(), val.value);
     });
   }
 
diff --git a/src/transform/emit_vertex_point_size.cc b/src/transform/emit_vertex_point_size.cc
index d8640d8..c80fab7 100644
--- a/src/transform/emit_vertex_point_size.cc
+++ b/src/transform/emit_vertex_point_size.cc
@@ -66,7 +66,7 @@
                                    ast::VariableDecorationList{
                                        // decorations
                                        mod->create<ast::BuiltinDecoration>(
-                                           ast::Builtin::kPointSize, Source{}),
+                                           Source{}, ast::Builtin::kPointSize),
                                    });
     mod->AddGlobalVariable(pointsize_var);
 
diff --git a/src/transform/emit_vertex_point_size_test.cc b/src/transform/emit_vertex_point_size_test.cc
index a089d3e..95e64ef 100644
--- a/src/transform/emit_vertex_point_size_test.cc
+++ b/src/transform/emit_vertex_point_size_test.cc
@@ -71,8 +71,8 @@
       auto* entry = create<ast::Function>(
           Source{}, entry_sym, "entry", ast::VariableList{}, ty.void_, block,
           ast::FunctionDecorationList{
-              create<ast::StageDecoration>(ast::PipelineStage::kVertex,
-                                           Source{}),
+              create<ast::StageDecoration>(Source{},
+                                           ast::PipelineStage::kVertex),
           });
       mod->AddFunction(entry);
 
@@ -141,8 +141,8 @@
           Source{}, entry_sym, "entry", ast::VariableList{}, ty.void_,
           create<ast::BlockStatement>(Source{}, ast::StatementList{}),
           ast::FunctionDecorationList{
-              create<ast::StageDecoration>(ast::PipelineStage::kVertex,
-                                           Source{}),
+              create<ast::StageDecoration>(Source{},
+                                           ast::PipelineStage::kVertex),
           }));
 
       auto b_sym = mod->RegisterSymbol("non_entry_b");
@@ -197,8 +197,8 @@
           Source{}, frag_sym, "fragment_entry", ast::VariableList{}, ty.void_,
           create<ast::BlockStatement>(Source{}, ast::StatementList{}),
           ast::FunctionDecorationList{
-              create<ast::StageDecoration>(ast::PipelineStage::kFragment,
-                                           Source{}),
+              create<ast::StageDecoration>(Source{},
+                                           ast::PipelineStage::kFragment),
           });
       mod->AddFunction(fragment_entry);
 
@@ -207,8 +207,8 @@
           Source{}, comp_sym, "compute_entry", ast::VariableList{}, ty.void_,
           create<ast::BlockStatement>(Source{}, ast::StatementList{}),
           ast::FunctionDecorationList{
-              create<ast::StageDecoration>(ast::PipelineStage::kCompute,
-                                           Source{}),
+              create<ast::StageDecoration>(Source{},
+                                           ast::PipelineStage::kCompute),
           });
       mod->AddFunction(compute_entry);
     }
diff --git a/src/transform/first_index_offset.cc b/src/transform/first_index_offset.cc
index 807a2c6..b89b94f 100644
--- a/src/transform/first_index_offset.cc
+++ b/src/transform/first_index_offset.cc
@@ -197,7 +197,7 @@
   if (has_vertex_index_) {
     ast::StructMemberDecorationList member_dec;
     member_dec.push_back(
-        mod->create<ast::StructMemberOffsetDecoration>(offset, Source{}));
+        mod->create<ast::StructMemberOffsetDecoration>(Source{}, offset));
     members.push_back(mod->create<ast::StructMember>(
         Source{}, kFirstVertexName, u32_type, std::move(member_dec)));
     vertex_index_offset_ = offset;
@@ -207,7 +207,7 @@
   if (has_instance_index_) {
     ast::StructMemberDecorationList member_dec;
     member_dec.push_back(
-        mod->create<ast::StructMemberOffsetDecoration>(offset, Source{}));
+        mod->create<ast::StructMemberOffsetDecoration>(Source{}, offset));
     members.push_back(mod->create<ast::StructMember>(
         Source{}, kFirstInstanceName, u32_type, std::move(member_dec)));
     instance_index_offset_ = offset;
@@ -229,8 +229,8 @@
       false,                        // is_const
       nullptr,                      // constructor
       ast::VariableDecorationList{
-          mod->create<ast::BindingDecoration>(binding_, Source{}),
-          mod->create<ast::SetDecoration>(set_, Source{}),
+          mod->create<ast::BindingDecoration>(Source{}, binding_),
+          mod->create<ast::SetDecoration>(Source{}, set_),
       });  // decorations
 
   mod->AddGlobalVariable(idx_var);
diff --git a/src/transform/first_index_offset_test.cc b/src/transform/first_index_offset_test.cc
index 2e8164a..0717bdd 100644
--- a/src/transform/first_index_offset_test.cc
+++ b/src/transform/first_index_offset_test.cc
@@ -54,7 +54,7 @@
   void AddBuiltinInput(const std::string& name, ast::Builtin builtin) {
     mod->AddGlobalVariable(
         Var(name, ast::StorageClass::kInput, ty.u32, nullptr,
-            {create<ast::BuiltinDecoration>(builtin, Source{})}));
+            {create<ast::BuiltinDecoration>(Source{}, builtin)}));
   }
 
   ast::Function* AddFunction(const std::string& name,
diff --git a/src/transform/vertex_pulling.cc b/src/transform/vertex_pulling.cc
index 74feab3..b1fa044 100644
--- a/src/transform/vertex_pulling.cc
+++ b/src/transform/vertex_pulling.cc
@@ -173,7 +173,7 @@
                                  ast::VariableDecorationList{
                                      // decorations
                                      out->create<ast::BuiltinDecoration>(
-                                         ast::Builtin::kVertexIdx, Source{}),
+                                         Source{}, ast::Builtin::kVertexIdx),
                                  });
 
   out->AddGlobalVariable(var);
@@ -220,7 +220,7 @@
                                  ast::VariableDecorationList{
                                      // decorations
                                      out->create<ast::BuiltinDecoration>(
-                                         ast::Builtin::kInstanceIdx, Source{}),
+                                         Source{}, ast::Builtin::kInstanceIdx),
                                  });
   out->AddGlobalVariable(var);
 }
@@ -258,14 +258,14 @@
   auto* internal_array_type = out->create<ast::type::Array>(
       GetU32Type(), 0,
       ast::ArrayDecorationList{
-          out->create<ast::StrideDecoration>(4u, Source{}),
+          out->create<ast::StrideDecoration>(Source{}, 4u),
       });
 
   // Creating the struct type
   ast::StructMemberList members;
   ast::StructMemberDecorationList member_dec;
   member_dec.push_back(
-      out->create<ast::StructMemberOffsetDecoration>(0u, Source{}));
+      out->create<ast::StructMemberOffsetDecoration>(Source{}, 0u));
 
   members.push_back(out->create<ast::StructMember>(
       Source{}, kStructBufferName, internal_array_type, std::move(member_dec)));
@@ -288,8 +288,8 @@
         nullptr,                            // constructor
         ast::VariableDecorationList{
             // decorations
-            out->create<ast::BindingDecoration>(i, Source{}),
-            out->create<ast::SetDecoration>(cfg.pulling_set, Source{}),
+            out->create<ast::BindingDecoration>(Source{}, i),
+            out->create<ast::SetDecoration>(Source{}, cfg.pulling_set),
         });
     out->AddGlobalVariable(var);
   }
diff --git a/src/transform/vertex_pulling_test.cc b/src/transform/vertex_pulling_test.cc
index 818853f..65e644b 100644
--- a/src/transform/vertex_pulling_test.cc
+++ b/src/transform/vertex_pulling_test.cc
@@ -51,7 +51,7 @@
         mod_->create<ast::type::Void>(),
         create<ast::BlockStatement>(Source{}, ast::StatementList{}),
         ast::FunctionDecorationList{create<ast::StageDecoration>(
-            ast::PipelineStage::kVertex, Source{})});
+            Source{}, ast::PipelineStage::kVertex)});
     mod()->AddFunction(func);
   }
 
@@ -79,7 +79,7 @@
         nullptr,                    // constructor
         ast::VariableDecorationList{
             // decorations
-            create<ast::LocationDecoration>(location, Source{}),
+            create<ast::LocationDecoration>(Source{}, location),
         });
 
     mod_->AddGlobalVariable(var);
@@ -139,7 +139,7 @@
       mod()->create<ast::type::Void>(),
       create<ast::BlockStatement>(Source{}, ast::StatementList{}),
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
   mod()->AddFunction(func);
 
@@ -437,7 +437,7 @@
       nullptr,                    // constructor
       ast::VariableDecorationList{
           // decorations
-          create<ast::BuiltinDecoration>(ast::Builtin::kVertexIdx, Source{}),
+          create<ast::BuiltinDecoration>(Source{}, ast::Builtin::kVertexIdx),
       }));
 
   mod()->AddGlobalVariable(create<ast::Variable>(
@@ -449,7 +449,7 @@
       nullptr,                    // constructor
       ast::VariableDecorationList{
           // decorations
-          create<ast::BuiltinDecoration>(ast::Builtin::kInstanceIdx, Source{}),
+          create<ast::BuiltinDecoration>(Source{}, ast::Builtin::kInstanceIdx),
       }));
 
   InitTransform(
diff --git a/src/type_determiner_test.cc b/src/type_determiner_test.cc
index 36eb700..c857083 100644
--- a/src/type_determiner_test.cc
+++ b/src/type_determiner_test.cc
@@ -5338,7 +5338,7 @@
   auto* ep_1 = create<ast::Function>(
       Source{}, mod->RegisterSymbol("ep_1"), "ep_1", params, &f32, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
 
   body = create<ast::BlockStatement>(
@@ -5356,7 +5356,7 @@
   auto* ep_2 = create<ast::Function>(
       Source{}, mod->RegisterSymbol("ep_2"), "ep_2", params, &f32, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
 
   mod->AddFunction(func_b);
diff --git a/src/validator/validator_function_test.cc b/src/validator/validator_function_test.cc
index 561caf5..94db436 100644
--- a/src/validator/validator_function_test.cc
+++ b/src/validator/validator_function_test.cc
@@ -60,7 +60,7 @@
       Source{Source::Location{12, 34}}, mod()->RegisterSymbol("func"), "func",
       params, &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(func);
 
@@ -79,7 +79,7 @@
       params, &void_type,
       create<ast::BlockStatement>(Source{}, ast::StatementList{}),
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(func);
 
@@ -149,7 +149,7 @@
   auto* func = create<ast::Function>(
       Source{}, mod()->RegisterSymbol("func"), "func", params, &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(func);
 
@@ -329,7 +329,7 @@
       Source{Source::Location{12, 34}}, mod()->RegisterSymbol("vtx_main"),
       "vtx_main", params, &i32, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
 
   mod()->AddFunction(func);
@@ -361,7 +361,7 @@
       Source{Source::Location{12, 34}}, mod()->RegisterSymbol("vtx_func"),
       "vtx_func", params, &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
 
   mod()->AddFunction(func);
@@ -386,8 +386,8 @@
       Source{Source::Location{12, 34}}, mod()->RegisterSymbol("main"), "main",
       params, &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod()->AddFunction(func);
@@ -411,7 +411,7 @@
       Source{}, mod()->RegisterSymbol("vtx_func"), "vtx_func", params,
       &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(func);
 
diff --git a/src/validator/validator_test.cc b/src/validator/validator_test.cc
index 876fb83..e617607 100644
--- a/src/validator/validator_test.cc
+++ b/src/validator/validator_test.cc
@@ -398,7 +398,7 @@
       Source{}, mod()->RegisterSymbol("my_func"), "my_func", params, &void_type,
       body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(func);
 
@@ -848,7 +848,7 @@
       Source{}, mod()->RegisterSymbol("func1"), "func1", params1, &void_type,
       body1,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
 
   mod()->AddFunction(func0);
diff --git a/src/validator/validator_type_test.cc b/src/validator/validator_type_test.cc
index 4950b33..46aaa96 100644
--- a/src/validator/validator_type_test.cc
+++ b/src/validator/validator_type_test.cc
@@ -211,7 +211,7 @@
   auto* func = create<ast::Function>(
       Source{}, mod()->RegisterSymbol("func"), "func", params, &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
   mod()->AddFunction(func);
 
diff --git a/src/writer/hlsl/generator_impl_alias_type_test.cc b/src/writer/hlsl/generator_impl_alias_type_test.cc
index 9842bed..a0c53a7 100644
--- a/src/writer/hlsl/generator_impl_alias_type_test.cc
+++ b/src/writer/hlsl/generator_impl_alias_type_test.cc
@@ -58,7 +58,7 @@
           create<ast::StructMember>(
               Source{}, "b", &i32,
               ast::StructMemberDecorationList{
-                  create<ast::StructMemberOffsetDecoration>(4, Source{})}),
+                  create<ast::StructMemberOffsetDecoration>(Source{}, 4)}),
       },
       ast::StructDecorationList{});
 
diff --git a/src/writer/hlsl/generator_impl_function_entry_point_data_test.cc b/src/writer/hlsl/generator_impl_function_entry_point_data_test.cc
index d869cc0..7a8236b 100644
--- a/src/writer/hlsl/generator_impl_function_entry_point_data_test.cc
+++ b/src/writer/hlsl/generator_impl_function_entry_point_data_test.cc
@@ -60,7 +60,7 @@
                             nullptr,                    // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(0, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 0),
                             });
 
   auto* bar_var =
@@ -72,7 +72,7 @@
                             nullptr,                    // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(1, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(foo_var);
@@ -100,7 +100,7 @@
   auto* func = create<ast::Function>(
       Source{}, mod.RegisterSymbol("vtx_main"), "vtx_main", params, &f32, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
 
   mod.AddFunction(func);
@@ -139,7 +139,7 @@
                             nullptr,                     // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(0, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 0),
                             });
 
   auto* bar_var =
@@ -151,7 +151,7 @@
                             nullptr,                     // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(1, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(foo_var);
@@ -180,7 +180,7 @@
   auto* func = create<ast::Function>(
       Source{}, mod.RegisterSymbol("vtx_main"), "vtx_main", params, &f32, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
 
   mod.AddFunction(func);
@@ -219,7 +219,7 @@
                             nullptr,                    // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(0, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 0),
                             });
 
   auto* bar_var =
@@ -231,7 +231,7 @@
                             nullptr,                    // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(1, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(foo_var);
@@ -260,7 +260,7 @@
   auto* func = create<ast::Function>(
       Source{}, mod.RegisterSymbol("main"), "main", params, &f32, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
 
   mod.AddFunction(func);
@@ -299,7 +299,7 @@
                             nullptr,                     // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(0, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 0),
                             });
 
   auto* bar_var =
@@ -311,7 +311,7 @@
                             nullptr,                     // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(1, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(foo_var);
@@ -339,7 +339,7 @@
   auto* func = create<ast::Function>(
       Source{}, mod.RegisterSymbol("main"), "main", params, &f32, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func);
@@ -375,7 +375,7 @@
                             nullptr,                    // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(0, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 0),
                             });
 
   auto* bar_var =
@@ -387,7 +387,7 @@
                             nullptr,                    // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(1, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(foo_var);
@@ -415,7 +415,7 @@
   auto* func = create<ast::Function>(
       Source{}, mod.RegisterSymbol("main"), "main", params, &f32, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kCompute),
       });
 
   mod.AddFunction(func);
@@ -446,7 +446,7 @@
                             nullptr,                     // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(0, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 0),
                             });
 
   auto* bar_var =
@@ -458,7 +458,7 @@
                             nullptr,                     // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(1, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(foo_var);
@@ -486,7 +486,7 @@
   auto* func = create<ast::Function>(
       Source{}, mod.RegisterSymbol("main"), "main", params, &f32, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kCompute),
       });
 
   mod.AddFunction(func);
@@ -524,7 +524,7 @@
       nullptr,                    // constructor
       ast::VariableDecorationList{
           // decorations
-          create<ast::BuiltinDecoration>(ast::Builtin::kFragCoord, Source{}),
+          create<ast::BuiltinDecoration>(Source{}, ast::Builtin::kFragCoord),
       });
 
   auto* depth_var = create<ast::Variable>(
@@ -536,7 +536,7 @@
       nullptr,                     // constructor
       ast::VariableDecorationList{
           // decorations
-          create<ast::BuiltinDecoration>(ast::Builtin::kFragDepth, Source{}),
+          create<ast::BuiltinDecoration>(Source{}, ast::Builtin::kFragDepth),
       });
 
   td.RegisterVariableForTesting(coord_var);
@@ -562,7 +562,7 @@
   auto* func = create<ast::Function>(
       Source{}, mod.RegisterSymbol("main"), "main", params, &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func);
diff --git a/src/writer/hlsl/generator_impl_function_test.cc b/src/writer/hlsl/generator_impl_function_test.cc
index 5668225..60499bf 100644
--- a/src/writer/hlsl/generator_impl_function_test.cc
+++ b/src/writer/hlsl/generator_impl_function_test.cc
@@ -153,7 +153,7 @@
                             nullptr,                    // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(0, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 0),
                             });
 
   auto* bar_var =
@@ -165,7 +165,7 @@
                             nullptr,                     // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(1, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(foo_var);
@@ -189,7 +189,7 @@
       Source{}, mod.RegisterSymbol("frag_main"), "frag_main", params,
       &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func);
@@ -228,7 +228,7 @@
       nullptr,                    // constructor
       ast::VariableDecorationList{
           // decorations
-          create<ast::BuiltinDecoration>(ast::Builtin::kFragCoord, Source{}),
+          create<ast::BuiltinDecoration>(Source{}, ast::Builtin::kFragCoord),
       });
 
   auto* depth_var = create<ast::Variable>(
@@ -240,7 +240,7 @@
       nullptr,                     // constructor
       ast::VariableDecorationList{
           // decorations
-          create<ast::BuiltinDecoration>(ast::Builtin::kFragDepth, Source{}),
+          create<ast::BuiltinDecoration>(Source{}, ast::Builtin::kFragDepth),
       });
 
   td.RegisterVariableForTesting(coord_var);
@@ -268,7 +268,7 @@
       Source{}, mod.RegisterSymbol("frag_main"), "frag_main", params,
       &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func);
@@ -307,8 +307,8 @@
                             nullptr,                      // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::BindingDecoration>(0, Source{}),
-                                create<ast::SetDecoration>(1, Source{}),
+                                create<ast::BindingDecoration>(Source{}, 0),
+                                create<ast::SetDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(coord_var);
@@ -338,7 +338,7 @@
       Source{}, mod.RegisterSymbol("frag_main"), "frag_main", params,
       &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func);
@@ -381,8 +381,8 @@
                             nullptr,                      // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::BindingDecoration>(0, Source{}),
-                                create<ast::SetDecoration>(1, Source{}),
+                                create<ast::BindingDecoration>(Source{}, 0),
+                                create<ast::SetDecoration>(Source{}, 1),
                             });
 
   mod.AddConstructedType(&s);
@@ -418,7 +418,7 @@
       Source{}, mod.RegisterSymbol("frag_main"), "frag_main", params,
       &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func);
@@ -447,11 +447,11 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "a", &i32, a_deco));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, b_deco));
 
   auto* str =
@@ -469,8 +469,8 @@
                             nullptr,                            // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::BindingDecoration>(0, Source{}),
-                                create<ast::SetDecoration>(1, Source{}),
+                                create<ast::BindingDecoration>(Source{}, 0),
+                                create<ast::SetDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(coord_var);
@@ -500,7 +500,7 @@
       Source{}, mod.RegisterSymbol("frag_main"), "frag_main", params,
       &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func);
@@ -525,11 +525,11 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "a", &i32, a_deco));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, b_deco));
 
   auto* str =
@@ -547,8 +547,8 @@
                             nullptr,                            // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::BindingDecoration>(0, Source{}),
-                                create<ast::SetDecoration>(1, Source{}),
+                                create<ast::BindingDecoration>(Source{}, 0),
+                                create<ast::SetDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(coord_var);
@@ -578,7 +578,7 @@
       Source{}, mod.RegisterSymbol("frag_main"), "frag_main", params,
       &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func);
@@ -603,11 +603,11 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "a", &i32, a_deco));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, b_deco));
 
   auto* str =
@@ -625,8 +625,8 @@
                             nullptr,                            // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::BindingDecoration>(0, Source{}),
-                                create<ast::SetDecoration>(1, Source{}),
+                                create<ast::BindingDecoration>(Source{}, 0),
+                                create<ast::SetDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(coord_var);
@@ -653,7 +653,7 @@
       Source{}, mod.RegisterSymbol("frag_main"), "frag_main",
       ast::VariableList{}, &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func);
@@ -685,7 +685,7 @@
                             nullptr,                    // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(0, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 0),
                             });
 
   auto* bar_var =
@@ -697,7 +697,7 @@
                             nullptr,                     // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(1, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 1),
                             });
 
   auto* val_var =
@@ -709,7 +709,7 @@
                             nullptr,                     // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(0, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 0),
                             });
 
   td.RegisterVariableForTesting(foo_var);
@@ -776,7 +776,7 @@
   auto* func_1 = create<ast::Function>(
       Source{}, mod.RegisterSymbol("ep_1"), "ep_1", params, &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func_1);
@@ -822,7 +822,7 @@
       nullptr,                     // constructor
       ast::VariableDecorationList{
           // decorations
-          create<ast::BuiltinDecoration>(ast::Builtin::kFragDepth, Source{}),
+          create<ast::BuiltinDecoration>(Source{}, ast::Builtin::kFragDepth),
       });
 
   td.RegisterVariableForTesting(depth_var);
@@ -873,7 +873,7 @@
   auto* func_1 = create<ast::Function>(
       Source{}, mod.RegisterSymbol("ep_1"), "ep_1", params, &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func_1);
@@ -913,7 +913,7 @@
       nullptr,                    // constructor
       ast::VariableDecorationList{
           // decorations
-          create<ast::BuiltinDecoration>(ast::Builtin::kFragCoord, Source{}),
+          create<ast::BuiltinDecoration>(Source{}, ast::Builtin::kFragCoord),
       });
 
   auto* depth_var = create<ast::Variable>(
@@ -925,7 +925,7 @@
       nullptr,                     // constructor
       ast::VariableDecorationList{
           // decorations
-          create<ast::BuiltinDecoration>(ast::Builtin::kFragDepth, Source{}),
+          create<ast::BuiltinDecoration>(Source{}, ast::Builtin::kFragDepth),
       });
 
   td.RegisterVariableForTesting(coord_var);
@@ -988,7 +988,7 @@
   auto* func_1 = create<ast::Function>(
       Source{}, mod.RegisterSymbol("ep_1"), "ep_1", params, &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func_1);
@@ -1032,8 +1032,8 @@
                             nullptr,                      // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::BindingDecoration>(0, Source{}),
-                                create<ast::SetDecoration>(1, Source{}),
+                                create<ast::BindingDecoration>(Source{}, 0),
+                                create<ast::SetDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(coord_var);
@@ -1095,7 +1095,7 @@
       Source{}, mod.RegisterSymbol("frag_main"), "frag_main", params,
       &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func);
@@ -1133,8 +1133,8 @@
                             nullptr,                            // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::BindingDecoration>(0, Source{}),
-                                create<ast::SetDecoration>(1, Source{}),
+                                create<ast::BindingDecoration>(Source{}, 0),
+                                create<ast::SetDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(coord_var);
@@ -1196,7 +1196,7 @@
       Source{}, mod.RegisterSymbol("frag_main"), "frag_main", params,
       &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func);
@@ -1232,7 +1232,7 @@
                             nullptr,                     // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(1, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(bar_var);
@@ -1268,7 +1268,7 @@
   auto* func_1 = create<ast::Function>(
       Source{}, mod.RegisterSymbol("ep_1"), "ep_1", params, &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func_1);
@@ -1300,7 +1300,7 @@
       ast::VariableList{}, &void_type,
       create<ast::BlockStatement>(Source{}, ast::StatementList{}),
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func);
@@ -1325,7 +1325,7 @@
   auto* func = create<ast::Function>(
       Source{}, mod.RegisterSymbol("main"), "main", params, &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kCompute),
       });
 
   mod.AddFunction(func);
@@ -1353,8 +1353,8 @@
   auto* func = create<ast::Function>(
       Source{}, mod.RegisterSymbol("main"), "main", params, &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{}),
-          create<ast::WorkgroupDecoration>(2u, 4u, 6u, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kCompute),
+          create<ast::WorkgroupDecoration>(Source{}, 2u, 4u, 6u),
       });
 
   mod.AddFunction(func);
@@ -1427,7 +1427,7 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "d", &f32, a_deco));
 
   ast::StructDecorationList s_decos;
@@ -1447,8 +1447,8 @@
                             nullptr,                            // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::BindingDecoration>(0, Source{}),
-                                create<ast::SetDecoration>(0, Source{}),
+                                create<ast::BindingDecoration>(Source{}, 0),
+                                create<ast::SetDecoration>(Source{}, 0),
                             });
 
   mod.AddConstructedType(&s);
@@ -1480,8 +1480,8 @@
     auto* func = create<ast::Function>(
         Source{}, mod.RegisterSymbol("a"), "a", params, &void_type, body,
         ast::FunctionDecorationList{
-            create<ast::StageDecoration>(ast::PipelineStage::kCompute,
-                                         Source{}),
+            create<ast::StageDecoration>(Source{},
+                                         ast::PipelineStage::kCompute),
         });
 
     mod.AddFunction(func);
@@ -1512,8 +1512,8 @@
     auto* func = create<ast::Function>(
         Source{}, mod.RegisterSymbol("b"), "b", params, &void_type, body,
         ast::FunctionDecorationList{
-            create<ast::StageDecoration>(ast::PipelineStage::kCompute,
-                                         Source{}),
+            create<ast::StageDecoration>(Source{},
+                                         ast::PipelineStage::kCompute),
         });
 
     mod.AddFunction(func);
diff --git a/src/writer/hlsl/generator_impl_member_accessor_test.cc b/src/writer/hlsl/generator_impl_member_accessor_test.cc
index 1f9d76d..b8d2a8e 100644
--- a/src/writer/hlsl/generator_impl_member_accessor_test.cc
+++ b/src/writer/hlsl/generator_impl_member_accessor_test.cc
@@ -50,7 +50,7 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList deco;
-  deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "mem", &f32, deco));
 
   auto* strct =
@@ -98,11 +98,11 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "a", &i32, a_deco));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, b_deco));
 
   auto* str =
@@ -152,11 +152,11 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "a", &i32, a_deco));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, b_deco));
 
   auto* str =
@@ -213,11 +213,11 @@
           create<ast::StructMember>(
               Source{}, "z", &i32,
               ast::StructMemberDecorationList{
-                  create<ast::StructMemberOffsetDecoration>(0, Source{})}),
+                  create<ast::StructMemberOffsetDecoration>(Source{}, 0)}),
           create<ast::StructMember>(
               Source{}, "a", &mat,
               ast::StructMemberDecorationList{
-                  create<ast::StructMemberOffsetDecoration>(4, Source{})}),
+                  create<ast::StructMemberOffsetDecoration>(Source{}, 4)}),
       },
       ast::StructDecorationList{});
 
@@ -288,11 +288,11 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "z", &i32, a_deco));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "a", &mat, b_deco));
 
   auto* str =
@@ -353,11 +353,11 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "z", &i32, a_deco));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "a", &mat, b_deco));
 
   auto* str =
@@ -414,11 +414,11 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "z", &i32, a_deco));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "a", &mat, b_deco));
 
   auto* str =
@@ -471,7 +471,7 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList deco;
-  deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "a", &mat, deco));
 
   auto* str =
@@ -524,11 +524,11 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "z", &i32, a_deco));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(16, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 16));
   members.push_back(create<ast::StructMember>(Source{}, "a", &mat, b_deco));
 
   auto* str =
@@ -584,12 +584,12 @@
   ast::type::I32 i32;
   ast::type::Array ary(&i32, 5,
                        ast::ArrayDecorationList{
-                           create<ast::StrideDecoration>(4, Source{}),
+                           create<ast::StrideDecoration>(Source{}, 4),
                        });
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "a", &ary, a_deco));
 
   auto* str =
@@ -641,12 +641,12 @@
   ast::type::I32 i32;
   ast::type::Array ary(&i32, 5,
                        ast::ArrayDecorationList{
-                           create<ast::StrideDecoration>(4, Source{}),
+                           create<ast::StrideDecoration>(Source{}, 4),
                        });
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "a", &ary, a_deco));
 
   auto* str =
@@ -709,11 +709,11 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "a", &i32, a_deco));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, b_deco));
 
   auto* str =
@@ -766,12 +766,12 @@
   ast::type::I32 i32;
   ast::type::Array ary(&i32, 5,
                        ast::ArrayDecorationList{
-                           create<ast::StrideDecoration>(4, Source{}),
+                           create<ast::StrideDecoration>(Source{}, 4),
                        });
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "a", &ary, a_deco));
 
   auto* str =
@@ -830,11 +830,11 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "a", &i32, a_deco));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, b_deco));
 
   auto* str =
@@ -891,11 +891,11 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "a", &ivec3, a_deco));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(16, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 16));
   members.push_back(create<ast::StructMember>(Source{}, "b", &fvec3, b_deco));
 
   auto* str =
@@ -948,11 +948,11 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "a", &ivec3, a_deco));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(16, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 16));
   members.push_back(create<ast::StructMember>(Source{}, "b", &fvec3, b_deco));
 
   auto* str =
@@ -1026,11 +1026,11 @@
           create<ast::StructMember>(
               Source{}, "a", &ivec3,
               ast::StructMemberDecorationList{
-                  create<ast::StructMemberOffsetDecoration>(0, Source{})}),
+                  create<ast::StructMemberOffsetDecoration>(Source{}, 0)}),
           create<ast::StructMember>(
               Source{}, "b", &fvec3,
               ast::StructMemberDecorationList{
-                  create<ast::StructMemberOffsetDecoration>(16, Source{})}),
+                  create<ast::StructMemberOffsetDecoration>(Source{}, 16)}),
       },
       ast::StructDecorationList{});
 
@@ -1038,7 +1038,7 @@
 
   ast::type::Array ary(&data, 4,
                        ast::ArrayDecorationList{
-                           create<ast::StrideDecoration>(32, Source{}),
+                           create<ast::StrideDecoration>(Source{}, 32),
                        });
 
   auto* pre_str = create<ast::Struct>(
@@ -1047,7 +1047,7 @@
           create<ast::StructMember>(
               Source{}, "c", &ary,
               ast::StructMemberDecorationList{
-                  create<ast::StructMemberOffsetDecoration>(0, Source{})}),
+                  create<ast::StructMemberOffsetDecoration>(Source{}, 0)}),
       },
       ast::StructDecorationList{});
 
@@ -1117,11 +1117,11 @@
           create<ast::StructMember>(
               Source{}, "a", &ivec3,
               ast::StructMemberDecorationList{
-                  create<ast::StructMemberOffsetDecoration>(0, Source{})}),
+                  create<ast::StructMemberOffsetDecoration>(Source{}, 0)}),
           create<ast::StructMember>(
               Source{}, "b", &fvec3,
               ast::StructMemberDecorationList{
-                  create<ast::StructMemberOffsetDecoration>(16, Source{})}),
+                  create<ast::StructMemberOffsetDecoration>(Source{}, 16)}),
       },
       ast::StructDecorationList{});
 
@@ -1129,14 +1129,14 @@
 
   ast::type::Array ary(
       &data, 4,
-      ast::ArrayDecorationList{create<ast::StrideDecoration>(32, Source{})});
+      ast::ArrayDecorationList{create<ast::StrideDecoration>(Source{}, 32)});
 
   auto* pre_str = create<ast::Struct>(
       Source{},
       ast::StructMemberList{create<ast::StructMember>(
           Source{}, "c", &ary,
           ast::StructMemberDecorationList{
-              create<ast::StructMemberOffsetDecoration>(0, Source{})})},
+              create<ast::StructMemberOffsetDecoration>(Source{}, 0)})},
       ast::StructDecorationList{});
 
   ast::type::Struct pre_struct(mod.RegisterSymbol("Pre"), "Pre", pre_str);
@@ -1207,11 +1207,11 @@
           create<ast::StructMember>(
               Source{}, "a", &ivec3,
               ast::StructMemberDecorationList{
-                  create<ast::StructMemberOffsetDecoration>(0, Source{})}),
+                  create<ast::StructMemberOffsetDecoration>(Source{}, 0)}),
           create<ast::StructMember>(
               Source{}, "b", &fvec3,
               ast::StructMemberDecorationList{
-                  create<ast::StructMemberOffsetDecoration>(16, Source{})}),
+                  create<ast::StructMemberOffsetDecoration>(Source{}, 16)}),
       },
       ast::StructDecorationList{});
 
@@ -1219,7 +1219,7 @@
 
   ast::type::Array ary(&data, 4,
                        ast::ArrayDecorationList{
-                           create<ast::StrideDecoration>(32, Source{}),
+                           create<ast::StrideDecoration>(Source{}, 32),
                        });
 
   auto* pre_str = create<ast::Struct>(
@@ -1227,7 +1227,7 @@
       ast::StructMemberList{create<ast::StructMember>(
           Source{}, "c", &ary,
           ast::StructMemberDecorationList{
-              create<ast::StructMemberOffsetDecoration>(0, Source{})})},
+              create<ast::StructMemberOffsetDecoration>(Source{}, 0)})},
       ast::StructDecorationList{});
 
   ast::type::Struct pre_struct(mod.RegisterSymbol("Pre"), "Pre", pre_str);
@@ -1297,11 +1297,11 @@
           create<ast::StructMember>(
               Source{}, "a", &ivec3,
               ast::StructMemberDecorationList{
-                  create<ast::StructMemberOffsetDecoration>(0, Source{})}),
+                  create<ast::StructMemberOffsetDecoration>(Source{}, 0)}),
           create<ast::StructMember>(
               Source{}, "b", &fvec3,
               ast::StructMemberDecorationList{
-                  create<ast::StructMemberOffsetDecoration>(16, Source{})}),
+                  create<ast::StructMemberOffsetDecoration>(Source{}, 16)}),
       },
       ast::StructDecorationList{});
 
@@ -1309,7 +1309,7 @@
 
   ast::type::Array ary(&data, 4,
                        ast::ArrayDecorationList{
-                           create<ast::StrideDecoration>(32, Source{}),
+                           create<ast::StrideDecoration>(Source{}, 32),
                        });
 
   auto* pre_str = create<ast::Struct>(
@@ -1317,7 +1317,7 @@
       ast::StructMemberList{create<ast::StructMember>(
           Source{}, "c", &ary,
           ast::StructMemberDecorationList{
-              create<ast::StructMemberOffsetDecoration>(0, Source{})})},
+              create<ast::StructMemberOffsetDecoration>(Source{}, 0)})},
       ast::StructDecorationList{});
 
   ast::type::Struct pre_struct(mod.RegisterSymbol("Pre"), "Pre", pre_str);
@@ -1387,11 +1387,11 @@
           create<ast::StructMember>(
               Source{}, "a", &ivec3,
               ast::StructMemberDecorationList{
-                  create<ast::StructMemberOffsetDecoration>(0, Source{})}),
+                  create<ast::StructMemberOffsetDecoration>(Source{}, 0)}),
           create<ast::StructMember>(
               Source{}, "b", &fvec3,
               ast::StructMemberDecorationList{
-                  create<ast::StructMemberOffsetDecoration>(16, Source{})}),
+                  create<ast::StructMemberOffsetDecoration>(Source{}, 16)}),
       },
       ast::StructDecorationList{});
 
@@ -1399,7 +1399,7 @@
 
   ast::type::Array ary(&data, 4,
                        ast::ArrayDecorationList{
-                           create<ast::StrideDecoration>(32, Source{}),
+                           create<ast::StrideDecoration>(Source{}, 32),
                        });
 
   auto* pre_str = create<ast::Struct>(
@@ -1407,7 +1407,7 @@
       ast::StructMemberList{create<ast::StructMember>(
           Source{}, "c", &ary,
           ast::StructMemberDecorationList{
-              create<ast::StructMemberOffsetDecoration>(0, Source{})})},
+              create<ast::StructMemberOffsetDecoration>(Source{}, 0)})},
       ast::StructDecorationList{});
 
   ast::type::Struct pre_struct(mod.RegisterSymbol("Pre"), "Pre", pre_str);
@@ -1487,11 +1487,11 @@
           create<ast::StructMember>(
               Source{}, "a", &ivec3,
               ast::StructMemberDecorationList{
-                  create<ast::StructMemberOffsetDecoration>(0, Source{})}),
+                  create<ast::StructMemberOffsetDecoration>(Source{}, 0)}),
           create<ast::StructMember>(
               Source{}, "b", &fvec3,
               ast::StructMemberDecorationList{
-                  create<ast::StructMemberOffsetDecoration>(16, Source{})}),
+                  create<ast::StructMemberOffsetDecoration>(Source{}, 16)}),
       },
       ast::StructDecorationList{});
 
@@ -1499,7 +1499,7 @@
 
   ast::type::Array ary(&data, 4,
                        ast::ArrayDecorationList{
-                           create<ast::StrideDecoration>(32, Source{}),
+                           create<ast::StrideDecoration>(Source{}, 32),
                        });
 
   auto* pre_str = create<ast::Struct>(
@@ -1507,7 +1507,7 @@
       ast::StructMemberList{create<ast::StructMember>(
           Source{}, "c", &ary,
           ast::StructMemberDecorationList{
-              create<ast::StructMemberOffsetDecoration>(0, Source{})})},
+              create<ast::StructMemberOffsetDecoration>(Source{}, 0)})},
       ast::StructDecorationList{});
 
   ast::type::Struct pre_struct(mod.RegisterSymbol("Pre"), "Pre", pre_str);
diff --git a/src/writer/hlsl/generator_impl_module_constant_test.cc b/src/writer/hlsl/generator_impl_module_constant_test.cc
index bb2287b..401c6df 100644
--- a/src/writer/hlsl/generator_impl_module_constant_test.cc
+++ b/src/writer/hlsl/generator_impl_module_constant_test.cc
@@ -72,7 +72,7 @@
           create<ast::FloatLiteral>(Source{}, &f32, 3.0f)),  // constructor
       ast::VariableDecorationList{
           // decorations
-          create<ast::ConstantIdDecoration>(23, Source{}),
+          create<ast::ConstantIdDecoration>(Source{}, 23),
       });
 
   ASSERT_TRUE(gen.EmitProgramConstVariable(out, var)) << gen.error();
@@ -96,7 +96,7 @@
                             nullptr,                   // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::ConstantIdDecoration>(23, Source{}),
+                                create<ast::ConstantIdDecoration>(Source{}, 23),
                             });
 
   ASSERT_TRUE(gen.EmitProgramConstVariable(out, var)) << gen.error();
diff --git a/src/writer/hlsl/generator_impl_type_test.cc b/src/writer/hlsl/generator_impl_type_test.cc
index 9ad6beb..fdd19c8 100644
--- a/src/writer/hlsl/generator_impl_type_test.cc
+++ b/src/writer/hlsl/generator_impl_type_test.cc
@@ -178,7 +178,7 @@
       Source{}, "a", &i32, ast::StructMemberDecorationList{}));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, b_deco));
 
   auto* str =
@@ -203,7 +203,7 @@
       Source{}, "a", &i32, ast::StructMemberDecorationList{}));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, b_deco));
 
   auto* str =
@@ -220,15 +220,15 @@
   ast::type::F32 f32;
 
   ast::StructMemberDecorationList decos;
-  decos.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  decos.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
 
   ast::StructMemberList members;
   members.push_back(create<ast::StructMember>(Source{}, "a", &i32, decos));
 
-  decos.push_back(create<ast::StructMemberOffsetDecoration>(32, Source{}));
+  decos.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 32));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, decos));
 
-  decos.push_back(create<ast::StructMemberOffsetDecoration>(128, Source{}));
+  decos.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 128));
   members.push_back(create<ast::StructMember>(Source{}, "c", &f32, decos));
 
   auto* str =
@@ -281,7 +281,7 @@
       Source{}, "a", &i32, ast::StructMemberDecorationList{}));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, b_deco));
 
   ast::StructDecorationList decos;
diff --git a/src/writer/msl/generator_impl_alias_type_test.cc b/src/writer/msl/generator_impl_alias_type_test.cc
index 1e88617..1726f1c 100644
--- a/src/writer/msl/generator_impl_alias_type_test.cc
+++ b/src/writer/msl/generator_impl_alias_type_test.cc
@@ -58,7 +58,7 @@
       Source{}, "a", &f32, ast::StructMemberDecorationList{}));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &i32, b_deco));
 
   auto* str =
@@ -83,7 +83,7 @@
       Source{}, "a", &f32, ast::StructMemberDecorationList{}));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &i32, b_deco));
 
   auto* str =
diff --git a/src/writer/msl/generator_impl_function_entry_point_data_test.cc b/src/writer/msl/generator_impl_function_entry_point_data_test.cc
index 49dd561..d5b4535 100644
--- a/src/writer/msl/generator_impl_function_entry_point_data_test.cc
+++ b/src/writer/msl/generator_impl_function_entry_point_data_test.cc
@@ -59,7 +59,7 @@
                             nullptr,                    // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(0, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 0),
                             });
 
   auto* bar_var =
@@ -71,7 +71,7 @@
                             nullptr,                    // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(1, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(foo_var);
@@ -99,7 +99,7 @@
   auto* func = create<ast::Function>(
       Source{}, mod.RegisterSymbol("vtx_main"), "vtx_main", params, &f32, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
 
   mod.AddFunction(func);
@@ -136,7 +136,7 @@
                             nullptr,                     // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(0, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 0),
                             });
 
   auto* bar_var =
@@ -148,7 +148,7 @@
                             nullptr,                     // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(1, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(foo_var);
@@ -176,7 +176,7 @@
   auto* func = create<ast::Function>(
       Source{}, mod.RegisterSymbol("vtx_main"), "vtx_main", params, &f32, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
 
   mod.AddFunction(func);
@@ -213,7 +213,7 @@
                             nullptr,                    // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(0, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 0),
                             });
 
   auto* bar_var =
@@ -225,7 +225,7 @@
                             nullptr,                    // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(1, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(foo_var);
@@ -253,7 +253,7 @@
   auto* func = create<ast::Function>(
       Source{}, mod.RegisterSymbol("main"), "main", params, &f32, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func);
@@ -290,7 +290,7 @@
                             nullptr,                     // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(0, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 0),
                             });
 
   auto* bar_var =
@@ -302,7 +302,7 @@
                             nullptr,                     // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(1, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(foo_var);
@@ -330,7 +330,7 @@
   auto* func = create<ast::Function>(
       Source{}, mod.RegisterSymbol("main"), "main", params, &f32, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func);
@@ -364,7 +364,7 @@
                             nullptr,                    // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(0, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 0),
                             });
 
   auto* bar_var =
@@ -376,7 +376,7 @@
                             nullptr,                    // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(1, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(foo_var);
@@ -404,7 +404,7 @@
   auto* func = create<ast::Function>(
       Source{}, mod.RegisterSymbol("main"), "main", params, &f32, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kCompute),
       });
 
   mod.AddFunction(func);
@@ -433,7 +433,7 @@
                             nullptr,                     // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(0, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 0),
                             });
 
   auto* bar_var =
@@ -445,7 +445,7 @@
                             nullptr,                     // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(1, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(foo_var);
@@ -473,7 +473,7 @@
   auto* func = create<ast::Function>(
       Source{}, mod.RegisterSymbol("main"), "main", params, &f32, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kCompute),
       });
 
   mod.AddFunction(func);
@@ -508,7 +508,7 @@
       nullptr,                    // constructor
       ast::VariableDecorationList{
           // decorations
-          create<ast::BuiltinDecoration>(ast::Builtin::kFragCoord, Source{}),
+          create<ast::BuiltinDecoration>(Source{}, ast::Builtin::kFragCoord),
       });
 
   auto* depth_var = create<ast::Variable>(
@@ -520,7 +520,7 @@
       nullptr,                     // constructor
       ast::VariableDecorationList{
           // decorations
-          create<ast::BuiltinDecoration>(ast::Builtin::kFragDepth, Source{}),
+          create<ast::BuiltinDecoration>(Source{}, ast::Builtin::kFragDepth),
       });
 
   td.RegisterVariableForTesting(coord_var);
@@ -547,7 +547,7 @@
   auto* func = create<ast::Function>(
       Source{}, mod.RegisterSymbol("main"), "main", params, &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func);
diff --git a/src/writer/msl/generator_impl_function_test.cc b/src/writer/msl/generator_impl_function_test.cc
index c328b9e..3b003c9 100644
--- a/src/writer/msl/generator_impl_function_test.cc
+++ b/src/writer/msl/generator_impl_function_test.cc
@@ -164,7 +164,7 @@
                             nullptr,                    // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(0, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 0),
                             });
 
   auto* bar_var =
@@ -176,7 +176,7 @@
                             nullptr,                     // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(1, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(foo_var);
@@ -200,7 +200,7 @@
       Source{}, mod.RegisterSymbol("frag_main"), "frag_main", params,
       &void_type, body,
       ast::FunctionDecorationList{create<ast::StageDecoration>(
-          ast::PipelineStage::kFragment, Source{})});
+          Source{}, ast::PipelineStage::kFragment)});
 
   mod.AddFunction(func);
 
@@ -241,7 +241,7 @@
       nullptr,                    // constructor
       ast::VariableDecorationList{
           // decorations
-          create<ast::BuiltinDecoration>(ast::Builtin::kFragCoord, Source{}),
+          create<ast::BuiltinDecoration>(Source{}, ast::Builtin::kFragCoord),
       });
 
   auto* depth_var = create<ast::Variable>(
@@ -253,7 +253,7 @@
       nullptr,                     // constructor
       ast::VariableDecorationList{
           // decorations
-          create<ast::BuiltinDecoration>(ast::Builtin::kFragDepth, Source{}),
+          create<ast::BuiltinDecoration>(Source{}, ast::Builtin::kFragDepth),
       });
 
   td.RegisterVariableForTesting(coord_var);
@@ -281,7 +281,7 @@
       Source{}, mod.RegisterSymbol("frag_main"), "frag_main", params,
       &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func);
@@ -318,8 +318,8 @@
                             nullptr,                      // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::BindingDecoration>(0, Source{}),
-                                create<ast::SetDecoration>(1, Source{}),
+                                create<ast::BindingDecoration>(Source{}, 0),
+                                create<ast::SetDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(coord_var);
@@ -350,7 +350,7 @@
       Source{}, mod.RegisterSymbol("frag_main"), "frag_main", params,
       &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func);
@@ -376,11 +376,11 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "a", &i32, a_deco));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, b_deco));
 
   auto* str =
@@ -400,8 +400,8 @@
                             nullptr,                            // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::BindingDecoration>(0, Source{}),
-                                create<ast::SetDecoration>(1, Source{}),
+                                create<ast::BindingDecoration>(Source{}, 0),
+                                create<ast::SetDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(coord_var);
@@ -432,7 +432,7 @@
       Source{}, mod.RegisterSymbol("frag_main"), "frag_main", params,
       &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func);
@@ -462,11 +462,11 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "a", &i32, a_deco));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, b_deco));
 
   auto* str =
@@ -486,8 +486,8 @@
                             nullptr,                            // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::BindingDecoration>(0, Source{}),
-                                create<ast::SetDecoration>(1, Source{}),
+                                create<ast::BindingDecoration>(Source{}, 0),
+                                create<ast::SetDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(coord_var);
@@ -519,7 +519,7 @@
       Source{}, mod.RegisterSymbol("frag_main"), "frag_main", params,
       &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func);
@@ -557,7 +557,7 @@
                             nullptr,                    // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(0, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 0),
                             });
 
   auto* bar_var =
@@ -569,7 +569,7 @@
                             nullptr,                     // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(1, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 1),
                             });
 
   auto* val_var =
@@ -581,7 +581,7 @@
                             nullptr,                     // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(0, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 0),
                             });
 
   td.RegisterVariableForTesting(foo_var);
@@ -648,7 +648,7 @@
   auto* func_1 = create<ast::Function>(
       Source{}, mod.RegisterSymbol("ep_1"), "ep_1", params, &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func_1);
@@ -697,7 +697,7 @@
       nullptr,                     // constructor
       ast::VariableDecorationList{
           // decorations
-          create<ast::BuiltinDecoration>(ast::Builtin::kFragDepth, Source{}),
+          create<ast::BuiltinDecoration>(Source{}, ast::Builtin::kFragDepth),
       });
 
   td.RegisterVariableForTesting(depth_var);
@@ -749,7 +749,7 @@
   auto* func_1 = create<ast::Function>(
       Source{}, mod.RegisterSymbol("ep_1"), "ep_1", params, &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func_1);
@@ -792,7 +792,7 @@
       nullptr,                    // constructor
       ast::VariableDecorationList{
           // decorations
-          create<ast::BuiltinDecoration>(ast::Builtin::kFragCoord, Source{}),
+          create<ast::BuiltinDecoration>(Source{}, ast::Builtin::kFragCoord),
       });
 
   auto* depth_var = create<ast::Variable>(
@@ -804,7 +804,7 @@
       nullptr,                     // constructor
       ast::VariableDecorationList{
           // decorations
-          create<ast::BuiltinDecoration>(ast::Builtin::kFragDepth, Source{}),
+          create<ast::BuiltinDecoration>(Source{}, ast::Builtin::kFragDepth),
       });
 
   td.RegisterVariableForTesting(coord_var);
@@ -867,7 +867,7 @@
   auto* func_1 = create<ast::Function>(
       Source{}, mod.RegisterSymbol("ep_1"), "ep_1", params, &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func_1);
@@ -909,8 +909,8 @@
                             nullptr,                      // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::BindingDecoration>(0, Source{}),
-                                create<ast::SetDecoration>(1, Source{}),
+                                create<ast::BindingDecoration>(Source{}, 0),
+                                create<ast::SetDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(coord_var);
@@ -971,7 +971,7 @@
       Source{}, mod.RegisterSymbol("frag_main"), "frag_main", params,
       &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func);
@@ -1000,11 +1000,11 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "a", &i32, a_deco));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, b_deco));
 
   auto* str =
@@ -1024,8 +1024,8 @@
                             nullptr,                            // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::BindingDecoration>(0, Source{}),
-                                create<ast::SetDecoration>(1, Source{}),
+                                create<ast::BindingDecoration>(Source{}, 0),
+                                create<ast::SetDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(coord_var);
@@ -1085,7 +1085,7 @@
       Source{}, mod.RegisterSymbol("frag_main"), "frag_main", params,
       &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func);
@@ -1120,11 +1120,11 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "a", &i32, a_deco));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, b_deco));
 
   auto* str =
@@ -1144,8 +1144,8 @@
                             nullptr,                            // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::BindingDecoration>(0, Source{}),
-                                create<ast::SetDecoration>(1, Source{}),
+                                create<ast::BindingDecoration>(Source{}, 0),
+                                create<ast::SetDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(coord_var);
@@ -1205,7 +1205,7 @@
       Source{}, mod.RegisterSymbol("frag_main"), "frag_main", params,
       &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func);
@@ -1247,7 +1247,7 @@
                             nullptr,                     // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(1, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 1),
                             });
 
   td.RegisterVariableForTesting(bar_var);
@@ -1283,7 +1283,7 @@
   auto* func_1 = create<ast::Function>(
       Source{}, mod.RegisterSymbol("ep_1"), "ep_1", params, &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   mod.AddFunction(func_1);
@@ -1316,7 +1316,7 @@
       Source{}, mod.RegisterSymbol("main"), "main", ast::VariableList{},
       &void_type, create<ast::BlockStatement>(Source{}, ast::StatementList{}),
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kCompute),
       });
 
   mod.AddFunction(func);
@@ -1392,7 +1392,7 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "d", &f32, a_deco));
 
   ast::StructDecorationList s_decos;
@@ -1412,8 +1412,8 @@
                             nullptr,                            // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::BindingDecoration>(0, Source{}),
-                                create<ast::SetDecoration>(0, Source{}),
+                                create<ast::BindingDecoration>(Source{}, 0),
+                                create<ast::SetDecoration>(Source{}, 0),
                             });
 
   mod.AddConstructedType(&s);
@@ -1445,8 +1445,8 @@
     auto* func = create<ast::Function>(
         Source{}, mod.RegisterSymbol("a"), "a", params, &void_type, body,
         ast::FunctionDecorationList{
-            create<ast::StageDecoration>(ast::PipelineStage::kCompute,
-                                         Source{}),
+            create<ast::StageDecoration>(Source{},
+                                         ast::PipelineStage::kCompute),
         });
 
     mod.AddFunction(func);
@@ -1476,8 +1476,8 @@
     auto* func = create<ast::Function>(
         Source{}, mod.RegisterSymbol("b"), "b", params, &void_type, body,
         ast::FunctionDecorationList{
-            create<ast::StageDecoration>(ast::PipelineStage::kCompute,
-                                         Source{}),
+            create<ast::StageDecoration>(Source{},
+                                         ast::PipelineStage::kCompute),
         });
 
     mod.AddFunction(func);
diff --git a/src/writer/msl/generator_impl_module_constant_test.cc b/src/writer/msl/generator_impl_module_constant_test.cc
index 80756e3..44e39d2 100644
--- a/src/writer/msl/generator_impl_module_constant_test.cc
+++ b/src/writer/msl/generator_impl_module_constant_test.cc
@@ -74,7 +74,7 @@
           create<ast::FloatLiteral>(Source{}, &f32, 3.0f)),  // constructor
       ast::VariableDecorationList{
           // decorations
-          create<ast::ConstantIdDecoration>(23, Source{}),
+          create<ast::ConstantIdDecoration>(Source{}, 23),
       });
 
   ASSERT_TRUE(gen.EmitProgramConstVariable(var)) << gen.error();
diff --git a/src/writer/msl/generator_impl_test.cc b/src/writer/msl/generator_impl_test.cc
index 72e0cd3..861473a 100644
--- a/src/writer/msl/generator_impl_test.cc
+++ b/src/writer/msl/generator_impl_test.cc
@@ -54,7 +54,7 @@
       Source{}, mod.RegisterSymbol("my_func"), "my_func", ast::VariableList{},
       &void_type, create<ast::BlockStatement>(Source{}, ast::StatementList{}),
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kCompute),
       });
   mod.AddFunction(func);
 
@@ -160,15 +160,15 @@
   ast::type::F32 f32;
 
   ast::StructMemberDecorationList decos;
-  decos.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  decos.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
 
   ast::StructMemberList members;
   members.push_back(create<ast::StructMember>(Source{}, "a", &i32, decos));
 
-  decos.push_back(create<ast::StructMemberOffsetDecoration>(32, Source{}));
+  decos.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 32));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, decos));
 
-  decos.push_back(create<ast::StructMemberOffsetDecoration>(128, Source{}));
+  decos.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 128));
   members.push_back(create<ast::StructMember>(Source{}, "c", &f32, decos));
 
   auto* str =
@@ -185,15 +185,15 @@
   ast::type::Vector fvec(&f32, 3);
 
   ast::StructMemberDecorationList decos;
-  decos.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  decos.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
 
   ast::StructMemberList members;
   members.push_back(create<ast::StructMember>(Source{}, "a", &i32, decos));
 
-  decos.push_back(create<ast::StructMemberOffsetDecoration>(16, Source{}));
+  decos.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 16));
   members.push_back(create<ast::StructMember>(Source{}, "b", &fvec, decos));
 
-  decos.push_back(create<ast::StructMemberOffsetDecoration>(32, Source{}));
+  decos.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 32));
   members.push_back(create<ast::StructMember>(Source{}, "c", &f32, decos));
 
   auto* inner_str =
@@ -201,13 +201,13 @@
 
   ast::type::Struct inner_s(mod.RegisterSymbol("Inner"), "Inner", inner_str);
 
-  decos.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  decos.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "d", &f32, decos));
 
-  decos.push_back(create<ast::StructMemberOffsetDecoration>(32, Source{}));
+  decos.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 32));
   members.push_back(create<ast::StructMember>(Source{}, "e", &inner_s, decos));
 
-  decos.push_back(create<ast::StructMemberOffsetDecoration>(64, Source{}));
+  decos.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 64));
   members.push_back(create<ast::StructMember>(Source{}, "f", &f32, decos));
 
   auto* outer_str =
diff --git a/src/writer/msl/generator_impl_type_test.cc b/src/writer/msl/generator_impl_type_test.cc
index b372518..07321f5 100644
--- a/src/writer/msl/generator_impl_type_test.cc
+++ b/src/writer/msl/generator_impl_type_test.cc
@@ -179,7 +179,7 @@
       Source{}, "a", &i32, ast::StructMemberDecorationList{}));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, b_deco));
 
   auto* str =
@@ -200,7 +200,7 @@
       Source{}, "a", &i32, ast::StructMemberDecorationList{}));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, b_deco));
 
   auto* str =
@@ -226,15 +226,15 @@
           create<ast::StructMember>(
               Source{}, "a", &i32,
               ast::StructMemberDecorationList{
-                  create<ast::StructMemberOffsetDecoration>(4, Source{})}),
+                  create<ast::StructMemberOffsetDecoration>(Source{}, 4)}),
           create<ast::StructMember>(
               Source{}, "b", &f32,
               ast::StructMemberDecorationList{
-                  create<ast::StructMemberOffsetDecoration>(32, Source{})}),
+                  create<ast::StructMemberOffsetDecoration>(Source{}, 32)}),
           create<ast::StructMember>(
               Source{}, "c", &f32,
               ast::StructMemberDecorationList{
-                  create<ast::StructMemberOffsetDecoration>(128, Source{})}),
+                  create<ast::StructMemberOffsetDecoration>(Source{}, 128)}),
       },
       ast::StructDecorationList{});
 
@@ -286,7 +286,7 @@
       Source{}, "a", &i32, ast::StructMemberDecorationList{}));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, b_deco));
 
   ast::StructDecorationList decos;
diff --git a/src/writer/msl/generator_impl_variable_decl_statement_test.cc b/src/writer/msl/generator_impl_variable_decl_statement_test.cc
index c575744..1027d10 100644
--- a/src/writer/msl/generator_impl_variable_decl_statement_test.cc
+++ b/src/writer/msl/generator_impl_variable_decl_statement_test.cc
@@ -107,7 +107,7 @@
       Source{}, "a", &f32, ast::StructMemberDecorationList{}));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, b_deco));
 
   auto* str =
diff --git a/src/writer/spirv/builder_function_decoration_test.cc b/src/writer/spirv/builder_function_decoration_test.cc
index 6ca5f03..fe8fc51 100644
--- a/src/writer/spirv/builder_function_decoration_test.cc
+++ b/src/writer/spirv/builder_function_decoration_test.cc
@@ -45,7 +45,7 @@
       Source{}, mod->RegisterSymbol("main"), "main", {}, &void_type,
       create<ast::BlockStatement>(Source{}, ast::StatementList{}),
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
 
   ASSERT_TRUE(b.GenerateFunction(&func)) << b.error();
@@ -72,7 +72,7 @@
       Source{}, mod->RegisterSymbol("main"), "main", {}, &void_type,
       create<ast::BlockStatement>(Source{}, ast::StatementList{}),
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(params.stage, Source{}),
+          create<ast::StageDecoration>(Source{}, params.stage),
       });
 
   ASSERT_TRUE(b.GenerateFunction(&func)) << b.error();
@@ -102,7 +102,7 @@
       Source{}, mod->RegisterSymbol("main"), "main", {}, &void_type,
       create<ast::BlockStatement>(Source{}, ast::StatementList{}),
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
 
   auto* v_in =
@@ -191,7 +191,7 @@
   ast::Function func(
       Source{}, mod->RegisterSymbol("main"), "main", {}, &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex),
       });
 
   auto* v_in =
@@ -262,7 +262,7 @@
       Source{}, mod->RegisterSymbol("main"), "main", {}, &void_type,
       create<ast::BlockStatement>(Source{}, ast::StatementList{}),
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   ASSERT_TRUE(b.GenerateExecutionModes(&func, 3)) << b.error();
@@ -278,7 +278,7 @@
       Source{}, mod->RegisterSymbol("main"), "main", {}, &void_type,
       create<ast::BlockStatement>(Source{}, ast::StatementList{}),
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kCompute),
       });
 
   ASSERT_TRUE(b.GenerateExecutionModes(&func, 3)) << b.error();
@@ -294,8 +294,8 @@
       Source{}, mod->RegisterSymbol("main"), "main", {}, &void_type,
       create<ast::BlockStatement>(Source{}, ast::StatementList{}),
       ast::FunctionDecorationList{
-          create<ast::WorkgroupDecoration>(2u, 4u, 6u, Source{}),
-          create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{}),
+          create<ast::WorkgroupDecoration>(Source{}, 2u, 4u, 6u),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kCompute),
       });
 
   ASSERT_TRUE(b.GenerateExecutionModes(&func, 3)) << b.error();
@@ -311,14 +311,14 @@
       Source{}, mod->RegisterSymbol("main1"), "main1", {}, &void_type,
       create<ast::BlockStatement>(Source{}, ast::StatementList{}),
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   ast::Function func2(
       Source{}, mod->RegisterSymbol("main2"), "main2", {}, &void_type,
       create<ast::BlockStatement>(Source{}, ast::StatementList{}),
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   ASSERT_TRUE(b.GenerateFunction(&func1)) << b.error();
diff --git a/src/writer/spirv/builder_function_test.cc b/src/writer/spirv/builder_function_test.cc
index c386df2..4564a6b 100644
--- a/src/writer/spirv/builder_function_test.cc
+++ b/src/writer/spirv/builder_function_test.cc
@@ -274,7 +274,7 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "d", &f32, a_deco));
 
   ast::StructDecorationList s_decos;
@@ -294,8 +294,8 @@
                             nullptr,                            // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::BindingDecoration>(0, Source{}),
-                                create<ast::SetDecoration>(0, Source{}),
+                                create<ast::BindingDecoration>(Source{}, 0),
+                                create<ast::SetDecoration>(Source{}, 0),
                             });
 
   mod->AddConstructedType(&s);
@@ -328,8 +328,8 @@
     auto* func = create<ast::Function>(
         Source{}, mod->RegisterSymbol("a"), "a", params, &void_type, body,
         ast::FunctionDecorationList{
-            create<ast::StageDecoration>(ast::PipelineStage::kCompute,
-                                         Source{}),
+            create<ast::StageDecoration>(Source{},
+                                         ast::PipelineStage::kCompute),
         });
 
     mod->AddFunction(func);
@@ -360,8 +360,8 @@
     auto* func = create<ast::Function>(
         Source{}, mod->RegisterSymbol("b"), "b", params, &void_type, body,
         ast::FunctionDecorationList{
-            create<ast::StageDecoration>(ast::PipelineStage::kCompute,
-                                         Source{}),
+            create<ast::StageDecoration>(Source{},
+                                         ast::PipelineStage::kCompute),
         });
 
     mod->AddFunction(func);
diff --git a/src/writer/spirv/builder_global_variable_test.cc b/src/writer/spirv/builder_global_variable_test.cc
index 86d8f19..9a5b495 100644
--- a/src/writer/spirv/builder_global_variable_test.cc
+++ b/src/writer/spirv/builder_global_variable_test.cc
@@ -251,7 +251,7 @@
                             nullptr,                     // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::LocationDecoration>(5, Source{}),
+                                create<ast::LocationDecoration>(Source{}, 5),
                             });
 
   EXPECT_TRUE(b.GenerateGlobalVariable(v)) << b.error();
@@ -277,8 +277,8 @@
                             nullptr,                     // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::BindingDecoration>(2, Source{}),
-                                create<ast::SetDecoration>(3, Source{}),
+                                create<ast::BindingDecoration>(Source{}, 2),
+                                create<ast::SetDecoration>(Source{}, 3),
                             });
 
   EXPECT_TRUE(b.GenerateGlobalVariable(v)) << b.error();
@@ -305,7 +305,7 @@
       nullptr,                     // constructor
       ast::VariableDecorationList{
           // decorations
-          create<ast::BuiltinDecoration>(ast::Builtin::kPosition, Source{}),
+          create<ast::BuiltinDecoration>(Source{}, ast::Builtin::kPosition),
       });
 
   EXPECT_TRUE(b.GenerateGlobalVariable(v)) << b.error();
@@ -334,7 +334,7 @@
           create<ast::BoolLiteral>(Source{}, &bool_type, true)),  // constructor
       ast::VariableDecorationList{
           // decorations
-          create<ast::ConstantIdDecoration>(1200, Source{}),
+          create<ast::ConstantIdDecoration>(Source{}, 1200),
       });
 
   EXPECT_TRUE(b.GenerateGlobalVariable(v)) << b.error();
@@ -361,7 +361,7 @@
       nullptr,                   // constructor
       ast::VariableDecorationList{
           // decorations
-          create<ast::ConstantIdDecoration>(1200, Source{}),
+          create<ast::ConstantIdDecoration>(Source{}, 1200),
       });
 
   EXPECT_TRUE(b.GenerateGlobalVariable(v)) << b.error();
@@ -390,7 +390,7 @@
           create<ast::FloatLiteral>(Source{}, &f32, 2.0)),  // constructor
       ast::VariableDecorationList{
           // decorations
-          create<ast::ConstantIdDecoration>(0, Source{}),
+          create<ast::ConstantIdDecoration>(Source{}, 0),
       });
 
   EXPECT_TRUE(b.GenerateGlobalVariable(v)) << b.error();
@@ -417,7 +417,7 @@
                             nullptr,                   // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::ConstantIdDecoration>(0, Source{}),
+                                create<ast::ConstantIdDecoration>(Source{}, 0),
                             });
 
   EXPECT_TRUE(b.GenerateGlobalVariable(v)) << b.error();
@@ -444,7 +444,7 @@
                             nullptr,                   // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::ConstantIdDecoration>(0, Source{}),
+                                create<ast::ConstantIdDecoration>(Source{}, 0),
                             });
 
   EXPECT_TRUE(b.GenerateGlobalVariable(v)) << b.error();
@@ -471,7 +471,7 @@
                             nullptr,                   // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::ConstantIdDecoration>(0, Source{}),
+                                create<ast::ConstantIdDecoration>(Source{}, 0),
                             });
 
   EXPECT_TRUE(b.GenerateGlobalVariable(v)) << b.error();
diff --git a/src/writer/spirv/builder_type_test.cc b/src/writer/spirv/builder_type_test.cc
index 2ed7ffb..2390826 100644
--- a/src/writer/spirv/builder_type_test.cc
+++ b/src/writer/spirv/builder_type_test.cc
@@ -125,7 +125,7 @@
 
   ast::type::Array ary(&i32, 4,
                        ast::ArrayDecorationList{
-                           create<ast::StrideDecoration>(16u, Source{}),
+                           create<ast::StrideDecoration>(Source{}, 16u),
                        });
 
   auto id = b.GenerateTypeIfNeeded(&ary);
@@ -346,9 +346,9 @@
   ast::type::F32 f32;
 
   ast::StructMemberDecorationList a_decos;
-  a_decos.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_decos.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   ast::StructMemberDecorationList b_decos;
-  b_decos.push_back(create<ast::StructMemberOffsetDecoration>(8, Source{}));
+  b_decos.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 8));
 
   ast::StructMemberList members;
   members.push_back(create<ast::StructMember>(Source{}, "a", &f32, a_decos));
@@ -423,11 +423,11 @@
   ast::type::Matrix glsl_mat4x4(&f32, 4, 4);
 
   ast::StructMemberDecorationList a_decos;
-  a_decos.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_decos.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   ast::StructMemberDecorationList b_decos;
-  b_decos.push_back(create<ast::StructMemberOffsetDecoration>(16, Source{}));
+  b_decos.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 16));
   ast::StructMemberDecorationList c_decos;
-  c_decos.push_back(create<ast::StructMemberOffsetDecoration>(48, Source{}));
+  c_decos.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 48));
 
   ast::StructMemberList members;
   members.push_back(
@@ -490,11 +490,11 @@
                                 ast::ArrayDecorationList{});  // Runtime array
 
   ast::StructMemberDecorationList a_decos;
-  a_decos.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_decos.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   ast::StructMemberDecorationList b_decos;
-  b_decos.push_back(create<ast::StructMemberOffsetDecoration>(16, Source{}));
+  b_decos.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 16));
   ast::StructMemberDecorationList c_decos;
-  c_decos.push_back(create<ast::StructMemberOffsetDecoration>(48, Source{}));
+  c_decos.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 48));
 
   ast::StructMemberList members;
   members.push_back(
diff --git a/src/writer/wgsl/generator_impl_alias_type_test.cc b/src/writer/wgsl/generator_impl_alias_type_test.cc
index 7a4da55..1bbc96b 100644
--- a/src/writer/wgsl/generator_impl_alias_type_test.cc
+++ b/src/writer/wgsl/generator_impl_alias_type_test.cc
@@ -48,7 +48,7 @@
       Source{}, "a", &f32, ast::StructMemberDecorationList{}));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &i32, b_deco));
 
   auto* str =
@@ -77,7 +77,7 @@
       Source{}, "a", &f32, ast::StructMemberDecorationList{}));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &i32, b_deco));
 
   auto* str =
diff --git a/src/writer/wgsl/generator_impl_function_test.cc b/src/writer/wgsl/generator_impl_function_test.cc
index 061a623..9909f45 100644
--- a/src/writer/wgsl/generator_impl_function_test.cc
+++ b/src/writer/wgsl/generator_impl_function_test.cc
@@ -110,7 +110,7 @@
   ast::Function func(Source{}, mod.RegisterSymbol("my_func"), "my_func", {},
                      &void_type, body,
                      ast::FunctionDecorationList{
-                         create<ast::WorkgroupDecoration>(2u, 4u, 6u, Source{}),
+                         create<ast::WorkgroupDecoration>(Source{}, 2u, 4u, 6u),
                      });
 
   gen.increment_indent();
@@ -134,7 +134,7 @@
   ast::Function func(
       Source{}, mod.RegisterSymbol("my_func"), "my_func", {}, &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
       });
 
   gen.increment_indent();
@@ -158,8 +158,8 @@
   ast::Function func(
       Source{}, mod.RegisterSymbol("my_func"), "my_func", {}, &void_type, body,
       ast::FunctionDecorationList{
-          create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}),
-          create<ast::WorkgroupDecoration>(2u, 4u, 6u, Source{}),
+          create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment),
+          create<ast::WorkgroupDecoration>(Source{}, 2u, 4u, 6u),
       });
 
   gen.increment_indent();
@@ -197,7 +197,7 @@
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
-  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
+  a_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 0));
   members.push_back(create<ast::StructMember>(Source{}, "d", &f32, a_deco));
 
   ast::StructDecorationList s_decos;
@@ -217,8 +217,8 @@
                             nullptr,                            // constructor
                             ast::VariableDecorationList{
                                 // decorations
-                                create<ast::BindingDecoration>(0, Source{}),
-                                create<ast::SetDecoration>(0, Source{}),
+                                create<ast::BindingDecoration>(Source{}, 0),
+                                create<ast::SetDecoration>(Source{}, 0),
                             });
 
   mod.AddConstructedType(&s);
@@ -250,8 +250,8 @@
     auto* func = create<ast::Function>(
         Source{}, mod.RegisterSymbol("a"), "a", params, &void_type, body,
         ast::FunctionDecorationList{
-            create<ast::StageDecoration>(ast::PipelineStage::kCompute,
-                                         Source{}),
+            create<ast::StageDecoration>(Source{},
+                                         ast::PipelineStage::kCompute),
         });
 
     mod.AddFunction(func);
@@ -281,8 +281,8 @@
     auto* func = create<ast::Function>(
         Source{}, mod.RegisterSymbol("b"), "b", params, &void_type, body,
         ast::FunctionDecorationList{
-            create<ast::StageDecoration>(ast::PipelineStage::kCompute,
-                                         Source{}),
+            create<ast::StageDecoration>(Source{},
+                                         ast::PipelineStage::kCompute),
         });
 
     mod.AddFunction(func);
diff --git a/src/writer/wgsl/generator_impl_type_test.cc b/src/writer/wgsl/generator_impl_type_test.cc
index 32dbf55..ff533a8 100644
--- a/src/writer/wgsl/generator_impl_type_test.cc
+++ b/src/writer/wgsl/generator_impl_type_test.cc
@@ -107,7 +107,7 @@
   ast::type::Bool b;
   ast::type::Array a(&b, 4,
                      ast::ArrayDecorationList{
-                         create<ast::StrideDecoration>(16u, Source{}),
+                         create<ast::StrideDecoration>(Source{}, 16u),
                      });
 
   ASSERT_TRUE(gen.EmitType(&a)) << gen.error();
@@ -118,8 +118,8 @@
   ast::type::Bool b;
   ast::type::Array a(&b, 4,
                      ast::ArrayDecorationList{
-                         create<ast::StrideDecoration>(16u, Source{}),
-                         create<ast::StrideDecoration>(32u, Source{}),
+                         create<ast::StrideDecoration>(Source{}, 16u),
+                         create<ast::StrideDecoration>(Source{}, 32u),
                      });
 
   ASSERT_TRUE(gen.EmitType(&a)) << gen.error();
@@ -180,7 +180,7 @@
       Source{}, "a", &i32, ast::StructMemberDecorationList{}));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, b_deco));
 
   auto* str =
@@ -201,7 +201,7 @@
       Source{}, "a", &i32, ast::StructMemberDecorationList{}));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, b_deco));
 
   auto* str =
@@ -227,7 +227,7 @@
       Source{}, "a", &i32, ast::StructMemberDecorationList{}));
 
   ast::StructMemberDecorationList b_deco;
-  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(4, Source{}));
+  b_deco.push_back(create<ast::StructMemberOffsetDecoration>(Source{}, 4));
   members.push_back(create<ast::StructMember>(Source{}, "b", &f32, b_deco));
 
   ast::StructDecorationList decos;
diff --git a/src/writer/wgsl/generator_impl_variable_test.cc b/src/writer/wgsl/generator_impl_variable_test.cc
index 6583725..3c9878c 100644
--- a/src/writer/wgsl/generator_impl_variable_test.cc
+++ b/src/writer/wgsl/generator_impl_variable_test.cc
@@ -58,7 +58,7 @@
 
   ast::Variable v(Source{}, "a", ast::StorageClass::kNone, &f32, false, nullptr,
                   ast::VariableDecorationList{
-                      create<ast::LocationDecoration>(2, Source{}),
+                      create<ast::LocationDecoration>(Source{}, 2),
                   });
 
   ASSERT_TRUE(gen.EmitVariable(&v)) << gen.error();
@@ -72,11 +72,11 @@
   ast::Variable v(
       Source{}, "a", ast::StorageClass::kNone, &f32, false, nullptr,
       ast::VariableDecorationList{
-          create<ast::BuiltinDecoration>(ast::Builtin::kPosition, Source{}),
-          create<ast::BindingDecoration>(0, Source{}),
-          create<ast::SetDecoration>(1, Source{}),
-          create<ast::LocationDecoration>(2, Source{}),
-          create<ast::ConstantIdDecoration>(42, Source{}),
+          create<ast::BuiltinDecoration>(Source{}, ast::Builtin::kPosition),
+          create<ast::BindingDecoration>(Source{}, 0),
+          create<ast::SetDecoration>(Source{}, 1),
+          create<ast::LocationDecoration>(Source{}, 2),
+          create<ast::ConstantIdDecoration>(Source{}, 42),
       });
 
   ASSERT_TRUE(gen.EmitVariable(&v)) << gen.error();
