Search in sources :

Example 1 with Function

use of org.apache.xpath.functions.Function in project robovm by robovm.

the class Compiler method compileExtension.

/**
   * Compile an extension function.
   * 
   * @param opPos The current position in the m_opMap array.
   *
   * @return reference to {@link org.apache.xpath.functions.FuncExtFunction} instance.
   *
   * @throws TransformerException if a error occurs creating the Expression.
   */
private Expression compileExtension(int opPos) throws TransformerException {
    int endExtFunc = opPos + getOp(opPos + 1) - 1;
    opPos = getFirstChildPos(opPos);
    java.lang.String ns = (java.lang.String) getTokenQueue().elementAt(getOp(opPos));
    opPos++;
    java.lang.String funcName = (java.lang.String) getTokenQueue().elementAt(getOp(opPos));
    opPos++;
    // We create a method key to uniquely identify this function so that we
    // can cache the object needed to invoke it.  This way, we only pay the
    // reflection overhead on the first call.
    Function extension = new FuncExtFunction(ns, funcName, String.valueOf(getNextMethodId()));
    try {
        int i = 0;
        while (opPos < endExtFunc) {
            int nextOpPos = getNextOpPos(opPos);
            extension.setArg(this.compile(opPos), i);
            opPos = nextOpPos;
            i++;
        }
    } catch (WrongNumberArgsException wnae) {
        // should never happen
        ;
    }
    return extension;
}
Also used : FuncExtFunction(org.apache.xpath.functions.FuncExtFunction) Function(org.apache.xpath.functions.Function) WrongNumberArgsException(org.apache.xpath.functions.WrongNumberArgsException) XString(org.apache.xpath.objects.XString) FuncExtFunction(org.apache.xpath.functions.FuncExtFunction)

Example 2 with Function

use of org.apache.xpath.functions.Function in project robovm by robovm.

the class Compiler method compileFunction.

/**
   * Compile a built-in XPath function.
   * 
   * @param opPos The current position in the m_opMap array.
   *
   * @return reference to {@link org.apache.xpath.functions.Function} instance.
   *
   * @throws TransformerException if a error occurs creating the Expression.
   */
Expression compileFunction(int opPos) throws TransformerException {
    int endFunc = opPos + getOp(opPos + 1) - 1;
    opPos = getFirstChildPos(opPos);
    int funcID = getOp(opPos);
    opPos++;
    if (-1 != funcID) {
        Function func = m_functionTable.getFunction(funcID);
        if (func instanceof FuncExtFunctionAvailable)
            ((FuncExtFunctionAvailable) func).setFunctionTable(m_functionTable);
        func.postCompileStep(this);
        try {
            int i = 0;
            for (int p = opPos; p < endFunc; p = getNextOpPos(p), i++) {
                // System.out.println("argPos: "+ p);
                // System.out.println("argCode: "+ m_opMap[p]);
                func.setArg(compile(p), i);
            }
            func.checkNumberArgs(i);
        } catch (WrongNumberArgsException wnae) {
            java.lang.String name = m_functionTable.getFunctionName(funcID);
            m_errorHandler.fatalError(new TransformerException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_ONLY_ALLOWS, new Object[] { name, wnae.getMessage() }), m_locator));
        //"name + " only allows " + wnae.getMessage() + " arguments", m_locator));
        }
        return func;
    } else {
        //"function token not found.");
        error(XPATHErrorResources.ER_FUNCTION_TOKEN_NOT_FOUND, null);
        return null;
    }
}
Also used : FuncExtFunction(org.apache.xpath.functions.FuncExtFunction) Function(org.apache.xpath.functions.Function) WrongNumberArgsException(org.apache.xpath.functions.WrongNumberArgsException) FuncExtFunctionAvailable(org.apache.xpath.functions.FuncExtFunctionAvailable) XString(org.apache.xpath.objects.XString) TransformerException(javax.xml.transform.TransformerException)

Example 3 with Function

use of org.apache.xpath.functions.Function in project j2objc by google.

the class Compiler method compileExtension.

