bool Engine::executeFile(FILE *file,JSContext *cx,JSObject *obj) { jsval rval; uintN lineno = 0; ContextPrivate *cxPrivate = (ContextPrivate*)JS_GetContextPrivate(cx); std::string script; if ( !parseFile(file,cxPrivate->getHttpRequest(),script) ) { throwParseError(cx); return false; } JSBool result = JS_EvaluateScript(cx,obj,script.c_str(),(uintN)script.length(), Util::UriUtil::getLastSegment(cxPrivate->getHttpRequest().getUri()).c_str(),1,&rval); return result==JS_TRUE; }
bool Parser_Factor::read(TokenTypeContext &ctx, AST_BaseExpression::shared_ptr& node) { bool result = false; std::map<Token, Token> wantedToken; wantedToken.insert(std::pair<Token, Token>(Token::OpenParentesis, Token::OpenParentesis)); wantedToken.insert(std::pair<Token, Token>(Token::Identifier, Token::Identifier)); wantedToken.insert(std::pair<Token, Token>(Token::rw_true, Token::rw_true)); wantedToken.insert(std::pair<Token, Token>(Token::rw_false, Token::rw_false)); wantedToken.insert(std::pair<Token, Token>(Token::Integer, Token::Integer)); wantedToken.insert(std::pair<Token, Token>(Token::Double, Token::Double)); wantedToken.insert(std::pair<Token, Token>(Token::String, Token::String)); Token found; std::string lexem1; if (isToken2AndMoveForward(ctx, wantedToken, found, lexem1)) { result = true; if (found == Token::OpenParentesis) { AST_BaseExpression::shared_ptr astExpression; { Parser_Expression expParser; expParser.read(ctx, astExpression); } node = astExpression; checkTokenMoveForward(ctx, Token::CloseParentesis); } else if (found == Token::Identifier) { AST_BaseIdentifier::shared_ptr nodeIdentifier; { Parser_Identifier parser; parser.read(ctx, lexem1, nodeIdentifier); } node = nodeIdentifier; } else if (found == Token::rw_true) { node = AST_BaseExpression::shared_ptr( new AST_Boolean( ctx.currentFileName(), ctx.currentRowNumber(), ctx.currentLineNumber(), true)); } else if (found == Token::rw_false) { node = AST_BaseExpression::shared_ptr( new AST_Boolean( ctx.currentFileName(), ctx.currentRowNumber(), ctx.currentLineNumber(), false)); } else if (found == Token::Integer) { int v = atoi(lexem1.c_str()); node = AST_BaseExpression::shared_ptr( new AST_Integer( ctx.currentFileName(), ctx.currentRowNumber(), ctx.currentLineNumber(), v)); } else if (found == Token::Double) { double v = atof(lexem1.c_str()); node = AST_BaseExpression::shared_ptr( new AST_Double( ctx.currentFileName(), ctx.currentRowNumber(), ctx.currentLineNumber(), v)); } else if (found == Token::String) { node = AST_BaseExpression::shared_ptr( new AST_String( ctx.currentFileName(), ctx.currentRowNumber(), ctx.currentLineNumber(), lexem1)); } } if (result) { if(node.get() == nullptr) { throwParseError("sdfsdfsd", 9, 9); } } return result; }