Search in sources :

Example 11 with Tag

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

the class CFMLTransformer method tag.

/**
 * Liest einen Tag ein, prueft hierbei ob das Tag innerhalb einer der geladenen Tag-Lib existiert,
 * ansonsten wird ein Tag einfach als literal-string aufgenommen.
 * <br />
 * EBNF:<br />
 * <code>name-space identifier spaces attributes ("/>" | ">" [body "</" identifier spaces ">"]);(* Ob dem Tag ein Body und ein End-Tag folgt ist abhaengig von Definition des body-content in Tag-Lib, gleices gilt fuer appendix *)</code>
 * @param parent uebergeornetes Tag
 * @param parseExpression sollen Expresson innerhalb des Body geparste werden oder nicht.
 * @return Gibt zurueck ob es sich um ein Tag as einer Tag-Lib handelte oder nicht.
 * @throws TemplateException
 */
private boolean tag(TagData data, Body parent, boolean parseExpression) throws TemplateException {
    // lucee.print.ln("--->"+data.cfml.getCurrent());
    boolean hasBody = false;
    Position line = data.srcCode.getPosition();
    // int column=data.cfml.getColumn();
    int start = data.srcCode.getPos();
    data.srcCode.next();
    // read in namespace of tag
    TagLib tagLib = nameSpace(data);
    // return if no matching tag lib
    if (tagLib == null) {
        data.srcCode.previous();
        return false;
    }
    // Get matching tag from tag lib
    String strNameNormal = identifier(data.srcCode, false, true);
    if (strNameNormal == null) {
        data.srcCode.setPos((data.srcCode.getPos() - tagLib.getNameSpaceAndSeparator().length()) - 1);
        return false;
    }
    String strName = strNameNormal.toLowerCase();
    String appendix = null;
    TagLibTag tagLibTag = tagLib.getTag(strName);
    // get taglib
    if (tagLibTag == null) {
        tagLibTag = tagLib.getAppendixTag(strName);
        if (tagLibTag == null) {
            if (tagLib.getIgnoreUnknowTags()) {
                data.srcCode.setPos(start);
                return false;
            }
            throw new TemplateException(data.srcCode, "undefined tag [" + tagLib.getNameSpaceAndSeparator() + strName + "]");
        }
        appendix = StringUtil.removeStartingIgnoreCase(strNameNormal, tagLibTag.getName());
    }
    // CFXD Element
    Tag tag;
    try {
        tag = tagLibTag.getTag(data.factory, line, data.srcCode.getPosition());
    } catch (Exception e) {
        throw new TemplateException(data.srcCode, e);
    }
    parent.addStatement(tag);
    // get tag from tag library
    if (appendix != null) {
        tag.setAppendix(appendix);
        tag.setFullname(tagLibTag.getFullName().concat(appendix));
    } else {
        tag.setFullname(tagLibTag.getFullName());
    }
    // if(tag.getFullname().equalsIgnoreCase("cfcomponent"))data.page.setIsComponent(true);	// MUST to hardcoded, to better
    // else if(tag.getFullname().equalsIgnoreCase("cfinterface"))data.page.setIsInterface(true);	// MUST to hardcoded, to better
    tag.setTagLibTag(tagLibTag);
    comment(data.srcCode, true);
    // Tag Translator Evaluator
    if (tagLibTag.hasTTE()) {
        data.ep.add(tagLibTag, tag, data.flibs, data.srcCode);
    }
    // get Attributes
    attributes(data, tagLibTag, tag);
    if (tagLibTag.hasAttributeEvaluator()) {
        try {
            tagLibTag = tagLibTag.getAttributeEvaluator().evaluate(tagLibTag, tag);
        } catch (AttributeEvaluatorException e) {
            throw new TemplateException(data.srcCode, e);
        }
    }
    // TODO muss erlaubt sein
    if (data.srcCode.forwardIfCurrent('>')) {
        hasBody = tagLibTag.getHasBody();
    } else if (data.srcCode.forwardIfCurrent('/', '>')) {
        if (tagLibTag.getHasBody())
            tag.setBody(new BodyBase(data.factory));
    } else {
        throw createTemplateException(data.srcCode, "tag [" + tagLibTag.getFullName() + "] is not closed", tagLibTag);
    }
    // Body
    if (hasBody) {
        // get Body
        if (tagLibTag.isTagDependent()) {
            // get TagDependentBodyTransformer
            TagDependentBodyTransformer tdbt = null;
            try {
                tdbt = tagLibTag.getBodyTransformer();
            } catch (TagLibException e) {
                throw new TemplateException(data.srcCode, e);
            }
            if (tdbt == null)
                throw createTemplateException(data.srcCode, "Tag dependent body Transformer is invalid for Tag [" + tagLibTag.getFullName() + "]", tagLibTag);
            tag.setBody(tdbt.transform(data.factory, data.root, data.ep, data.tlibs, data.flibs, tagLibTag.getFullName(), data.scriptTags, data.srcCode, data.settings));
            // get TagLib of end Tag
            if (!data.srcCode.forwardIfCurrent("</")) {
                // MUST this is a patch, do a more proper implementation
                TemplateException te = new TemplateException(data.srcCode, "invalid construct");
                if (tdbt instanceof CFMLScriptTransformer && ASMUtil.containsComponent(tag.getBody())) {
                    throw new CFMLScriptTransformer.ComponentTemplateException(te);
                }
                throw te;
            }
            TagLib tagLibEnd = nameSpace(data);
            // same NameSpace
            if (!(tagLibEnd != null && tagLibEnd.getNameSpaceAndSeparator().equals(tagLib.getNameSpaceAndSeparator())))
                throw new TemplateException(data.srcCode, "invalid construct");
            // get end Tag
            String strNameEnd = identifier(data.srcCode, true, true).toLowerCase();
            // not the same name Tag
            if (!strName.equals(strNameEnd)) {
                data.srcCode.setPos(start);
                throw new TemplateException(data.srcCode, "Start and End Tag has not the same Name [" + tagLib.getNameSpaceAndSeparator() + strName + "-" + tagLibEnd.getNameSpaceAndSeparator() + strNameEnd + "]");
            }
            data.srcCode.removeSpace();
            if (!data.srcCode.forwardIfCurrent('>'))
                throw new TemplateException(data.srcCode, "End Tag [" + tagLibEnd.getNameSpaceAndSeparator() + strNameEnd + "] not closed");
        } else {
            // get body of Tag
            BodyBase body = new BodyBase(data.factory);
            body.setParent(tag);
            // parseExpression=(tagLibTag.getParseBody())?true:parseExpression;
            if (tagLibTag.getParseBody())
                parseExpression = true;
            while (true) {
                // Load Expession Transformer from TagLib
                ExprTransformer transfomer = null;
                if (parseExpression) {
                    try {
                        transfomer = tagLibTag.getTagLib().getExprTransfomer();
                    } catch (TagLibException e) {
                        throw new TemplateException(data.srcCode, e);
                    }
                }
                // call body
                body(data, body, parseExpression, transfomer);
                // no End Tag
                if (data.srcCode.isAfterLast()) {
                    if (tagLibTag.isBodyReq()) {
                        data.srcCode.setPos(start);
                        throw createTemplateException(data.srcCode, "No matching end tag found for tag [" + tagLibTag.getFullName() + "]", tagLibTag);
                    }
                    body.moveStatmentsTo(parent);
                    return executeEvaluator(data, tagLibTag, tag);
                }
                // Invalid Construct
                int posBeforeEndTag = data.srcCode.getPos();
                if (!data.srcCode.forwardIfCurrent('<', '/'))
                    throw createTemplateException(data.srcCode, "Missing end tag for [" + tagLibTag.getFullName() + "]", tagLibTag);
                // get TagLib of end Tag
                int _start = data.srcCode.getPos();
                TagLib tagLibEnd = nameSpace(data);
                // same NameSpace
                if (tagLibEnd != null) {
                    String strNameEnd = "";
                    // lucee.print.ln(data.cfml.getLine()+" - "+data.cfml.getColumn()+" - "+tagLibEnd.getNameSpaceAndSeperator()+".equals("+tagLib.getNameSpaceAndSeperator()+")");
                    if (tagLibEnd.getNameSpaceAndSeparator().equals(tagLib.getNameSpaceAndSeparator())) {
                        // get end Tag
                        strNameEnd = identifier(data.srcCode, true, true).toLowerCase();
                        // not the same name Tag
                        // new part
                        data.srcCode.removeSpace();
                        if (strName.equals(strNameEnd)) {
                            if (!data.srcCode.forwardIfCurrent('>'))
                                throw new TemplateException(data.srcCode, "End Tag [" + tagLibEnd.getNameSpaceAndSeparator() + strNameEnd + "] not closed");
                            break;
                        }
                    }
                    // new part
                    if (tagLibTag.isBodyReq()) {
                        TagLibTag endTag = tagLibEnd.getTag(strNameEnd);
                        if (endTag != null && !endTag.getHasBody())
                            throw new TemplateException(data.srcCode, "End Tag [" + tagLibEnd.getNameSpaceAndSeparator() + strNameEnd + "] is not allowed, for this tag only a Start Tag is allowed");
                        data.srcCode.setPos(start);
                        if (tagLibEnd.getIgnoreUnknowTags() && (tagLibEnd.getTag(strNameEnd)) == null) {
                            data.srcCode.setPos(_start);
                        } else
                            throw new TemplateException(data.srcCode, "Start and End Tag has not the same Name [" + tagLib.getNameSpaceAndSeparator() + strName + "-" + tagLibEnd.getNameSpaceAndSeparator() + strNameEnd + "]");
                    } else {
                        body.moveStatmentsTo(parent);
                        data.srcCode.setPos(posBeforeEndTag);
                        return executeEvaluator(data, tagLibTag, tag);
                    }
                // / new part
                }
                body.addPrintOut(data.factory, "</", null, null);
            }
            tag.setBody(body);
        }
    }
    if (tag instanceof StatementBase)
        ((StatementBase) tag).setEnd(data.srcCode.getPosition());
    return executeEvaluator(data, tagLibTag, tag);
}
Also used : CFMLScriptTransformer(lucee.transformer.cfml.script.CFMLScriptTransformer) TagLibTag(lucee.transformer.library.tag.TagLibTag) AttributeEvaluatorException(lucee.transformer.cfml.attributes.AttributeEvaluatorException) Position(lucee.transformer.Position) ComponentTemplateException(lucee.transformer.cfml.script.AbstrCFMLScriptTransformer.ComponentTemplateException) TemplateException(lucee.runtime.exp.TemplateException) ComponentTemplateException(lucee.transformer.cfml.script.AbstrCFMLScriptTransformer.ComponentTemplateException) SimpleExprTransformer(lucee.transformer.cfml.expression.SimpleExprTransformer) ExprTransformer(lucee.transformer.cfml.ExprTransformer) LitString(lucee.transformer.expression.literal.LitString) TagLibException(lucee.transformer.library.tag.TagLibException) EvaluatorException(lucee.transformer.cfml.evaluator.EvaluatorException) AttributeEvaluatorException(lucee.transformer.cfml.attributes.AttributeEvaluatorException) ComponentTemplateException(lucee.transformer.cfml.script.AbstrCFMLScriptTransformer.ComponentTemplateException) TagLibException(lucee.transformer.library.tag.TagLibException) TemplateException(lucee.runtime.exp.TemplateException) IOException(java.io.IOException) ApplicationException(lucee.runtime.exp.ApplicationException) ProcessingDirectiveException(lucee.transformer.cfml.evaluator.impl.ProcessingDirectiveException) StatementBase(lucee.transformer.bytecode.statement.StatementBase) TagLib(lucee.transformer.library.tag.TagLib) CustomTagLib(lucee.transformer.library.tag.CustomTagLib) TagLibTag(lucee.transformer.library.tag.TagLibTag) Tag(lucee.transformer.bytecode.statement.tag.Tag) BodyBase(lucee.transformer.bytecode.BodyBase)

