所谓的中间代码(ES5 的 “JSIL”)

脚本
for (var i in obj) {

    obj[i] = i * 2 + 1;

}
寄存器版JSIL
/*literial registers

  L0 'i'   identifier

  L1 'obj' identifier

  L2 2     number

  L3 1     number

*/



        LVA $0, L1        

        CEE $1, $0        

start:  ITEM $2, $1    

        SVA L0, $2    

        MUL $3, [0], L2    

        ADD $3, $3, L3    

        SPR $0, $2, $3

        NEXT $4, $1

        JNZ start,$4

end:

堆栈版JSIL

/* variables

   L0 i 

   L1 obj

*/



        PUSH VAR L1        // obj

        PUSH ENUM 0        // obj,[enum]obj

start:  PUSH VAR L0        // obj,[enum]obj,i

        PUSH ITEM 1        // obj,[enum]obj,i,[enum]obj.item

        SAVE               // obj,[enum]obj,i

        POP

        PUSH VAR L1

        PUSH VAR L0

        PROP               // ... obj[i]

        PUSH VAR L0        // ... obj[i],i

        PUSH NUMBER 2      // ... i,2

        MULT

        PUSH NUMBER 1      // ... 2i,1

        ADD

        SAVE               // ... obj[i]( = 2i+1) 

        POP

        NEXT               // obj,[enum]obj,hasNext?

        JZ end

        POP

end:    

你喜欢哪一种呢?

你可能感兴趣的:(JSI)