diff libinterp/parse-tree/lex.h @ 17693:efbe746f8fa8

eliminate octave_comment_buffer singleton * lex.h (octave_base_lexer::comment_buffer): New class adapted from octave_comment_buffer class. No longer a singleton class. (octave_base_lexer::comment_buffer::reset): New function. (octave_base_lexer::reset): Call comment_buf.reset. (octave_base_lexer::comment_buf): New data member. (octave_base_lexer::get_comment): New function. * comment-list.h, comment-list.cc (octave_comment_buffer): Delete. Change all uses of octave_comment_buffer to use local comment_buf object instead. * parse.h (octave_base_parser::make_statement): New member function. * oct-parse.in.yy (make_statement): Delete. Change all uses of make_statement to use the member function instead. (safe_fclose): Don't extract and delete comment list here.
author John W. Eaton <jwe@octave.org>
date Fri, 18 Oct 2013 21:00:33 -0400
parents 531473481084
children f79bf671a493
line wrap: on
line diff
--- a/libinterp/parse-tree/lex.h	Fri Oct 18 16:27:44 2013 -0700
+++ b/libinterp/parse-tree/lex.h	Fri Oct 18 21:00:33 2013 -0400
@@ -493,8 +493,50 @@
     bool eof;
   };
 
+  // Collect comment text.
+
+  class
+  comment_buffer
+  {
+  public:
+
+    comment_buffer (void) : comment_list (0) { }
+
+    ~comment_buffer (void) { delete comment_list; }
+
+    void append (const std::string& s, octave_comment_elt::comment_type t)
+    {
+      if (! comment_list)
+        comment_list = new octave_comment_list ();
+
+      comment_list->append (s, t);
+    }
+
+    // Caller is expected to delete the returned value.
+
+    octave_comment_list *get_comment (void)
+    {
+      octave_comment_list *retval = comment_list;
+
+      comment_list = 0;
+
+      return retval;
+    }
+
+    void reset (void)
+    {
+      delete comment_list;
+
+      comment_list = 0;
+    }
+
+  private:
+
+    octave_comment_list *comment_list;
+  };
+
   octave_base_lexer (void)
-    : lexical_feedback (), scanner (0), input_buf ()
+    : lexical_feedback (), scanner (0), input_buf (), comment_buf ()
   {
     init ();
   }
@@ -545,6 +587,8 @@
 
   void finish_comment (octave_comment_elt::comment_type typ);
 
+  octave_comment_list *get_comment (void) { return comment_buf.get_comment (); }
+
   int handle_close_bracket (int bracket_type);
 
   bool looks_like_command_arg (void);
@@ -583,6 +627,9 @@
   // Object that reads and buffers input.
   input_buffer input_buf;
 
+  // Object that collects comment text.
+  comment_buffer comment_buf;
+
   virtual void increment_promptflag (void) = 0;
 
   virtual void decrement_promptflag (void) = 0;