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: 3b1a4daefcc0^
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 36ec4eb9d4ad
Choose a head ref
  • 5 commits
  • 56 files changed
  • 1 contributor

Commits on Sep 23, 2015

  1. Copy the full SHA
    3b1a4da View commit details
  2. Copy the full SHA
    8be8c21 View commit details
  3. Copy the full SHA
    aa67abe View commit details
  4. Copy the full SHA
    a01b18c View commit details
  5. Copy the full SHA
    36ec4eb View commit details
Showing with 557 additions and 26 deletions.
  1. +1 −0 core/src/main/java/org/jruby/RubyObject.java
  2. +1 −1 core/src/main/java/org/jruby/runtime/ClassIndex.java
  3. +1 −0 lib/ruby/truffle/mri/psych.rb
  4. +1 −0 lib/ruby/truffle/mri/psych/class_loader.rb
  5. +1 −0 lib/ruby/truffle/mri/psych/coder.rb
  6. +1 −0 lib/ruby/truffle/mri/psych/core_ext.rb
  7. +1 −0 lib/ruby/truffle/mri/psych/deprecated.rb
  8. +1 −0 lib/ruby/truffle/mri/psych/exception.rb
  9. +1 −0 lib/ruby/truffle/mri/psych/handler.rb
  10. +1 −0 lib/ruby/truffle/mri/psych/handlers/document_stream.rb
  11. +1 −0 lib/ruby/truffle/mri/psych/handlers/recorder.rb
  12. +1 −0 lib/ruby/truffle/mri/psych/json/ruby_events.rb
  13. +1 −0 lib/ruby/truffle/mri/psych/json/stream.rb
  14. +1 −0 lib/ruby/truffle/mri/psych/json/tree_builder.rb
  15. +1 −0 lib/ruby/truffle/mri/psych/json/yaml_events.rb
  16. +1 −0 lib/ruby/truffle/mri/psych/nodes.rb
  17. +1 −0 lib/ruby/truffle/mri/psych/nodes/alias.rb
  18. +1 −0 lib/ruby/truffle/mri/psych/nodes/document.rb
  19. +1 −0 lib/ruby/truffle/mri/psych/nodes/mapping.rb
  20. +1 −0 lib/ruby/truffle/mri/psych/nodes/node.rb
  21. +1 −0 lib/ruby/truffle/mri/psych/nodes/scalar.rb
  22. +1 −0 lib/ruby/truffle/mri/psych/nodes/sequence.rb
  23. +1 −0 lib/ruby/truffle/mri/psych/nodes/stream.rb
  24. +1 −0 lib/ruby/truffle/mri/psych/omap.rb
  25. +1 −0 lib/ruby/truffle/mri/psych/parser.rb
  26. +1 −0 lib/ruby/truffle/mri/psych/scalar_scanner.rb
  27. +1 −0 lib/ruby/truffle/mri/psych/set.rb
  28. +1 −0 lib/ruby/truffle/mri/psych/stream.rb
  29. +1 −0 lib/ruby/truffle/mri/psych/streaming.rb
  30. +1 −0 lib/ruby/truffle/mri/psych/syntax_error.rb
  31. +1 −0 lib/ruby/truffle/mri/psych/tree_builder.rb
  32. +1 −0 lib/ruby/truffle/mri/psych/versions.rb
  33. +1 −0 lib/ruby/truffle/mri/psych/visitors.rb
  34. +1 −0 lib/ruby/truffle/mri/psych/visitors/depth_first.rb
  35. +1 −0 lib/ruby/truffle/mri/psych/visitors/emitter.rb
  36. +1 −0 lib/ruby/truffle/mri/psych/visitors/json_tree.rb
  37. +1 −0 lib/ruby/truffle/mri/psych/visitors/to_ruby.rb
  38. +1 −0 lib/ruby/truffle/mri/psych/visitors/visitor.rb
  39. +1 −0 lib/ruby/truffle/mri/psych/visitors/yaml_tree.rb
  40. +1 −0 lib/ruby/truffle/mri/psych/y.rb
  41. +1 −0 lib/ruby/truffle/mri/yaml.rb
  42. +6 −17 lib/ruby/truffle/{shims/yaml.rb → truffle/truffle/psych.rb}
  43. +1 −0 truffle/pom.rb
  44. +5 −0 truffle/pom.xml
  45. +10 −5 truffle/src/main/java/org/jruby/truffle/nodes/RubyNode.java
  46. +2 −0 truffle/src/main/java/org/jruby/truffle/nodes/control/ReturnNode.java
  47. +13 −1 truffle/src/main/java/org/jruby/truffle/nodes/core/KernelNodes.java
  48. +22 −0 truffle/src/main/java/org/jruby/truffle/nodes/core/TrufflePrimitiveNodes.java
  49. +36 −0 truffle/src/main/java/org/jruby/truffle/nodes/ext/psych/PsychEmitterNodes.java
  50. +350 −0 truffle/src/main/java/org/jruby/truffle/nodes/ext/psych/PsychParserNodes.java
  51. +20 −0 truffle/src/main/java/org/jruby/truffle/runtime/core/CoreLibrary.java
  52. +1 −1 truffle/src/main/java/org/jruby/truffle/runtime/core/ModuleFields.java
  53. +3 −0 truffle/src/main/java/org/jruby/truffle/runtime/layouts/Layouts.java
  54. +38 −0 truffle/src/main/java/org/jruby/truffle/runtime/layouts/ext/psych/ParserLayout.java
  55. +6 −0 truffle/src/main/java/org/jruby/truffle/translator/BodyTranslator.java
  56. +3 −1 truffle/src/main/java/org/jruby/truffle/translator/TranslatorDriver.java
