Search in sources :

Example 26 with Statement

use of lucee.transformer.bytecode.Statement in project Lucee by lucee.

the class Retry method getAncestorCatch.

public static Statement getAncestorCatch(TagLib tagLib, Statement stat) {
    String name = tagLib.getNameSpaceAndSeparator() + "catch";
    Tag tag;
    Statement parent = stat;
    while (true) {
        parent = parent.getParent();
        if (parent == null)
            return null;
        if (parent instanceof Tag) {
            tag = (Tag) parent;
            if (tag.getFullname().equalsIgnoreCase(name))
                return tag;
        } else if (parent instanceof TryCatchFinally)
            return parent;
    }
}
Also used : Statement(lucee.transformer.bytecode.Statement) Tag(lucee.transformer.bytecode.statement.tag.Tag) TagLibTag(lucee.transformer.library.tag.TagLibTag) TryCatchFinally(lucee.transformer.bytecode.statement.TryCatchFinally)

Example 27 with Statement

use of lucee.transformer.bytecode.Statement in project Lucee by lucee.

the class Static method evaluate.

@Override
public void evaluate(Tag tag, TagLibTag libTag) throws EvaluatorException {
    // check parent
    Body body = null;
    String compName = Property.getComponentName(tag);
    boolean isCompChild = false;
    Tag p = ASMUtil.getParentTag(tag);
    if (p != null && (p instanceof TagComponent || getFullname(p, "").equalsIgnoreCase(compName))) {
        isCompChild = true;
        body = p.getBody();
    }
    Tag pp = p != null ? ASMUtil.getParentTag(p) : null;
    if (!isCompChild && pp != null && (p instanceof TagComponent || getFullname(pp, "").equalsIgnoreCase(compName))) {
        isCompChild = true;
        body = pp.getBody();
    }
    if (!isCompChild) {
        throw new EvaluatorException("Wrong Context for the the static constructor, " + "a static constructor must inside a component body.");
    }
    // Body body=(Body) tag.getParent();
    List<Statement> children = tag.getBody().getStatements();
    // remove that tag from parent
    ASMUtil.remove(tag);
    StaticBody sb = getStaticBody(body);
    ASMUtil.addStatements(sb, children);
}
Also used : EvaluatorException(lucee.transformer.cfml.evaluator.EvaluatorException) Statement(lucee.transformer.bytecode.Statement) StaticBody(lucee.transformer.bytecode.StaticBody) Tag(lucee.transformer.bytecode.statement.tag.Tag) TagLibTag(lucee.transformer.library.tag.TagLibTag) TagComponent(lucee.transformer.bytecode.statement.tag.TagComponent) Body(lucee.transformer.bytecode.Body) StaticBody(lucee.transformer.bytecode.StaticBody)

Example 28 with Statement

use of lucee.transformer.bytecode.Statement in project Lucee by lucee.

the class Try method evaluate.

/**
 * @see lucee.transformer.cfml.evaluator.EvaluatorSupport#evaluate(Element)
 */
@Override
public void evaluate(Tag tag) throws EvaluatorException {
    Body body = tag.getBody();
    int catchCount = 0;
    int noCatchCount = 0;
    int finallyCount = 0;
    // count catch tag and other in body
    if (body != null) {
        List stats = body.getStatements();
        Iterator it = stats.iterator();
        Statement stat;
        Tag t;
        String name;
        while (it.hasNext()) {
            stat = (Statement) it.next();
            if (stat instanceof Tag) {
                t = (Tag) stat;
                name = t.getTagLibTag().getName();
                if (name.equals("finally")) {
                    finallyCount++;
                    noCatchCount++;
                } else if (name.equals("catch"))
                    catchCount++;
                else
                    noCatchCount++;
            } else
                noCatchCount++;
        }
    }
    // check if has Content
    if (catchCount == 0 && finallyCount == 0)
        throw new EvaluatorException("Wrong Context, tag cftry must have at least one tag cfcatch inside or a cffinally tag.");
    if (finallyCount > 1)
        throw new EvaluatorException("Wrong Context, tag cftry can have only one tag cffinally inside.");
    // check if no has Content
    if (noCatchCount == 0) {
        ASMUtil.remove(tag);
    }
}
Also used : EvaluatorException(lucee.transformer.cfml.evaluator.EvaluatorException) Statement(lucee.transformer.bytecode.Statement) Iterator(java.util.Iterator) List(java.util.List) Tag(lucee.transformer.bytecode.statement.tag.Tag) Body(lucee.transformer.bytecode.Body)

Aggregations

Statement (lucee.transformer.bytecode.Statement)28 Body (lucee.transformer.bytecode.Body)15 Tag (lucee.transformer.bytecode.statement.tag.Tag)13 Expression (lucee.transformer.expression.Expression)7 LitString (lucee.transformer.expression.literal.LitString)7 TagLibTag (lucee.transformer.library.tag.TagLibTag)7 ArrayList (java.util.ArrayList)6 ScriptBody (lucee.transformer.bytecode.ScriptBody)6 PrintOut (lucee.transformer.bytecode.statement.PrintOut)6 Iterator (java.util.Iterator)5 HasBody (lucee.transformer.bytecode.statement.HasBody)5 EvaluatorException (lucee.transformer.cfml.evaluator.EvaluatorException)5 List (java.util.List)4 StaticBody (lucee.transformer.bytecode.StaticBody)4 GeneratorAdapter (org.objectweb.asm.commons.GeneratorAdapter)4 lucee.aprint (lucee.aprint)3 TransformerException (lucee.transformer.TransformerException)3 BodyBase (lucee.transformer.bytecode.BodyBase)3 Literal (lucee.transformer.expression.literal.Literal)3 Label (org.objectweb.asm.Label)3