107 lines
2.4 KiB
C++
107 lines
2.4 KiB
C++
/*
|
|
* ImportStatement.cpp
|
|
*
|
|
* Created on: Jan 7, 2013
|
|
* Author: att
|
|
*/
|
|
|
|
#include "ImportStatement.h"
|
|
|
|
ImportStatement::ImportStatement(std::string name_of_module, ContextManager * context_manager) :
|
|
name_of_module(name_of_module), context_manager(context_manager){
|
|
//Hrum hrum magic
|
|
this->type = "ImportStatement";
|
|
prepare_defaults();
|
|
std::ifstream module_file;
|
|
std::string module_source_text = "";
|
|
std::string line;
|
|
Lexer lexer;
|
|
vector<Token> tokens;
|
|
Parser parser(context_manager);
|
|
correctly_imported = false;
|
|
for(auto path : prepare_paths(name_of_module))
|
|
{
|
|
if(correctly_imported) break;
|
|
|
|
std::cout << "Path was: " + path << std::endl;
|
|
module_file.open(path.c_str());
|
|
if (module_file.is_open())
|
|
{
|
|
while ( module_file.good() )
|
|
{
|
|
getline (module_file, line);
|
|
module_source_text += line;
|
|
tokens = lexer.parse_line(line);
|
|
parser.add_tokens(tokens);
|
|
}
|
|
module_file.close();
|
|
parser.interpret();
|
|
import_body = parser.tree.root;
|
|
|
|
children.push_back(import_body);
|
|
correctly_imported = true;
|
|
}
|
|
}
|
|
|
|
if(correctly_imported)
|
|
std::cout << "Import complete!" << std::endl;
|
|
else
|
|
std::cout << "Invalid import!" << std::endl;
|
|
|
|
|
|
//std::cout << "Importing file: " << module_source_text << std::endl;
|
|
|
|
//std::cout << "Tokens from file: " << parser.show_tokens() << std::endl;
|
|
//std::cout << "Errors from file: " << parser.error_message << std::endl;
|
|
|
|
}
|
|
|
|
void ImportStatement::prepare_defaults()
|
|
{
|
|
DEFAULT_LIB_PATHS.push_back("/home/att/old/development/sencha-lang/Sencha-lang/libs/");
|
|
}
|
|
|
|
std::vector<std::string> ImportStatement::prepare_paths(std::string name_of_module)
|
|
{
|
|
std::vector<std::string> paths;
|
|
if(name_of_module.substr(name_of_module.size() -3,name_of_module.size()) == ".se")
|
|
{
|
|
std::cout << name_of_module.substr(name_of_module.size() -3,name_of_module.size() ) << std::endl;
|
|
paths.push_back(name_of_module);
|
|
}
|
|
else
|
|
{
|
|
for(auto path : DEFAULT_LIB_PATHS)
|
|
{
|
|
paths.push_back(path + name_of_module + ".se");
|
|
}
|
|
}
|
|
return paths;
|
|
}
|
|
|
|
std::string ImportStatement::strip_string(std::string text)
|
|
{
|
|
if(text.size() > 2)
|
|
{
|
|
std::string result;
|
|
for(unsigned int i = 1; i < text.size() - 1; i++)
|
|
{
|
|
result += text[i];
|
|
}
|
|
return result;
|
|
}
|
|
else
|
|
return string("");
|
|
}
|
|
|
|
ImportStatement::~ImportStatement() {
|
|
// TODO Auto-generated destructor stub
|
|
}
|
|
|
|
SenchaObject ImportStatement::execute()
|
|
{
|
|
if(correctly_imported)
|
|
return import_body->execute();
|
|
else
|
|
return SenchaObject();
|
|
}
|