码迷,mamicode.com
首页 > Web开发 > 详细

V8引擎之从webcore到V8

时间:2015-03-02 21:02:17      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:v8

这里不想讲什么是V8,请自行百度。自己搞webkit,故以后的V8学习研究都是基于webkit与V8的结合(目前没有研究blink,仅仅是把webkit官方的JavaScriptCore引擎换作了V8),不是纯粹的V8。

这里仅介绍从webcore的入口处


先从webcore的js入口说起,在html词法解析的时候,有一个这个函数:

bool HTMLDocumentParser::canTakeNextToken(SynchronousMode mode, PumpSession& session)

这个会判断当前是否继续解析,而其中:

   // If we‘re paused waiting for a script, we try to execute scripts before continuing.
        bool shouldContinueParsing = runScriptsForPausedTreeBuilder();

这里正是解析的入口,继续下去直到dom模块的一个void ScriptElement::executeScript(const ScriptSourceCode& sourceCode)这个函数

void ScriptElement::executeScript(const ScriptSourceCode& sourceCode)
{
    ASSERT(m_alreadyStarted);


    if (sourceCode.isEmpty())
        return;


    if (!m_isExternalScript && !m_element->document()->contentSecurityPolicy()->allowInlineScript())
        return;


    RefPtr<Document> document = m_element->document();
    ASSERT(document);
    if (Frame* frame = document->frame()) {
        {
            IgnoreDestructiveWriteCountIncrementer ignoreDesctructiveWriteCountIncrementer(m_isExternalScript ? document.get() : 0);
            // Create a script from the script element node, using the script
            // block‘s source and the script block‘s type.
            // Note: This is where the script is compiled and actually executed.
            frame->script()->evaluate(sourceCode);
        }


        Document::updateStyleForAllDocuments();
    }
}

看见了吧,注释已经写的很清楚,从这里开始离开webcore准备进入js引擎了

  frame->script()->evaluate(sourceCode);这里调用binding模块的脚本控制器scriptcontroler,开始进入binding模块,这binding模块JSC和V8其实有很大的相似之处。下篇再专门分析下v8的binding模块

V8引擎之从webcore到V8

标签:v8

原文地址:http://blog.csdn.net/jiangnanyidiao/article/details/44022177

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!