Eliminate non-local references from closure
Question
For a code similarity detection framework I need to eliminate references to non-local variables, for example having the following closure:
{
var a;
var b;
var f = function() {
a = 5;
b = 6;
}
f();
}
would be converted into something like:
{
var a;
var b;
var f = function() {
var a = 5;
var b = 6;
return tuple(a, b);
}
a, b = f();
}
Another approach would be:
{
var world;
var a;
var b;
var f = function(world) {
world = update_world(world, "a", 5);
world = update_world(world, "b", 6);
return world;
}
world = f(world);
a = get_world(world, "a");
b = get_world(world, "b");
}
Basically, convert a stateful program to a purely functional one. The goal is then to transform the resulting program into the lambda calculus, normalize and look for isomorphic subtrees.
Is there a formalization of what I'm trying to do?
No correct solution
Licensed under: CC-BY-SA with attribution
Not affiliated with cs.stackexchange