Search in sources :

Example 1 with TagBreak

use of lucee.transformer.bytecode.statement.tag.TagBreak in project Lucee by lucee.

the class Break method evaluate.

@Override
public void evaluate(Tag tag, TagLibTag libTag) throws EvaluatorException {
    String ns = libTag.getTagLib().getNameSpaceAndSeparator();
    String loopName = ns + "loop";
    String whileName = ns + "while";
    // label
    String label = null;
    Attribute attrLabel = tag.getAttribute("label");
    if (attrLabel != null) {
        TagBreak tb = (TagBreak) tag;
        label = variableToString(tag, attrLabel, null);
        if (label != null) {
            tb.setLabel(label = label.trim());
            tag.removeAttribute("label");
        } else if (ASMUtil.isLiteralAttribute(tag, attrLabel, ASMUtil.TYPE_STRING, false, true)) {
            LitString ls = (LitString) tag.getFactory().toExprString(tag.getAttribute("label").getValue());
            label = ls.getString();
            if (!StringUtil.isEmpty(label, true)) {
                tb.setLabel(label = label.trim());
                tag.removeAttribute("label");
            } else
                label = null;
        }
    }
    // no base tag found
    if (!ASMUtil.hasAncestorBreakFCStatement(tag, label)) {
        if (tag.isScriptBase()) {
            if (StringUtil.isEmpty(label))
                throw new EvaluatorException("Wrong Context, " + libTag.getName() + " must be inside a looping statement or tag");
            throw new EvaluatorException("Wrong Context, " + libTag.getName() + " must be inside a looping statement or tag with the label [" + label + "]");
        }
        if (StringUtil.isEmpty(label))
            throw new EvaluatorException("Wrong Context, tag " + libTag.getFullName() + " must be inside a " + loopName + " or " + whileName + " tag");
        throw new EvaluatorException("Wrong Context, tag " + libTag.getFullName() + " must be inside a " + loopName + " or " + whileName + " tag with the label [" + label + "]");
    }
}
Also used : LitString(lucee.transformer.expression.literal.LitString) Attribute(lucee.transformer.bytecode.statement.tag.Attribute) EvaluatorException(lucee.transformer.cfml.evaluator.EvaluatorException) VariableString(lucee.transformer.bytecode.expression.var.VariableString) LitString(lucee.transformer.expression.literal.LitString) TagBreak(lucee.transformer.bytecode.statement.tag.TagBreak)

Aggregations

VariableString (lucee.transformer.bytecode.expression.var.VariableString)1 Attribute (lucee.transformer.bytecode.statement.tag.Attribute)1 TagBreak (lucee.transformer.bytecode.statement.tag.TagBreak)1 EvaluatorException (lucee.transformer.cfml.evaluator.EvaluatorException)1 LitString (lucee.transformer.expression.literal.LitString)1