| 1998 | } |
| 1999 | |
| 2000 | int sleftv::Eval() |
| 2001 | { |
| 2002 | BOOLEAN nok=FALSE; |
| 2003 | leftv nn=next; |
| 2004 | next=NULL; |
| 2005 | if(rtyp==IDHDL) |
| 2006 | { |
| 2007 | int t=Typ(); |
| 2008 | if (t!=PROC_CMD) |
| 2009 | { |
| 2010 | void *d=CopyD(t); |
| 2011 | data=d; |
| 2012 | rtyp=t; |
| 2013 | name=NULL; |
| 2014 | e=NULL; |
| 2015 | } |
| 2016 | } |
| 2017 | else if (rtyp==COMMAND) |
| 2018 | { |
| 2019 | command d=(command)data; |
| 2020 | if(d->op==PROC_CMD) //assume d->argc==2 |
| 2021 | { |
| 2022 | char *what=(char *)(d->arg1.Data()); |
| 2023 | idhdl h=ggetid(what); |
| 2024 | if((h!=NULL)&&(IDTYP(h)==PROC_CMD)) |
| 2025 | { |
| 2026 | nok=d->arg2.Eval(); |
| 2027 | if(!nok) |
| 2028 | { |
| 2029 | nok=iiMake_proc(h,req_packhdl,&d->arg2); |
| 2030 | this->CleanUp(currRing); |
| 2031 | if (!nok) |
| 2032 | { |
| 2033 | memcpy(this,&iiRETURNEXPR,sizeof(sleftv)); |
| 2034 | iiRETURNEXPR.Init(); |
| 2035 | } |
| 2036 | } |
| 2037 | } |
| 2038 | else nok=TRUE; |
| 2039 | } |
| 2040 | else if (d->op=='=') //assume d->argc==2 |
| 2041 | { |
| 2042 | if ((d->arg1.rtyp!=IDHDL)&&(d->arg1.rtyp!=DEF_CMD)) |
| 2043 | { |
| 2044 | nok=d->arg1.Eval(); |
| 2045 | } |
| 2046 | if (!nok) |
| 2047 | { |
| 2048 | const char *n=d->arg1.name; |
| 2049 | nok=(n == NULL) || d->arg2.Eval(); |
| 2050 | if (!nok) |
| 2051 | { |
| 2052 | int save_typ=d->arg1.rtyp; |
| 2053 | omCheckAddr((ADDRESS)n); |
| 2054 | if (d->arg1.rtyp!=IDHDL) |
| 2055 | syMake(&d->arg1,n); |
| 2056 | omCheckAddr((ADDRESS)d->arg1.name); |
| 2057 | if (d->arg1.rtyp==IDHDL) |
no test coverage detected