void IdentifierToReturnValueCommand::execute(VirtualMachine& vm, AbstractFunctionCall& node) { vector<string>& parameters = node.getContentArrayNonConstant(); vm.setReturnValue(parameters.at(1)); vm.setReturnToken(node.getToken()->getSubType()); vm.addIdentifer(parameters.at(1)); vm.addArrayTypeToArrayTypes(node.getToken()->getText(), node.getToken()->getSubType()); }
void GetAllFilesInDirectoryCommand::execute(VirtualMachine& vm, AbstractFunctionCall& node) { auto supergeheimeToken = node.getToken(); vector<string>& parameters = node.getContentArrayNonConstant(); auto var = vm.getVariable(parameters[1]); string extension = "*.*"; vector<string> out; DIR* dir = nullptr; struct dirent* dirent = nullptr; string directory = var->getValue(); directory = directory.substr(1, directory.size() - 2); dir = opendir(directory.c_str()); // Target directory if (dir == nullptr) { //throwTypeError(*var, *var, vm); //dir is null dir not found throwCustomError("Directory not found! Cannot get all files in directory..", vm, supergeheimeToken); return; } while (dir) { dirent = readdir(dir); if (!dirent) { break; } string direct = dirent->d_name; direct = directory + "\\" + direct; DIR* temp = opendir(direct.c_str()); if (!temp) { string fileName = dirent->d_name; out.push_back("\"" + fileName + "\""); } closedir(temp); } closedir(dir); string buffer; CompileSingleStatement varGetter = CompileSingleStatement(); string localVariable; string arrayDictionary = varGetter.getNextLocalVariableName(buffer); string arrayIdentifier = varGetter.getNextLocalVariableName(buffer); vm.setVariable(arrayDictionary, "", supergeheimeToken, IToken::TYPE_TEXT_ARRAY); shared_ptr<Variable> arrayVar = vm.getVariable(arrayDictionary); vm.setFunctionParameter(arrayDictionary, arrayIdentifier); int Size = out.size(); vm.addArrayToDictionary(arrayDictionary, vector<int>({ Size })); vm.addIdentifer(arrayIdentifier); for (size_t i = 0; i < out.size(); i++) { localVariable = varGetter.getNextLocalVariableName(buffer); vm.setVariable(localVariable, out.at(i), supergeheimeToken, IToken::TYPE_TEXT); vm.addItemToVariableArrayAt(arrayDictionary, vector<string>({ to_string(i) }), vm.getVariable(localVariable)); } vm.setReturnValue(arrayIdentifier); vm.setReturnToken(IToken::TYPE_TEXT_ARRAY); }
void GetFilesInDirectoryByExtensionCommand::execute(VirtualMachine& vm, AbstractFunctionCall& node) { auto supergeheimeToken = node.getToken(); // TODO: DO EXTENSION STUFF vector<string>& parameters = node.getContentArrayNonConstant(); auto var = vm.getVariable(parameters[1]); string extension = ".cpp"; vector<string> out; DIR* dir; struct dirent* de; string directory = var->getValue(); directory = directory.substr(1, directory.size() - 2); dir = opendir(directory.c_str()); /*your directory*/ if (dir == nullptr) { //dir is null dir not found throwCustomError("Directory not found! Cannot get files by extension..", vm, supergeheimeToken); return; } while (dir) { de = readdir(dir); if (!de) { break; } if (getExtension(de->d_name) == extension) { out.push_back(de->d_name); } } closedir(dir); string buffer; CompileSingleStatement varGetter = CompileSingleStatement(); string localVariable; string arrayDictionary = varGetter.getNextLocalVariableName(buffer); string arrayIdentifier = varGetter.getNextLocalVariableName(buffer); vm.setVariable(arrayDictionary, "", supergeheimeToken, IToken::TYPE_TEXT_ARRAY); auto arrayVar = vm.getVariable(arrayDictionary); vm.setFunctionParameter(arrayDictionary, arrayIdentifier); int size = out.size(); vm.addArrayToDictionary(arrayDictionary, vector<int>({size})); vm.addIdentifer(arrayIdentifier); for (size_t i = 0; i < out.size(); i++) { localVariable = varGetter.getNextLocalVariableName(buffer); vm.setVariable(localVariable, out.at(i), supergeheimeToken, IToken::TYPE_TEXT); cout << out.at(i) << endl; vm.addItemToVariableArrayAt(arrayDictionary, vector<string>({ to_string(i) }), vm.getVariable(localVariable)); } vm.setReturnValue(arrayIdentifier); vm.setReturnToken(IToken::TYPE_TEXT_ARRAY); }