runtime(java): Make changes for JDK 27
Commit:
https://github.com/vim/vim/commit/4d0ad5cb9b0d4d0da03237e4bda4dd162542820d
Author: Aliaksei Budavei <
0x00...@gmail.com>
Date: Thu Sep 24 18:44:52 2026 +0000
runtime(java): Make changes for JDK 27
Reintroduce supported syntax-preview-feature numbers 455,
488, 507, and 530 as _a new number_ 532.
Reference:
https://openjdk.org/jeps/532 (Primitive Types in Patterns etc.)
closes: #21341
Signed-off-by: Aliaksei Budavei <
0x00...@gmail.com>
Signed-off-by: Christian Brabandt <
c...@256bit.org>
diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index 6044e5711..493412810 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -1,4 +1,4 @@
-*syntax.txt* For Vim version 9.2. Last change: 2026 Sep 21
+*syntax.txt* For Vim version 9.2. Last change: 2026 Sep 24
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -2305,11 +2305,11 @@ cycles for such a feature to become either integrated into the platform or
withdrawn from this effort. To cater for early adopters, there is optional
support in Vim for syntax related preview features that are implemented. You
can request it by specifying a list of preview feature numbers as follows: >
- :let g:java_syntax_previews = [530]
+ :let g:java_syntax_previews = [532]
The supported JEP numbers are to be drawn from this table:
`430`: String Templates [JDK 21]
- `530`: Primitive types in Patterns, instanceof, and switch
+ `532`: Primitive types in Patterns, instanceof, and switch
Note that as soon as the particular preview feature will have been integrated
into the Java platform, its entry will be removed from the table and related
diff --git a/runtime/syntax/java.vim b/runtime/syntax/java.vim
index ee2b06ffd..762708c56 100644
--- a/runtime/syntax/java.vim
+++ b/runtime/syntax/java.vim
@@ -3,7 +3,7 @@
" Maintainer: Aliaksei Budavei <0x000c70 AT gmail DOT com>
" Former Maintainer: Claudio Fleiner <
cla...@fleiner.com>
" Repository:
https://github.com/zzzyxwvut/java-vim.git
-" Last Change: 2026 Mar 22
+" Last Change: 2026 Sep 18
" Please check ":help java.vim" for comments on some of the options
" available.
@@ -111,6 +111,10 @@ syn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|\*\/"
" use separate name so that it can be deleted in javacc.vim
syn match javaError2 "#\|=<"
+" (Without knowing what Java release is being targeted for the source
+" file it is found in, an underscore token cannot be reliably matched
+" as an identifier _or_ a syntax error _or_ a keyword.)
+"
" Keywords (JLS-17, §3.9):
syn keyword javaExternal native package
syn match javaExternal "\<import\>\%(\s\+static\>\)\="
@@ -381,7 +385,7 @@ endif
exec 'syn match javaUserLabel "^\s*\<\K\k*\>\%(\<default\>\)\@' . s:ff.Peek('7', '') . '<!\s*::\@!"he=e-1'
-if s:ff.IsAnyRequestedPreviewFeatureOf([455, 488, 507, 530])
+if s:ff.IsAnyRequestedPreviewFeatureOf([455, 488, 507, 530, 532])
syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":\|->" contains=javaBoolean,javaNumber,javaCharacter,javaString,javaConstant,@javaClasses,javaGenerics,javaType,javaLabelDefault,javaLabelVarType,javaLabelWhenClause
else
syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":\|->" contains=javaLabelCastType,javaLabelNumber,javaCharacter,javaString,javaConstant,@javaClasses,javaGenerics,javaLabelDefault,javaLabelVarType,javaLabelWhenClause
diff --git a/runtime/syntax/testdir/dumps/java_numbers_00.dump b/runtime/syntax/testdir/dumps/java_numbers_00.dump
index 6ffb5d127..6bdcae66a 100644
--- a/runtime/syntax/testdir/dumps/java_numbers_00.dump
+++ b/runtime/syntax/testdir/dumps/java_numbers_00.dump
@@ -1,4 +1,10 @@
->c+0#00e0003#ffffff0|l|a|s@1| +0#0000000&|N|u|m|b|e|r|s|T|e|s|t|s| @56
+>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|c|o|m@1|e|n|t|_|s|t|r|i|n|g|s| |=| |1+0#e000002&| +0#0000000&@26
+@75
+@75
+@75
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|P|r|e|d|i|c|a|t|e|;| @38
+@75
+|c+0#00e0003&|l|a|s@1| +0#0000000&|N|u|m|b|e|r|s|T|e|s|t|s| @1|/+0#0000e05&@1| |J|D|K| |8+0#e000002&|=+0#0000e05&| |(|-@1|r|e|l|e|a|s|e| |8+0#e000002&|)+0#0000e05&|.| +0#0000000&@30
|{| @73
@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|{| @62
@8|d+0#00e0003&|o|u|b|l|e|[+0#0000000&|]| |d@1| |=| |{| @51
@@ -11,10 +17,4 @@
@12|0+0#e000002&|x|.|0|p|-|0|,+0#0000000&| |0+0#e000002&|x|0|.|p|-|0|,+0#0000000&| |0+0#e000002&|x|0|.|0|p|-|0|,+0#0000000&| |0+0#e000002&|x|0|P|-|0|,+0#0000000&| @27
@12|0+0#e000002&|x|.|0|p|-|0|d|,+0#0000000&| |0+0#e000002&|x|0|.|p|-|0|d|,+0#0000000&| |0+0#e000002&|x|0|.|0|p|-|0|d|,+0#0000000&| |0+0#e000002&|x|0|P|-|0|D|,+0#0000000&| @23
@12|0+0#e000002&|x|.|0|p|-|0|f|,+0#0000000&| |0+0#e000002&|x|0|.|p|-|0|f|,+0#0000000&| |0+0#e000002&|x|0|.|0|p|-|0|f|,+0#0000000&| |0+0#e000002&|x|0|P|-|0|F|,+0#0000000&| @23
-@12|0+0#e000002&|x|.|0|p|+|0|,+0#0000000&| |0+0#e000002&|x|0|.|p|+|0|,+0#0000000&| |0+0#e000002&|x|0|.|0|p|+|0|,+0#0000000&| |0+0#e000002&|x|0|P|+|0|,+0#0000000&| @27
-@12|0+0#e000002&|x|.|0|p|+|0|d|,+0#0000000&| |0+0#e000002&|x|0|.|p|+|0|d|,+0#0000000&| |0+0#e000002&|x|0|.|0|p|+|0|d|,+0#0000000&| |0+0#e000002&|x|0|P|+|0|D|,+0#0000000&| @23
-@12|0+0#e000002&|x|.|0|p|+|0|f|,+0#0000000&| |0+0#e000002&|x|0|.|p|+|0|f|,+0#0000000&| |0+0#e000002&|x|0|.|0|p|+|0|f|,+0#0000000&| |0+0#e000002&|x|0|P|+|0|F|,+0#0000000&| @23
-@75
-@12|1+0#e000002&|.|,+0#0000000&| |1+0#e000002&|.|2|,+0#0000000&| |1+0#e000002&|.|2|e|3|,+0#0000000&| |1+0#e000002&|.|2|e|3|d|,+0#0000000&| |1+0#e000002&|.|2|e|3|f|,+0#0000000&| @31
-@16|1+0#e000002&|.|2|e|-|3|,+0#0000000&| |1+0#e000002&|.|2|e|-|3|d|,+0#0000000&| |1+0#e000002&|.|2|E|-|3|F|,+0#0000000&| @33
@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/java_numbers_01.dump b/runtime/syntax/testdir/dumps/java_numbers_01.dump
index d9aee00fa..30b1c7154 100644
--- a/runtime/syntax/testdir/dumps/java_numbers_01.dump
+++ b/runtime/syntax/testdir/dumps/java_numbers_01.dump
@@ -1,9 +1,15 @@
-| +0&#ffffff0@11|0+0#e000002&|x|.|0|p|+|0|,+0#0000000&| |0+0#e000002&|x|0|.|p|+|0|,+0#0000000&| |0+0#e000002&|x|0|.|0|p|+|0|,+0#0000000&| |0+0#e000002&|x|0|P|+|0|,+0#0000000&| @27
+| +0&#ffffff0@11|0+0#e000002&|x|.|0|p|0|,+0#0000000&| |0+0#e000002&|x|0|.|p|0|,+0#0000000&| |0+0#e000002&|x|0|.|0|p|0|,+0#0000000&| |0+0#e000002&|x|0|P|0|,+0#0000000&| @31
+@12|0+0#e000002&|x|.|0|p|0|d|,+0#0000000&| |0+0#e000002&|x|0|.|p|0|d|,+0#0000000&| |0+0#e000002&|x|0|.|0|p|0|d|,+0#0000000&| |0+0#e000002&|x|0|P|0|D|,+0#0000000&| @27
+@12|0+0#e000002&|x|.|0|p|0|f|,+0#0000000&| |0+0#e000002&|x|0|.|p|0|f|,+0#0000000&| |0+0#e000002&|x|0|.|0|p|0|f|,+0#0000000&| |0+0#e000002&|x|0|P|0|F|,+0#0000000&| @27
+@12|0+0#e000002&|x|.|0|p|-|0|,+0#0000000&| |0+0#e000002&|x|0|.|p|-|0|,+0#0000000&| |0+0#e000002&|x|0|.|0|p|-|0|,+0#0000000&| |0+0#e000002&|x|0|P|-|0|,+0#0000000&| @27
+@12|0+0#e000002&|x|.|0|p|-|0|d|,+0#0000000&| |0+0#e000002&|x|0|.|p|-|0|d|,+0#0000000&| |0+0#e000002&|x|0|.|0|p|-|0|d|,+0#0000000&| |0+0#e000002&|x|0|P|-|0|D|,+0#0000000&| @23
+@12>0+0#e000002&|x|.|0|p|-|0|f|,+0#0000000&| |0+0#e000002&|x|0|.|p|-|0|f|,+0#0000000&| |0+0#e000002&|x|0|.|0|p|-|0|f|,+0#0000000&| |0+0#e000002&|x|0|P|-|0|F|,+0#0000000&| @23
+@12|0+0#e000002&|x|.|0|p|+|0|,+0#0000000&| |0+0#e000002&|x|0|.|p|+|0|,+0#0000000&| |0+0#e000002&|x|0|.|0|p|+|0|,+0#0000000&| |0+0#e000002&|x|0|P|+|0|,+0#0000000&| @27
@12|0+0#e000002&|x|.|0|p|+|0|d|,+0#0000000&| |0+0#e000002&|x|0|.|p|+|0|d|,+0#0000000&| |0+0#e000002&|x|0|.|0|p|+|0|d|,+0#0000000&| |0+0#e000002&|x|0|P|+|0|D|,+0#0000000&| @23
@12|0+0#e000002&|x|.|0|p|+|0|f|,+0#0000000&| |0+0#e000002&|x|0|.|p|+|0|f|,+0#0000000&| |0+0#e000002&|x|0|.|0|p|+|0|f|,+0#0000000&| |0+0#e000002&|x|0|P|+|0|F|,+0#0000000&| @23
@75
@12|1+0#e000002&|.|,+0#0000000&| |1+0#e000002&|.|2|,+0#0000000&| |1+0#e000002&|.|2|e|3|,+0#0000000&| |1+0#e000002&|.|2|e|3|d|,+0#0000000&| |1+0#e000002&|.|2|e|3|f|,+0#0000000&| @31
-@16>1+0#e000002&|.|2|e|-|3|,+0#0000000&| |1+0#e000002&|.|2|e|-|3|d|,+0#0000000&| |1+0#e000002&|.|2|E|-|3|F|,+0#0000000&| @33
+@16|1+0#e000002&|.|2|e|-|3|,+0#0000000&| |1+0#e000002&|.|2|e|-|3|d|,+0#0000000&| |1+0#e000002&|.|2|E|-|3|F|,+0#0000000&| @33
@16|1+0#e000002&|.|2|e|+|3|,+0#0000000&| |1+0#e000002&|.|2|E|+|3|D|,+0#0000000&| |1+0#e000002&|.|2|e|+|3|f|,+0#0000000&| @33
@12|.+0#e000002&|2|,+0#0000000&| |.+0#e000002&|2|e|3|,+0#0000000&| |.+0#e000002&|2|e|3|d|,+0#0000000&| |.+0#e000002&|2|e|3|f|,+0#0000000&| @39
@16|.+0#e000002&|2|e|-|3|,+0#0000000&| |.+0#e000002&|2|e|-|3|d|,+0#0000000&| |.+0#e000002&|2|E|-|3|F|,+0#0000000&| @36
@@ -11,10 +17,4 @@
@12|1+0#e000002&|e|3|,+0#0000000&| |1+0#e000002&|e|3|d|,+0#0000000&| |1+0#e000002&|e|3|f|,+0#0000000&| @46
@16|1+0#e000002&|e|-|3|,+0#0000000&| |1+0#e000002&|e|-|3|d|,+0#0000000&| |1+0#e000002&|E|-|3|F|,+0#0000000&| @39
@16|1+0#e000002&|e|+|3|,+0#0000000&| |1+0#e000002&|E|+|3|D|,+0#0000000&| |1+0#e000002&|e|+|3|f|,+0#0000000&| @39
-@12|1+0#e000002&|d|,+0#0000000&| |1+0#e000002&|D|,+0#0000000&| |1+0#e000002&|f|,+0#0000000&| |1+0#e000002&|F|,+0#0000000&| @47
-@75
-|/+0#0000e05&@2|/+0#e000e06&| |M|A|L|F|O|R|M|E|D|:| |:|l|e|t| |g|:|j|a|v|a|_+0#ffffff16#ff404010|c+0#e000e06#ffffff0|o|m@1|e|n|t|_+0#ffffff16#ff404010|s+0#e000e06#ffffff0|t|r|i|n|g|s| |=| |1| ||| |d|o|a|u|t|o|c|m|d| |S|y|n|t|a|x| +0#0000000&@8
-|/+0#0000e05&@1| @9|0|_|x|.|0|p|0|,| |0|x|.|_|0|p|0|,| |0|x|.|0|_|p|0|,| |0|x|.|0|p|_|0|,| |0|x|.|0|p|0|_|,| +0#0000000&@18
-|/+0#0000e05&@1| @9|0|x|0|_|.|0|p|0|,| |0|x|_|0|.|0|p|0|,| |0|x|p|0|,| +0#0000000&@37
-@8|}|;| @64
-@57|1|9|,|5|-|1|7| @6|1|8|%|
+@57|1|9|,|4|-|1|3| @6|1|2|%|
diff --git a/runtime/syntax/testdir/dumps/java_numbers_02.dump b/runtime/syntax/testdir/dumps/java_numbers_02.dump
index 73f2e8e2d..51d1dca37 100644
--- a/runtime/syntax/testdir/dumps/java_numbers_02.dump
+++ b/runtime/syntax/testdir/dumps/java_numbers_02.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@7|}|;| @64
+| +0&#ffffff0@15|1+0#e000002&|e|+|3|,+0#0000000&| |1+0#e000002&|E|+|3|D|,+0#0000000&| |1+0#e000002&|e|+|3|f|,+0#0000000&| @39
+@12|1+0#e000002&|d|,+0#0000000&| |1+0#e000002&|D|,+0#0000000&| |1+0#e000002&|f|,+0#0000000&| |1+0#e000002&|F|,+0#0000000&| @47
+@75
+|/+0#0000e05&@1| |M|A|L|F|O|R|M|E|D|:| +0#0000000&@61
+|/+0#0000e05&@1| @9|0|_|x|.|0|p|0|,| |0|x|.|_|0|p|0|,| |0|x|.|0|_|p|0|,| |0|x|.|0|p|_|0|,| |0|x|.|0|p|0|_|,| +0#0000000&@18
+>/+0#0000e05&@1| @9|0|x|0|_|.|0|p|0|,| |0|x|_|0|.|0|p|0|,| |0|x|p|0|,| +0#0000000&@37
+@8|}|;| @64
@75
@8|i+0#00e0003&|n|t| +0#0000000&|O| |=| |0+0#e000002&|;+0#0000000&| @56
@8|i+0#00e0003&|n|t| +0#0000000&|O@1| |=| |0+0#e000002&@1|;+0#0000000&| @54
@8|i+0#00e0003&|n|t| +0#0000000&|O|x|O| |=| |0+0#e000002&|x|0|;+0#0000000&| @52
-> @74
+@75
@8|i+0#00e0003&|n|t| +0#0000000&|x| |=| |0+0#e000002&|x|1|2|_|3|4|5|_|6|7|8|;+0#0000000&| @45
@8|i+0#00e0003&|n|t| +0#0000000&|y| |=| |0+0#e000002&|b|0|1|_|0|1|_|0|1|_|0|1|_|0|1|;+0#0000000&| @41
@8|i+0#00e0003&|n|t| +0#0000000&|z| |=| |0+0#e000002&|_@1|1|_@1|2|_@1|3|_@1|4|_@1|5|_@1|6|_@1|7|;+0#0000000&| @35
@75
-@8|/+0#0000e05&@1| |S|t|r|i|n|g|.|f|o|r|m|a|t|(|"|%|a|"|,| |-|1|.|0|)| +0#0000000&@38
+@8|/+0#0000e05&@1| |S|t|r|i|n|g|.|f|o|r|m|a|t|(|"+0#e000002&|%|a|"|,+0#0000e05&| |-|1+0#e000002&|.|0|)+0#0000e05&| +0#0000000&@38
@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|m|i|n|u|s|_|o|n|e|_|d| |=| |-|0+0#e000002&|x|1|.|0|p|0|;+0#0000000&| @36
@75
-@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|z|_|d| |=| |-|0+0#e000002&|x|.|0|p|0|;+0#0000000&| @45
-@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|y|_|d| |=| |0+0#e000002&|x|a|p|1|_@1|0|_@1|0|;+0#0000000&| @41
-@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|x|_|d| |=| |.+0#e000002&|0|_@1|1|_@1|2|_@1|3|_@1|4|_@1|5|_@1|6|_@1|7|_@1|8|_@1|9|;+0#0000000&| @23
-@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|d|o|t|_|O| |=| |.+0#e000002&|0|;+0#0000000&| @48
-@75
-@8|/+0#0000e05&@1| |J|L|S|,| |§|3|.|1|0|.|2|:| +0#0000000&@50
-@57|3|7|,|0|-|1| @7|4@1|%|
+@57|3|7|,|1| @9|3|0|%|
diff --git a/runtime/syntax/testdir/dumps/java_numbers_03.dump b/runtime/syntax/testdir/dumps/java_numbers_03.dump
index e3b5dba14..d6ed466e0 100644
--- a/runtime/syntax/testdir/dumps/java_numbers_03.dump
+++ b/runtime/syntax/testdir/dumps/java_numbers_03.dump
@@ -1,9 +1,15 @@
-| +0&#ffffff0@7|/+0#0000e05&@1| |J|L|S|,| |§|3|.|1|0|.|2|:| +0#0000000&@50
+| +0&#ffffff0@74
+@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|z|_|d| |=| |-|0+0#e000002&|x|.|0|p|0|;+0#0000000&| @45
+@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|y|_|d| |=| |0+0#e000002&|x|a|p|1|_@1|0|_@1|0|;+0#0000000&| @41
+@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|x|_|d| |=| |.+0#e000002&|0|_@1|1|_@1|2|_@1|3|_@1|4|_@1|5|_@1|6|_@1|7|_@1|8|_@1|9|;+0#0000000&| @23
+@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|d|o|t|_|O| |=| |.+0#e000002&|0|;+0#0000000&| @48
+> @74
+@8|/+0#0000e05&@1| |J|L|S|,| |§|3+0#e000002&|.|1|0|.|2|:+0#0000e05&| +0#0000000&@50
@8|f+0#00e0003&|l|o|a|t| +0#0000000&|m|a|x|_|d|e|c|_|f| |=| |3+0#e000002&|.|4|0|2|8|2|3|5|e|3|8|f|;+0#0000000&| @34
@8|f+0#00e0003&|l|o|a|t| +0#0000000&|m|a|x|_|h|e|x|_|f| |=| |0+0#e000002&|x|1|.|f@4|e|P|+|1|2|7|f|;+0#0000000&| @31
@8|f+0#00e0003&|l|o|a|t| +0#0000000&|m|i|n|_|d|e|c|_|f| |=| |1+0#e000002&|.|4|e|-|4|5|f|;+0#0000000&| @39
@8|f+0#00e0003&|l|o|a|t| +0#0000000&|m|i|n|_|h|e|x|_|f|_|a| |=| |0+0#e000002&|x|0|.|0@4|2|P|-|1|2|6|f|;+0#0000000&| @29
-@8>f+0#00e0003&|l|o|a|t| +0#0000000&|m|i|n|_|h|e|x|_|f|_|b| |=| |0+0#e000002&|x|1|.|0|P|-|1|4|9|f|;+0#0000000&| @34
+@8|f+0#00e0003&|l|o|a|t| +0#0000000&|m|i|n|_|h|e|x|_|f|_|b| |=| |0+0#e000002&|x|1|.|0|P|-|1|4|9|f|;+0#0000000&| @34
@75
@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|m|a|x|_|d|e|c|_|d| |=| |1+0#e000002&|.|7|9|7|6|9|3|1|3|4|8|6|2|3|1|5|7|e|3|_@1|0|_@1|8|;+0#0000000&| @20
@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|m|a|x|_|h|e|x|_|d| |=| |0+0#e000002&|x|1|.|f|_|f@3|_|f@3|_|f@3|P|+|1|0|2|3|;+0#0000000&| @20
@@ -11,10 +17,4 @@
@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|m|i|n|_|h|e|x|_|d|_|a| |=| |0+0#e000002&|x|0|.|0|_|0@3|_|0@3|_|0@2|1|P|-|1|0|2@1|;+0#0000000&| @18
@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|m|i|n|_|h|e|x|_|d|_|b| |=| |0+0#e000002&|x|1|.|0|P|-|1|0|7|4|;+0#0000000&| @33
@75
-@8|/+0#0000e05&@1| |J|L|S|,| |§|3|.|1|0|.|1|:| +0#0000000&@50
-@8|i+0#00e0003&|n|t| +0#0000000&|m|a|x|_|h|e|x| |=| |0+0#e000002&|x|7|f@2|_|f@3|;+0#0000000&| @40
-@8|i+0#00e0003&|n|t| +0#0000000&|m|a|x|_|o|c|t| |=| |0+0#e000002&|1|7@1|_|7@3|_|7@3|;+0#0000000&| @37
-@8|i+0#00e0003&|n|t| +0#0000000&|m|a|x|_|b|i|n| |=| |0+0#e000002&|b|0|1@2|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|;+0#0000000&| @10
-@75
-@8|i+0#00e0003&|n|t| +0#0000000&|m|i|n|_|h|e|x| |=| |0+0#e000002&|x|8|0@2|_|0@3|;+0#0000000&| @40
-@57|5@1|,|3|-|9| @7|7|1|%|
+@57|5@1|,|0|-|1| @7|4|8|%|
diff --git a/runtime/syntax/testdir/dumps/java_numbers_04.dump b/runtime/syntax/testdir/dumps/java_numbers_04.dump
index d03904dd1..6fc84f3fb 100644
--- a/runtime/syntax/testdir/dumps/java_numbers_04.dump
+++ b/runtime/syntax/testdir/dumps/java_numbers_04.dump
@@ -1,9 +1,15 @@
-| +0&#ffffff0@7|i+0#00e0003&|n|t| +0#0000000&|m|i|n|_|h|e|x| |=| |0+0#e000002&|x|8|0@2|_|0@3|;+0#0000000&| @40
+| +0&#ffffff0@74
+@8|/+0#0000e05&@1| |J|L|S|,| |§|3+0#e000002&|.|1|0|.|1|:+0#0000e05&| +0#0000000&@50
+@8|i+0#00e0003&|n|t| +0#0000000&|m|a|x|_|h|e|x| |=| |0+0#e000002&|x|7|f@2|_|f@3|;+0#0000000&| @40
+@8|i+0#00e0003&|n|t| +0#0000000&|m|a|x|_|o|c|t| |=| |0+0#e000002&|1|7@1|_|7@3|_|7@3|;+0#0000000&| @37
+@8|i+0#00e0003&|n|t| +0#0000000&|m|a|x|_|b|i|n| |=| |0+0#e000002&|b|0|1@2|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|;+0#0000000&| @10
+> @74
+@8|i+0#00e0003&|n|t| +0#0000000&|m|i|n|_|h|e|x| |=| |0+0#e000002&|x|8|0@2|_|0@3|;+0#0000000&| @40
@8|i+0#00e0003&|n|t| +0#0000000&|m|i|n|_|o|c|t| |=| |0+0#e000002&|2|0@1|_|0@3|_|0@3|;+0#0000000&| @37
@8|i+0#00e0003&|n|t| +0#0000000&|m|i|n|_|b|i|n| |=| |0+0#e000002&|b|1|0@2|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|;+0#0000000&| @10
@75
@8|i+0#00e0003&|n|t| +0#0000000&|m|i|n|u|s|_|o|n|e|_|h|e|x| |=| |0+0#e000002&|x|f@3|_|f@3|;+0#0000000&| @34
-@8>i+0#00e0003&|n|t| +0#0000000&|m|i|n|u|s|_|o|n|e|_|o|c|t| |=| |0+0#e000002&|3|7@1|_|7@3|_|7@3|;+0#0000000&| @31
+@8|i+0#00e0003&|n|t| +0#0000000&|m|i|n|u|s|_|o|n|e|_|o|c|t| |=| |0+0#e000002&|3|7@1|_|7@3|_|7@3|;+0#0000000&| @31
@8|i+0#00e0003&|n|t| +0#0000000&|m|i|n|u|s|_|o|n|e|_|b|i|n| |=| |0+0#e000002&|b|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|;+0#0000000&| @4
@75
@8|l+0#00e0003&|o|n|g| +0#0000000&|m|a|x|_|h|e|x|_|l| |=| |0+0#e000002&|x|7|f@2|_|f@3|_|f@3|_|f@3|L|;+0#0000000&| @26
@@ -11,10 +17,4 @@
@8|l+0#00e0003&|o|n|g| +0#0000000&|m|a|x|_|b|i|n|_|l| |=| |0+0#e000002&|b|0|1@2|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@2
@1|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|L|;+0#0000000&| @41
@75
-@8|l+0#00e0003&|o|n|g| +0#0000000&|m|i|n|_|h|e|x|_|l| |=| |0+0#e000002&|x|8|0@2|_|0@3|_|0@3|_|0@3|L|;+0#0000000&| @26
-@8|l+0#00e0003&|o|n|g| +0#0000000&|m|i|n|_|o|c|t|_|l| |=| |0+0#e000002&|1|0|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|L|;+0#0000000&| @19
-@8|l+0#00e0003&|o|n|g| +0#0000000&|m|i|n|_|b|i|n|_|l| |=| |0+0#e000002&|b|1|0@2|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|_|0@2
-@1|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|L|;+0#0000000&| @41
-@75
-@8|l+0#00e0003&|o|n|g| +0#0000000&|m|i|n|u|s|_|o|n|e|_|h|e|x|_|l| |=| |0+0#e000002&|x|f@3|_|f@3|_|f@3|_|f@3|L|;+0#0000000&| @20
-@57|7|3|,|3|-|9| @7|9|4|%|
+@57|7|3|,|0|-|1| @7|6|5|%|
diff --git a/runtime/syntax/testdir/dumps/java_numbers_05.dump b/runtime/syntax/testdir/dumps/java_numbers_05.dump
index 59e6f1f99..9eb66a00e 100644
--- a/runtime/syntax/testdir/dumps/java_numbers_05.dump
+++ b/runtime/syntax/testdir/dumps/java_numbers_05.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@7|l+0#00e0003&|o|n|g| +0#0000000&|m|i|n|u|s|_|o|n|e|_|h|e|x|_|l| |=| |0+0#e000002&|x|f@3|_|f@3|_|f@3|_|f@3|L|;+0#0000000&| @20
+| +0&#ffffff0@74
+@8|l+0#00e0003&|o|n|g| +0#0000000&|m|i|n|_|h|e|x|_|l| |=| |0+0#e000002&|x|8|0@2|_|0@3|_|0@3|_|0@3|L|;+0#0000000&| @26
+@8|l+0#00e0003&|o|n|g| +0#0000000&|m|i|n|_|o|c|t|_|l| |=| |0+0#e000002&|1|0|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|L|;+0#0000000&| @19
+@8|l+0#00e0003&|o|n|g| +0#0000000&|m|i|n|_|b|i|n|_|l| |=| |0+0#e000002&|b|1|0@2|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|_|0@2
+@1|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|L|;+0#0000000&| @41
+> @74
+@8|l+0#00e0003&|o|n|g| +0#0000000&|m|i|n|u|s|_|o|n|e|_|h|e|x|_|l| |=| |0+0#e000002&|x|f@3|_|f@3|_|f@3|_|f@3|L|;+0#0000000&| @20
@8|l+0#00e0003&|o|n|g| +0#0000000&|m|i|n|u|s|_|o|n|e|_|o|c|t|_|l| |=| |0+0#e000002&|1|7|_|7@3|_|7@3|_|7@3|_|7@3|_|7@3|L|;+0#0000000&| @13
@8|l+0#00e0003&|o|n|g| +0#0000000&|m|i|n|u|s|_|o|n|e|_|b|i|n|_|l| |=| |0+0#e000002&|b|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@1
@2|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|L|;+0#0000000&| @35
-@4|}| @69
->}| @73
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|8@1|,|1| @9|B|o|t|
+@75
+@8|f+0#00e0003&|i|n|a|l| +0#0000000&|P|r|e|d|i|c|a|t|e|<|I|n|t|e|g|e|r|>| |p| |=| |n| |-|>| |n| |!|=| |0+0#e000002&|;+0#0000000&| @25
+@75
+@8|t+0#af5f00255&|r|y| +0#0000000&|{| @61
+@12|e|c|h|o|(|x|o|r|(|u|n|u|s|e|d| |-|>| |f+0#e000002&|a|l|s|e|,+0#0000000&| |f+0#e000002&|a|l|s|e|,+0#0000000&| |f+0#e000002&|a|l|s|e|)+0#0000000&@1|;| @21
+@12|e|c|h|o|(|x|o|r|(|p|,| |1+0#e000002&|,+0#0000000&| |0+0#e000002&|)+0#0000000&@1|;| @43
+@12|e|c|h|o|(|x|o|r|(|p|,| |0+0#e000002&|,+0#0000000&| |1+0#e000002&|)+0#0000000&@1|;| @43
+@12|e|c|h|o|(|x|o|r|(|p|,| |1+0#e000002&|,+0#0000000&| |1+0#e000002&|)+0#0000000&@1|;| @43
+@8|}| |c+0#af5f00255&|a|t|c|h| +0#0000000&|(|f+0#00e0003&|i|n|a|l| +0#0000000&|A|r|i|t|h|m|e|t|i|c|E|x|c|e|p|t|i|o|n| |_|)| |{| @27
+@57|8|9|,|0|-|1| @7|8|1|%|
diff --git a/runtime/syntax/testdir/dumps/java_numbers_06.dump b/runtime/syntax/testdir/dumps/java_numbers_06.dump
new file mode 100644
index 000000000..5d11cd036
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_numbers_06.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|}| |c+0#af5f00255&|a|t|c|h| +0#0000000&|(|f+0#00e0003&|i|n|a|l| +0#0000000&|A|r|i|t|h|m|e|t|i|c|E|x|c|e|p|t|i|o|n| |_|)| |{| @27
+@8|}| @65
+@4|}| @69
+@75
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|b+0#00e0003&|o@1|l|e|a|n| +0#0000000&|_| |[|]| |=| |n+0#af5f00255&|e|w| +0#0000000&|b+0#00e0003&|o@1|l|e|a|n|[+0#0000000&|2+0#e000002&|]+0#0000000&|;| @25
+> @74
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|e|c|h|o|(|O|b|j|e|c|t| |o|)| |{| |S|y|s|t|e|m|.|o|u|t|.|p|r|i|n|t|l|n|(|o|)|;| |}| @17
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|<|T|>| |b+0#00e0003&|o@1|l|e|a|n| +0#0000000&|x|o|r|(|P|r|e|d|i|c|a|t|e|<|T|>| |p|,| |T| |x|,| |T| |y|)| @22
+@4|{| @69
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(@1|_| |[|0+0#e000002&|]+0#0000000&| |=| |x| |i+0#af5f00255&|n|s|t|a|n|c|e|o|f| +0#0000000&|B|o@1|l|e|a|n|)| @28
+@16|&| |(|_| |[|1+0#e000002&|]+0#0000000&| |=| |y| |i+0#af5f00255&|n|s|t|a|n|c|e|o|f| +0#0000000&|B|o@1|l|e|a|n|)@1| @25
+@12|?| |(|b+0#00e0003&|o@1|l|e|a|n|)+0#0000000&| |x| |^| |(|b+0#00e0003&|o@1|l|e|a|n|)+0#0000000&| |y| @35
+@12|:| |(|_| |[|0+0#e000002&|]+0#0000000&|)| @53
+@16|?| |(|b+0#00e0003&|o@1|l|e|a|n|)+0#0000000&| |x| |^| |p|.|t|e|s|t|(|y|)| @33
+@16|:| |(|_| |[|1+0#e000002&|]+0#0000000&|)| @49
+@20|?| |p|.|t|e|s|t|(|x|)| |^| |(|b+0#00e0003&|o@1|l|e|a|n|)+0#0000000&| |y| @29
+@20|:| |p|.|t|e|s|t|(|x|)| |^| |p|.|t|e|s|t|(|y|)|;| @30
+@4|}| @69
+@57|1|0|6|,|0|-|1| @6|9@1|%|
diff --git a/runtime/syntax/testdir/dumps/java_numbers_07.dump b/runtime/syntax/testdir/dumps/java_numbers_07.dump
new file mode 100644
index 000000000..5ea8dadcb
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_numbers_07.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|}| @69
+>}| @73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|2|0|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_previews_455_00.dump b/runtime/syntax/testdir/dumps/java_previews_455_00.dump
index 1612b7926..3638117da 100644
--- a/runtime/syntax/testdir/dumps/java_previews_455_00.dump
+++ b/runtime/syntax/testdir/dumps/java_previews_455_00.dump
@@ -1,7 +1,9 @@
->/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|s|y|n|t|a|x|_|p|r|e|v|i|e|w|s| |=| |[|4|5@1|,| |4|8@1|,| |5|0|7|,| |5|3|0|]| +0#0000000&@7
+>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|s|y|n|t|a|x|_|p|r|e|v|i|e|w|s| |=| |[|4|5@1|,| |4|8@1|,| |5|0|7|,| |5|3|0|,| |5|3|2|]| +0#0000000&@2
@75
@75
@75
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|P|r|e|d|i|c|a|t|e|;| @38
+@75
|c+0#00e0003&|l|a|s@1| +0#0000000&|P|r|i|m|i|t|i|v|e|S|w|i|t|c|h|T|e|s|t|s| @1|/+0#0000e05&@1| |J|D|K| |2|3|+| |(|-@1|e|n|a|b|l|e|-|p|r|e|v|i|e|w| |-@1|r|e|l|e|a|s|e| |2|3|)|.| +0#0000000&@3
|{| @73
@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|e|c|h|o|(|O|b|j|e|c|t| |o|)| |{| |S|y|s|t|e|m|.|o|u|t|.|p|r|i|n|t|l|n|(|o|)|;| |}| @17
@@ -15,6 +17,4 @@
@8|d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @7|{| |e|c|h|o|(|-|1+0#e000002&|L|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @29
@8|}| @65
@75
-@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|g|)| |{| @49
-@12|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|L| +0#0000000&@4|-|>| |0+0#e000002&|L|;+0#0000000&| @44
@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/java_previews_455_01.dump b/runtime/syntax/testdir/dumps/java_previews_455_01.dump
index 4b5532209..eb3c2c5af 100644
--- a/runtime/syntax/testdir/dumps/java_previews_455_01.dump
+++ b/runtime/syntax/testdir/dumps/java_previews_455_01.dump
@@ -1,9 +1,11 @@
-| +0&#ffffff0@7|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|L|:+0#0000000&| @7|{| |e|c|h|o|(|1+0#e000002&|L|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @30
+| +0&#ffffff0@7|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|g|)| |{| @54
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|L|:+0#0000000&| @7|{| |e|c|h|o|(|0+0#e000002&|L|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @30
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|L|:+0#0000000&| @7|{| |e|c|h|o|(|1+0#e000002&|L|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @30
@8|d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @7|{| |e|c|h|o|(|-|1+0#e000002&|L|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @29
@8|}| @65
-@75
+> @74
@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|g|)| |{| @49
-@12>c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|L| +0#0000000&@4|-|>| |0+0#e000002&|L|;+0#0000000&| @44
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|L| +0#0000000&@4|-|>| |0+0#e000002&|L|;+0#0000000&| @44
@12|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|L| +0#0000000&@4|-|>| |1+0#e000002&|L|;+0#0000000&| @44
@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@4|-|>| |-|1+0#e000002&|L|;+0#0000000&| @43
@8|}|)|;| @63
@@ -15,6 +17,4 @@
@8|c+0#af5f00255&|a|s|e| +0#0000000&|f+0#e000002&|a|l|s|e|:+0#0000000&| @4|{| |e|c|h|o|(|f+0#e000002&|a|l|s|e|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @27
@8|}| @65
@75
-@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|b|o@1|l|)| |{| @46
-@12|c+0#af5f00255&|a|s|e| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&@2|-|>| |t+0#e000002&|r|u|e|;+0#0000000&| @42
-@57|1|9|,|4|-|1|3| @6|2|8|%|
+@57|1|9|,|0|-|1| @7|1|8|%|
diff --git a/runtime/syntax/testdir/dumps/java_previews_455_02.dump b/runtime/syntax/testdir/dumps/java_previews_455_02.dump
index 95c055624..1ff8e7d76 100644
--- a/runtime/syntax/testdir/dumps/java_previews_455_02.dump
+++ b/runtime/syntax/testdir/dumps/java_previews_455_02.dump
@@ -1,9 +1,11 @@
-| +0&#ffffff0@11|c+0#af5f00255&|a|s|e| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&@2|-|>| |t+0#e000002&|r|u|e|;+0#0000000&| @42
+| +0&#ffffff0@74
+@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|b|o@1|l|)| |{| @46
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&@2|-|>| |t+0#e000002&|r|u|e|;+0#0000000&| @42
@12|c+0#af5f00255&|a|s|e| +0#0000000&|f+0#e000002&|a|l|s|e| +0#0000000&@1|-|>| |f+0#e000002&|a|l|s|e|;+0#0000000&| @41
@8|}|)|;| @63
-@75
-@8|f+0#00e0003&|l|o|a|t| +0#0000000&|f| |=| |2+0#e000002&|.|0|f|;+0#0000000&| @51
> @74
+@8|f+0#00e0003&|l|o|a|t| +0#0000000&|f| |=| |2+0#e000002&|.|0|f|;+0#0000000&| @51
+@75
@8|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|f|)| |{| @54
@8|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|.|0|f|:+0#0000000&| @5|{| |e|c|h|o|(|0+0#e000002&|.|0|f|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @28
@8|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|.|0|f|:+0#0000000&| @5|{| |e|c|h|o|(|1+0#e000002&|.|0|f|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @28
@@ -15,6 +17,4 @@
@12|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|.|0|f| +0#0000000&@2|-|>| |1+0#e000002&|.|0|f|;+0#0000000&| @42
@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@4|-|>| |-|1+0#e000002&|.|0|f|;+0#0000000&| @41
@8|}|)|;| @63
-@75
-@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|d| |=| |2+0#e000002&|.|0|;+0#0000000&| @51
-@57|3|7|,|0|-|1| @7|6|8|%|
+@57|3|7|,|0|-|1| @7|4@1|%|
diff --git a/runtime/syntax/testdir/dumps/java_previews_455_03.dump b/runtime/syntax/testdir/dumps/java_previews_455_03.dump
index f44ad1760..cbc578a06 100644
--- a/runtime/syntax/testdir/dumps/java_previews_455_03.dump
+++ b/runtime/syntax/testdir/dumps/java_previews_455_03.dump
@@ -1,9 +1,11 @@
-| +0&#ffffff0@7|d+0#00e0003&|o|u|b|l|e| +0#0000000&|d| |=| |2+0#e000002&|.|0|;+0#0000000&| @51
+| +0&#ffffff0@7|}|)|;| @63
+@75
+@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|d| |=| |2+0#e000002&|.|0|;+0#0000000&| @51
@75
@8|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|d|)| |{| @54
-@8|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|.|0|:+0#0000000&| @6|{| |e|c|h|o|(|0+0#e000002&|.|0|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @29
+@8>c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|.|0|:+0#0000000&| @6|{| |e|c|h|o|(|0+0#e000002&|.|0|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @29
@8|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|.|0|:+0#0000000&| @6|{| |e|c|h|o|(|1+0#e000002&|.|0|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @29
-@8>d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @7|{| |e|c|h|o|(|-|1+0#e000002&|.|0|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @28
+@8|d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @7|{| |e|c|h|o|(|-|1+0#e000002&|.|0|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @28
@8|}| @65
@75
@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|d|)| |{| @49
@@ -11,10 +13,8 @@
@12|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|.|0| +0#0000000&@3|-|>| |1+0#e000002&|.|0|;+0#0000000&| @43
@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@4|-|>| |-|1+0#e000002&|.|0|;+0#0000000&| @42
@8|}|)|;| @63
-@4|}| @69
-|}| @73
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|5@1|,|3|-|9| @7|B|o|t|
+@75
+@8|f+0#00e0003&|i|n|a|l| +0#0000000&|P|r|e|d|i|c|a|t|e|<|I|n|t|e|g|e|r|>| |p| |=| |n| |-|>| |n| |!|=| |0+0#e000002&|;+0#0000000&| @25
+@75
+@8|t+0#af5f00255&|r|y| +0#0000000&|{| @61
+@57|5@1|,|3|-|9| @7|7|1|%|
diff --git a/runtime/syntax/testdir/dumps/java_previews_455_04.dump b/runtime/syntax/testdir/dumps/java_previews_455_04.dump
new file mode 100644
index 000000000..1569e7f61
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_previews_455_04.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|t+0#af5f00255&|r|y| +0#0000000&|{| @61
+@12|e|c|h|o|(|x|o|r|(|_| |-|>| |f+0#e000002&|a|l|s|e|,+0#0000000&| |f+0#e000002&|a|l|s|e|,+0#0000000&| |f+0#e000002&|a|l|s|e|)+0#0000000&@1|;| @26
+@12|e|c|h|o|(|x|o|r|(|p|,| |1+0#e000002&|,+0#0000000&| |0+0#e000002&|)+0#0000000&@1|;| @43
+@12|e|c|h|o|(|x|o|r|(|p|,| |0+0#e000002&|,+0#0000000&| |1+0#e000002&|)+0#0000000&@1|;| @43
+@12|e|c|h|o|(|x|o|r|(|p|,| |1+0#e000002&|,+0#0000000&| |1+0#e000002&|)+0#0000000&@1|;| @43
+@8>}| |c+0#af5f00255&|a|t|c|h| +0#0000000&|(|f+0#00e0003&|i|n|a|l| +0#0000000&|A|r|i|t|h|m|e|t|i|c|E|x|c|e|p|t|i|o|n| |_|)| |{| @27
+@8|}| @65
+@4|}| @69
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|<|T|>| |b+0#00e0003&|o@1|l|e|a|n| +0#0000000&|x|o|r|(|P|r|e|d|i|c|a|t|e|<|T|>| |p|,| |T| |x|,| |T| |y|)| @22
+@4|{| @69
+@8|r+0#00e0003&|e|c|o|r|d| +0#0000000&|P|a|i|r|<|T|>|(|T| |x|,| |T| |y|)| |{| |}| @38
+@75
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|n+0#af5f00255&|e|w| +0#0000000&|P|a|i|r|<|>|(|x|,| |y|)@1| |{| @32
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|P|a|i|r|(|b+0#00e0003&|o@1|l|e|a|n| +0#0000000&|x|_|,| |b+0#00e0003&|o@1|l|e|a|n| +0#0000000&|y|_|)| |-|>| |x|_| |^| |y|_|;| @17
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|P|a|i|r|(|b+0#00e0003&|o@1|l|e|a|n| +0#0000000&|x|_|,| |_|)| @3|-|>| |x|_| |^| |p|.|t|e|s|t|(|y|)|;| @16
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|P|a|i|r|(|v+0#af5f00255&|a|r| +0#0000000&|_|,| |b+0#00e0003&|o@1|l|e|a|n| +0#0000000&|y|_|)| @3|-|>| |p|.|t|e|s|t|(|x|)| |^| |y|_|;| @12
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|P|a|i|r|<|?|>| |_| @9|-|>| |p|.|t|e|s|t|(|x|)| |^| |p|.|t|e|s|t|(|y|)|;| @13
+@8|}|;| @64
+@57|7|3|,|3|-|9| @7|9|7|%|
diff --git a/runtime/syntax/testdir/dumps/java_previews_455_05.dump b/runtime/syntax/testdir/dumps/java_previews_455_05.dump
new file mode 100644
index 000000000..6a82f4af9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_previews_455_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|}|;| @64
+@4|}| @69
+>}| @73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|8@1|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/input/java_numbers.java b/runtime/syntax/testdir/input/java_numbers.java
index e9265349a..ed4e7871f 100644
--- a/runtime/syntax/testdir/input/java_numbers.java
+++ b/runtime/syntax/testdir/input/java_numbers.java
@@ -1,4 +1,10 @@
-class NumbersTests
+// VIM_TEST_SETUP let g:java_comment_strings = 1
+
+
+
+import java.util.function.Predicate;
+
+class NumbersTests // JDK 8= (--release 8).
{
static {
double[] dd = {
@@ -26,7 +32,7 @@ class NumbersTests
1e+3, 1E+3D, 1e+3f,
1d, 1D, 1f, 1F,
-//// MALFORMED: :let g:java_comment_strings = 1 | doautocmd Syntax
+// MALFORMED:
// 0_x.0p0, 0x._0p0, 0x.0_p0, 0x.0p_0, 0x.0p0_,
// 0x0_.0p0, 0x_0.0p0, 0xp0,
};
@@ -84,5 +90,31 @@ class NumbersTests
long minus_one_hex_l = 0xffff_ffff_ffff_ffffL;
long minus_one_oct_l = 017_7777_7777_7777_7777_7777L;
long minus_one_bin_l = 0b1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111L;
+
+ final Predicate<Integer> p = n -> n != 0;
+
+ try {
+ echo(xor(unused -> false, false, false));
+ echo(xor(p, 1, 0));
+ echo(xor(p, 0, 1));
+ echo(xor(p, 1, 1));
+ } catch (final ArithmeticException _) {
+ }
+ }
+
+ private static boolean _ [] = new boolean[2];
+
+ static void echo(Object o) { System.out.println(o); }
+
+ static <T> boolean xor(Predicate<T> p, T x, T y)
+ {
+ return ((_ [0] = x instanceof Boolean)
+ & (_ [1] = y instanceof Boolean))
+ ? (boolean) x ^ (boolean) y
+ : (_ [0])
+ ? (boolean) x ^ p.test(y)
+ : (_ [1])
+ ? p.test(x) ^ (boolean) y
+ : p.test(x) ^ p.test(y);
}
}
diff --git a/runtime/syntax/testdir/input/java_previews_455.java b/runtime/syntax/testdir/input/java_previews_455.java
index 69f379843..5f9fbd95d 100644
--- a/runtime/syntax/testdir/input/java_previews_455.java
+++ b/runtime/syntax/testdir/input/java_previews_455.java
@@ -1,7 +1,9 @@
-// VIM_TEST_SETUP let g:java_syntax_previews = [455, 488, 507, 530]
+// VIM_TEST_SETUP let g:java_syntax_previews = [455, 488, 507, 530, 532]
+import java.util.function.Predicate;
+
class PrimitiveSwitchTests // JDK 23+ (--enable-preview --release 23).
{
static void echo(Object o) { System.out.println(o); }
@@ -60,5 +62,27 @@ class PrimitiveSwitchTests // JDK 23+ (--enable-preview --release 23).
case 1.0 -> 1.0;
default -> -1.0;
});
+
+ final Predicate<Integer> p = n -> n != 0;
+
+ try {
+ echo(xor(_ -> false, false, false));
+ echo(xor(p, 1, 0));
+ echo(xor(p, 0, 1));
+ echo(xor(p, 1, 1));
+ } catch (final ArithmeticException _) {
+ }
+ }
+
+ static <T> boolean xor(Predicate<T> p, T x, T y)
+ {
+ record Pair<T>(T x, T y) { }
+
+ return switch (new Pair<>(x, y)) {
+ case Pair(boolean x_, boolean y_) -> x_ ^ y_;
+ case Pair(boolean x_, _) -> x_ ^ p.test(y);
+ case Pair(var _, boolean y_) -> p.test(x) ^ y_;
+ case Pair<?> _ -> p.test(x) ^ p.test(y);
+ };
}
}