#include "__for.h" #include "Exception.h" #include namespace jet { __for::__for(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent, Tag *local) : Tag(in, parentOut, global, parent, this) { double counter = 0.0f; bool nameDefined = keywordDefined("name"); if(keywordDefined("start")) { counter = keywords[resolveKeyword("start")].asDouble(); keywords["start"].reset(); } if(!keywordDefined("end")) throw coreutils::Exception("for tag requires end keyword."); if(!keywordDefined("step")) throw coreutils::Exception("for tag requires step keyword."); for(double ix = counter; ix <= variables[resolveKeyword("end")].asDouble(); ix += variables[resolveKeyword("step")].asDouble()) { keywords[resolveKeyword("end")].reset(); keywords[resolveKeyword("step")].reset(); if(nameDefined) { if(!keywordDefined("scope") || (keywords[resolveKeyword("scope")] == "global")) global.variables[keywords[resolveKeyword("name")]] = ix; else if(keywords[resolveKeyword("scope")] == "local") this->local->variables[keywords[resolveKeyword("name")]] = ix; else if(keywords[resolveKeyword("scope")] == "parent") parent->local->variables[keywords[resolveKeyword("name")]] = ix; else throw coreutils::Exception("scope value is not valid."); } processContainer(container); container.reset(); } } }