Changeset 129281 in webkit for trunk/Source/JavaScriptCore/bytecompiler
- Timestamp:
- Sep 21, 2012, 5:43:03 PM (13 years ago)
- Location:
- trunk/Source/JavaScriptCore/bytecompiler
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
r128832 r129281 1458 1458 } 1459 1459 1460 void BytecodeGenerator::emitCheckHasInstance(RegisterID* base) 1461 { 1460 void BytecodeGenerator::emitCheckHasInstance(RegisterID* dst, RegisterID* value, RegisterID* base, Label* target) 1461 { 1462 size_t begin = instructions().size(); 1462 1463 emitOpcode(op_check_has_instance); 1464 instructions().append(dst->index()); 1465 instructions().append(value->index()); 1463 1466 instructions().append(base->index()); 1467 instructions().append(target->bind(begin, instructions().size())); 1464 1468 } 1465 1469 -
trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h
r128534 r129281 456 456 RegisterID* emitPostDec(RegisterID* dst, RegisterID* srcDst); 457 457 458 void emitCheckHasInstance(RegisterID* base);458 void emitCheckHasInstance(RegisterID* dst, RegisterID* value, RegisterID* base, Label* target); 459 459 RegisterID* emitInstanceOf(RegisterID* dst, RegisterID* value, RegisterID* base, RegisterID* basePrototype); 460 460 RegisterID* emitTypeOf(RegisterID* dst, RegisterID* src) { return emitUnaryOp(op_typeof, dst, src); } -
trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r129156 r129281 1089 1089 RefPtr<RegisterID> src1 = generator.emitNodeForLeftHandSide(m_expr1, m_rightHasAssignments, m_expr2->isPure(generator)); 1090 1090 RefPtr<RegisterID> src2 = generator.emitNode(m_expr2); 1091 RefPtr<RegisterID> prototype = generator.newTemporary(); 1092 RefPtr<RegisterID> dstReg = generator.finalDestination(dst, src1.get()); 1093 RefPtr<Label> target = generator.newLabel(); 1091 1094 1092 1095 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 1093 generator.emitCheckHasInstance( src2.get());1096 generator.emitCheckHasInstance(dstReg.get(), src1.get(), src2.get(), target.get()); 1094 1097 1095 1098 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 1096 RegisterID* src2Prototype = generator.emitGetById(generator.newTemporary(), src2.get(), generator.globalData()->propertyNames->prototype);1099 generator.emitGetById(prototype.get(), src2.get(), generator.globalData()->propertyNames->prototype); 1097 1100 1098 1101 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 1099 return generator.emitInstanceOf(generator.finalDestination(dst, src1.get()), src1.get(), src2.get(), src2Prototype); 1102 RegisterID* result = generator.emitInstanceOf(dstReg.get(), src1.get(), src2.get(), prototype.get()); 1103 generator.emitLabel(target.get()); 1104 return result; 1100 1105 } 1101 1106
Note:
See TracChangeset
for help on using the changeset viewer.