Skip to content

Commit 52fa88d

Browse files
committed
Rework syntax file templates for computed goto.
Previously we had `code:yytarget_goto`, `code:yyctable_goto` for computed `goto` target expression, and `code:yytarget_elem`, `code:yyctable_elem` for table initializers. The defintions for `yytarget` and `yyctable` were almost identical, and the decision to keep them separate was taken only so that each set of code templates could specify a different underlying type for table elements. It was impossible to pass the type using `code:type_yyctarget`, `code:type_yyctable` because these configurations included type qualifiers like `static const`. For the full discussion see this thread: #537 (comment) Now that we've got rid of type qualifiers in commit a94d39b, it has become possible to merge code templates for `yytarget` and `yyctable` and avoid the duplication.
1 parent 9498443 commit 52fa88d

32 files changed

+3207
-3425
lines changed

bootstrap/src/default_syntax_c.h

+8-16
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,14 @@ static constexpr const char* DEFAULT_SYNTAX_C =
236236
"\n"
237237
"code:goto = topindent \"goto \" label \";\" nl;\n"
238238
"\n"
239+
"code:cgoto_target = (.cgoto.relative\n"
240+
" ? \"*((char*)&&\" base \" + \" array \"[\" index \"])\"\n"
241+
" : \"*\" array \"[\" index \"]\");\n"
242+
"\n"
243+
"code:cgoto_init = (.cgoto.relative\n"
244+
" ? \"(\" type \")((char*)&&\" label \" - (char*)&&\" base \")\"\n"
245+
" : \"&&\" label);\n"
246+
"\n"
239247
"code:fndecl =\n"
240248
" topindent type \" \" name \"(\"\n"
241249
" [arg{0:-2}: argtype \" \" argname \", \"]\n"
@@ -444,20 +452,4 @@ static constexpr const char* DEFAULT_SYNTAX_C =
444452
"code:yybm_filter = yych \" & ~0xFF\";\n"
445453
"\n"
446454
"code:yybm_match = yybm \"[\" offset \"+\" yych \"] & \" mask;\n"
447-
"\n"
448-
"code:yytarget_elem = (.cgoto.relative\n"
449-
" ? \"(int)((char*)&&\" label \" - (char*)&&\" base \")\"\n"
450-
" : \"&&\" label);\n"
451-
"\n"
452-
"code:yytarget_goto = (.cgoto.relative\n"
453-
" ? \"*((char*)&&\" base \" + \" yytarget \"[\" index \"])\"\n"
454-
" : \"*\" yytarget \"[\" index \"]\");\n"
455-
"\n"
456-
"code:yyctable_elem = (.cgoto.relative\n"
457-
" ? \"(int)((char*)&&\" label \" - (char*)&&\" base \")\"\n"
458-
" : \"&&\" label);\n"
459-
"\n"
460-
"code:yyctable_goto = (.cgoto.relative\n"
461-
" ? \"*((char*)&&\" base \" + \" yyctable \"[\" index \"])\"\n"
462-
" : \"*\" yyctable \"[\" index \"]\");\n"
463455
;

bootstrap/src/default_syntax_d.h

+3-5
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,9 @@ static constexpr const char* DEFAULT_SYNTAX_D =
234234
"\n"
235235
"code:goto = topindent \"goto \" label \";\" nl;\n"
236236
"\n"
237+
"code:cgoto_target = <undefined>;\n"
238+
"code:cgoto_init = <undefined>;\n"
239+
"\n"
237240
"code:fndecl = <undefined>;\n"
238241
"\n"
239242
"code:fndef =\n"
@@ -424,9 +427,4 @@ static constexpr const char* DEFAULT_SYNTAX_D =
424427
"code:yybm_filter = yych \" & ~0xFF\";\n"
425428
"\n"
426429
"code:yybm_match = \"(\" yybm \"[\" offset \"+\" yych \"] & \" mask \") != 0\";\n"
427-
"\n"
428-
"code:yytarget_elem = <undefined>;\n"
429-
"code:yytarget_goto = <undefined>;\n"
430-
"code:yyctable_elem = <undefined>;\n"
431-
"code:yyctable_goto = <undefined>;\n"
432430
;

