تسطيح تدفق التحكم
controlFlowFlattening
~1.5x slower
يحوّل بنية الكود لإخفاء تدفق البرنامج الأصلي، ويجعل التحليل اليدوي أصعب بكثير عبر تحويل الكود الخطي إلى آلة حالات قائمة على تعليمة switch.
// Before
function process() {
step1();
step2();
step3();
}
// After (flattened)
function process() {
var state = '0|1|2'.split('|'), i = 0;
while (true) {
switch (state[i++]) {
case '0': step1(); continue;
case '1': step2(); continue;
case '2': step3(); continue;
}
break;
}
}
يتكامل تسطيح تدفق التحكم جيدًا مع الخيارات الأساسية الأخرى ومع تشويش VM - إذ تُحوَّل آلة الحالات المسطَّحة بدورها إلى بايت كود عند تفعيل VM.
