Lines Matching defs:lex

9 /* $Id: lex.c,v 1.86 2007/09/17 09:56:29 shane Exp $ */
21 #include <isc/lex.h>
65 grow_data(isc_lex_t *lex, size_t *remainingp, char **currp, char **prevp) {
68 tmp = isc_mem_get(lex->mctx, lex->max_token * 2 + 1);
71 memmove(tmp, lex->data, lex->max_token + 1);
72 *currp = tmp + (*currp - lex->data);
74 *prevp = tmp + (*prevp - lex->data);
75 isc_mem_put(lex->mctx, lex->data, lex->max_token + 1);
76 lex->data = tmp;
77 *remainingp += lex->max_token;
78 lex->max_token *= 2;
84 isc_lex_t *lex;
94 lex = isc_mem_get(mctx, sizeof(*lex));
95 if (lex == NULL)
97 lex->data = isc_mem_get(mctx, max_token + 1);
98 if (lex->data == NULL) {
99 isc_mem_put(mctx, lex, sizeof(*lex));
102 lex->mctx = mctx;
103 lex->max_token = max_token;
104 lex->comments = 0;
105 lex->comment_ok = ISC_TRUE;
106 lex->last_was_eol = ISC_TRUE;
107 lex->brace_count = 0;
108 lex->paren_count = 0;
109 lex->saved_paren_count = 0;
110 memset(lex->specials, 0, 256);
111 INIT_LIST(lex->sources);
112 lex->magic = LEX_MAGIC;
114 *lexp = lex;
121 isc_lex_t *lex;
128 lex = *lexp;
129 REQUIRE(VALID_LEX(lex));
131 while (!EMPTY(lex->sources))
132 RUNTIME_CHECK(isc_lex_close(lex) == ISC_R_SUCCESS);
133 if (lex->data != NULL)
134 isc_mem_put(lex->mctx, lex->data, lex->max_token + 1);
135 lex->magic = 0;
136 isc_mem_put(lex->mctx, lex, sizeof(*lex));
142 isc_lex_getcomments(isc_lex_t *lex) {
147 REQUIRE(VALID_LEX(lex));
149 return (lex->comments);
153 isc_lex_setcomments(isc_lex_t *lex, unsigned int comments) {
158 REQUIRE(VALID_LEX(lex));
160 lex->comments = comments;
164 isc_lex_getspecials(isc_lex_t *lex, isc_lexspecials_t specials) {
169 REQUIRE(VALID_LEX(lex));
171 memmove(specials, lex->specials, 256);
175 isc_lex_setspecials(isc_lex_t *lex, isc_lexspecials_t specials) {
181 REQUIRE(VALID_LEX(lex));
183 memmove(lex->specials, specials, 256);
187 new_source(isc_lex_t *lex, isc_boolean_t is_file, isc_boolean_t need_close,
193 source = isc_mem_get(lex->mctx, sizeof(*source));
200 source->last_was_eol = lex->last_was_eol;
202 source->name = isc_mem_strdup(lex->mctx, name);
204 isc_mem_put(lex->mctx, source, sizeof(*source));
208 result = isc_buffer_allocate(lex->mctx, &source->pushback,
209 (unsigned int)lex->max_token);
211 isc_mem_free(lex->mctx, source->name);
212 isc_mem_put(lex->mctx, source, sizeof(*source));
217 ISC_LIST_INITANDPREPEND(lex->sources, source, link);
223 isc_lex_openfile(isc_lex_t *lex, const char *filename) {
228 * Open 'filename' and make it the current input source for 'lex'.
231 REQUIRE(VALID_LEX(lex));
237 result = new_source(lex, ISC_TRUE, ISC_TRUE, stream, filename);
244 isc_lex_openstream(isc_lex_t *lex, FILE *stream) {
248 * Make 'stream' the current input source for 'lex'.
251 REQUIRE(VALID_LEX(lex));
255 return (new_source(lex, ISC_TRUE, ISC_FALSE, stream, name));
259 isc_lex_openbuffer(isc_lex_t *lex, isc_buffer_t *buffer) {
263 * Make 'buffer' the current input source for 'lex'.
266 REQUIRE(VALID_LEX(lex));
270 return (new_source(lex, ISC_FALSE, ISC_FALSE, buffer, name));
274 isc_lex_close(isc_lex_t *lex) {
281 REQUIRE(VALID_LEX(lex));
283 source = HEAD(lex->sources);
287 ISC_LIST_UNLINK(lex->sources, source, link);
288 lex->last_was_eol = source->last_was_eol;
293 isc_mem_free(lex->mctx, source->name);
295 isc_mem_put(lex->mctx, source, sizeof(*source));
328 pushandgrow(isc_lex_t *lex, inputsource *source, int c) {
336 result = isc_buffer_allocate(lex->mctx, &tbuf, oldlen * 2);
351 isc_lex_gettoken(isc_lex_t *lex, unsigned int options, isc_token_t *tokenp) {
371 REQUIRE(VALID_LEX(lex));
372 source = HEAD(lex->sources);
386 lex->saved_paren_count = lex->paren_count;
393 lex->paren_count != 0)
395 lex->paren_count = 0;
399 lex->brace_count != 0)
401 lex->brace_count = 0;
414 if ((options & ISC_LEXOPT_DNSMULTILINE) != 0 && lex->paren_count > 0)
417 curr = lex->data;
421 remaining = lex->max_token;
459 source->result = pushandgrow(lex, source, c);
480 if (lex->comment_ok && !no_comments) {
482 ((lex->comments & ISC_LEXCOMMENT_DNSMASTERFILE)
489 (lex->comments &
497 ((lex->comments & ISC_LEXCOMMENT_SHELL)
511 lex->last_was_eol = ISC_FALSE;
513 lex->paren_count != 0) {
514 lex->paren_count = 0;
519 lex->brace_count != 0) {
520 lex->brace_count = 0;
531 if (lex->last_was_eol &&
534 lex->last_was_eol = ISC_FALSE;
544 lex->last_was_eol = ISC_TRUE;
550 lex->last_was_eol = ISC_FALSE;
553 } else if (lex->specials[c]) {
554 lex->last_was_eol = ISC_FALSE;
559 if (lex->paren_count == 0)
561 lex->paren_count++;
563 if (lex->paren_count == 0) {
568 lex->paren_count--;
569 if (lex->paren_count == 0)
576 if (lex->brace_count != 0) {
580 lex->brace_count++;
591 lex->last_was_eol = ISC_FALSE;
599 lex->last_was_eol = ISC_FALSE;
609 lex->last_was_eol = ISC_TRUE;
615 lex->specials[c]) {
626 lex->data,
640 lex->data;
643 (lex->max_token -
651 (curr != &lex->data[1]) ||
652 (lex->data[0] != '0'))) {
661 result = grow_data(lex, &remaining,
673 * EOF needs to be checked before lex->specials[c]
674 * as lex->specials[EOF] is not a good idea.
678 (c == ' ' || c == '\t' || lex->specials[c]))) {
685 tokenp->value.as_textregion.base = lex->data;
688 (lex->max_token - remaining);
696 result = grow_data(lex, &remaining,
708 (lex->comments & ISC_LEXCOMMENT_C) != 0) {
712 (lex->comments & ISC_LEXCOMMENT_CPLUSPLUS) != 0) {
771 lex->data;
774 (lex->max_token - remaining);
790 result = grow_data(lex, &remaining,
811 lex->brace_count++;
817 INSIST(lex->brace_count > 0);
818 lex->brace_count--;
821 if (lex->brace_count == 0) {
824 lex->data;
826 (unsigned int) (lex->max_token -
840 result = grow_data(lex, &remaining,
872 isc_lex_getmastertoken(isc_lex_t *lex, isc_token_t *token,
883 result = isc_lex_gettoken(lex, options, token);
885 isc_lex_ungettoken(lex, token);
896 isc_lex_ungettoken(lex, token);
908 isc_lex_getoctaltoken(isc_lex_t *lex, isc_token_t *token, isc_boolean_t eol)
915 result = isc_lex_gettoken(lex, options, token);
917 isc_lex_ungettoken(lex, token);
925 isc_lex_ungettoken(lex, token);
935 isc_lex_ungettoken(isc_lex_t *lex, isc_token_t *tokenp) {
941 REQUIRE(VALID_LEX(lex));
942 source = HEAD(lex->sources);
951 lex->paren_count = lex->saved_paren_count;
957 isc_lex_getlasttokentext(isc_lex_t *lex, isc_token_t *tokenp, isc_region_t *r)
961 REQUIRE(VALID_LEX(lex));
962 source = HEAD(lex->sources);
978 isc_lex_getsourcename(isc_lex_t *lex) {
981 REQUIRE(VALID_LEX(lex));
982 source = HEAD(lex->sources);
991 isc_lex_getsourceline(isc_lex_t *lex) {
994 REQUIRE(VALID_LEX(lex));
995 source = HEAD(lex->sources);
1004 isc_lex_setsourcename(isc_lex_t *lex, const char *name) {
1008 REQUIRE(VALID_LEX(lex));
1009 source = HEAD(lex->sources);
1013 newname = isc_mem_strdup(lex->mctx, name);
1016 isc_mem_free(lex->mctx, source->name);
1022 isc_lex_setsourceline(isc_lex_t *lex, unsigned long line) {
1025 REQUIRE(VALID_LEX(lex));
1026 source = HEAD(lex->sources);
1036 isc_lex_isfile(isc_lex_t *lex) {
1039 REQUIRE(VALID_LEX(lex));
1041 source = HEAD(lex->sources);