MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / fxWriteSlot

Function fxWriteSlot

xs/sources/xsSnapshot.c:2091–2274  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2089}
2090
2091void 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;

Callers 3

fxWriteChunkArrayFunction · 0.85
fxWriteSlotsFunction · 0.85
fxWriteStackFunction · 0.85

Calls 5

fxProjectSlotFunction · 0.85
fxProjectChunkFunction · 0.85
fxProjectCallbackFunction · 0.85
fxProjectTypeDispatchFunction · 0.85
fxProjectTypeAtomicsFunction · 0.85

Tested by

no test coverage detected