SageX hacking example --- fix the mangled pow() function

Pyrex has an unfortunate bug in the way it handles the power function for cdef integers. Namely

   1 %pyrex
   3 def foo(int n):
   4     return 2**n


Looking at the c source code we see the the error on line 85

  __pyx_1 = PyFloat_FromDouble(pow(2, __pyx_v_n)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; goto __pyx_L1;}

Here the c function pow() is being used, which only operates on doubles. This is fine if the return type is a float, but if it is, say, a python object, then this code is incorrect. I will change this so that the resulting type is an integer in this case.

Expand the sagex spkg found in SAGE_ROOT/spkg/standard (tar xvfj sagex-20070126.spkg). Now the all the code we want to look at (for this problem) is in Pyrex/Compiler/. Most of the time you will want to look at (for parsing) and (for code generation). Read the comments at the top of those files, but don't be worried if you don't underand them right away.

The relavent code is in the PowNode.compute_c_result_type() function (line 2514).

Some useful links: