Changeset 144 for trunk/orca/op.c
- Timestamp:
- 05/11/06 14:23:03 (3 years ago)
- Files:
-
- 1 modified
-
trunk/orca/op.c (modified) (64 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/orca/op.c
r98 r144 28 28 29 29 30 void orOpAdd( OValue* a )31 { 32 OValue* b = a + 1;33 if( orIs(a , OT_INTEGER) )34 { 35 if( orIs(b, OT_INTEGER) ) 36 { 37 orResult( OT_INTEGER, orInt(a ) + orInt(b) );38 return; 39 } 40 else if( orIs(b, OT_DECIMAL) ) 41 { 42 orResultDECIMAL( (double) orInt(a ) + orDecimal(b) );30 void orOpAdd( OValue* a1 ) 31 { 32 OValue* b = a1 + 1; 33 if( orIs(a1, OT_INTEGER) ) 34 { 35 if( orIs(b, OT_INTEGER) ) 36 { 37 orResult( OT_INTEGER, orInt(a1) + orInt(b) ); 38 return; 39 } 40 else if( orIs(b, OT_DECIMAL) ) 41 { 42 orResultDECIMAL( (double) orInt(a1) + orDecimal(b) ); 43 43 return; 44 44 } … … 52 52 for( i = 0; i < res->argc; i++ ) 53 53 { 54 tmp = orInt(a ) + b->tuple[i];54 tmp = orInt(a1) + b->tuple[i]; 55 55 res->tuple[i] = orToByteRange(tmp); 56 56 } … … 59 59 return; 60 60 } 61 a = b;62 } 63 else if( orIs(a , OT_DECIMAL) )64 { 65 if( orIs(b, OT_INTEGER) ) 66 { 67 orResultDECIMAL( orDecimal(a ) + (double) orInt(b) );68 return; 69 } 70 else if( orIs(b, OT_DECIMAL) ) 71 { 72 orResultDECIMAL( orDecimal(a ) + orDecimal(b) );61 a1 = b; 62 } 63 else if( orIs(a1, OT_DECIMAL) ) 64 { 65 if( orIs(b, OT_INTEGER) ) 66 { 67 orResultDECIMAL( orDecimal(a1) + (double) orInt(b) ); 68 return; 69 } 70 else if( orIs(b, OT_DECIMAL) ) 71 { 72 orResultDECIMAL( orDecimal(a1) + orDecimal(b) ); 73 73 return; 74 74 } … … 83 83 for( i = 0; i < res->argc; i++ ) 84 84 { 85 tmp = (int) orDecimal(a ) + b->tuple[i];85 tmp = (int) orDecimal(a1) + b->tuple[i]; 86 86 res->tuple[i] = orToByteRange(tmp); 87 87 } … … 91 91 } 92 92 #endif 93 a = b;94 } 95 else if( orIs(a , OT_TUPLE) )93 a1 = b; 94 } 95 else if( orIs(a1, OT_TUPLE) ) 96 96 { 97 97 if( orIs(b, OT_TUPLE) ) … … 100 100 OValue* res; 101 101 102 res = a ;102 res = a1; 103 103 104 res->argc = a ->argc > b->argc ? a->argc : b->argc;105 for( i = 0; i < res->argc; i++ ) 106 { 107 tmp = a ->tuple[i] + b->tuple[i];104 res->argc = a1->argc > b->argc ? a1->argc : b->argc; 105 for( i = 0; i < res->argc; i++ ) 106 { 107 tmp = a1->tuple[i] + b->tuple[i]; 108 108 res->tuple[i] = orToByteRange(tmp); 109 109 } … … 115 115 OValue *res; 116 116 117 res = a ;118 119 for( i = 0; i < res->argc; i++ ) 120 { 121 tmp = a ->tuple[i] + orInt(b);117 res = a1; 118 119 for( i = 0; i < res->argc; i++ ) 120 { 121 tmp = a1->tuple[i] + orInt(b); 122 122 res->tuple[i] = orToByteRange(tmp); 123 123 } … … 129 129 OValue *res; 130 130 131 res = a ;132 133 for( i = 0; i < res->argc; i++ ) 134 { 135 tmp = a ->tuple[i] + (int) orDecimal(b);131 res = a1; 132 133 for( i = 0; i < res->argc; i++ ) 134 { 135 tmp = a1->tuple[i] + (int) orDecimal(b); 136 136 res->tuple[i] = orToByteRange(tmp); 137 137 } 138 138 return; 139 139 } 140 a = b;141 } 142 else if( orIs(a , OT_TIME) )140 a1 = b; 141 } 142 else if( orIs(a1, OT_TIME) ) 143 143 { 144 144 if( orIs(b, OT_TIME) ) 145 145 { 146 orSeconds(a ) += orSeconds(b);147 return; 148 } 149 } 150 orErrorOp( "+", a );151 } 152 153 154 void orOpSub( OValue* a )155 { 156 OValue* b = a + 1;157 if( orIs(a , OT_INTEGER) )158 { 159 if( orIs(b, OT_INTEGER) ) 160 { 161 orResult( OT_INTEGER, orInt(a ) - orInt(b) );162 return; 163 } 164 else if( orIs(b, OT_DECIMAL) ) 165 { 166 orResultDECIMAL( (double) orInt(a ) - orDecimal(b) );146 orSeconds(a1) += orSeconds(b); 147 return; 148 } 149 } 150 orErrorOp( "+", a1 ); 151 } 152 153 154 void orOpSub( OValue* a1 ) 155 { 156 OValue* b = a1 + 1; 157 if( orIs(a1, OT_INTEGER) ) 158 { 159 if( orIs(b, OT_INTEGER) ) 160 { 161 orResult( OT_INTEGER, orInt(a1) - orInt(b) ); 162 return; 163 } 164 else if( orIs(b, OT_DECIMAL) ) 165 { 166 orResultDECIMAL( (double) orInt(a1) - orDecimal(b) ); 167 167 return; 168 168 } … … 177 177 for( i = 0; i < res->argc; i++ ) 178 178 { 179 tmp = orInt(a ) - b->tuple[i];179 tmp = orInt(a1) - b->tuple[i]; 180 180 res->tuple[i] = orToByteRange(tmp); 181 181 } … … 185 185 } 186 186 #endif 187 a = b;188 } 189 else if( orIs(a , OT_DECIMAL) )190 { 191 if( orIs(b, OT_INTEGER) ) 192 { 193 orResultDECIMAL( orDecimal(a ) - (double) orInt(b) );194 return; 195 } 196 else if( orIs(b, OT_DECIMAL) ) 197 { 198 orResultDECIMAL( orDecimal(a ) - orDecimal(b) );187 a1 = b; 188 } 189 else if( orIs(a1, OT_DECIMAL) ) 190 { 191 if( orIs(b, OT_INTEGER) ) 192 { 193 orResultDECIMAL( orDecimal(a1) - (double) orInt(b) ); 194 return; 195 } 196 else if( orIs(b, OT_DECIMAL) ) 197 { 198 orResultDECIMAL( orDecimal(a1) - orDecimal(b) ); 199 199 return; 200 200 } … … 209 209 for( i = 0; i < res->argc; i++ ) 210 210 { 211 tmp = (int) orDecimal(a ) - b->tuple[i];211 tmp = (int) orDecimal(a1) - b->tuple[i]; 212 212 res->tuple[i] = orToByteRange(tmp); 213 213 } … … 217 217 } 218 218 #endif 219 a = b;220 } 221 else if( orIs(a , OT_TUPLE) )219 a1 = b; 220 } 221 else if( orIs(a1, OT_TUPLE) ) 222 222 { 223 223 if( orIs(b, OT_TUPLE) ) … … 226 226 OValue* res; 227 227 228 res = a ;228 res = a1; 229 229 230 res->argc = a ->argc > b->argc ? a->argc : b->argc;231 for( i = 0; i < res->argc; i++ ) 232 { 233 tmp = a ->tuple[i] - b->tuple[i];230 res->argc = a1->argc > b->argc ? a1->argc : b->argc; 231 for( i = 0; i < res->argc; i++ ) 232 { 233 tmp = a1->tuple[i] - b->tuple[i]; 234 234 res->tuple[i] = orToByteRange(tmp); 235 235 } … … 241 241 OValue *res; 242 242 243 res = a ;244 245 for( i = 0; i < res->argc; i++ ) 246 { 247 tmp = a ->tuple[i] - orInt(b);243 res = a1; 244 245 for( i = 0; i < res->argc; i++ ) 246 { 247 tmp = a1->tuple[i] - orInt(b); 248 248 res->tuple[i] = orToByteRange(tmp); 249 249 } … … 255 255 OValue *res; 256 256 257 res = a ;258 259 for( i = 0; i < res->argc; i++ ) 260 { 261 tmp = a ->tuple[i] - (int) orDecimal(b);257 res = a1; 258 259 for( i = 0; i < res->argc; i++ ) 260 { 261 tmp = a1->tuple[i] - (int) orDecimal(b); 262 262 res->tuple[i] = orToByteRange(tmp); 263 263 } 264 264 return; 265 265 } 266 a = b;267 } 268 else if( orIs(a , OT_TIME) )266 a1 = b; 267 } 268 else if( orIs(a1, OT_TIME) ) 269 269 { 270 270 if( orIs(b, OT_TIME) ) 271 271 { 272 orSeconds(a ) -= orSeconds(b);273 return; 274 } 275 } 276 orErrorOp( "-", a );277 } 278 279 280 void orOpMul( OValue* a )281 { 282 OValue* b = a + 1;283 if( orIs(a , OT_INTEGER) )284 { 285 if( orIs(b, OT_INTEGER) ) 286 { 287 orResult( OT_INTEGER, orInt(a ) * orInt(b) );288 return; 289 } 290 else if( orIs(b, OT_DECIMAL) ) 291 { 292 orResultDECIMAL( (double) orInt(a ) * orDecimal(b) );272 orSeconds(a1) -= orSeconds(b); 273 return; 274 } 275 } 276 orErrorOp( "-", a1 ); 277 } 278 279 280 void orOpMul( OValue* a1 ) 281 { 282 OValue* b = a1 + 1; 283 if( orIs(a1, OT_INTEGER) ) 284 { 285 if( orIs(b, OT_INTEGER) ) 286 { 287 orResult( OT_INTEGER, orInt(a1) * orInt(b) ); 288 return; 289 } 290 else if( orIs(b, OT_DECIMAL) ) 291 { 292 orResultDECIMAL( (double) orInt(a1) * orDecimal(b) ); 293 293 return; 294 294 } … … 302 302 for( i = 0; i < res->argc; i++ ) 303 303 { 304 tmp = orInt(a ) * b->tuple[i];304 tmp = orInt(a1) * b->tuple[i]; 305 305 res->tuple[i] = orToByteRange(tmp); 306 306 } … … 309 309 return; 310 310 } 311 a = b;312 } 313 else if( orIs(a , OT_DECIMAL) )314 { 315 if( orIs(b, OT_INTEGER) ) 316 { 317 orResultDECIMAL( orDecimal(a ) * (double) orInt(b) );318 return; 319 } 320 else if( orIs(b, OT_DECIMAL) ) 321 { 322 orResultDECIMAL( orDecimal(a ) * orDecimal(b) );311 a1 = b; 312 } 313 else if( orIs(a1, OT_DECIMAL) ) 314 { 315 if( orIs(b, OT_INTEGER) ) 316 { 317 orResultDECIMAL( orDecimal(a1) * (double) orInt(b) ); 318 return; 319 } 320 else if( orIs(b, OT_DECIMAL) ) 321 { 322 orResultDECIMAL( orDecimal(a1) * orDecimal(b) ); 323 323 return; 324 324 } … … 333 333 for( i = 0; i < res->argc; i++ ) 334 334 { 335 tmp = (int) orDecimal(a ) * b->tuple[i];335 tmp = (int) orDecimal(a1) * b->tuple[i]; 336 336 res->tuple[i] = orToByteRange(tmp); 337 337 } … … 341 341 } 342 342 #endif 343 a = b;344 } 345 else if( orIs(a , OT_TUPLE) )343 a1 = b; 344 } 345 else if( orIs(a1, OT_TUPLE) ) 346 346 { 347 347 if( orIs(b, OT_TUPLE) ) … … 350 350 OValue* res; 351 351 352 res = a ;352 res = a1; 353 353 354 res->argc = a ->argc > b->argc ? a->argc : b->argc;355 for( i = 0; i < res->argc; i++ ) 356 { 357 tmp = a ->tuple[i] * b->tuple[i];354 res->argc = a1->argc > b->argc ? a1->argc : b->argc; 355 for( i = 0; i < res->argc; i++ ) 356 { 357 tmp = a1->tuple[i] * b->tuple[i]; 358 358 res->tuple[i] = orToByteRange(tmp); 359 359 } … … 365 365 OValue *res; 366 366 367 res = a ;368 369 for( i = 0; i < res->argc; i++ ) 370 { 371 tmp = a ->tuple[i] * orInt(b);367 res = a1; 368 369 for( i = 0; i < res->argc; i++ ) 370 { 371 tmp = a1->tuple[i] * orInt(b); 372 372 res->tuple[i] = orToByteRange(tmp); 373 373 } … … 379 379 OValue *res; 380 380 381 res = a ;382 383 for( i = 0; i < res->argc; i++ ) 384 { 385 tmp = a ->tuple[i] * (int) orDecimal(b);381 res = a1; 382 383 for( i = 0; i < res->argc; i++ ) 384 { 385 tmp = a1->tuple[i] * (int) orDecimal(b); 386 386 res->tuple[i] = orToByteRange(tmp); 387 387 } 388 388 return; 389 389 } 390 a = b;391 } 392 orErrorOp( "*", a );393 } 394 395 396 void orOpDiv( OValue* a )397 { 398 OValue* b = a + 1;399 if( orIs(a , OT_INTEGER) )390 a1 = b; 391 } 392 orErrorOp( "*", a1 ); 393 } 394 395 396 void orOpDiv( OValue* a1 ) 397 { 398 OValue* b = a1 + 1; 399 if( orIs(a1, OT_INTEGER) ) 400 400 { 401 401 if( orIs(b, OT_INTEGER) ) … … 403 403 if( orInt(b) == 0 ) 404 404 goto div0; 405 orResult( OT_INTEGER, orInt(a ) / orInt(b) );405 orResult( OT_INTEGER, orInt(a1) / orInt(b) ); 406 406 return; 407 407 } … … 410 410 if( orDecimal(b) == 0.0 ) 411 411 goto div0; 412 orResultDECIMAL( (double) orInt(a ) / orDecimal(b) );412 orResultDECIMAL( (double) orInt(a1) / orDecimal(b) ); 413 413 return; 414 414 } … … 425 425 if( b->tuple[i] == 0 ) 426 426 goto div0; 427 tmp = orInt(a ) / b->tuple[i];427 tmp = orInt(a1) / b->tuple[i]; 428 428 res->tuple[i] = orToByteRange(tmp); 429 429 } … … 433 433 } 434 434 #endif 435 a = b;436 } 437 else if( orIs(a , OT_DECIMAL) )435 a1 = b; 436 } 437 else if( orIs(a1, OT_DECIMAL) ) 438 438 { 439 439 if( orIs(b, OT_INTEGER) ) … … 441 441 if( orInt(b) == 0 ) 442 442 goto div0; 443 orResultDECIMAL( orDecimal(a ) / (double) orInt(b) );443 orResultDECIMAL( orDecimal(a1) / (double) orInt(b) ); 444 444 return; 445 445 } … … 448 448 if( orDecimal(b) == 0.0 ) 449 449 goto div0; 450 orResultDECIMAL( orDecimal(a ) / orDecimal(b) );450 orResultDECIMAL( orDecimal(a1) / orDecimal(b) ); 451 451 return; 452 452 } … … 463 463 if( b->tuple[i] == 0 ) 464 464 goto div0; 465 tmp = (int) orDecimal(a ) / b->tuple[i];465 tmp = (int) orDecimal(a1) / b->tuple[i]; 466 466 res->tuple[i] = orToByteRange(tmp); 467 467 } … … 471 471 } 472 472 #endif 473 a = b;474 } 475 else if( orIs(a , OT_TUPLE) )473 a1 = b; 474 } 475 else if( orIs(a1, OT_TUPLE) ) 476 476 { 477 477 if( orIs(b, OT_TUPLE) ) … … 480 480 OValue* res; 481 481 482 res = a ;482 res = a1; 483 483 484 res->argc = a ->argc > b->argc ? a->argc : b->argc;484 res->argc = a1->argc > b->argc ? a1->argc : b->argc; 485 485 for( i = 0; i < res->argc; i++ ) 486 486 { 487 487 if( b->tuple[i] == 0 ) 488 488 goto div0; 489 tmp = a ->tuple[i] / b->tuple[i];489 tmp = a1->tuple[i] / b->tuple[i]; 490 490 res->tuple[i] = orToByteRange(tmp); 491 491 } … … 497 497 OValue *res; 498 498 499 res = a ;499 res = a1; 500 500 501 501 for( i = 0; i < res->argc; i++ ) … … 503 503 if( orInt(b) == 0 ) 504 504 goto div0; 505 tmp = a ->tuple[i] / orInt(b);505 tmp = a1->tuple[i] / orInt(b); 506 506 res->tuple[i] = orToByteRange(tmp); 507 507 } … … 513 513 OValue *res; 514 514 515 res = a ;515 res = a1; 516 516 517 517 for( i = 0; i < res->argc; i++ ) … … 519 519 if( orDecimal(b) == 0 ) 520 520 goto div0; 521 tmp = a ->tuple[i] / (int) orDecimal(b);521 tmp = a1->tuple[i] / (int) orDecimal(b); 522 522 res->tuple[i] = orToByteRange(tmp); 523 523 } 524 524 return; 525 525 } 526 a = b;527 } 528 orErrorOp( "/", a );526 a1 = b; 527 } 528 orErrorOp( "/", a1 ); 529 529 return; 530 530 … … 609 609 610 610 611 void orOpGreater( OValue* a )612 { 613 OValue* b = a + 1;614 switch( compareValue( a , b ) )611 void orOpGreater( OValue* a1 ) 612 { 613 OValue* b = a1 + 1; 614 switch( compareValue( a1, b ) ) 615 615 { 616 616 case CMP_LESS: … … 622 622 break; 623 623 case CMP_ERROR_B: 624 a = b;624 a1 = b; 625 625 case CMP_ERROR_A: 626 orErrorOp( ">", a );626 orErrorOp( ">", a1 ); 627 627 break; 628 628 } … … 630 630 631 631 632 void orOpLess( OValue* a )633 { 634 OValue* b = a + 1;635 switch( compareValue( a , b ) )632 void orOpLess( OValue* a1 ) 633 { 634 OValue* b = a1 + 1; 635 switch( compareValue( a1, b ) ) 636 636 { 637 637 case CMP_LESS: … … 643 643 break; 644 644 case CMP_ERROR_B: 645 a = b;645 a1 = b; 646 646 case CMP_ERROR_A: 647 orErrorOp( "<", a );647 orErrorOp( "<", a1 ); 648 648 break; 649 649 } … …
