# HG changeset patch # User Thomas Wuerthinger # Date 1381261666 -7200 # Node ID dfaac94659aaf900eafdf1a05eee587ac6c5ca0e # Parent bdfdd110bd9a775e8126a08f44eab677e3215f06# Parent 4cdf7623fbe68a15d887bb627fa54c9511797936 Merge. diff -r bdfdd110bd9a -r dfaac94659aa graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotOptions.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotOptions.java Tue Oct 08 00:18:11 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotOptions.java Tue Oct 08 21:47:46 2013 +0200 @@ -131,6 +131,14 @@ OptionDescriptor desc = options.get(optionName); if (desc == null) { Logger.info("Could not find option " + optionName + " (use -G:+PrintFlags to see Graal options)"); + List matches = fuzzyMatch(optionName); + if (!matches.isEmpty()) { + Logger.info("Did you mean one of the following?"); + for (OptionDescriptor match : matches) { + boolean isBoolean = match.getType() == boolean.class; + Logger.info(String.format(" %s%s%s", isBoolean ? "(+/-)" : "", match.getName(), isBoolean ? "" : "=")); + } + } return false; } @@ -246,4 +254,38 @@ System.exit(0); } + + /** + * Compute string similarity based on Dice's coefficient. + * + * Ported from str_similar() in globals.cpp. + */ + static float stringSimiliarity(String str1, String str2) { + int hit = 0; + for (int i = 0; i < str1.length() - 1; ++i) { + for (int j = 0; j < str2.length() - 1; ++j) { + if ((str1.charAt(i) == str2.charAt(j)) && (str1.charAt(i + 1) == str2.charAt(j + 1))) { + ++hit; + break; + } + } + } + return 2.0f * hit / (str1.length() + str2.length()); + } + + private static final float FUZZY_MATCH_THRESHOLD = 0.7F; + + /** + * Returns the set of options that fuzzy match a given option name. + */ + private static List fuzzyMatch(String optionName) { + List matches = new ArrayList<>(); + for (Map.Entry e : options.entrySet()) { + float score = stringSimiliarity(e.getKey(), optionName); + if (score >= FUZZY_MATCH_THRESHOLD) { + matches.add(e.getValue()); + } + } + return matches; + } } diff -r bdfdd110bd9a -r dfaac94659aa graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/GraalTruffleRuntime.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/GraalTruffleRuntime.java Tue Oct 08 00:18:11 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/GraalTruffleRuntime.java Tue Oct 08 21:47:46 2013 +0200 @@ -69,6 +69,11 @@ } @Override + public VirtualFrame createVirtualFrame(PackedFrame caller, Arguments arguments, FrameDescriptor frameDescriptor) { + return OptimizedCallTarget.createFrame(frameDescriptor, caller, arguments); + } + + @Override public MaterializedFrame createMaterializedFrame(Arguments arguments) { return createMaterializedFrame(arguments); } diff -r bdfdd110bd9a -r dfaac94659aa graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java Tue Oct 08 00:18:11 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java Tue Oct 08 21:47:46 2013 +0200 @@ -166,7 +166,7 @@ return rootNode.execute(frame); } - private static FrameWithoutBoxing createFrame(FrameDescriptor descriptor, PackedFrame caller, Arguments args) { + protected static FrameWithoutBoxing createFrame(FrameDescriptor descriptor, PackedFrame caller, Arguments args) { return new FrameWithoutBoxing(descriptor, caller, args); } diff -r bdfdd110bd9a -r dfaac94659aa graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleRuntime.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleRuntime.java Tue Oct 08 00:18:11 2013 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleRuntime.java Tue Oct 08 21:47:46 2013 +0200 @@ -77,6 +77,14 @@ Assumption createAssumption(String name); /** + * Creates a new virtual frame object that can be used to store values and is potentially + * optimizable by the runtime. + * + * @return the newly created virtual frame object + */ + VirtualFrame createVirtualFrame(PackedFrame caller, Arguments arguments, FrameDescriptor frameDescriptor); + + /** * Creates a new materialized frame object that can be used to store values. * * @return the newly created materialized frame object diff -r bdfdd110bd9a -r dfaac94659aa graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java Tue Oct 08 00:18:11 2013 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java Tue Oct 08 21:47:46 2013 +0200 @@ -50,6 +50,11 @@ } @Override + public VirtualFrame createVirtualFrame(PackedFrame caller, Arguments arguments, FrameDescriptor frameDescriptor) { + return new DefaultVirtualFrame(frameDescriptor, caller, arguments); + } + + @Override public MaterializedFrame createMaterializedFrame(Arguments arguments) { return createMaterializedFrame(arguments, new FrameDescriptor()); } diff -r bdfdd110bd9a -r dfaac94659aa mx/commands.py --- a/mx/commands.py Tue Oct 08 00:18:11 2013 +0200 +++ b/mx/commands.py Tue Oct 08 21:47:46 2013 +0200 @@ -365,9 +365,18 @@ return jdk +def _updateInstalledGraalOptionsFile(jdk): + graalOptions = join(_graal_home, 'graal.options') + jreLibDir = join(jdk, 'jre', 'lib') + if exists(graalOptions): + shutil.copy(graalOptions, join(jreLibDir, 'graal.options')) + else: + toDelete = join(jreLibDir, 'graal.options') + if exists(toDelete): + os.unlink(toDelete) + def _installGraalJarInJdks(graalDist): graalJar = graalDist.path - graalOptions = join(_graal_home, 'graal.options') jdks = _jdksDir() if exists(jdks): for e in os.listdir(jdks): @@ -379,9 +388,6 @@ os.close(fd) shutil.move(tmp, join(jreLibDir, 'graal.jar')) - if exists(graalOptions): - shutil.copy(graalOptions, join(jreLibDir, 'graal.options')) - # run a command in the windows SDK Debug Shell def _runInDebugShell(cmd, workingDir, logFile=None, findInOutput=None, respondTo=None): if respondTo is None: @@ -692,6 +698,7 @@ build = vmbuild if vmbuild is not None else _vmbuild if _vmSourcesAvailable else 'product' jdk = _jdk(build, vmToCheck=vm, installGraalJar=False) + _updateInstalledGraalOptionsFile(jdk) mx.expand_project_in_args(args) if _make_eclipse_launch: mx.make_eclipse_launch(args, 'graal-' + build, name=None, deps=mx.project('com.oracle.graal.hotspot').all_deps([], True))