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: 06242f40ef8e
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 0617393f3373
Choose a head ref
  • 5 commits
  • 10 files changed
  • 1 contributor

Commits on Nov 30, 2016

  1. Copy the full SHA
    af8cf20 View commit details
  2. Copy the full SHA
    f3fdb88 View commit details
  3. Copy the full SHA
    8fd82fc View commit details
  4. Copy the full SHA
    0337824 View commit details
  5. Copy the full SHA
    0617393 View commit details
4 changes: 2 additions & 2 deletions truffle/src/main/java/org/jruby/truffle/RubyEngine.java
Original file line number Diff line number Diff line change
@@ -13,7 +13,7 @@
import com.oracle.truffle.api.source.Source;
import com.oracle.truffle.api.vm.PolyglotEngine;
import org.jruby.RubyInstanceConfig;
import org.jruby.truffle.options.OptionsCatalogue;
import org.jruby.truffle.options.OptionsCatalog;
import org.jruby.truffle.platform.graal.Graal;
import org.jruby.util.cli.Options;

@@ -36,7 +36,7 @@ public RubyEngine(RubyInstanceConfig instanceConfig) {

engine = PolyglotEngine.newBuilder()
.config(RubyLanguage.MIME_TYPE, INSTANCE_CONFIG_KEY, instanceConfig)
.config(RubyLanguage.MIME_TYPE, OptionsCatalogue.ARGUMENTS.getName(), instanceConfig.getArgv())
.config(RubyLanguage.MIME_TYPE, OptionsCatalog.ARGUMENTS.getName(), instanceConfig.getArgv())
.build();
Main.printTruffleTimeMetric("before-load-context");
context = engine.eval(loadSource("Truffle::Boot.context", "context")).as(RubyContext.class);
Original file line number Diff line number Diff line change
@@ -34,10 +34,10 @@ public Object checkValue(Object value) {
case "false":
return false;
default:
throw new OptionTypeException();
throw new OptionTypeException(getName());
}
} else {
throw new OptionTypeException();
throw new OptionTypeException(getName());
}
}

Original file line number Diff line number Diff line change
@@ -11,15 +11,17 @@

// This file would be automatically generated from the list of options in the text file.

import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;

public class NewOptions {

public final String[] ARGUMENTS;
@CompilationFinal(dimensions=1) public final String[] ARGUMENTS;

public final boolean EXCEPTIONS_PRINT_JAVA;

NewOptions(OptionsBuilder builder) {
ARGUMENTS = builder.getOrDefault(OptionsCatalogue.ARGUMENTS);
EXCEPTIONS_PRINT_JAVA = builder.getOrDefault(OptionsCatalogue.EXCEPTIONS_PRINT_JAVA);
ARGUMENTS = builder.getOrDefault(OptionsCatalog.ARGUMENTS);
EXCEPTIONS_PRINT_JAVA = builder.getOrDefault(OptionsCatalog.EXCEPTIONS_PRINT_JAVA);
}

}
Original file line number Diff line number Diff line change
@@ -11,4 +11,14 @@

public class OptionTypeException extends UnsupportedOperationException {

private final String name;

public OptionTypeException(String name) {
this.name = name;
}

public String getName() {
return name;
}

}
Original file line number Diff line number Diff line change
@@ -36,12 +36,12 @@ public void set(Map<String, Object> properties) {
}

private void set(String name, Object value) {
final OptionDescription description = OptionsCatalogue.fromName(name);
final OptionDescription description = OptionsCatalog.fromName(name);

if (description == null) {
//throw new UnsupportedOperationException(name);
//throw new UnknownOptionException(name);

// Don't throw for now - not all the options are transalted across
// Don't throw for now - not all the options are translated across
return;
}

Original file line number Diff line number Diff line change
@@ -11,7 +11,7 @@

// This file would be automatically generated from the list of options in the text file.

public class OptionsCatalogue {
public class OptionsCatalog {

public static final OptionDescription ARGUMENTS = new StringArrayOptionDescription("arguments", "Foo bar baz", new String[0]);

Original file line number Diff line number Diff line change
@@ -33,98 +33,67 @@ public Object checkValue(Object value) {
} else if (value instanceof String) {
return parseStringArray((String) value);
} else {
throw new OptionTypeException();
throw new OptionTypeException(getName());
}
}

// Allows input such as [foo, "bar", 'baz']. Doesn't support escape sequences.
// Allows input such as foo,bar,baz. You can escape commas.

private String[] parseStringArray(String string) {
final List<String> values = new ArrayList<>();

final int start = 0;
final int startOfString = 1;
final int endOfString = 2;
final int endOfArray = 3;
final int startOfString = 0;
final int withinString = 1;
final int escape = 2;

int n = 0;
int state = start;
boolean array = false;
int state = startOfString;

while (n < string.length()) {
while (n < string.length() && Character.isWhitespace(string.charAt(n))) {
n++;
}

if (n == string.length() && array && state != start && state != endOfArray) {
throw new OptionTypeException();
}
final StringBuilder builder = new StringBuilder();

for (int n = 0; n < string.length(); n++) {
switch (state) {
case start:
if (string.charAt(n) == '[') {
n++;
array = true;
state = startOfString;
} else {
array = false;
state = startOfString;
}
break;

case startOfString:
final int startN;
final int endN;
if (string.charAt(n) == '"' || string.charAt(n) == '\'') {
final char quote = string.charAt(n);

n++;
startN = n;

while (n < string.length() && string.charAt(n) != quote) {
n++;
}

endN = n;

if (string.charAt(n) == quote){
n++;
} else {
throw new OptionTypeException();
}

state = endOfString;
} else {
startN = n;
builder.setLength(0);
builder.append(string.charAt(n));
state = withinString;
break;

while (n < string.length() && string.charAt(n) != ',') {
n++;
}
case withinString:
switch (string.charAt(n)) {
case ',':
values.add(builder.toString());
state = startOfString;
break;

endN = n;
case '\\':
state = escape;
break;

state = endOfString;
default:
builder.append(string.charAt(n));
break;
}
values.add(string.substring(startN, endN));
break;

case endOfString:
if (string.charAt(n) == ',') {
n++;
state = startOfString;
} else if (array && string.charAt(n) == ']') {
n++;
state = endOfArray;
} else {
throw new OptionTypeException();
case escape:
if (string.charAt(n) != ',') {
throw new OptionTypeException(getName());
}
break;

case endOfArray:
state = withinString;
builder.append(string.charAt(n));
break;
}
}

switch (state) {
case withinString:
values.add(builder.toString());
break;

case escape:
throw new OptionTypeException(getName());
}

return values.toArray(new String[values.size()]);
}

Original file line number Diff line number Diff line change
@@ -11,4 +11,14 @@

public class UnknownOptionException extends UnsupportedOperationException {

private final String name;

public UnknownOptionException(String name) {
this.name = name;
}

public String getName() {
return name;
}

}
2 changes: 0 additions & 2 deletions truffle/src/main/java/org/jruby/truffle/options/options.txt

This file was deleted.

2 changes: 2 additions & 0 deletions truffle/src/main/java/org/jruby/truffle/options/options.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ARGUMENTS: [arguments, string-array, [], Foo bar baz]
EXCEPTIONS_PRINT_JAVA: [exceptions.print_java, boolean, false, Foo bar baz]