Search in sources :

Example 1 with Switch

use of lucee.transformer.bytecode.statement.Switch in project Lucee by lucee.

the class AbstrCFMLScriptTransformer method switchStatement.

/**
 * Liest ein switch Statment ein
 * @return switch Statement
 * @throws TemplateException
 */
private final Switch switchStatement(ExprData data) throws TemplateException {
    if (!data.srcCode.forwardIfCurrent("switch", '('))
        return null;
    Position line = data.srcCode.getPosition();
    comments(data);
    Expression expr = super.expression(data);
    comments(data);
    // end )
    if (!data.srcCode.forwardIfCurrent(')'))
        throw new TemplateException(data.srcCode, "switch statement must end with a [)]");
    comments(data);
    if (!data.srcCode.forwardIfCurrent('{'))
        throw new TemplateException(data.srcCode, "switch statement must have a starting  [{]");
    Switch swit = new Switch(expr, line, null);
    // cases
    // Node child=null;
    comments(data);
    while (caseStatement(data, swit)) {
        comments(data);
    }
    // default
    if (defaultStatement(data, swit)) {
        comments(data);
    }
    while (caseStatement(data, swit)) {
        comments(data);
    }
    // }
    if (!data.srcCode.forwardIfCurrent('}'))
        throw new TemplateException(data.srcCode, "invalid construct in switch statement");
    swit.setEnd(data.srcCode.getPosition());
    return swit;
}
Also used : Switch(lucee.transformer.bytecode.statement.Switch) Position(lucee.transformer.Position) FunctionAsExpression(lucee.transformer.bytecode.expression.FunctionAsExpression) Expression(lucee.transformer.expression.Expression) TemplateException(lucee.runtime.exp.TemplateException)

Aggregations

TemplateException (lucee.runtime.exp.TemplateException)1 Position (lucee.transformer.Position)1 FunctionAsExpression (lucee.transformer.bytecode.expression.FunctionAsExpression)1 Switch (lucee.transformer.bytecode.statement.Switch)1 Expression (lucee.transformer.expression.Expression)1