[geany/geany] 7e6215: javascript: Fix handling some class-related unterminated statements
Colomban Wendling
git-noreply at xxxxx
Mon Nov 24 01:43:29 UTC 2014
Branch: refs/heads/master
Author: Colomban Wendling <ban at herbesfolles.org>
Committer: Colomban Wendling <ban at herbesfolles.org>
Date: Mon, 24 Nov 2014 01:43:29 UTC
Commit: 7e6215661e64475a891921848149bd12a57c8a65
https://github.com/geany/geany/commit/7e6215661e64475a891921848149bd12a57c8a65
Log Message:
-----------
javascript: Fix handling some class-related unterminated statements
Modified Paths:
--------------
tagmanager/ctags/js.c
tests/ctags/Makefile.am
tests/ctags/js-class-related-unterminated.js
tests/ctags/js-class-related-unterminated.js.tags
Modified: tagmanager/ctags/js.c
11 lines changed, 7 insertions(+), 4 deletions(-)
===================================================================
@@ -967,7 +967,7 @@ static boolean parseBlock (tokenInfo *const token, tokenInfo *const orig_parent)
* Ignore the remainder of the line
* findCmdTerm(token);
*/
- parseLine (token, is_class);
+ read_next_token = parseLine (token, is_class);
vStringCopy(token->scope, saveScope);
}
@@ -979,7 +979,7 @@ static boolean parseBlock (tokenInfo *const token, tokenInfo *const orig_parent)
*/
vStringCopy(saveScope, token->scope);
addToScope (token, parent->string);
- parseLine (token, is_class);
+ read_next_token = parseLine (token, is_class);
vStringCopy(token->scope, saveScope);
}
else if (isKeyword (token, KEYWORD_function))
@@ -1287,9 +1287,12 @@ static boolean parseStatement (tokenInfo *const token, boolean is_inside_class)
}
if ( isType (method_body_token, TOKEN_OPEN_CURLY))
+ {
parseBlock (method_body_token, token);
-
- is_terminated = TRUE;
+ is_terminated = TRUE;
+ }
+ else
+ is_terminated = isType (method_body_token, TOKEN_SEMICOLON);
goto cleanUp;
}
}
Modified: tests/ctags/Makefile.am
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -159,6 +159,7 @@ test_sources = \
intro.tex \
invalid_name.f90 \
java_enum.java \
+ js-class-related-unterminated.js \
js-scope.js \
js-unknown-construct-nesting.js \
jsFunc_tutorial.js \
Modified: tests/ctags/js-class-related-unterminated.js
50 lines changed, 50 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,50 @@
+
+var Cls = {
+ // add a member just so Cls is recognized as a class from the start
+ A: {}
+}
+
+Cls.B = function(a, b) {
+ this.a = a;
+ this.b = b;
+}
+
+Cls.B.Sub = function() {
+ this.a = 0
+}
+
+Cls.B.prototype.m1 = function(a) {
+ this.a = a;
+ if (a > 2) {
+ this.a *= 2
+ }
+}
+Cls.B.prototype.m2 = function(b) {
+ var a = b
+}
+Cls.B.prototype.m3 = function(c) {
+ this.c = c
+}
+Cls.B.prototype.m4 = function(d) {
+ this.d = d
+}
+Cls.B.prototype.m5 = function(e) {
+ /* this should rather be written `Cls.B.Sub.prototype.dyn1 = this.m6`, but
+ * then parser then thinks it's a child of this very scope. it isn't really
+ * possible to fix this as the only reason it's actually not a child of the
+ * current scope is because it exists in the root scope but not in this one */
+ var Sub = Cls.B.Sub;
+ Sub.prototype.dyn1 = this.m4
+}
+Cls.B.prototype.m6 = function(f) {
+}
+
+function main() {
+ var c = new Cls.B(1, 2);
+ var d = new Cls.B.Sub();
+ print(d.dyn1);
+ c.m5();
+ print(d.dyn1);
+}
+
+main();
Modified: tests/ctags/js-class-related-unterminated.js.tags
13 lines changed, 13 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,13 @@
+# format=tagmanager
+A�64�Cls�0
+B�1�Cls�0
+Cls�1�0
+Sub�1�Cls.B�0
+dyn1�128�Cls.B.Sub�0
+m1�128�Cls.B�0
+m2�128�Cls.B�0
+m3�128�Cls.B�0
+m4�128�Cls.B�0
+m5�128�Cls.B�0
+m6�128�Cls.B�0
+main�16�0
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Commits
mailing list