| 339 | } |
| 340 | |
| 341 | void fxDuplicateModuleTransfers(txMachine* the, txSlot* srcModule, txSlot* dstModule) |
| 342 | { |
| 343 | txSlot* srcSlot; |
| 344 | txSlot* dstSlot; |
| 345 | txSlot* transfer; |
| 346 | txSlot* aliases; |
| 347 | txSlot* function; |
| 348 | srcSlot = mxModuleInternal(srcModule); |
| 349 | dstSlot = mxModuleInternal(dstModule); |
| 350 | dstSlot->flag |= (srcSlot->flag & (XS_IMPORT_FLAG | XS_IMPORT_META_FLAG)); |
| 351 | srcSlot = mxModuleTransfers(srcModule); |
| 352 | dstSlot = mxModuleTransfers(dstModule); |
| 353 | fxDuplicateInstance(the, srcSlot->value.reference); |
| 354 | mxPullSlot(dstSlot); |
| 355 | transfer = dstSlot->value.reference->next; |
| 356 | while (transfer) { |
| 357 | fxDuplicateInstance(the, transfer->value.reference); |
| 358 | mxPullSlot(transfer); |
| 359 | aliases = mxTransferAliases(transfer); |
| 360 | if (aliases->kind == XS_REFERENCE_KIND) { |
| 361 | fxDuplicateInstance(the, aliases->value.reference); |
| 362 | mxPullSlot(aliases); |
| 363 | } |
| 364 | transfer = transfer->next; |
| 365 | } |
| 366 | srcSlot = mxModuleInitialize(srcModule); |
| 367 | dstSlot = mxModuleInitialize(dstModule); |
| 368 | if (srcSlot->kind == XS_REFERENCE_KIND) { |
| 369 | function = fxDuplicateInstance(the, srcSlot->value.reference); |
| 370 | mxPullSlot(dstSlot); |
| 371 | mxFunctionInstanceHome(function)->value.home.module = dstModule->value.reference; |
| 372 | } |
| 373 | else { |
| 374 | dstSlot->kind = srcSlot->kind; |
| 375 | dstSlot->value = srcSlot->value; |
| 376 | } |
| 377 | srcSlot = mxModuleExecute(srcModule); |
| 378 | dstSlot = mxModuleExecute(dstModule); |
| 379 | function = fxDuplicateInstance(the, srcSlot->value.reference); |
| 380 | mxPullSlot(dstSlot); |
| 381 | mxFunctionInstanceHome(function)->value.home.module = dstModule->value.reference; |
| 382 | } |
| 383 | |
| 384 | void fxExecuteModules(txMachine* the, txSlot* queue) |
| 385 | { |
no test coverage detected