< prev index next >

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

Print this page




  25 
  26 package jdk.nashorn.internal.tools.nasgen;
  27 
  28 import static jdk.internal.org.objectweb.asm.Opcodes.ACC_FINAL;
  29 import static jdk.internal.org.objectweb.asm.Opcodes.ACC_PUBLIC;
  30 import static jdk.internal.org.objectweb.asm.Opcodes.H_INVOKESTATIC;
  31 import static jdk.internal.org.objectweb.asm.Opcodes.V1_7;
  32 import static jdk.nashorn.internal.tools.nasgen.StringConstants.CONSTRUCTOR_SUFFIX;
  33 import static jdk.nashorn.internal.tools.nasgen.StringConstants.DEFAULT_INIT_DESC;
  34 import static jdk.nashorn.internal.tools.nasgen.StringConstants.INIT;
  35 import static jdk.nashorn.internal.tools.nasgen.StringConstants.OBJECT_DESC;
  36 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_DESC;
  37 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_FIELD_NAME;
  38 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROTOTYPEOBJECT_SETCONSTRUCTOR;
  39 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROTOTYPEOBJECT_SETCONSTRUCTOR_DESC;
  40 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROTOTYPEOBJECT_TYPE;
  41 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_INIT_DESC3;
  42 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_INIT_DESC4;
  43 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_SETARITY;
  44 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_SETARITY_DESC;


  45 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_SETPROTOTYPE;
  46 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_SETPROTOTYPE_DESC;
  47 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_TYPE;
  48 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTOBJECT_INIT_DESC;
  49 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTOBJECT_TYPE;
  50 
  51 import java.io.FileOutputStream;
  52 import java.io.IOException;
  53 import java.util.List;
  54 import jdk.internal.org.objectweb.asm.Handle;
  55 
  56 /**
  57  * This class generates constructor class for a @ScriptClass annotated class.
  58  *
  59  */
  60 public class ConstructorGenerator extends ClassGenerator {
  61     private final ScriptClassInfo scriptClassInfo;
  62     private final String className;
  63     private final MemberInfo constructor;
  64     private final int memberCount;


 141     private void emitConstructor() {
 142         final MethodGenerator mi = makeConstructor();
 143         mi.visitCode();
 144         callSuper(mi);
 145 
 146         if (memberCount > 0) {
 147             // initialize Function type fields
 148             initFunctionFields(mi);
 149             // initialize data fields
 150             initDataFields(mi);
 151         }
 152 
 153         if (constructor != null) {
 154             initPrototype(mi);
 155             final int arity = constructor.getArity();
 156             if (arity != MemberInfo.DEFAULT_ARITY) {
 157                 mi.loadThis();
 158                 mi.push(arity);
 159                 mi.invokeVirtual(SCRIPTFUNCTION_TYPE, SCRIPTFUNCTION_SETARITY,
 160                         SCRIPTFUNCTION_SETARITY_DESC);







 161             }
 162         }
 163         mi.returnVoid();
 164         mi.computeMaxs();
 165         mi.visitEnd();
 166     }
 167 
 168     private void loadMap(final MethodGenerator mi) {
 169         if (memberCount > 0) {
 170             mi.getStatic(className, PROPERTYMAP_FIELD_NAME, PROPERTYMAP_DESC);
 171         }
 172     }
 173 
 174     private void callSuper(final MethodGenerator mi) {
 175         String superClass, superDesc;
 176         mi.loadThis();
 177         if (constructor == null) {
 178             // call ScriptObject.<init>
 179             superClass = SCRIPTOBJECT_TYPE;
 180             superDesc = (memberCount > 0) ? SCRIPTOBJECT_INIT_DESC : DEFAULT_INIT_DESC;




  25 
  26 package jdk.nashorn.internal.tools.nasgen;
  27 
  28 import static jdk.internal.org.objectweb.asm.Opcodes.ACC_FINAL;
  29 import static jdk.internal.org.objectweb.asm.Opcodes.ACC_PUBLIC;
  30 import static jdk.internal.org.objectweb.asm.Opcodes.H_INVOKESTATIC;
  31 import static jdk.internal.org.objectweb.asm.Opcodes.V1_7;
  32 import static jdk.nashorn.internal.tools.nasgen.StringConstants.CONSTRUCTOR_SUFFIX;
  33 import static jdk.nashorn.internal.tools.nasgen.StringConstants.DEFAULT_INIT_DESC;
  34 import static jdk.nashorn.internal.tools.nasgen.StringConstants.INIT;
  35 import static jdk.nashorn.internal.tools.nasgen.StringConstants.OBJECT_DESC;
  36 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_DESC;
  37 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROPERTYMAP_FIELD_NAME;
  38 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROTOTYPEOBJECT_SETCONSTRUCTOR;
  39 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROTOTYPEOBJECT_SETCONSTRUCTOR_DESC;
  40 import static jdk.nashorn.internal.tools.nasgen.StringConstants.PROTOTYPEOBJECT_TYPE;
  41 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_INIT_DESC3;
  42 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_INIT_DESC4;
  43 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_SETARITY;
  44 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_SETARITY_DESC;
  45 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_SETDOCUMENTATION;
  46 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_SETDOCUMENTATION_DESC;
  47 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_SETPROTOTYPE;
  48 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_SETPROTOTYPE_DESC;
  49 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTFUNCTION_TYPE;
  50 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTOBJECT_INIT_DESC;
  51 import static jdk.nashorn.internal.tools.nasgen.StringConstants.SCRIPTOBJECT_TYPE;
  52 
  53 import java.io.FileOutputStream;
  54 import java.io.IOException;
  55 import java.util.List;
  56 import jdk.internal.org.objectweb.asm.Handle;
  57 
  58 /**
  59  * This class generates constructor class for a @ScriptClass annotated class.
  60  *
  61  */
  62 public class ConstructorGenerator extends ClassGenerator {
  63     private final ScriptClassInfo scriptClassInfo;
  64     private final String className;
  65     private final MemberInfo constructor;
  66     private final int memberCount;


 143     private void emitConstructor() {
 144         final MethodGenerator mi = makeConstructor();
 145         mi.visitCode();
 146         callSuper(mi);
 147 
 148         if (memberCount > 0) {
 149             // initialize Function type fields
 150             initFunctionFields(mi);
 151             // initialize data fields
 152             initDataFields(mi);
 153         }
 154 
 155         if (constructor != null) {
 156             initPrototype(mi);
 157             final int arity = constructor.getArity();
 158             if (arity != MemberInfo.DEFAULT_ARITY) {
 159                 mi.loadThis();
 160                 mi.push(arity);
 161                 mi.invokeVirtual(SCRIPTFUNCTION_TYPE, SCRIPTFUNCTION_SETARITY,
 162                         SCRIPTFUNCTION_SETARITY_DESC);
 163             }
 164             final String doc = constructor.getDocumentation();
 165             if (doc != null) {
 166                 mi.loadThis();
 167                 mi.loadLiteral(doc);
 168                 mi.invokeVirtual(SCRIPTFUNCTION_TYPE, SCRIPTFUNCTION_SETDOCUMENTATION,
 169                         SCRIPTFUNCTION_SETDOCUMENTATION_DESC);
 170             }
 171         }
 172         mi.returnVoid();
 173         mi.computeMaxs();
 174         mi.visitEnd();
 175     }
 176 
 177     private void loadMap(final MethodGenerator mi) {
 178         if (memberCount > 0) {
 179             mi.getStatic(className, PROPERTYMAP_FIELD_NAME, PROPERTYMAP_DESC);
 180         }
 181     }
 182 
 183     private void callSuper(final MethodGenerator mi) {
 184         String superClass, superDesc;
 185         mi.loadThis();
 186         if (constructor == null) {
 187             // call ScriptObject.<init>
 188             superClass = SCRIPTOBJECT_TYPE;
 189             superDesc = (memberCount > 0) ? SCRIPTOBJECT_INIT_DESC : DEFAULT_INIT_DESC;


< prev index next >