/* 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 Typedef 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
 *Typedef(MyLong)
 *  Type()
 *    PrimitiveType(long)
 */
typedef long MyLong;

/* TREE
 *Typedef(MyLong)
 *  ExtAttributes()
 *    ExtAttribute(foo)
 *  Type()
 *    PrimitiveType(long)
 */
typedef [foo] long MyLong;

/* TREE
 *Typedef(MyLongArray)
 *  Type()
 *    PrimitiveType(long)
 *    Array()
 */
typedef long[] MyLongArray;

/* TREE
 *Typedef(MyLongSizedArray)
 *  Type()
 *    PrimitiveType(long)
 *    Array(4)
 */
typedef long[4] MyLongSizedArray;

/* TREE
 *Typedef(MyLongSizedArrayArray)
 *  Type()
 *    PrimitiveType(long)
 *    Array(4)
 *      Array(5)
 */
typedef long[4][5] MyLongSizedArrayArray;

/* TREE
 *Typedef(MyLongArraySizedArray)
 *  Type()
 *    PrimitiveType(long)
 *    Array()
 *      Array(5)
 */
typedef long[][5] MyLongArraySizedArray;

/* TREE
 *Typedef(MyTypeFive)
 *  Type()
 *    Typeref(MyType)
 *    Array(5)
 */
typedef MyType[5] MyTypeFive;

/* TREE
 *Typedef(MyTypeUnsizedFive)
 *  Type()
 *    Typeref(MyType)
 *    Array()
 *      Array(5)
 */
typedef MyType[][5] MyTypeUnsizedFive;

/* TREE
 *Typedef(MyLongLong)
 *  Type()
 *    PrimitiveType(long long)
 */
typedef long long MyLongLong;

/* TREE
 *Typedef(MyULong)
 *  Type()
 *    PrimitiveType(unsigned long)
 */
typedef unsigned long MyULong;

/* TREE
 *Typedef(MyULongLong)
 *  Type()
 *    PrimitiveType(unsigned long long)
 */
typedef unsigned long long MyULongLong;

/* TREE
 *Typedef(MyString)
 *  Type()
 *    StringType(DOMString)
 */
typedef DOMString MyString;

/* TREE
 *Typedef(MyObject)
 *  Type()
 *    PrimitiveType(object)
 */
typedef object MyObject;

/* TREE
 *Typedef(MyDate)
 *  Type()
 *    PrimitiveType(Date)
 */
typedef Date MyDate;

/* TREE
 *Typedef(MyFloat)
 *  Type()
 *    PrimitiveType(float)
 */
typedef float MyFloat;

/* TREE
 *Typedef(MyUFloat)
 *  Type()
 *    PrimitiveType(float)
 */
typedef unrestricted float MyUFloat;

/* TREE
 *Typedef(MyDouble)
 *  Type()
 *    PrimitiveType(double)
 */
typedef double MyDouble;

/* TREE
 *Typedef(MyUDouble)
 *  Type()
 *    PrimitiveType(double)
 */
typedef unrestricted double MyUDouble;

/* TREE
 *Typedef(MyBool)
 *  Type()
 *    PrimitiveType(boolean)
 */
typedef boolean MyBool;

/* TREE
 *Typedef(MyByte)
 *  Type()
 *    PrimitiveType(byte)
 */
typedef byte MyByte;

/* TREE
 *Typedef(MyOctet)
 *  Type()
 *    PrimitiveType(octet)
 */
typedef octet MyOctet;

/* TREE
 *Typedef(MyRecord)
 *  Type()
 *    Record()
 *      StringType(ByteString)
 *      Type()
 *        Typeref(int)
 */
typedef record<ByteString, int> MyRecord;

/* TREE
 *Typedef(MyInvalidRecord)
 *  Type()
 *    Error(Unexpected keyword "double" after "<".)
 */
typedef record<double, ByteString> MyInvalidRecord;
