001/**
002 *
003 * Copyright (c) 2014, the Railo Company Ltd. All rights reserved.
004 *
005 * This library is free software; you can redistribute it and/or
006 * modify it under the terms of the GNU Lesser General Public
007 * License as published by the Free Software Foundation; either 
008 * version 2.1 of the License, or (at your option) any later version.
009 * 
010 * This library is distributed in the hope that it will be useful,
011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
013 * Lesser General Public License for more details.
014 * 
015 * You should have received a copy of the GNU Lesser General Public 
016 * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
017 * 
018 **/
019package lucee.transformer.bytecode.util;
020
021import org.objectweb.asm.Type;
022import org.objectweb.asm.commons.Method;
023
024public final class Methods_Operator {
025
026        public static final Method OPERATOR_EQV_BV_BV=new Method(
027                                                                                                "eqv",
028                                                                                                Types.BOOLEAN_VALUE,
029                                                                                                new Type[]{Types.BOOLEAN_VALUE,Types.BOOLEAN_VALUE}
030                                                                                        );
031
032        public static final Method OPERATOR_IMP_BV_BV=new Method(
033                                                                                                "imp",
034                                                                                                Types.BOOLEAN_VALUE,
035                                                                                                new Type[]{Types.BOOLEAN_VALUE,Types.BOOLEAN_VALUE}
036                                                                                        );
037
038        public static final Method OPERATOR_CT=new Method(
039                                                                                                "ct",
040                                                                                                Types.BOOLEAN_VALUE,
041                                                                                                new Type[]{Types.OBJECT,Types.OBJECT}
042                                                                                        );
043        public static final Method OPERATOR_EEQ=new Method(
044                        "eeq",
045                        Types.BOOLEAN_VALUE,
046                        new Type[]{Types.OBJECT,Types.OBJECT}
047                );
048        public static final Method OPERATOR_NEEQ=new Method(
049                        "neeq",
050                        Types.BOOLEAN_VALUE,
051                        new Type[]{Types.OBJECT,Types.OBJECT}
052                );
053
054        public static final Method OPERATOR_NCT=new Method(
055                                                                                                "nct",
056                                                                                                Types.BOOLEAN_VALUE,
057                                                                                                new Type[]{Types.OBJECT,Types.OBJECT}
058                                                                                        );
059        
060        // double exponent(double left, double right)
061        
062        
063    public static final Method[][] OPERATORS=new Method[][]{
064        // Object    
065        new Method[] {
066                        new Method("compare",Types.INT_VALUE,new Type[]{Types.OBJECT,Types.OBJECT}),
067                        new Method("compare",Types.INT_VALUE,new Type[]{Types.OBJECT,Types.BOOLEAN_VALUE}),
068                        new Method("compare",Types.INT_VALUE,new Type[]{Types.OBJECT,Types.DOUBLE_VALUE}),
069                        new Method("compare",Types.INT_VALUE,new Type[]{Types.OBJECT,Types.STRING})
070        },
071        // boolean    
072        new Method[] {
073                        new Method("compare",Types.INT_VALUE,new Type[]{Types.BOOLEAN_VALUE,Types.OBJECT}),
074                        new Method("compare",Types.INT_VALUE,new Type[]{Types.BOOLEAN_VALUE,Types.BOOLEAN_VALUE}),
075                        new Method("compare",Types.INT_VALUE,new Type[]{Types.BOOLEAN_VALUE,Types.DOUBLE_VALUE}),
076                        new Method("compare",Types.INT_VALUE,new Type[]{Types.BOOLEAN_VALUE,Types.STRING})
077        },
078        // double    
079        new Method[] {
080                        new Method("compare",Types.INT_VALUE,new Type[]{Types.DOUBLE_VALUE,Types.OBJECT}),
081                        new Method("compare",Types.INT_VALUE,new Type[]{Types.DOUBLE_VALUE,Types.BOOLEAN_VALUE}),
082                        new Method("compare",Types.INT_VALUE,new Type[]{Types.DOUBLE_VALUE,Types.DOUBLE_VALUE}),
083                        new Method("compare",Types.INT_VALUE,new Type[]{Types.DOUBLE_VALUE,Types.STRING})
084        },
085        // String    
086        new Method[] {
087                        new Method("compare",Types.INT_VALUE,new Type[]{Types.STRING,Types.OBJECT}),
088                        new Method("compare",Types.INT_VALUE,new Type[]{Types.STRING,Types.BOOLEAN_VALUE}),
089                        new Method("compare",Types.INT_VALUE,new Type[]{Types.STRING,Types.DOUBLE_VALUE}),
090                        new Method("compare",Types.INT_VALUE,new Type[]{Types.STRING,Types.STRING})
091        }
092    };
093}