parse.c
static void ParseElseIf(ParseContext *c)
{
    NodeListEntry **pNext;
    ParseTreeNode *node;
    switch (c->bptr->type) {
    case BLOCK_IF:
        node = NewParseTreeNode(c, NodeTypeIfStatement);
        pNext = &c->bptr->node->u.ifStatement.elseStatements;
        AddNodeToList(c, &pNext, node);
        c->bptr->node = node;
        node->u.ifStatement.test = ParseExpr(c);
        c->bptr->pNextStatement = &node->u.ifStatement.thenStatements;
        FRequire(c, T_THEN);
        FRequire(c, T_EOL);
        break;
    default:
        ParseError(c, "ELSE IF without a matching IF");
        break;
    }
}
/* ParseElseIf - parse the 'ELSE IF' statement */
parse the 'ELSE IF' statement
parse the ' ELSE IF ' statement
static void ParseElseIf(ParseContext *c)
{
    NodeListEntry **pNext;
    ParseTreeNode *node;
    switch (c->bptr->type) {
    case BLOCK_IF:
        node = NewParseTreeNode(c, NodeTypeIfStatement);
        pNext = &c->bptr->node->u.ifStatement.elseStatements;
        AddNodeToList(c, &pNext, node);
        c->bptr->node = node;
        node->u.ifStatement.test = ParseExpr(c);
        c->bptr->pNextStatement = &node->u.ifStatement.thenStatements;
        FRequire(c, T_THEN);
        FRequire(c, T_EOL);
        break;
    default:
        ParseError(c, "ELSE IF without a matching IF");
        break;
    }
}
static void ParseElseIf ( ParseContext * c ) { NodeListEntry * * pNext ; ParseTreeNode * node ; switch ( c -> bptr -> type ) { case BLOCK_IF : node = NewParseTreeNode ( c , NodeTypeIfStatement ) ; pNext = & c -> bptr -> node -> u . ifStatement . elseStatements ; AddNodeToList ( c , & pNext , node ) ; c -> bptr -> node = node ; node -> u . ifStatement . test = ParseExpr ( c ) ; c -> bptr -> pNextStatement = & node -> u . ifStatement . thenStatements ; FRequire ( c , T_THEN ) ; FRequire ( c , T_EOL ) ; break ; default : ParseError ( c , " " ) ; break ; } }
ParseElseIf - parse the 'ELSE IF' statement
ParseElseIf - parse the ' ELSE IF ' statement