#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")) { resolveKeyword("start"); counter = keywords["start"].asDouble(); keywords["start"].reset(); } if(keywordDefined("end")) resolveKeyword("end"); else throw coreutils::Exception("for tag requires end keyword."); if(keywordDefined("step")) resolveKeyword("step"); else throw coreutils::Exception("for tag requires step keyword."); for(double ix = counter; ix <= variables["end"].asDouble(); ix += variables["step"].asDouble()) { keywords["end"].reset(); keywords["step"].reset(); if(nameDefined) { if(!keywordDefined("scope") || (keywords["scope"] == "global")) global.variables[keywords["name"]] = ix; else if(keywords["scope"] == "local") this->local->variables[keywords["name"]] = ix; else if(keywords["scope"] == "parent") parent->local->variables[keywords["name"]] = ix; else throw coreutils::Exception("scope value is not valid."); } processContainer(container); container.reset(); } } }