MCPcopy Create free account
hub / github.com/Singular/Singular / Eval

Method Eval

Singular/subexpr.cc:2000–2190  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1998}
1999
2000int 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)

Callers 7

grammar.ccFile · 0.80
iiTestAssumeFunction · 0.80
ssiRead1Function · 0.80
slReadFunction · 0.80
executeProcFunction · 0.80
decode_defFunction · 0.80
decode_commandFunction · 0.80

Calls 15

CleanUpMethod · 0.95
ggetidFunction · 0.85
iiMake_procFunction · 0.85
killhdlFunction · 0.85
iiDeclCommandFunction · 0.85
iiTokTypeFunction · 0.85
omAllocBinFunction · 0.85
iiExprArithMFunction · 0.85
iiExprArith1Function · 0.85
iiExprArith2Function · 0.85
iiExprArith3Function · 0.85
DataClass · 0.85

Tested by

no test coverage detected