develooper Front page | perl.cvs.parrot | Postings from January 2009

[svn:parrot] r35929 - trunk/src/pmc

From:
julianalbo
Date:
January 23, 2009 14:23
Subject:
[svn:parrot] r35929 - trunk/src/pmc
Message ID:
20090123222317.CCA28CB9AE@x12.develooper.com
Author: julianalbo
Date: Fri Jan 23 14:23:17 2009
New Revision: 35929

Modified:
   trunk/src/pmc/complex.pmc

Log:
implement Complex init_pmc

Modified: trunk/src/pmc/complex.pmc
==============================================================================
--- trunk/src/pmc/complex.pmc	(original)
+++ trunk/src/pmc/complex.pmc	Fri Jan 23 14:23:17 2009
@@ -326,8 +326,8 @@
 
 =item C<void init_pmc(PMC *initializer)>
 
-Initializes the complex number with the specified values.
-(not implemented)
+Initializes the complex number with the specified initializer.
+The initializer can be a string PMC or a numeric array with (real, imag)
 
 =item C<void destroy()>
 
@@ -351,8 +351,29 @@
     }
 
     VTABLE void init_pmc(PMC *initializer) {
-        /* XXX not implemented */
+        const INTVAL arg_type = VTABLE_type(interp, initializer);
         SELF.init();
+        switch (arg_type) {
+            case enum_class_String:
+                SELF.set_string_native(VTABLE_get_string(interp, initializer));
+                break;
+            case enum_class_FixedFloatArray:
+            case enum_class_ResizableFloatArray:
+            case enum_class_FixedIntegerArray:
+            case enum_class_ResizableIntegerArray:
+                if (VTABLE_get_integer(interp, initializer) == 2) {
+                    FLOATVAL re = VTABLE_get_number_keyed_int(interp, initializer, 0);
+                    FLOATVAL im = VTABLE_get_number_keyed_int(interp, initializer, 1);
+                    SET_ATTR_re(INTERP, SELF, re);
+                    SET_ATTR_im(INTERP, SELF, im);
+		    break;
+                }
+                /* else let it fall to default */
+            default:
+                Parrot_ex_throw_from_c_args(interp, NULL,
+                    EXCEPTION_INVALID_OPERATION,
+                    "Invalid Complex initializer");
+        }
     }
 
     VTABLE void destroy() {



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About