Patch title: Release 85 bulk changes
Abstract:
File: /pliant/language/basic/implicit.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 


function try_implicits e
  arg_rw Expression e
  var Link:Expression ee
  if (rec query addressof:e null)<>null
    return
  var Pointer:Arrow a :> implicits last
  while a<>null
    var Pointer:ImplicitArea sa :> a map ImplicitArea
    if (addressof e:module)=(addressof sa:module)
      var CBool try := true
      if (e:ident=":=" or e:ident=":>") and e:size=2 and e:0
        ee :> expression ident ". "+e:0:ident+" "+e:ident su
        if (e might_compile_as ee)
          e properties := ee properties
          try := false
        if e:0:size>=1 and e:0:0:is_pure_ident
          ee :> expression ident ". "+e:0:0:ident+" "+e:iden
          if (e might_compile_as ee)
            e properties := ee properties
            try := false
      if try
        if e:size=0
          rec define addressof:e null addressof:void
          e might_compile_as (expression ident sa:ident sube
          rec define addressof:e null null
        else
          ee :> expression ident sa:ident subexpressions (ex
          if not (e might_compile_as ee)
            if e:ident<>""
              var Link:Expression first :> expression ident 
              rec define addressof:first null addressof:void
              ee :> expression ident "()" subexpressions fir
# 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 try_implicits e
  arg_rw Expression e
  var Link:Expression ee
  if (rec query addressof:e null)<>null
    return
  var Pointer:Arrow a :> implicits last
  while a<>null
    var Pointer:ImplicitArea sa :> a map ImplicitArea
    if (addressof e:module)=(addressof sa:module)
      var CBool try := true
      if (e:ident=":=" or e:ident=":>") and e:size=2 and e:0
        ee :> expression ident ". "+e:0:ident+" "+e:ident su
        if (e might_compile_as ee)
          e properties := ee properties
          try := false
        if e:0:size>=1 and e:0:0:is_pure_ident
          ee :> expression ident ". "+e:0:0:ident+" "+e:iden
          if (e might_compile_as ee)
            e properties := ee properties
            try := false
      if try
        if e:size=0
          rec define addressof:e null addressof:void
          e might_compile_as (expression ident sa:ident sube
          rec define addressof:e null null
        else
          ee :> expression ident sa:ident subexpressions (ex
          if not (e might_compile_as ee)
            if e:ident<>""
              var Link:Expression first :> expression ident 
              rec define addressof:first null addressof:void
              ee :> expression ident "()" subexpressions fir
              e might_compile_as ee
              e properties := ee:0:0 properties
              if (e might_compile_as ee)
                e properties := ee:0:0 properties
             rec define addressof:first null null
          else
            e properties := ee:0 properties
    a :> implicits previous a

alias 'pliant failedtocompile rewrite' try_implicits 
export implicit 'pliant failedtocompile rewrite'
             rec define addressof:first null null
          else
            e properties := ee:0 properties
    a :> implicits previous a

alias 'pliant failedtocompile rewrite' try_implicits 
export implicit 'pliant failedtocompile rewrite'