Changeset 250630 in webkit for trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
- Timestamp:
- Oct 2, 2019, 2:23:09 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r250025 r250630 33 33 #include "CallFrame.h" 34 34 #include "JIT.h" 35 #include "JSAsyncGenerator.h" 35 36 #include "JSCInlines.h" 36 37 #include "JSFunction.h" … … 1035 1036 } 1036 1037 1038 static JSAsyncGenerator::Field asyncGeneratorInternalFieldIndex(BytecodeIntrinsicNode* node) 1039 { 1040 if (node->emitter() == &BytecodeIntrinsicNode::emit_intrinsic_generatorFieldState) 1041 return JSAsyncGenerator::Field::State; 1042 if (node->emitter() == &BytecodeIntrinsicNode::emit_intrinsic_generatorFieldNext) 1043 return JSAsyncGenerator::Field::Next; 1044 if (node->emitter() == &BytecodeIntrinsicNode::emit_intrinsic_generatorFieldThis) 1045 return JSAsyncGenerator::Field::This; 1046 if (node->emitter() == &BytecodeIntrinsicNode::emit_intrinsic_generatorFieldFrame) 1047 return JSAsyncGenerator::Field::Frame; 1048 if (node->emitter() == &BytecodeIntrinsicNode::emit_intrinsic_asyncGeneratorFieldSuspendReason) 1049 return JSAsyncGenerator::Field::SuspendReason; 1050 if (node->emitter() == &BytecodeIntrinsicNode::emit_intrinsic_asyncGeneratorFieldQueueFirst) 1051 return JSAsyncGenerator::Field::QueueFirst; 1052 if (node->emitter() == &BytecodeIntrinsicNode::emit_intrinsic_asyncGeneratorFieldQueueLast) 1053 return JSAsyncGenerator::Field::QueueLast; 1054 RELEASE_ASSERT_NOT_REACHED(); 1055 return JSAsyncGenerator::Field::State; 1056 } 1057 1037 1058 RegisterID* BytecodeIntrinsicNode::emit_intrinsic_getPromiseInternalField(BytecodeGenerator& generator, RegisterID* dst) 1038 1059 { … … 1056 1077 unsigned index = static_cast<unsigned>(generatorInternalFieldIndex(static_cast<BytecodeIntrinsicNode*>(node->m_expr))); 1057 1078 ASSERT(index < JSGenerator::numberOfInternalFields); 1079 ASSERT(!node->m_next); 1080 1081 return generator.emitGetInternalField(generator.finalDestination(dst), base.get(), index); 1082 } 1083 1084 RegisterID* BytecodeIntrinsicNode::emit_intrinsic_getAsyncGeneratorInternalField(BytecodeGenerator& generator, RegisterID* dst) 1085 { 1086 ArgumentListNode* node = m_args->m_listNode; 1087 RefPtr<RegisterID> base = generator.emitNode(node); 1088 node = node->m_next; 1089 RELEASE_ASSERT(node->m_expr->isBytecodeIntrinsicNode()); 1090 unsigned index = static_cast<unsigned>(asyncGeneratorInternalFieldIndex(static_cast<BytecodeIntrinsicNode*>(node->m_expr))); 1091 ASSERT(index < JSAsyncGenerator::numberOfInternalFields); 1058 1092 ASSERT(!node->m_next); 1059 1093 … … 1154 1188 unsigned index = static_cast<unsigned>(generatorInternalFieldIndex(static_cast<BytecodeIntrinsicNode*>(node->m_expr))); 1155 1189 ASSERT(index < JSGenerator::numberOfInternalFields); 1190 node = node->m_next; 1191 RefPtr<RegisterID> value = generator.emitNode(node); 1192 1193 ASSERT(!node->m_next); 1194 1195 return generator.move(dst, generator.emitPutInternalField(base.get(), index, value.get())); 1196 } 1197 1198 RegisterID* BytecodeIntrinsicNode::emit_intrinsic_putAsyncGeneratorInternalField(BytecodeGenerator& generator, RegisterID* dst) 1199 { 1200 ArgumentListNode* node = m_args->m_listNode; 1201 RefPtr<RegisterID> base = generator.emitNode(node); 1202 node = node->m_next; 1203 RELEASE_ASSERT(node->m_expr->isBytecodeIntrinsicNode()); 1204 unsigned index = static_cast<unsigned>(asyncGeneratorInternalFieldIndex(static_cast<BytecodeIntrinsicNode*>(node->m_expr))); 1205 ASSERT(index < JSAsyncGenerator::numberOfInternalFields); 1156 1206 node = node->m_next; 1157 1207 RefPtr<RegisterID> value = generator.emitNode(node); … … 1284 1334 return generator.move(dst, generator.emitIsGenerator(generator.tempDestination(dst), src.get())); 1285 1335 } 1286 1336 1337 RegisterID* BytecodeIntrinsicNode::emit_intrinsic_isAsyncGenerator(JSC::BytecodeGenerator& generator, JSC::RegisterID* dst) 1338 { 1339 ArgumentListNode* node = m_args->m_listNode; 1340 RefPtr<RegisterID> src = generator.emitNode(node); 1341 ASSERT(!node->m_next); 1342 1343 return generator.move(dst, generator.emitIsAsyncGenerator(generator.tempDestination(dst), src.get())); 1344 } 1345 1287 1346 RegisterID* BytecodeIntrinsicNode::emit_intrinsic_isJSArray(JSC::BytecodeGenerator& generator, JSC::RegisterID* dst) 1288 1347 { … … 4159 4218 } else 4160 4219 arg = generator.emitLoad(nullptr, jsUndefined()); 4161 RefPtr<RegisterID> value = generator.emitYield(arg.get(), JSAsyncGenerator Function::AsyncGeneratorSuspendReason::Yield);4220 RefPtr<RegisterID> value = generator.emitYield(arg.get(), JSAsyncGenerator::AsyncGeneratorSuspendReason::Yield); 4162 4221 if (dst == generator.ignoredResult()) 4163 4222 return nullptr; … … 4178 4237 RefPtr<RegisterID> arg = generator.newTemporary(); 4179 4238 generator.emitNode(arg.get(), argument()); 4180 RefPtr<RegisterID> value = generator.emitYield(arg.get(), JSAsyncGenerator Function::AsyncGeneratorSuspendReason::Await);4239 RefPtr<RegisterID> value = generator.emitYield(arg.get(), JSAsyncGenerator::AsyncGeneratorSuspendReason::Await); 4181 4240 if (dst == generator.ignoredResult()) 4182 4241 return nullptr;
Note:
See TracChangeset
for help on using the changeset viewer.