2 Copyright (C) 2006-2008, The Perl Foundation.
7 pmc/wmlsinteger.pmc - WMLScript Integer
11 C<WmlsInteger> extends C<Integer> to provide a class with the behaviour of
12 the WMLScript C<Integer> 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)
64 hll WMLScript maps Integer {
66 /* Class initialization. Caches constant strings that will be used later.
70 dynpmc_WmlsBoolean = pmc_type(INTERP,
71 const_string(INTERP, "WmlsBoolean"));
72 dynpmc_WmlsFloat = pmc_type(INTERP,
73 const_string(INTERP, "WmlsFloat"));
74 dynpmc_WmlsInteger = pmc_type(INTERP,
75 const_string(INTERP, "WmlsInteger"));
76 dynpmc_WmlsInvalid = pmc_type(INTERP,
77 const_string(INTERP, "WmlsInvalid"));
78 dynpmc_WmlsString = pmc_type(INTERP,
79 const_string(INTERP, "WmlsString"));
85 =item C<PMC* get_class()>
93 PMC* retval = pmc_new(interp, dynpmc_WmlsInteger);
94 PMC_int_val(retval) = 0;
100 =item C<PMC* neg(PMC *dest)>
102 =item C<void i_neg()>
107 PMC* neg(PMC* dest) {
108 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
109 PMC_int_val(dest) = - SELF.get_integer();
114 INTVAL result = - SELF.get_integer();
115 SELF.set_integer_native(result);
120 =item C<PMC* bitwise_not(PMC *dest)>
122 =item C<void i_bitwise_not()>
127 PMC* bitwise_not(PMC* dest) {
128 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
129 PMC_int_val(dest) = ~ SELF.get_integer();
133 void i_bitwise_not() {
134 INTVAL result = ~ SELF.get_integer();
135 SELF.set_integer_native(result);
140 =item C<PMC* logical_not(PMC *dest)>
142 =item C<void i_logical_not()>
147 PMC* logical_not(PMC* dest) {
148 dest = pmc_new(INTERP, dynpmc_WmlsBoolean);
149 VTABLE_set_bool(INTERP, dest, ! SELF.get_bool());
153 void i_logical_not() {
154 INTVAL result = ! SELF.get_bool();
155 SELF.morph(dynpmc_WmlsBoolean);
156 SELF.set_integer_native(result);
163 =head2 non-Vtable Methods
167 =item C<void add(PMC *value, PMC *dest)>
169 =item C<void i_add(PMC *value)>
174 PMC* add(PMC* value, PMC* dest) {
176 INTVAL result = SELF.get_integer()
177 + VTABLE_get_integer(INTERP, value);
178 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
179 VTABLE_set_integer_native(INTERP, dest, result);
183 INTVAL result = SELF.get_integer()
184 + VTABLE_get_integer(INTERP, value);
185 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
186 VTABLE_set_integer_native(INTERP, dest, result);
190 FLOATVAL result = SELF.get_number()
191 + VTABLE_get_number(INTERP, value);
192 dest = pmc_new(INTERP, dynpmc_WmlsFloat);
193 VTABLE_set_number_native(INTERP, dest, result);
197 STRING* result = string_concat(INTERP,
199 VTABLE_get_string(INTERP, value), 0);
200 dest = pmc_new(INTERP, dynpmc_WmlsString);
201 VTABLE_set_string_native(INTERP, dest, result);
205 return pmc_new(INTERP, dynpmc_WmlsInvalid);
209 void i_add(PMC* value) {
211 INTVAL result = SELF.get_integer()
212 + VTABLE_get_integer(INTERP, value);
213 SELF.set_integer_native(result);
216 INTVAL result = SELF.get_integer()
217 + VTABLE_get_integer(INTERP, value);
218 SELF.set_integer_native(result);
221 FLOATVAL result = SELF.get_number()
222 + VTABLE_get_number(INTERP, value);
223 SELF.morph(dynpmc_WmlsFloat);
224 SELF.set_number_native(result);
227 STRING* result = string_concat(INTERP,
229 VTABLE_get_string(INTERP, value), 0);
230 SELF.morph(dynpmc_WmlsString);
231 SELF.set_string_native(result);
234 SELF.morph(dynpmc_WmlsInvalid);
240 =item C<PMC* subtract(PMC *value, PMC *dest)>
242 =item C<void i_subtract(PMC *value)>
247 PMC* subtract(PMC* value, PMC* dest) {
249 INTVAL result = SELF.get_integer()
250 - VTABLE_get_integer(INTERP, value);
251 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
252 VTABLE_set_integer_native(INTERP, dest, result);
256 INTVAL result = SELF.get_integer()
257 - VTABLE_get_integer(INTERP, value);
258 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
259 VTABLE_set_integer_native(INTERP, dest, result);
263 FLOATVAL result = SELF.get_number()
264 - VTABLE_get_number(INTERP, value);
265 dest = pmc_new(INTERP, dynpmc_WmlsFloat);
266 VTABLE_set_number_native(INTERP, dest, result);
271 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
274 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
275 INTVAL result = SELF.get_integer()
276 - VTABLE_get_integer(INTERP, trans);
277 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
278 VTABLE_set_integer_native(INTERP, dest, result);
281 return pmc_new(INTERP, dynpmc_WmlsInvalid);
284 return pmc_new(INTERP, dynpmc_WmlsInvalid);
288 void i_subtract(PMC* value) {
290 INTVAL result = SELF.get_integer()
291 - VTABLE_get_integer(INTERP, value);
292 SELF.set_integer_native(result);
295 INTVAL result = SELF.get_integer()
296 - VTABLE_get_integer(INTERP, value);
297 SELF.set_integer_native(result);
300 FLOATVAL result = SELF.get_number()
301 - VTABLE_get_number(INTERP, value);
302 SELF.morph(dynpmc_WmlsFloat);
303 SELF.set_number_native(result);
307 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
310 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
311 INTVAL result = SELF.get_integer()
312 - VTABLE_get_integer(INTERP, trans);
313 SELF.set_integer_native(result);
316 SELF.morph(dynpmc_WmlsInvalid);
320 SELF.morph(dynpmc_WmlsInvalid);
326 =item C<PMC* multiply(PMC *value, PMC *dest)>
328 =item C<void i_multiply(PMC *value)>
333 PMC* multiply(PMC* value, PMC* dest) {
335 INTVAL result = SELF.get_integer()
336 * VTABLE_get_integer(INTERP, value);
337 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
338 VTABLE_set_integer_native(INTERP, dest, result);
342 INTVAL result = SELF.get_integer()
343 * VTABLE_get_integer(INTERP, value);
344 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
345 VTABLE_set_integer_native(INTERP, dest, result);
349 FLOATVAL result = SELF.get_number()
350 * VTABLE_get_number(INTERP, value);
351 dest = pmc_new(INTERP, dynpmc_WmlsFloat);
352 VTABLE_set_number_native(INTERP, dest, result);
357 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
360 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
361 INTVAL result = SELF.get_integer()
362 * VTABLE_get_integer(INTERP, trans);
363 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
364 VTABLE_set_integer_native(INTERP, dest, result);
367 return pmc_new(INTERP, dynpmc_WmlsInvalid);
370 return pmc_new(INTERP, dynpmc_WmlsInvalid);
374 void i_multiply(PMC* value) {
376 INTVAL result = SELF.get_integer()
377 * VTABLE_get_integer(INTERP, value);
378 SELF.set_integer_native(result);
381 INTVAL result = SELF.get_integer()
382 * VTABLE_get_integer(INTERP, value);
383 SELF.set_integer_native(result);
386 FLOATVAL result = SELF.get_number()
387 * VTABLE_get_number(INTERP, value);
388 SELF.morph(dynpmc_WmlsFloat);
389 SELF.set_number_native(result);
393 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
396 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
397 INTVAL result = SELF.get_integer()
398 * VTABLE_get_integer(INTERP, trans);
399 SELF.set_integer_native(result);
402 SELF.morph(dynpmc_WmlsInvalid);
406 SELF.morph(dynpmc_WmlsInvalid);
412 =item C<PMC* divide(PMC *value, PMC *dest)>
414 =item C<void i_divide(PMC *value)>
419 PMC* divide(PMC* value, PMC* dest) {
421 FLOATVAL d = VTABLE_get_number(INTERP, value);
423 FLOATVAL result = SELF.get_number() / d;
424 dest = pmc_new(INTERP, dynpmc_WmlsFloat);
425 VTABLE_set_number_native(INTERP, dest, result);
428 return pmc_new(INTERP, dynpmc_WmlsInvalid);
431 FLOATVAL d = VTABLE_get_number(INTERP, value);
433 FLOATVAL result = SELF.get_number() / d;
434 dest = pmc_new(INTERP, dynpmc_WmlsFloat);
435 VTABLE_set_number_native(INTERP, dest, result);
438 return pmc_new(INTERP, dynpmc_WmlsInvalid);
441 FLOATVAL d = VTABLE_get_number(INTERP, value);
443 FLOATVAL result = SELF.get_number() / d;
444 dest = pmc_new(INTERP, dynpmc_WmlsFloat);
445 VTABLE_set_number_native(INTERP, dest, result);
448 return pmc_new(INTERP, dynpmc_WmlsInvalid);
452 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
455 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
456 FLOATVAL d = VTABLE_get_number(INTERP, trans);
458 FLOATVAL result = SELF.get_number() / d;
459 dest = pmc_new(INTERP, dynpmc_WmlsFloat);
460 VTABLE_set_number_native(INTERP, dest, result);
464 return pmc_new(INTERP, dynpmc_WmlsInvalid);
467 return pmc_new(INTERP, dynpmc_WmlsInvalid);
471 void i_divide(PMC* value) {
473 FLOATVAL d = VTABLE_get_number(INTERP, value);
475 FLOATVAL result = SELF.get_number() / d;
476 SELF.morph(dynpmc_WmlsFloat);
477 SELF.set_number_native(result);
480 SELF.morph(dynpmc_WmlsInvalid);
484 FLOATVAL d = VTABLE_get_number(INTERP, value);
486 FLOATVAL result = SELF.get_number() / d;
487 SELF.morph(dynpmc_WmlsFloat);
488 SELF.set_number_native(result);
491 SELF.morph(dynpmc_WmlsInvalid);
495 FLOATVAL d = VTABLE_get_number(INTERP, value);
497 FLOATVAL result = SELF.get_number() / d;
498 SELF.morph(dynpmc_WmlsFloat);
499 SELF.set_number_native(result);
502 SELF.morph(dynpmc_WmlsInvalid);
507 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
510 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
511 FLOATVAL d = VTABLE_get_integer(INTERP, trans);
513 FLOATVAL result = SELF.get_number() / d;
514 SELF.morph(dynpmc_WmlsFloat);
515 SELF.set_number_native(result);
518 SELF.morph(dynpmc_WmlsInvalid);
522 SELF.morph(dynpmc_WmlsInvalid);
526 SELF.morph(dynpmc_WmlsInvalid);
532 =item C<PMC* floor_divide(PMC *value, PMC *dest)>
534 =item C<void i_floor_divide(PMC *value)>
539 PMC* floor_divide(PMC* value, PMC* dest) {
541 INTVAL d = VTABLE_get_integer(INTERP, value);
543 INTVAL result = SELF.get_integer() / d;
544 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
545 VTABLE_set_integer_native(INTERP, dest, result);
548 return pmc_new(INTERP, dynpmc_WmlsInvalid);
551 INTVAL d = VTABLE_get_integer(INTERP, value);
553 INTVAL result = SELF.get_integer() / d;
554 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
555 VTABLE_set_integer_native(INTERP, dest, result);
558 return pmc_new(INTERP, dynpmc_WmlsInvalid);
562 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
565 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
566 INTVAL d = VTABLE_get_integer(INTERP, trans);
568 INTVAL result = SELF.get_integer() / d;
569 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
570 VTABLE_set_integer_native(INTERP, dest, result);
574 return pmc_new(INTERP, dynpmc_WmlsInvalid);
577 return pmc_new(INTERP, dynpmc_WmlsInvalid);
581 void i_floor_divide(PMC* value) {
583 INTVAL d = VTABLE_get_integer(INTERP, value);
585 INTVAL result = SELF.get_integer() / d;
586 SELF.set_integer_native(result);
589 SELF.morph(dynpmc_WmlsInvalid);
593 INTVAL d = VTABLE_get_integer(INTERP, value);
595 INTVAL result = SELF.get_integer() / d;
596 SELF.set_integer_native(result);
599 SELF.morph(dynpmc_WmlsInvalid);
604 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
607 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
608 INTVAL d = VTABLE_get_integer(INTERP, trans);
610 INTVAL result = SELF.get_integer() / d;
611 SELF.set_integer_native(result);
614 SELF.morph(dynpmc_WmlsInvalid);
618 SELF.morph(dynpmc_WmlsInvalid);
622 SELF.morph(dynpmc_WmlsInvalid);
628 =item C<PMC* cmodulus(PMC *value, PMC *dest)>
630 =item C<void i_cmodulus(PMC *value)>
635 PMC* cmodulus(PMC* value, PMC* dest) {
637 INTVAL d = VTABLE_get_integer(INTERP, value);
639 INTVAL result = SELF.get_integer() % d;
640 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
641 VTABLE_set_integer_native(INTERP, dest, result);
644 return pmc_new(INTERP, dynpmc_WmlsInvalid);
647 INTVAL d = VTABLE_get_integer(INTERP, value);
649 INTVAL result = SELF.get_integer() % d;
650 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
651 VTABLE_set_integer_native(INTERP, dest, result);
654 return pmc_new(INTERP, dynpmc_WmlsInvalid);
658 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
661 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
662 INTVAL d = VTABLE_get_integer(INTERP, trans);
664 INTVAL result = SELF.get_integer() % d;
665 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
666 VTABLE_set_integer_native(INTERP, dest, result);
670 return pmc_new(INTERP, dynpmc_WmlsInvalid);
673 return pmc_new(INTERP, dynpmc_WmlsInvalid);
677 void i_cmodulus(PMC* value) {
679 INTVAL d = VTABLE_get_integer(INTERP, value);
681 INTVAL result = SELF.get_integer() % d;
682 SELF.set_integer_native(result);
685 SELF.morph(dynpmc_WmlsInvalid);
689 INTVAL d = VTABLE_get_integer(INTERP, value);
691 INTVAL result = SELF.get_integer() % d;
692 SELF.set_integer_native(result);
695 SELF.morph(dynpmc_WmlsInvalid);
700 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
703 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
704 INTVAL d = VTABLE_get_integer(INTERP, trans);
706 INTVAL result = SELF.get_integer() % d;
707 SELF.set_integer_native(result);
710 SELF.morph(dynpmc_WmlsInvalid);
714 SELF.morph(dynpmc_WmlsInvalid);
718 SELF.morph(dynpmc_WmlsInvalid);
724 =item C<PMC* bitwise_or(PMC *value, PMC *dest)>
726 =item C<void i_bitwise_or(PMC *value)>
731 PMC* bitwise_or(PMC* value, PMC* dest) {
733 INTVAL result = SELF.get_integer()
734 | VTABLE_get_integer(INTERP, value);
735 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
736 VTABLE_set_integer_native(INTERP, dest, result);
740 INTVAL result = SELF.get_integer()
741 | VTABLE_get_integer(INTERP, value);
742 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
743 VTABLE_set_integer_native(INTERP, dest, result);
748 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
751 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
752 INTVAL result = SELF.get_integer()
753 | VTABLE_get_integer(INTERP, trans);
754 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
755 VTABLE_set_integer_native(INTERP, dest, result);
758 return pmc_new(INTERP, dynpmc_WmlsInvalid);
761 return pmc_new(INTERP, dynpmc_WmlsInvalid);
765 void i_bitwise_or(PMC* value) {
767 INTVAL result = SELF.get_integer()
768 | VTABLE_get_integer(INTERP, value);
769 SELF.set_integer_native(result);
772 INTVAL result = SELF.get_integer()
773 | VTABLE_get_integer(INTERP, value);
774 SELF.set_integer_native(result);
778 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
781 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
782 INTVAL result = SELF.get_integer()
783 | VTABLE_get_integer(INTERP, trans);
784 SELF.set_integer_native(result);
787 SELF.morph(dynpmc_WmlsInvalid);
791 SELF.morph(dynpmc_WmlsInvalid);
797 =item C<PMC* bitwise_and(PMC *value, PMC *dest)>
799 =item C<void i_bitwise_and(PMC *value)>
804 PMC* bitwise_and(PMC* value, PMC* dest) {
806 INTVAL result = SELF.get_integer()
807 & VTABLE_get_integer(INTERP, value);
808 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
809 VTABLE_set_integer_native(INTERP, dest, result);
813 INTVAL result = SELF.get_integer()
814 & VTABLE_get_integer(INTERP, value);
815 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
816 VTABLE_set_integer_native(INTERP, dest, result);
821 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
824 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
825 INTVAL result = SELF.get_integer()
826 & VTABLE_get_integer(INTERP, trans);
827 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
828 VTABLE_set_integer_native(INTERP, dest, result);
831 return pmc_new(INTERP, dynpmc_WmlsInvalid);
834 return pmc_new(INTERP, dynpmc_WmlsInvalid);
838 void i_bitwise_and(PMC* value) {
840 INTVAL result = SELF.get_integer()
841 & VTABLE_get_integer(INTERP, value);
842 SELF.set_integer_native(result);
845 INTVAL result = SELF.get_integer()
846 & VTABLE_get_integer(INTERP, value);
847 SELF.set_integer_native(result);
851 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
854 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
855 INTVAL result = SELF.get_integer()
856 & VTABLE_get_integer(INTERP, trans);
857 SELF.set_integer_native(result);
860 SELF.morph(dynpmc_WmlsInvalid);
864 SELF.morph(dynpmc_WmlsInvalid);
870 =item C<void bitwise_xor(PMC *value, PMC *dest)>
872 =item C<void i_bitwise_xor(PMC *value)>
877 PMC* bitwise_xor(PMC* value, PMC* dest) {
879 INTVAL result = SELF.get_integer()
880 ^ VTABLE_get_integer(INTERP, value);
881 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
882 VTABLE_set_integer_native(INTERP, dest, result);
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);
894 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
897 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
898 INTVAL result = SELF.get_integer()
899 ^ VTABLE_get_integer(INTERP, trans);
900 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
901 VTABLE_set_integer_native(INTERP, dest, result);
904 return pmc_new(INTERP, dynpmc_WmlsInvalid);
907 return pmc_new(INTERP, dynpmc_WmlsInvalid);
911 void i_bitwise_xor(PMC* value) {
913 INTVAL result = SELF.get_integer()
914 ^ VTABLE_get_integer(INTERP, value);
915 SELF.set_integer_native(result);
918 INTVAL result = SELF.get_integer()
919 ^ VTABLE_get_integer(INTERP, value);
920 SELF.set_integer_native(result);
924 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
927 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
928 INTVAL result = SELF.get_integer()
929 ^ VTABLE_get_integer(INTERP, trans);
930 SELF.set_integer_native(result);
933 SELF.morph(dynpmc_WmlsInvalid);
937 SELF.morph(dynpmc_WmlsInvalid);
943 =item C<PMC* bitwise_shr(PMC *value, PMC *dest)>
945 =item C<void i_bitwise_shr(PMC *value)>
950 PMC* bitwise_shr(PMC* value, PMC* dest) {
952 INTVAL result = SELF.get_integer()
953 >> VTABLE_get_integer(INTERP, value);
954 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
955 VTABLE_set_integer_native(INTERP, dest, result);
959 INTVAL result = SELF.get_integer()
960 >> VTABLE_get_integer(INTERP, value);
961 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
962 VTABLE_set_integer_native(INTERP, dest, result);
967 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
970 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
971 INTVAL result = SELF.get_integer()
972 >> VTABLE_get_integer(INTERP, trans);
973 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
974 VTABLE_set_integer_native(INTERP, dest, result);
977 return pmc_new(INTERP, dynpmc_WmlsInvalid);
980 return pmc_new(INTERP, dynpmc_WmlsInvalid);
984 void i_bitwise_shr(PMC* value) {
986 INTVAL result = SELF.get_integer()
987 >> VTABLE_get_integer(INTERP, value);
988 SELF.set_integer_native(result);
991 INTVAL result = SELF.get_integer()
992 >> VTABLE_get_integer(INTERP, value);
993 SELF.set_integer_native(result);
997 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
1000 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
1001 INTVAL result = SELF.get_integer()
1002 >> VTABLE_get_integer(INTERP, trans);
1003 SELF.set_integer_native(result);
1006 SELF.morph(dynpmc_WmlsInvalid);
1010 SELF.morph(dynpmc_WmlsInvalid);
1016 =item C<PMC* bitwise_lsr(PMC *value, PMC *dest)>
1018 =item C<void i_bitwise_lsr(PMC *value)>
1023 PMC* bitwise_lsr(PMC* value, PMC* dest) {
1025 INTVAL result = SELF.get_integer()
1026 >> VTABLE_get_integer(INTERP, value);
1027 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
1028 VTABLE_set_integer_native(INTERP, dest, result);
1032 INTVAL result = SELF.get_integer()
1033 >> VTABLE_get_integer(INTERP, value);
1034 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
1035 VTABLE_set_integer_native(INTERP, dest, result);
1040 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
1043 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
1044 INTVAL result = SELF.get_integer()
1045 >> VTABLE_get_integer(INTERP, trans);
1046 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
1047 VTABLE_set_integer_native(INTERP, dest, result);
1050 return pmc_new(INTERP, dynpmc_WmlsInvalid);
1053 return pmc_new(INTERP, dynpmc_WmlsInvalid);
1057 void i_bitwise_lsr(PMC* value) {
1059 INTVAL result = SELF.get_integer()
1060 >> VTABLE_get_integer(INTERP, value);
1061 SELF.set_integer_native(result);
1064 INTVAL result = SELF.get_integer()
1065 >> VTABLE_get_integer(INTERP, value);
1066 SELF.set_integer_native(result);
1070 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
1073 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
1074 INTVAL result = SELF.get_integer()
1075 >> VTABLE_get_integer(INTERP, trans);
1076 SELF.set_integer_native(result);
1079 SELF.morph(dynpmc_WmlsInvalid);
1083 SELF.morph(dynpmc_WmlsInvalid);
1089 =item C<PMC* bitwise_shl(PMC *value, PMC *dest)>
1091 =item C<void i_bitwise_shl(PMC *value)>
1096 PMC* bitwise_shl(PMC* value, PMC* dest) {
1098 INTVAL result = SELF.get_integer()
1099 << VTABLE_get_integer(INTERP, value);
1100 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
1101 VTABLE_set_integer_native(INTERP, dest, result);
1105 INTVAL result = SELF.get_integer()
1106 << VTABLE_get_integer(INTERP, value);
1107 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
1108 VTABLE_set_integer_native(INTERP, dest, result);
1113 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
1116 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
1117 INTVAL result = SELF.get_integer()
1118 << VTABLE_get_integer(INTERP, trans);
1119 dest = pmc_new(INTERP, dynpmc_WmlsInteger);
1120 VTABLE_set_integer_native(INTERP, dest, result);
1123 return pmc_new(INTERP, dynpmc_WmlsInvalid);
1126 return pmc_new(INTERP, dynpmc_WmlsInvalid);
1130 void i_bitwise_shl(PMC* value) {
1132 INTVAL result = SELF.get_integer()
1133 << VTABLE_get_integer(INTERP, value);
1134 SELF.set_integer_native(result);
1137 INTVAL result = SELF.get_integer()
1138 << VTABLE_get_integer(INTERP, value);
1139 SELF.set_integer_native(result);
1143 Parrot_PCCINVOKE(interp, value, const_string(interp, "parseInt"),
1146 if (trans->vtable->base_type == dynpmc_WmlsInteger) {
1147 INTVAL result = SELF.get_integer()
1148 << VTABLE_get_integer(INTERP, trans);
1149 SELF.set_integer_native(result);
1152 SELF.morph(dynpmc_WmlsInvalid);
1156 SELF.morph(dynpmc_WmlsInvalid);
1162 =item C<PMC* is_equal(PMC* value)>
1167 INTVAL is_equal(PMC* value) {
1169 return SELF.get_number() == VTABLE_get_number(INTERP, value);
1172 return SELF.get_integer() == VTABLE_get_integer(INTERP, value);
1175 return SELF.get_integer() == VTABLE_get_integer(INTERP, value);
1178 return !string_equal(INTERP,
1179 SELF.get_string(), VTABLE_get_string(INTERP, value));
1188 =item C<PMC* cmp(PMC *value)>
1193 INTVAL cmp(PMC* value) {
1195 return num_cmp(SELF.get_number(),
1196 VTABLE_get_number(INTERP, value));
1199 return int_cmp(SELF.get_integer(),
1200 VTABLE_get_integer(INTERP, value));
1203 return int_cmp(SELF.get_integer(),
1204 VTABLE_get_integer(INTERP, value));
1207 return string_compare(INTERP,
1208 SELF.get_string(), VTABLE_get_string(INTERP, value));
1232 * c-file-style: "parrot"
1234 * vim: expandtab shiftwidth=4: