<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8">
</head>
<body><div style="font-family: sans-serif;"><div class="markdown" style="white-space: normal;">
<p dir="auto">Hi,</p>
<p dir="auto">As part of adding <code style="margin: 0 0; padding: 0 0.25em; border-radius: 3px; background-color: #F7F7F7;">--enable-preview</code> support to <a href="https://github.com/jbangdev/jbang/releases/tag/v0.107.0" style="color: #3983C4;">JBang 0.107</a> I spotted this discrepancy in jshell behaviour. Is this to be expected or a bug?</p>
<p dir="auto">First what is expected right behaviour:</p>
<pre class="highlighted" style="margin-left: 15px; margin-right: 15px; padding: 5px; background-color: #F7F7F7; border-radius: 5px 5px 5px 5px; overflow-x: auto; max-width: 90vw; color: black;"><code style="margin: 0 0; border-radius: 3px; background-color: #F7F7F7; padding: 0px;">$ jshell --enable-preview
<span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">|</span> Welcome to JShell -- Version <span class="token number" style="color: #905;">21</span>-ea
<span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">|</span> For an introduction type: /help intro
jshell<span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">></span> var <span class="token assign-left variable" style="color: #e90;">name</span><span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">=</span><span class="token string" style="color: #690;">"test"</span><span class="token punctuation" style="color: #999;">;</span> STR.<span class="token string" style="color: #690;">"\{name} test"</span><span class="token punctuation" style="color: #999;">;</span>
name <span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">==</span><span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">></span> <span class="token string" style="color: #690;">"test"</span>
<span class="token variable" style="color: #e90;">$2</span> <span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">==</span><span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">></span> <span class="token string" style="color: #690;">"test test"</span>
jshell<span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">></span> <span class="token variable" style="color: #e90;">$2</span>.length<span class="token punctuation" style="color: #999;">(</span><span class="token punctuation" style="color: #999;">)</span><span class="token punctuation" style="color: #999;">;</span>
<span class="token variable" style="color: #e90;">$3</span> <span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">==</span><span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">></span> <span class="token number" style="color: #905;">9</span>
</code></pre>
<p dir="auto">but now when running with <code style="margin: 0 0; padding: 0 0.25em; border-radius: 3px; background-color: #F7F7F7;">--execution=local</code>:</p>
<pre class="highlighted" style="margin-left: 15px; margin-right: 15px; padding: 5px; background-color: #F7F7F7; border-radius: 5px 5px 5px 5px; overflow-x: auto; max-width: 90vw; color: black;"><code style="margin: 0 0; border-radius: 3px; background-color: #F7F7F7; padding: 0px;">jshell --enable-preview <span class="token parameter variable" style="color: #e90;">--execution</span><span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">=</span>local
<span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">|</span> Welcome to JShell -- Version <span class="token number" style="color: #905;">21</span>-ea
<span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">|</span> For an introduction type: /help intro
jshell<span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">></span> var <span class="token assign-left variable" style="color: #e90;">name</span><span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">=</span><span class="token string" style="color: #690;">"test"</span><span class="token punctuation" style="color: #999;">;</span> STR.<span class="token string" style="color: #690;">"\{name} test"</span><span class="token punctuation" style="color: #999;">;</span>
name <span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">==</span><span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">></span> <span class="token string" style="color: #690;">"test"</span>
<span class="token variable" style="color: #e90;">$2</span> <span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">==</span><span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">></span>
jshell<span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">></span> <span class="token variable" style="color: #e90;">$2</span>.length<span class="token punctuation" style="color: #999;">(</span><span class="token punctuation" style="color: #999;">)</span><span class="token punctuation" style="color: #999;">;</span>
<span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">|</span> Exception java.lang.UnsupportedClassVersionError: Preview features are not enabled <span class="token keyword" style="color: #07a;">for</span> REPL/<span class="token variable" style="color: #e90;">$JShell</span><span class="token variable" style="color: #e90;">$12</span> <span class="token punctuation" style="color: #999;">(</span>class <span class="token function" style="color: #DD4A68;">file</span> version <span class="token number" style="color: #905;">65.65535</span><span class="token punctuation" style="color: #999;">)</span>. Try running with <span class="token string" style="color: #690;">'--enable-preview'</span>
<span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">|</span> at ClassLoader.defineClass1 <span class="token punctuation" style="color: #999;">(</span>Native Method<span class="token punctuation" style="color: #999;">)</span>
<span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">|</span> at ClassLoader.defineClass <span class="token punctuation" style="color: #999;">(</span>ClassLoader.java:1018<span class="token punctuation" style="color: #999;">)</span>
<span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">|</span> at SecureClassLoader.defineClass <span class="token punctuation" style="color: #999;">(</span>SecureClassLoader.java:150<span class="token punctuation" style="color: #999;">)</span>
<span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">|</span> at DefaultLoaderDelegate<span class="token variable" style="color: #e90;">$RemoteClassLoader</span>.findClass <span class="token punctuation" style="color: #999;">(</span>DefaultLoaderDelegate.java:156<span class="token punctuation" style="color: #999;">)</span>
<span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">|</span> at ClassLoader.loadClass <span class="token punctuation" style="color: #999;">(</span>ClassLoader.java:593<span class="token punctuation" style="color: #999;">)</span>
<span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">|</span> at ClassLoader.loadClass <span class="token punctuation" style="color: #999;">(</span>ClassLoader.java:526<span class="token punctuation" style="color: #999;">)</span>
<span class="token operator" style="color: #9a6e3a; background: hsla(0, 0%, 100%, .5);">|</span> at <span class="token punctuation" style="color: #999;">(</span><span class="token comment" style="color: slategray;">#3:1)</span>
</code></pre>
<p dir="auto">I found that by duplicating <code style="margin: 0 0; padding: 0 0.25em; border-radius: 3px; background-color: #F7F7F7;">--enable-preview</code> in runtime options fixes things:</p>
<pre style="margin-left: 15px; margin-right: 15px; padding: 5px; background-color: #F7F7F7; border-radius: 5px 5px 5px 5px; overflow-x: auto; max-width: 90vw;"><code style="margin: 0 0; border-radius: 3px; background-color: #F7F7F7; padding: 0px;">$ jshell --enable-preview --execution=local -J--enable-preview
| Welcome to JShell -- Version 21-ea
| For an introduction type: /help intro
jshell> var name="test"; STR."\{name} test";
name ==> "test"
$2 ==> "test test"
jshell> $2.length();
$3 ==> 9
</code></pre>
<p dir="auto">Seems like a bug to me, wdyt? and where to open/report this best or is it enough here?</p>
<p dir="auto">/max<br>
<a href="https://xam.dk/about" style="color: #3983C4;">https://xam.dk/about</a></p>
</div>
</div>
</body>
</html>