Created
March 24, 2011 02:21
-
-
Save calavera/884436 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From b366b503ba091d345b37484b62a11700dec37dd5 Mon Sep 17 00:00:00 2001 | |
From: David Calavera <[email protected]> | |
Date: Wed, 23 Mar 2011 19:09:47 -0700 | |
Subject: [PATCH] fix JRUBY-5638: jrubyc path output | |
--- | |
lib/ruby/site_ruby/shared/jruby/compiler.rb | 12 ++++++-- | |
src/org/jruby/util/JavaNameMangler.java | 36 +++++++++++++++----------- | |
2 files changed, 30 insertions(+), 18 deletions(-) | |
diff --git a/lib/ruby/site_ruby/shared/jruby/compiler.rb b/lib/ruby/site_ruby/shared/jruby/compiler.rb | |
index 6610ddc..240d47a 100644 | |
--- a/lib/ruby/site_ruby/shared/jruby/compiler.rb | |
+++ b/lib/ruby/site_ruby/shared/jruby/compiler.rb | |
@@ -23,7 +23,8 @@ module JRuby::Compiler | |
:classpath => [], | |
:javac_options => [], | |
:sha1 => false, | |
- :handles => false | |
+ :handles => false, | |
+ :preserve_paths => false | |
} | |
end | |
module_function :default_options | |
@@ -75,6 +76,10 @@ module JRuby::Compiler | |
options[:handles] = true | |
end | |
+ opts.on('--preserve-paths', 'Do not mangle class paths') do | |
+ options[:preserve_paths] = true | |
+ end | |
+ | |
opts.parse!(argv) | |
end | |
@@ -98,7 +103,8 @@ module JRuby::Compiler | |
:javac_options => javac_options, | |
:classpath => classpath, | |
:sha1 => false, | |
- :handles => false | |
+ :handles => false, | |
+ :preserve_paths => false | |
) | |
end | |
module_function :compile_files | |
@@ -120,7 +126,7 @@ module JRuby::Compiler | |
if options[:sha1] | |
pathname = "ruby.jit.FILE_" + Digest::SHA1.hexdigest(File.read(filename)).upcase | |
else | |
- pathname = Mangler.mangle_filename_for_classpath(filename, options[:basedir], options[:prefix]) | |
+ pathname = Mangler.mangle_filename_for_classpath(filename, options[:basedir], options[:prefix], true, options[:preserve_paths]) | |
end | |
inspector = org.jruby.compiler.ASTInspector.new | |
diff --git a/src/org/jruby/util/JavaNameMangler.java b/src/org/jruby/util/JavaNameMangler.java | |
index de6b7c5..b98c719 100644 | |
--- a/src/org/jruby/util/JavaNameMangler.java | |
+++ b/src/org/jruby/util/JavaNameMangler.java | |
@@ -15,24 +15,25 @@ import java.util.regex.Pattern; | |
*/ | |
public class JavaNameMangler { | |
public static final Pattern PATH_SPLIT = Pattern.compile("[/\\\\]"); | |
- | |
+ | |
public static String mangledFilenameForStartupClasspath(String filename) { | |
if (filename.equals("-e")) { | |
return "ruby/__dash_e__"; | |
} | |
- | |
+ | |
return mangleFilenameForClasspath(filename, null, "", false); | |
} | |
- | |
+ | |
public static String mangleFilenameForClasspath(String filename) { | |
return mangleFilenameForClasspath(filename, null, "ruby"); | |
} | |
- | |
+ | |
public static String mangleFilenameForClasspath(String filename, String parent, String prefix) { | |
- return mangleFilenameForClasspath(filename, parent, prefix, true); | |
+ return mangleFilenameForClasspath(filename, parent, prefix, true, false); | |
} | |
- | |
- public static String mangleFilenameForClasspath(String filename, String parent, String prefix, boolean canonicalize) { | |
+ | |
+ public static String mangleFilenameForClasspath(String filename, String parent, String prefix, boolean canonicalize, | |
+ boolean preserveIdentifiers) { | |
try { | |
String classPath = ""; | |
if(filename.indexOf("!") != -1) { | |
@@ -74,25 +75,30 @@ public class JavaNameMangler { | |
int parentLength = parentPath.length(); | |
classPath = classPath.substring(parentLength); | |
} | |
- | |
+ | |
String[] pathElements = PATH_SPLIT.split(classPath); | |
StringBuilder newPath = new StringBuilder(prefix); | |
- | |
+ | |
for (String element : pathElements) { | |
if (element.length() <= 0) { | |
continue; | |
} | |
- | |
+ | |
if (newPath.length() > 0) { | |
newPath.append("/"); | |
} | |
- | |
+ | |
if (!Character.isJavaIdentifierStart(element.charAt(0))) { | |
newPath.append("$"); | |
} | |
- newPath.append(mangleStringForCleanJavaIdentifier(element)); | |
+ | |
+ String pathId = element; | |
+ if (!preserveIdentifiers) { | |
+ pathId = mangleStringForCleanJavaIdentifier(element); | |
+ } | |
+ newPath.append(pathId); | |
} | |
- | |
+ | |
// strip off "_dot_rb" for .rb files | |
int dotRbIndex = newPath.indexOf("_dot_rb"); | |
if (dotRbIndex != -1 && dotRbIndex == newPath.length() - 7) { | |
@@ -105,7 +111,7 @@ public class JavaNameMangler { | |
throw new RuntimeException(ioe); | |
} | |
} | |
- | |
+ | |
public static String mangleStringForCleanJavaIdentifier(String name) { | |
char[] characters = name.toCharArray(); | |
StringBuilder cleanBuffer = new StringBuilder(); | |
@@ -203,7 +209,7 @@ public class JavaNameMangler { | |
public static String demangleMethodName(String name) { | |
if (!name.startsWith(NULL_ESCAPE)) return name; | |
- | |
+ | |
StringBuilder builder = new StringBuilder(); | |
for (int i = 2; i < name.length(); i++) { | |
char candidate = name.charAt(i); | |
-- | |
1.7.4.1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment