Branch: refs/heads/master Author: Colomban Wendling ban@herbesfolles.org Committer: Colomban Wendling ban@herbesfolles.org Date: Sun, 03 Aug 2014 21:24:33 UTC Commit: 35e8fbbe2886b2c5c82686f7e0435e5aa6aad32f https://github.com/geany/geany/commit/35e8fbbe2886b2c5c82686f7e0435e5aa6aad3...
Log Message: ----------- JavaScript: fix handling of various missing semicolons in loops
Modified Paths: -------------- tagmanager/ctags/js.c tests/ctags/1880687.js tests/ctags/1880687.js.tags
Modified: tagmanager/ctags/js.c 16 lines changed, 11 insertions(+), 5 deletions(-) =================================================================== @@ -709,7 +709,7 @@ static void parseSwitch (tokenInfo *const token)
}
-static void parseLoop (tokenInfo *const token) +static boolean parseLoop (tokenInfo *const token) { /* * Handles these statements @@ -732,6 +732,7 @@ static void parseLoop (tokenInfo *const token) * } * while (number<5); */ + boolean is_terminated = TRUE;
if (isKeyword (token, KEYWORD_for) || isKeyword (token, KEYWORD_while)) { @@ -758,7 +759,7 @@ static void parseLoop (tokenInfo *const token) } else { - parseLine(token, FALSE); + is_terminated = parseLine(token, FALSE); } } else if (isKeyword (token, KEYWORD_do)) @@ -777,10 +778,11 @@ static void parseLoop (tokenInfo *const token) } else { - parseLine(token, FALSE); + is_terminated = parseLine(token, FALSE); }
- readToken(token); + if (is_terminated) + readToken(token);
if (isKeyword (token, KEYWORD_while)) { @@ -794,8 +796,12 @@ static void parseLoop (tokenInfo *const token) */ skipArgumentList(token); } + if (! isType (token, TOKEN_SEMICOLON)) + is_terminated = FALSE; } } + + return is_terminated; }
static boolean parseIf (tokenInfo *const token) @@ -1654,7 +1660,7 @@ static boolean parseLine (tokenInfo *const token, boolean is_inside_class) case KEYWORD_for: case KEYWORD_while: case KEYWORD_do: - parseLoop (token); + is_terminated = parseLoop (token); break; case KEYWORD_if: case KEYWORD_else:
Modified: tests/ctags/1880687.js 53 lines changed, 52 insertions(+), 1 deletions(-) =================================================================== @@ -1,5 +1,5 @@
-// All these examples contain various forms of IF statements +// All these examples contain various forms of statements // with missing semicolons. Each of these are valid and must // be accommodated. // @@ -7,6 +7,9 @@ // The following tags should be generated: // functions // a +// aa +// aa_sub1 [aa] +// aa_sub2 [aa] // b // baz [f] // c @@ -32,6 +35,15 @@ // w // w_sub1 [w] // w_sub2 [w] +// x +// x_sub1 [x] +// x_sub2 [x] +// y +// y_sub1 [y] +// y_sub2 [y] +// z +// z_sub1 [z] +// z_sub2 [z] // classes // MyClass // methods @@ -189,3 +201,42 @@ MyClass = { var dummy5 = 42; } }; + +function x(){ + function x_sub1(){ + while (1) + x_sub2() + } + function x_sub2(){ + } +} + +function y(){ + function y_sub1(){ + while (1) { + y_sub2() + } + } + function y_sub2(){ + } +} + +function z(){ + function z_sub1(){ + do { + z_sub2() + } while (0) + } + function z_sub2(){ + } +} + +function aa(){ + function aa_sub1(){ + do + aa_sub2() + while (0) + } + function aa_sub2(){ + } +}
Modified: tests/ctags/1880687.js.tags 12 lines changed, 12 insertions(+), 0 deletions(-) =================================================================== @@ -3,6 +3,9 @@ MyClass MyClass_sub1�128�MyClass�0 MyClass_sub2�128�MyClass�0 a�16�0 +aa�16�0 +aa_sub1�16�aa�0 +aa_sub2�16�aa�0 b�16�0 baz�16�f�0 c�16�0 @@ -28,3 +31,12 @@ v w�16�0 w_sub1�16�w�0 w_sub2�16�w�0 +x�16�0 +x_sub1�16�x�0 +x_sub2�16�x�0 +y�16�0 +y_sub1�16�y�0 +y_sub2�16�y�0 +z�16�0 +z_sub1�16�z�0 +z_sub2�16�z�0
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).