v8学习笔记(七) 执行过程

来源:互联网 发布:three.js开发指南摘要 编辑:程序博客网 时间:2024/06/09 16:15

v8执行过程

         JS源码经过v8编译后得到Handle<Script>,调用API ScriptRun()运行。

         (1)API进入v8内部,取到JSFunction对象: API Handle<Script>转换为Handle<JSFunction>,得到JSFunction对象

         (2)通过(动态)内建JSEntry Code对象的入口函数调用目标机器指令:

                   通过JSEntryStub获得内建的JSEntry Code对象(含有内建入口函数的机器指令),再得到其JS入口函数地址(第一条机器指令的地址) , 调用入口函数 , 同时将(JS源码编译后生成的)JSFunction中的Code对象的入口函数地址作为参数.

     JSEntryFunction entry = FUNCTION_CAST<JSEntryFunction>(code->entry());//内建入口函数地址

    // Call the function through the right JS entry stub.

     byte* entry_address = func->code()->entry();

    JSFunction* function = *func;

    Object* receiver_pointer = *receiver;

     //跳到运行时动态产生的JS入口函数机器指令处执行,随后跳到动态产生的目标机器指令处

    entry(entry_address, function,receiver_pointer, argc, args);

原创粉丝点击