webkit 中 根据idl接口 语言定义dom对象,然后通过perl 解析模块产生经过包装的c++ 文件。
与idl解析相关的五个文件如下:
bindings/scripts/CodeGenerator.pm
bindings/scripts/CodeGeneratorV8.pm
bindings/scripts/IDLParser.pm
bindings/scripts/IDLStructure.pm
bindings/scripts/generate-bindings.pl
generate-bindings.pl 为解析 idl文件入口,根据idl文件定义生成 c++头文件及源文件。
generate-bindings.pl 在makefile中被调用。比如android平台上在 webcore/Android.derived.v8bindings.mk 文件中。
generate-bindings.pl 代码:
首先 获取 参数:
GetOptions('include=s@' => \@idlDirectories, # 目录, 依赖,输出目录等参数。
'outputDir=s' => \$outputDirectory,
'generator=s' => \$generator,
'defines=s' => \$defines,
'preprocessor=s' => \$preprocessor,
'write-dependencies' => \$writeDependencies);
my $idlFile = $ARGV[0]; # 要解析的idl文件
$defines =~ s/^\s+|\s+$//g; # 正则表达式去掉空格
# Parse the given IDL file.
#创建一个解析器
my $parser = IDLParser->new(1); # 对应IDLParser.pm 代码
my $document = $parser->Parse($idlFile, $defines, $preprocessor);
# Generate desired output for given IDL file. 对应 CodeGenerator.pm 代码。
my $codeGen = CodeGenerator->new(\@idlDirectories, $generator, $outputDirectory, 0, $preprocessor, $writeDependencies);
#生成头文件及源文件
$codeGen->ProcessDocument($document, $defines);
ProcessDocument->GenerateInterface(CodeGeneratorV8.pm)
|->GenerateHeader(CodeGeneratorV8.pm) 生成头文件,
GenerateInterface-> |
|->GenerateImplementation(CodeGeneratorV8.pm) 生成源文件
webkit idl parser 模块分析
原创
©著作权归作者所有:来自51CTO博客作者voipmaker的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
python模块--Telnetlib模块
telnet模块
ci 用户名 for循环 -
Webkit for Android分析
,写的非常好,分析得...
java 移动开发 ui Java Android -
WebKit 架构与模块
基于 WebKit 架构与模块项目的笔记与讲解。
WebKit 笔记 -
Webkit FrameLoader分析
Webkit FrameLoader分析 FrameLoader是webkit中一个核心的组件,主要是职责
webkit iframe 浏览器 html 文档 -
webkit dom 事件分析
webkit dom事件分析 Dom事件模型可以分为dom0 和dom2两种事件模型,所以支持JavaScript的浏由
webkit api javascript 浏览器 引擎 -
webkit中timer实现 分析
1. webkit中timer实现的框架类图 1.1 TimerHeap其实就是一个容器,管理一个一个
timer webkit function object html