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_Caster {
025    
026    public static final int OBJECT=0;
027    public static final int BOOLEAN=1;
028    public static final int DOUBLE=2;
029    public static final int STRING=3;
030    
031    // lucee.runtime.type.Array toArray (Object)
032    final public static Method TO_ARRAY = new Method("toArray",
033                        Types.ARRAY,
034                        new Type[]{Types.OBJECT});
035    
036    final public static Method TO_IMAGE = new Method("toImage",
037                        Types.IMAGE,
038                        new Type[]{Types.OBJECT,Types.PAGE_CONTEXT});
039    
040    // String toBase64 (Object)
041    final public static Method TO_BASE64 = new Method("toBase64",
042                        Types.STRING,
043                        new Type[]{Types.OBJECT}); 
044    // byte[] toBinary(Object)
045    final public static Method TO_BINARY = new Method("toBinary",
046                        Types.BYTE_VALUE_ARRAY,
047                        new Type[]{Types.OBJECT});
048    // lucee.runtime.type.Collection toCollection (Object)
049    final public static Method TO_COLLECTION = new Method("toCollection",
050                        Types.COLLECTION,
051                        new Type[]{Types.OBJECT});
052        // lucee.runtime.Component toComponent (Object)
053        final public static Method TO_COMPONENT = new Method("toComponent",
054                        Types.COMPONENT,
055                        new Type[]{Types.OBJECT});
056    //java.io.File toFile (Object)
057    final public static Method TO_FILE = new Method("toFile",
058                        Types.FILE,
059                        new Type[]{Types.OBJECT});
060    // org.w3c.dom.Node toNode (Object)
061    final public static Method TO_NODE = new Method("toNode",
062                        Types.NODE,
063                        new Type[]{Types.OBJECT});
064    // Object toNull (Object)
065    final public static Method TO_NULL = new Method("toNull",
066                        Types.OBJECT,
067                        new Type[]{Types.OBJECT});
068    // lucee.runtime.type.Query toQuery (Object)
069    final public static Method TO_QUERY = new Method("toQuery",
070                        Types.QUERY,
071                        new Type[]{Types.OBJECT}); 
072    // lucee.runtime.type.Query toQueryColumn (Object)
073    final public static Method TO_QUERY_COLUMN = new Method("toQueryColumn",
074                        Types.QUERY_COLUMN,
075                        new Type[]{Types.OBJECT,Types.PAGE_CONTEXT}); 
076    // lucee.runtime.type.Struct toStruct (Object)
077    final public static Method TO_STRUCT = new Method("toStruct",
078                        Types.STRUCT,
079                        new Type[]{Types.OBJECT});
080    // lucee.runtime.type.dt.TimeSpan toTimespan (Object)
081    final public static Method TO_TIMESPAN = new Method("toTimespan",
082                        Types.TIMESPAN,
083                        new Type[]{Types.OBJECT});
084    
085
086    public static final Method TO_STRING_BUFFER=
087        new Method("toStringBuffer",Types.STRING_BUFFER,new Type[]{Types.OBJECT});
088    
089    //
090    public static final Method[] TO_DECIMAL=new Method[]{
091        new Method("toDecimal",Types.STRING,new Type[]{Types.OBJECT}),
092        new Method("toDecimal",Types.STRING,new Type[]{Types.BOOLEAN_VALUE}),
093        new Method("toDecimal",Types.STRING,new Type[]{Types.DOUBLE_VALUE}),
094        new Method("toDecimal",Types.STRING,new Type[]{Types.STRING})
095    };
096    
097    public static final Method[] TO_DATE=new Method[]{
098        new Method("toDate",Types.DATE_TIME,new Type[]{Types.OBJECT,Types.TIMEZONE}),
099        new Method("toDate",Types.DATE_TIME,new Type[]{Types.BOOLEAN_VALUE,Types.TIMEZONE}),
100        new Method("toDate",Types.DATE_TIME,new Type[]{Types.DOUBLE_VALUE,Types.TIMEZONE}),
101        new Method("toDate",Types.DATE_TIME,new Type[]{Types.STRING,Types.TIMEZONE})
102    };
103    
104    public static final Method[] TO_STRING=new Method[]{
105        new Method("toString",Types.STRING,new Type[]{Types.OBJECT}),
106        new Method("toString",Types.STRING,new Type[]{Types.BOOLEAN_VALUE}),
107        new Method("toString",Types.STRING,new Type[]{Types.DOUBLE_VALUE}),
108        new Method("toString",Types.STRING,new Type[]{Types.STRING})
109    };
110    
111    public static final Method[] TO_BOOLEAN=new Method[]{
112        new Method("toBoolean",Types.BOOLEAN,new Type[]{Types.OBJECT}),
113        new Method("toBoolean",Types.BOOLEAN,new Type[]{Types.BOOLEAN_VALUE}),
114        new Method("toBoolean",Types.BOOLEAN,new Type[]{Types.DOUBLE_VALUE}),
115        new Method("toBoolean",Types.BOOLEAN,new Type[]{Types.STRING})
116    };
117    
118    public static final Method[] TO_BOOLEAN_VALUE=new Method[]{
119        new Method("toBooleanValue",Types.BOOLEAN_VALUE,new Type[]{Types.OBJECT}),
120        new Method("toBooleanValue",Types.BOOLEAN_VALUE,new Type[]{Types.BOOLEAN_VALUE}),
121        new Method("toBooleanValue",Types.BOOLEAN_VALUE,new Type[]{Types.DOUBLE_VALUE}),
122        new Method("toBooleanValue",Types.BOOLEAN_VALUE,new Type[]{Types.STRING})
123    };
124    
125    public static final Method[] TO_BYTE=new Method[]{
126        new Method("toByte",Types.BYTE,new Type[]{Types.OBJECT}),
127        new Method("toByte",Types.BYTE,new Type[]{Types.BOOLEAN_VALUE}),
128        new Method("toByte",Types.BYTE,new Type[]{Types.DOUBLE_VALUE}),
129        new Method("toByte",Types.BYTE,new Type[]{Types.STRING})
130    };
131    
132    public static final Method[] TO_BYTE_VALUE=new Method[]{
133        new Method("toByteValue",Types.BYTE_VALUE,new Type[]{Types.OBJECT}),
134        new Method("toByteValue",Types.BYTE_VALUE,new Type[]{Types.BOOLEAN_VALUE}),
135        new Method("toByteValue",Types.BYTE_VALUE,new Type[]{Types.DOUBLE_VALUE}),
136        new Method("toByteValue",Types.BYTE_VALUE,new Type[]{Types.STRING})
137    };
138    
139    public static final Method[] TO_CHARACTER=new Method[]{
140        new Method("toCharacter",Types.CHARACTER,new Type[]{Types.OBJECT}),
141        new Method("toCharacter",Types.CHARACTER,new Type[]{Types.BOOLEAN_VALUE}),
142        new Method("toCharacter",Types.CHARACTER,new Type[]{Types.DOUBLE_VALUE}),
143        new Method("toCharacter",Types.CHARACTER,new Type[]{Types.STRING})
144    };
145    
146    public static final Method[] TO_CHAR_VALUE=new Method[]{
147        new Method("toCharValue",Types.CHAR,new Type[]{Types.OBJECT}),
148        new Method("toCharValue",Types.CHAR,new Type[]{Types.BOOLEAN_VALUE}),
149        new Method("toCharValue",Types.CHAR,new Type[]{Types.DOUBLE_VALUE}),
150        new Method("toCharValue",Types.CHAR,new Type[]{Types.STRING})
151    };
152    
153    public static final Method[] TO_SHORT=new Method[]{
154        new Method("toShort",Types.SHORT,new Type[]{Types.OBJECT}),
155        new Method("toShort",Types.SHORT,new Type[]{Types.BOOLEAN_VALUE}),
156        new Method("toShort",Types.SHORT,new Type[]{Types.DOUBLE_VALUE}),
157        new Method("toShort",Types.SHORT,new Type[]{Types.STRING})
158    };
159    
160    public static final Method[] TO_SHORT_VALUE=new Method[]{
161        new Method("toShortValue",Types.SHORT_VALUE,new Type[]{Types.OBJECT}),
162        new Method("toShortValue",Types.SHORT_VALUE,new Type[]{Types.BOOLEAN_VALUE}),
163        new Method("toShortValue",Types.SHORT_VALUE,new Type[]{Types.DOUBLE_VALUE}),
164        new Method("toShortValue",Types.SHORT_VALUE,new Type[]{Types.STRING})
165    };
166    
167    public static final Method[] TO_INTEGER=new Method[]{
168        new Method("toInteger",Types.INTEGER,new Type[]{Types.OBJECT}),
169        new Method("toInteger",Types.INTEGER,new Type[]{Types.BOOLEAN_VALUE}),
170        new Method("toInteger",Types.INTEGER,new Type[]{Types.DOUBLE_VALUE}),
171        new Method("toInteger",Types.INTEGER,new Type[]{Types.STRING})
172    };
173    
174    public static final Method[] TO_INT_VALUE=new Method[]{
175        new Method("toIntValue",Types.INT_VALUE,new Type[]{Types.OBJECT}),
176        new Method("toIntValue",Types.INT_VALUE,new Type[]{Types.BOOLEAN_VALUE}),
177        new Method("toIntValue",Types.INT_VALUE,new Type[]{Types.DOUBLE_VALUE}),
178        new Method("toIntValue",Types.INT_VALUE,new Type[]{Types.STRING})
179    };
180    
181    public static final Method[] TO_LONG=new Method[]{
182        new Method("toLong",Types.LONG,new Type[]{Types.OBJECT}),
183        new Method("toLong",Types.LONG,new Type[]{Types.BOOLEAN_VALUE}),
184        new Method("toLong",Types.LONG,new Type[]{Types.DOUBLE_VALUE}),
185        new Method("toLong",Types.LONG,new Type[]{Types.STRING})
186    };
187    
188    public static final Method[] TO_LONG_VALUE=new Method[]{
189        new Method("toLongValue",Types.LONG_VALUE,new Type[]{Types.OBJECT}),
190        new Method("toLongValue",Types.LONG_VALUE,new Type[]{Types.BOOLEAN_VALUE}),
191        new Method("toLongValue",Types.LONG_VALUE,new Type[]{Types.DOUBLE_VALUE}),
192        new Method("toLongValue",Types.LONG_VALUE,new Type[]{Types.STRING})
193    };
194    
195    public static final Method[] TO_FLOAT=new Method[]{
196        new Method("toFloat",Types.FLOAT,new Type[]{Types.OBJECT}),
197        new Method("toFloat",Types.FLOAT,new Type[]{Types.BOOLEAN_VALUE}),
198        new Method("toFloat",Types.FLOAT,new Type[]{Types.DOUBLE_VALUE}),
199        new Method("toFloat",Types.FLOAT,new Type[]{Types.STRING})
200    };
201    
202    public static final Method[] TO_FLOAT_VALUE=new Method[]{
203        new Method("toFloatValue",Types.FLOAT_VALUE,new Type[]{Types.OBJECT}),
204        new Method("toFloatValue",Types.FLOAT_VALUE,new Type[]{Types.BOOLEAN_VALUE}),
205        new Method("toFloatValue",Types.FLOAT_VALUE,new Type[]{Types.DOUBLE_VALUE}),
206        new Method("toFloatValue",Types.FLOAT_VALUE,new Type[]{Types.STRING})
207    };
208    
209    public static final Method[] TO_DOUBLE=new Method[]{
210        new Method("toDouble",Types.DOUBLE,new Type[]{Types.OBJECT}),
211        new Method("toDouble",Types.DOUBLE,new Type[]{Types.BOOLEAN_VALUE}),
212        new Method("toDouble",Types.DOUBLE,new Type[]{Types.DOUBLE_VALUE}),
213        new Method("toDouble",Types.DOUBLE,new Type[]{Types.STRING})
214    };
215    
216    public static final Method[] TO_DOUBLE_VALUE=new Method[]{
217        new Method("toDoubleValue",Types.DOUBLE_VALUE,new Type[]{Types.OBJECT}),
218        new Method("toDoubleValue",Types.DOUBLE_VALUE,new Type[]{Types.BOOLEAN_VALUE}),
219        new Method("toDoubleValue",Types.DOUBLE_VALUE,new Type[]{Types.DOUBLE_VALUE}),
220        new Method("toDoubleValue",Types.DOUBLE_VALUE,new Type[]{Types.STRING})
221    };
222
223}