| 1462 | } |
| 1463 | |
| 1464 | void SlotDescriptor::CodegenWriteCollectionItemLoopBody(LlvmCodeGen* codegen, |
| 1465 | LlvmBuilder* builder, llvm::Value* collection_value_ptr, llvm::Value* num_tuples, |
| 1466 | llvm::Value* item_index, llvm::Function* fn, |
| 1467 | const NonWritableBasicBlock& insert_before, llvm::Value* pool_val) const { |
| 1468 | DCHECK(pool_val != nullptr); |
| 1469 | const TupleDescriptor* children_tuple_desc = children_tuple_descriptor(); |
| 1470 | DCHECK(children_tuple_desc != nullptr); |
| 1471 | |
| 1472 | llvm::Type* children_tuple_struct_type = children_tuple_desc->GetLlvmStruct(codegen); |
| 1473 | DCHECK(children_tuple_struct_type != nullptr); |
| 1474 | llvm::PointerType* children_tuple_type = codegen->GetPtrType( |
| 1475 | children_tuple_struct_type); |
| 1476 | |
| 1477 | llvm::Value* children_tuple_array = builder->CreateBitCast(collection_value_ptr, |
| 1478 | children_tuple_type, "children_tuple_array"); |
| 1479 | llvm::Value* children_tuple = builder->CreateInBoundsGEP(children_tuple_array, |
| 1480 | item_index, "children_tuple"); |
| 1481 | |
| 1482 | CodegenWriteCollectionIterateOverChildren(codegen, builder, children_tuple, |
| 1483 | children_tuple, fn, insert_before, pool_val); |
| 1484 | } |
| 1485 | |
| 1486 | void SlotDescriptor::CodegenWriteCollectionIterateOverChildren(LlvmCodeGen* codegen, |
| 1487 | LlvmBuilder* builder, llvm::Value* master_tuple, llvm::Value* children_tuple, |
nothing calls this directly
no test coverage detected