Example 12 with Tag

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

the class Component method evaluate.

@Override
public void evaluate(Tag tag, TagLibTag tlt) throws EvaluatorException {
    /*if(tag instanceof TagOther) {
			print.e(((TagOther)tag).getFullname());
		}*/
    TagCIObject tc = (TagCIObject) tag;
    Statement pPage = tag.getParent();
    // String className=tag.getTagLibTag().getTagClassName();
    Page page;
    // move components inside script to root
    if (pPage instanceof Page) {
        page = (Page) pPage;
    } else {
        // is in script
        Tag p = ASMUtil.getParentTag(tag);
        if ((pPage = p.getParent()) instanceof Page && p.getTagLibTag().getName().equalsIgnoreCase(((Page) pPage).getSourceCode().getDialect() == CFMLEngine.DIALECT_CFML ? Constants.CFML_SCRIPT_TAG_NAME : Constants.LUCEE_SCRIPT_TAG_NAME)) {
            // chnaged order of the condition, not sure if this is ok
            page = (Page) pPage;
            // move imports from script to component body
            List<Statement> children = p.getBody().getStatements();
            Iterator<Statement> it = children.iterator();
            Statement stat;
            Tag t;
            while (it.hasNext()) {
                stat = it.next();
                if (!(stat instanceof Tag))
                    continue;
                t = (Tag) stat;
                if (t.getTagLibTag().getName().equals("import")) {
                    tag.getBody().addStatement(t);
                }
            }
            // move to page
            ASMUtil.move(tag, page);
        // if(!inline)ASMUtil.replace(p, tag, false);
        } else
            throw new EvaluatorException("Wrong Context, tag " + tlt.getFullName() + " can't be inside other tags, tag is inside tag " + p.getFullname());
    }
    // Page page=(Page) pPage;
    Boolean insideCITemplate = isInsideCITemplate(page);
    boolean main = isMainComponent(page, tc);
    // is a full grown component or a inline component
    if (insideCITemplate == Boolean.FALSE) {
        throw new EvaluatorException("Wrong Context, " + tlt.getFullName() + " tag must be inside a file with the extension " + Constants.getCFMLComponentExtension() + " or " + Constants.getLuceeComponentExtension());
    }
    // if(count>1)
    // throw new EvaluatorException("inside one cfc file only one tag "+tlt.getFullName()+" is allowed, now we have "+count);
    boolean isComponent = tlt.getTagClassDefinition().isClassNameEqualTo("lucee.runtime.tag.Component");
    /*boolean isInterface="lucee.runtime.tag.Interface".equals(tlt.getTagClassName());
		if(main) {
			if(isComponent)			page.setIsComponent(true);
			else if(isInterface)	page.setIsInterface(true);
		}*/
    tc.setMain(main);
    // Attributes
    // Name
    String name = null;
    if (!main) {
        Map<String, Attribute> attrs = tag.getAttributes();
        if (attrs.size() > 0) {
            Attribute first = attrs.values().iterator().next();
            if (first.isDefaultValue()) {
                name = first.getName();
            }
        }
        if (name == null) {
            Attribute attr = tag.getAttribute("name");
            if (attr != null) {
                Expression expr = tag.getFactory().toExprString(attr.getValue());
                if (!(expr instanceof LitString))
                    throw new EvaluatorException("Name of the component " + tlt.getFullName() + ", must be a literal string value");
                name = ((LitString) expr).getString();
            } else
                throw new EvaluatorException("Missing name of the component " + tlt.getFullName() + "");
        }
        tc.setName(name);
    }
    // output
    // "output=true" is handled in "lucee.transformer.cfml.attributes.impl.Function"
    Attribute attr = tag.getAttribute("output");
    if (attr != null) {
        Expression expr = tag.getFactory().toExprBoolean(attr.getValue());
        if (!(expr instanceof LitBoolean))
            throw new EvaluatorException("Attribute output of the Tag " + tlt.getFullName() + ", must contain a static boolean value (true or false, yes or no)");
    // boolean output = ((LitBoolean)expr).getBooleanValue();
    // if(!output) ASMUtil.removeLiterlChildren(tag, true);
    }
    // extends
    attr = tag.getAttribute("extends");
    if (attr != null) {
        Expression expr = tag.getFactory().toExprString(attr.getValue());
        if (!(expr instanceof LitString))
            throw new EvaluatorException("Attribute extends of the Tag " + tlt.getFullName() + ", must contain a literal string value");
    }
    // implements
    if (isComponent) {
        attr = tag.getAttribute("implements");
        if (attr != null) {
            Expression expr = tag.getFactory().toExprString(attr.getValue());
            if (!(expr instanceof LitString))
                throw new EvaluatorException("Attribute implements of the Tag " + tlt.getFullName() + ", must contain a literal string value");
        }
    }
    // modifier
    if (isComponent) {
        attr = tag.getAttribute("modifier");
        if (attr != null) {
            Expression expr = tag.getFactory().toExprString(attr.getValue());
            if (!(expr instanceof LitString))
                throw new EvaluatorException("Attribute modifier of the Tag " + tlt.getFullName() + ", must contain a literal string value");
            LitString ls = (LitString) expr;
            int mod = ComponentUtil.toModifier(ls.getString(), lucee.runtime.Component.MODIFIER_NONE, -1);
            if (mod == -1)
                throw new EvaluatorException("Value [" + ls.getString() + "] from attribute modifier of the Tag " + tlt.getFullName() + " is invalid,valid values are [none,abstract,final]");
        }
    }
}
Also used : Attribute(lucee.transformer.bytecode.statement.tag.Attribute) Statement(lucee.transformer.bytecode.Statement) Page(lucee.transformer.bytecode.Page) LitBoolean(lucee.transformer.expression.literal.LitBoolean) LitString(lucee.transformer.expression.literal.LitString) LitString(lucee.transformer.expression.literal.LitString) EvaluatorException(lucee.transformer.cfml.evaluator.EvaluatorException) Expression(lucee.transformer.expression.Expression) TagLibTag(lucee.transformer.library.tag.TagLibTag) Tag(lucee.transformer.bytecode.statement.tag.Tag) LitBoolean(lucee.transformer.expression.literal.LitBoolean) TagCIObject(lucee.transformer.bytecode.statement.tag.TagCIObject)

