2 * assign sys_var = val */
| 1511 | * assign sys_var = val |
| 1512 | */ |
| 1513 | static BOOLEAN iiAssign_sys(leftv l, leftv r) |
| 1514 | { |
| 1515 | int rt=r->Typ(); |
| 1516 | |
| 1517 | if (rt==0) |
| 1518 | { |
| 1519 | if (!errorreported) Werror("`%s` is undefined",r->Fullname()); |
| 1520 | return TRUE; |
| 1521 | } |
| 1522 | int i=0; |
| 1523 | int lt=l->rtyp; |
| 1524 | while (((dAssign_sys[i].res!=lt) |
| 1525 | || (dAssign_sys[i].arg!=rt)) |
| 1526 | && (dAssign_sys[i].res!=0)) i++; |
| 1527 | if (dAssign_sys[i].res!=0) |
| 1528 | { |
| 1529 | if (!dAssign_sys[i].p(l,r)) |
| 1530 | { |
| 1531 | // everything ok, clean up |
| 1532 | return FALSE; |
| 1533 | } |
| 1534 | } |
| 1535 | // implicite type conversion ---------------------------------------------- |
| 1536 | if (dAssign_sys[i].res==0) |
| 1537 | { |
| 1538 | int ri; |
| 1539 | leftv rn = (leftv)omAlloc0Bin(sleftv_bin); |
| 1540 | BOOLEAN failed=FALSE; |
| 1541 | i=0; |
| 1542 | while ((dAssign_sys[i].res!=lt) |
| 1543 | && (dAssign_sys[i].res!=0)) i++; |
| 1544 | while (dAssign_sys[i].res==lt) |
| 1545 | { |
| 1546 | if ((ri=iiTestConvert(rt,dAssign_sys[i].arg))!=0) |
| 1547 | { |
| 1548 | failed= ((iiConvert(rt,dAssign_sys[i].arg,ri,r,rn)) |
| 1549 | || (dAssign_sys[i].p(l,rn))); |
| 1550 | // everything done, clean up temp. variables |
| 1551 | rn->CleanUp(); |
| 1552 | omFreeBin((ADDRESS)rn, sleftv_bin); |
| 1553 | if (failed) |
| 1554 | { |
| 1555 | // leave loop, goto error handling |
| 1556 | break; |
| 1557 | } |
| 1558 | else |
| 1559 | { |
| 1560 | // everything ok, return |
| 1561 | return FALSE; |
| 1562 | } |
| 1563 | } |
| 1564 | i++; |
| 1565 | } |
| 1566 | // error handling --------------------------------------------------- |
| 1567 | if(!errorreported) |
| 1568 | { |
| 1569 | Werror("`%s` = `%s` is not supported" |
| 1570 | ,Tok2Cmdname(lt),Tok2Cmdname(rt)); |
no test coverage detected