src/jdk/nashorn/internal/codegen/Namespace.java
Print this page
rev 1345 : 8047365: Very long function names break codegen
Reviewed-by: attila, lagergren
*** 23,32 ****
--- 23,34 ----
* questions.
*/
package jdk.nashorn.internal.codegen;
+ import static jdk.nashorn.internal.codegen.MethodEmitter.LARGE_STRING_THRESHOLD;
+
import java.util.HashMap;
/**
* A name space hierarchy, where each level holds a name directory with
* names that may be unique for each level.
*** 64,94 ****
public Namespace getParent() {
return parent;
}
/**
! * Create a uniqueName name in the namespace in the form base$n where n varies
! * .
! * @param base Base of name. Base will be returned if uniqueName.
*
* @return Generated uniqueName name.
*/
public String uniqueName(final String base) {
for (Namespace namespace = this; namespace != null; namespace = namespace.getParent()) {
final HashMap<String, Integer> namespaceDirectory = namespace.directory;
! final Integer counter = namespaceDirectory.get(base);
if (counter != null) {
final int count = counter + 1;
! namespaceDirectory.put(base, count);
! return base + '-' + count;
}
}
! directory.put(base, 0);
! return base;
}
@Override
public String toString() {
return directory.toString();
--- 66,97 ----
public Namespace getParent() {
return parent;
}
/**
! * Create a uniqueName name in the namespace in the form base$n where n varies.
! * Also truncates very long names that would otherwise break ASM.
*
+ * @param base Base of name. Base will be returned if uniqueName.
* @return Generated uniqueName name.
*/
public String uniqueName(final String base) {
+ final String truncatedBase = base.length() > LARGE_STRING_THRESHOLD ? base.substring(0, LARGE_STRING_THRESHOLD) : base;
for (Namespace namespace = this; namespace != null; namespace = namespace.getParent()) {
final HashMap<String, Integer> namespaceDirectory = namespace.directory;
! final Integer counter = namespaceDirectory.get(truncatedBase);
if (counter != null) {
final int count = counter + 1;
! namespaceDirectory.put(truncatedBase, count);
! return truncatedBase + '-' + count;
}
}
! directory.put(truncatedBase, 0);
! return truncatedBase;
}
@Override
public String toString() {
return directory.toString();