Feature Request
Legend should support generating Morphir IR enriched with Pure source information.
Description of Problem:
Legend currently supports generating simple Pure functions into Morphir IR, and the next milestone would be to include Pure code source information in the generated IR in order for Bosque to provide theorem proving feedback with useful source info.
Potential Solutions:
Currently, (unmerged) changes have been made to support including source information in Morphir transform process. Here we provide example input function with an explicit zero division, which looks like:
function meta::external::language::morphir::transform::tests::zeroDivisionFunction(v1:Number[1]):Number[1]
{
$v1 / 0.0;
}
… which would be located on line 23-26 of file “\core\external\language\morphir\tests\transformAndSerializeTests.pure”.
And the generated output from it would be:
{ "formatVersion": 1, "distribution": [ "library", [ [ "system" ], [ "morphir" ] ], [], { "modules": [ { "name": [ [ "transform" ] ], "def": [ "public", { "types": [], "values": [ [ [ "zero", "division", "function" ], [ "public", { "inputTypes": [ [ [ "v", "1" ], [ "reference", {}, [ [ [ "morphir" ], [ "s", "d", "k" ] ], [ [ "basics" ] ], [ "float" ] ], [], [ "sourceInformation", [ "source", "\/core\/external\/language\/morphir\/tests\/transformAndSerializeTests.pure" ], [ "startLine", 23 ], [ "startColumn", 1 ], [ "endLine", 26 ], [ "endColumn", 1 ] ] ], [ "reference", {}, [ [ [ "morphir" ], [ "s", "d", "k" ] ], [ [ "basics" ] ], [ "float" ] ], [], [ "sourceInformation", [ "source", "\/core\/external\/language\/morphir\/tests\/transformAndSerializeTests.pure" ], [ "startLine", 23 ], [ "startColumn", 1 ], [ "endLine", 26 ], [ "endColumn", 1 ] ] ] ] ], "outputType": [ "reference", {}, [ [ [ "morphir" ], [ "s", "d", "k" ] ], [ [ "basics" ] ], [ "float" ] ], [], [ "sourceInformation", [ "source", "\/core\/external\/language\/morphir\/tests\/transformAndSerializeTests.pure" ], [ "startLine", 23 ], [ "startColumn", 1 ], [ "endLine", 26 ], [ "endColumn", 1 ] ] ], "body": [ "apply", [ "reference", {}, [ [ [ "morphir" ], [ "s", "d", "k" ] ], [ [ "basics" ] ], [ "float" ] ], [], [ "sourceInformation", [ "source", "\/core\/external\/language\/morphir\/tests\/transformAndSerializeTests.pure" ], [ "startLine", 25 ], [ "startColumn", 8 ], [ "endLine", 25 ], [ "endColumn", 8 ] ] ], [ "apply", [ "function", {}, [ "reference", {}, [ [ [ "morphir" ], [ "s", "d", "k" ] ], [ [ "basics" ] ], [ "float" ] ], [], [] ], [ "reference", {}, [ [ [ "morphir" ], [ "s", "d", "k" ] ], [ [ "basics" ] ], [ "float" ] ], [], [] ], [] ], [ "reference", [ "function", {}, [ "reference", {}, [ [ [ "morphir" ], [ "s", "d", "k" ] ], [ [ "basics" ] ], [ "float" ] ], [], [] ], [ "function", {}, [ "reference", {}, [ [ [ "morphir" ], [ "s", "d", "k" ] ], [ [ "basics" ] ], [ "float" ] ], [], [] ], [ "reference", {}, [ [ [ "morphir" ], [ "s", "d", "k" ] ], [ [ "basics" ] ], [ "float" ] ], [], [] ], [] ], [] ], [ [ [ "morphir" ], [ "s", "d", "k" ] ], [ [ "basics" ] ], [ "divide" ] ] ], [ "variable", [ "reference", {}, [ [ [ "morphir" ], [ "s", "d", "k" ] ], [ [ "basics" ] ], [ "float" ] ], [], [ "sourceInformation", [ "source", "\/core\/external\/language\/morphir\/tests\/transformAndSerializeTests.pure" ], [ "startLine", 25 ], [ "startColumn", 5 ], [ "endLine", 25 ], [ "endColumn", 6 ] ] ], [ "v", "1" ] ] ], [ "literal", [ "reference", {}, [ [ [ "morphir" ], [ "s", "d", "k" ] ], [ [ "basics" ] ], [ "float" ] ], [], [ "sourceInformation", [ "source", "\/core\/external\/language\/morphir\/tests\/transformAndSerializeTests.pure" ], [ "startLine", 25 ], [ "startColumn", 10 ], [ "endLine", 25 ], [ "endColumn", 12 ] ] ], [ "float_literal", 0.0 ] ] ] } ] ] ] } ] } ] } ] }