Example 13 with Tag

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

the class Function method throwIfNotEmpty.

public static void throwIfNotEmpty(Tag tag) throws EvaluatorException {
    Body body = tag.getBody();
    List<Statement> statments = body.getStatements();
    Statement stat;
    Iterator<Statement> it = statments.iterator();
    TagLibTag tlt;
    while (it.hasNext()) {
        stat = it.next();
        if (stat instanceof Tag) {
            tlt = ((Tag) stat).getTagLibTag();
            if (!tlt.getTagClassDefinition().isClassNameEqualTo("lucee.runtime.tag.Argument"))
                throw new EvaluatorException("tag " + tlt.getFullName() + " is not allowed inside a function declaration");
        }
    /*else if(stat instanceof PrintOut) {
				//body.remove(stat);
			}*/
    }
}
Also used : TagLibTag(lucee.transformer.library.tag.TagLibTag) EvaluatorException(lucee.transformer.cfml.evaluator.EvaluatorException) Statement(lucee.transformer.bytecode.Statement) TagLibTag(lucee.transformer.library.tag.TagLibTag) Tag(lucee.transformer.bytecode.statement.tag.Tag) StaticBody(lucee.transformer.bytecode.StaticBody) Body(lucee.transformer.bytecode.Body)

Example 14 with Tag

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

