From 7fec6476f8f893fb6fd2cfd87e469da6eaa4c3fd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Tue, 2 Sep 2014 16:33:07 +0200
Subject: [PATCH] IOBuffer: Use apply_current() to call range_error().

This gets rid of a dynamic lookup and a reference on the
string "range_error".

It also improves the odds that IOBuffer will support being
inherited multiple times, as well as private inherit.
---
 src/modules/_Stdio/buffer.cmod | 10 +---------
 1 file changed, 1 insertion(+), 9 deletions(-)

diff --git a/src/modules/_Stdio/buffer.cmod b/src/modules/_Stdio/buffer.cmod
index f5c581d1bd..c226336ae2 100644
--- a/src/modules/_Stdio/buffer.cmod
+++ b/src/modules/_Stdio/buffer.cmod
@@ -252,20 +252,13 @@ PIKECLASS IOBuffer
       }
   }
 
-  static struct pike_string *range_error_s;
   static int io_range_error( IOBuffer *io, int howmuch )
   {
       int res;
       struct svalue *osp = Pike_sp;
 
-      if(!range_error_s)
-          range_error_s = make_shared_string( "range_error" );
-
       push_int( howmuch );
-      apply_low(io->this,
-          really_low_find_shared_string_identifier
-            (range_error_s, io->this->prog, SEE_PROTECTED),
-          1);
+      apply_current( f_IOBuffer_range_error_fun_num, 1 );
       res = Pike_sp[-1].u.integer;
       pop_n_elems( Pike_sp-osp );
       if( !res ) io_range_error_throw( io, howmuch );
@@ -1579,7 +1572,6 @@ void exit_stdio_buffer(void)
   if( shm_program )  free_program( shm_program );
   if( sbuf_program ) free_program( sbuf_program );
   free_program( buffer_error_program );
-  if( range_error_s )  free_string(range_error_s);
   EXIT
 }
 /*! @endmodule
-- 
GitLab