bootstrap/src/default_syntax_go.h

+3-5
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,9 @@ static constexpr const char* DEFAULT_SYNTAX_GO =
232232
"\n"
233233
"code:goto = topindent \"goto \" label nl;\n"
234234
"\n"
235+
"code:cgoto_target = <undefined>;\n"
236+
"code:cgoto_init = <undefined>;\n"
237+
"\n"
235238
"code:fndecl = <undefined>;\n"
236239
"\n"
237240
"code:fndef =\n"
@@ -406,9 +409,4 @@ static constexpr const char* DEFAULT_SYNTAX_GO =
406409
"code:yybm_filter = yych \" & ~0xFF\";\n"
407410
"\n"
408411
"code:yybm_match = \"(\" yybm \"[\" offset \"+\" yych \"] & \" mask \") != 0\";\n"
409-
"\n"
410-
"code:yytarget_elem = <undefined>;\n"
411-
"code:yytarget_goto = <undefined>;\n"
412-
"code:yyctable_elem = <undefined>;\n"
413-
"code:yyctable_goto = <undefined>;\n"
414412
;

bootstrap/src/default_syntax_haskell.h

+2-7
Original file line numberDiff line numberDiff line change
@@ -223,10 +223,10 @@ static constexpr const char* DEFAULT_SYNTAX_HASKELL =
223223
"code:switch_case_default = \"True\";\n"
224224
"\n"
225225
"code:loop = <undefined>;\n"
226-
"\n"
227226
"code:continue = <undefined>;\n"
228-
"\n"
229227
"code:goto = <undefined>;\n"
228+
"code:cgoto_target = <undefined>;\n"
229+
"code:cgoto_init = <undefined>;\n"
230230
"\n"
231231
"code:fndecl = <undefined>;\n"
232232
"\n"
@@ -418,9 +418,4 @@ static constexpr const char* DEFAULT_SYNTAX_HASKELL =
418418
"code:yybm_filter = \"(\" yych \" .&. complement 0xFF) /= 0\";\n"
419419
"\n"
420420
"code:yybm_match = \"(\" yybm \" ! (\" offset \" + fromIntegral \" yych \") .&. \" mask \") /= 0\";\n"
421-
"\n"
422-
"code:yytarget_elem = <undefined>;\n"
423-
"code:yytarget_goto = <undefined>;\n"
424-
"code:yyctable_elem = <undefined>;\n"
425-
"code:yyctable_goto = <undefined>;\n"
426421
;

bootstrap/src/default_syntax_java.h

+2-5
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,8 @@ static constexpr const char* DEFAULT_SYNTAX_JAVA =
224224
"code:continue = topindent \"continue\" (.loop_label ? \" \" label) \";\" nl;\n"
225225
"\n"
226226
"code:goto = <undefined>;\n"
227+
"code:cgoto_target = <undefined>;\n"
228+
"code:cgoto_init = <undefined>;\n"
227229
"\n"
228230
"code:fndecl = <undefined>;\n"
229231
"code:fndef = <undefined>;\n"
@@ -382,9 +384,4 @@ static constexpr const char* DEFAULT_SYNTAX_JAVA =
382384
"code:yybm_filter = yych \" & ~0xFF\";\n"
383385
"\n"
384386
"code:yybm_match = \"(\" yybm \"[\" offset \"+\" yych \"] & \" mask \") != 0\";\n"
385-
"\n"
386-
"code:yytarget_elem = <undefined>;\n"
387-
"code:yytarget_goto = <undefined>;\n"
388-
"code:yyctable_elem = <undefined>;\n"
389-
"code:yyctable_goto = <undefined>;\n"
390387
;

bootstrap/src/default_syntax_js.h

