]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Support newlines in double quoted string literals
authorJürg Billeter <j@bitron.ch>
Tue, 29 Jun 2010 20:52:54 +0000 (22:52 +0200)
committerJürg Billeter <j@bitron.ch>
Tue, 29 Jun 2010 20:52:54 +0000 (22:52 +0200)
codegen/valaccodebasemodule.vala
vala/valascanner.vala

index 66141079e472a0212d234ea77496e57a98e80874..4e540571a307b225fbebbe28325a2f9698a73e65 100644 (file)
@@ -3506,7 +3506,7 @@ public class Vala.CCodeBaseModule : CCodeModule {
        }
 
        public override void visit_string_literal (StringLiteral expr) {
-               expr.ccodenode = new CCodeConstant.string (expr.value);
+               expr.ccodenode = new CCodeConstant.string (expr.value.replace ("\n", "\\n"));
        }
 
        public override void visit_regex_literal (RegexLiteral expr) {
index 19b1e09f2bc0ae51cbbd9f0141b444f772306b35..30f24dfc24e78642cce55f59128aefa9840fb0ab 100644 (file)
@@ -706,7 +706,10 @@ public class Vala.Scanner {
                                                        break;
                                                }
                                        } else if (current[0] == '\n') {
-                                               break;
+                                               current++;
+                                               line++;
+                                               column = 1;
+                                               token_length_in_chars = 1;
                                        } else {
                                                unichar u = ((string) current).get_char_validated ((long) (end - current));
                                                if (u != (unichar) (-1)) {
@@ -718,7 +721,7 @@ public class Vala.Scanner {
                                                }
                                        }
                                }
-                               if (current >= end || current[0] == '\n') {
+                               if (current >= end) {
                                        Report.error (new SourceReference (source_file, line, column + token_length_in_chars, line, column + token_length_in_chars), "syntax error, expected \"");
                                        state_stack.length--;
                                        return read_token (out token_begin, out token_end);
@@ -1129,7 +1132,10 @@ public class Vala.Scanner {
                                                        break;
                                                }
                                        } else if (current[0] == '\n') {
-                                               break;
+                                               current++;
+                                               line++;
+                                               column = 1;
+                                               token_length_in_chars = 1;
                                        } else {
                                                if (type == TokenType.STRING_LITERAL && source_file.context.profile == Profile.DOVA && current[0] == '$') {
                                                        // string template
@@ -1148,7 +1154,7 @@ public class Vala.Scanner {
                                                }
                                        }
                                }
-                               if (current < end && current[0] != '\n') {
+                               if (current < end) {
                                        current++;
                                } else {
                                        Report.error (new SourceReference (source_file, line, column + token_length_in_chars, line, column + token_length_in_chars), "syntax error, expected %c".printf (begin[0]));