Patch title: Release 85 bulk changes
Abstract:
File: /pliant/language/basic/control.c
Key:
    Removed line
    Added line
   
// Copyright  Hubert Tonneau  hubert.tonneau@pliant.cx
//
// This program is free software; you can redistribute it an
// modify it under the terms of the GNU General Public Licen
// as published by the Free Software Foundation.
// 
// This program is distributed in the hope that it will be u
// but WITHOUT ANY WARRANTY; without even the implied warran
// 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 F
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA


FUNCTION Void gvar_meta(struct Expression *e) {
  struct Type *type;
// Copyright  Hubert Tonneau  hubert.tonneau@pliant.cx
//
// This program is free software; you can redistribute it an
// modify it under the terms of the GNU General Public Licen
// as published by the Free Software Foundation.
// 
// This program is distributed in the hope that it will be u
// but WITHOUT ANY WARRANTY; without even the implied warran
// 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 F
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA


FUNCTION Void gvar_meta(struct Expression *e) {
  struct Type *type;
  Int i; Arrow v;
  Int i; Arrow v,w;
  struct GlobalVariable *gv;
  struct Argument *a,*a2;
  if(e->arguments.nb<2) return;
  type=(struct Type *)Expression_constant(EARG(e,0),G.type_T
  for(i=1; i<e->arguments.nb; i++)
    if(Expression_pure_ident(EARG(e,i))==null) return;
  for(i=1; i<e->arguments.nb; i++) {
    v=entry_new(type);
  struct GlobalVariable *gv;
  struct Argument *a,*a2;
  if(e->arguments.nb<2) return;
  type=(struct Type *)Expression_constant(EARG(e,0),G.type_T
  for(i=1; i<e->arguments.nb; i++)
    if(Expression_pure_ident(EARG(e,i))==null) return;
  for(i=1; i<e->arguments.nb; i++) {
    v=entry_new(type);
    gv=(struct GlobalVariable *)entry_new(G.type_GlobalVaria
    w=entry_new(G.type_GlobalVariable); gv=(struct GlobalVariable *)w;
    Str_copy((struct Str *)Expression_pure_ident(EARG(e,i)),
    Str_copy((struct Str *)Expression_pure_ident(EARG(e,i)),
    ListingPosition_copy(&e->position,&gv->position);
        ListingPosition_copy(&e->position,&gv->position);
    Arrow_set(&gv->variable,v);
    gv->access=Arw|Access_object;
    Arrow_set(&gv->variable,v);
    gv->access=Arw|Access_object;
    Expression_define(e,&gv->name,gv,Module_actual(e->module
    Expression_define(e,&gv->name,gv,Module_actual(e->module)); 
    call_active(w,Access_read|Access_constant,EARG(e,i));
  }
  a=argument(G.type_Address,Argument_constant,entry(G.type_A
  List_append(&a->requires,v);
  a2=argument(type,Argument_indirect,a,0);
  Expression_set_result(e,a2,Arw|Access_object); }



  a=argument(G.type_Address,Argument_constant,entry(G.type_A
  List_append(&a->requires,v);
  a2=argument(type,Argument_indirect,a,0);
  Expression_set_result(e,a2,Arw|Access_object); }