3 * Copyright (c) 2016, Red Hat, Inc.
4 * Copyright (c) 2016, Masatake YAMATO
6 * Author: Masatake YAMATO <yamato@redhat.com>
8 * This source code is released for free distribution under the terms of the
9 * GNU General Public License version 2 or (at your option) any later version.
21 unsigned long startLine
;
23 unsigned long endLine
;
25 unsigned long sourceLineOffset
;
28 static struct promise
*promises
;
29 static int promise_count
;
30 static int promise_allocated
;
32 int makePromise (const char *parser
,
33 unsigned long startLine
, int startCharOffset
,
34 unsigned long endLine
, int endCharOffset
,
35 unsigned long sourceLineOffset
)
43 if (!isXtagEnabled (XTAG_TAGS_GENERATED_BY_SUB_PARSERS))
48 lang
= getNamedLanguage (parser
, 0);
49 if (lang
== LANG_IGNORE
)
52 if ( promise_count
== promise_allocated
)
54 size_t c
= promise_allocated
? (promise_allocated
* 2): 8;
55 promises
= xRealloc (promises
, c
, struct promise
);
56 promise_allocated
= c
;
59 p
= promises
+ promise_count
;
62 p
->startLine
= startLine
;
63 p
->startCharOffset
= startCharOffset
;
65 p
->endCharOffset
= endCharOffset
;
66 p
->sourceLineOffset
= sourceLineOffset
;
73 void breakPromisesAfter (int promise
)
75 Assert (promise_count
>= promise
);
77 promise_count
= promise
;
80 bool forcePromises (void)
83 bool tagFileResized
= false;
85 for (i
= 0; i
< promise_count
; ++i
)
87 struct promise
*p
= promises
+ i
;
88 tagFileResized
= runParserInNarrowedInputStream (p
->lang
,
99 return tagFileResized
;
103 int getLastPromise (void)
105 return promise_count
- 1;