summaryrefslogtreecommitdiff
path: root/vala/valageniescanner.vala
diff options
context:
space:
mode:
authorJamie McCracken <jamiemcc gnome org>2010-01-05 18:25:03 -0500
committerJamie McCracken <jamiemcc gnome org>2010-01-05 19:47:02 -0500
commitc2cb6ff6a3be10be012a3ed7baaf5bab8601e679 (patch)
treef8fecbff5b4aa58f2e8e56b9fbb620dedae85352 /vala/valageniescanner.vala
parente4dd9179d58a83e88fe7d719fbe42790db6e2d0e (diff)
downloadvala-c2cb6ff6a3be10be012a3ed7baaf5bab8601e679.tar.gz
Genie: support automatic line continuations
Diffstat (limited to 'vala/valageniescanner.vala')
-rw-r--r--vala/valageniescanner.vala22
1 files changed, 21 insertions, 1 deletions
diff --git a/vala/valageniescanner.vala b/vala/valageniescanner.vala
index b9b023824..4bcdb5bf0 100644
--- a/vala/valageniescanner.vala
+++ b/vala/valageniescanner.vala
@@ -41,6 +41,10 @@ public class Vala.Genie.Scanner {
int current_indent_level;
int indent_level;
int pending_dedents;
+
+ /* track open parens and braces for automatic line continuations */
+ int open_parens_count;
+ int open_brace_count;
TokenType last_token;
bool parse_started;
@@ -69,6 +73,9 @@ public class Vala.Genie.Scanner {
current_indent_level = 0;
indent_level = 0;
pending_dedents = 0;
+
+ open_parens_count = 0;
+ open_brace_count = 0;
parse_started = false;
last_token = TokenType.NONE;
@@ -482,12 +489,21 @@ public class Vala.Genie.Scanner {
space ();
}
- /* handle line continuation (lines ending with \) */
+
+ /* handle explicit line continuation (lines ending with "\") */
while (current < end && current[0] == '\\' && current[1] == '\n') {
current += 2;
line++;
skip_space_tabs ();
}
+
+ /* handle automatic line continuations (when inside parens or braces) */
+ while (current < end && current[0] == '\n' && (open_parens_count > 0 || open_brace_count > 0)) {
+ current++;
+ line++;
+ skip_space_tabs ();
+ }
+
/* handle non-consecutive new line once parsing is underway - EOL */
if (newline () && parse_started && last_token != TokenType.EOL && last_token != TokenType.SEMICOLON) {
@@ -638,18 +654,22 @@ public class Vala.Genie.Scanner {
switch (current[0]) {
case '{':
type = TokenType.OPEN_BRACE;
+ open_brace_count++;
current++;
break;
case '}':
type = TokenType.CLOSE_BRACE;
+ open_brace_count--;
current++;
break;
case '(':
type = TokenType.OPEN_PARENS;
+ open_parens_count++;
current++;
break;
case ')':
type = TokenType.CLOSE_PARENS;
+ open_parens_count--;
current++;
break;
case '[':