static void initClasses()

in unsupported/tools/rustgen/rustgen.cpp [133:335]


static void initClasses() {
  auto baseName = [](llvh::StringRef n) { return n == "Base" ? "" : n; };
  auto type = [](llvh::StringRef n) {
    return llvh::StringSwitch<FieldType>(n)
        .Case("NodeString", FieldType::NodeString)
        .Case("NodeLabel", FieldType::NodeLabel)
        .Case("NodeBoolean", FieldType::Boolean)
        .Case("NodeNumber", FieldType::Number)
        .Case("NodePtr", FieldType::NodePtr)
        .Case("NodeList", FieldType::NodeList)
        .Default(FieldType::Error);
  };

#define STRUCT(NAME, BASE)                           \
  treeClasses_.emplace_back(#NAME, baseName(#BASE)); \
  treeNames_.emplace(#NAME, treeClasses_.size() - 1)

#define ARG(TY, NM, OPT) \
  treeClasses_.back().fields.emplace_back(type(#TY), #NM, OPT)

#define ESTREE_FIRST(NAME, BASE)                                          \
  treeClasses_.emplace_back(#NAME, baseName(#BASE), SentinelType::First); \
  treeNames_.emplace(#NAME, treeClasses_.size() - 1);

#define ESTREE_LAST(NAME) \
  treeClasses_.emplace_back(#NAME, "", SentinelType::Last);

#define ESTREE_NODE_0_ARGS(NAME, BASE) STRUCT(NAME, BASE);

#define ESTREE_NODE_1_ARGS(NAME, BASE, ARG0TY, ARG0NM, ARG0OPT) \
  STRUCT(NAME, BASE);                                           \
  ARG(ARG0TY, ARG0NM, ARG0OPT);

#define ESTREE_NODE_2_ARGS(                                       \
    NAME, BASE, ARG0TY, ARG0NM, ARG0OPT, ARG1TY, ARG1NM, ARG1OPT) \
  STRUCT(NAME, BASE);                                             \
  ARG(ARG0TY, ARG0NM, ARG0OPT);                                   \
  ARG(ARG1TY, ARG1NM, ARG1OPT);

#define ESTREE_NODE_3_ARGS(     \
    NAME,                       \
    BASE,                       \
    ARG0TY,                     \
    ARG0NM,                     \
    ARG0OPT,                    \
    ARG1TY,                     \
    ARG1NM,                     \
    ARG1OPT,                    \
    ARG2TY,                     \
    ARG2NM,                     \
    ARG2OPT)                    \
  STRUCT(NAME, BASE);           \
  ARG(ARG0TY, ARG0NM, ARG0OPT); \
  ARG(ARG1TY, ARG1NM, ARG1OPT); \
  ARG(ARG2TY, ARG2NM, ARG2OPT);

#define ESTREE_NODE_4_ARGS(     \
    NAME,                       \
    BASE,                       \
    ARG0TY,                     \
    ARG0NM,                     \
    ARG0OPT,                    \
    ARG1TY,                     \
    ARG1NM,                     \
    ARG1OPT,                    \
    ARG2TY,                     \
    ARG2NM,                     \
    ARG2OPT,                    \
    ARG3TY,                     \
    ARG3NM,                     \
    ARG3OPT)                    \
  STRUCT(NAME, BASE);           \
  ARG(ARG0TY, ARG0NM, ARG0OPT); \
  ARG(ARG1TY, ARG1NM, ARG1OPT); \
  ARG(ARG2TY, ARG2NM, ARG2OPT); \
  ARG(ARG3TY, ARG3NM, ARG3OPT);

#define ESTREE_NODE_5_ARGS(     \
    NAME,                       \
    BASE,                       \
    ARG0TY,                     \
    ARG0NM,                     \
    ARG0OPT,                    \
    ARG1TY,                     \
    ARG1NM,                     \
    ARG1OPT,                    \
    ARG2TY,                     \
    ARG2NM,                     \
    ARG2OPT,                    \
    ARG3TY,                     \
    ARG3NM,                     \
    ARG3OPT,                    \
    ARG4TY,                     \
    ARG4NM,                     \
    ARG4OPT)                    \
  STRUCT(NAME, BASE);           \
  ARG(ARG0TY, ARG0NM, ARG0OPT); \
  ARG(ARG1TY, ARG1NM, ARG1OPT); \
  ARG(ARG2TY, ARG2NM, ARG2OPT); \
  ARG(ARG3TY, ARG3NM, ARG3OPT); \
  ARG(ARG4TY, ARG4NM, ARG4OPT);

#define ESTREE_NODE_6_ARGS(     \
    NAME,                       \
    BASE,                       \
    ARG0TY,                     \
    ARG0NM,                     \
    ARG0OPT,                    \
    ARG1TY,                     \
    ARG1NM,                     \
    ARG1OPT,                    \
    ARG2TY,                     \
    ARG2NM,                     \
    ARG2OPT,                    \
    ARG3TY,                     \
    ARG3NM,                     \
    ARG3OPT,                    \
    ARG4TY,                     \
    ARG4NM,                     \
    ARG4OPT,                    \
    ARG5TY,                     \
    ARG5NM,                     \
    ARG5OPT)                    \
  STRUCT(NAME, BASE);           \
  ARG(ARG0TY, ARG0NM, ARG0OPT); \
  ARG(ARG1TY, ARG1NM, ARG1OPT); \
  ARG(ARG2TY, ARG2NM, ARG2OPT); \
  ARG(ARG3TY, ARG3NM, ARG3OPT); \
  ARG(ARG4TY, ARG4NM, ARG4OPT); \
  ARG(ARG5TY, ARG5NM, ARG5OPT);

#define ESTREE_NODE_7_ARGS(     \
    NAME,                       \
    BASE,                       \
    ARG0TY,                     \
    ARG0NM,                     \
    ARG0OPT,                    \
    ARG1TY,                     \
    ARG1NM,                     \
    ARG1OPT,                    \
    ARG2TY,                     \
    ARG2NM,                     \
    ARG2OPT,                    \
    ARG3TY,                     \
    ARG3NM,                     \
    ARG3OPT,                    \
    ARG4TY,                     \
    ARG4NM,                     \
    ARG4OPT,                    \
    ARG5TY,                     \
    ARG5NM,                     \
    ARG5OPT,                    \
    ARG6TY,                     \
    ARG6NM,                     \
    ARG6OPT)                    \
  STRUCT(NAME, BASE);           \
  ARG(ARG0TY, ARG0NM, ARG0OPT); \
  ARG(ARG1TY, ARG1NM, ARG1OPT); \
  ARG(ARG2TY, ARG2NM, ARG2OPT); \
  ARG(ARG3TY, ARG3NM, ARG3OPT); \
  ARG(ARG4TY, ARG4NM, ARG4OPT); \
  ARG(ARG5TY, ARG5NM, ARG5OPT); \
  ARG(ARG6TY, ARG6NM, ARG6OPT);

#define ESTREE_NODE_8_ARGS(     \
    NAME,                       \
    BASE,                       \
    ARG0TY,                     \
    ARG0NM,                     \
    ARG0OPT,                    \
    ARG1TY,                     \
    ARG1NM,                     \
    ARG1OPT,                    \
    ARG2TY,                     \
    ARG2NM,                     \
    ARG2OPT,                    \
    ARG3TY,                     \
    ARG3NM,                     \
    ARG3OPT,                    \
    ARG4TY,                     \
    ARG4NM,                     \
    ARG4OPT,                    \
    ARG5TY,                     \
    ARG5NM,                     \
    ARG5OPT,                    \
    ARG6TY,                     \
    ARG6NM,                     \
    ARG6OPT,                    \
    ARG7TY,                     \
    ARG7NM,                     \
    ARG7OPT)                    \
  STRUCT(NAME, BASE);           \
  ARG(ARG0TY, ARG0NM, ARG0OPT); \
  ARG(ARG1TY, ARG1NM, ARG1OPT); \
  ARG(ARG2TY, ARG2NM, ARG2OPT); \
  ARG(ARG3TY, ARG3NM, ARG3OPT); \
  ARG(ARG4TY, ARG4NM, ARG4OPT); \
  ARG(ARG5TY, ARG5NM, ARG5OPT); \
  ARG(ARG6TY, ARG6NM, ARG6OPT); \
  ARG(ARG7TY, ARG7NM, ARG7OPT);

#include "hermes/AST/ESTree.def"
}