private static final String[] TYPE_SUFFIXES = { "Descending", "Exact", "Ascending" };
private void compileMatch( ExpressionNodeForFunction _node, int _type ) throws CompilerException
{
final ExpressionNode valNode = _node.argument( 0 );
final ExpressionNodeForArrayReference arrayNode = (ExpressionNodeForArrayReference) _node.argument( 1 );
if (valNode.getDataType() != arrayNode.getDataType()) {
throw new CompilerException.UnsupportedExpression(
"MATCH must have the same type of argument in the first and second slot." );
}
final int type = (_type > 0) ? +1 : (_type < 0) ? -1 : 0;
final ExpressionCompilerForNumbers numCompiler = method().numericCompiler();
final ExpressionCompiler valCompiler = method().expressionCompiler( valNode.getDataType() );
final ArrayAccessorCompiler acc = section().getArrayAccessorForFullData( arrayNode );
// return Runtime.fun_MATCH_xy( val, vals [, env] );
final boolean needEnv = (valNode.getDataType() == DataType.STRING && type != 0);
final String envDescriptor = needEnv ? ByteCodeEngineCompiler.ENV_DESC : "";
valCompiler.compile( valNode );
mv().loadThis();
acc.compileCall( mv() );
if (needEnv) {