< prev index next >

buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/ClassGenerator.java

Print this page




  42 import static jdk.nashorn.internal.tools.nasgen.StringConstants.COLLECTION_ADD;
  43 import static jdk.nashorn.internal.tools.nasgen.StringConstants.COLLECTION_ADD_DESC;
  44 import static jdk.nashorn.internal.tools.nasgen.StringConstants.COLLECTION_TYPE;
  45 import static jdk.nashorn.internal.tools.nasgen.StringConstants.DEFAULT_INIT_DESC;
  46 import static jdk.nashorn.internal.tools.nasgen.StringConstants.GETTER_PREFIX;
  47 import static jdk.nashorn.internal.tools.nasgen.StringConstants.GET_CLASS_NAME;
  48 import static jdk.nashorn.internal.tools.nasgen.StringConstants.GET_CLASS_NAME_DESC;
  49 import static jdk.nashorn.internal.tools.nasgen.StringConstants.INIT;
  50 import static jdk.nashorn.internal.tools.nasgen.StringConstants.LIST_DESC;
  51 import static jdk.nashorn.internal.tools.nasgen.StringConstants.OBJECT_DESC;
  52 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_DESC;
  53 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_FIELD_NAME;
  54 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_NEWMAP;
  55 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_NEWMAP_DESC;
  56 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_TYPE;
  57 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_CREATEBUILTIN;
  58 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_CREATEBUILTIN_DESC;
  59 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_CREATEBUILTIN_SPECS_DESC;
  60 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_SETARITY;
  61 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_SETARITY_DESC;


  62 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_TYPE;
  63 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SETTER_PREFIX;
  64 import static jdk.nashorn.internal.tools.nasgen.StringConstants.TYPE_OBJECT;
  65 
  66 import java.io.BufferedInputStream;
  67 import java.io.FileInputStream;
  68 import java.io.IOException;
  69 import java.util.List;
  70 import jdk.internal.org.objectweb.asm.ClassReader;
  71 import jdk.internal.org.objectweb.asm.ClassVisitor;
  72 import jdk.internal.org.objectweb.asm.ClassWriter;
  73 import jdk.internal.org.objectweb.asm.FieldVisitor;
  74 import jdk.internal.org.objectweb.asm.Handle;
  75 import jdk.internal.org.objectweb.asm.MethodVisitor;
  76 import jdk.internal.org.objectweb.asm.Type;
  77 import jdk.nashorn.internal.tools.nasgen.MemberInfo.Kind;
  78 
  79 /**
  80  * Base class for class generator classes.
  81  *


 273     }
 274 
 275     static void newFunction(final MethodGenerator mi, final String className, final MemberInfo memInfo, final List<MemberInfo> specs) {
 276         final boolean arityFound = (memInfo.getArity() != MemberInfo.DEFAULT_ARITY);
 277 
 278         mi.loadLiteral(memInfo.getName());
 279         mi.visitLdcInsn(new Handle(H_INVOKESTATIC, className, memInfo.getJavaName(), memInfo.getJavaDesc()));
 280 
 281         assert specs != null;
 282         if (!specs.isEmpty()) {
 283             mi.memberInfoArray(className, specs);
 284             mi.invokeStatic(SCRIPTFUNCTION_TYPE, SCRIPTFUNCTION_CREATEBUILTIN, SCRIPTFUNCTION_CREATEBUILTIN_SPECS_DESC);
 285         } else {
 286             mi.invokeStatic(SCRIPTFUNCTION_TYPE, SCRIPTFUNCTION_CREATEBUILTIN, SCRIPTFUNCTION_CREATEBUILTIN_DESC);
 287         }
 288 
 289         if (arityFound) {
 290             mi.dup();
 291             mi.push(memInfo.getArity());
 292             mi.invokeVirtual(SCRIPTFUNCTION_TYPE, SCRIPTFUNCTION_SETARITY, SCRIPTFUNCTION_SETARITY_DESC);







 293         }
 294     }
 295 
 296     static void linkerAddGetterSetter(final MethodGenerator mi, final String className, final MemberInfo memInfo) {
 297         final String propertyName = memInfo.getName();
 298         // stack: Collection
 299         // dup of Collection instance
 300         mi.dup();
 301 
 302         // property = AccessorProperty.create(key, flags, getter, setter);
 303         mi.loadLiteral(propertyName);
 304         // setup flags
 305         mi.push(memInfo.getAttributes());
 306         // setup getter method handle
 307         String javaName = GETTER_PREFIX + memInfo.getJavaName();
 308         mi.visitLdcInsn(new Handle(H_INVOKEVIRTUAL, className, javaName, getterDesc(memInfo)));
 309         // setup setter method handle
 310         if (memInfo.isFinal()) {
 311             mi.pushNull();
 312         } else {




  42 import static jdk.nashorn.internal.tools.nasgen.StringConstants.COLLECTION_ADD;
  43 import static jdk.nashorn.internal.tools.nasgen.StringConstants.COLLECTION_ADD_DESC;
  44 import static jdk.nashorn.internal.tools.nasgen.StringConstants.COLLECTION_TYPE;
  45 import static jdk.nashorn.internal.tools.nasgen.StringConstants.DEFAULT_INIT_DESC;
  46 import static jdk.nashorn.internal.tools.nasgen.StringConstants.GETTER_PREFIX;
  47 import static jdk.nashorn.internal.tools.nasgen.StringConstants.GET_CLASS_NAME;
  48 import static jdk.nashorn.internal.tools.nasgen.StringConstants.GET_CLASS_NAME_DESC;
  49 import static jdk.nashorn.internal.tools.nasgen.StringConstants.INIT;
  50 import static jdk.nashorn.internal.tools.nasgen.StringConstants.LIST_DESC;
  51 import static jdk.nashorn.internal.tools.nasgen.StringConstants.OBJECT_DESC;
  52 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_DESC;
  53 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_FIELD_NAME;
  54 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_NEWMAP;
  55 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_NEWMAP_DESC;
  56 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_TYPE;
  57 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_CREATEBUILTIN;
  58 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_CREATEBUILTIN_DESC;
  59 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_CREATEBUILTIN_SPECS_DESC;
  60 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_SETARITY;
  61 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_SETARITY_DESC;
  62 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_SETDOCUMENTATION;
  63 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_SETDOCUMENTATION_DESC;
  64 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_TYPE;
  65 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SETTER_PREFIX;
  66 import static jdk.nashorn.internal.tools.nasgen.StringConstants.TYPE_OBJECT;
  67 
  68 import java.io.BufferedInputStream;
  69 import java.io.FileInputStream;
  70 import java.io.IOException;
  71 import java.util.List;
  72 import jdk.internal.org.objectweb.asm.ClassReader;
  73 import jdk.internal.org.objectweb.asm.ClassVisitor;
  74 import jdk.internal.org.objectweb.asm.ClassWriter;
  75 import jdk.internal.org.objectweb.asm.FieldVisitor;
  76 import jdk.internal.org.objectweb.asm.Handle;
  77 import jdk.internal.org.objectweb.asm.MethodVisitor;
  78 import jdk.internal.org.objectweb.asm.Type;
  79 import jdk.nashorn.internal.tools.nasgen.MemberInfo.Kind;
  80 
  81 /**
  82  * Base class for class generator classes.
  83  *


 275     }
 276 
 277     static void newFunction(final MethodGenerator mi, final String className, final MemberInfo memInfo, final List<MemberInfo> specs) {
 278         final boolean arityFound = (memInfo.getArity() != MemberInfo.DEFAULT_ARITY);
 279 
 280         mi.loadLiteral(memInfo.getName());
 281         mi.visitLdcInsn(new Handle(H_INVOKESTATIC, className, memInfo.getJavaName(), memInfo.getJavaDesc()));
 282 
 283         assert specs != null;
 284         if (!specs.isEmpty()) {
 285             mi.memberInfoArray(className, specs);
 286             mi.invokeStatic(SCRIPTFUNCTION_TYPE, SCRIPTFUNCTION_CREATEBUILTIN, SCRIPTFUNCTION_CREATEBUILTIN_SPECS_DESC);
 287         } else {
 288             mi.invokeStatic(SCRIPTFUNCTION_TYPE, SCRIPTFUNCTION_CREATEBUILTIN, SCRIPTFUNCTION_CREATEBUILTIN_DESC);
 289         }
 290 
 291         if (arityFound) {
 292             mi.dup();
 293             mi.push(memInfo.getArity());
 294             mi.invokeVirtual(SCRIPTFUNCTION_TYPE, SCRIPTFUNCTION_SETARITY, SCRIPTFUNCTION_SETARITY_DESC);
 295         }
 296 
 297         String doc = memInfo.getDocumentation();
 298         if (doc != null) {
 299             mi.dup();
 300             mi.loadLiteral(memInfo.getDocumentation());
 301             mi.invokeVirtual(SCRIPTFUNCTION_TYPE, SCRIPTFUNCTION_SETDOCUMENTATION, SCRIPTFUNCTION_SETDOCUMENTATION_DESC);
 302         }
 303     }
 304 
 305     static void linkerAddGetterSetter(final MethodGenerator mi, final String className, final MemberInfo memInfo) {
 306         final String propertyName = memInfo.getName();
 307         // stack: Collection
 308         // dup of Collection instance
 309         mi.dup();
 310 
 311         // property = AccessorProperty.create(key, flags, getter, setter);
 312         mi.loadLiteral(propertyName);
 313         // setup flags
 314         mi.push(memInfo.getAttributes());
 315         // setup getter method handle
 316         String javaName = GETTER_PREFIX + memInfo.getJavaName();
 317         mi.visitLdcInsn(new Handle(H_INVOKEVIRTUAL, className, javaName, getterDesc(memInfo)));
 318         // setup setter method handle
 319         if (memInfo.isFinal()) {
 320             mi.pushNull();
 321         } else {


< prev index next >