# Global Metrics

path: .metrics.nexits.sum
old: 0.0
new: 1.0
path: .metrics.nexits.average
old: 0.0
new: 1.0
path: .metrics.cyclomatic.average
old: 1.0
new: 9.5
path: .metrics.cyclomatic.sum
old: 3.0
new: 19.0
path: .metrics.mi.mi_original
old: 76.71101516172014
new: 57.85599507310849
path: .metrics.mi.mi_visual_studio
old: 44.860242784631666
new: 33.83391524743186
path: .metrics.mi.mi_sei
old: 65.45781286689768
new: 45.26413956071192
path: .metrics.loc.cloc
old: 7.0
new: 18.0
path: .metrics.loc.lloc
old: 0.0
new: 50.0
path: .metrics.loc.ploc
old: 27.0
new: 41.0
path: .metrics.loc.blank
old: 6.0
new: 10.0
path: .metrics.loc.sloc
old: 40.0
new: 69.0
path: .metrics.cognitive.average
old: 0.0
new: 8.0
path: .metrics.cognitive.sum
old: 0.0
new: 8.0
path: .metrics.halstead.effort
old: 3906.767200037929
new: 65364.45892182232
path: .metrics.halstead.estimated_program_length
old: 268.7443162330219
new: 370.1802547229907
path: .metrics.halstead.n1
old: 9.0
new: 25.0
path: .metrics.halstead.N2
old: 57.0
new: 106.0
path: .metrics.halstead.level
old: 0.17153996101364524
new: 0.03471698113207547
path: .metrics.halstead.volume
old: 670.1666931838943
new: 2269.256687097228
path: .metrics.halstead.bugs
old: 0.08268443577461564
new: 0.5408869777537211
path: .metrics.halstead.difficulty
old: 5.829545454545454
new: 28.804347826086957
path: .metrics.halstead.time
old: 217.0426222243294
new: 3631.358828990129
path: .metrics.halstead.vocabulary
old: 53.0
new: 71.0
path: .metrics.halstead.length
old: 117.0
new: 369.0
path: .metrics.halstead.N1
old: 60.0
new: 263.0
path: .metrics.halstead.purity_ratio
old: 2.296959967803606
new: 1.0031985222845277
path: .metrics.halstead.n2
old: 44.0
new: 46.0
path: .metrics.nargs.average
old: 2.0
new: 3.0
path: .metrics.nargs.sum
old: 2.0
new: 3.0

# Spaces Data

## Minimal test - lines (16, 69)

path: .spaces[0].metrics.nargs.sum
old: 2.0
new: 3.0
path: .spaces[0].metrics.nargs.average
old: 2.0
new: 3.0
path: .spaces[0].metrics.cyclomatic.average
old: 1.0
new: 17.0
path: .spaces[0].metrics.cyclomatic.sum
old: 2.0
new: 17.0
path: .spaces[0].metrics.cognitive.average
old: 0.0
new: 7.0
path: .spaces[0].metrics.cognitive.sum
old: 0.0
new: 7.0
path: .spaces[0].metrics.nexits.average
old: 0.0
new: 1.0
path: .spaces[0].metrics.nexits.sum
old: 0.0
new: 1.0
path: .spaces[0].metrics.loc.cloc
old: 0.0
new: 12.0
path: .spaces[0].metrics.loc.sloc
old: 25.0
new: 54.0
path: .spaces[0].metrics.loc.blank
old: 2.0
new: 5.0
path: .spaces[0].metrics.loc.ploc
old: 23.0
new: 37.0
path: .spaces[0].metrics.loc.lloc
old: 0.0
new: 50.0
path: .spaces[0].metrics.mi.mi_sei
old: 46.82397739846533
new: 49.588002645471306
path: .spaces[0].metrics.mi.mi_visual_studio
old: 49.58279985009109
new: 36.563870671797694
path: .spaces[0].metrics.mi.mi_original
old: 84.78658774365577
new: 62.524218848774055
path: .spaces[0].metrics.halstead.difficulty
old: 5.785714285714286
new: 27.928571428571427
path: .spaces[0].metrics.halstead.length
old: 113.0
new: 360.0
path: .spaces[0].metrics.halstead.bugs
old: 0.07986347848465594
new: 0.5139936391343491
path: .spaces[0].metrics.halstead.estimated_program_length
old: 255.00665676968876
new: 330.5192567460192
path: .spaces[0].metrics.halstead.n1
old: 9.0
new: 23.0
path: .spaces[0].metrics.halstead.time
old: 206.03059188517895
new: 3363.9225927058937
path: .spaces[0].metrics.halstead.N1
old: 59.0
new: 258.0
path: .spaces[0].metrics.halstead.N2
old: 54.0
new: 102.0
path: .spaces[0].metrics.halstead.vocabulary
old: 51.0
new: 65.0
path: .spaces[0].metrics.halstead.effort
old: 3708.5506539332214
new: 60550.60666870609
path: .spaces[0].metrics.halstead.level
old: 0.1728395061728395
new: 0.03580562659846547
path: .spaces[0].metrics.halstead.purity_ratio
old: 2.2566960776078653
new: 0.91810904651672
path: .spaces[0].metrics.halstead.volume
old: 640.984063642779
new: 2168.0524126902437

