| 2089 | } |
| 2090 | |
| 2091 | void fxWriteSlot(txMachine* the, txSnapshot* snapshot, txSlot* slot, txFlag flag) |
| 2092 | { |
| 2093 | txSlot buffer; |
| 2094 | c_memset(&buffer, 0, sizeof(buffer)); |
| 2095 | if (flag == 1) |
| 2096 | buffer.next = fxProjectSlot(the, snapshot->firstProjection, slot->next); |
| 2097 | else if (flag == 2) |
| 2098 | *((txIndex*)&buffer) = *((txIndex*)slot); |
| 2099 | buffer.ID = slot->ID; |
| 2100 | buffer.flag = slot->flag; |
| 2101 | buffer.kind = slot->kind; |
| 2102 | switch (slot->kind) { |
| 2103 | case XS_UNINITIALIZED_KIND: |
| 2104 | case XS_UNDEFINED_KIND: |
| 2105 | case XS_NULL_KIND: |
| 2106 | break; |
| 2107 | case XS_BOOLEAN_KIND: |
| 2108 | buffer.value.boolean = slot->value.boolean; |
| 2109 | break; |
| 2110 | case XS_INTEGER_KIND: |
| 2111 | buffer.value.integer = slot->value.integer; |
| 2112 | break; |
| 2113 | case XS_NUMBER_KIND: |
| 2114 | #if mxCanonicalNaN |
| 2115 | if (c_isnan(slot->value.number)) |
| 2116 | buffer.value.number = *gxCanonicalNaN64; |
| 2117 | else |
| 2118 | #endif |
| 2119 | buffer.value.number = slot->value.number; |
| 2120 | break; |
| 2121 | case XS_STRING_KIND: |
| 2122 | buffer.value.string = (txString)fxProjectChunk(the, slot->value.string); |
| 2123 | break; |
| 2124 | case XS_SYMBOL_KIND: |
| 2125 | buffer.value.symbol = slot->value.symbol; |
| 2126 | break; |
| 2127 | case XS_BIGINT_KIND: |
| 2128 | buffer.value.bigint.data = (txU4*)fxProjectChunk(the, slot->value.bigint.data); |
| 2129 | buffer.value.bigint.size = slot->value.bigint.size; |
| 2130 | buffer.value.bigint.sign = slot->value.bigint.sign; |
| 2131 | break; |
| 2132 | case XS_REFERENCE_KIND: |
| 2133 | buffer.value.reference = fxProjectSlot(the, snapshot->firstProjection, slot->value.reference); |
| 2134 | break; |
| 2135 | case XS_CLOSURE_KIND: |
| 2136 | buffer.value.closure = fxProjectSlot(the, snapshot->firstProjection, slot->value.closure); |
| 2137 | break; |
| 2138 | case XS_INSTANCE_KIND: |
| 2139 | buffer.value.instance.prototype = fxProjectSlot(the, snapshot->firstProjection, slot->value.instance.prototype); |
| 2140 | break; |
| 2141 | |
| 2142 | case XS_ARRAY_KIND: |
| 2143 | case XS_ARGUMENTS_SLOPPY_KIND: |
| 2144 | case XS_ARGUMENTS_STRICT_KIND: |
| 2145 | case XS_STACK_KIND: |
| 2146 | buffer.value.array.address = (txSlot*)fxProjectChunk(the, slot->value.array.address); |
| 2147 | buffer.value.array.length = slot->value.array.length; |
| 2148 | break; |
no test coverage detected