[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kdev-ruby/gsoc] parser: Ruby lexer: increase the buffer size for heredoc strings and expressions in
From:       Alexander Dymo <adymo () kdevelop ! org>
Date:       2012-07-03 13:12:51
Message-ID: 20120703131251.53897A60A6 () git ! kde ! org
[Download RAW message or body]

Git commit 240f8ffd4c7a7ff4415dcb2d86e9d56624160b7c by Alexander Dymo.
Committed on 03/07/2012 at 15:11.
Pushed by dymo into branch 'gsoc'.

Ruby lexer: increase the buffer size for heredoc strings and expressions \
interpolated into strings. That buffer is currently quite large (will hold \
approx 2k of unicode strings).

The real fix would be buffers that get increased in size dynamically \
(realloc) similarly to how original ruby parser does.

M  +9    -5    parser/parser.y

http://commits.kde.org/kdev-ruby/240f8ffd4c7a7ff4415dcb2d86e9d56624160b7c

diff --git a/parser/parser.y b/parser/parser.y
index bb6a5c0..c846c37 100644
--- a/parser/parser.y
+++ b/parser/parser.y
@@ -34,8 +34,12 @@
 #include "parser.h"
 
 #define STACK_SIZE 128
-#define BSIZE STACK_SIZE
-
+/* buffer size for heredocs and code blocks inside strings
+   let's say it has place for about 2k lines of utf8-encoded
+   code for now */
+#define STRING_BSIZE 320000
+/* buffer size for other tokens that are not strings */
+#define TOK_BSIZE 128
 
 /* Flags used by the lexer */
 struct flags_t {
@@ -1697,7 +1701,7 @@ static int push_string_var(struct parser_t * p, int * \
curs, char ** ch, int oax)  int diff = *curs - p->cursor - oax + 2;
   struct pos_t tp = { p->line, p->line, p->column + diff, -1, 0 };
   int possible_error = *curs + 1;
-  char buffer[BSIZE];
+  char buffer[STRING_BSIZE];
   char * ptr = buffer;
   int step = 0; /* How many bytes the actual utf8 character has */
   int ax = 0; /* Used to properly update the column when utf8 chars appear \
*/ @@ -1731,7 +1735,7 @@ static int push_string_var(struct parser_t * p, \
int * curs, char ** ch, int oax)  
 static int parse_heredoc(struct parser_t * p, char * c, int * curs)
 {
-  char buffer[BSIZE], aux[BSIZE];
+  char buffer[STRING_BSIZE], aux[STRING_BSIZE];
   unsigned char quote_seen = 0, term = ' ';
   unsigned char dash_seen = 0;
   int i, l = 0, spaces = 0;
@@ -2162,7 +2166,7 @@ static int parse_re_options(struct parser_t *p, char \
*c, int curs)  static int parser_yylex(struct parser_t * parser)
 {
   int t = token_invalid;
-  char buffer[BSIZE];
+  char buffer[TOK_BSIZE];
   char * c;
   int curs, len;
   unsigned char space_seen = 0;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic