summaryrefslogtreecommitdiffstats
path: root/Python/bltinmodule.c
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1996-01-12 01:09:56 (GMT)
committerGuido van Rossum <guido@python.org>1996-01-12 01:09:56 (GMT)
commit8a5c5d277eba096c4f12fdcdf5b3550d63f6bc56 (patch)
tree61baa912d1a052436cda4215a6f53c856b9a6a95 /Python/bltinmodule.c
parent0bfd6c33fa5af32a0e095bf2c3f645db259ef96c (diff)
downloadcpython-8a5c5d277eba096c4f12fdcdf5b3550d63f6bc56.zip
cpython-8a5c5d277eba096c4f12fdcdf5b3550d63f6bc56.tar.gz
cpython-8a5c5d277eba096c4f12fdcdf5b3550d63f6bc56.tar.bz2
changes for complex numbers
Diffstat (limited to 'Python/bltinmodule.c')
-rw-r--r--Python/bltinmodule.c54
1 files changed, 53 insertions, 1 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 9445255..dca31ac 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -281,6 +281,51 @@ builtin_compile(self, args)
return compile_string(str, filename, start);
}
+#ifndef WITHOUT_COMPLEX
+
+static object *
+builtin_complex(self, args)
+ object *self;
+ object *args;
+{
+ object *r, *i;
+ number_methods *nbr, *nbi;
+ complex cr, ci;
+
+ i = NULL;
+ if (!newgetargs(args, "O|O:complex", &r, &i))
+ return NULL;
+ if ((nbr = r->ob_type->tp_as_number) == NULL ||
+ nbr->nb_float == NULL || (i != NULL &&
+ ((nbi = i->ob_type->tp_as_number) == NULL ||
+ nbi->nb_float == NULL))) {
+ err_setstr(TypeError,
+ "complex() argument can't be converted to complex");
+ return NULL;
+ }
+ if (is_complexobject(r))
+ cr = ((complexobject*)r)->cval;
+ else {
+ cr.real = getfloatvalue((*nbr->nb_float)(r));
+ cr.imag = 0.;
+ }
+ if (i == NULL) {
+ ci.real = 0.;
+ ci.imag = 0.;
+ }
+ else if (is_complexobject(i))
+ ci = ((complexobject*)i)->cval;
+ else {
+ ci.real = getfloatvalue((*nbi->nb_float)(i));
+ ci.imag = 0.;
+ }
+ cr.real -= ci.imag;
+ cr.imag += ci.real;
+ return newcomplexobject(cr);
+}
+
+#endif
+
static object *
builtin_dir(self, args)
object *self;
@@ -954,7 +999,11 @@ do_pow(v, w)
err_setstr(TypeError, "pow() requires numeric arguments");
return NULL;
}
- if (is_floatobject(w) && getfloatvalue(v) < 0.0) {
+ if (
+#ifndef WITHOUT_COMPLEX
+ !is_complexobject(v) &&
+#endif
+ is_floatobject(w) && getfloatvalue(v) < 0.0) {
if (!err_occurred())
err_setstr(ValueError, "negative number to float power");
return NULL;
@@ -1394,6 +1443,9 @@ static struct methodlist builtin_methods[] = {
{"cmp", builtin_cmp, 1},
{"coerce", builtin_coerce, 1},
{"compile", builtin_compile, 1},
+#ifndef WITHOUT_COMPLEX
+ {"complex", builtin_complex, 1},
+#endif
{"delattr", builtin_delattr, 1},
{"dir", builtin_dir, 1},
{"divmod", builtin_divmod, 1},