Memory leak patrol and minor cleanups.
[pspp-builds.git] / src / language / control / repeat.c
index 200b6bce80dd307dcc07a08ae01c0cd6a2614b50..286cc347098e397c40ce587b346ab5922d494a2e 100644 (file)
@@ -139,7 +139,7 @@ cmd_do_repeat (struct lexer *lexer, struct dataset *ds)
   block->parent.location = do_repeat_location;
 
   if (!ll_is_empty (&block->lines))
-    getl_include_source (&block->parent);
+    getl_include_source (lex_get_source_stream (lexer), &block->parent);
   else
     pool_destroy (block->pool);
 
@@ -310,8 +310,8 @@ parse_lines (struct lexer *lexer, struct repeat_block *block)
       ds_init_string (&text, lex_entire_line_ds (lexer));
 
       /* Record file name. */
-      cur_file_name = getl_source_name ();
-      if (cur_file_name != NULL && 
+      cur_file_name = getl_source_name (lex_get_source_stream (lexer));
+      if (cur_file_name != NULL &&
          (previous_file_name == NULL
            || !strcmp (cur_file_name, previous_file_name)))
         previous_file_name = pool_strdup (block->pool, cur_file_name);
@@ -319,7 +319,7 @@ parse_lines (struct lexer *lexer, struct repeat_block *block)
       /* Create a line structure. */
       line = pool_alloc (block->pool, sizeof *line);
       line->file_name = previous_file_name;
-      line->line_number = getl_source_location ();
+      line->line_number = getl_source_location (lex_get_source_stream (lexer));
       ss_alloc_substring_pool (&line->text, ds_ss (&text), block->pool);
       line->syntax = syntax;
 
@@ -329,11 +329,12 @@ parse_lines (struct lexer *lexer, struct repeat_block *block)
                            &command_ends_before_line,
                            &command_ends_after_line);
       if (recognize_do_repeat (ds_ss (&text)))
-        nesting_level++; 
+        nesting_level++;
       else if (recognize_end_repeat (ds_ss (&text), &block->print)
-               && nesting_level-- == 0) 
+               && nesting_level-- == 0)
         {
           lex_discard_line (lexer);
+         ds_destroy (&text);
           return true;
         }
       ds_destroy (&text);
@@ -348,7 +349,7 @@ static void
 create_vars (struct repeat_block *block)
 {
   struct repeat_macro *macro;
-  
+
   ll_for_each (macro, struct repeat_macro, ll, &block->macros)
     if (macro->type == VAR_NAMES)
       {