Processing sharing of sysmodule parameter
@@ -421,6 +421,42 @@ | ||
421 | 421 | return 1; |
422 | 422 | } |
423 | 423 | |
424 | +int Parm3(Context* cx, Node* goalscar, List* module, const char* msg1, | |
425 | + const char* msg2, Node* &parm1, Node* &parm2, Node* &parm3) | |
426 | +{ | |
427 | + Node* g = goalscar->Cdr(); | |
428 | + if (ListLength(g) != 3) { | |
429 | + syserr(msg1); | |
430 | + return 0; | |
431 | + } | |
432 | + | |
433 | + parm1 = g->Car()->Val(); | |
434 | + int rn; | |
435 | + | |
436 | + if ((rn = FuncArg(cx, parm1, goalscar, module)) <= 0) { | |
437 | + syserr(msg2); | |
438 | + return 0; | |
439 | + } | |
440 | + | |
441 | + g = g->Cdr(); | |
442 | + parm2 = g->Car()->Val(); | |
443 | + | |
444 | + if ((rn = FuncArg(cx, parm2, goalscar, module)) <= 0) { | |
445 | + syserr(msg2); | |
446 | + return 0; | |
447 | + } | |
448 | + | |
449 | + g = g->Cdr(); | |
450 | + parm3 = g->Car()->Val(); | |
451 | + | |
452 | + if ((rn = FuncArg(cx, parm3, goalscar, module)) <= 0) { | |
453 | + syserr(msg2); | |
454 | + return 0; | |
455 | + } | |
456 | + | |
457 | + return 1; | |
458 | +} | |
459 | + | |
424 | 460 | int sysmodule(Context* cx, Node* goalscar, Node* goalscdr, |
425 | 461 | Node* goals, List* module, int& r) |
426 | 462 | { |
@@ -3815,49 +3851,33 @@ | ||
3815 | 3851 | { |
3816 | 3852 | Node* env; |
3817 | 3853 | |
3818 | - if (ListLength(goalscar->Cdr()) != 3) { | |
3819 | - syserr("usage : <leftstr VAR STRING NUM>\n"); | |
3820 | - return 0; | |
3854 | + Node* nvar = Nil; | |
3855 | + Node* nstr = Nil; | |
3856 | + Node* nn = Nil; | |
3857 | + if (!Parm3(cx, goalscar, module, "usage : <leftstr VAR STRING NUM>\n", | |
3858 | + "leftstr: failed in the evaluation of the argument. \n", | |
3859 | + nvar, nstr, nn)) { | |
3860 | + return 0; | |
3821 | 3861 | } |
3822 | 3862 | |
3823 | - Node* nvar = goalscar->Cdr()->Car()->Val(); | |
3824 | - Node* nstr = goalscar->Cdr()->Cdr()->Car()->Val(); | |
3825 | - Node* nn = goalscar->Cdr()->Cdr()->Cdr()->Car()->Val(); | |
3826 | - | |
3827 | - int rn; | |
3828 | - | |
3829 | - if ((rn = FuncArg(cx, nvar, goalscar, module)) <= 0) { | |
3830 | - syserr("leftstr: failed in the evaluation of the argument. \n"); | |
3831 | - return 0; | |
3832 | - } | |
3833 | - | |
3834 | 3863 | if (nvar->kind() != UNDEF) { |
3835 | 3864 | syserr("usage : <leftstr VAR STRING NUM>\n"); |
3836 | 3865 | return 0; |
3837 | 3866 | } |
3838 | 3867 | |
3839 | - if ((rn = FuncArg(cx, nstr, goalscar, module)) <= 0) { | |
3840 | - syserr("leftstr: failed in the evaluation of the argument. \n"); | |
3868 | + if (nstr->kind() != ATOM) { | |
3869 | + syserr("usage : <leftstr VAR STRING NUM>\n"); | |
3841 | 3870 | return 0; |
3842 | 3871 | } |
3843 | 3872 | |
3844 | - | |
3845 | - if (nstr->kind() != ATOM) { | |
3873 | + if (nn->kind() != ATOM) { | |
3846 | 3874 | syserr("usage : <leftstr VAR STRING NUM>\n"); |
3847 | 3875 | return 0; |
3848 | 3876 | } |
3877 | + | |
3849 | 3878 | std::string s; |
3850 | 3879 | ((Atom*)nstr)->toString(s); |
3851 | 3880 | |
3852 | - if ((rn = FuncArg(cx, nn, goalscar, module)) <= 0) { | |
3853 | - syserr("leftstr: failed in the evaluation of the argument. \n"); | |
3854 | - return 0; | |
3855 | - } | |
3856 | - | |
3857 | - if (nn->kind() != ATOM) { | |
3858 | - syserr("usage : <leftstr VAR STRING NUM>\n"); | |
3859 | - return 0; | |
3860 | - } | |
3861 | 3881 | long long n; |
3862 | 3882 | if (!((Atom*)nn)->toInt(n)) { |
3863 | 3883 | syserr("usage : <leftstr VAR STRING NUM>\n"); |
@@ -3900,48 +3920,33 @@ | ||
3900 | 3920 | { |
3901 | 3921 | Node* env; |
3902 | 3922 | |
3903 | - if (ListLength(goalscar->Cdr()) != 3) { | |
3904 | - syserr("usage : <rightstr VAR STRING NUM>\n"); | |
3905 | - return 0; | |
3923 | + Node* nvar = Nil; | |
3924 | + Node* nstr = Nil; | |
3925 | + Node* nn = Nil; | |
3926 | + if (!Parm3(cx, goalscar, module, "usage : <rightstr VAR STRING NUM>\n", | |
3927 | + "rightstr: failed in the evaluation of the argument. \n", | |
3928 | + nvar, nstr, nn)) { | |
3929 | + return 0; | |
3906 | 3930 | } |
3907 | 3931 | |
3908 | - Node* nvar = goalscar->Cdr()->Car()->Val(); | |
3909 | - Node* nstr = goalscar->Cdr()->Cdr()->Car()->Val(); | |
3910 | - Node* nn = goalscar->Cdr()->Cdr()->Cdr()->Car()->Val(); | |
3911 | - | |
3912 | - int rn; | |
3913 | - | |
3914 | - if ((rn = FuncArg(cx, nvar, goalscar, module)) <= 0) { | |
3915 | - syserr("rightstr: failed in the evaluation of the argument. \n"); | |
3916 | - return 0; | |
3917 | - } | |
3918 | - | |
3919 | 3932 | if (nvar->kind() != UNDEF) { |
3920 | 3933 | syserr("usage : <rightstr VAR STRING NUM>\n"); |
3921 | 3934 | return 0; |
3922 | 3935 | } |
3923 | 3936 | |
3924 | - if ((rn = FuncArg(cx, nstr, goalscar, module)) <= 0) { | |
3925 | - syserr("rightstr: failed in the evaluation of the argument. \n"); | |
3926 | - return 0; | |
3927 | - } | |
3928 | - | |
3929 | 3937 | if (nstr->kind() != ATOM) { |
3930 | 3938 | syserr("usage : <rightstr VAR STRING NUM>\n"); |
3931 | 3939 | return 0; |
3932 | 3940 | } |
3933 | - std::string s; | |
3934 | - ((Atom*)nstr)->toString(s); | |
3935 | 3941 | |
3936 | - if ((rn = FuncArg(cx, nn, goalscar, module)) <= 0) { | |
3937 | - syserr("rightstr: failed in the evaluation of the argument. \n"); | |
3938 | - return 0; | |
3939 | - } | |
3940 | - | |
3941 | 3942 | if (nn->kind() != ATOM) { |
3942 | 3943 | syserr("usage : <rightstr VAR STRING NUM>\n"); |
3943 | 3944 | return 0; |
3944 | 3945 | } |
3946 | + | |
3947 | + std::string s; | |
3948 | + ((Atom*)nstr)->toString(s); | |
3949 | + | |
3945 | 3950 | long long n; |
3946 | 3951 | if (!((Atom*)nn)->toInt(n)) { |
3947 | 3952 | syserr("usage : <rightstr VAR STRING NUM>\n"); |
@@ -4491,50 +4496,32 @@ | ||
4491 | 4496 | |
4492 | 4497 | int And(Context* cx, Node* goalscar, List* module) |
4493 | 4498 | { |
4494 | - if (ListLength(goalscar->Cdr()) != 3) { | |
4495 | - syserr("usage : <bitand VAR NUM1 NUM2>\n"); | |
4496 | - return 0; | |
4499 | + Node* nvar = Nil; | |
4500 | + Node* n1 = Nil; | |
4501 | + Node* n2 = Nil; | |
4502 | + if (!Parm3(cx, goalscar, module, "usage : <bitand VAR NUM1 NUM2>\n", | |
4503 | + "bitand: failed in the evaluation of the argument. \n", | |
4504 | + nvar, n1, n2)) { | |
4505 | + return 0; | |
4497 | 4506 | } |
4498 | 4507 | |
4499 | - Node* g = goalscar->Cdr()->Val(); | |
4500 | - Node* nvar = g->Car()->Val(); | |
4501 | - Node* n1 = g->Cdr()->Car()->Val(); | |
4502 | - Node* n2 = g->Cdr()->Cdr()->Car()->Val(); | |
4503 | - long long nn1, nn2; | |
4504 | - | |
4505 | - int rn; | |
4506 | - | |
4507 | - if ((rn = FuncArg(cx, nvar, goalscar, module)) <= 0) { | |
4508 | - syserr("bitand: failed in the evaluation of the argument. \n"); | |
4509 | - return 0; | |
4510 | - } | |
4511 | - | |
4512 | 4508 | if (nvar->kind() != UNDEF) { |
4513 | 4509 | syserr("usage : <bitand VAR NUM1 NUM2>\n"); |
4514 | 4510 | return 0; |
4515 | 4511 | } |
4516 | 4512 | |
4517 | - if ((rn = FuncArg(cx, n1, goalscar, module)) <= 0) { | |
4518 | - syserr("bitand: failed in the evaluation of the argument. \n"); | |
4519 | - return 0; | |
4520 | - } | |
4521 | - | |
4522 | 4513 | if (n1->kind() != ATOM) { |
4523 | 4514 | syserr("usage : <bitand VAR NUM1 NUM2>\n"); |
4524 | 4515 | return 0; |
4525 | 4516 | } |
4526 | 4517 | |
4527 | - if (!((Atom*)n1)->toInt(nn1)) { | |
4518 | + if (n2->kind() != ATOM) { | |
4528 | 4519 | syserr("usage : <bitand VAR NUM1 NUM2>\n"); |
4529 | 4520 | return 0; |
4530 | 4521 | } |
4531 | 4522 | |
4532 | - if ((rn = FuncArg(cx, n2, goalscar, module)) <= 0) { | |
4533 | - syserr("bitand: failed in the evaluation of the argument. \n"); | |
4534 | - return 0; | |
4535 | - } | |
4536 | - | |
4537 | - if (n2->kind() != ATOM) { | |
4523 | + long long nn1, nn2; | |
4524 | + if (!((Atom*)n1)->toInt(nn1)) { | |
4538 | 4525 | syserr("usage : <bitand VAR NUM1 NUM2>\n"); |
4539 | 4526 | return 0; |
4540 | 4527 | } |
@@ -4546,14 +4533,7 @@ | ||
4546 | 4533 | |
4547 | 4534 | Node* env = Nil->Cons(Nil); |
4548 | 4535 | |
4549 | - long long nn3; | |
4550 | - if (nn1 != 1) { | |
4551 | - nn3 = -1; | |
4552 | - } else if (nn2 != 1) { | |
4553 | - nn3 = -1; | |
4554 | - } else { | |
4555 | - nn3 = 1; | |
4556 | - } | |
4536 | + long long nn3 = nn1 & nn2; | |
4557 | 4537 | |
4558 | 4538 | SetEnv(env, nvar); |
4559 | 4539 | ((Undef*)nvar)->Set(mka(nn3)); |
@@ -4565,50 +4545,32 @@ | ||
4565 | 4545 | |
4566 | 4546 | int Or(Context* cx, Node* goalscar, List* module) |
4567 | 4547 | { |
4568 | - if (ListLength(goalscar->Cdr()) != 3) { | |
4569 | - syserr("usage : <bitor VAR NUM1 NUM2>\n"); | |
4570 | - return 0; | |
4548 | + Node* nvar = Nil; | |
4549 | + Node* n1 = Nil; | |
4550 | + Node* n2 = Nil; | |
4551 | + if (!Parm3(cx, goalscar, module, "usage : <bitor VAR NUM1 NUM2>\n", | |
4552 | + "bitor: failed in the evaluation of the argument. \n", | |
4553 | + nvar, n1, n2)) { | |
4554 | + return 0; | |
4571 | 4555 | } |
4572 | 4556 | |
4573 | - Node* g = goalscar->Cdr()->Val(); | |
4574 | - Node* nvar = g->Car()->Val(); | |
4575 | - Node* n1 = g->Cdr()->Car()->Val(); | |
4576 | - Node* n2 = g->Cdr()->Cdr()->Car()->Val(); | |
4577 | - long long nn1, nn2; | |
4578 | - int rn; | |
4579 | - | |
4580 | - if ((rn = FuncArg(cx, nvar, goalscar, module)) <= 0) { | |
4581 | - syserr("bitor: failed in the evaluation of the argument. \n"); | |
4582 | - return 0; | |
4583 | - } | |
4584 | - | |
4585 | 4557 | if (nvar->kind() != UNDEF) { |
4586 | 4558 | syserr("usage : <bitor VAR NUM1 NUM2>\n"); |
4587 | 4559 | return 0; |
4588 | 4560 | } |
4589 | 4561 | |
4590 | - | |
4591 | - if ((rn = FuncArg(cx, n1, goalscar, module)) <= 0) { | |
4592 | - syserr("bitor: failed in the evaluation of the argument. \n"); | |
4593 | - return 0; | |
4594 | - } | |
4595 | - | |
4596 | 4562 | if (n1->kind() != ATOM) { |
4597 | 4563 | syserr("usage : <bitor VAR NUM1 NUM2>\n"); |
4598 | 4564 | return 0; |
4599 | 4565 | } |
4600 | 4566 | |
4601 | - if (!((Atom*)n1)->toInt(nn1)) { | |
4567 | + if (n2->kind() != ATOM) { | |
4602 | 4568 | syserr("usage : <bitor VAR NUM1 NUM2>\n"); |
4603 | 4569 | return 0; |
4604 | 4570 | } |
4605 | 4571 | |
4606 | - if ((rn = FuncArg(cx, n2, goalscar, module)) <= 0) { | |
4607 | - syserr("bitor: failed in the evaluation of the argument. \n"); | |
4608 | - return 0; | |
4609 | - } | |
4610 | - | |
4611 | - if (n2->kind() != ATOM) { | |
4572 | + long long nn1, nn2; | |
4573 | + if (!((Atom*)n1)->toInt(nn1)) { | |
4612 | 4574 | syserr("usage : <bitor VAR NUM1 NUM2>\n"); |
4613 | 4575 | return 0; |
4614 | 4576 | } |
@@ -4618,14 +4580,7 @@ | ||
4618 | 4580 | return 0; |
4619 | 4581 | } |
4620 | 4582 | |
4621 | - long long nn3; | |
4622 | - if (nn1 == 1) { | |
4623 | - nn3 = 1; | |
4624 | - } else if (nn2 == 1) { | |
4625 | - nn3 = 1; | |
4626 | - } else { | |
4627 | - nn3 = -1; | |
4628 | - } | |
4583 | + long long nn3 = nn1 | nn2; | |
4629 | 4584 | |
4630 | 4585 | Node* env = Nil->Cons(Nil); |
4631 | 4586 |
@@ -4639,50 +4594,32 @@ | ||
4639 | 4594 | |
4640 | 4595 | int Xor(Context* cx, Node* goalscar, List* module) |
4641 | 4596 | { |
4642 | - if (ListLength(goalscar->Cdr()) != 3) { | |
4643 | - syserr("usage : <bitxor VAR NUM1 NUM2>\n"); | |
4644 | - return 0; | |
4597 | + Node* nvar = Nil; | |
4598 | + Node* n1 = Nil; | |
4599 | + Node* n2 = Nil; | |
4600 | + if (!Parm3(cx, goalscar, module, "usage : <bitxor VAR NUM1 NUM2>\n", | |
4601 | + "bitxor: failed in the evaluation of the argument. \n", | |
4602 | + nvar, n1, n2)) { | |
4603 | + return 0; | |
4645 | 4604 | } |
4646 | 4605 | |
4647 | - Node* g = goalscar->Cdr()->Val(); | |
4648 | - Node* nvar = g->Car()->Val(); | |
4649 | - Node* n1 = g->Cdr()->Car()->Val(); | |
4650 | - Node* n2 = g->Cdr()->Cdr()->Car()->Val(); | |
4651 | - long long nn1, nn2, nn3; | |
4652 | - | |
4653 | - int rn; | |
4654 | - | |
4655 | - if ((rn = FuncArg(cx, nvar, goalscar, module)) <= 0) { | |
4656 | - syserr("bitxor: failed in the evaluation of the argument. \n"); | |
4657 | - return 0; | |
4658 | - } | |
4659 | - | |
4660 | 4606 | if (nvar->kind() != UNDEF) { |
4661 | 4607 | syserr("usage : <bitxor VAR NUM1 NUM2>\n"); |
4662 | 4608 | return 0; |
4663 | 4609 | } |
4664 | 4610 | |
4665 | - if ((rn = FuncArg(cx, n1, goalscar, module)) <= 0) { | |
4666 | - syserr("bitxor: failed in the evaluation of the argument. \n"); | |
4667 | - return 0; | |
4668 | - } | |
4669 | - | |
4670 | 4611 | if (n1->kind() != ATOM) { |
4671 | 4612 | syserr("usage : <bitxor VAR NUM1 NUM2>\n"); |
4672 | 4613 | return 0; |
4673 | 4614 | } |
4674 | 4615 | |
4675 | - if (!((Atom*)n1)->toInt(nn1)) { | |
4616 | + if (n2->kind() != ATOM) { | |
4676 | 4617 | syserr("usage : <bitxor VAR NUM1 NUM2>\n"); |
4677 | 4618 | return 0; |
4678 | 4619 | } |
4679 | 4620 | |
4680 | - if ((rn = FuncArg(cx, n2, goalscar, module)) <= 0) { | |
4681 | - syserr("bitxor: failed in the evaluation of the argument. \n"); | |
4682 | - return 0; | |
4683 | - } | |
4684 | - | |
4685 | - if (n2->kind() != ATOM) { | |
4621 | + long long nn1, nn2; | |
4622 | + if (!((Atom*)n1)->toInt(nn1)) { | |
4686 | 4623 | syserr("usage : <bitxor VAR NUM1 NUM2>\n"); |
4687 | 4624 | return 0; |
4688 | 4625 | } |
@@ -4692,15 +4629,7 @@ | ||
4692 | 4629 | return 0; |
4693 | 4630 | } |
4694 | 4631 | |
4695 | - if ((nn1 == 1) && (nn2 == 1)){ | |
4696 | - nn3 = -1; | |
4697 | - } else if (nn1 == 1) { | |
4698 | - nn3 = 1; | |
4699 | - } else if (nn2 == 1) { | |
4700 | - nn3 = 1; | |
4701 | - } else { | |
4702 | - nn3 = -1; | |
4703 | - } | |
4632 | + long long nn3 = nn1 ^ nn2; | |
4704 | 4633 | |
4705 | 4634 | Node* env = Nil->Cons(Nil); |
4706 | 4635 |
@@ -4751,50 +4680,32 @@ | ||
4751 | 4680 | |
4752 | 4681 | int ShiftL(Context* cx, Node* goalscar, List* module) |
4753 | 4682 | { |
4754 | - if (ListLength(goalscar->Cdr()) != 3) { | |
4755 | - syserr("usage : <shiftl VAR NUM SHIFT>\n"); | |
4756 | - return 0; | |
4683 | + Node* nvar = Nil; | |
4684 | + Node* n1 = Nil; | |
4685 | + Node* nsft = Nil; | |
4686 | + if (!Parm3(cx, goalscar, module, "usage : <shiftl VAR NUM SHIFT>\n", | |
4687 | + "shiftl: failed in the evaluation of the argument. \n", | |
4688 | + nvar, n1, nsft)) { | |
4689 | + return 0; | |
4757 | 4690 | } |
4758 | 4691 | |
4759 | - Node* g = goalscar->Cdr()->Val(); | |
4760 | - Node* nvar = g->Car()->Val(); | |
4761 | - Node* n1 = g->Cdr()->Car()->Val(); | |
4762 | - Node* nsft = g->Cdr()->Cdr()->Car()->Val(); | |
4763 | - long long nn1, nnsft; | |
4764 | - | |
4765 | - int rn; | |
4766 | - | |
4767 | - if ((rn = FuncArg(cx, nvar, goalscar, module)) <= 0) { | |
4768 | - syserr("shiftl: failed in the evaluation of the argument. \n"); | |
4769 | - return 0; | |
4770 | - } | |
4771 | - | |
4772 | 4692 | if (nvar->kind() != UNDEF) { |
4773 | 4693 | syserr("usage : <shiftl VAR NUM SHIFT>\n"); |
4774 | 4694 | return 0; |
4775 | 4695 | } |
4776 | 4696 | |
4777 | - if ((rn = FuncArg(cx, n1, goalscar, module)) <= 0) { | |
4778 | - syserr("shiftl: failed in the evaluation of the argument. \n"); | |
4779 | - return 0; | |
4780 | - } | |
4781 | - | |
4782 | 4697 | if (n1->kind() != ATOM) { |
4783 | 4698 | syserr("usage : <shiftl VAR NUM SHIFT>\n"); |
4784 | 4699 | return 0; |
4785 | 4700 | } |
4786 | 4701 | |
4787 | - if (!((Atom*)n1)->toInt(nn1)) { | |
4702 | + if (nsft->kind() != ATOM) { | |
4788 | 4703 | syserr("usage : <shiftl VAR NUM SHIFT>\n"); |
4789 | 4704 | return 0; |
4790 | 4705 | } |
4791 | 4706 | |
4792 | - if ((rn = FuncArg(cx, nsft, goalscar, module)) <= 0) { | |
4793 | - syserr("shiftl: failed in the evaluation of the argument. \n"); | |
4794 | - return 0; | |
4795 | - } | |
4796 | - | |
4797 | - if (nsft->kind() != ATOM) { | |
4707 | + long long nn1, nnsft; | |
4708 | + if (!((Atom*)n1)->toInt(nn1)) { | |
4798 | 4709 | syserr("usage : <shiftl VAR NUM SHIFT>\n"); |
4799 | 4710 | return 0; |
4800 | 4711 | } |
@@ -4815,50 +4726,32 @@ | ||
4815 | 4726 | |
4816 | 4727 | int ShiftR(Context* cx, Node* goalscar, List* module) |
4817 | 4728 | { |
4818 | - if (ListLength(goalscar->Cdr()) != 3) { | |
4819 | - syserr("usage : <shiftr VAR NUM SHIFT>\n"); | |
4820 | - return 0; | |
4729 | + Node* nvar = Nil; | |
4730 | + Node* n1 = Nil; | |
4731 | + Node* nsft = Nil; | |
4732 | + if (!Parm3(cx, goalscar, module, "usage : <shiftr VAR NUM SHIFT>\n", | |
4733 | + "shiftr: failed in the evaluation of the argument. \n", | |
4734 | + nvar, n1, nsft)) { | |
4735 | + return 0; | |
4821 | 4736 | } |
4822 | 4737 | |
4823 | - Node* g = goalscar->Cdr()->Val(); | |
4824 | - Node* nvar = g->Car()->Val(); | |
4825 | - Node* n1 = g->Cdr()->Car()->Val(); | |
4826 | - Node* nsft = g->Cdr()->Cdr()->Car()->Val(); | |
4827 | - long long nn1, nnsft; | |
4828 | - int rn; | |
4829 | - | |
4830 | - if ((rn = FuncArg(cx, nvar, goalscar, module)) <= 0) { | |
4831 | - syserr("shiftr: failed in the evaluation of the argument. \n"); | |
4832 | - return 0; | |
4833 | - } | |
4834 | - | |
4835 | - | |
4836 | 4738 | if (nvar->kind() != UNDEF) { |
4837 | 4739 | syserr("usage : <shiftr VAR NUM SHIFT>\n"); |
4838 | 4740 | return 0; |
4839 | 4741 | } |
4840 | 4742 | |
4841 | - if ((rn = FuncArg(cx, n1, goalscar, module)) <= 0) { | |
4842 | - syserr("shiftr: failed in the evaluation of the argument. \n"); | |
4843 | - return 0; | |
4844 | - } | |
4845 | - | |
4846 | 4743 | if (n1->kind() != ATOM) { |
4847 | 4744 | syserr("usage : <shiftr VAR NUM SHIFT>\n"); |
4848 | 4745 | return 0; |
4849 | 4746 | } |
4850 | 4747 | |
4851 | - if (!((Atom*)n1)->toInt(nn1)) { | |
4748 | + if (nsft->kind() != ATOM) { | |
4852 | 4749 | syserr("usage : <shiftr VAR NUM SHIFT>\n"); |
4853 | 4750 | return 0; |
4854 | 4751 | } |
4855 | 4752 | |
4856 | - if ((rn = FuncArg(cx, nsft, goalscar, module)) <= 0) { | |
4857 | - syserr("shiftr: failed in the evaluation of the argument. \n"); | |
4858 | - return 0; | |
4859 | - } | |
4860 | - | |
4861 | - if (nsft->kind() != ATOM) { | |
4753 | + long long nn1, nnsft; | |
4754 | + if (!((Atom*)n1)->toInt(nn1)) { | |
4862 | 4755 | syserr("usage : <shiftr VAR NUM SHIFT>\n"); |
4863 | 4756 | return 0; |
4864 | 4757 | } |