| 502 | // ============================================================================ |
| 503 | |
| 504 | Error CodeBuilder::serialize(CodeEmitter* dst) { |
| 505 | Error err = kErrorOk; |
| 506 | CBNode* node_ = getFirstNode(); |
| 507 | |
| 508 | do { |
| 509 | dst->setInlineComment(node_->getInlineComment()); |
| 510 | |
| 511 | switch (node_->getType()) { |
| 512 | case CBNode::kNodeAlign: { |
| 513 | CBAlign* node = static_cast<CBAlign*>(node_); |
| 514 | err = dst->align(node->getMode(), node->getAlignment()); |
| 515 | break; |
| 516 | } |
| 517 | |
| 518 | case CBNode::kNodeData: { |
| 519 | CBData* node = static_cast<CBData*>(node_); |
| 520 | err = dst->embed(node->getData(), node->getSize()); |
| 521 | break; |
| 522 | } |
| 523 | |
| 524 | case CBNode::kNodeFunc: |
| 525 | case CBNode::kNodeLabel: { |
| 526 | CBLabel* node = static_cast<CBLabel*>(node_); |
| 527 | err = dst->bind(node->getLabel()); |
| 528 | break; |
| 529 | } |
| 530 | |
| 531 | case CBNode::kNodeLabelData: { |
| 532 | CBLabelData* node = static_cast<CBLabelData*>(node_); |
| 533 | err = dst->embedLabel(node->getLabel()); |
| 534 | break; |
| 535 | } |
| 536 | |
| 537 | case CBNode::kNodeConstPool: { |
| 538 | CBConstPool* node = static_cast<CBConstPool*>(node_); |
| 539 | err = dst->embedConstPool(node->getLabel(), node->getConstPool()); |
| 540 | break; |
| 541 | } |
| 542 | |
| 543 | case CBNode::kNodeInst: |
| 544 | case CBNode::kNodeFuncCall: { |
| 545 | CBInst* node = node_->as<CBInst>(); |
| 546 | dst->setOptions(node->getOptions()); |
| 547 | dst->setExtraReg(node->getExtraReg()); |
| 548 | err = dst->emitOpArray(node->getInstId(), node->getOpArray(), node->getOpCount()); |
| 549 | break; |
| 550 | } |
| 551 | |
| 552 | case CBNode::kNodeComment: { |
| 553 | CBComment* node = static_cast<CBComment*>(node_); |
| 554 | err = dst->comment(node->getInlineComment()); |
| 555 | break; |
| 556 | } |
| 557 | |
| 558 | default: |
| 559 | break; |
| 560 | } |
| 561 |
nothing calls this directly
no test coverage detected