E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
GCC-3.4.6
Studying note of
GCC-3.4.6
source (119)
5.12.4.1.2. Non-typeparameterThesecondandthirdparametersforthetemplatearenon-typetemplateparameter,whichhavetheirtypespecifiedbutvariedvalueassignedatinstantationorspeclization.Thetype-specifier
wuhui_gdnt
·
2010-11-05 08:00
GCC-3.4.6
源代码学习笔记(119)
5.12.4.1.2. 非类型参数该模板的第二及第三个参数都是非类型参数。它们都指定了类型,但在具现或特化时会分配不同的值。类型描述符(type-specifier)“std::size_t”是simple-type-specifier的形式。而且,simple-type-specifier“std::size_t”包含了两个部分:“std::”构成了nested-name-speci
wuhui_gdnt
·
2010-11-05 08:00
tree
Class
token
extension
attributes
variables
Studying note of
GCC-3.4.6
source (118)
5.12.4.1.1.1. Processtemplate-templateparameterSimilarly,afterparsingthetemplatetemplateparameter,extranodesareneededforthesub-treeoftemplatetemplateparameter.Itisthetaskofprocess_template_parm.Notice
wuhui_gdnt
·
2010-10-22 09:00
list
tree
processing
templates
binding
Parsing
GCC-3.4.6
源代码学习笔记(118)
5.12.4.1.1.2. 处理模板模板参数同样地,在解析完模板模板参数后,模板模板参数的子树也需要额外的节点。这是函数process_template_parm的任务。注意该函数的参数next指向上图中的parameter。 2161 tree2162 process_template_parm(treelist,treenext)
wuhui_gdnt
·
2010-10-22 09:00
Studying note of
GCC-3.4.6
source (117)
5.12.4.1.1.2.1.3. LookupincurrentscopeArrivinghere,noscopeisspecified,thenameshouldbelookedupwithincurrentbindingscope.Herecurrentscopecanbeclassscope,namespace,functionscope,localscope(FORloop,WHIL
wuhui_gdnt
·
2010-10-22 09:00
GCC-3.4.6
源代码学习笔记(117)
5.12.4.1.1.2.1.3. 在当前作用域查找来到这里,没有指定作用域,该名字应该在当前作用域中来查找。这里的当前域可以是类域、名字空间、函数域、局部域(FOR循环、WHILE循环等)。 cp_parser_lookup_name(continue) 13832 else13833 {13834 decl=lookup_name_real(name,is_type,/*nonc
wuhui_gdnt
·
2010-10-22 09:00
Studying note of
GCC-3.4.6
source (116)
5.12.4.1.1.2.1.1.2. LookupinspecifiedclassIfthespecifiedscopeisaclass,thenitshouldlookupclassmemberexceptnon-staticdatamember.Butherethiscontraventionwon’tbechecked,whichwillbedonebythecalle
wuhui_gdnt
·
2010-10-19 11:00
object
tree
Class
buffer
statistics
methods
GCC-3.4.6
源代码学习笔记(116)
5.12.4.1.1.2.1.1.2. 在指定类中的查找而如果指定的作用域是一个类,那么查找的就是除非静态数据成员以外的类成员。不过这里尚不检查是否有违反,这由外部调用它们的函数来检查(build_offset_ref)。在一个指定的类作用域中的查找工作,具体由lookup_member来进行。在这个函数中,注意参数want_type如果是true,这表示我们应该仅返回TYPE
wuhui_gdnt
·
2010-10-19 11:00
struct
tree
Class
buffer
statistics
methods
Studying note of
GCC-3.4.6
source (115)
5.12.4.1.1.2. ThedefaultargumentTokensfollowingthetemplatetemplateparameteris”=::Loki::SingleThreaded”,itisthedefaultvalueforthetemplatetemplateparameter.“::Loki::SingleThreaded”istheformofid-expressi
wuhui_gdnt
·
2010-10-18 11:00
function
tree
null
Class
binding
NameSpaces
GCC-3.4.6
源代码学习笔记(115)
5.12.4.1.1.2. 缺省实参跟在模板模板参数后的符号是“=::Loki::SingleThreaded”,它是模板模板参数的缺省实参。“::Loki::SingleThreaded”是id-expression形式。 cp_parser_type_parameter(continue) 7804 /*Ifthenexttokenisan`=',thenthereisa7805
wuhui_gdnt
·
2010-10-18 11:00
function
tree
null
Class
binding
NameSpaces
Studying note of
GCC-3.4.6
source (114)
5.12.4. ThesecondexampleWehaveseentheprocedureparserhandlesthetemplate-class“SingleThreaded”,however,thisexampleisquitesimpleinviewoftemplatedeclaration.Nextwewillseetemplatedeclarationthatderived
wuhui_gdnt
·
2010-10-18 11:00
GCC-3.4.6
源代码学习笔记(114)
5.12.4. 第二个例子我们已经看过了解析器处理类模板“SingleThreaded”的过程,不过这个例子作为模板声明来说相当简单。接下来,我们来看一个从“SingleThreaded”派生来的模板声明,它能启示我们前端是如何处理模板模板参数及继承关系。下面是我们将要处理的class-head: template classThreadingModel=DEFAULT_THREA
wuhui_gdnt
·
2010-10-18 11:00
list
tree
Class
processing
token
binding
Studying note of
GCC-3.4.6
source (113)
5.12.3.2.1.2.2. ClosetheclassdefinitionReturnsfromexpand_or_defer_fnàcp_parser_late_parsing_for_memberàcp_parser_late_parsing_for_memberàcp_parser_class_specifieràcp_parser_type_specifieràcp_p
wuhui_gdnt
·
2010-10-11 12:00
GCC-3.4.6
源代码学习笔记(113)
5.12.3.2.1.2.2. 闭合类定义自expand_or_defer_fnàcp_parser_late_parsing_for_memberàcp_parser_late_parsing_for_memberàcp_parser_class_specifieràcp_parser_type_specifieràcp_parser_decl_specifier_seq返回至c
wuhui_gdnt
·
2010-10-11 11:00
function
tree
null
Class
binding
variables
Studying note of
GCC-3.4.6
source (112)
5.12.3.2.1.2.1.4. PrepareforcodegenerationThelastinvocationincp_parser_function_definition_after_declaratorisexpand_or_defer_fn.Ifappropriate,itwillgenerateRTLcodeforthefunction;oritdoessomepreparat
wuhui_gdnt
·
2010-10-11 11:00
GCC-3.4.6
源代码学习笔记(112)
5.12.3.2.1.2.1.4. 为产生代码准备cp_parser_function_definition_after_declarator最后调用的函数是expand_or_defer_fn。在适当的情况下,它将为该函数产生RTL代码;否则为RTL代码的产生做一些准备。 2973 void2974 expand_or_defer_fn(treefn)
wuhui_gdnt
·
2010-10-11 11:00
Studying note of
GCC-3.4.6
source (111)
5.12.3.2.1.2.1.3. FinishfunctionhandlingThenfinish_functionwillfinishfilling-upofnodeofFUNCTION_DECLforthefunction.Wewillgobacktothisfunctionlateragainforotherexample. 10815tree10816finish_function(
wuhui_gdnt
·
2010-10-11 11:00
function
tree
null
processing
nested
optimization
GCC-3.4.6
源代码学习笔记(111)
5.12.3.2.1.2.1.3. 完成函数处理那么finish_function将为该函数完成填充其对应的FUNCTION_DECL节点。我们还将在其它例子中,回来看这个函数。 10815tree10816finish_function(intflags)
wuhui_gdnt
·
2010-10-11 11:00
Studying note of
GCC-3.4.6
source (110)
5.12.3.2.1.2.1.2.2. AtfinishFunctioncp_parser_function_bodysimplyinvokescp_parser_compound_statementtoparsethecompoundstatement.Wejustskipthedetailofparsingcompoundstatementhere,butkeepinmin
wuhui_gdnt
·
2010-10-11 11:00
function
tree
null
reference
binding
variables
Studying note of
GCC-3.4.6
source (109)
5.12.3.2.1.2.1.2. ParsefunctionbodyForthekeyword“return”seenatline14368whichfollows“)”,referstosectionBuildnodesformethodfordetail. 14356statictree14357cp_parser_function_definition_after_declarator
wuhui_gdnt
·
2010-10-11 11:00
function
tree
processing
token
Constructor
destructor
GCC-3.4.6
源代码学习笔记(109)
5.12.3.2.1.2.1.2. 解析函数体对于在14368行所见的,跟在“)”后面的关键字“return”,其解释参见章节为方法构建节点。 14356statictree14357cp_parser_function_definition_after_declarator(cp_parser*parser, inparser.c14358
wuhui_gdnt
·
2010-10-11 11:00
function
tree
processing
token
Constructor
destructor
Studying note of
GCC-3.4.6
source (108)
5.12.3.2.1.2.1.1.1. PreparedatabeforefunctionhandlingNext,itpreparesstructureforexpandingstatementswithinthebody.Noticethatargumenttinbegin_stmt_treereferstotheaddressoffieldDECL_SAVED_TREEo
wuhui_gdnt
·
2010-10-11 11:00
function
tree
null
interface
binding
Instantiation
GCC-3.4.6
源代码学习笔记(108)
5.12.3.2.1.2.1.1.1. 处理函数之前准备数据接下来,为展开函数体内的语句准备结构体。注意到在begin_stmt_tree中的参数t指向RESULT_DECL的DECL_SAVED_TREE域的地址。 67 void68 begin_stmt_tree(tree*t)
wuhui_gdnt
·
2010-10-11 11:00
Studying note of
GCC-3.4.6
source (107)
5.12.3.2.1.2. Finishparsing5.12.3.2.1.2.1. LateparseinlinemethodsTheparsingofrestmembersoftheclass“SingleThreaded”isalmostthesameasthosewehaveseen.Sowejustskipthesedeclarations,andassumesthatn
wuhui_gdnt
·
2010-10-11 11:00
GCC-3.4.6
源代码学习笔记(107)
5.12.3.2.1.2. 完成解析5.12.3.2.1.2.1. 延迟的内联函数解析对类“SingleThreaded”余下方法的解析基本上与我们已见到的一样。因此我们跳过这些声明,并假设现在解析器看到了类结尾的“}”。除了与结构体“Lock”相似的处理外,类“SingleThreaded”,作为最顶层的类,将经受如下的处理。 cp_parser_class_specifier(
wuhui_gdnt
·
2010-10-11 11:00
function
tree
Integer
Class
processing
Parameters
GCC-3.4.6
源代码学习笔记 (106)
5.12.3.2.1.1.1. 解析类体–typedef声明5.12.3.2.1.1.4.1. 找出decl-specifier-spec及declarator退出结构体“Lock”的定义,现在回到类“SingleThreaded”的定义。接下来的声明是“typedefHostVolatileType;”。对于这个声明,“typedefHost”部分是decl-specifie
wuhui_gdnt
·
2010-09-25 11:00
tree
null
Class
token
deprecated
attributes
Studying note of
GCC-3.4.6
source (105)
5.12.3.2.1.1.3.6.1. ExitnestedclassFurther,whenconsumingthetailing“;”oftheclass,itmeanswearegoingtoexittheclassscopeandre-enteritscontainingscope.Thisoperationisdonebypopclassatline5257. 556
wuhui_gdnt
·
2010-09-21 11:00
GCC-3.4.6
源代码学习笔记 (105)
5.12.3.2.1.1.3.6.1. 退出嵌套类进一步的,当“消化”掉了类末尾的“;”的时候,它表示我们将要退出类的作用域,并重新进入包含它的作用域。这个操作由5257行的popclass执行。 5564 void5565 popclass(void)
wuhui_gdnt
·
2010-09-21 11:00
struct
tree
null
Class
Access
binding
GCC-3.4.6
源代码学习笔记 (104)
5.12.3.2.1.1.3.5.3. 完成根据返回的arg_types及parms,在grokdeclarator的7601行,build_function_type构建了如下的FUNCTION_TYPE节点。(点此打开)图81:构建的FUNCTION_TYPE节点现在与CALL_EXPR相关的节点都没用了,因为已经没有到CALL_EXPR节点的引用。那么在grokdecla
wuhui_gdnt
·
2010-09-20 11:00
Studying note of
GCC-3.4.6
source (103)
5.12.3.2.1.1.3.5.2. CreateDECLnodesforparameterThenafterparsingtheparameterslist,atline10492incp_parser_direct_declarator,make_call_declaratorcreatesfollowingtreenodes.(Clickhereforopen)Figu
wuhui_gdnt
·
2010-09-17 11:00
GCC-3.4.6
源代码学习笔记 (103)
5.12.3.2.1.1.3.5.2. 为参数构建DECL节点在解析完参数列表后,在cp_parser_direct_declarator的10492行,make_call_declarator创建如下的树节点。(点此打开)图76:非默认构造函数的CALL_EXPR沿着和默认构造函数相同的路径,然后在grokdeclarator中,以下对该声明符的处理有所不同。下面的CALL_
wuhui_gdnt
·
2010-09-17 11:00
function
tree
null
reference
Constructor
deprecated
Studying note of
GCC-3.4.6
source (102)
5.12.3.2.1.1.3.5. ParseotherconstructorsAfterparsingthedefaultconstructor,itreturnsbackcp_parser_member_specification_opt,itbeginsparsingnextconstructor:Lock(constHost&){}Itisaveryinterestingone,asi
wuhui_gdnt
·
2010-09-16 11:00
GCC-3.4.6
源代码学习笔记 (102)
5.12.3.2.1.1.3.5. 解析其它构造函数在解析了默认构造函数后,我们回到cp_parser_member_specification_opt,它开始解析下一个构造函数:Lock(constHost&){}这是一个很有趣的构造函数,因为它的参数是类模板的模板参数。既然我们已经看过解析默认构造函数的过程,在这里我们只看不同的部分。5.12.3.2.1.1.3.5.1.
wuhui_gdnt
·
2010-09-16 11:00
tree
null
Parameters
token
attributes
Parsing
Studying note of
GCC-3.4.6
source (101)
5.12.3.2.1.1.3.4.3. CachebodyforinlinefunctionRoutinestart_methodcreatesnodesforthedeclaratorofthemethod-declaration;afterthatifthemethodhasdefaultargument,this(these)argument(s)shouldbereme
wuhui_gdnt
·
2010-09-14 11:00
GCC-3.4.6
源代码学习笔记 (101)
5.12.3.2.1.1.3.4.3. 缓存内联函数体函数start_method为这个method-declaration的声明符构建了节点,随后如果方法有缺省参数,这些参数将被parser的unparsed_functions_queues域所记录。而如果接下来的符号是“{”,表示适用function-definition规则,定义了内联函数。 cp_parser_save
wuhui_gdnt
·
2010-09-14 11:00
Studying note of
GCC-3.4.6
source (100 continue)
grokdeclarator(continue) 8163 {8164 treedecl;8165 8166 if(decl_context==PARM)8167 {8168 decl=cp_build_parm_decl(declarator,type);8169 8170 bad_specifiers(decl,"parameter",
wuhui_gdnt
·
2010-09-10 11:00
GCC-3.4.6
源代码学习笔记 (100 续)
grokdeclarator(continue) 8163 {8164 treedecl;8165 8166 if(decl_context==PARM)8167 {8168 decl=cp_build_parm_decl(declarator,type);8169 8170 bad_specifiers(decl,"parameter",
wuhui_gdnt
·
2010-09-10 11:00
function
tree
null
processing
Constructor
Types
Studying note of
GCC-3.4.6
source (100)
5.12.3.2.1.1.3.4.2. BuildnodesformethodClearly,nowdeclaratorisnodeoftree_list,anddeclares_class_or_enumremainszeroandwhichifnonzeromeansseeingelaborate-type-specifierorclass-specifierorenum-
wuhui_gdnt
·
2010-09-10 11:00
GCC-3.4.6
源代码学习笔记 (100)
5.12.3.2.1.1.3.4.2. 为方法构建节点显然,现在declarator是一个tree_list节点,并且declares_class_or_enum保存为0(如果它为非0,表示在decl-specifier中看到了elaborate-type-specifier或class-specifier或enum-specifier)。 cp_parser_member_d
wuhui_gdnt
·
2010-09-10 11:00
Studying note of
GCC-3.4.6
source (99)
5.12.3.2.1.1.3.4. ParsedefaultconstructorFollowingthesimilarpathofclass“SingleThreaded”toparseitsmember,withcallstackofcp_parser_class_specifier,cp_parser_member_specification_opt,cp_parser_member_d
wuhui_gdnt
·
2010-09-09 11:00
tree
token
Constructor
nested
attributes
destructor
GCC-3.4.6
源代码学习笔记(99)
5.12.3.2.1.1.3.1. 解析默认构造函数类似于类“SingleThreaded”解析其成员,依次调用cp_parser_class_specifier,cp_parser_member_specification_opt,cp_parser_member_declaration,cp_parser_decl_specifier_seq,在下面的代码片段中按照构造函数解析这个decl
wuhui_gdnt
·
2010-09-09 11:00
Studying note of
GCC-3.4.6
source (98)
Ifvalid,tokenfollowsclass-headshouldbe“{“,howeverwhenerroroccurs,itisnosurethattokencanappear.Takingaconservativeapproach,tokensbefore“}”willbeabandonedwitherror.Otherwise,itcanhappilycontinuetoparsem
wuhui_gdnt
·
2010-09-06 12:00
Studying note of
GCC-3.4.6
source (97)
5.12.3.2.1.1.2.1. BuildselfreferenceAtline2082,routinebuild_self_referencebuildsadummyreferencetoitselfsoDerived::Base(andA::A)works,accordingtoISO-IEC-14882-2003:“Theclass-nameisalsoinsertedintothe
wuhui_gdnt
·
2010-09-03 11:00
GCC-3.4.6
源代码学习笔记(97)
5.12.3.2.1.1.2.1. 构建对自己的引用在2082行,根据ISO-IEC-14882-2003的要求,函数build_self_reference构建了一个对自己的伪引用,使得Derived::Base(及A::A)能够工作“类名亦加入类作用域本身。出于访问检查的目的,加入的类名被视为公有成员名。” 6290void6291build_self_reference(void)
wuhui_gdnt
·
2010-09-03 11:00
tree
Class
Access
reference
Constructor
binding
GCC-3.4.6
源代码学习笔记(96)
5.12.3.2.1.1.2. 开始类定义跟在class-head后,应该是符号“{”,那么在下面的11890行的函数cp_parser_check_type_definition检查定义新的类型在当前上下文是否允许(通过检查parser的type_definition_forbidden_message是否为non-null)。 cp_parser_class_specifier
wuhui_gdnt
·
2010-09-02 11:00
Studying note of
GCC-3.4.6
source (95)
5.12.3.2.1.1.1.4. PushTYPE_DECLfortheclassNowdistheTYPE_DECLreferedbyresultsslotofTEMPLATE_DECL,whichisreturnedbypush_template_decl_real.Andbisthescopeofnamespace“Loki”foundatthebeginningofthefuncti
wuhui_gdnt
·
2010-09-01 11:00
Studying note of
GCC-3.4.6
source (94)
5.12.3.2.1.1.1.3. CreateTEMPLATE_DECLfortheclassAsitisaclasstemplate,itneedsanodeofTEMPLATE_DECLtodescribethecharacteristicsofthetemplate.Nowit’sgoingtocreatethisnode. pushtag(continue) 4656 d=m
wuhui_gdnt
·
2010-08-31 11:00
tree
Class
processing
Parameters
binding
destructor
GCC-3.4.6
源代码学习笔记(94)
5.12.3.2.1.1.1.3. 为类创建TEMPLATE_DECL因为这是个类模板,它必须要有自己的TEMPLATE_DECL节点来描述其模板特性。现在就要创建这个节点。 pushtag(continue) 4656 d=maybe_process_template_type_declaration(type,4657
wuhui_gdnt
·
2010-08-31 11:00
Studying note of
GCC-3.4.6
source (93)
5.12.3.2.1.1. Caseofclass-specifierClass-specifierfollowstherule:class-specifier:class-head{member-specification[opt]} 11855statictree11856cp_parser_class_specifier(cp_parser*parser)
wuhui_gdnt
·
2010-08-30 12:00
GCC-3.4.6
源代码学习笔记(93)
5.12.3.2.1.1. class-specifier的情形Class-specifier具有规则:class-specifier:class-head{member-specification[opt]} 11855statictree11856cp_parser_class_specifier(cp_parser*parser)
wuhui_gdnt
·
2010-08-30 11:00
tree
token
templates
nested
binding
attributes
上一页
1
2
3
4
5
6
7
8
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他