Home | History | Annotate | Download | only in cctest
      1 // Copyright 2015 the V8 project 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 #ifndef V8_EXPRESSION_TYPE_COLLECTOR_MACROS_H_
      6 #define V8_EXPRESSION_TYPE_COLLECTOR_MACROS_H_
      7 
      8 #define CHECK_TYPES_BEGIN \
      9   {                       \
     10     size_t index = 0;     \
     11     int depth = 0;
     12 
     13 #define CHECK_TYPES_END          \
     14   CHECK_EQ(index, types.size()); \
     15   }
     16 
     17 #ifdef DEBUG
     18 #define CHECK_TYPE(type)                    \
     19   if (!types[index].bounds.Narrows(type)) { \
     20     fprintf(stderr, "Expected:\n");         \
     21     fprintf(stderr, "  lower: ");           \
     22     type.lower->Print();                    \
     23     fprintf(stderr, "  upper: ");           \
     24     type.upper->Print();                    \
     25     fprintf(stderr, "Actual:\n");           \
     26     fprintf(stderr, "  lower: ");           \
     27     types[index].bounds.lower->Print();     \
     28     fprintf(stderr, "  upper: ");           \
     29     types[index].bounds.upper->Print();     \
     30   }                                         \
     31   CHECK(types[index].bounds.Narrows(type));
     32 #else
     33 #define CHECK_TYPE(type) CHECK(types[index].bounds.Narrows(type));
     34 #endif
     35 
     36 #define CHECK_EXPR(ekind, type)                  \
     37   CHECK_LT(index, types.size());                 \
     38   CHECK(strcmp(#ekind, types[index].kind) == 0); \
     39   CHECK_EQ(depth, types[index].depth);           \
     40   CHECK_TYPE(type);                              \
     41   for (int j = (++depth, ++index, 0); j < 1 ? 1 : (--depth, 0); ++j)
     42 
     43 #define CHECK_VAR(vname, type)                                     \
     44   CHECK_EXPR(VariableProxy, type);                                 \
     45   CHECK_EQ(#vname, std::string(types[index - 1].name->raw_data(),  \
     46                                types[index - 1].name->raw_data() + \
     47                                    types[index - 1].name->byte_length()));
     48 
     49 #define CHECK_SKIP()                                             \
     50   {                                                              \
     51     ++index;                                                     \
     52     while (index < types.size() && types[index].depth > depth) { \
     53       ++index;                                                   \
     54     }                                                            \
     55   }
     56 
     57 #endif  // V8_EXPRESSION_TYPE_COLLECTOR_MACROS_H_
     58