       [tp1, tp2] = [op1.constructor, op2.constructor]
       throw new Error "operands of types #{tp1} and #{tp2} not supported"
 
-  @downcast: (x) ->
+  downcast = (x) ->
     if x instanceof LongInt and x.cmp(BASE) < 0
       if x.digits?
         new CheckedInt x.digits.first() * x.sign

      else
        p

    NumberBase.downcast bounce step makeNum(1), makeNum(a), makeNum(b)

# ----


      namex = "#{name}__"
      operator name, (a) -> makeNum(a)[namex]()

  operator 'sqrt', (a) -> downcast makeNum(a)['sqrt__']()

  operator 'pow', (a, b) ->
    step = (p, r, s) ->
