Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: jruby/jruby
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 5b12958ab86a
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: ca14416193e1
Choose a head ref
  • 2 commits
  • 13 files changed
  • 1 contributor

Commits on Mar 11, 2015

  1. Fix jrubyc booting and get --java support working again.

    This also includes basic functionality for .class output, but it
    does not generate main or load methods for JRuby 1.7-style AOT.
    headius committed Mar 11, 2015
    Copy the full SHA
    9a5a1ec View commit details
  2. Copy the full SHA
    ca14416 View commit details
1 change: 0 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
@@ -70,7 +70,6 @@ matrix:
allow_failures:
- env: PHASE='-Pcomplete'
- env: PHASE='-Pmain'
- env: PHASE='-Prake -Dtask=spec:jrubyc'
- env: PHASE='-Prake -Dtask=spec:profiler'
- env: PHASE='-Prake -Dtask=test:mri:jit'

12 changes: 8 additions & 4 deletions core/src/main/java/org/jruby/ir/persistence/IRWriter.java
Original file line number Diff line number Diff line change
@@ -34,8 +34,10 @@ public static void persist(IRWriterEncoder file, IRScope script) throws IOExcept
private static void persistScopeInstructions(IRWriterEncoder file, IRScope parent) {
persistScopeInstrs(file, parent);

for (IRScope scope: parent.getLexicalScopes()) {
persistScopeInstructions(file, scope);
if (parent.getLexicalScopes() != null) {
for (IRScope scope: parent.getLexicalScopes()) {
persistScopeInstructions(file, scope);
}
}
}

@@ -60,8 +62,10 @@ private static void persistScopeInstrs(IRWriterEncoder file, IRScope scope) {
private static void persistScopeHeaders(IRWriterEncoder file, IRScope parent) {
persistScopeHeader(file, parent);

for (IRScope scope: parent.getLexicalScopes()) {
persistScopeHeaders(file, scope);
if (parent.getLexicalScopes() != null) {
for (IRScope scope : parent.getLexicalScopes()) {
persistScopeHeaders(file, scope);
}
}
}

20 changes: 12 additions & 8 deletions core/src/main/ruby/jruby/jruby.rb
Original file line number Diff line number Diff line change
@@ -62,17 +62,21 @@ def parse(content = nil, filename = (default_filename = true; '-'), extra_positi
end
alias ast_for parse

def compile_ir(content = nil, filename = (default_filename = true; '-'), extra_position_info = false, &block)
runtime = JRuby.runtime
node = if default_filename
parse(content, &block)
else
parse(content, filename, extra_position_info, &block)
end

org.jruby.ir.IRBuilder.build_root(runtime.getIRManager(), node).scope
end

# Parse and compile the given block or provided content, returning a new
# CompiledScript instance.
def compile(content = nil, filename = (default_filename = true; '-'), extra_position_info = false, &block)
node = if default_filename
parse(content, &block)
else
parse(content, filename, extra_position_info, &block)
end

runtime = JRuby.runtime
irscope = org.jruby.ir.IRBuilder.build_root(runtime.getIRManager(), node).scope
irscope = compile_ir(content, filename)

visitor = org.jruby.ir.targets.JVMVisitor.new
bytes = visitor.compile_to_bytecode(irscope);
20 changes: 7 additions & 13 deletions lib/ruby/stdlib/jruby/compiler.rb
Original file line number Diff line number Diff line change
@@ -7,8 +7,7 @@
module JRuby::Compiler
BAIS = java.io.ByteArrayInputStream
Mangler = org.jruby.util.JavaNameMangler
BytecodeCompiler = org.jruby.compiler.impl.StandardASMCompiler
ASTCompiler = org.jruby.compiler.ASTCompiler
JVMVisitor = org.jruby.ir.targets.JVMVisitor
JavaFile = java.io.File
MethodSignatureNode = org.jruby.ast.java_signature.MethodSignatureNode
DEFAULT_PREFIX = ""
@@ -129,12 +128,11 @@ def compile_files_with_options(filenames, options = default_options)
pathname = Mangler.mangle_filename_for_classpath(filename, options[:basedir], options[:prefix], true, false)
end

inspector = org.jruby.compiler.ASTInspector.new

source = file.read
node = runtime.parse_file(BAIS.new(source.to_java_bytes), filename, nil)

if options[:java] || options[:javac]
node = runtime.parse_file(BAIS.new(source.to_java_bytes), filename, nil)

ruby_script = JavaGenerator.generate_java(node, filename)
ruby_script.classes.each do |cls|
java_dir = File.join(options[:target], cls.package.gsub('.', '/'))
@@ -153,17 +151,13 @@ def compile_files_with_options(filenames, options = default_options)
else
puts "Compiling #{filename}" if options[:verbose]

inspector.inspect(node)
scope = JRuby.compile_ir(source, filename)

asmCompiler = BytecodeCompiler.new(pathname.gsub(".", "/"), filename)
if options[:jdk5]
asmCompiler.java_version= 49
end
visitor = JVMVisitor.new

compiler = ASTCompiler.new
compiler.compile_root(node, asmCompiler, inspector)
bytes = visitor.compileToBytecode(scope)

class_bytes = String.from_java_bytes(asmCompiler.class_byte_array)
class_bytes = String.from_java_bytes(bytes)

# prepare target
class_filename = filename.sub(/(\.rb)?$/, '.class')
4 changes: 4 additions & 0 deletions rakelib/rspec.rake
Original file line number Diff line number Diff line change
@@ -61,4 +61,8 @@ namespace :spec do
permute_specs "jruby", compile_flags do |t|
t.pattern = 'spec/jruby/**/*_spec.rb'
end

permute_specs "jrubyc", compile_flags do |t|
t.pattern = 'spec/jrubyc/**/*_spec.rb'
end
end
2 changes: 1 addition & 1 deletion spec/jrubyc/java/annotation_spec.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
require_relative "../../../java_integration/spec_helper"
require_relative "../../java_integration/spec_helper"
require 'jruby'
require 'jruby/compiler'

2 changes: 1 addition & 1 deletion spec/jrubyc/java/basic_spec.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
require_relative "../../../java_integration/spec_helper"
require_relative "../../java_integration/spec_helper"
require 'rbconfig'
require 'jruby'
require 'jruby/compiler'
2 changes: 1 addition & 1 deletion spec/jrubyc/java/constructor_spec.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
require_relative "../../../java_integration/spec_helper"
require_relative "../../java_integration/spec_helper"
require 'jruby'
require 'jruby/compiler'

2 changes: 1 addition & 1 deletion spec/jrubyc/java/field_spec.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
require_relative "../../../java_integration/spec_helper"
require_relative "../../java_integration/spec_helper"
require 'jruby'
require 'jruby/compiler'

2 changes: 1 addition & 1 deletion spec/jrubyc/java/implements_spec.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
require_relative "../../../java_integration/spec_helper"
require_relative "../../java_integration/spec_helper"
require 'jruby'
require 'jruby/compiler'

2 changes: 1 addition & 1 deletion spec/jrubyc/java/import_spec.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
require_relative "../../../java_integration/spec_helper"
require_relative "../../java_integration/spec_helper"
require 'jruby'
require 'jruby/compiler'

2 changes: 1 addition & 1 deletion spec/jrubyc/java/method_spec.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
require_relative "../../../java_integration/spec_helper"
require_relative "../../java_integration/spec_helper"
require 'jruby'
require 'jruby/compiler'

2 changes: 1 addition & 1 deletion spec/jrubyc/java/package_spec.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
require_relative "../../../java_integration/spec_helper"
require_relative "../../java_integration/spec_helper"
require 'jruby'
require 'jruby/compiler'