Diff
Not logged in

Differences From Artifact [cad66e1277]:

To Artifact [c8929ae0d0]:


487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
487
488
489
490
491
492
493


494
495
496
497
498
499
500







-
-







 * Keeping a stack permits the CompileExprTree() routine to be non-recursive.
 */

typedef struct JumpList {
    JumpFixup jump;		/* Pass this argument to matching calls of
				 * TclEmitForwardJump() and 
				 * TclFixupForwardJump(). */
    int offset;			/* Data used to compute jump lengths to pass
				 * to TclFixupForwardJump() */
    int convert;		/* Temporary storage used to compute whether
				 * numeric conversion will be needed following
				 * the operator we're compiling. */
    struct JumpList *next;	/* Point to next item on the stack */
} JumpList;

TclBrodnikArray(JumpList);
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2333
2334
2335
2336
2337
2338
2339

2340
2341
2342
2343
2344
2345
2346







-







		TclEmitForwardJump(envPtr, TCL_FALSE_JUMP, &jumpPtr->jump);
		break;
	    case COLON:
		CLANG_ASSERT(jumpPtr);
		TclEmitForwardJump(envPtr, TCL_UNCONDITIONAL_JUMP,
			&jumpPtr->next->jump);
		TclAdjustStackDepth(-1, envPtr);
		jumpPtr->offset = (envPtr->codeNext - envPtr->codeStart);
		jumpPtr->convert = convert;
		convert = 1;
		break;
	    case AND:
		TclEmitForwardJump(envPtr, TCL_FALSE_JUMP, &jumpPtr->jump);
		break;
	    case OR:
2389
2390
2391
2392
2393
2394
2395
2396

2397
2398
2399

2400
2401
2402
2403
2404
2405
2406
2386
2387
2388
2389
2390
2391
2392

2393
2394
2395

2396
2397
2398
2399
2400
2401
2402
2403







-
+


-
+







		numWords++;
		break;
	    case COLON:
		CLANG_ASSERT(jumpPtr);
		if (TclFixupForwardJump(envPtr, &jumpPtr->next->jump,
			(envPtr->codeNext - envPtr->codeStart)
			- jumpPtr->next->jump.codeOffset, 127)) {
		    jumpPtr->offset += 3;
		    jumpPtr->next->jump.codeOffset += 3;
		}
		TclFixupForwardJump(envPtr, &jumpPtr->jump,
			jumpPtr->offset - jumpPtr->jump.codeOffset, 127);
			jumpPtr->next->jump.codeOffset + 2 -jumpPtr->jump.codeOffset, 127);
		convert |= jumpPtr->convert;
		BA_JumpList_Detach(stack, &jumpPtr);
		BA_JumpList_Detach(stack, &jumpPtr);
		jumpPtr = jumpPtr->next;
		break;
	    case AND:
	    case OR: