diff options
author | sundar <none@none> | 2013-10-10 21:43:35 +0200 |
---|---|---|
committer | sundar <none@none> | 2013-10-10 21:43:35 +0200 |
commit | 383bc3aab9e7dd5cc57242c5f594d2e155f24bab (patch) | |
tree | 51a61d2e00e68855f578d66e71e8cfbea7c4fcd1 /src/jdk/nashorn/internal/runtime/RecompilableScriptFunctionData.java | |
parent | 12924053eda948499618a71fd30db10186c3ce7a (diff) | |
download | jdk8u_nashorn-383bc3aab9e7dd5cc57242c5f594d2e155f24bab.tar.gz |
8026264: Getter, setter function name mangling issues
Reviewed-by: lagergren, jlaskey
Diffstat (limited to 'src/jdk/nashorn/internal/runtime/RecompilableScriptFunctionData.java')
-rw-r--r-- | src/jdk/nashorn/internal/runtime/RecompilableScriptFunctionData.java | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/jdk/nashorn/internal/runtime/RecompilableScriptFunctionData.java b/src/jdk/nashorn/internal/runtime/RecompilableScriptFunctionData.java index fee04970..ef9324d9 100644 --- a/src/jdk/nashorn/internal/runtime/RecompilableScriptFunctionData.java +++ b/src/jdk/nashorn/internal/runtime/RecompilableScriptFunctionData.java @@ -33,6 +33,7 @@ import java.lang.invoke.MethodType; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; +import jdk.internal.dynalink.support.NameCodec; import jdk.nashorn.internal.codegen.Compiler; import jdk.nashorn.internal.codegen.CompilerConstants; @@ -100,9 +101,7 @@ public final class RecompilableScriptFunctionData extends ScriptFunctionData { * @param allocatorMap allocator map to seed instances with, when constructing */ public RecompilableScriptFunctionData(final FunctionNode functionNode, final CodeInstaller<ScriptEnvironment> installer, final String allocatorClassName, final PropertyMap allocatorMap) { - super(functionNode.isAnonymous() ? - "" : - functionNode.getIdent().getName(), + super(functionName(functionNode), functionNode.getParameters().size(), functionNode.isStrict(), false, @@ -139,6 +138,20 @@ public final class RecompilableScriptFunctionData extends ScriptFunctionData { return sb.toString() + super.toString(); } + private static String functionName(final FunctionNode fn) { + if (fn.isAnonymous()) { + return ""; + } else { + final FunctionNode.Kind kind = fn.getKind(); + if (kind == FunctionNode.Kind.GETTER || kind == FunctionNode.Kind.SETTER) { + final String name = NameCodec.decode(fn.getIdent().getName()); + return name.substring(4); // 4 is "get " or "set " + } else { + return fn.getIdent().getName(); + } + } + } + private static long tokenFor(final FunctionNode fn) { final int position = Token.descPosition(fn.getFirstToken()); final int length = Token.descPosition(fn.getLastToken()) - position + Token.descLength(fn.getLastToken()); |