cppinternals.info 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029
  1. This is cppinternals.info, produced by makeinfo version 5.2 from
  2. cppinternals.texi.
  3. INFO-DIR-SECTION Software development
  4. START-INFO-DIR-ENTRY
  5. * Cpplib: (cppinternals). Cpplib internals.
  6. END-INFO-DIR-ENTRY
  7. This file documents the internals of the GNU C Preprocessor.
  8. Copyright (C) 2000-2017 Free Software Foundation, Inc.
  9. Permission is granted to make and distribute verbatim copies of this
  10. manual provided the copyright notice and this permission notice are
  11. preserved on all copies.
  12. Permission is granted to copy and distribute modified versions of
  13. this manual under the conditions for verbatim copying, provided also
  14. that the entire resulting derived work is distributed under the terms of
  15. a permission notice identical to this one.
  16. Permission is granted to copy and distribute translations of this
  17. manual into another language, under the above conditions for modified
  18. versions.
  19. 
  20. File: cppinternals.info, Node: Top, Next: Conventions, Up: (dir)
  21. The GNU C Preprocessor Internals
  22. ********************************
  23. 1 Cpplib--the GNU C Preprocessor
  24. ********************************
  25. The GNU C preprocessor is implemented as a library, "cpplib", so it can
  26. be easily shared between a stand-alone preprocessor, and a preprocessor
  27. integrated with the C, C++ and Objective-C front ends. It is also
  28. available for use by other programs, though this is not recommended as
  29. its exposed interface has not yet reached a point of reasonable
  30. stability.
  31. The library has been written to be re-entrant, so that it can be used
  32. to preprocess many files simultaneously if necessary. It has also been
  33. written with the preprocessing token as the fundamental unit; the
  34. preprocessor in previous versions of GCC would operate on text strings
  35. as the fundamental unit.
  36. This brief manual documents the internals of cpplib, and explains
  37. some of the tricky issues. It is intended that, along with the comments
  38. in the source code, a reasonably competent C programmer should be able
  39. to figure out what the code is doing, and why things have been
  40. implemented the way they have.
  41. * Menu:
  42. * Conventions:: Conventions used in the code.
  43. * Lexer:: The combined C, C++ and Objective-C Lexer.
  44. * Hash Nodes:: All identifiers are entered into a hash table.
  45. * Macro Expansion:: Macro expansion algorithm.
  46. * Token Spacing:: Spacing and paste avoidance issues.
  47. * Line Numbering:: Tracking location within files.
  48. * Guard Macros:: Optimizing header files with guard macros.
  49. * Files:: File handling.
  50. * Concept Index:: Index.
  51. 
  52. File: cppinternals.info, Node: Conventions, Next: Lexer, Prev: Top, Up: Top
  53. Conventions
  54. ***********
  55. cpplib has two interfaces--one is exposed internally only, and the other
  56. is for both internal and external use.
  57. The convention is that functions and types that are exposed to
  58. multiple files internally are prefixed with '_cpp_', and are to be found
  59. in the file 'internal.h'. Functions and types exposed to external
  60. clients are in 'cpplib.h', and prefixed with 'cpp_'. For historical
  61. reasons this is no longer quite true, but we should strive to stick to
  62. it.
  63. We are striving to reduce the information exposed in 'cpplib.h' to
  64. the bare minimum necessary, and then to keep it there. This makes clear
  65. exactly what external clients are entitled to assume, and allows us to
  66. change internals in the future without worrying whether library clients
  67. are perhaps relying on some kind of undocumented implementation-specific
  68. behavior.
  69. 
  70. File: cppinternals.info, Node: Lexer, Next: Hash Nodes, Prev: Conventions, Up: Top
  71. The Lexer
  72. *********
  73. Overview
  74. ========
  75. The lexer is contained in the file 'lex.c'. It is a hand-coded lexer,
  76. and not implemented as a state machine. It can understand C, C++ and
  77. Objective-C source code, and has been extended to allow reasonably
  78. successful preprocessing of assembly language. The lexer does not make
  79. an initial pass to strip out trigraphs and escaped newlines, but handles
  80. them as they are encountered in a single pass of the input file. It
  81. returns preprocessing tokens individually, not a line at a time.
  82. It is mostly transparent to users of the library, since the library's
  83. interface for obtaining the next token, 'cpp_get_token', takes care of
  84. lexing new tokens, handling directives, and expanding macros as
  85. necessary. However, the lexer does expose some functionality so that
  86. clients of the library can easily spell a given token, such as
  87. 'cpp_spell_token' and 'cpp_token_len'. These functions are useful when
  88. generating diagnostics, and for emitting the preprocessed output.
  89. Lexing a token
  90. ==============
  91. Lexing of an individual token is handled by '_cpp_lex_direct' and its
  92. subroutines. In its current form the code is quite complicated, with
  93. read ahead characters and such-like, since it strives to not step back
  94. in the character stream in preparation for handling non-ASCII file
  95. encodings. The current plan is to convert any such files to UTF-8
  96. before processing them. This complexity is therefore unnecessary and
  97. will be removed, so I'll not discuss it further here.
  98. The job of '_cpp_lex_direct' is simply to lex a token. It is not
  99. responsible for issues like directive handling, returning lookahead
  100. tokens directly, multiple-include optimization, or conditional block
  101. skipping. It necessarily has a minor ro^le to play in memory management
  102. of lexed lines. I discuss these issues in a separate section (*note
  103. Lexing a line::).
  104. The lexer places the token it lexes into storage pointed to by the
  105. variable 'cur_token', and then increments it. This variable is
  106. important for correct diagnostic positioning. Unless a specific line
  107. and column are passed to the diagnostic routines, they will examine the
  108. 'line' and 'col' values of the token just before the location that
  109. 'cur_token' points to, and use that location to report the diagnostic.
  110. The lexer does not consider whitespace to be a token in its own
  111. right. If whitespace (other than a new line) precedes a token, it sets
  112. the 'PREV_WHITE' bit in the token's flags. Each token has its 'line'
  113. and 'col' variables set to the line and column of the first character of
  114. the token. This line number is the line number in the translation unit,
  115. and can be converted to a source (file, line) pair using the line map
  116. code.
  117. The first token on a logical, i.e. unescaped, line has the flag 'BOL'
  118. set for beginning-of-line. This flag is intended for internal use, both
  119. to distinguish a '#' that begins a directive from one that doesn't, and
  120. to generate a call-back to clients that want to be notified about the
  121. start of every non-directive line with tokens on it. Clients cannot
  122. reliably determine this for themselves: the first token might be a
  123. macro, and the tokens of a macro expansion do not have the 'BOL' flag
  124. set. The macro expansion may even be empty, and the next token on the
  125. line certainly won't have the 'BOL' flag set.
  126. New lines are treated specially; exactly how the lexer handles them
  127. is context-dependent. The C standard mandates that directives are
  128. terminated by the first unescaped newline character, even if it appears
  129. in the middle of a macro expansion. Therefore, if the state variable
  130. 'in_directive' is set, the lexer returns a 'CPP_EOF' token, which is
  131. normally used to indicate end-of-file, to indicate end-of-directive. In
  132. a directive a 'CPP_EOF' token never means end-of-file. Conveniently, if
  133. the caller was 'collect_args', it already handles 'CPP_EOF' as if it
  134. were end-of-file, and reports an error about an unterminated macro
  135. argument list.
  136. The C standard also specifies that a new line in the middle of the
  137. arguments to a macro is treated as whitespace. This white space is
  138. important in case the macro argument is stringized. The state variable
  139. 'parsing_args' is nonzero when the preprocessor is collecting the
  140. arguments to a macro call. It is set to 1 when looking for the opening
  141. parenthesis to a function-like macro, and 2 when collecting the actual
  142. arguments up to the closing parenthesis, since these two cases need to
  143. be distinguished sometimes. One such time is here: the lexer sets the
  144. 'PREV_WHITE' flag of a token if it meets a new line when 'parsing_args'
  145. is set to 2. It doesn't set it if it meets a new line when
  146. 'parsing_args' is 1, since then code like
  147. #define foo() bar
  148. foo
  149. baz
  150. would be output with an erroneous space before 'baz':
  151. foo
  152. baz
  153. This is a good example of the subtlety of getting token spacing
  154. correct in the preprocessor; there are plenty of tests in the testsuite
  155. for corner cases like this.
  156. The lexer is written to treat each of '\r', '\n', '\r\n' and '\n\r'
  157. as a single new line indicator. This allows it to transparently
  158. preprocess MS-DOS, Macintosh and Unix files without their needing to
  159. pass through a special filter beforehand.
  160. We also decided to treat a backslash, either '\' or the trigraph
  161. '??/', separated from one of the above newline indicators by non-comment
  162. whitespace only, as intending to escape the newline. It tends to be a
  163. typing mistake, and cannot reasonably be mistaken for anything else in
  164. any of the C-family grammars. Since handling it this way is not
  165. strictly conforming to the ISO standard, the library issues a warning
  166. wherever it encounters it.
  167. Handling newlines like this is made simpler by doing it in one place
  168. only. The function 'handle_newline' takes care of all newline
  169. characters, and 'skip_escaped_newlines' takes care of arbitrarily long
  170. sequences of escaped newlines, deferring to 'handle_newline' to handle
  171. the newlines themselves.
  172. The most painful aspect of lexing ISO-standard C and C++ is handling
  173. trigraphs and backlash-escaped newlines. Trigraphs are processed before
  174. any interpretation of the meaning of a character is made, and
  175. unfortunately there is a trigraph representation for a backslash, so it
  176. is possible for the trigraph '??/' to introduce an escaped newline.
  177. Escaped newlines are tedious because theoretically they can occur
  178. anywhere--between the '+' and '=' of the '+=' token, within the
  179. characters of an identifier, and even between the '*' and '/' that
  180. terminates a comment. Moreover, you cannot be sure there is just
  181. one--there might be an arbitrarily long sequence of them.
  182. So, for example, the routine that lexes a number, 'parse_number',
  183. cannot assume that it can scan forwards until the first non-number
  184. character and be done with it, because this could be the '\' introducing
  185. an escaped newline, or the '?' introducing the trigraph sequence that
  186. represents the '\' of an escaped newline. If it encounters a '?' or
  187. '\', it calls 'skip_escaped_newlines' to skip over any potential escaped
  188. newlines before checking whether the number has been finished.
  189. Similarly code in the main body of '_cpp_lex_direct' cannot simply
  190. check for a '=' after a '+' character to determine whether it has a '+='
  191. token; it needs to be prepared for an escaped newline of some sort.
  192. Such cases use the function 'get_effective_char', which returns the
  193. first character after any intervening escaped newlines.
  194. The lexer needs to keep track of the correct column position,
  195. including counting tabs as specified by the '-ftabstop=' option. This
  196. should be done even within C-style comments; they can appear in the
  197. middle of a line, and we want to report diagnostics in the correct
  198. position for text appearing after the end of the comment.
  199. Some identifiers, such as '__VA_ARGS__' and poisoned identifiers, may
  200. be invalid and require a diagnostic. However, if they appear in a macro
  201. expansion we don't want to complain with each use of the macro. It is
  202. therefore best to catch them during the lexing stage, in
  203. 'parse_identifier'. In both cases, whether a diagnostic is needed or
  204. not is dependent upon the lexer's state. For example, we don't want to
  205. issue a diagnostic for re-poisoning a poisoned identifier, or for using
  206. '__VA_ARGS__' in the expansion of a variable-argument macro. Therefore
  207. 'parse_identifier' makes use of state flags to determine whether a
  208. diagnostic is appropriate. Since we change state on a per-token basis,
  209. and don't lex whole lines at a time, this is not a problem.
  210. Another place where state flags are used to change behavior is whilst
  211. lexing header names. Normally, a '<' would be lexed as a single token.
  212. After a '#include' directive, though, it should be lexed as a single
  213. token as far as the nearest '>' character. Note that we don't allow the
  214. terminators of header names to be escaped; the first '"' or '>'
  215. terminates the header name.
  216. Interpretation of some character sequences depends upon whether we
  217. are lexing C, C++ or Objective-C, and on the revision of the standard in
  218. force. For example, '::' is a single token in C++, but in C it is two
  219. separate ':' tokens and almost certainly a syntax error. Such cases are
  220. handled by '_cpp_lex_direct' based upon command-line flags stored in the
  221. 'cpp_options' structure.
  222. Once a token has been lexed, it leads an independent existence. The
  223. spelling of numbers, identifiers and strings is copied to permanent
  224. storage from the original input buffer, so a token remains valid and
  225. correct even if its source buffer is freed with '_cpp_pop_buffer'. The
  226. storage holding the spellings of such tokens remains until the client
  227. program calls cpp_destroy, probably at the end of the translation unit.
  228. Lexing a line
  229. =============
  230. When the preprocessor was changed to return pointers to tokens, one
  231. feature I wanted was some sort of guarantee regarding how long a
  232. returned pointer remains valid. This is important to the stand-alone
  233. preprocessor, the future direction of the C family front ends, and even
  234. to cpplib itself internally.
  235. Occasionally the preprocessor wants to be able to peek ahead in the
  236. token stream. For example, after the name of a function-like macro, it
  237. wants to check the next token to see if it is an opening parenthesis.
  238. Another example is that, after reading the first few tokens of a
  239. '#pragma' directive and not recognizing it as a registered pragma, it
  240. wants to backtrack and allow the user-defined handler for unknown
  241. pragmas to access the full '#pragma' token stream. The stand-alone
  242. preprocessor wants to be able to test the current token with the
  243. previous one to see if a space needs to be inserted to preserve their
  244. separate tokenization upon re-lexing (paste avoidance), so it needs to
  245. be sure the pointer to the previous token is still valid. The
  246. recursive-descent C++ parser wants to be able to perform tentative
  247. parsing arbitrarily far ahead in the token stream, and then to be able
  248. to jump back to a prior position in that stream if necessary.
  249. The rule I chose, which is fairly natural, is to arrange that the
  250. preprocessor lex all tokens on a line consecutively into a token buffer,
  251. which I call a "token run", and when meeting an unescaped new line
  252. (newlines within comments do not count either), to start lexing back at
  253. the beginning of the run. Note that we do _not_ lex a line of tokens at
  254. once; if we did that 'parse_identifier' would not have state flags
  255. available to warn about invalid identifiers (*note Invalid
  256. identifiers::).
  257. In other words, accessing tokens that appeared earlier in the current
  258. line is valid, but since each logical line overwrites the tokens of the
  259. previous line, tokens from prior lines are unavailable. In particular,
  260. since a directive only occupies a single logical line, this means that
  261. the directive handlers like the '#pragma' handler can jump around in the
  262. directive's tokens if necessary.
  263. Two issues remain: what about tokens that arise from macro
  264. expansions, and what happens when we have a long line that overflows the
  265. token run?
  266. Since we promise clients that we preserve the validity of pointers
  267. that we have already returned for tokens that appeared earlier in the
  268. line, we cannot reallocate the run. Instead, on overflow it is expanded
  269. by chaining a new token run on to the end of the existing one.
  270. The tokens forming a macro's replacement list are collected by the
  271. '#define' handler, and placed in storage that is only freed by
  272. 'cpp_destroy'. So if a macro is expanded in the line of tokens, the
  273. pointers to the tokens of its expansion that are returned will always
  274. remain valid. However, macros are a little trickier than that, since
  275. they give rise to three sources of fresh tokens. They are the built-in
  276. macros like '__LINE__', and the '#' and '##' operators for stringizing
  277. and token pasting. I handled this by allocating space for these tokens
  278. from the lexer's token run chain. This means they automatically receive
  279. the same lifetime guarantees as lexed tokens, and we don't need to
  280. concern ourselves with freeing them.
  281. Lexing into a line of tokens solves some of the token memory
  282. management issues, but not all. The opening parenthesis after a
  283. function-like macro name might lie on a different line, and the front
  284. ends definitely want the ability to look ahead past the end of the
  285. current line. So cpplib only moves back to the start of the token run
  286. at the end of a line if the variable 'keep_tokens' is zero.
  287. Line-buffering is quite natural for the preprocessor, and as a result
  288. the only time cpplib needs to increment this variable is whilst looking
  289. for the opening parenthesis to, and reading the arguments of, a
  290. function-like macro. In the near future cpplib will export an interface
  291. to increment and decrement this variable, so that clients can share full
  292. control over the lifetime of token pointers too.
  293. The routine '_cpp_lex_token' handles moving to new token runs,
  294. calling '_cpp_lex_direct' to lex new tokens, or returning
  295. previously-lexed tokens if we stepped back in the token stream. It also
  296. checks each token for the 'BOL' flag, which might indicate a directive
  297. that needs to be handled, or require a start-of-line call-back to be
  298. made. '_cpp_lex_token' also handles skipping over tokens in failed
  299. conditional blocks, and invalidates the control macro of the
  300. multiple-include optimization if a token was successfully lexed outside
  301. a directive. In other words, its callers do not need to concern
  302. themselves with such issues.
  303. 
  304. File: cppinternals.info, Node: Hash Nodes, Next: Macro Expansion, Prev: Lexer, Up: Top
  305. Hash Nodes
  306. **********
  307. When cpplib encounters an "identifier", it generates a hash code for it
  308. and stores it in the hash table. By "identifier" we mean tokens with
  309. type 'CPP_NAME'; this includes identifiers in the usual C sense, as well
  310. as keywords, directive names, macro names and so on. For example, all
  311. of 'pragma', 'int', 'foo' and '__GNUC__' are identifiers and hashed when
  312. lexed.
  313. Each node in the hash table contain various information about the
  314. identifier it represents. For example, its length and type. At any one
  315. time, each identifier falls into exactly one of three categories:
  316. * Macros
  317. These have been declared to be macros, either on the command line
  318. or with '#define'. A few, such as '__TIME__' are built-ins entered
  319. in the hash table during initialization. The hash node for a
  320. normal macro points to a structure with more information about the
  321. macro, such as whether it is function-like, how many arguments it
  322. takes, and its expansion. Built-in macros are flagged as special,
  323. and instead contain an enum indicating which of the various
  324. built-in macros it is.
  325. * Assertions
  326. Assertions are in a separate namespace to macros. To enforce this,
  327. cpp actually prepends a '#' character before hashing and entering
  328. it in the hash table. An assertion's node points to a chain of
  329. answers to that assertion.
  330. * Void
  331. Everything else falls into this category--an identifier that is not
  332. currently a macro, or a macro that has since been undefined with
  333. '#undef'.
  334. When preprocessing C++, this category also includes the named
  335. operators, such as 'xor'. In expressions these behave like the
  336. operators they represent, but in contexts where the spelling of a
  337. token matters they are spelt differently. This spelling
  338. distinction is relevant when they are operands of the stringizing
  339. and pasting macro operators '#' and '##'. Named operator hash
  340. nodes are flagged, both to catch the spelling distinction and to
  341. prevent them from being defined as macros.
  342. The same identifiers share the same hash node. Since each identifier
  343. token, after lexing, contains a pointer to its hash node, this is used
  344. to provide rapid lookup of various information. For example, when
  345. parsing a '#define' statement, CPP flags each argument's identifier hash
  346. node with the index of that argument. This makes duplicated argument
  347. checking an O(1) operation for each argument. Similarly, for each
  348. identifier in the macro's expansion, lookup to see if it is an argument,
  349. and which argument it is, is also an O(1) operation. Further, each
  350. directive name, such as 'endif', has an associated directive enum stored
  351. in its hash node, so that directive lookup is also O(1).
  352. 
  353. File: cppinternals.info, Node: Macro Expansion, Next: Token Spacing, Prev: Hash Nodes, Up: Top
  354. Macro Expansion Algorithm
  355. *************************
  356. Macro expansion is a tricky operation, fraught with nasty corner cases
  357. and situations that render what you thought was a nifty way to optimize
  358. the preprocessor's expansion algorithm wrong in quite subtle ways.
  359. I strongly recommend you have a good grasp of how the C and C++
  360. standards require macros to be expanded before diving into this section,
  361. let alone the code!. If you don't have a clear mental picture of how
  362. things like nested macro expansion, stringizing and token pasting are
  363. supposed to work, damage to your sanity can quickly result.
  364. Internal representation of macros
  365. =================================
  366. The preprocessor stores macro expansions in tokenized form. This saves
  367. repeated lexing passes during expansion, at the cost of a small increase
  368. in memory consumption on average. The tokens are stored contiguously in
  369. memory, so a pointer to the first one and a token count is all you need
  370. to get the replacement list of a macro.
  371. If the macro is a function-like macro the preprocessor also stores
  372. its parameters, in the form of an ordered list of pointers to the hash
  373. table entry of each parameter's identifier. Further, in the macro's
  374. stored expansion each occurrence of a parameter is replaced with a
  375. special token of type 'CPP_MACRO_ARG'. Each such token holds the index
  376. of the parameter it represents in the parameter list, which allows rapid
  377. replacement of parameters with their arguments during expansion.
  378. Despite this optimization it is still necessary to store the original
  379. parameters to the macro, both for dumping with e.g., '-dD', and to warn
  380. about non-trivial macro redefinitions when the parameter names have
  381. changed.
  382. Macro expansion overview
  383. ========================
  384. The preprocessor maintains a "context stack", implemented as a linked
  385. list of 'cpp_context' structures, which together represent the macro
  386. expansion state at any one time. The 'struct cpp_reader' member
  387. variable 'context' points to the current top of this stack. The top
  388. normally holds the unexpanded replacement list of the innermost macro
  389. under expansion, except when cpplib is about to pre-expand an argument,
  390. in which case it holds that argument's unexpanded tokens.
  391. When there are no macros under expansion, cpplib is in "base
  392. context". All contexts other than the base context contain a contiguous
  393. list of tokens delimited by a starting and ending token. When not in
  394. base context, cpplib obtains the next token from the list of the top
  395. context. If there are no tokens left in the list, it pops that context
  396. off the stack, and subsequent ones if necessary, until an unexhausted
  397. context is found or it returns to base context. In base context, cpplib
  398. reads tokens directly from the lexer.
  399. If it encounters an identifier that is both a macro and enabled for
  400. expansion, cpplib prepares to push a new context for that macro on the
  401. stack by calling the routine 'enter_macro_context'. When this routine
  402. returns, the new context will contain the unexpanded tokens of the
  403. replacement list of that macro. In the case of function-like macros,
  404. 'enter_macro_context' also replaces any parameters in the replacement
  405. list, stored as 'CPP_MACRO_ARG' tokens, with the appropriate macro
  406. argument. If the standard requires that the parameter be replaced with
  407. its expanded argument, the argument will have been fully macro expanded
  408. first.
  409. 'enter_macro_context' also handles special macros like '__LINE__'.
  410. Although these macros expand to a single token which cannot contain any
  411. further macros, for reasons of token spacing (*note Token Spacing::) and
  412. simplicity of implementation, cpplib handles these special macros by
  413. pushing a context containing just that one token.
  414. The final thing that 'enter_macro_context' does before returning is
  415. to mark the macro disabled for expansion (except for special macros like
  416. '__TIME__'). The macro is re-enabled when its context is later popped
  417. from the context stack, as described above. This strict ordering
  418. ensures that a macro is disabled whilst its expansion is being scanned,
  419. but that it is _not_ disabled whilst any arguments to it are being
  420. expanded.
  421. Scanning the replacement list for macros to expand
  422. ==================================================
  423. The C standard states that, after any parameters have been replaced with
  424. their possibly-expanded arguments, the replacement list is scanned for
  425. nested macros. Further, any identifiers in the replacement list that
  426. are not expanded during this scan are never again eligible for expansion
  427. in the future, if the reason they were not expanded is that the macro in
  428. question was disabled.
  429. Clearly this latter condition can only apply to tokens resulting from
  430. argument pre-expansion. Other tokens never have an opportunity to be
  431. re-tested for expansion. It is possible for identifiers that are
  432. function-like macros to not expand initially but to expand during a
  433. later scan. This occurs when the identifier is the last token of an
  434. argument (and therefore originally followed by a comma or a closing
  435. parenthesis in its macro's argument list), and when it replaces its
  436. parameter in the macro's replacement list, the subsequent token happens
  437. to be an opening parenthesis (itself possibly the first token of an
  438. argument).
  439. It is important to note that when cpplib reads the last token of a
  440. given context, that context still remains on the stack. Only when
  441. looking for the _next_ token do we pop it off the stack and drop to a
  442. lower context. This makes backing up by one token easy, but more
  443. importantly ensures that the macro corresponding to the current context
  444. is still disabled when we are considering the last token of its
  445. replacement list for expansion (or indeed expanding it). As an example,
  446. which illustrates many of the points above, consider
  447. #define foo(x) bar x
  448. foo(foo) (2)
  449. which fully expands to 'bar foo (2)'. During pre-expansion of the
  450. argument, 'foo' does not expand even though the macro is enabled, since
  451. it has no following parenthesis [pre-expansion of an argument only uses
  452. tokens from that argument; it cannot take tokens from whatever follows
  453. the macro invocation]. This still leaves the argument token 'foo'
  454. eligible for future expansion. Then, when re-scanning after argument
  455. replacement, the token 'foo' is rejected for expansion, and marked
  456. ineligible for future expansion, since the macro is now disabled. It is
  457. disabled because the replacement list 'bar foo' of the macro is still on
  458. the context stack.
  459. If instead the algorithm looked for an opening parenthesis first and
  460. then tested whether the macro were disabled it would be subtly wrong.
  461. In the example above, the replacement list of 'foo' would be popped in
  462. the process of finding the parenthesis, re-enabling 'foo' and expanding
  463. it a second time.
  464. Looking for a function-like macro's opening parenthesis
  465. =======================================================
  466. Function-like macros only expand when immediately followed by a
  467. parenthesis. To do this cpplib needs to temporarily disable macros and
  468. read the next token. Unfortunately, because of spacing issues (*note
  469. Token Spacing::), there can be fake padding tokens in-between, and if
  470. the next real token is not a parenthesis cpplib needs to be able to back
  471. up that one token as well as retain the information in any intervening
  472. padding tokens.
  473. Backing up more than one token when macros are involved is not
  474. permitted by cpplib, because in general it might involve issues like
  475. restoring popped contexts onto the context stack, which are too hard.
  476. Instead, searching for the parenthesis is handled by a special function,
  477. 'funlike_invocation_p', which remembers padding information as it reads
  478. tokens. If the next real token is not an opening parenthesis, it backs
  479. up that one token, and then pushes an extra context just containing the
  480. padding information if necessary.
  481. Marking tokens ineligible for future expansion
  482. ==============================================
  483. As discussed above, cpplib needs a way of marking tokens as
  484. unexpandable. Since the tokens cpplib handles are read-only once they
  485. have been lexed, it instead makes a copy of the token and adds the flag
  486. 'NO_EXPAND' to the copy.
  487. For efficiency and to simplify memory management by avoiding having
  488. to remember to free these tokens, they are allocated as temporary tokens
  489. from the lexer's current token run (*note Lexing a line::) using the
  490. function '_cpp_temp_token'. The tokens are then re-used once the
  491. current line of tokens has been read in.
  492. This might sound unsafe. However, tokens runs are not re-used at the
  493. end of a line if it happens to be in the middle of a macro argument
  494. list, and cpplib only wants to back-up more than one lexer token in
  495. situations where no macro expansion is involved, so the optimization is
  496. safe.
  497. 
  498. File: cppinternals.info, Node: Token Spacing, Next: Line Numbering, Prev: Macro Expansion, Up: Top
  499. Token Spacing
  500. *************
  501. First, consider an issue that only concerns the stand-alone
  502. preprocessor: there needs to be a guarantee that re-reading its
  503. preprocessed output results in an identical token stream. Without
  504. taking special measures, this might not be the case because of macro
  505. substitution. For example:
  506. #define PLUS +
  507. #define EMPTY
  508. #define f(x) =x=
  509. +PLUS -EMPTY- PLUS+ f(=)
  510. ==> + + - - + + = = =
  511. _not_
  512. ==> ++ -- ++ ===
  513. One solution would be to simply insert a space between all adjacent
  514. tokens. However, we would like to keep space insertion to a minimum,
  515. both for aesthetic reasons and because it causes problems for people who
  516. still try to abuse the preprocessor for things like Fortran source and
  517. Makefiles.
  518. For now, just notice that when tokens are added (or removed, as shown
  519. by the 'EMPTY' example) from the original lexed token stream, we need to
  520. check for accidental token pasting. We call this "paste avoidance".
  521. Token addition and removal can only occur because of macro expansion,
  522. but accidental pasting can occur in many places: both before and after
  523. each macro replacement, each argument replacement, and additionally each
  524. token created by the '#' and '##' operators.
  525. Look at how the preprocessor gets whitespace output correct normally.
  526. The 'cpp_token' structure contains a flags byte, and one of those flags
  527. is 'PREV_WHITE'. This is flagged by the lexer, and indicates that the
  528. token was preceded by whitespace of some form other than a new line.
  529. The stand-alone preprocessor can use this flag to decide whether to
  530. insert a space between tokens in the output.
  531. Now consider the result of the following macro expansion:
  532. #define add(x, y, z) x + y +z;
  533. sum = add (1,2, 3);
  534. ==> sum = 1 + 2 +3;
  535. The interesting thing here is that the tokens '1' and '2' are output
  536. with a preceding space, and '3' is output without a preceding space, but
  537. when lexed none of these tokens had that property. Careful
  538. consideration reveals that '1' gets its preceding whitespace from the
  539. space preceding 'add' in the macro invocation, _not_ replacement list.
  540. '2' gets its whitespace from the space preceding the parameter 'y' in
  541. the macro replacement list, and '3' has no preceding space because
  542. parameter 'z' has none in the replacement list.
  543. Once lexed, tokens are effectively fixed and cannot be altered, since
  544. pointers to them might be held in many places, in particular by
  545. in-progress macro expansions. So instead of modifying the two tokens
  546. above, the preprocessor inserts a special token, which I call a "padding
  547. token", into the token stream to indicate that spacing of the subsequent
  548. token is special. The preprocessor inserts padding tokens in front of
  549. every macro expansion and expanded macro argument. These point to a
  550. "source token" from which the subsequent real token should inherit its
  551. spacing. In the above example, the source tokens are 'add' in the macro
  552. invocation, and 'y' and 'z' in the macro replacement list, respectively.
  553. It is quite easy to get multiple padding tokens in a row, for example
  554. if a macro's first replacement token expands straight into another
  555. macro.
  556. #define foo bar
  557. #define bar baz
  558. [foo]
  559. ==> [baz]
  560. Here, two padding tokens are generated with sources the 'foo' token
  561. between the brackets, and the 'bar' token from foo's replacement list,
  562. respectively. Clearly the first padding token is the one to use, so the
  563. output code should contain a rule that the first padding token in a
  564. sequence is the one that matters.
  565. But what if a macro expansion is left? Adjusting the above example
  566. slightly:
  567. #define foo bar
  568. #define bar EMPTY baz
  569. #define EMPTY
  570. [foo] EMPTY;
  571. ==> [ baz] ;
  572. As shown, now there should be a space before 'baz' and the semicolon
  573. in the output.
  574. The rules we decided above fail for 'baz': we generate three padding
  575. tokens, one per macro invocation, before the token 'baz'. We would then
  576. have it take its spacing from the first of these, which carries source
  577. token 'foo' with no leading space.
  578. It is vital that cpplib get spacing correct in these examples since
  579. any of these macro expansions could be stringized, where spacing
  580. matters.
  581. So, this demonstrates that not just entering macro and argument
  582. expansions, but leaving them requires special handling too. I made
  583. cpplib insert a padding token with a 'NULL' source token when leaving
  584. macro expansions, as well as after each replaced argument in a macro's
  585. replacement list. It also inserts appropriate padding tokens on either
  586. side of tokens created by the '#' and '##' operators. I expanded the
  587. rule so that, if we see a padding token with a 'NULL' source token,
  588. _and_ that source token has no leading space, then we behave as if we
  589. have seen no padding tokens at all. A quick check shows this rule will
  590. then get the above example correct as well.
  591. Now a relationship with paste avoidance is apparent: we have to be
  592. careful about paste avoidance in exactly the same locations we have
  593. padding tokens in order to get white space correct. This makes
  594. implementation of paste avoidance easy: wherever the stand-alone
  595. preprocessor is fixing up spacing because of padding tokens, and it
  596. turns out that no space is needed, it has to take the extra step to
  597. check that a space is not needed after all to avoid an accidental paste.
  598. The function 'cpp_avoid_paste' advises whether a space is required
  599. between two consecutive tokens. To avoid excessive spacing, it tries
  600. hard to only require a space if one is likely to be necessary, but for
  601. reasons of efficiency it is slightly conservative and might recommend a
  602. space where one is not strictly needed.
  603. 
  604. File: cppinternals.info, Node: Line Numbering, Next: Guard Macros, Prev: Token Spacing, Up: Top
  605. Line numbering
  606. **************
  607. Just which line number anyway?
  608. ==============================
  609. There are three reasonable requirements a cpplib client might have for
  610. the line number of a token passed to it:
  611. * The source line it was lexed on.
  612. * The line it is output on. This can be different to the line it was
  613. lexed on if, for example, there are intervening escaped newlines or
  614. C-style comments. For example:
  615. foo /* A long
  616. comment */ bar \
  617. baz
  618. =>
  619. foo bar baz
  620. * If the token results from a macro expansion, the line of the macro
  621. name, or possibly the line of the closing parenthesis in the case
  622. of function-like macro expansion.
  623. The 'cpp_token' structure contains 'line' and 'col' members. The
  624. lexer fills these in with the line and column of the first character of
  625. the token. Consequently, but maybe unexpectedly, a token from the
  626. replacement list of a macro expansion carries the location of the token
  627. within the '#define' directive, because cpplib expands a macro by
  628. returning pointers to the tokens in its replacement list. The current
  629. implementation of cpplib assigns tokens created from built-in macros and
  630. the '#' and '##' operators the location of the most recently lexed
  631. token. This is a because they are allocated from the lexer's token
  632. runs, and because of the way the diagnostic routines infer the
  633. appropriate location to report.
  634. The diagnostic routines in cpplib display the location of the most
  635. recently _lexed_ token, unless they are passed a specific line and
  636. column to report. For diagnostics regarding tokens that arise from
  637. macro expansions, it might also be helpful for the user to see the
  638. original location in the macro definition that the token came from.
  639. Since that is exactly the information each token carries, such an
  640. enhancement could be made relatively easily in future.
  641. The stand-alone preprocessor faces a similar problem when determining
  642. the correct line to output the token on: the position attached to a
  643. token is fairly useless if the token came from a macro expansion. All
  644. tokens on a logical line should be output on its first physical line, so
  645. the token's reported location is also wrong if it is part of a physical
  646. line other than the first.
  647. To solve these issues, cpplib provides a callback that is generated
  648. whenever it lexes a preprocessing token that starts a new logical line
  649. other than a directive. It passes this token (which may be a 'CPP_EOF'
  650. token indicating the end of the translation unit) to the callback
  651. routine, which can then use the line and column of this token to produce
  652. correct output.
  653. Representation of line numbers
  654. ==============================
  655. As mentioned above, cpplib stores with each token the line number that
  656. it was lexed on. In fact, this number is not the number of the line in
  657. the source file, but instead bears more resemblance to the number of the
  658. line in the translation unit.
  659. The preprocessor maintains a monotonic increasing line count, which
  660. is incremented at every new line character (and also at the end of any
  661. buffer that does not end in a new line). Since a line number of zero is
  662. useful to indicate certain special states and conditions, this variable
  663. starts counting from one.
  664. This variable therefore uniquely enumerates each line in the
  665. translation unit. With some simple infrastructure, it is straight
  666. forward to map from this to the original source file and line number
  667. pair, saving space whenever line number information needs to be saved.
  668. The code the implements this mapping lies in the files 'line-map.c' and
  669. 'line-map.h'.
  670. Command-line macros and assertions are implemented by pushing a
  671. buffer containing the right hand side of an equivalent '#define' or
  672. '#assert' directive. Some built-in macros are handled similarly. Since
  673. these are all processed before the first line of the main input file, it
  674. will typically have an assigned line closer to twenty than to one.
  675. 
  676. File: cppinternals.info, Node: Guard Macros, Next: Files, Prev: Line Numbering, Up: Top
  677. The Multiple-Include Optimization
  678. *********************************
  679. Header files are often of the form
  680. #ifndef FOO
  681. #define FOO
  682. ...
  683. #endif
  684. to prevent the compiler from processing them more than once. The
  685. preprocessor notices such header files, so that if the header file
  686. appears in a subsequent '#include' directive and 'FOO' is defined, then
  687. it is ignored and it doesn't preprocess or even re-open the file a
  688. second time. This is referred to as the "multiple include
  689. optimization".
  690. Under what circumstances is such an optimization valid? If the file
  691. were included a second time, it can only be optimized away if that
  692. inclusion would result in no tokens to return, and no relevant
  693. directives to process. Therefore the current implementation imposes
  694. requirements and makes some allowances as follows:
  695. 1. There must be no tokens outside the controlling '#if'-'#endif'
  696. pair, but whitespace and comments are permitted.
  697. 2. There must be no directives outside the controlling directive pair,
  698. but the "null directive" (a line containing nothing other than a
  699. single '#' and possibly whitespace) is permitted.
  700. 3. The opening directive must be of the form
  701. #ifndef FOO
  702. or
  703. #if !defined FOO [equivalently, #if !defined(FOO)]
  704. 4. In the second form above, the tokens forming the '#if' expression
  705. must have come directly from the source file--no macro expansion
  706. must have been involved. This is because macro definitions can
  707. change, and tracking whether or not a relevant change has been made
  708. is not worth the implementation cost.
  709. 5. There can be no '#else' or '#elif' directives at the outer
  710. conditional block level, because they would probably contain
  711. something of interest to a subsequent pass.
  712. First, when pushing a new file on the buffer stack,
  713. '_stack_include_file' sets the controlling macro 'mi_cmacro' to 'NULL',
  714. and sets 'mi_valid' to 'true'. This indicates that the preprocessor has
  715. not yet encountered anything that would invalidate the multiple-include
  716. optimization. As described in the next few paragraphs, these two
  717. variables having these values effectively indicates top-of-file.
  718. When about to return a token that is not part of a directive,
  719. '_cpp_lex_token' sets 'mi_valid' to 'false'. This enforces the
  720. constraint that tokens outside the controlling conditional block
  721. invalidate the optimization.
  722. The 'do_if', when appropriate, and 'do_ifndef' directive handlers
  723. pass the controlling macro to the function 'push_conditional'. cpplib
  724. maintains a stack of nested conditional blocks, and after processing
  725. every opening conditional this function pushes an 'if_stack' structure
  726. onto the stack. In this structure it records the controlling macro for
  727. the block, provided there is one and we're at top-of-file (as described
  728. above). If an '#elif' or '#else' directive is encountered, the
  729. controlling macro for that block is cleared to 'NULL'. Otherwise, it
  730. survives until the '#endif' closing the block, upon which 'do_endif'
  731. sets 'mi_valid' to true and stores the controlling macro in 'mi_cmacro'.
  732. '_cpp_handle_directive' clears 'mi_valid' when processing any
  733. directive other than an opening conditional and the null directive.
  734. With this, and requiring top-of-file to record a controlling macro, and
  735. no '#else' or '#elif' for it to survive and be copied to 'mi_cmacro' by
  736. 'do_endif', we have enforced the absence of directives outside the main
  737. conditional block for the optimization to be on.
  738. Note that whilst we are inside the conditional block, 'mi_valid' is
  739. likely to be reset to 'false', but this does not matter since the
  740. closing '#endif' restores it to 'true' if appropriate.
  741. Finally, since '_cpp_lex_direct' pops the file off the buffer stack
  742. at 'EOF' without returning a token, if the '#endif' directive was not
  743. followed by any tokens, 'mi_valid' is 'true' and '_cpp_pop_file_buffer'
  744. remembers the controlling macro associated with the file. Subsequent
  745. calls to 'stack_include_file' result in no buffer being pushed if the
  746. controlling macro is defined, effecting the optimization.
  747. A quick word on how we handle the
  748. #if !defined FOO
  749. case. '_cpp_parse_expr' and 'parse_defined' take steps to see whether
  750. the three stages '!', 'defined-expression' and 'end-of-directive' occur
  751. in order in a '#if' expression. If so, they return the guard macro to
  752. 'do_if' in the variable 'mi_ind_cmacro', and otherwise set it to 'NULL'.
  753. 'enter_macro_context' sets 'mi_valid' to false, so if a macro was
  754. expanded whilst parsing any part of the expression, then the top-of-file
  755. test in 'push_conditional' fails and the optimization is turned off.
  756. 
  757. File: cppinternals.info, Node: Files, Next: Concept Index, Prev: Guard Macros, Up: Top
  758. File Handling
  759. *************
  760. Fairly obviously, the file handling code of cpplib resides in the file
  761. 'files.c'. It takes care of the details of file searching, opening,
  762. reading and caching, for both the main source file and all the headers
  763. it recursively includes.
  764. The basic strategy is to minimize the number of system calls. On
  765. many systems, the basic 'open ()' and 'fstat ()' system calls can be
  766. quite expensive. For every '#include'-d file, we need to try all the
  767. directories in the search path until we find a match. Some projects,
  768. such as glibc, pass twenty or thirty include paths on the command line,
  769. so this can rapidly become time consuming.
  770. For a header file we have not encountered before we have little
  771. choice but to do this. However, it is often the case that the same
  772. headers are repeatedly included, and in these cases we try to avoid
  773. repeating the filesystem queries whilst searching for the correct file.
  774. For each file we try to open, we store the constructed path in a
  775. splay tree. This path first undergoes simplification by the function
  776. '_cpp_simplify_pathname'. For example, '/usr/include/bits/../foo.h' is
  777. simplified to '/usr/include/foo.h' before we enter it in the splay tree
  778. and try to 'open ()' the file. CPP will then find subsequent uses of
  779. 'foo.h', even as '/usr/include/foo.h', in the splay tree and save system
  780. calls.
  781. Further, it is likely the file contents have also been cached, saving
  782. a 'read ()' system call. We don't bother caching the contents of header
  783. files that are re-inclusion protected, and whose re-inclusion macro is
  784. defined when we leave the header file for the first time. If the host
  785. supports it, we try to map suitably large files into memory, rather than
  786. reading them in directly.
  787. The include paths are internally stored on a null-terminated
  788. singly-linked list, starting with the '"header.h"' directory search
  789. chain, which then links into the '<header.h>' directory chain.
  790. Files included with the '<foo.h>' syntax start the lookup directly in
  791. the second half of this chain. However, files included with the
  792. '"foo.h"' syntax start at the beginning of the chain, but with one extra
  793. directory prepended. This is the directory of the current file; the one
  794. containing the '#include' directive. Prepending this directory on a
  795. per-file basis is handled by the function 'search_from'.
  796. Note that a header included with a directory component, such as
  797. '#include "mydir/foo.h"' and opened as '/usr/local/include/mydir/foo.h',
  798. will have the complete path minus the basename 'foo.h' as the current
  799. directory.
  800. Enough information is stored in the splay tree that CPP can
  801. immediately tell whether it can skip the header file because of the
  802. multiple include optimization, whether the file didn't exist or couldn't
  803. be opened for some reason, or whether the header was flagged not to be
  804. re-used, as it is with the obsolete '#import' directive.
  805. For the benefit of MS-DOS filesystems with an 8.3 filename
  806. limitation, CPP offers the ability to treat various include file names
  807. as aliases for the real header files with shorter names. The map from
  808. one to the other is found in a special file called 'header.gcc', stored
  809. in the command line (or system) include directories to which the mapping
  810. applies. This may be higher up the directory tree than the full path to
  811. the file minus the base name.
  812. 
  813. File: cppinternals.info, Node: Concept Index, Prev: Files, Up: Top
  814. Concept Index
  815. *************
  816. �[index�]
  817. * Menu:
  818. * assertions: Hash Nodes. (line 6)
  819. * controlling macros: Guard Macros. (line 6)
  820. * escaped newlines: Lexer. (line 5)
  821. * files: Files. (line 6)
  822. * guard macros: Guard Macros. (line 6)
  823. * hash table: Hash Nodes. (line 6)
  824. * header files: Conventions. (line 6)
  825. * identifiers: Hash Nodes. (line 6)
  826. * interface: Conventions. (line 6)
  827. * lexer: Lexer. (line 6)
  828. * line numbers: Line Numbering. (line 5)
  829. * macro expansion: Macro Expansion. (line 6)
  830. * macro representation (internal): Macro Expansion. (line 19)
  831. * macros: Hash Nodes. (line 6)
  832. * multiple-include optimization: Guard Macros. (line 6)
  833. * named operators: Hash Nodes. (line 6)
  834. * newlines: Lexer. (line 6)
  835. * paste avoidance: Token Spacing. (line 6)
  836. * spacing: Token Spacing. (line 6)
  837. * token run: Lexer. (line 191)
  838. * token spacing: Token Spacing. (line 6)
  839. 
  840. Tag Table:
  841. Node: Top905
  842. Node: Conventions2590
  843. Node: Lexer3532
  844. Ref: Invalid identifiers11446
  845. Ref: Lexing a line13396
  846. Node: Hash Nodes18165
  847. Node: Macro Expansion21044
  848. Node: Token Spacing29988
  849. Node: Line Numbering35844
  850. Node: Guard Macros39929
  851. Node: Files44720
  852. Node: Concept Index48186
  853. 
  854. End Tag Table