| 826 | } |
| 827 | |
| 828 | void SIValue_Free(SIValue v) { |
| 829 | // The free routine only performs work if it owns a heap allocation. |
| 830 | if(v.allocation != M_SELF) return; |
| 831 | |
| 832 | switch(v.type) { |
| 833 | case T_STRING: |
| 834 | rm_free(v.stringval); |
| 835 | v.stringval = NULL; |
| 836 | return; |
| 837 | case T_NODE: |
| 838 | case T_EDGE: |
| 839 | rm_free(v.ptrval); |
| 840 | return; |
| 841 | case T_ARRAY: |
| 842 | SIArray_Free(v); |
| 843 | return; |
| 844 | case T_PATH: |
| 845 | SIPath_Free(v); |
| 846 | return; |
| 847 | case T_MAP: |
| 848 | Map_Free(v); |
| 849 | default: |
| 850 | return; |
| 851 | } |
| 852 | } |
| 853 |