diff options
Diffstat (limited to 'buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/ScriptClassInfoCollector.java')
-rw-r--r-- | buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/ScriptClassInfoCollector.java | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/ScriptClassInfoCollector.java b/buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/ScriptClassInfoCollector.java index 5561cfbf..aa477621 100644 --- a/buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/ScriptClassInfoCollector.java +++ b/buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/ScriptClassInfoCollector.java @@ -27,7 +27,6 @@ package jdk.nashorn.internal.tools.nasgen; import static jdk.nashorn.internal.tools.nasgen.ScriptClassInfo.SCRIPT_CLASS_ANNO_DESC; import static jdk.nashorn.internal.tools.nasgen.ScriptClassInfo.WHERE_ENUM_DESC; - import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; @@ -41,6 +40,7 @@ import jdk.internal.org.objectweb.asm.ClassVisitor; import jdk.internal.org.objectweb.asm.FieldVisitor; import jdk.internal.org.objectweb.asm.MethodVisitor; import jdk.internal.org.objectweb.asm.Opcodes; +import jdk.internal.org.objectweb.asm.Type; import jdk.nashorn.internal.objects.annotations.Where; import jdk.nashorn.internal.tools.nasgen.MemberInfo.Kind; @@ -194,6 +194,7 @@ public class ScriptClassInfoCollector extends ClassVisitor { final MemberInfo memInfo = new MemberInfo(); + //annokind == e.g. GETTER or SPECIALIZED_FUNCTION memInfo.setKind(annoKind); memInfo.setJavaName(methodName); memInfo.setJavaDesc(methodDesc); @@ -208,12 +209,18 @@ public class ScriptClassInfoCollector extends ClassVisitor { private Integer attributes; private Integer arity; private Where where; + private boolean isSpecializedConstructor; + private boolean isOptimistic; + private Type linkLogicClass = MethodGenerator.EMPTY_LINK_LOGIC_TYPE; @Override public void visit(final String annotationName, final Object annotationValue) { switch (annotationName) { case "name": this.name = (String)annotationValue; + if (name.isEmpty()) { + name = null; + } break; case "attributes": this.attributes = (Integer)annotationValue; @@ -221,6 +228,17 @@ public class ScriptClassInfoCollector extends ClassVisitor { case "arity": this.arity = (Integer)annotationValue; break; + case "isConstructor": + assert annoKind == Kind.SPECIALIZED_FUNCTION; + this.isSpecializedConstructor = (Boolean)annotationValue; + break; + case "isOptimistic": + assert annoKind == Kind.SPECIALIZED_FUNCTION; + this.isOptimistic = (Boolean)annotationValue; + break; + case "linkLogic": + this.linkLogicClass = (Type)annotationValue; + break; default: break; } @@ -230,12 +248,19 @@ public class ScriptClassInfoCollector extends ClassVisitor { @Override public void visitEnum(final String enumName, final String desc, final String enumValue) { - if ("where".equals(enumName) && WHERE_ENUM_DESC.equals(desc)) { - this.where = Where.valueOf(enumValue); + switch (enumName) { + case "where": + if (WHERE_ENUM_DESC.equals(desc)) { + this.where = Where.valueOf(enumValue); + } + break; + default: + break; } super.visitEnum(enumName, desc, enumValue); } + @SuppressWarnings("fallthrough") @Override public void visitEnd() { super.visitEnd(); @@ -256,7 +281,6 @@ public class ScriptClassInfoCollector extends ClassVisitor { case SETTER: where = Where.INSTANCE; break; - case SPECIALIZED_CONSTRUCTOR: case CONSTRUCTOR: where = Where.CONSTRUCTOR; break; @@ -264,12 +288,18 @@ public class ScriptClassInfoCollector extends ClassVisitor { where = Where.PROTOTYPE; break; case SPECIALIZED_FUNCTION: - //TODO is this correct + if (isSpecializedConstructor) { + where = Where.CONSTRUCTOR; + } + //fallthru default: break; } } memInfo.setWhere(where); + memInfo.setLinkLogicClass(linkLogicClass); + memInfo.setIsSpecializedConstructor(isSpecializedConstructor); + memInfo.setIsOptimistic(isOptimistic); } }; } |