Global Metrics
path: .metrics.nexits.average
old: 2.0
new: 0.0
path: .metrics.nexits.sum
old: 2.0
new: 0.0
path: .metrics.mi.mi_visual_studio
old: 41.737502991053915
new: 23.57710283736316
path: .metrics.mi.mi_original
old: 71.3711301147022
new: 40.316845851891
path: .metrics.mi.mi_sei
old: 60.622769820201135
new: 16.148086501158424
path: .metrics.cyclomatic.average
old: 1.3333333333333333
new: 16.5
path: .metrics.cyclomatic.sum
old: 4.0
new: 33.0
path: .metrics.halstead.n2
old: 44.0
new: 50.0
path: .metrics.halstead.vocabulary
old: 57.0
new: 73.0
path: .metrics.halstead.n1
old: 13.0
new: 23.0
path: .metrics.halstead.purity_ratio
old: 2.0022271358046897
new: 0.4827934180975593
path: .metrics.halstead.length
old: 144.0
new: 800.0
path: .metrics.halstead.estimated_program_length
old: 288.3207075558753
new: 386.2347344780474
path: .metrics.halstead.volume
old: 839.9361620397227
new: 4951.859647104014
path: .metrics.halstead.N1
old: 78.0
new: 535.0
path: .metrics.halstead.bugs
old: 0.13542931300005054
new: 1.4998233239892376
path: .metrics.halstead.difficulty
old: 9.75
new: 60.95
path: .metrics.halstead.N2
old: 66.0
new: 265.0
path: .metrics.halstead.effort
old: 8189.377579887297
new: 301815.8454909896
path: .metrics.halstead.time
old: 454.96542110484984
new: 16767.546971721647
path: .metrics.halstead.level
old: 0.10256410256410256
new: 0.016406890894175553
path: .metrics.cognitive.average
old: 1.0
new: 14.0
path: .metrics.cognitive.sum
old: 1.0
new: 14.0
path: .metrics.loc.ploc
old: 31.0
new: 100.0
path: .metrics.loc.blank
old: 9.0
new: 7.0
path: .metrics.loc.cloc
old: 11.0
new: 23.0
path: .metrics.loc.sloc
old: 51.0
new: 130.0
path: .metrics.loc.lloc
old: 6.0
new: 102.0
path: .metrics.nargs.average
old: 4.0
new: 5.0
path: .metrics.nargs.sum
old: 4.0
new: 5.0
Spaces Data
Minimal test - lines (20, 131)
path: .spaces[0].metrics.cognitive.sum
old: 1.0
new: 14.0
path: .spaces[0].metrics.cognitive.average
old: 1.0
new: 14.0
path: .spaces[0].metrics.loc.ploc
old: 25.0
new: 98.0
path: .spaces[0].metrics.loc.lloc
old: 6.0
new: 102.0
path: .spaces[0].metrics.loc.sloc
old: 35.0
new: 112.0
path: .spaces[0].metrics.loc.blank
old: 7.0
new: 2.0
path: .spaces[0].metrics.loc.cloc
old: 3.0
new: 12.0
path: .spaces[0].metrics.halstead.purity_ratio
old: 1.7936736365702204
new: 0.46631594614527166
path: .spaces[0].metrics.halstead.length
old: 138.0
new: 798.0
path: .spaces[0].metrics.halstead.N2
old: 60.0
new: 263.0
path: .spaces[0].metrics.halstead.effort
old: 8033.945576444891
new: 309223.5064589093
path: .spaces[0].metrics.halstead.volume
old: 782.7946971920663
new: 4907.498201364737
path: .spaces[0].metrics.halstead.time
old: 446.3303098024939
new: 17179.08369216163
path: .spaces[0].metrics.halstead.level
old: 0.09743589743589744
new: 0.01587039180029757
path: .spaces[0].metrics.halstead.N1
old: 78.0
new: 535.0
path: .spaces[0].metrics.halstead.vocabulary
old: 51.0
new: 71.0
path: .spaces[0].metrics.halstead.n2
old: 38.0
new: 48.0
path: .spaces[0].metrics.halstead.difficulty
old: 10.263157894736842
new: 63.010416666666664
path: .spaces[0].metrics.halstead.estimated_program_length
old: 247.52696184669043
new: 372.1201250239268
path: .spaces[0].metrics.halstead.n1
old: 13.0
new: 23.0
path: .spaces[0].metrics.halstead.bugs
old: 0.1337102401701198
new: 1.524264771169958
path: .spaces[0].metrics.nexits.average
old: 2.0
new: 0.0
path: .spaces[0].metrics.nexits.sum
old: 2.0
new: 0.0
path: .spaces[0].metrics.cyclomatic.sum
old: 3.0
new: 32.0
path: .spaces[0].metrics.cyclomatic.average
old: 1.5
new: 32.0
path: .spaces[0].metrics.nargs.average
old: 4.0
new: 5.0
path: .spaces[0].metrics.nargs.sum
old: 4.0
new: 5.0
path: .spaces[0].metrics.mi.mi_original
old: 78.06643500487884
new: 43.00801657487531
path: .spaces[0].metrics.mi.mi_visual_studio
old: 45.65288596776541
new: 25.150886885891993
path: .spaces[0].metrics.mi.mi_sei
old: 59.13896605264823
new: 13.886722168709245
Code
extern "C" void
invoke_copy_to_stack(uint64_t* mloc, uint64_t* iloc, uint64_t* floc,
const uint32_t paramCount, nsXPTCVariant* s)
{
uint64_t* dest = mloc;
uint32_t len = paramCount;
nsXPTCVariant* source = s;
uint32_t indx;
uint32_t endlen;
endlen = (len > 7) ? 7 : len;
/* handle the memory arguments */
for (indx = 7; indx < len; ++indx)
{
if (source[indx].IsPtrData())
{
#ifdef __LP64__
/* 64 bit pointer mode */
*((void**) dest) = source[indx].ptr;
#else
/* 32 bit pointer mode */
uint32_t* adr = (uint32_t*) dest;
*(adr) = 0;
*(adr+1) = (uint32_t) source[indx].ptr;
#endif
}
else
switch (source[indx].type)
{
case nsXPTType::T_I8 : *(dest) = source[indx].val.i8; break;
case nsXPTType::T_I16 : *(dest) = source[indx].val.i16; break;
case nsXPTType::T_I32 : *(dest) = source[indx].val.i32; break;
case nsXPTType::T_I64 : *(dest) = source[indx].val.i64; break;
case nsXPTType::T_U8 : *(dest) = source[indx].val.u8; break;
case nsXPTType::T_U16 : *(dest) = source[indx].val.u16; break;
case nsXPTType::T_U32 : *(dest) = source[indx].val.u32; break;
case nsXPTType::T_U64 : *(dest) = source[indx].val.u64; break;
case nsXPTType::T_FLOAT : *(dest) = source[indx].val.u32; break;
case nsXPTType::T_DOUBLE: *(dest) = source[indx].val.u64; break;
case nsXPTType::T_BOOL : *(dest) = source[indx].val.b; break;
case nsXPTType::T_CHAR : *(dest) = source[indx].val.c; break;
case nsXPTType::T_WCHAR : *(dest) = source[indx].val.wc; break;
default:
// all the others are plain pointer types
#ifdef __LP64__
/* 64 bit pointer mode */
*((void**) dest) = source[indx].val.p;
#else
{
/* 32 bit pointer mode */
uint32_t* adr = (uint32_t*) dest;
*(adr) = 0;
*(adr+1) = (uint32_t) source[indx].val.p;
}
#endif
}
++dest;
}
/* process register arguments */
dest = iloc;
for (indx = 0; indx < endlen; ++indx)
{
if (source[indx].IsPtrData())
{
#ifdef __LP64__
/* 64 bit pointer mode */
*((void**) dest) = source[indx].ptr;
#else
/* 32 bit pointer mode */
uint32_t* adr = (uint32_t*) dest;
*(adr) = 0;
*(adr+1) = (uint32_t) source[indx].ptr;
#endif
}
else
switch (source[indx].type)
{
case nsXPTType::T_I8 : *(dest) = source[indx].val.i8; break;
case nsXPTType::T_I16 : *(dest) = source[indx].val.i16; break;
case nsXPTType::T_I32 : *(dest) = source[indx].val.i32; break;
case nsXPTType::T_I64 : *(dest) = source[indx].val.i64; break;
case nsXPTType::T_U8 : *(dest) = source[indx].val.u8; break;
case nsXPTType::T_U16 : *(dest) = source[indx].val.u16; break;
case nsXPTType::T_U32 : *(dest) = source[indx].val.u32; break;
case nsXPTType::T_U64 : *(dest) = source[indx].val.u64; break;
case nsXPTType::T_FLOAT :
*((double*) (floc++)) = (double) source[indx].val.f;
break;
case nsXPTType::T_DOUBLE:
*((double*) (floc++)) = source[indx].val.d;
break;
case nsXPTType::T_BOOL : *(dest) = source[indx].val.b; break;
case nsXPTType::T_CHAR : *(dest) = source[indx].val.c; break;
case nsXPTType::T_WCHAR : *(dest) = source[indx].val.wc; break;
default:
// all the others are plain pointer types
#ifdef __LP64__
/* 64 bit pointer mode */
*((void**) dest) = source[indx].val.p;
#else
{
/* 32 bit pointer mode */
uint32_t* adr = (uint32_t*) dest;
*(adr) = 0;
*(adr+1) = (uint32_t) source[indx].val.p;
}
#endif
}
++dest;
}
}