the class Query method translateChildren.

private void translateChildren(Iterator it) {
    Statement stat;
    while (it.hasNext()) {
        stat = (Statement) it.next();
        if (stat instanceof PrintOut) {
            PrintOut printOut = ((PrintOut) stat);
            Expression e = printOut.getExpr();
            if (!(e instanceof Literal)) {
                Expression expr = removeCastString(e);
                if (expr instanceof Variable) {
                    // do not preserve BIF PreserveSingleQuotes return value
                    Member member = ((Variable) expr).getFirstMember();
                    if (member instanceof BIF) {
                        BIF bif = (BIF) member;
                        if (bif.getClassDefinition().getClassName().equals(PreserveSingleQuotes.class.getName())) {
                            printOut.setExpr(bif.getArguments()[0].getValue());
                            continue;
                        } else if (bif.getClassDefinition().getClassName().equals(ListQualify.class.getName())) {
                            Argument[] args = bif.getArguments();
                            List<Argument> arr = new ArrayList<Argument>();
                            // first get existing arguments
                            arr.add(args[0]);
                            arr.add(args[1]);
                            if (args.length >= 3)
                                arr.add(args[2]);
                            else
                                arr.add(new Argument(expr.getFactory().createLitString(","), "string"));
                            if (args.length >= 4)
                                arr.add(args[3]);
                            else
                                arr.add(new Argument(expr.getFactory().createLitString("all"), "string"));
                            if (args.length >= 5)
                                arr.add(args[4]);
                            else
                                arr.add(new Argument(expr.getFactory().createLitBoolean(false), "boolean"));
                            // PSQ-BIF DO NOT REMOVE THIS COMMENT
                            arr.add(new Argument(expr.getFactory().createLitBoolean(true), "boolean"));
                            bif.setArguments(arr.toArray(new Argument[arr.size()]));
                            continue;
                        } else if (bif.getClassDefinition().getClassName().equals(QuotedValueList.class.getName()) || bif.getClassDefinition().getClassName().equals(ValueList.class.getName())) {
                            // printOut.setPreserveSingleQuote(false);
                            continue;
                        }
                    }
                    // do not preserve UDF return value
                    member = ((Variable) expr).getLastMember();
                    if (member instanceof UDF)
                        continue;
                }
                printOut.setCheckPSQ(true);
                if (e != expr)
                    printOut.setExpr(expr);
            }
        } else if (stat instanceof Tag) {
            Body b = ((Tag) stat).getBody();
            if (b != null)
                translateChildren(b.getStatements().iterator());
        } else if (stat instanceof Body) {
            translateChildren(((Body) stat).getStatements().iterator());
        }
    }
}
Also used : Variable(lucee.transformer.expression.var.Variable) Argument(lucee.transformer.bytecode.expression.var.Argument) Statement(lucee.transformer.bytecode.Statement) PreserveSingleQuotes(lucee.runtime.functions.other.PreserveSingleQuotes) PrintOut(lucee.transformer.bytecode.statement.PrintOut) Expression(lucee.transformer.expression.Expression) UDF(lucee.transformer.bytecode.expression.var.UDF) Literal(lucee.transformer.expression.literal.Literal) QuotedValueList(lucee.runtime.functions.other.QuotedValueList) ValueList(lucee.runtime.functions.query.ValueList) ArrayList(java.util.ArrayList) List(java.util.List) Tag(lucee.transformer.bytecode.statement.tag.Tag) Member(lucee.transformer.expression.var.Member) Body(lucee.transformer.bytecode.Body) BIF(lucee.transformer.bytecode.expression.var.BIF)

