Patch title: Release 93 bulk changes
Abstract:
File: /language/compiler/runtime_compile.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 


# bug: e1 will not be freed !

meta runtime_compile e
  if e:size<1 or e:size%2<>1
    return
  for (var Int i) 0 e:size-3 step 2
    if not e:i:is_pure_ident
      return
    e:(i+1) compile ?
  var Link:Expression expr :> duplicate (e e:size-1)
  expr switch_module (null map Module)
  var Link:Argument pe :> argument mapped_constant PackedExp
  var Link:Argument l :> argument local Link:Expression
  var Link:Argument e2 :> argument indirect Expression (argu
  e add (instruction (the_function 'cast (Link Expression)' 
  e add (instruction (the_function 'cast Expression' Link:Ex
  for (var Int i) 0 e:size-3 step 2
    var Link:Argument id :> argument constant Str e:i:ident
    var Pointer:Type t :> e:(i+1):result:type real_data_type
    e:(i+1) cast t
    e suckup e:(i+1)
    if (t:flags .and. type_flag_do_not_copy)=0
      e add (instruction (the_function copy_constant Express
    else
      e add (instruction (the_function map_constant Expressi
  var Pointer:Module m :> e module
  if (pliant_module_dictionary first m:name)=null
    pliant_module_dictionary insert m:name true addressof:m
  e add (instruction (the_function compile Expression Str) e
  e set_void_result

export runtime_compile
meta runtime_compile e
  if e:size<1 or e:size%2<>1
    return
  for (var Int i) 0 e:size-3 step 2
    if not e:i:is_pure_ident
      return
    e:(i+1) compile ?
  var Link:Expression expr :> duplicate (e e:size-1)
  expr switch_module (null map Module)
  var Link:Argument pe :> argument mapped_constant PackedExp
  var Link:Argument l :> argument local Link:Expression
  var Link:Argument e2 :> argument indirect Expression (argu
  e add (instruction (the_function 'cast (Link Expression)' 
  e add (instruction (the_function 'cast Expression' Link:Ex
  for (var Int i) 0 e:size-3 step 2
    var Link:Argument id :> argument constant Str e:i:ident
    var Pointer:Type t :> e:(i+1):result:type real_data_type
    e:(i+1) cast t
    e suckup e:(i+1)
    if (t:flags .and. type_flag_do_not_copy)=0
      e add (instruction (the_function copy_constant Express
    else
      e add (instruction (the_function map_constant Expressi
  var Pointer:Module m :> e module
  if (pliant_module_dictionary first m:name)=null
    pliant_module_dictionary insert m:name true addressof:m
  e add (instruction (the_function compile Expression Str) e
  e set_void_result

export runtime_compile