test1.xreate
No OneTemporary

File Metadata

Created
Wed, Jul 8, 10:04 PM

test1.xreate

interface(extern-c){
externalLibs = library:: pkgconfig("libxml-2.0").
include {
externalLibs = ["stdio.h"]
}.
}
import raw ("scripts/virtualization/test1.assembly.lp").
import raw ("scripts/virtualization/virtualization.lp").
Annotation = type variant {
Num:: int,
String:: string,
Func:: {name::string, arguments::[Annotation]}
}.
DictEntry = type {Annotation, Id}.
extractDictEntry = function(entry:: Annotation):: DictEntry; interpretation(force){
resultWrong = { String("wrong"), 0 }:: DictEntry.
switch variant (entry):: DictEntry
case (Num) { resultWrong }
case (String) { resultWrong }
case (Func){
domAnn = entry["arguments"][0]:: Annotation.
switch variant ( entry["arguments"][1]->id ):: Annotation
case (Num) { {domAnn, id} }
case (String) { resultWrong }
case (Func) { resultWrong }
}
}
encodeDomain = function(key::Annotation):: int; interpretation(force){
dict = intrinsic query("virtDictDomains")::[Annotation].
id = loop fold(dict->entryAnn::Annotation, 0->id):: int {
entry = extractDictEntry(entryAnn):: DictEntry.
if(entry[0] == key):: int { entry[1] } else { id }
}.
id
/*
buf = "000000000"::string.
seq
{ sprintf(buf, "%d", id).}
{ buf}
*/
}
main = function:: int; entry {
encodeDomain(Func({"domainB", []}))
}
/*
openfile = function(fileName::string, prefixPackedAnn:: Annotation) {
prefixStr = encodeDomain(prefixPackedAnn):: string.
fopen(prefixStr + fileName)
}
main = function:: entry (
seq
{ context::virtualization(domainA). openFile("test1", intrinsic query("openFileAdditionalArgsDomA")[0]) }
{ context::virtualization(domainB). openFile("test1", intrinsic query("openFileAdditionalArgsDomB")[0]) }
)
*/

Event Timeline