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 ) ; /** * It is a trick for function-available. Since the function table is an * instance field, insert this table at compilation time for later usage */ 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 { error ( XPATHErrorResources . ER_FUNCTION_TOKEN_NOT_FOUND , null ) ; //"function token not found."); return null ; } }
Compile a built - in XPath function .