+2-5
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,8 @@ static constexpr const char* DEFAULT_SYNTAX_JS =
225225
"code:continue = topindent \"continue\" (.loop_label ? \" \" label) nl;\n"
226226
"\n"
227227
"code:goto = <undefined>;\n"
228+
"code:cgoto_target = <undefined>;\n"
229+
"code:cgoto_init = <undefined>;\n"
228230
"\n"
229231
"code:fndecl = <undefined>;\n"
230232
"code:fndef = <undefined>;\n"
@@ -385,9 +387,4 @@ static constexpr const char* DEFAULT_SYNTAX_JS =
385387
"code:yybm_filter = yych \" & ~0xFF\";\n"
386388
"\n"
387389
"code:yybm_match = \"(\" yybm \"[\" offset \"+\" yych \"] & \" mask \") !== 0\";\n"
388-
"\n"
389-
"code:yytarget_elem = <undefined>;\n"
390-
"code:yytarget_goto = <undefined>;\n"
391-
"code:yyctable_elem = <undefined>;\n"
392-
"code:yyctable_goto = <undefined>;\n"
393390
;

bootstrap/src/default_syntax_ocaml.h

+2-7
Original file line numberDiff line numberDiff line change
@@ -231,10 +231,10 @@ static constexpr const char* DEFAULT_SYNTAX_OCAML =
231231
"code:switch_case_default = \"_\";\n"
232232
"\n"
233233
"code:loop = <undefined>;\n"
234-
"\n"
235234
"code:continue = <undefined>;\n"
236-
"\n"
237235
"code:goto = <undefined>;\n"
236+
"code:cgoto_target = <undefined>;\n"
237+
"code:cgoto_init = <undefined>;\n"
238238
"\n"
239239
"code:fndecl = <undefined>;\n"
240240
"\n"
@@ -397,9 +397,4 @@ static constexpr const char* DEFAULT_SYNTAX_OCAML =
397397
"code:yybm_filter = yych \" land ~0xFF\";\n"
398398
"\n"
399399
"code:yybm_match = \"(\" yybm \".(\" offset \" + Char.code \" yych \") land \" mask \") != 0\";\n"
400-
"\n"
401-
"code:yytarget_elem = <undefined>;\n"
402-
"code:yytarget_goto = <undefined>;\n"
403-
"code:yyctable_elem = <undefined>;\n"
404-
"code:yyctable_goto = <undefined>;\n"
405400
;

bootstrap/src/default_syntax_python.h

+2-5
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,8 @@ static constexpr const char* DEFAULT_SYNTAX_PYTHON =
222222
"code:continue = topindent \"continue\" nl;\n"
223223
"\n"
224224
"code:goto = <undefined>;\n"
225+
"code:cgoto_target = <undefined>;\n"
226+
"code:cgoto_init = <undefined>;\n"
225227
"\n"
226228
"code:fndecl = <undefined>;\n"
227229
"\n"
@@ -390,9 +392,4 @@ static constexpr const char* DEFAULT_SYNTAX_PYTHON =
390392
"code:yybm_filter = yych \" & ~0xFF\";\n"
391393
"\n"
392394
"code:yybm_match = \"(\" yybm \"[\" offset \"+\" yych \"] & \" mask \") != 0\";\n"
393-
"\n"
394-
"code:yytarget_elem = <undefined>;\n"
395-
"code:yytarget_goto = <undefined>;\n"
396-
"code:yyctable_elem = <undefined>;\n"
397-
"code:yyctable_goto = <undefined>;\n"
398395
;

bootstrap/src/default_syntax_rust.h

