Skip to content

Commit 30170b9

Browse files
committed
Simplify options implementation
PullRequest: truffleruby/674
2 parents 21200e0 + 54c917b commit 30170b9

26 files changed

+1324
-1602
lines changed

src/launcher/java/org/truffleruby/launcher/CommandLineParser.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,12 @@
3434
*/
3535
package org.truffleruby.launcher;
3636

37+
import org.graalvm.options.OptionDescriptor;
3738
import org.truffleruby.shared.options.CommandLineOptions;
3839
import org.truffleruby.shared.options.DefaultExecutionAction;
3940
import org.truffleruby.shared.options.ExecutionAction;
4041
import org.truffleruby.shared.options.OptionsCatalog;
4142
import org.truffleruby.shared.options.ShowHelp;
42-
import org.truffleruby.shared.options.StringArrayOptionDescription;
4343
import org.truffleruby.shared.options.Verbosity;
4444

4545
import java.io.File;
@@ -134,7 +134,7 @@ private void processArgv() {
134134

135135
// Switches without values are stored separately in ARGV_GLOBAL_FLAGS. Otherwise it would not be
136136
// possible to determine if the value is suppose to be `true` or `"true"`.
137-
final StringArrayOptionDescription optionDescription =
137+
final OptionDescriptor optionDescription =
138138
value != null ? OptionsCatalog.ARGV_GLOBAL_VALUES : OptionsCatalog.ARGV_GLOBAL_FLAGS;
139139
// replace dashes with underscores make it a valid global variable name
140140
config.appendOptionValue(optionDescription, key.replace('-', '_'));

src/launcher/java/org/truffleruby/launcher/RubyLauncher.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.truffleruby.shared.options.OptionsCatalog;
2222
import org.truffleruby.shared.TruffleRuby;
2323
import org.truffleruby.shared.Metrics;
24+
import org.truffleruby.shared.options.ShowHelp;
2425

2526
import java.io.IOException;
2627
import java.io.PrintStream;
@@ -71,7 +72,7 @@ protected List<String> preprocessArguments(List<String> args, Map<String, String
7172
final CommandLineParser argumentCommandLineParser = new CommandLineParser(args, config, true, false);
7273
argumentCommandLineParser.processArguments();
7374

74-
if (config.getOption(OptionsCatalog.READ_RUBYOPT)) {
75+
if ((boolean) config.getOption(OptionsCatalog.READ_RUBYOPT)) {
7576
// Process RUBYOPT
7677
final List<String> rubyoptArgs = getArgsFromEnvVariable("RUBYOPT");
7778
new CommandLineParser(rubyoptArgs, config, false, true).processArguments();
@@ -260,7 +261,7 @@ private static List<String> getPathListFromEnvVariable(String name) {
260261
}
261262

262263
private String setRubyLauncher() {
263-
if (config.getOption(OptionsCatalog.LAUNCHER).isEmpty()) {
264+
if (String.class.cast(config.getOption(OptionsCatalog.LAUNCHER)).isEmpty()) {
264265
final String launcher = ProcessProperties.getExecutableName();
265266
config.setOption(OptionsCatalog.LAUNCHER, launcher);
266267
return launcher;
@@ -269,15 +270,15 @@ private String setRubyLauncher() {
269270
}
270271

271272
private static void printPreRunInformation(CommandLineOptions config) {
272-
if (config.getOption(OptionsCatalog.SHOW_VERSION)) {
273+
if ((boolean) config.getOption(OptionsCatalog.SHOW_VERSION)) {
273274
System.out.println(TruffleRuby.getVersionString(isAOT()));
274275
}
275276

276-
if (config.getOption(OptionsCatalog.SHOW_COPYRIGHT)) {
277+
if ((boolean) config.getOption(OptionsCatalog.SHOW_COPYRIGHT)) {
277278
System.out.println(TruffleRuby.RUBY_COPYRIGHT);
278279
}
279280

280-
switch (config.getOption(OptionsCatalog.SHOW_HELP)) {
281+
switch ((ShowHelp) config.getOption(OptionsCatalog.SHOW_HELP)) {
281282
case NONE:
282283
break;
283284
case SHORT:

src/main/java/org/truffleruby/RubyContext.java

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.oracle.truffle.api.source.Source;
2222

2323
import com.oracle.truffle.api.source.SourceSection;
24+
import org.graalvm.options.OptionDescriptor;
2425
import org.joni.Regex;
2526
import org.truffleruby.builtins.PrimitiveManager;
2627
import org.truffleruby.cext.ValueWrapperManager;
@@ -64,9 +65,7 @@
6465
import org.truffleruby.language.methods.InternalMethod;
6566
import org.truffleruby.language.objects.shared.SharedObjects;
6667
import org.truffleruby.options.Options;
67-
import org.truffleruby.options.OptionsBuilder;
6868
import org.truffleruby.shared.Metrics;
69-
import org.truffleruby.shared.options.OptionDescription;
7069
import org.truffleruby.shared.options.OptionsCatalog;
7170
import org.truffleruby.parser.TranslatorDriver;
7271
import org.truffleruby.platform.Platform;
@@ -76,6 +75,7 @@
7675
import org.truffleruby.platform.linux.LinuxNativeConfiguration;
7776
import org.truffleruby.platform.solaris.SolarisSparcV9NativeConfiguration;
7877
import org.truffleruby.shared.TruffleRuby;
78+
import org.truffleruby.shared.options.RubyOptionTypes;
7979
import org.truffleruby.stdlib.CoverageManager;
8080
import org.truffleruby.stdlib.readline.ConsoleHolder;
8181

@@ -355,7 +355,7 @@ private boolean compatibleOptions(Options oldOptions, Options newOptions, String
355355
return false;
356356
}
357357

358-
if (!newOptions.CORE_LOAD_PATH.equals(OptionsCatalog.CORE_LOAD_PATH.getDefaultValue())) {
358+
if (!newOptions.CORE_LOAD_PATH.equals(OptionsCatalog.CORE_LOAD_PATH_KEY.getDefaultValue())) {
359359
RubyLanguage.LOGGER.fine(notReusingContext + "--core.load_path is set: " + newOptions.CORE_LOAD_PATH);
360360
return false; // Should load the specified core files
361361
}
@@ -387,17 +387,13 @@ private boolean compatibleOptions(Options oldOptions, Options newOptions, String
387387

388388
private Options createOptions(TruffleLanguage.Env env) {
389389
Metrics.printTime("before-options");
390-
final OptionsBuilder optionsBuilder = new OptionsBuilder();
391-
optionsBuilder.set(env.getConfig()); // Legacy config - used by unit tests for example
392-
optionsBuilder.set(env.getOptions()); // SDK options
393-
394-
final Options options = optionsBuilder.build(env);
390+
final Options options = new Options(env, env.getOptions());
395391

396392
if (options.OPTIONS_LOG && RubyLanguage.LOGGER.isLoggable(Level.CONFIG)) {
397-
for (OptionDescription<?> option : OptionsCatalog.allDescriptions()) {
398-
assert option.getName().startsWith(TruffleRuby.LANGUAGE_ID);
399-
final String xName = option.getName().substring(TruffleRuby.LANGUAGE_ID.length() + 1);
400-
RubyLanguage.LOGGER.config("option " + xName + "=" + option.valueToString(options.fromDescription(option)));
393+
for (OptionDescriptor descriptor : OptionsCatalog.allDescriptors()) {
394+
assert descriptor.getName().startsWith(TruffleRuby.LANGUAGE_ID);
395+
final String xName = descriptor.getName().substring(TruffleRuby.LANGUAGE_ID.length() + 1);
396+
RubyLanguage.LOGGER.config("option " + xName + "=" + RubyOptionTypes.valueToString(options.fromDescriptor(descriptor)));
401397
}
402398
}
403399

src/main/java/org/truffleruby/RubyLanguage.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import org.truffleruby.language.RubyGuards;
2727
import org.truffleruby.shared.TruffleRuby;
2828
import org.truffleruby.shared.Metrics;
29-
import org.truffleruby.shared.options.OptionDescription;
3029
import org.truffleruby.shared.options.OptionsCatalog;
3130
import org.truffleruby.platform.Platform;
3231
import org.truffleruby.stdlib.CoverageManager;
@@ -190,11 +189,11 @@ protected SourceSection findSourceLocation(RubyContext context, Object value) {
190189

191190
@Override
192191
protected OptionDescriptors getOptionDescriptors() {
193-
final OptionDescription<?>[] allDescriptions = OptionsCatalog.allDescriptions();
192+
final OptionDescriptor[] allDescriptions = OptionsCatalog.allDescriptors();
194193
final List<OptionDescriptor> options = new ArrayList<>(allDescriptions.length);
195194

196-
for (OptionDescription<?> option : allDescriptions) {
197-
options.add(option.toDescriptor());
195+
for (OptionDescriptor descriptor : allDescriptions) {
196+
options.add(descriptor);
198197
}
199198

200199
return OptionDescriptors.create(options);

src/main/java/org/truffleruby/aot/ParserCache.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class ParserCache {
3131

3232
static {
3333
if (TruffleOptions.AOT) {
34-
final String defaultCoreLibraryPath = OptionsCatalog.CORE_LOAD_PATH.getDefaultValue();
34+
final String defaultCoreLibraryPath = OptionsCatalog.CORE_LOAD_PATH_KEY.getDefaultValue();
3535
final Map<String, RootParseNode> cache = new HashMap<>();
3636

3737
for (String coreFile : CoreLibrary.CORE_FILES) {

src/main/java/org/truffleruby/language/TruffleBootNodes.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.oracle.truffle.api.nodes.IndirectCallNode;
1818
import com.oracle.truffle.api.object.DynamicObject;
1919
import com.oracle.truffle.api.source.Source;
20+
import org.graalvm.options.OptionDescriptor;
2021
import org.jcodings.specific.USASCIIEncoding;
2122
import org.jcodings.specific.UTF8Encoding;
2223
import org.truffleruby.Layouts;
@@ -38,7 +39,6 @@
3839
import org.truffleruby.parser.RubySource;
3940
import org.truffleruby.shared.Metrics;
4041
import org.truffleruby.shared.options.ExecutionAction;
41-
import org.truffleruby.shared.options.OptionDescription;
4242
import org.truffleruby.shared.options.OptionsCatalog;
4343

4444
import java.io.IOException;
@@ -338,14 +338,13 @@ public abstract static class GetOptionNode extends CoreMethodArrayArgumentsNode
338338
@Specialization(guards = "isRubyString(optionName)")
339339
public Object getOption(DynamicObject optionName) {
340340
final String optionNameString = StringOperations.getString(optionName);
341+
final OptionDescriptor descriptor = OptionsCatalog.fromName("ruby." + optionNameString);
341342

342-
final OptionDescription<?> description = OptionsCatalog.fromName("ruby." + optionNameString);
343-
344-
if (description == null) {
343+
if (descriptor == null) {
345344
throw new RaiseException(getContext(), coreExceptions().nameError("option not defined", nil(), optionNameString, this));
346345
}
347346

348-
final Object value = getContext().getOptions().fromDescription(description);
347+
final Object value = getContext().getOptions().fromDescriptor(descriptor);
349348

350349
if (value instanceof Boolean || value instanceof Integer) {
351350
return value;

0 commit comments

Comments
 (0)