- while( SpiderScript_IsValueTrue(ret) ) {
- Object_Dereference(ret);
- ret = AST_ExecuteNode(Block, Node->For.Code);
- if(ret == ERRPTR) return ERRPTR;
- Object_Dereference(ret);
- ret = AST_ExecuteNode(Block, Node->For.Increment);
- if(ret == ERRPTR) return ERRPTR;
- Object_Dereference(ret);
- ret = AST_ExecuteNode(Block, Node->For.Condition);
- if(ret == ERRPTR) return ERRPTR;
+ Object_Dereference(ret);
+
+ if(Block->BreakTarget)
+ {
+ if( Block->BreakTarget[0] == '\0' || strcmp(Block->BreakTarget, Node->For.Tag) == 0 )
+ {
+ // Ours
+ free((void*)Block->BreakTarget); Block->BreakTarget = NULL;
+ if( Block->BreakType == NODETYPE_CONTINUE ) {
+ // Continue, just keep going
+ }
+ else
+ break;
+ }
+ else
+ break; // Break out of this loop