Changeset 277926 in webkit for trunk/Source/JavaScriptCore/bytecompiler
- Timestamp:
- May 22, 2021, 8:50:06 PM (4 years ago)
- Location:
- trunk/Source/JavaScriptCore/bytecompiler
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
r276719 r277926 2725 2725 } 2726 2726 2727 RegisterID* BytecodeGenerator::emitHasPrivateName(RegisterID* dst, RegisterID* base, RegisterID* property) 2728 { 2729 OpHasPrivateName::emit(this, dst, base, property); 2730 return dst; 2731 } 2732 2727 2733 RegisterID* BytecodeGenerator::emitDirectPutByVal(RegisterID* base, RegisterID* property, RegisterID* value) 2728 2734 { … … 2797 2803 } 2798 2804 2805 RegisterID* BytecodeGenerator::emitHasPrivateBrand(RegisterID* dst, RegisterID* base, RegisterID* brand, bool isStatic) 2806 { 2807 if (isStatic) { 2808 Ref<Label> isObjectLabel = newLabel(); 2809 emitJumpIfTrue(emitIsObject(newTemporary(), base), isObjectLabel.get()); 2810 emitThrowTypeError("Cannot access static private method or accessor of a non-Object"); 2811 emitLabel(isObjectLabel.get()); 2812 emitEqualityOp<OpStricteq>(dst, base, brand); 2813 } else 2814 OpHasPrivateBrand::emit(this, dst, base, brand); 2815 return dst; 2816 } 2817 2799 2818 void BytecodeGenerator::emitCheckPrivateBrand(RegisterID* base, RegisterID* brand, bool isStatic) 2800 2819 { … … 2802 2821 Ref<Label> brandCheckOkLabel = newLabel(); 2803 2822 emitJumpIfTrue(emitEqualityOp<OpStricteq>(newTemporary(), base, brand), brandCheckOkLabel.get()); 2804 emitThrowTypeError("Cannot access static private method or ac essor");2823 emitThrowTypeError("Cannot access static private method or accessor"); 2805 2824 emitLabel(brandCheckOkLabel.get()); 2806 2825 return; -
trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h
r276384 r277926 841 841 RegisterID* emitPrivateFieldPut(RegisterID* base, RegisterID* property, RegisterID* value); 842 842 RegisterID* emitGetPrivateName(RegisterID* dst, RegisterID* base, RegisterID* property); 843 RegisterID* emitHasPrivateName(RegisterID* dst, RegisterID* base, RegisterID* property); 843 844 844 845 void emitCreatePrivateBrand(RegisterID* dst, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd); … … 847 848 848 849 RegisterID* emitGetPrivateBrand(RegisterID* dst, RegisterID* scope, bool isStatic); 850 RegisterID* emitHasPrivateBrand(RegisterID* dst, RegisterID* base, RegisterID* brand, bool isStatic); 849 851 void emitCheckPrivateBrand(RegisterID* base, RegisterID* brand, bool isStatic); 850 852 -
trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r275439 r277926 3207 3207 RegisterID* InNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 3208 3208 { 3209 if (m_expr1->isPrivateIdentifier()) { 3210 RefPtr<RegisterID> base = generator.emitNode(m_expr2); 3211 3212 auto identifier = static_cast<PrivateIdentifierNode*>(m_expr1)->value(); 3213 auto privateTraits = generator.getPrivateTraits(identifier); 3214 Variable var = generator.variable(identifier); 3215 RefPtr<RegisterID> scope = generator.emitResolveScope(nullptr, var); 3216 3217 if (privateTraits.isField()) { 3218 RefPtr<RegisterID> privateName = generator.emitGetFromScope(generator.newTemporary(), scope.get(), var, DoNotThrowIfNotFound); 3219 return generator.emitHasPrivateName(generator.finalDestination(dst, base.get()), base.get(), privateName.get()); 3220 } 3221 3222 ASSERT(privateTraits.isPrivateMethodOrAccessor()); 3223 RefPtr<RegisterID> privateBrand = generator.emitGetPrivateBrand(generator.newTemporary(), scope.get(), privateTraits.isStatic()); 3224 return generator.emitHasPrivateBrand(generator.finalDestination(dst, base.get()), base.get(), privateBrand.get(), privateTraits.isStatic()); 3225 } 3226 3209 3227 if (isNonIndexStringElement(*m_expr1)) { 3210 3228 RefPtr<RegisterID> base = generator.emitNode(m_expr2);
Note:
See TracChangeset
for help on using the changeset viewer.