Example 15 with Tag

use of lucee.transformer.bytecode.statement.tag.Tag 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)

Aggregations

Tag (lucee.transformer.bytecode.statement.tag.Tag)21 TagLibTag (lucee.transformer.library.tag.TagLibTag)14 Statement (lucee.transformer.bytecode.Statement)13 Body (lucee.transformer.bytecode.Body)12 Attribute (lucee.transformer.bytecode.statement.tag.Attribute)8 EvaluatorException (lucee.transformer.cfml.evaluator.EvaluatorException)7 ScriptBody (lucee.transformer.bytecode.ScriptBody)6 Position (lucee.transformer.Position)5 LitString (lucee.transformer.expression.literal.LitString)5 BodyBase (lucee.transformer.bytecode.BodyBase)4 PrintOut (lucee.transformer.bytecode.statement.PrintOut)4 Expression (lucee.transformer.expression.Expression)4 TemplateException (lucee.runtime.exp.TemplateException)3 FunctionBody (lucee.transformer.bytecode.FunctionBody)3 HasBody (lucee.transformer.bytecode.statement.HasBody)3 Literal (lucee.transformer.expression.literal.Literal)3 ArrayList (java.util.ArrayList)2 List (java.util.List)2 StaticBody (lucee.transformer.bytecode.StaticBody)2 BIF (lucee.transformer.bytecode.expression.var.BIF)2