2 Copyright (C) 2006-2008, The Perl Foundation.
7 pmc/wmlsboolean.pmc - WMLScript Boolean
11 C<WmlsBoolean> extends C<Boolean> to provide a class with the behaviour of
12 the WMLScript C<Boolean> type.
22 #include "parrot/embed.h"
23 #include "pmc_wmlsstring.h"
25 static INTVAL dynpmc_WmlsBoolean;
26 static INTVAL dynpmc_WmlsFloat;
27 static INTVAL dynpmc_WmlsInteger;
28 static INTVAL dynpmc_WmlsInvalid;
29 static INTVAL dynpmc_WmlsString;
31 static inline INTVAL num_cmp(FLOATVAL v1, FLOATVAL v2)
44 static inline INTVAL int_cmp(INTVAL v1, INTVAL v2)
65 hll WMLScript maps Boolean {
67 /* Class initialization. Caches constant strings that will be used later.
71 dynpmc_WmlsBoolean = pmc_type(INTERP,
72 const_string(INTERP, "WmlsBoolean"));
73 dynpmc_WmlsFloat = pmc_type(INTERP,
74 const_string(INTERP, "WmlsFloat"));
75 dynpmc_WmlsInteger = pmc_type(INTERP,
76 const_string(INTERP, "WmlsInteger"));
77 dynpmc_WmlsInvalid = pmc_type(INTERP,
78 const_string(INTERP, "WmlsInvalid"));
79 dynpmc_WmlsString = pmc_type(INTERP,
80 const_string(INTERP, "WmlsString"));
86 =item C<PMC* get_class()>
94 PMC* retval = pmc_new(interp, dynpmc_WmlsInteger);
95 PMC_int_val(retval) = 3;
101 =item C<STRING* get_string()>
103 Return the string "true" or "false".
108 STRING* get_string() {
109 if (PMC_int_val(SELF))
110 return const_string(INTERP, "true");
112 return const_string(INTERP, "false");
117 =item C<void increment()>
123 const INTVAL a = SELF.get_integer();
124 SELF.morph(dynpmc_WmlsInteger);
125 SELF.set_integer_native(a);
131 =item C<void decrement()>
137 const INTVAL a = SELF.get_integer();
138 SELF.morph(dynpmc_WmlsInteger);
139 SELF.set_integer_native(a);
145 =item C<PMC* absolute(PMC *dest)>
147 =item C<void i_absolute()>
152 PMC* absolute(PMC* dest) {
153 return pmc_new(INTERP, dynpmc_WmlsInvalid);
157 SELF.morph(dynpmc_WmlsInvalid);
162 =item C<PMC* neg(PMC *dest)>
164 =item C<void i_neg()>
169 PMC* neg(PMC* dest) {
170 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
171 PMC_int_val(dest) = - SELF.get_bool();
176 INTVAL result = - SELF.get_bool();
177 SELF.morph(dynpmc_WmlsInteger);
178 SELF.set_integer_native(result);
183 =item C<PMC* bitwise_not(PMC *dest)>
185 =item C<void i_bitwise_not()>
190 PMC* bitwise_not(PMC* dest) {
191 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
192 PMC_int_val(dest) = ~ SELF.get_bool();
196 void i_bitwise_not() {
197 INTVAL result = ~ SELF.get_bool();
198 SELF.morph(dynpmc_WmlsInteger);
199 SELF.set_integer_native(result);
204 =item C<PMC* logical_not(PMC *dest)>
206 =item C<void i_logical_not()>
211 PMC* logical_not(PMC* dest) {
212 dest = pmc_new(INTERP, dynpmc_WmlsBoolean);
213 VTABLE_set_bool(INTERP, dest, ! SELF.get_bool());
217 void i_logical_not() {
218 INTVAL result = ! SELF.get_bool();
219 SELF.set_integer_native(result);
226 =head2 non-Vtable Methods
230 =item C<void add(PMC *value, PMC *dest)>
232 =item C<void i_add(PMC *value)>
237 PMC* add(PMC* value, PMC* dest) {
239 INTVAL result = SELF.get_integer()
240 + VTABLE_get_integer(INTERP, value);
241 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
242 VTABLE_set_integer_native(INTERP, dest, result);
246 INTVAL result = SELF.get_integer()
247 + VTABLE_get_integer(INTERP, value);
248 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
249 VTABLE_set_integer_native(INTERP, dest, result);
253 FLOATVAL result = SELF.get_number()
254 + VTABLE_get_number(INTERP, value);
255 dest = pmc_new(INTERP, dynpmc_WmlsFloat);
256 VTABLE_set_number_native(INTERP, dest, result);
260 STRING* result = string_concat(INTERP,
262 VTABLE_get_string(INTERP, value), 0);
263 dest = pmc_new(INTERP, dynpmc_WmlsString);
264 VTABLE_set_string_native(INTERP, dest, result);
268 return pmc_new(INTERP, dynpmc_WmlsInvalid);
272 void i_add(PMC* value) {
274 INTVAL result = SELF.get_integer()
275 + VTABLE_get_integer(INTERP, value);
276 SELF.morph(dynpmc_WmlsInteger);
277 SELF.set_integer_native(result);
280 INTVAL result = SELF.get_integer()
281 + VTABLE_get_integer(INTERP, value);
282 SELF.morph(dynpmc_WmlsInteger);
283 SELF.set_integer_native(result);
286 FLOATVAL result = SELF.get_number()
287 + VTABLE_get_number(INTERP, value);
288 SELF.morph(dynpmc_WmlsFloat);
289 SELF.set_number_native(result);
292 STRING* result = string_concat(INTERP,
294 VTABLE_get_string(INTERP, value), 0);
295 SELF.morph(dynpmc_WmlsString);
296 SELF.set_string_native(result);
299 SELF.morph(dynpmc_WmlsInvalid);
305 =item C<PMC* subtract(PMC *value, PMC *dest)>
307 =item C<void i_subtract(PMC *value)>
312 PMC* subtract(PMC* value, PMC* dest) {
314 INTVAL result = SELF.get_integer()
315 - VTABLE_get_integer(INTERP, value);
316 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
317 VTABLE_set_integer_native(INTERP, dest, result);
321 INTVAL result = SELF.get_integer()
322 - VTABLE_get_integer(INTERP, value);
323 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
324 VTABLE_set_integer_native(INTERP, dest, result);
328 FLOATVAL result = SELF.get_number()
329 - VTABLE_get_number(INTERP, value);
330 dest = pmc_new(INTERP, dynpmc_WmlsFloat);
331 VTABLE_set_number_native(INTERP, dest, result);
336 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
339 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
340 INTVAL result = SELF.get_integer()
341 - VTABLE_get_integer(INTERP, trans);
342 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
343 VTABLE_set_integer_native(INTERP, dest, result);
346 return pmc_new(INTERP, dynpmc_WmlsInvalid);
349 return pmc_new(INTERP, dynpmc_WmlsInvalid);
353 void i_subtract(PMC* value) {
355 INTVAL result = SELF.get_integer()
356 - VTABLE_get_integer(INTERP, value);
357 SELF.morph(dynpmc_WmlsInteger);
358 SELF.set_integer_native(result);
361 INTVAL result = SELF.get_integer()
362 - VTABLE_get_integer(INTERP, value);
363 SELF.morph(dynpmc_WmlsInteger);
364 SELF.set_integer_native(result);
367 FLOATVAL result = SELF.get_number()
368 - VTABLE_get_number(INTERP, value);
369 SELF.morph(dynpmc_WmlsFloat);
370 SELF.set_number_native(result);
374 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
377 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
378 INTVAL result = SELF.get_integer()
379 - VTABLE_get_integer(INTERP, trans);
380 SELF.morph(dynpmc_WmlsInteger);
381 SELF.set_integer_native(result);
384 SELF.morph(dynpmc_WmlsInvalid);
388 SELF.morph(dynpmc_WmlsInvalid);
394 =item C<PMC* multiply(PMC *value, PMC *dest)>
396 =item C<void i_multiply(PMC *value)>
401 PMC* multiply(PMC* value, PMC* dest) {
403 INTVAL result = SELF.get_integer()
404 * VTABLE_get_integer(INTERP, value);
405 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
406 VTABLE_set_integer_native(INTERP, dest, result);
410 INTVAL result = SELF.get_integer()
411 * VTABLE_get_integer(INTERP, value);
412 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
413 VTABLE_set_integer_native(INTERP, dest, result);
417 FLOATVAL result = SELF.get_number()
418 * VTABLE_get_number(INTERP, value);
419 dest = pmc_new(INTERP, dynpmc_WmlsFloat);
420 VTABLE_set_number_native(INTERP, dest, result);
425 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
428 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
429 INTVAL result = SELF.get_integer()
430 * VTABLE_get_integer(INTERP, trans);
431 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
432 VTABLE_set_integer_native(INTERP, dest, result);
435 return pmc_new(INTERP, dynpmc_WmlsInvalid);
438 return pmc_new(INTERP, dynpmc_WmlsInvalid);
442 void i_multiply(PMC* value) {
444 INTVAL result = SELF.get_integer()
445 * VTABLE_get_integer(INTERP, value);
446 SELF.morph(dynpmc_WmlsInteger);
447 SELF.set_integer_native(result);
450 INTVAL result = SELF.get_integer()
451 * VTABLE_get_integer(INTERP, value);
452 SELF.morph(dynpmc_WmlsInteger);
453 SELF.set_integer_native(result);
456 FLOATVAL result = SELF.get_number()
457 * VTABLE_get_number(INTERP, value);
458 SELF.morph(dynpmc_WmlsFloat);
459 SELF.set_number_native(result);
463 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
466 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
467 INTVAL result = SELF.get_integer()
468 * VTABLE_get_integer(INTERP, trans);
469 SELF.morph(dynpmc_WmlsInteger);
470 SELF.set_integer_native(result);
473 SELF.morph(dynpmc_WmlsInvalid);
477 SELF.morph(dynpmc_WmlsInvalid);
483 =item C<PMC* divide(PMC *value, PMC *dest)>
485 =item C<void i_divide(PMC *value)>
490 PMC* divide(PMC* value, PMC* dest) {
492 FLOATVAL d = VTABLE_get_number(INTERP, value);
494 FLOATVAL result = SELF.get_number() / d;
495 dest = pmc_new(INTERP, dynpmc_WmlsFloat);
496 VTABLE_set_number_native(INTERP, dest, result);
499 return pmc_new(INTERP, dynpmc_WmlsInvalid);
502 FLOATVAL d = VTABLE_get_number(INTERP, value);
504 FLOATVAL result = SELF.get_number() / d;
505 dest = pmc_new(INTERP, dynpmc_WmlsFloat);
506 VTABLE_set_number_native(INTERP, dest, result);
509 return pmc_new(INTERP, dynpmc_WmlsInvalid);
512 FLOATVAL d = VTABLE_get_number(INTERP, value);
514 FLOATVAL result = SELF.get_number() / d;
515 dest = pmc_new(INTERP, dynpmc_WmlsFloat);
516 VTABLE_set_number_native(INTERP, dest, result);
519 return pmc_new(INTERP, dynpmc_WmlsInvalid);
523 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
526 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
527 FLOATVAL d = VTABLE_get_number(INTERP, trans);
529 FLOATVAL result = SELF.get_number() / d;
530 dest = pmc_new(INTERP, dynpmc_WmlsFloat);
531 VTABLE_set_number_native(INTERP, dest, result);
535 return pmc_new(INTERP, dynpmc_WmlsInvalid);
538 return pmc_new(INTERP, dynpmc_WmlsInvalid);
542 void i_divide(PMC* value) {
544 FLOATVAL d = VTABLE_get_number(INTERP, value);
546 FLOATVAL result = SELF.get_number() / d;
547 SELF.morph(dynpmc_WmlsFloat);
548 SELF.set_number_native(result);
551 SELF.morph(dynpmc_WmlsInvalid);
555 FLOATVAL d = VTABLE_get_number(INTERP, value);
557 FLOATVAL result = SELF.get_number() / d;
558 SELF.morph(dynpmc_WmlsFloat);
559 SELF.set_number_native(result);
562 SELF.morph(dynpmc_WmlsInvalid);
566 FLOATVAL d = VTABLE_get_number(INTERP, value);
568 FLOATVAL result = SELF.get_number() / d;
569 SELF.morph(dynpmc_WmlsFloat);
570 SELF.set_number_native(result);
573 SELF.morph(dynpmc_WmlsInvalid);
578 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
581 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
582 FLOATVAL d = VTABLE_get_integer(INTERP, trans);
584 FLOATVAL result = SELF.get_number() / d;
585 SELF.morph(dynpmc_WmlsFloat);
586 SELF.set_number_native(result);
589 SELF.morph(dynpmc_WmlsInvalid);
593 SELF.morph(dynpmc_WmlsInvalid);
597 SELF.morph(dynpmc_WmlsInvalid);
603 =item C<PMC* floor_divide(PMC *value, PMC *dest)>
605 =item C<void i_floor_divide(PMC *value)>
610 PMC* floor_divide(PMC* value, PMC* dest) {
612 INTVAL d = VTABLE_get_integer(INTERP, value);
614 INTVAL result = SELF.get_integer() / d;
615 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
616 VTABLE_set_integer_native(INTERP, dest, result);
619 return pmc_new(INTERP, dynpmc_WmlsInvalid);
622 INTVAL d = VTABLE_get_integer(INTERP, value);
624 INTVAL result = SELF.get_integer() / d;
625 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
626 VTABLE_set_integer_native(INTERP, dest, result);
629 return pmc_new(INTERP, dynpmc_WmlsInvalid);
633 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
636 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
637 INTVAL d = VTABLE_get_integer(INTERP, trans);
639 INTVAL result = SELF.get_integer() / d;
640 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
641 VTABLE_set_integer_native(INTERP, dest, result);
645 return pmc_new(INTERP, dynpmc_WmlsInvalid);
648 return pmc_new(INTERP, dynpmc_WmlsInvalid);
652 void i_floor_divide(PMC* value) {
654 INTVAL d = VTABLE_get_integer(INTERP, value);
656 INTVAL result = SELF.get_integer() / d;
657 SELF.morph(dynpmc_WmlsInteger);
658 SELF.set_integer_native(result);
661 SELF.morph(dynpmc_WmlsInvalid);
665 INTVAL d = VTABLE_get_integer(INTERP, value);
667 INTVAL result = SELF.get_integer() / d;
668 SELF.morph(dynpmc_WmlsInteger);
669 SELF.set_integer_native(result);
672 SELF.morph(dynpmc_WmlsInvalid);
677 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
680 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
681 INTVAL d = VTABLE_get_integer(INTERP, trans);
683 INTVAL result = SELF.get_integer() / d;
684 SELF.morph(dynpmc_WmlsInteger);
685 SELF.set_integer_native(result);
688 SELF.morph(dynpmc_WmlsInvalid);
692 SELF.morph(dynpmc_WmlsInvalid);
696 SELF.morph(dynpmc_WmlsInvalid);
702 =item C<PMC* cmodulus(PMC *value, PMC *dest)>
704 =item C<void i_cmodulus(PMC *value)>
709 PMC* cmodulus(PMC* value, PMC* dest) {
711 INTVAL d = VTABLE_get_integer(INTERP, value);
713 INTVAL result = SELF.get_integer() % d;
714 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
715 VTABLE_set_integer_native(INTERP, dest, result);
718 return pmc_new(INTERP, dynpmc_WmlsInvalid);
721 INTVAL d = VTABLE_get_integer(INTERP, value);
723 INTVAL result = SELF.get_integer() % d;
724 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
725 VTABLE_set_integer_native(INTERP, dest, result);
728 return pmc_new(INTERP, dynpmc_WmlsInvalid);
732 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
735 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
736 INTVAL d = VTABLE_get_integer(INTERP, trans);
738 INTVAL result = SELF.get_integer() % d;
739 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
740 VTABLE_set_integer_native(INTERP, dest, result);
744 return pmc_new(INTERP, dynpmc_WmlsInvalid);
747 return pmc_new(INTERP, dynpmc_WmlsInvalid);
751 void i_cmodulus(PMC* value) {
753 INTVAL d = VTABLE_get_integer(INTERP, value);
755 INTVAL result = SELF.get_integer() % d;
756 SELF.morph(dynpmc_WmlsInteger);
757 SELF.set_integer_native(result);
760 SELF.morph(dynpmc_WmlsInvalid);
764 INTVAL d = VTABLE_get_integer(INTERP, value);
766 INTVAL result = SELF.get_integer() % d;
767 SELF.morph(dynpmc_WmlsInteger);
768 SELF.set_integer_native(result);
771 SELF.morph(dynpmc_WmlsInvalid);
776 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
779 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
780 INTVAL d = VTABLE_get_integer(INTERP, trans);
782 INTVAL result = SELF.get_integer() % d;
783 SELF.morph(dynpmc_WmlsInteger);
784 SELF.set_integer_native(result);
787 SELF.morph(dynpmc_WmlsInvalid);
791 SELF.morph(dynpmc_WmlsInvalid);
795 SELF.morph(dynpmc_WmlsInvalid);
801 =item C<PMC* bitwise_or(PMC *value, PMC *dest)>
803 =item C<void i_bitwise_or(PMC *value)>
808 PMC* bitwise_or(PMC* value, PMC* dest) {
810 INTVAL result = SELF.get_integer()
811 | VTABLE_get_integer(INTERP, value);
812 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
813 VTABLE_set_integer_native(INTERP, dest, result);
817 INTVAL result = SELF.get_integer()
818 | VTABLE_get_integer(INTERP, value);
819 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
820 VTABLE_set_integer_native(INTERP, dest, result);
825 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
828 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
829 INTVAL result = SELF.get_integer()
830 | VTABLE_get_integer(INTERP, trans);
831 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
832 VTABLE_set_integer_native(INTERP, dest, result);
835 return pmc_new(INTERP, dynpmc_WmlsInvalid);
838 return pmc_new(INTERP, dynpmc_WmlsInvalid);
842 void i_bitwise_or(PMC* value) {
844 INTVAL result = SELF.get_integer()
845 | VTABLE_get_integer(INTERP, value);
846 SELF.morph(dynpmc_WmlsInteger);
847 SELF.set_integer_native(result);
850 INTVAL result = SELF.get_integer()
851 | VTABLE_get_integer(INTERP, value);
852 SELF.morph(dynpmc_WmlsInteger);
853 SELF.set_integer_native(result);
857 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
860 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
861 INTVAL result = SELF.get_integer()
862 | VTABLE_get_integer(INTERP, trans);
863 SELF.morph(dynpmc_WmlsInteger);
864 SELF.set_integer_native(result);
867 SELF.morph(dynpmc_WmlsInvalid);
871 SELF.morph(dynpmc_WmlsInvalid);
877 =item C<PMC* bitwise_and(PMC *value, PMC *dest)>
879 =item C<void i_bitwise_and(PMC *value)>
884 PMC* bitwise_and(PMC* value, PMC* dest) {
886 INTVAL result = SELF.get_integer()
887 & VTABLE_get_integer(INTERP, value);
888 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
889 VTABLE_set_integer_native(INTERP, dest, result);
893 INTVAL result = SELF.get_integer()
894 & VTABLE_get_integer(INTERP, value);
895 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
896 VTABLE_set_integer_native(INTERP, dest, result);
901 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
904 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
905 INTVAL result = SELF.get_integer()
906 & VTABLE_get_integer(INTERP, trans);
907 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
908 VTABLE_set_integer_native(INTERP, dest, result);
911 return pmc_new(INTERP, dynpmc_WmlsInvalid);
914 return pmc_new(INTERP, dynpmc_WmlsInvalid);
918 void i_bitwise_and(PMC* value) {
920 INTVAL result = SELF.get_integer()
921 & VTABLE_get_integer(INTERP, value);
922 SELF.morph(dynpmc_WmlsInteger);
923 SELF.set_integer_native(result);
926 INTVAL result = SELF.get_integer()
927 & VTABLE_get_integer(INTERP, value);
928 SELF.morph(dynpmc_WmlsInteger);
929 SELF.set_integer_native(result);
933 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
936 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
937 INTVAL result = SELF.get_integer()
938 & VTABLE_get_integer(INTERP, trans);
939 SELF.morph(dynpmc_WmlsInteger);
940 SELF.set_integer_native(result);
943 SELF.morph(dynpmc_WmlsInvalid);
947 SELF.morph(dynpmc_WmlsInvalid);
953 =item C<void bitwise_xor(PMC *value, PMC *dest)>
955 =item C<void i_bitwise_xor(PMC *value)>
960 PMC* bitwise_xor(PMC* value, PMC* dest) {
962 INTVAL result = SELF.get_integer()
963 ^ VTABLE_get_integer(INTERP, value);
964 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
965 VTABLE_set_integer_native(INTERP, dest, result);
969 INTVAL result = SELF.get_integer()
970 ^ VTABLE_get_integer(INTERP, value);
971 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
972 VTABLE_set_integer_native(INTERP, dest, result);
977 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
980 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
981 INTVAL result = SELF.get_integer()
982 ^ VTABLE_get_integer(INTERP, trans);
983 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
984 VTABLE_set_integer_native(INTERP, dest, result);
987 return pmc_new(INTERP, dynpmc_WmlsInvalid);
990 return pmc_new(INTERP, dynpmc_WmlsInvalid);
994 void i_bitwise_xor(PMC* value) {
996 INTVAL result = SELF.get_integer()
997 ^ VTABLE_get_integer(INTERP, value);
998 SELF.morph(dynpmc_WmlsInteger);
999 SELF.set_integer_native(result);
1002 INTVAL result = SELF.get_integer()
1003 ^ VTABLE_get_integer(INTERP, value);
1004 SELF.morph(dynpmc_WmlsInteger);
1005 SELF.set_integer_native(result);
1009 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
1012 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
1013 INTVAL result = SELF.get_integer()
1014 ^ VTABLE_get_integer(INTERP, trans);
1015 SELF.morph(dynpmc_WmlsInteger);
1016 SELF.set_integer_native(result);
1019 SELF.morph(dynpmc_WmlsInvalid);
1023 SELF.morph(dynpmc_WmlsInvalid);
1029 =item C<PMC* bitwise_shr(PMC *value, PMC *dest)>
1031 =item C<void i_bitwise_shr(PMC *value)>
1036 PMC* bitwise_shr(PMC* value, PMC* dest) {
1038 INTVAL result = SELF.get_integer()
1039 >> VTABLE_get_integer(INTERP, value);
1040 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
1041 VTABLE_set_integer_native(INTERP, dest, result);
1045 INTVAL result = SELF.get_integer()
1046 >> VTABLE_get_integer(INTERP, value);
1047 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
1048 VTABLE_set_integer_native(INTERP, dest, result);
1053 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
1056 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
1057 INTVAL result = SELF.get_integer()
1058 >> VTABLE_get_integer(INTERP, trans);
1059 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
1060 VTABLE_set_integer_native(INTERP, dest, result);
1063 return pmc_new(INTERP, dynpmc_WmlsInvalid);
1066 return pmc_new(INTERP, dynpmc_WmlsInvalid);
1070 void i_bitwise_shr(PMC* value) {
1072 INTVAL result = SELF.get_integer()
1073 >> VTABLE_get_integer(INTERP, value);
1074 SELF.morph(dynpmc_WmlsInteger);
1075 SELF.set_integer_native(result);
1078 INTVAL result = SELF.get_integer()
1079 >> VTABLE_get_integer(INTERP, value);
1080 SELF.morph(dynpmc_WmlsInteger);
1081 SELF.set_integer_native(result);
1085 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
1088 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
1089 INTVAL result = SELF.get_integer()
1090 >> VTABLE_get_integer(INTERP, trans);
1091 SELF.morph(dynpmc_WmlsInteger);
1092 SELF.set_integer_native(result);
1095 SELF.morph(dynpmc_WmlsInvalid);
1099 SELF.morph(dynpmc_WmlsInvalid);
1105 =item C<PMC* bitwise_lsr(PMC *value, PMC *dest)>
1107 =item C<void i_bitwise_lsr(PMC *value)>
1112 PMC* bitwise_lsr(PMC* value, PMC* dest) {
1114 INTVAL result = SELF.get_integer()
1115 >> VTABLE_get_integer(INTERP, value);
1116 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
1117 VTABLE_set_integer_native(INTERP, dest, result);
1121 INTVAL result = SELF.get_integer()
1122 >> VTABLE_get_integer(INTERP, value);
1123 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
1124 VTABLE_set_integer_native(INTERP, dest, result);
1129 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
1132 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
1133 INTVAL result = SELF.get_integer()
1134 >> VTABLE_get_integer(INTERP, trans);
1135 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
1136 VTABLE_set_integer_native(INTERP, dest, result);
1139 return pmc_new(INTERP, dynpmc_WmlsInvalid);
1142 return pmc_new(INTERP, dynpmc_WmlsInvalid);
1146 void i_bitwise_lsr(PMC* value) {
1148 INTVAL result = SELF.get_integer()
1149 >> VTABLE_get_integer(INTERP, value);
1150 SELF.morph(dynpmc_WmlsInteger);
1151 SELF.set_integer_native(result);
1154 INTVAL result = SELF.get_integer()
1155 >> VTABLE_get_integer(INTERP, value);
1156 SELF.morph(dynpmc_WmlsInteger);
1157 SELF.set_integer_native(result);
1161 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
1164 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
1165 INTVAL result = SELF.get_integer()
1166 >> VTABLE_get_integer(INTERP, trans);
1167 SELF.morph(dynpmc_WmlsInteger);
1168 SELF.set_integer_native(result);
1171 SELF.morph(dynpmc_WmlsInvalid);
1175 SELF.morph(dynpmc_WmlsInvalid);
1181 =item C<PMC* bitwise_shl(PMC *value, PMC *dest)>
1183 =item C<void i_bitwise_shl(PMC *value)>
1188 PMC* bitwise_shl(PMC* value, PMC* dest) {
1190 INTVAL result = SELF.get_integer()
1191 << VTABLE_get_integer(INTERP, value);
1192 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
1193 VTABLE_set_integer_native(INTERP, dest, result);
1197 INTVAL result = SELF.get_integer()
1198 << VTABLE_get_integer(INTERP, value);
1199 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
1200 VTABLE_set_integer_native(INTERP, dest, result);
1205 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
1208 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
1209 INTVAL result = SELF.get_integer()
1210 << VTABLE_get_integer(INTERP, trans);
1211 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
1212 VTABLE_set_integer_native(INTERP, dest, result);
1215 return pmc_new(INTERP, dynpmc_WmlsInvalid);
1218 return pmc_new(INTERP, dynpmc_WmlsInvalid);
1222 void i_bitwise_shl(PMC* value) {
1224 INTVAL result = SELF.get_integer()
1225 << VTABLE_get_integer(INTERP, value);
1226 SELF.morph(dynpmc_WmlsInteger);
1227 SELF.set_integer_native(result);
1230 INTVAL result = SELF.get_integer()
1231 << VTABLE_get_integer(INTERP, value);
1232 SELF.morph(dynpmc_WmlsInteger);
1233 SELF.set_integer_native(result);
1237 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
1240 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
1241 INTVAL result = SELF.get_integer()
1242 << VTABLE_get_integer(INTERP, trans);
1243 SELF.morph(dynpmc_WmlsInteger);
1244 SELF.set_integer_native(result);
1247 SELF.morph(dynpmc_WmlsInvalid);
1251 SELF.morph(dynpmc_WmlsInvalid);
1257 =item C<PMC* is_equal(PMC* value)>
1262 INTVAL is_equal(PMC* value) {
1264 return SELF.get_number() == VTABLE_get_number(INTERP, value);
1267 return SELF.get_integer() == VTABLE_get_integer(INTERP, value);
1270 return SELF.get_integer() == VTABLE_get_integer(INTERP, value);
1273 return !string_equal(INTERP,
1274 SELF.get_string(), VTABLE_get_string(INTERP, value));
1283 =item C<PMC* cmp(PMC *value)>
1288 INTVAL cmp(PMC* value) {
1290 return num_cmp(SELF.get_number(),
1291 VTABLE_get_number(INTERP, value));
1294 return int_cmp(SELF.get_integer(),
1295 VTABLE_get_integer(INTERP, value));
1298 return int_cmp(SELF.get_integer(),
1299 VTABLE_get_integer(INTERP, value));
1302 return string_compare(INTERP,
1303 SELF.get_string(), VTABLE_get_string(INTERP, value));
1327 * c-file-style: "parrot"
1329 * vim: expandtab shiftwidth=4: