| 776 | } |
| 777 | |
| 778 | void fxLinkModules(txMachine* the, txSlot* queue) |
| 779 | { |
| 780 | txSlot* module; |
| 781 | txSlot* order; |
| 782 | txSlot* transfer; |
| 783 | txSlot* local; |
| 784 | txSlot* from; |
| 785 | txSlot* import; |
| 786 | txSlot* aliases; |
| 787 | txSlot* closure; |
| 788 | txSlot* property; |
| 789 | txSlot* circularities; |
| 790 | txSlot* exports; |
| 791 | txSlot* realm; |
| 792 | txSlot* closures; |
| 793 | txSlot* export; |
| 794 | |
| 795 | order = fxNewInstance(the); |
| 796 | while ((module = queue->next)) |
| 797 | fxOrderModule(the, queue, order, module); |
| 798 | queue->next = order->next; |
| 799 | order->next = C_NULL; |
| 800 | mxPop(); |
| 801 | |
| 802 | mxReportModuleQueue("LINK"); |
| 803 | module = queue->next; |
| 804 | while (module) { |
| 805 | if (mxModuleStatus(module) == XS_MODULE_STATUS_LINKING) { |
| 806 | transfer = mxModuleTransfers(module)->value.reference->next; |
| 807 | while (transfer) { |
| 808 | local = mxTransferLocal(transfer); |
| 809 | from = mxTransferFrom(transfer); |
| 810 | import = mxTransferImport(transfer); |
| 811 | aliases = mxTransferAliases(transfer); |
| 812 | if (local->kind != XS_NULL_KIND) { |
| 813 | if ((from->kind == XS_NULL_KIND) || (import->kind == XS_NULL_KIND)) { |
| 814 | closure = mxTransferClosure(transfer); |
| 815 | closure->value.export.closure = fxNewSlot(the); |
| 816 | closure->value.export.closure->kind = XS_UNINITIALIZED_KIND; |
| 817 | closure->value.export.module = module->value.reference; |
| 818 | closure->kind = XS_EXPORT_KIND; |
| 819 | } |
| 820 | } |
| 821 | else { |
| 822 | if ((from->kind != XS_NULL_KIND) && (import->kind == XS_NULL_KIND) && (aliases->kind != XS_NULL_KIND)) { |
| 823 | closure = mxTransferClosure(transfer); |
| 824 | closure->value.export.closure = fxNewSlot(the); |
| 825 | closure->value.export.closure->kind = XS_UNINITIALIZED_KIND; |
| 826 | closure->value.export.module = module->value.reference; |
| 827 | closure->kind = XS_EXPORT_KIND; |
| 828 | } |
| 829 | } |
| 830 | transfer = transfer->next; |
| 831 | } |
| 832 | } |
| 833 | module = module->next; |
| 834 | } |
| 835 |
no test coverage detected