115:1555cb5a97b3 | 116:b78e86780939 |
---|---|
17 var OP_DIV = 15; | 17 var OP_DIV = 15; |
18 var OP_MOD = 16; | 18 var OP_MOD = 16; |
19 var OP_POW = 17; | 19 var OP_POW = 17; |
20 var OP_UNM = 18; | 20 var OP_UNM = 18; |
21 var OP_NOT = 19; | 21 var OP_NOT = 19; |
22 //VAR OP_LEN = 20; | 22 var OP_LEN = 20; |
23 var OP_CONCAT = 21; | 23 var OP_CONCAT = 21; |
24 var OP_JMP = 22; | 24 var OP_JMP = 22; |
25 var OP_EQ = 23; | 25 var OP_EQ = 23; |
26 var OP_LT = 24; | 26 var OP_LT = 24; |
27 var OP_LE = 25; | 27 var OP_LE = 25; |
158 && (result[0].type != "boolean" || result[0].value == true) | 158 && (result[0].type != "boolean" || result[0].value == true) |
159 ); | 159 ); |
160 } | 160 } |
161 } | 161 } |
162 return false; | 162 return false; |
163 }, | |
164 len: function () | |
165 { | |
166 switch(this.type) | |
167 { | |
168 case "string": | |
169 case "table": | |
170 return this.value.length; | |
171 default: | |
172 throw "attempt to get length of a "+this.type+" value"; | |
173 } | |
163 } | 174 } |
164 }; | 175 }; |
165 | 176 |
166 function LBinaryChunk(vm, chunk, start, sourceName) | 177 function LBinaryChunk(vm, chunk, start, sourceName) |
167 { | 178 { |
650 break; | 661 break; |
651 case OP_NOT: | 662 case OP_NOT: |
652 var RB = frame.reg[INS_B(instruction)]; | 663 var RB = frame.reg[INS_B(instruction)]; |
653 frame.reg[INS_A(instruction)] = new LValue(this, "boolean", !RB.truth()); | 664 frame.reg[INS_A(instruction)] = new LValue(this, "boolean", !RB.truth()); |
654 break; | 665 break; |
666 case OP_LEN: | |
667 var RB = frame.reg[INS_B(instruction)]; | |
668 frame.reg[INS_A(instruction)] = new LValue(this, "number", RB.len()); | |
669 break; | |
655 case OP_EQ: | 670 case OP_EQ: |
656 var A = INS_A(instruction); | 671 var A = INS_A(instruction); |
657 var RB = RK(frame, INS_B(instruction)); | 672 var RB = RK(frame, INS_B(instruction)); |
658 var RC = RK(frame, INS_C(instruction)); | 673 var RC = RK(frame, INS_C(instruction)); |
659 if(RB.equals(RC) != (A!=0)) | 674 if(RB.equals(RC) != (A!=0)) |