private static ExpectedChild ExpectedExprStmt(ExpectedChild expression) {
     return new ExpectedNode(typeof(ExpressionStatement), expression);
 }
 public ExpectedNew(ExpectedChild value, params ExpectedChild[] args) {
     Value = value;
     Args = args;
 }
 private static ExpectedChild ExpectedAssign(ExpectedChild left, ExpectedChild right) {
     return new ExpectedBinary(JSToken.Assign, left, right);
 }
 public ExpectedFunctionExpr(ExpectedChild body) {
     Body = body;
 }
 public ExpectedIndex(ExpectedChild value, ExpectedChild index) {
     Value = value;
     Index = index;
 }
 public ExpectedMember(ExpectedChild root, string name) {
     Root = root;
     Name = name;
 }
 public ExpectedUnary(JSToken token, ExpectedChild operand) {
     Token = token;
     Operand = operand;
 }
 public ExpectedBinary(JSToken token, ExpectedChild left, ExpectedChild right) {
     Token = token;
     Left = left;
     Right = right;
 }
 public ExpectedVariableDeclaration(ExpectedChild initializer = null) {
     Variable = new ExpectedVariable(this);
     Initializer = initializer;
 }
 public PatternSpecialization(CallDelegate specialization, bool callBase, params ExpectedChild[] children)
     : base(specialization, callBase) {
     Body = new ExpectedNode(
         typeof(Block),
         children
     );
 }