1 change: 1 addition & 0 deletions core/src/main/java/org/jruby/RubyObject.java
Original file line number Diff line number Diff line change
@@ -55,6 +55,7 @@
import org.jruby.runtime.builtin.IRubyObject;
import org.jruby.runtime.marshal.DataType;

import static org.jruby.runtime.Helpers.invoke;
import static org.jruby.runtime.Helpers.invokedynamic;
import static org.jruby.runtime.invokedynamic.MethodNames.EQL;
import static org.jruby.runtime.invokedynamic.MethodNames.OP_EQUAL;
2 changes: 1 addition & 1 deletion core/src/main/java/org/jruby/runtime/ClassIndex.java
Original file line number Diff line number Diff line change
@@ -71,5 +71,5 @@ public enum ClassIndex {
CONTINUATION,
BASICOBJECT,
// insert new values here
MAX_CLASSES;
MAX_CLASSES, Layouts;
}
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../stdlib/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/class_loader.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../stdlib/psych/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/coder.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../stdlib/psych/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/core_ext.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../stdlib/psych/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/deprecated.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../stdlib/psych/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/exception.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../stdlib/psych/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/handler.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../stdlib/psych/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/handlers/document_stream.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../../stdlib/psych/handlers/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/handlers/recorder.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../../stdlib/psych/handlers/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/json/ruby_events.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../../stdlib/psych/json/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/json/stream.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../../stdlib/psych/json/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/json/tree_builder.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../../stdlib/psych/json/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/json/yaml_events.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../../stdlib/psych/json/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/nodes.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../stdlib/psych/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/nodes/alias.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../../stdlib/psych/nodes/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/nodes/document.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../../stdlib/psych/nodes/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/nodes/mapping.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../../stdlib/psych/nodes/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/nodes/node.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../../stdlib/psych/nodes/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/nodes/scalar.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../../stdlib/psych/nodes/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/nodes/sequence.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../../stdlib/psych/nodes/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/nodes/stream.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../../stdlib/psych/nodes/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/omap.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../stdlib/psych/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/parser.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../stdlib/psych/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/scalar_scanner.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../stdlib/psych/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/set.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../stdlib/psych/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/stream.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../stdlib/psych/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/streaming.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../stdlib/psych/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/syntax_error.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../stdlib/psych/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/tree_builder.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../stdlib/psych/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/versions.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../stdlib/psych/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/visitors.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../stdlib/psych/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/visitors/depth_first.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../../stdlib/psych/visitors/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/visitors/emitter.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../../stdlib/psych/visitors/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/visitors/json_tree.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../../stdlib/psych/visitors/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/visitors/to_ruby.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../../stdlib/psych/visitors/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/visitors/visitor.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../../stdlib/psych/visitors/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/visitors/yaml_tree.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../../stdlib/psych/visitors/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/psych/y.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../../stdlib/psych/' + File.basename(__FILE__)
1 change: 1 addition & 0 deletions lib/ruby/truffle/mri/yaml.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require_relative '../../stdlib/' + File.basename(__FILE__)
Original file line number Diff line number Diff line change
@@ -6,24 +6,13 @@
# GNU General Public License version 2
# GNU Lesser General Public License version 2.1

module YAML

def load(string)
raise "YAML.load not implemented"
end
module_function :load

def dump(object)
raise "YAML.dump not implemented"
module Truffle::Psych

def self.libyaml_version
# TODO CS 23-Sep-15 hardcoded this for now - use resources to read
[1, 14, 0]
end
module_function :dump

end

class Object

def to_yaml
raise "Object#to_yaml not implemented"
end

end
Psych = Truffle::Psych
1 change: 1 addition & 0 deletions truffle/pom.rb
Original file line number Diff line number Diff line change
@@ -10,6 +10,7 @@

'jruby.basedir' => '${basedir}/..' )

jar 'org.yaml:snakeyaml:1.14'
jar 'org.jruby:jruby-core', '${project.version}', :scope => 'provided'

jar 'com.oracle:truffle:0.7'
5 changes: 5 additions & 0 deletions truffle/pom.xml
Original file line number Diff line number Diff line change
@@ -22,6 +22,11 @@ DO NOT MODIFIY - GENERATED CODE
<polyglot.dump.pom>pom.xml</polyglot.dump.pom>
</properties>
<dependencies>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.14</version>
</dependency>
<dependency>
<groupId>org.jruby</groupId>
<artifactId>jruby-core</artifactId>
15 changes: 10 additions & 5 deletions truffle/src/main/java/org/jruby/truffle/nodes/RubyNode.java
Original file line number Diff line number Diff line change
@@ -9,13 +9,12 @@
*/
package org.jruby.truffle.nodes;

