interface(extern-c){ externalLibs = library:: pkgconfig("libxml-2.0"). include { externalLibs = {"scripts/virtualization/test1.h"} }. } import raw ("scripts/virtualization/test2.assembly.lp"). import raw ("scripts/cfa/context.lp"). DictSizo = type slave dict_sizo. Sizo = type slave sizo. guard:: strategy(prefix) { virt_dereferenceFilename = function(filename:: string):: string; requires(virt_dereference_strategy) { dictSizo = intrinsic query("dict_sizo")::[DictSizo]. sizoId = intrinsic query late("sizo_current"->sizoCurrent:: Sizo):: int; demand(sizo) { loop fold(dictSizo->entry::DictSizo, 0->id):: int { if(entry[0] == sizoCurrent):: int { entry[1] } else { id } } }. buf = "000000000"::string. seq { sprintf(buf, "%d/%s", sizoId, filename) } { buf } } } guard:: strategy(none) { virt_dereferenceFilename = function(filename:: string):: string; requires(virt_dereference_strategy) { filename } } virt_openFile = function(filename:: string):: int { filenameReal = virt_dereferenceFilename(filename):: string. seq{printf("file opened: %s ", filenameReal)} } main = function:: int; entry { seq { context::assign_sizo(domainA). virt_openFile("test1") } { context::assign_sizo(domainA). virt_openFile("test1") } { 0 } }