| | @@ -1878,18 +1878,20 @@ |
| 1878 | 1878 | switch( pExpr->pOp->eOp ) { |
| 1879 | 1879 | case OP_MULTIPLY: iRes = iLeft*iRight; break; |
| 1880 | 1880 | case OP_DIVIDE: |
| 1881 | 1881 | if( !iRight ){ |
| 1882 | 1882 | Th_ErrorMessage(interp, "Divide by 0:", zLeft, nLeft); |
| 1883 | | - return TH_ERROR; |
| 1883 | + rc = TH_ERROR; |
| 1884 | + goto finish; |
| 1884 | 1885 | } |
| 1885 | 1886 | iRes = iLeft/iRight; |
| 1886 | 1887 | break; |
| 1887 | 1888 | case OP_MODULUS: |
| 1888 | 1889 | if( !iRight ){ |
| 1889 | 1890 | Th_ErrorMessage(interp, "Modulo by 0:", zLeft, nLeft); |
| 1890 | | - return TH_ERROR; |
| 1891 | + rc = TH_ERROR; |
| 1892 | + goto finish; |
| 1891 | 1893 | } |
| 1892 | 1894 | iRes = iLeft%iRight; |
| 1893 | 1895 | break; |
| 1894 | 1896 | case OP_ADD: iRes = iLeft+iRight; break; |
| 1895 | 1897 | case OP_SUBTRACT: iRes = iLeft-iRight; break; |
| | @@ -1916,11 +1918,12 @@ |
| 1916 | 1918 | switch( pExpr->pOp->eOp ) { |
| 1917 | 1919 | case OP_MULTIPLY: Th_SetResultDouble(interp, fLeft*fRight); break; |
| 1918 | 1920 | case OP_DIVIDE: |
| 1919 | 1921 | if( fRight==0.0 ){ |
| 1920 | 1922 | Th_ErrorMessage(interp, "Divide by 0:", zLeft, nLeft); |
| 1921 | | - return TH_ERROR; |
| 1923 | + rc = TH_ERROR; |
| 1924 | + goto finish; |
| 1922 | 1925 | } |
| 1923 | 1926 | Th_SetResultDouble(interp, fLeft/fRight); |
| 1924 | 1927 | break; |
| 1925 | 1928 | case OP_ADD: Th_SetResultDouble(interp, fLeft+fRight); break; |
| 1926 | 1929 | case OP_SUBTRACT: Th_SetResultDouble(interp, fLeft-fRight); break; |
| | @@ -1942,10 +1945,12 @@ |
| 1942 | 1945 | case OP_SEQ: Th_SetResultInt(interp, iEqual); break; |
| 1943 | 1946 | case OP_SNE: Th_SetResultInt(interp, !iEqual); break; |
| 1944 | 1947 | default: assert(!"Internal error"); |
| 1945 | 1948 | } |
| 1946 | 1949 | } |
| 1950 | + |
| 1951 | + finish: |
| 1947 | 1952 | |
| 1948 | 1953 | Th_Free(interp, zLeft); |
| 1949 | 1954 | Th_Free(interp, zRight); |
| 1950 | 1955 | } |
| 1951 | 1956 | |
| 1952 | 1957 | |