import com.oracle.truffle.api.CompilerAsserts;
import com.oracle.truffle.api.CompilerDirectives;
import com.oracle.truffle.api.Truffle;
import com.oracle.truffle.api.dsl.ImportStatic;
import com.oracle.truffle.api.dsl.TypeSystemReference;
import com.oracle.truffle.api.frame.FrameDescriptor;
import com.oracle.truffle.api.frame.MaterializedFrame;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.frame.*;
import com.oracle.truffle.api.instrument.ProbeNode;
import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.api.nodes.UnexpectedResultException;
@@ -214,13 +213,19 @@ public MemoryManager getMemoryManager() {

// ruby() helper

protected Object ruby(VirtualFrame frame, String expression, Object... arguments) {
protected Object ruby(String expression, Object... arguments) {
CompilerAsserts.neverPartOfCompilation();
return ruby(Truffle.getRuntime().getCurrentFrame().getFrame(FrameInstance.FrameAccess.MATERIALIZE, true),
expression, arguments);
}

protected Object ruby(Frame frame, String expression, Object... arguments) {
final MaterializedFrame evalFrame = setupFrame(frame, arguments);
final DynamicObject binding = Layouts.BINDING.createBinding(getContext().getCoreLibrary().getBindingFactory(), evalFrame);
return getContext().eval(expression, binding, true, "inline-ruby", this);
}

private MaterializedFrame setupFrame(VirtualFrame frame, Object... arguments) {
private MaterializedFrame setupFrame(Frame frame, Object... arguments) {
CompilerDirectives.transferToInterpreter();
final MaterializedFrame evalFrame = Truffle.getRuntime().createMaterializedFrame(
RubyArguments.pack(
Original file line number Diff line number Diff line change
@@ -33,6 +33,8 @@ public ReturnNode(RubyContext context, SourceSection sourceSection, ReturnID ret

@Override
public Object execute(VirtualFrame frame) {
//ruby(frame, "Truffle::Primitive.debug_print 'HERE!!'; Truffle::Primitive.print_interleaved_backtrace");
//System.err.println(getEncapsulatingSourceSection().getShortDescription());
throw new ReturnException(returnID, value.execute(frame));
}

Original file line number Diff line number Diff line change
@@ -1553,9 +1553,21 @@ public RubyNode coerceFeatureToPath(RubyNode feature) {

@Specialization(guards = "isRubyString(featureString)")
public boolean require(DynamicObject featureString) {
CompilerDirectives.transferToInterpreter();
final String feature = featureString.toString();

// Pysch loads either the jar or the so - we need to intercept

if (feature.equals("psych.so") && RubyCallStack.getCallerFrame(getContext()).getCallNode()
.getEncapsulatingSourceSection().getSource().getName().endsWith("psych.rb")) {
try {
getContext().getFeatureLoader().require("truffle/psych.rb", this);
} catch (IOException e) {
throw new RuntimeException(e);
}

return true;
}

// TODO CS 1-Mar-15 ERB will use strscan if it's there, but strscan is not yet complete, so we need to hide it

if (feature.equals("strscan") && RubyCallStack.getCallerFrame(getContext()).getCallNode()
Original file line number Diff line number Diff line change
@@ -542,6 +542,28 @@ public Object synchronize(VirtualFrame frame, DynamicObject self, DynamicObject
}
}

@CoreMethod(names = "print_backtrace", onSingleton = true)
public abstract static class PrintBacktraceNode extends CoreMethodNode {

public PrintBacktraceNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
}

@TruffleBoundary
@Specialization
public DynamicObject printBacktrace() {
final List<String> rubyBacktrace = BacktraceFormatter.createDefaultFormatter(getContext())
.formatBacktrace(null, RubyCallStack.getBacktrace(this));

for (String line : rubyBacktrace) {
System.err.println(line);
}

return nil();
}

}

@CoreMethod(names = "print_interleaved_backtrace", onSingleton = true)
public abstract static class PrintInterleavedBacktraceNode extends CoreMethodNode {

Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*
* Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved. This
* code is released under a tri EPL/GPL/LGPL license. You can use it,
* redistribute it and/or modify it under the terms of the:
*
* Eclipse Public License version 1.0
* GNU General Public License version 2
* GNU Lesser General Public License version 2.1
*/
package org.jruby.truffle.nodes.ext.psych;

import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.source.SourceSection;
import org.jruby.truffle.nodes.core.CoreClass;
import org.jruby.truffle.nodes.core.CoreMethod;
import org.jruby.truffle.nodes.core.CoreMethodArrayArgumentsNode;
import org.jruby.truffle.runtime.RubyContext;

@CoreClass(name = "Truffle::Psych::Emitter")
public abstract class PsychEmitterNodes {

@CoreMethod(names = "line_width", needsSelf = false)
public abstract static class LineWidthNode extends CoreMethodArrayArgumentsNode {

public LineWidthNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
}

@Specialization
public int lineWidth(Object yaml) {
return 0;
}

}

}
Loading