summaryrefslogtreecommitdiff
path: root/src/syntax.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2008-01-13 16:40:19 +0000
committerBram Moolenaar <Bram@vim.org>2008-01-13 16:40:19 +0000
commitdbe31750492f3f34e4f12b76d944a9420e939c23 (patch)
tree0cdbb5fc783104ec003f4b91f9835e96b696f599 /src/syntax.c
parent332fa0c55acb78cf5123a0f083fa8ba470294130 (diff)
downloadvim-dbe31750492f3f34e4f12b76d944a9420e939c23.zip
updated for version 7.1-227
Diffstat (limited to 'src/syntax.c')
-rw-r--r--src/syntax.c25
1 files changed, 12 insertions, 13 deletions
diff --git a/src/syntax.c b/src/syntax.c
index bc9f0324c..5c2d1e4e9 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -372,7 +372,7 @@ static void syn_stack_alloc __ARGS((void));
static int syn_stack_cleanup __ARGS((void));
static void syn_stack_free_entry __ARGS((buf_T *buf, synstate_T *p));
static synstate_T *syn_stack_find_entry __ARGS((linenr_T lnum));
-static synstate_T *store_current_state __ARGS((synstate_T *sp));
+static synstate_T *store_current_state __ARGS((void));
static void load_current_state __ARGS((synstate_T *from));
static void invalidate_current_state __ARGS((void));
static int syn_stack_equal __ARGS((synstate_T *sp));
@@ -464,7 +464,7 @@ syntax_start(wp, lnum)
synstate_T *p;
synstate_T *last_valid = NULL;
synstate_T *last_min_valid = NULL;
- synstate_T *sp, *prev;
+ synstate_T *sp, *prev = NULL;
linenr_T parsed_lnum;
linenr_T first_stored;
int dist;
@@ -502,7 +502,7 @@ syntax_start(wp, lnum)
if (!current_state_stored)
{
++current_lnum;
- (void)store_current_state(NULL);
+ (void)store_current_state();
}
/*
@@ -558,7 +558,6 @@ syntax_start(wp, lnum)
dist = 999999;
else
dist = syn_buf->b_ml.ml_line_count / (syn_buf->b_sst_len - Rows) + 1;
- prev = syn_stack_find_entry(current_lnum);
while (current_lnum < lnum)
{
syn_start_line();
@@ -573,9 +572,13 @@ syntax_start(wp, lnum)
* equal to the current state. If so, then validate all saved
* states that depended on a change before the parsed line. */
if (prev == NULL)
+ prev = syn_stack_find_entry(current_lnum - 1);
+ if (prev == NULL)
sp = syn_buf->b_sst_first;
else
- sp = prev->sst_next;
+ sp = prev;
+ while (sp != NULL && sp->sst_lnum < current_lnum)
+ sp = sp->sst_next;
if (sp != NULL
&& sp->sst_lnum == current_lnum
&& syn_stack_equal(sp))
@@ -601,7 +604,7 @@ syntax_start(wp, lnum)
else if (prev == NULL
|| current_lnum == lnum
|| current_lnum >= prev->sst_lnum + dist)
- prev = store_current_state(prev);
+ prev = store_current_state();
}
/* This can take a long time: break when CTRL-C pressed. The current
@@ -1353,17 +1356,13 @@ syn_stack_find_entry(lnum)
* The current state must be valid for the start of the current_lnum line!
*/
static synstate_T *
-store_current_state(sp)
- synstate_T *sp; /* at or before where state is to be saved or
- NULL */
+store_current_state()
{
int i;
synstate_T *p;
bufstate_T *bp;
stateitem_T *cur_si;
-
- if (sp == NULL)
- sp = syn_stack_find_entry(current_lnum);
+ synstate_T *sp = syn_stack_find_entry(current_lnum);
/*
* If the current state contains a start or end pattern that continues
@@ -1667,7 +1666,7 @@ syntax_check_changed(lnum)
* Store the current state in b_sst_array[] for later use.
*/
++current_lnum;
- (void)store_current_state(NULL);
+ (void)store_current_state();
}
}