Lines Matching refs:pfile
103 check_output_buffer (cpp_reader *pfile, size_t n)
109 if (n > (size_t) (pfile->out.limit - pfile->out.cur))
111 size_t size = pfile->out.cur - pfile->out.base;
114 pfile->out.base = XRESIZEVEC (unsigned char, pfile->out.base, new_size);
115 pfile->out.limit = pfile->out.base + new_size;
116 pfile->out.cur = pfile->out.base + size;
121 PFILE->buffer->cur points to the initial asterisk of the comment,
124 PFILE->buffer->cur to the end of the buffer. */
126 skip_macro_block_comment (cpp_reader *pfile)
128 const uchar *cur = pfile->buffer->cur;
139 pfile->buffer->cur = cur - 1;
143 pfile->buffer->cur = cur;
152 to by pfile->out.cur, which must be of sufficient size.
154 the output. pfile->out.cur is updated depending upon IN_DEFINE,
155 -C, -CC and pfile->state.in_directive.
160 copy_comment (cpp_reader *pfile, const uchar *cur, int in_define)
163 location_t src_loc = pfile->line_table->highest_line;
164 cpp_buffer *buffer = pfile->buffer;
167 if (pfile->context->prev)
168 unterminated = skip_macro_block_comment (pfile);
170 unterminated = _cpp_skip_block_comment (pfile);
173 cpp_error_with_line (pfile, CPP_DL_ERROR, src_loc, 0,
179 if (pfile->state.in_directive)
183 if (CPP_OPTION (pfile, discard_comments_in_macro_exp))
184 pfile->out.cur--;
189 pfile->out.cur[-1] = ' ';
191 else if (CPP_OPTION (pfile, discard_comments))
192 pfile->out.cur--;
199 memcpy (pfile->out.cur, cur, len);
200 pfile->out.cur += len;
203 *pfile->out.cur++ = '*';
204 *pfile->out.cur++ = '/';
219 pfile->out.cur is updated.
224 skip_whitespace (cpp_reader *pfile, const uchar *cur, int skip_comments)
226 uchar *out = pfile->out.cur;
238 pfile->out.cur = out;
239 cur = copy_comment (pfile, cur, false /* in_define */);
240 out = pfile->out.cur;
248 pfile->out.cur = out;
256 lex_identifier (cpp_reader *pfile, const uchar *cur)
259 uchar *out = pfile->out.cur;
266 CUR (pfile->context) = cur;
267 len = out - pfile->out.cur;
268 result = CPP_HASHNODE (ht_lookup (pfile->hash_table, pfile->out.cur,
270 pfile->out.cur = out;
278 _cpp_overlay_buffer (cpp_reader *pfile, const uchar *start, size_t len)
280 cpp_buffer *buffer = pfile->buffer;
282 pfile->overlaid_buffer = buffer;
283 pfile->saved_cur = buffer->cur;
284 pfile->saved_rlimit = buffer->rlimit;
285 pfile->saved_line_base = buffer->next_line;
295 _cpp_remove_overlay (cpp_reader *pfile)
297 cpp_buffer *buffer = pfile->overlaid_buffer;
299 buffer->cur = pfile->saved_cur;
300 buffer->rlimit = pfile->saved_rlimit;
301 buffer->line_base = pfile->saved_line_base;
304 pfile->overlaid_buffer = NULL;
310 _cpp_read_logical_line_trad (cpp_reader *pfile)
314 if (pfile->buffer->need_line && !_cpp_get_fresh_line (pfile))
317 _cpp_pop_buffer (pfile);
321 while (!_cpp_scan_out_logical_line (pfile, NULL, false)
322 || pfile->state.skipping);
324 return pfile->buffer != NULL;
343 maybe_start_funlike (cpp_reader *pfile, cpp_hashnode *node, const uchar *start,
353 _cpp_release_buff (pfile, macro->buff);
354 macro->buff = _cpp_get_buff (pfile, (n + 1) * sizeof (size_t));
357 macro->offset = start - pfile->out.base;
382 _cpp_scan_out_logical_line (cpp_reader *pfile, cpp_macro *macro,
404 header_ok = pfile->state.angled_headers;
405 CUR (pfile->context) = pfile->buffer->cur;
406 RLIMIT (pfile->context) = pfile->buffer->rlimit;
409 pfile->out.cur = pfile->out.base;
410 pfile->out.first_line = pfile->line_table->highest_line;
414 start_of_input_line = pfile->buffer->cur;
416 context = pfile->context;
418 check_output_buffer (pfile, RLIMIT (context) - cur);
419 out = pfile->out.cur;
425 && cur >= pfile->buffer->notes[pfile->buffer->cur_note].pos)
427 pfile->buffer->cur = cur;
428 _cpp_process_line_notes (pfile, false);
448 pfile->out.cur = out - 1;
449 _cpp_pop_context (pfile);
454 pfile->out.cur = out - 1;
455 pfile->buffer->cur = cur;
458 pfile->buffer->need_line = true;
459 CPP_INCREMENT_LINE (pfile, 0);
462 && !pfile->state.in_directive
463 && _cpp_get_fresh_line (pfile))
469 cur = pfile->buffer->cur;
502 pfile->out.cur = out;
503 cur = copy_comment (pfile, cur, macro != 0);
504 out = pfile->out.cur;
520 if (!pfile->state.skipping && (quote == 0 || macro))
525 pfile->out.cur = out_start;
526 node = lex_identifier (pfile, cur - 1);
527 out = pfile->out.cur;
533 && !pfile->state.prevent_expansion)
536 pfile->mi_valid = false;
539 maybe_start_funlike (pfile, node, out_start, &fmacro);
541 fmacro.line = pfile->line_table->highest_line;
544 else if (!recursive_macro (pfile, node))
548 pfile->out.cur = out_start;
549 push_replacement_text (pfile, node);
558 pfile->out.cur = out_start;
559 save_replacement_text (pfile
560 out = pfile->out.base;
567 else if (pfile->state.in_expression
568 && node == pfile->spec_nodes.n_defined)
582 if (recursive_macro (pfile, fmacro.node))
588 out = pfile->out.base + fmacro.offset;
601 save_argument (&fmacro, out - pfile->out.base);
631 save_argument (&fmacro, out - pfile->out.base);
635 if (_cpp_arguments_ok (pfile, &m, fmacro.node,
643 pfile->out.cur = pfile->out.base + fmacro.offset;
645 buf = _cpp_unaligned_alloc (pfile, len + 2);
647 memcpy (buf + 1, pfile->out.base + fmacro.args[0],
652 const unsigned char *saved_cur = pfile->buffer->cur;
654 = pfile->buffer->rlimit;
656 = pfile->buffer->line_base;
657 bool saved_need_line = pfile->buffer->need_line;
659 = pfile->overlaid_buffer;
660 pfile->buffer->cur = buf;
661 pfile->buffer->line_base = buf;
662 pfile->buffer->rlimit = buf + len + 1;
663 pfile->buffer->need_line = false;
664 pfile->overlaid_buffer = pfile->buffer;
665 bool saved_in_directive = pfile->state.in_directive;
666 pfile->state.in_directive = true;
670 _cpp_scan_out_logical_line (pfile, NULL, true);
672 pfile->state.in_directive = saved_in_directive;
673 check_output_buffer (pfile, 1);
674 *pfile->out.cur = '\n';
675 pfile->buffer->cur = pfile->out.base + fmacro.offset;
676 pfile->buffer->line_base = pfile->buffer->cur;
677 pfile->buffer->rlimit = pfile->out.cur;
678 CUR (context) = pfile->buffer->cur;
679 RLIMIT (context) = pfile->buffer->rlimit;
681 pfile->state.prevent_expansion++;
683 = _cpp_builtin_macro_text (pfile, fmacro.node);
684 pfile->state.prevent_expansion--;
687 pfile->buffer->cur = saved_cur;
688 pfile->buffer->rlimit = saved_rlimit;
689 pfile->buffer->line_base = saved_line_base;
690 pfile->buffer->need_line = saved_need_line;
691 pfile->overlaid_buffer = saved_overlaid_buffer;
692 pfile->out.cur = pfile->out.base + fmacro.offset;
696 buf = _cpp_unaligned_alloc (pfile, len + 1);
700 _cpp_push_text_context (pfile, fmacro.node,
711 save_argument (&fmacro, out - pfile->out.base);
716 && out == pfile->out.base + fmacro.offset + 1)
719 if (_cpp_arguments_ok (pfile, m, fmacro.node, fmacro.argc))
723 pfile->out.cur = pfile->out.base + fmacro.offset;
725 replace_args_and_push (pfile, &fmacro);
737 && !pfile->context->prev
738 && !pfile->state.in_directive)
746 pfile->out.cur = out;
747 cur = skip_whitespace (pfile, cur, true /* skip_comments */);
748 out = pfile->out.cur;
754 pfile->buffer->need_line = true;
755 CPP_INCREMENT_LINE (pfile, 0);
764 && CPP_OPTION (pfile, lang) != CLK_ASM)
769 do_it = lex_identifier (pfile, cur)->is_directive;
771 if (do_it || CPP_OPTION (pfile, lang) != CLK_ASM)
775 pfile->buffer->cur = cur;
776 _cpp_handle_directive (pfile, false /* indented */);
783 if (pfile->state.in_expression)
797 if (!pfile->state.in_directive)
798 pfile->mi_valid = false;
818 _cpp_release_buff (pfile, fmacro.buff);
821 cpp_error_with_line (pfile, CPP_DL_ERROR, fmacro.line, 0,
831 push_replacement_text (cpp_reader *pfile, cpp_hashnode *node)
839 text = _cpp_builtin_macro_text (pfile, node);
841 buf = _cpp_unaligned_alloc (pfile, len + 1);
854 _cpp_push_text_context (pfile, node, text, len);
859 recursive_macro (cpp_reader *pfile, cpp_hashnode *node)
876 cpp_context *context = pfile->context;
890 cpp_error (pfile, CPP_DL_ERROR,
964 replace_args_and_push (cpp_reader *pfile, struct fun_macro *fmacro)
969 push_replacement_text (pfile, fmacro->node);
994 buff = _cpp_get_buff (pfile, len + 1);
1022 base = pfile->out.base + fmacro->args[b->arg_index - 1];
1065 _cpp_push_text_context (pfile, fmacro->node, BUFF_FRONT (buff), len);
1068 pfile->context->buff = buff;
1073 definition. Destroys pfile->out.cur.
1076 duplicate parameter). On success, CUR (pfile->context) is just
1079 scan_parameters (cpp_reader *pfile, unsigned *n_ptr)
1081 const uchar *cur = CUR (pfile->context) + 1;
1087 cur = skip_whitespace (pfile, cur, true /* skip_comments */);
1091 struct cpp_hashnode *id = lex_identifier (pfile, cur);
1093 if (!_cpp_save_parameter (pfile, nparms, id, id))
1096 cur = skip_whitespace (pfile, CUR (pfile->context),
1114 cpp_error (pfile, CPP_DL_ERROR, "syntax error in macro parameter list");
1116 CUR (pfile->context) = cur + (*cur == ')');
1121 /* Save the text from pfile->out.base to pfile->out.cur as
1126 save_replacement_text (cpp_reader *pfile, cpp_macro *macro,
1129 size_t len = pfile->out.cur - pfile->out.base;
1136 exp = _cpp_unaligned_alloc (pfile, len + 1);
1137 memcpy (exp, pfile->out.base, len);
1149 if (macro->count + blen > BUFF_ROOM (pfile->a_buff))
1150 _cpp_extend_buff (pfile, &pfile->a_buff, macro->count + blen);
1152 exp = BUFF_FRONT (pfile->a_buff);
1159 memcpy (block->text, pfile->out.base, len);
1162 pfile->out.cur = pfile->out.base;
1168 BUFF_FRONT (pfile->a_buff) += macro->count;
1175 _cpp_create_trad_definition (cpp_reader *pfile)
1179 cpp_context *context = pfile->context;
1186 pfile->out.cur = pfile->out.base;
1187 CUR (context) = pfile->buffer->cur;
1188 RLIMIT (context) = pfile->buffer->rlimit;
1189 check_output_buffer (pfile, RLIMIT (context) - CUR (context));
1195 if (scan_parameters (pfile, &nparms))
1197 (pfile, sizeof (cpp_hashnode *) * nparms);
1206 macro = _cpp_new_macro (pfile, cmk_traditional,
1207 _cpp_aligned_alloc (pfile, sizeof (cpp_macro)));
1214 pfile->buffer->cur
1215 = skip_whitespace (pfile, CUR (context),
1216 CPP_OPTION (pfile, discard_comments_in_macro_exp));
1218 pfile->state.prevent_expansion++;
1219 _cpp_scan_out_logical_line (pfile, macro, false);
1220 pfile->state.prevent_expansion--;
1222 _cpp_unsave_parameters (pfile, nparms);
1227 cur = pfile->out.base;
1228 limit = pfile->out.cur;
1231 pfile->out.cur = limit;
1232 save_replacement_text (pfile, macro, 0);