Class: IgniterLang::Classifier
- Inherits:
-
Object
- Object
- IgniterLang::Classifier
- Defined in:
- lib/igniter_lang/classifier.rb
Constant Summary collapse
- DEFAULT_VERSION =
"classifier-pass-executable-proof-v0"
Instance Method Summary collapse
- #classify(parsed_program, sample_input:) ⇒ Object
-
#initialize(classifier_version: DEFAULT_VERSION) ⇒ Classifier
constructor
A new instance of Classifier.
- #type_declarations(parsed_program) ⇒ Object
Constructor Details
#initialize(classifier_version: DEFAULT_VERSION) ⇒ Classifier
Returns a new instance of Classifier.
9 10 11 |
# File 'lib/igniter_lang/classifier.rb', line 9 def initialize(classifier_version: DEFAULT_VERSION) @classifier_version = classifier_version end |
Instance Method Details
#classify(parsed_program, sample_input:) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/igniter_lang/classifier.rb', line 13 def classify(parsed_program, sample_input:) assumption_registry = assumption_registry(parsed_program) contracts = parsed_program.fetch("contracts").map do |contract| classify_contract(parsed_program, contract, sample_input, assumption_registry) end result = { "kind" => "classified_program", "classifier_version" => @classifier_version, "program_id" => program_id(parsed_program), "source_path" => parsed_program.fetch("source_path"), "source_hash" => parsed_program.fetch("source_hash"), "grammar_version" => parsed_program.fetch("grammar_version"), "module" => parsed_program.fetch("module"), "type_declarations" => type_declarations(parsed_program), "contracts" => contracts, "oof_log" => contracts.flat_map { |contract| contract.fetch("oof_log") }, "semantic_ir_ref" => nil } result["assumption_registry"] = assumption_registry.values unless assumption_registry.empty? olap_points = parsed_program.fetch("olap_points", []) result["olap_points"] = olap_points unless olap_points.empty? result end |
#type_declarations(parsed_program) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/igniter_lang/classifier.rb', line 38 def type_declarations(parsed_program) parsed_program.fetch("types", []).map do |type| { "kind" => "type", "name" => type.fetch("name"), "fields" => type.fetch("fields", []).map do |field| { "name" => field.fetch("name"), "type_annotation" => normalize_type(field.fetch("type_annotation")), "optional" => field.fetch("optional", false) } end } end end |