Class: IgniterLang::Assembler
- Inherits:
-
Object
- Object
- IgniterLang::Assembler
- Defined in:
- lib/igniter_lang/assembler.rb
Defined Under Namespace
Modules: Canonical
Constant Summary collapse
- ROOT =
Pathname.new(File.("../..", __dir__))
- DEFAULT_GOLDEN_DIR =
ROOT / "experiments/source_to_semanticir_fixture/golden"
- DEFAULT_OUT_DIR =
ROOT / "experiments/igapp_assembler_proof/out"
- PROFILE_SOURCE_KIND =
PROP-036: compiler_profile_id source contract constants. Used by validate_compiler_profile_source! only.
"compiler_profile_id_source"- PROFILE_SOURCE_NAMESPACE =
"compiler_profile_unified"- PROFILE_SOURCE_ID_PATTERN =
/\Acompiler_profile_unified\/sha256:[0-9a-f]{24,}\z/- PROFILE_SOURCE_SLOT_ORDER =
%w[ core oof_registry fragment_registry escape_boundary contract_modifiers temporal stream olap invariant assumptions evidence_observation pipeline ].freeze
Instance Method Summary collapse
- #assemble_artifacts(case_name:, report:, semantic_ir:, target_dir:, compiler_profile_source: nil) ⇒ Object
- #assemble_case(case_name, compiler_profile_source: nil) ⇒ Object
-
#initialize(golden_dir: DEFAULT_GOLDEN_DIR, out_dir: DEFAULT_OUT_DIR) ⇒ Assembler
constructor
A new instance of Assembler.
- #refuse_case(case_name) ⇒ Object
Constructor Details
#initialize(golden_dir: DEFAULT_GOLDEN_DIR, out_dir: DEFAULT_OUT_DIR) ⇒ Assembler
Returns a new instance of Assembler.
57 58 59 60 |
# File 'lib/igniter_lang/assembler.rb', line 57 def initialize(golden_dir: DEFAULT_GOLDEN_DIR, out_dir: DEFAULT_OUT_DIR) @golden_dir = Pathname.new(golden_dir) @out_dir = Pathname.new(out_dir) end |
Instance Method Details
#assemble_artifacts(case_name:, report:, semantic_ir:, target_dir:, compiler_profile_source: nil) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/igniter_lang/assembler.rb', line 76 def assemble_artifacts(case_name:, report:, semantic_ir:, target_dir:, compiler_profile_source: nil) refuse!(case_name, "pass_result=#{report.fetch("pass_result")}") unless report.fetch("pass_result") == "ok" refuse!(case_name, "semantic_ir_ref missing") unless report.fetch("semantic_ir_ref").is_a?(String) validate_refs!(case_name, report, semantic_ir) validate_semantic_ir!(case_name, semantic_ir) artifact = build_artifact(case_name, report, semantic_ir, compiler_profile_source: compiler_profile_source) target = Pathname.new(target_dir) write_artifact_to(target, artifact) artifact_summary_for_target(case_name, artifact, target) end |
#assemble_case(case_name, compiler_profile_source: nil) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/igniter_lang/assembler.rb', line 62 def assemble_case(case_name, compiler_profile_source: nil) report = read_json(@golden_dir / "#{case_name}.compilation_report.json") refuse!(case_name, "pass_result=#{report.fetch("pass_result")}") unless report.fetch("pass_result") == "ok" refuse!(case_name, "semantic_ir_ref missing") unless report.fetch("semantic_ir_ref").is_a?(String) semantic_ir = read_json(@golden_dir / "#{case_name}.semantic_ir.json") validate_refs!(case_name, report, semantic_ir) validate_semantic_ir!(case_name, semantic_ir) artifact = build_artifact(case_name, report, semantic_ir, compiler_profile_source: compiler_profile_source) write_artifact(case_name, artifact) artifact_summary(case_name, artifact) end |
#refuse_case(case_name) ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/igniter_lang/assembler.rb', line 88 def refuse_case(case_name) report = read_json(@golden_dir / "#{case_name}.compilation_report.json") assemble_case(case_name) raise "expected #{case_name} to refuse, but it assembled" rescue AssemblyRefused => e target = @out_dir / "#{case_name}.igapp" { "case" => case_name, "status" => "refused", "pass_result" => report.fetch("pass_result"), "reason" => e., "wrote_igapp" => target.exist? } end |