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

scope "/pliant/language/" "/pliant/install/"
module "/pliant/install/ring1.pli"

public

method e size -> s
  arg Expression e ; arg Int s
  return e:arguments:size

method e 'size :=' i
  arg_rw Expression e ; arg Int i
  e:arguments 'size :=' i

method e '' i -> ei
  arg Expression e ; arg Int i ; arg_C Expression ei
  return (e:arguments:i map Expression)

method e is_pure_ident -> id
  arg Expression e ; arg CBool id
  id := addressof:(entry_type e:value)=addressof:Ident and e:size=0
  
method e ident -> id
  arg Expression e ; arg Str id
  if addressof:(entry_type e:value)<>addressof:Ident
    return ""
  id := cast (e:value map Ident) Str
  
method e explicit_cast t -> success
  arg_rw Expression e ; arg Type t ; arg CBool success
  e compile
  if not e:is_compiled
    return false
  if (addressof e:result:type)=addressof:t
    return true
  e uncast
  success := addressof:(e cast e:result e:access t 0)<>null

method e external_module -> m
  arg Expression e ; arg_C Module m
  if (addressof e:module:external)<>null
    m :> e:module external
  else
    m :> e module