Skip to content

Commit f9fab58

Browse files
authored
Merge pull request #583 from ahoppen/pr/three-stage-code-generation
Implement code generation as a three-step process
2 parents 79e86b5 + d5fdbbb commit f9fab58

File tree

1 file changed

+30
-8
lines changed

1 file changed

+30
-8
lines changed

build-script.py

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -284,22 +284,30 @@ def generate_syntax_node_template_gyb_files(
284284
verbose=verbose,
285285
)
286286

287+
# Gyb-files that should be generated before running code generation using SwiftSyntaxBuilder.
288+
# Maps directories containing .gyb files to the directories the generated files should
289+
# live in.
290+
def first_stage_gyb_dir_mapping(
291+
generateswiftsyntaxbuilder_destination: Optional[str] = None,
292+
) -> Dict[str, Optional[str]]:
293+
return {
294+
GENERATESWIFTSYNTAXBUILDER_DIR: generateswiftsyntaxbuilder_destination,
295+
}
287296

297+
# Gyb-files that should be generated after running code generation using SwiftSyntaxBuilder.
288298
# Maps directories containing .gyb files to the directories the generated files should
289299
# live in.
290-
def gyb_dir_mapping(
300+
def second_stage_gyb_dir_mapping(
291301
swiftsyntax_destination: Optional[str] = None,
292302
swiftsyntax_raw_destination: Optional[str] = None,
293303
swiftsyntaxbuilder_destination: Optional[str] = None,
294304
swiftsyntaxparser_destination: Optional[str] = None,
295-
generateswiftsyntaxbuilder_destination: Optional[str] = None,
296305
) -> Dict[str, Optional[str]]:
297306
return {
298307
SWIFTSYNTAX_DIR: swiftsyntax_destination,
299308
os.path.join(SWIFTSYNTAX_DIR, "Raw"): swiftsyntax_raw_destination,
300309
SWIFTSYNTAXBUILDER_DIR: swiftsyntaxbuilder_destination,
301310
SWIFTSYNTAXPARSER_DIR: swiftsyntaxparser_destination,
302-
GENERATESWIFTSYNTAXBUILDER_DIR: generateswiftsyntaxbuilder_destination,
303311
}
304312

305313

@@ -453,14 +461,18 @@ def build(self, product_name: str) -> None:
453461
# Testing
454462

455463

456-
def verify_generated_files(gyb_exec: str, verbose: bool) -> None:
457-
gyb_dirs = gyb_dir_mapping(
464+
def verify_gyb_generated_files(gyb_exec: str, verbose: bool) -> None:
465+
first_stage_gyb_dirs = first_stage_gyb_dir_mapping(
466+
generateswiftsyntaxbuilder_destination=tempfile.mkdtemp(),
467+
)
468+
second_stage_gyb_dirs = second_stage_gyb_dir_mapping(
458469
swiftsyntax_destination=tempfile.mkdtemp(),
459470
swiftsyntax_raw_destination=tempfile.mkdtemp(),
460471
swiftsyntaxbuilder_destination=tempfile.mkdtemp(),
461472
swiftsyntaxparser_destination=tempfile.mkdtemp(),
462-
generateswiftsyntaxbuilder_destination=tempfile.mkdtemp(),
463473
)
474+
gyb_dirs = first_stage_gyb_dirs
475+
gyb_dirs.update(second_stage_gyb_dirs)
464476

465477
generate_gyb_files(
466478
gyb_exec,
@@ -685,7 +697,7 @@ def generate_source_code_command(args: argparse.Namespace) -> None:
685697
try:
686698
generate_gyb_files(
687699
args.gyb_exec,
688-
gyb_dir_mapping=gyb_dir_mapping(),
700+
gyb_dir_mapping=first_stage_gyb_dir_mapping(),
689701
add_source_locations=args.add_source_locations,
690702
verbose=args.verbose,
691703
)
@@ -707,10 +719,20 @@ def generate_source_code_command(args: argparse.Namespace) -> None:
707719
fail_for_called_process_error(
708720
"Source generation using SwiftSyntaxBuilder failed", e)
709721

722+
try:
723+
generate_gyb_files(
724+
args.gyb_exec,
725+
gyb_dir_mapping=second_stage_gyb_dir_mapping(),
726+
add_source_locations=args.add_source_locations,
727+
verbose=args.verbose,
728+
)
729+
except subprocess.CalledProcessError as e:
730+
fail_for_called_process_error("Generating .gyb files failed", e)
731+
710732

711733
def verify_source_code_command(args: argparse.Namespace) -> None:
712734
try:
713-
verify_generated_files(args.gyb_exec, verbose=args.verbose)
735+
verify_gyb_generated_files(args.gyb_exec, verbose=args.verbose)
714736

715737
verify_code_generated_files(
716738
toolchain=args.toolchain,

0 commit comments

Comments
 (0)