3737import java .util .regex .Matcher ;
3838import java .util .regex .Pattern ;
3939
40- import jdk .vm .ci .meta .JavaKind ;
4140import org .graalvm .compiler .graph .Node .NodeIntrinsic ;
4241import org .graalvm .compiler .java .LambdaUtils ;
4342import org .graalvm .compiler .nodes .BreakpointNode ;
@@ -300,11 +299,13 @@ public static String uniqueShortName(String loaderNameAndId, ResolvedJavaType de
300299 }
301300
302301 public static String toolFriendlyMangle (ResolvedJavaMethod m ) {
302+ /*-
303+ *
303304 if (false) {
304305 return elfMangle(m.getDeclaringClass(), m.getName(), m.getSignature(), m.isConstructor());
305- } else {
306- return bfdMangle (m .getDeclaringClass (), m .getName (), m .getSignature (), m .isConstructor ());
307306 }
307+ */
308+ return bfdMangle (m .getDeclaringClass (), m .getName (), m .getSignature (), m .isConstructor ());
308309 }
309310
310311 public static String classLoaderNameAndId (ClassLoader loader ) {
@@ -460,13 +461,12 @@ public static String elfMangle(ResolvedJavaType declaringClass, String methodNam
460461 return sb .toString ();
461462 }
462463
463-
464464 /**
465465 * mangle a method name in a format the binutils demangler will understand. This should allow
466- * all Linux tools to translate mangled symbol names to recognisable Java names in the same format
467- * as derived from the DWARF info, i.e. fully qualified classname using '.' separator, method name
468- * separated using '::' and parameter/return types printed either using the Java primitive name
469- * or, for oops, as a pointer to a struct whose name is that of the Java type.
466+ * all Linux tools to translate mangled symbol names to recognisable Java names in the same
467+ * format as derived from the DWARF info, i.e. fully qualified classname using '.' separator,
468+ * method name separated using '::' and parameter/return types printed either using the Java
469+ * primitive name or, for oops, as a pointer to a struct whose name is that of the Java type.
470470 *
471471 * @param declaringClass the class owning the method implementation
472472 * @param methodName the simple name of the method
@@ -635,10 +635,12 @@ public static String bfdMangle(ResolvedJavaType declaringClass, String methodNam
635635 private static class BFDMangler {
636636 final StringBuilder sb ;
637637 final List <String > prefixes ;
638- public BFDMangler () {
638+
639+ BFDMangler () {
639640 sb = new StringBuilder ("_Z" );
640- prefixes = new ArrayList <String >();
641+ prefixes = new ArrayList <>();
641642 }
643+
642644 public String mangle (ResolvedJavaType declaringClass , String methodName , Signature methodSignature , boolean isConstructor ) {
643645 String fqn = declaringClass .toJavaName ();
644646 if (isConstructor ) {
@@ -658,10 +660,12 @@ public String mangle(ResolvedJavaType declaringClass, String methodName, Signatu
658660 mangleParams (methodSignature );
659661 return sb .toString ();
660662 }
663+
661664 private void mangleSimpleName (String s ) {
662665 sb .append (s .length ());
663666 sb .append (s );
664667 }
668+
665669 private void manglePrefix (String prefix ) {
666670 int index = prefixIdx (prefix );
667671 if (index >= 0 ) {
@@ -671,30 +675,18 @@ private void manglePrefix(String prefix) {
671675 recordPrefix (prefix );
672676 }
673677 }
678+
674679 private void mangleClassAndMethodName (String name , String methodName ) {
675680 sb .append ('N' );
676- mangleClassName (name , true );
681+ mangleClassName (name );
677682 mangleMethodName (methodName );
678683 sb .append ('E' );
679684 }
680- private void mangleClassName (String name , boolean asPrefix ) {
681- /*
682- * This code generates package elements separately as though they were namespaces
683- * meaning that we get '::' as the separator
684- String[] elements = name.split("\\.");
685- int count = elements.length;
686- for (int i = 0; i < count - 1; i++) {
687- manglePrefix(elements[i]);
688- }
689- if (asPrefix) {
690- manglePrefix(elements[count - 1]);
691- } else {
692- mangleSimpleName(elements[count - 1]);
693- }
694- */
685+
686+ private void mangleClassName (String name ) {
695687 /*
696- * This code generates the FQN of the class including '.' separators as a prefix
697- * meaning we only see the '::' separator between class FQN and method name
688+ * This code generates the FQN of the class including '.' separators as a prefix meaning
689+ * we only see the '::' separator between class FQN and method name
698690 */
699691 manglePrefix (name );
700692 }
@@ -708,6 +700,7 @@ private void mangleReturnType(Signature methodSignature) {
708700 sb .append ('J' );
709701 mangleType (type );
710702 }
703+
711704 private void mangleParams (Signature methodSignature ) {
712705 int count = methodSignature .getParameterCount (false );
713706 for (int i = 0 ; i < count ; i ++) {
@@ -718,6 +711,7 @@ private void mangleParams(Signature methodSignature) {
718711 mangleTypeChar ('V' );
719712 }
720713 }
714+
721715 private void mangleType (ResolvedJavaType type ) {
722716 if (type .isPrimitive ()) {
723717 manglePrimitiveType (type );
@@ -726,18 +720,11 @@ private void mangleType(ResolvedJavaType type) {
726720 mangleArrayType (type );
727721 } else {
728722 sb .append ('P' );
729- mangleClassName (type .toJavaName (), false );
723+ mangleClassName (type .toJavaName ());
730724 }
731725 }
732726
733727 private void mangleArrayType (ResolvedJavaType arrayType ) {
734- /*
735- * This code mangles the type as an Array<T> template
736- manglePrefix("JArray");
737- sb.append('I');
738- mangleType(arrayType.getComponentType());
739- sb.append('E');
740- */
741728 /*
742729 * This code mangles the array name as a symbol using the array base type and required
743730 * number of '[]' pairs.
@@ -799,7 +786,8 @@ private void mangleTypeChar(char c) {
799786
800787 private void writePrefix (int i ) {
801788 sb .append ('S' );
802- // i = 0 has no digits, i = 1 -> 0, ... i = 10 -> 9, i = 11 -> A, ... i = 36 -> Z, i = 37 -> 10, ...
789+ // i = 0 has no digits, i = 1 -> 0, ... i = 10 -> 9, i = 11 -> A, ... i = 36 -> Z, i =
790+ // 37 -> 10, ...
803791 // allow for at most up 2 base 36 digits
804792 if (i > 36 ) {
805793 sb .append (b36 ((i - 1 ) / 36 ));
@@ -810,13 +798,14 @@ private void writePrefix(int i) {
810798 sb .append ('_' );
811799 }
812800
813- private char b36 (int i ) {
801+ private static char b36 (int i ) {
814802 if (i < 10 ) {
815- return (char )('0' + i );
803+ return (char ) ('0' + i );
816804 } else {
817- return (char )('A' + (i - 10 ));
805+ return (char ) ('A' + (i - 10 ));
818806 }
819807 }
808+
820809 private void recordPrefix (String prefix ) {
821810 prefixes .add (prefix );
822811 }
0 commit comments