Home | History | Annotate | Download | only in test_parser
      1 /* Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2    Use of this source code is governed by a BSD-style license that can be
      3   found in the LICENSE file. */
      4 
      5 /* Test Enum productions
      6 
      7 Run with --test to generate an AST and verify that all comments accurately
      8 reflect the state of the Nodes.
      9 
     10 BUILD Type(Name)
     11 This comment signals that a node of type <Type> is created with the
     12 name <Name>.
     13 
     14 ERROR Error String
     15 This comment signals that a error of <Error String> is generated.  The error
     16 is not assigned to a node, but are expected in order.
     17 
     18 PROP Key=Value
     19 This comment signals that a property has been set on the Node such that
     20 <Key> = <Value>.
     21 
     22 TREE
     23 Type(Name)
     24   Type(Name)
     25   Type(Name)
     26     Type(Name)
     27     ...
     28 This comment signals that a tree of nodes matching the BUILD comment
     29 symatics should exist.  This is an exact match.
     30 */
     31 
     32 /* TREE
     33  *Enum(MealType1)
     34  *  EnumItem(rice)
     35  *  EnumItem(noodles)
     36  *  EnumItem(other)
     37 */
     38 enum MealType1 {
     39   /* BUILD EnumItem (rice) */
     40   rice,
     41   /* BUILD EnumItem (noodles) */
     42   noodles,
     43   /* BUILD EnumItem(other) */
     44   other
     45 };
     46 
     47 /* BUILD Error(Enum missing name.) */
     48 /* ERROR Enum missing name. */
     49 enum {
     50   rice,
     51   noodles,
     52   other,
     53 };
     54 
     55 /* TREE
     56  *Enum(MealType2)
     57  *  EnumItem(rice)
     58  *  EnumItem(noodles)
     59  *  EnumItem(other)
     60 */
     61 enum MealType2 {
     62   /* BUILD EnumItem(rice) */
     63   rice,
     64   /* BUILD EnumItem(noodles) */
     65   noodles = 1,
     66   /* BUILD EnumItem(other) */
     67   other
     68 };
     69 
     70 /* BUILD Error(Unexpected identifier "noodles" after identifier "rice".) */
     71 /* ERROR Unexpected identifier "noodles" after identifier "rice". */
     72 enum MissingComma {
     73   rice
     74   noodles,
     75   other
     76 };
     77 
     78 /* BUILD Error(Trailing comma in block.) */
     79 /* ERROR Trailing comma in block. */
     80 enum TrailingComma {
     81   rice,
     82   noodles,
     83   other,
     84 };
     85 
     86 /* BUILD Error(Unexpected "," after ",".) */
     87 /* ERROR Unexpected "," after ",". */
     88 enum ExtraComma {
     89   rice,
     90   noodles,
     91   ,other,
     92 };
     93 
     94 /* BUILD Error(Unexpected keyword "interface" after "{".) */
     95 /* ERROR Unexpected keyword "interface" after "{". */
     96 enum ExtraComma {
     97   interface,
     98   noodles,
     99   ,other,
    100 };
    101 
    102 /* BUILD Error(Unexpected string "somename" after "{".) */
    103 /* ERROR Unexpected string "somename" after "{". */
    104 enum ExtraComma {
    105   "somename",
    106   noodles,
    107   other,
    108 };
    109 
    110 /* BUILD Enum(MealType3) */
    111 enum MealType3 {
    112   /* BUILD EnumItem(rice) */
    113   rice = 1 << 1,
    114   /* BUILD EnumItem(noodles) */
    115   noodles = 0x1 << 0x2,
    116   /* BUILD EnumItem(other) */
    117   other = 012 << 777
    118 };
    119 
    120 /* BUILD Enum(MealType4) */
    121 enum MealType4 {
    122   /* BUILD EnumItem(rice) */
    123   rice = true,
    124   /* BUILD EnumItem(noodles) */
    125   noodles = false
    126 };
    127