/**
   * Compile an extension function.
   * 
   * @param opPos The current position in the m_opMap array.
   *
   * @return reference to {@link org.apache.xpath.functions.FuncExtFunction} instance.
   *
   * @throws TransformerException if a error occurs creating the Expression.
   */
private Expression compileExtension(int opPos) throws TransformerException {
    int endExtFunc = opPos + getOp(opPos + 1) - 1;
    opPos = getFirstChildPos(opPos);
    java.lang.String ns = (java.lang.String) getTokenQueue().elementAt(getOp(opPos));
    opPos++;
    java.lang.String funcName = (java.lang.String) getTokenQueue().elementAt(getOp(opPos));
    opPos++;
    // We create a method key to uniquely identify this function so that we
    // can cache the object needed to invoke it.  This way, we only pay the
    // reflection overhead on the first call.
    Function extension = new FuncExtFunction(ns, funcName, String.valueOf(getNextMethodId()));
    try {
        int i = 0;
        while (opPos < endExtFunc) {
            int nextOpPos = getNextOpPos(opPos);
            extension.setArg(this.compile(opPos), i);
            opPos = nextOpPos;
            i++;
        }
    } catch (WrongNumberArgsException wnae) {
        // should never happen
        ;
    }
    return extension;
}
Also used : FuncExtFunction(org.apache.xpath.functions.FuncExtFunction) Function(org.apache.xpath.functions.Function) WrongNumberArgsException(org.apache.xpath.functions.WrongNumberArgsException) XString(org.apache.xpath.objects.XString) FuncExtFunction(org.apache.xpath.functions.FuncExtFunction)

Example 4 with Function

use of org.apache.xpath.functions.Function in project j2objc by google.

the class Compiler method compileFunction.

/**
   * Compile a built-in XPath function.
   * 
   * @param opPos The current position in the m_opMap array.
   *
   * @return reference to {@link org.apache.xpath.functions.Function} instance.
   *
   * @throws TransformerException if a error occurs creating the Expression.
   */
Expression compileFunction(int opPos) throws TransformerException {
    int endFunc = opPos + getOp(opPos + 1) - 1;
    opPos = getFirstChildPos(opPos);
    int funcID = getOp(opPos);
    opPos++;
    if (-1 != funcID) {
        Function func = m_functionTable.getFunction(funcID);
        if (func instanceof FuncExtFunctionAvailable)
            ((FuncExtFunctionAvailable) func).setFunctionTable(m_functionTable);
        func.postCompileStep(this);
        try {
            int i = 0;
            for (int p = opPos; p < endFunc; p = getNextOpPos(p), i++) {
                // System.out.println("argPos: "+ p);
                // System.out.println("argCode: "+ m_opMap[p]);
                func.setArg(compile(p), i);
            }
            func.checkNumberArgs(i);
        } catch (WrongNumberArgsException wnae) {
            java.lang.String name = m_functionTable.getFunctionName(funcID);
            m_errorHandler.fatalError(new TransformerException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_ONLY_ALLOWS, new Object[] { name, wnae.getMessage() }), m_locator));
        //"name + " only allows " + wnae.getMessage() + " arguments", m_locator));
        }
        return func;
    } else {
        //"function token not found.");
        error(XPATHErrorResources.ER_FUNCTION_TOKEN_NOT_FOUND, null);
        return null;
    }
}
Also used : FuncExtFunction(org.apache.xpath.functions.FuncExtFunction) Function(org.apache.xpath.functions.Function) WrongNumberArgsException(org.apache.xpath.functions.WrongNumberArgsException) FuncExtFunctionAvailable(org.apache.xpath.functions.FuncExtFunctionAvailable) XString(org.apache.xpath.objects.XString) TransformerException(javax.xml.transform.TransformerException)

Aggregations

FuncExtFunction (org.apache.xpath.functions.FuncExtFunction)4 Function (org.apache.xpath.functions.Function)4 WrongNumberArgsException (org.apache.xpath.functions.WrongNumberArgsException)4 XString (org.apache.xpath.objects.XString)4 TransformerException (javax.xml.transform.TransformerException)2 FuncExtFunctionAvailable (org.apache.xpath.functions.FuncExtFunctionAvailable)2