Protect sem::MemberAccessorExpression constructor.

This CL moves the constructor for a sem::MemberAccessorExpression to
protected to make it clear that only Swizzle and StructMemberAccess
classes can be created.

Change-Id: I85eef6c6f41c4c36192d88b84150f15205f1bf22
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/107361
Auto-Submit: Dan Sinclair <dsinclair@chromium.org>
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/tint/sem/member_accessor_expression.h b/src/tint/sem/member_accessor_expression.h
index b8144f1..2541f33 100644
--- a/src/tint/sem/member_accessor_expression.h
+++ b/src/tint/sem/member_accessor_expression.h
@@ -33,6 +33,13 @@
 /// ast::MemberAccessorExpression node.
 class MemberAccessorExpression : public Castable<MemberAccessorExpression, Expression> {
   public:
+    /// Destructor
+    ~MemberAccessorExpression() override;
+
+    /// @returns the object that holds the member being accessed
+    const Expression* Object() const { return object_; }
+
+  protected:
     /// Constructor
     /// @param declaration the AST node
     /// @param type the resolved type of the expression
@@ -51,12 +58,6 @@
                              bool has_side_effects,
                              const Variable* source_var = nullptr);
 
-    /// Destructor
-    ~MemberAccessorExpression() override;
-
-    /// @returns the object that holds the member being accessed
-    const Expression* Object() const { return object_; }
-
   private:
     Expression const* const object_;
 };