/* Copyright (c) 2013 The Chromium Authors. All rights reserved.
   Use of this source code is governed by a BSD-style license that can be
  found in the LICENSE file. */

/* Test Struct productions

Run with --test to generate an AST and verify that all comments accurately
reflect the state of the Nodes.

BUILD Type(Name)
This comment signals that a node of type <Type> is created with the
name <Name>.

ERROR Error String
This comment signals that a error of <Error String> is generated.  The error
is not assigned to a node, but are expected in order.

PROP Key=Value
This comment signals that a property has been set on the Node such that
<Key> = <Value>.

TREE
Type(Name)
  Type(Name)
  Type(Name)
    Type(Name)
    ...
This comment signals that a tree of nodes matching the BUILD comment
symatics should exist.  This is an exact match.
*/

/* TREE
 *Struct(MyStruct)
 *  Member(x)
 *    Type()
 *      PrimitiveType(uint32_t)
 *  Member(y)
 *    Type()
 *      PrimitiveType(uint64_t)
 *  Member(string)
 *    ExtAttributes()
 *      ExtAttribute(fake_attribute)
 *    Type()
 *      PrimitiveType(str_t)
 *  Member(z)
 *    Type()
 *      Typeref(Promise)
 *  ExtAttributes()
 *    ExtAttribute(union)
 */
[union] struct MyStruct {
  uint32_t x;
  uint64_t y;
  [fake_attribute] str_t string;
  Promise z;
};