### Code

    extern "C" uint64_t
    invoke_copy_to_stack(uint64_t* d, uint32_t paramCount, nsXPTCVariant* s)
    {
      /*
        We need to copy the parameters for this function to locals and use them
        from there since the parameters occupy the same stack space as the stack
        we're trying to populate.
      */
      uint64_t *l_d = d;
      nsXPTCVariant *l_s = s;
      uint64_t l_paramCount = paramCount;
      uint64_t regCount = 0;  // return the number of registers to load from the stack

      for(uint64_t i = 0; i < l_paramCount; i++, l_d++, l_s++)
      {
        if (regCount < 5) regCount++;

        if (l_s->IsIndirect())
        {
          *l_d = (uint64_t) &l_s->val;
          continue;
        }
        switch (l_s->type)
        {
          case nsXPTType::T_I8    : *((int64_t*)l_d)     = l_s->val.i8;    break;
          case nsXPTType::T_I16   : *((int64_t*)l_d)     = l_s->val.i16;   break;
          case nsXPTType::T_I32   : *((int64_t*)l_d)     = l_s->val.i32;   break;
          case nsXPTType::T_I64   : *((int64_t*)l_d)     = l_s->val.i64;   break;

          case nsXPTType::T_U8    : *((uint64_t*)l_d)    = l_s->val.u8;    break;
          case nsXPTType::T_U16   : *((uint64_t*)l_d)    = l_s->val.u16;   break;
          case nsXPTType::T_U32   : *((uint64_t*)l_d)    = l_s->val.u32;   break;
          case nsXPTType::T_U64   : *((uint64_t*)l_d)    = l_s->val.u64;   break;

          /* in the case of floats, we want to put the bits in to the
             64bit space right justified... floats in the parameter array on
             sparcv9 use odd numbered registers.. %f1, %f3, so we have to skip
             the space that would be occupied by %f0, %f2, etc.
          */
          case nsXPTType::T_FLOAT : *(((float*)l_d) + 1) = l_s->val.f;     break;
          case nsXPTType::T_DOUBLE: *((double*)l_d)      = l_s->val.d;     break;
          case nsXPTType::T_BOOL  : *((int64_t*)l_d)     = l_s->val.b;     break;
          case nsXPTType::T_CHAR  : *((uint64_t*)l_d)    = l_s->val.c;     break;
          case nsXPTType::T_WCHAR : *((int64_t*)l_d)     = l_s->val.wc;    break;

          default:
            // all the others are plain pointer types
            *((void**)l_d) = l_s->val.p;
            break;
        }
      }

      return regCount;
    }