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

Function fxCoderOptimize

xs/sources/xsCode.c:1296–1365  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1294}
1295
1296void fxCoderOptimize(txCoder* self)
1297{
1298 txByteCode** address;
1299 txByteCode* code;
1300
1301 // branch to (target | unwind)* end => end
1302 address = &self->firstCode;
1303 while ((code = *address)) {
1304 if (code->id == XS_CODE_BRANCH_1) {
1305 txByteCode* nextCode = ((txBranchCode*)code)->target->nextCode;
1306 while ((nextCode->id == XS_NO_CODE) || (nextCode->id == XS_CODE_UNWIND_1))
1307 nextCode = nextCode->nextCode;
1308 if ((XS_CODE_END <= nextCode->id) && (nextCode->id <= XS_CODE_END_DERIVED)) {
1309 txByteCode* end = fxNewParserChunkClear(self->parser, sizeof(txByteCode));
1310 end->nextCode = code->nextCode;
1311 end->id = nextCode->id;
1312 end->stackLevel = code->stackLevel;
1313 *address = end;
1314 }
1315 else
1316 address = &code->nextCode;
1317 }
1318 else
1319 address = &code->nextCode;
1320 }
1321 // unwind (target | unwind)* end => (target | unwind)* end
1322 address = &self->firstCode;
1323 while ((code = *address)) {
1324 if (code->id == XS_CODE_UNWIND_1) {
1325 txByteCode* nextCode = code->nextCode;
1326 while ((nextCode->id == XS_NO_CODE) || (nextCode->id == XS_CODE_UNWIND_1))
1327 nextCode = nextCode->nextCode;
1328 if ((XS_CODE_END <= nextCode->id) && (nextCode->id <= XS_CODE_END_DERIVED))
1329 *address = code->nextCode;
1330 else
1331 address = &code->nextCode;
1332 }
1333 else
1334 address = &code->nextCode;
1335 }
1336 // end target* end => target* end
1337 address = &self->firstCode;
1338 while ((code = *address)) {
1339 if ((XS_CODE_END <= code->id) && (code->id <= XS_CODE_END_DERIVED)) {
1340 txByteCode* nextCode = code->nextCode;
1341 if (!nextCode)
1342 break;
1343 while (nextCode->id == XS_NO_CODE)
1344 nextCode = nextCode->nextCode;
1345 if (nextCode->id == code->id)
1346 *address = code->nextCode;
1347 else
1348 address = &code->nextCode;
1349 }
1350 else
1351 address = &code->nextCode;
1352 }
1353 // branch to next =>

Callers 1

fxParserCodeFunction · 0.85

Calls 1

fxNewParserChunkClearFunction · 0.85

Tested by

no test coverage detected