         // traced class has an exactly traced base class.
 
         if (c.base != null && !noUsefulTracer(c.base)) {
-            c.out.PR(c.base + "::gcTrace(gc);");
+            c.out.PR(c.base + "::gcTrace(gc, 0);");
             if (interlockOutputFile != null)
                 c.out.PR("(void)(" + cleanupNs(c.base) + "_isExactInterlock != 0);");
         }

                        }).
                    PR(c.out.get()).
                    PR("}").
                    NL().
                    PR("void " + c.cls + "::gcTrace(MMgc::GC* gc)").
                    PR("{").
                    IN().
                    PR("gcTraceSmallAsLarge(gc);").
                    OUT().
                    PR("}").
                    NL();
            }
            else {
                output.
                    PR("void " + c.cls + "::gcTrace(MMgc::GC* gc)").
                    PR("{").
                    IN().
                    PR("(void)gc;").
                    DO(function (output) {
                            if (output === builtins) {
                                output.

            PR("const size_t _xact_work_count = " + c.variable_length_field.count + ";").
            PR("if (_xact_cursor * _xact_work_increment >= _xact_work_count)").
            IN().
            PR("return false;").
            OUT().
            PR("size_t _xact_work = _xact_work_increment;").
            PR("bool _xact_more = true;").
            PR("if ((_xact_cursor + 1) * _xact_work_increment >= _xact_work_count)").
            PR("{").
            IN().
            PR("_xact_work = _xact_work_count - (_xact_cursor * _xact_work_increment);").
            PR("_xact_more = false;").
            OUT().
            PR("}");
        emitChunk(c.out, c.variable_length_field, "(_xact_cursor * _xact_work_increment)", "_xact_work");
        c.out.PR("return _xact_more;");
    }

    function emitArrayUnchunked(c) {
