}
private ExpressionNode rewriteHVLookup( ExpressionNodeForFunction _fun )
{
final Function fun = _fun.getFunction();
final ExpressionNode valueNode = _fun.argument( 0 );
final ExpressionNodeForArrayReference arrayNode = (ExpressionNodeForArrayReference) _fun.argument( 1 );
final ExpressionNode indexNode = _fun.argument( 2 );
final ExpressionNode lookupArrayNode = getHVLookupSubArray( fun, arrayNode, 0 );
final ExpressionNode matchNode;
final Function matchFun = (indexNode instanceof ExpressionNodeForConstantValue) ? INTERNAL_MATCH_INT : MATCH;
if (_fun.cardinality() >= 4) {
final ExpressionNode typeNode = _fun.argument( 3 );
matchNode = new ExpressionNodeForFunction( matchFun, valueNode, lookupArrayNode, typeNode );
}
else {