+2-5
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,8 @@ static constexpr const char* DEFAULT_SYNTAX_RUST =
230230
"code:continue = topindent \"continue\" (.loop_label ? \" \" label) \";\" nl;\n"
231231
"\n"
232232
"code:goto = <undefined>;\n"
233+
"code:cgoto_target = <undefined>;\n"
234+
"code:cgoto_init = <undefined>;\n"
233235
"\n"
234236
"code:fndecl = <undefined>;\n"
235237
"\n"
@@ -408,9 +410,4 @@ static constexpr const char* DEFAULT_SYNTAX_RUST =
408410
"code:yybm_filter = yych \" & ~0xFF\";\n"
409411
"\n"
410412
"code:yybm_match = \"(\" yybm \"[\" offset \"+\" yych \" as usize] & \" mask \") != 0\";\n"
411-
"\n"
412-
"code:yytarget_elem = <undefined>;\n"
413-
"code:yytarget_goto = <undefined>;\n"
414-
"code:yyctable_elem = <undefined>;\n"
415-
"code:yyctable_goto = <undefined>;\n"
416413
;

bootstrap/src/default_syntax_swift.h

+2-5
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,8 @@ static constexpr const char* DEFAULT_SYNTAX_SWIFT =
227227
"code:continue = topindent \"continue\" (.loop_label ? \" \" label) nl;\n"
228228
"\n"
229229
"code:goto = <undefined>;\n"
230+
"code:cgoto_target = <undefined>;\n"
231+
"code:cgoto_init = <undefined>;\n"
230232
"\n"
231233
"code:fndecl = <undefined>;\n"
232234
"\n"
@@ -410,9 +412,4 @@ static constexpr const char* DEFAULT_SYNTAX_SWIFT =
410412
"code:yybm_filter = yych \" & ~0xFF\";\n"
411413
"\n"
412414
"code:yybm_match = \"(\" yybm \"[\" offset \" + Int(\" yych \")] & \" mask \") != 0\";\n"
413-
"\n"
414-
"code:yytarget_elem = <undefined>;\n"
415-
"code:yytarget_goto = <undefined>;\n"
416-
"code:yyctable_elem = <undefined>;\n"
417-
"code:yyctable_goto = <undefined>;\n"
418415
;

bootstrap/src/default_syntax_v.h

+3-5
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,9 @@ static constexpr const char* DEFAULT_SYNTAX_V =
234234
"\n"
235235
"code:goto = topindent \"unsafe { goto \" label \" }\" nl;\n"
236236
"\n"
237+
"code:cgoto_target = <undefined>;\n"
238+
"code:cgoto_init = <undefined>;\n"
239+
"\n"
237240
"code:fndecl = <undefined>;\n"
238241
"\n"
239242
"code:fndef =\n"
@@ -408,9 +411,4 @@ static constexpr const char* DEFAULT_SYNTAX_V =
408411
"code:yybm_filter = yych \" & ~0xFF\";\n"
409412
"\n"
410413
"code:yybm_match = \"(\" yybm \"[\" offset \"+\" yych \"] & \" mask \") != 0\";\n"
411-
"\n"
412-
"code:yytarget_elem = <undefined>;\n"
413-
"code:yytarget_goto = <undefined>;\n"
414-
"code:yyctable_elem = <undefined>;\n"
415-
"code:yyctable_goto = <undefined>;\n"
416414
;

bootstrap/src/default_syntax_zig.h

+3-5
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,9 @@ static constexpr const char* DEFAULT_SYNTAX_ZIG =
229229
"\n"
230230
"code:goto = topindent \"goto \" label \";\" nl;\n"
231231
"\n"
232+
"code:cgoto_target = <undefined>;\n"
233+
"code:cgoto_init = <undefined>;\n"
234+
"\n"
232235
"code:fndecl = <undefined>;\n"
233236
"\n"
234237
"code:fndef =\n"
@@ -422,9 +425,4 @@ static constexpr const char* DEFAULT_SYNTAX_ZIG =
422425
"code:yybm_filter = yych \" & ~0xFF\";\n"
423426
"\n"
424427
"code:yybm_match = \"(\" yybm \"[\" offset \"+\" yych \"] & \" mask \") != 0\";\n"
425-
"\n"
426-
"code:yytarget_elem = <undefined>;\n"
427-
"code:yytarget_goto = <undefined>;\n"
428-
"code:yyctable_elem = <undefined>;\n"
429-
"code:yyctable_goto = <undefined>;\n"
430428
;

0 commit comments

Comments
 (0)