Patch title: Release 85 bulk changes
Abstract:
File: /pliant/language/compiler/expression/expression2.pli
Key:
    Removed line
    Added line
   
# Copyright  Hubert Tonneau  hubert.tonneau@pliant.cx
# Copyright (C) 1999  Patrice Ossona de Mendez  pom@ehess.fr
#
# 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
# Copyright (C) 1999  Patrice Ossona de Mendez  pom@ehess.fr
#
# 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 copy_properties src dst
  arg_rw Expression src dst
  dst properties := src properties
  check src:size=dst:size
  for (var Int i) 0 src:size-1
    copy_properties src:i dst:i

function track_expression template ident expr e -> ok
  arg Expression template; arg Str ident; arg_rw Expression 
  if template:ident=ident
    e :> expr
    return true
  else
    check template:size=expr:size
    for (var Int i) 0 template:size-1
      if (track_expression template:i ident expr:i e)
        return true
    return false
  

function track_expression template ident expr e -> ok
  arg Expression template; arg Str ident; arg_rw Expression 
  if template:ident=ident
    e :> expr
    return true
  else
    check template:size=expr:size
    for (var Int i) 0 template:size-1
      if (track_expression template:i ident expr:i e)
        return true
    return false
  
export copy_properties
export track_expression
export track_expression