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"
}