Changeset 15878 for trunk/Ohana/src/opihi/lib.shell/convert_to_RPN.c
- Timestamp:
- Dec 16, 2007, 2:27:00 PM (19 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/lib.shell/convert_to_RPN.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/lib.shell/convert_to_RPN.c
r7917 r15878 97 97 /* pop previous, higher operators from OP stack to stack */ 98 98 for (j = Nop_stack - 1; (j >= 0) && (op_stack[j].type > type); j--) { 99 strcpy (stack[Nstack].name, op_stack[j].name); 100 stack[Nstack].type = op_stack[j].type; 99 move_stack (&stack[Nstack], &op_stack[j]); 101 100 Nstack ++; 102 101 Nop_stack --; 103 102 } 104 103 /* push operator on OP stack */ 105 strcpy (op_stack[Nop_stack].name, argv[i]); 106 op_stack[Nop_stack].type = type; 104 assign_stack (&op_stack[Nop_stack], argv[i], type); 107 105 Nop_stack ++; 108 106 break; … … 115 113 /* pop previous, higher or equal operators from OP stack to stack */ 116 114 for (j = Nop_stack - 1; (j >= 0) && (op_stack[j].type >= type); j--) { 117 strcpy (stack[Nstack].name, op_stack[j].name); 118 stack[Nstack].type = op_stack[j].type; 115 move_stack (&stack[Nstack], &op_stack[j]); 119 116 Nstack ++; 120 117 Nop_stack --; 121 118 } 122 119 /* push operator on OP stack */ 123 strcpy (op_stack[Nop_stack].name, argv[i]); 124 op_stack[Nop_stack].type = type; 120 assign_stack (&op_stack[Nop_stack], argv[i], type); 125 121 Nop_stack ++; 126 122 break; 127 123 case 2: 128 124 /* push operator on OP stack */ 129 strcpy (op_stack[Nop_stack].name, argv[i]); 130 op_stack[Nop_stack].type = type; 125 assign_stack (&op_stack[Nop_stack], argv[i], type); 131 126 Nop_stack ++; 132 127 break; … … 134 129 /* pop rest of operators from OP stack to stack, looking for '(' */ 135 130 for (j = Nop_stack - 1; (j >= 0) && (op_stack[j].type != 2); j--) { 136 strcpy (stack[Nstack].name, op_stack[j].name); 137 stack[Nstack].type = op_stack[j].type; 131 move_stack (&stack[Nstack], &op_stack[j]); 138 132 Nstack ++; 139 133 Nop_stack --; … … 149 143 /* place the value (number or vector/matrix name) on stack */ 150 144 /* value of 'X' is used as sentinel until we sort out values */ 151 strcpy (stack[Nstack].name, argv[i]); 152 stack[Nstack].type = 'X'; 145 assign_stack (&stack[Nstack], argv[i], 'X'); 153 146 Nstack ++; 154 147 break; … … 163 156 goto cleanup; 164 157 } 165 strcpy (stack[Nstack].name, op_stack[j].name); 166 stack[Nstack].type = op_stack[j].type; 158 move_stack (&stack[Nstack], &op_stack[j]); 167 159 Nstack ++; 168 160 } … … 170 162 cleanup: 171 163 /*** free up unused stack space ***/ 172 clean_stack (op_stack, NSTACK); 164 165 // XXX there should not be any un-freed op_stacks at this point 166 // clean_stack (op_stack, NSTACK); 173 167 free (op_stack); 174 clean_stack (&stack[Nstack], NSTACK - Nstack); 168 169 // XXX there should not be any data on higher stack entries 170 // clean_stack (&stack[Nstack], NSTACK - Nstack); 175 171 REALLOCATE (stack, StackVar, MAX (Nstack, 1)); 176 172 *nstack = Nstack;
Note:
See TracChangeset
for help on using the changeset viewer.
