Patch title: Release 87 bulk changes
Abstract:
File: /pliant/language/type/text/str.pli
Key:
    Removed line
    Added line
   
# Copyright  Hubert Tonneau  hubert.tonneau@pliant.cx
#
# This program is free software; you can redistribute it and
# modify it under the terms of the GNU General Public Licens
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be us
# but WITHOUT ANY WARRANTY; without even the implied warrant
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See 
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public 
# version 2 along with this program; if not, write to the Fr
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 


# Copyright  Hubert Tonneau  hubert.tonneau@pliant.cx
#
# This program is free software; you can redistribute it and
# modify it under the terms of the GNU General Public Licens
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be us
# but WITHOUT ANY WARRANTY; without even the implied warrant
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See 
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public 
# version 2 along with this program; if not, write to the Fr
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 


function '+=' s e
  arg_rw Str s ; arg Str e
  strong_definition
  # this is speedup only function
  s resize s:len+e:len
  memory_copy e:characters (s:characters translate Char s:len-e:len) e:len


method s search_last pattern default -> position
  arg Str s pattern ; arg Int default position
  position := default
  var Address base := s characters
  while true
    base := memory_search base (cast (s:characters translate
    if base=null
      return
    position := (cast base Int).-.(cast s:characters Int)
    base := base translate Char 1    



method s search_last pattern default -> position
  arg Str s pattern ; arg Int default position
  position := default
  var Address base := s characters
  while true
    base := memory_search base (cast (s:characters translate
    if base=null
      return
    position := (cast base Int).-.(cast s:characters Int)
    base := base translate Char 1    



export '. search_last' replace repeat reverse left right upp
export '+=' '. search_last' replace repeat reverse left right upper lower



export string



export string