33 import static jdk.internal.org.objectweb.asm.Opcodes.H_INVOKEVIRTUAL;
34 import static jdk.nashorn.internal.tools.nasgen.StringConstants.CLINIT;
35 import static jdk.nashorn.internal.tools.nasgen.StringConstants.DEFAULT_INIT_DESC;
36 import static jdk.nashorn.internal.tools.nasgen.StringConstants.GETTER_PREFIX;
37 import static jdk.nashorn.internal.tools.nasgen.StringConstants.GET_CLASS_NAME;
38 import static jdk.nashorn.internal.tools.nasgen.StringConstants.GET_CLASS_NAME_DESC;
39 import static jdk.nashorn.internal.tools.nasgen.StringConstants.INIT;
40 import static jdk.nashorn.internal.tools.nasgen.StringConstants.ACCESSORPROPERTY_CREATE;
41 import static jdk.nashorn.internal.tools.nasgen.StringConstants.ACCESSORPROPERTY_CREATE_DESC;
42 import static jdk.nashorn.internal.tools.nasgen.StringConstants.ACCESSORPROPERTY_TYPE;
43 import static jdk.nashorn.internal.tools.nasgen.StringConstants.LIST_DESC;
44 import static jdk.nashorn.internal.tools.nasgen.StringConstants.ARRAYLIST_TYPE;
45 import static jdk.nashorn.internal.tools.nasgen.StringConstants.ARRAYLIST_INIT_DESC;
46 import static jdk.nashorn.internal.tools.nasgen.StringConstants.COLLECTION_TYPE;
47 import static jdk.nashorn.internal.tools.nasgen.StringConstants.COLLECTION_ADD;
48 import static jdk.nashorn.internal.tools.nasgen.StringConstants.COLLECTION_ADD_DESC;
49 import static jdk.nashorn.internal.tools.nasgen.StringConstants.COLLECTIONS_TYPE;
50 import static jdk.nashorn.internal.tools.nasgen.StringConstants.COLLECTIONS_EMPTY_LIST;
51 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_DESC;
52 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_FIELD_NAME;
53 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_SETISSHARED;
54 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_SETISSHARED_DESC;
55 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_NEWMAP;
56 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_NEWMAP_DESC;
57 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_TYPE;
58 import static jdk.nashorn.internal.tools.nasgen.StringConstants.OBJECT_DESC;
59 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTIONIMPL_MAKEFUNCTION;
60 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTIONIMPL_MAKEFUNCTION_DESC;
61 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTIONIMPL_MAKEFUNCTION_SPECS_DESC;
62 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTIONIMPL_TYPE;
63 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_SETARITY;
64 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_SETARITY_DESC;
65 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_TYPE;
66 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SETTER_PREFIX;
67 import static jdk.nashorn.internal.tools.nasgen.StringConstants.TYPE_OBJECT;
68
69 import java.io.BufferedInputStream;
70 import java.io.FileInputStream;
71 import java.io.IOException;
72 import java.util.List;
73 import jdk.internal.org.objectweb.asm.ClassReader;
74 import jdk.internal.org.objectweb.asm.ClassVisitor;
174 static void emitStaticInitPrefix(final MethodGenerator mi, final String className, final int memberCount) {
175 mi.visitCode();
176 if (memberCount > 0) {
177 // new ArrayList(int)
178 mi.newObject(ARRAYLIST_TYPE);
179 mi.dup();
180 mi.push(memberCount);
181 mi.invokeSpecial(ARRAYLIST_TYPE, INIT, ARRAYLIST_INIT_DESC);
182 // stack: ArrayList
183 } else {
184 // java.util.Collections.EMPTY_LIST
185 mi.getStatic(COLLECTIONS_TYPE, COLLECTIONS_EMPTY_LIST, LIST_DESC);
186 // stack List
187 }
188 }
189
190 static void emitStaticInitSuffix(final MethodGenerator mi, final String className) {
191 // stack: Collection
192 // pmap = PropertyMap.newMap(Collection<Property>);
193 mi.invokeStatic(PROPERTYMAP_TYPE, PROPERTYMAP_NEWMAP, PROPERTYMAP_NEWMAP_DESC);
194 // pmap.setIsShared();
195 mi.invokeVirtual(PROPERTYMAP_TYPE, PROPERTYMAP_SETISSHARED, PROPERTYMAP_SETISSHARED_DESC);
196 // $nasgenmap$ = pmap;
197 mi.putStatic(className, PROPERTYMAP_FIELD_NAME, PROPERTYMAP_DESC);
198 mi.returnVoid();
199 mi.computeMaxs();
200 mi.visitEnd();
201 }
202
203 @SuppressWarnings("fallthrough")
204 private static Type memInfoType(final MemberInfo memInfo) {
205 switch (memInfo.getJavaDesc().charAt(0)) {
206 case 'I': return Type.INT_TYPE;
207 case 'J': return Type.LONG_TYPE;
208 case 'D': return Type.DOUBLE_TYPE;
209 default: assert false : memInfo.getJavaDesc();
210 case 'L': return TYPE_OBJECT;
211 }
212 }
213
214 private static String getterDesc(final MemberInfo memInfo) {
215 return Type.getMethodDescriptor(memInfoType(memInfo));
|
33 import static jdk.internal.org.objectweb.asm.Opcodes.H_INVOKEVIRTUAL;
34 import static jdk.nashorn.internal.tools.nasgen.StringConstants.CLINIT;
35 import static jdk.nashorn.internal.tools.nasgen.StringConstants.DEFAULT_INIT_DESC;
36 import static jdk.nashorn.internal.tools.nasgen.StringConstants.GETTER_PREFIX;
37 import static jdk.nashorn.internal.tools.nasgen.StringConstants.GET_CLASS_NAME;
38 import static jdk.nashorn.internal.tools.nasgen.StringConstants.GET_CLASS_NAME_DESC;
39 import static jdk.nashorn.internal.tools.nasgen.StringConstants.INIT;
40 import static jdk.nashorn.internal.tools.nasgen.StringConstants.ACCESSORPROPERTY_CREATE;
41 import static jdk.nashorn.internal.tools.nasgen.StringConstants.ACCESSORPROPERTY_CREATE_DESC;
42 import static jdk.nashorn.internal.tools.nasgen.StringConstants.ACCESSORPROPERTY_TYPE;
43 import static jdk.nashorn.internal.tools.nasgen.StringConstants.LIST_DESC;
44 import static jdk.nashorn.internal.tools.nasgen.StringConstants.ARRAYLIST_TYPE;
45 import static jdk.nashorn.internal.tools.nasgen.StringConstants.ARRAYLIST_INIT_DESC;
46 import static jdk.nashorn.internal.tools.nasgen.StringConstants.COLLECTION_TYPE;
47 import static jdk.nashorn.internal.tools.nasgen.StringConstants.COLLECTION_ADD;
48 import static jdk.nashorn.internal.tools.nasgen.StringConstants.COLLECTION_ADD_DESC;
49 import static jdk.nashorn.internal.tools.nasgen.StringConstants.COLLECTIONS_TYPE;
50 import static jdk.nashorn.internal.tools.nasgen.StringConstants.COLLECTIONS_EMPTY_LIST;
51 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_DESC;
52 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_FIELD_NAME;
53 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_NEWMAP;
54 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_NEWMAP_DESC;
55 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_TYPE;
56 import static jdk.nashorn.internal.tools.nasgen.StringConstants.OBJECT_DESC;
57 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTIONIMPL_MAKEFUNCTION;
58 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTIONIMPL_MAKEFUNCTION_DESC;
59 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTIONIMPL_MAKEFUNCTION_SPECS_DESC;
60 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTIONIMPL_TYPE;
61 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_SETARITY;
62 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_SETARITY_DESC;
63 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_TYPE;
64 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SETTER_PREFIX;
65 import static jdk.nashorn.internal.tools.nasgen.StringConstants.TYPE_OBJECT;
66
67 import java.io.BufferedInputStream;
68 import java.io.FileInputStream;
69 import java.io.IOException;
70 import java.util.List;
71 import jdk.internal.org.objectweb.asm.ClassReader;
72 import jdk.internal.org.objectweb.asm.ClassVisitor;
172 static void emitStaticInitPrefix(final MethodGenerator mi, final String className, final int memberCount) {
173 mi.visitCode();
174 if (memberCount > 0) {
175 // new ArrayList(int)
176 mi.newObject(ARRAYLIST_TYPE);
177 mi.dup();
178 mi.push(memberCount);
179 mi.invokeSpecial(ARRAYLIST_TYPE, INIT, ARRAYLIST_INIT_DESC);
180 // stack: ArrayList
181 } else {
182 // java.util.Collections.EMPTY_LIST
183 mi.getStatic(COLLECTIONS_TYPE, COLLECTIONS_EMPTY_LIST, LIST_DESC);
184 // stack List
185 }
186 }
187
188 static void emitStaticInitSuffix(final MethodGenerator mi, final String className) {
189 // stack: Collection
190 // pmap = PropertyMap.newMap(Collection<Property>);
191 mi.invokeStatic(PROPERTYMAP_TYPE, PROPERTYMAP_NEWMAP, PROPERTYMAP_NEWMAP_DESC);
192 // $nasgenmap$ = pmap;
193 mi.putStatic(className, PROPERTYMAP_FIELD_NAME, PROPERTYMAP_DESC);
194 mi.returnVoid();
195 mi.computeMaxs();
196 mi.visitEnd();
197 }
198
199 @SuppressWarnings("fallthrough")
200 private static Type memInfoType(final MemberInfo memInfo) {
201 switch (memInfo.getJavaDesc().charAt(0)) {
202 case 'I': return Type.INT_TYPE;
203 case 'J': return Type.LONG_TYPE;
204 case 'D': return Type.DOUBLE_TYPE;
205 default: assert false : memInfo.getJavaDesc();
206 case 'L': return TYPE_OBJECT;
207 }
208 }
209
210 private static String getterDesc(final MemberInfo memInfo) {
211 return Type.getMethodDescriptor(memInfoType(memInfo));
|