Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}