Global Metrics
path: .metrics.cyclomatic.average
old: 1.0
new: 9.5
path: .metrics.cyclomatic.sum
old: 9.0
new: 19.0
path: .metrics.mi.mi_sei
old: 56.981692257846426
new: 41.52115081066629
path: .metrics.mi.mi_visual_studio
old: 36.96594739165261
new: 34.91977757443568
path: .metrics.mi.mi_original
old: 63.21177003972596
new: 59.712819652285006
path: .metrics.cognitive.average
old: 0.0
new: 11.0
path: .metrics.cognitive.sum
old: 0.0
new: 11.0
path: .metrics.loc.cloc
old: 28.0
new: 10.0
path: .metrics.loc.lloc
old: 0.0
new: 51.0
path: .metrics.loc.blank
old: 1.0
new: 6.0
path: .metrics.loc.sloc
old: 75.0
new: 62.0
path: .metrics.nom.total
old: 4.0
new: 1.0
path: .metrics.nom.functions
old: 4.0
new: 1.0
path: .metrics.halstead.difficulty
old: 10.304347826086955
new: 26.138297872340427
path: .metrics.halstead.effort
old: 10020.20383957865
new: 57918.19379943147
path: .metrics.halstead.volume
old: 972.4248451911768
new: 2215.8364742151234
path: .metrics.halstead.n2
old: 46.0
new: 47.0
path: .metrics.halstead.N2
old: 79.0
new: 117.0
path: .metrics.halstead.n1
old: 12.0
new: 21.0
path: .metrics.halstead.estimated_program_length
old: 297.1033999872765
new: 353.3043419072029
path: .metrics.halstead.time
old: 556.6779910877027
new: 3217.6774333017484
path: .metrics.halstead.N1
old: 87.0
new: 247.0
path: .metrics.halstead.purity_ratio
old: 1.7897795179956415
new: 0.9706163239208871
path: .metrics.halstead.vocabulary
old: 58.0
new: 68.0
path: .metrics.halstead.bugs
old: 0.15492795304621867
new: 0.49898644918757806
path: .metrics.halstead.length
old: 166.0
new: 364.0
path: .metrics.halstead.level
old: 0.0970464135021097
new: 0.03825803825803826
path: .metrics.nargs.average
old: 0.5
new: 4.0
path: .metrics.nargs.sum
old: 2.0
new: 4.0
Spaces Data
Minimal test - lines (11, 61)
path: .spaces[0].metrics.mi.mi_sei
old: 63.247598965511216
new: 42.65424258183464
path: .spaces[0].metrics.mi.mi_original
old: 67.63715634882567
new: 63.20576073319105
path: .spaces[0].metrics.mi.mi_visual_studio
old: 39.55389260165243
new: 36.9624331773047
path: .spaces[0].metrics.loc.cloc
old: 22.0
new: 6.0
path: .spaces[0].metrics.loc.lloc
old: 0.0
new: 51.0
path: .spaces[0].metrics.loc.sloc
old: 59.0
new: 51.0
path: .spaces[0].metrics.loc.blank
old: 0.0
new: 2.0
path: .spaces[0].metrics.loc.ploc
old: 39.0
new: 43.0
path: .spaces[0].metrics.halstead.bugs
old: 0.15255164262649787
new: 0.5060064429226635
path: .spaces[0].metrics.halstead.n2
old: 41.0
new: 44.0
path: .spaces[0].metrics.halstead.effort
old: 9790.552815994854
new: 59144.71618778219
path: .spaces[0].metrics.halstead.N1
old: 87.0
new: 247.0
path: .spaces[0].metrics.halstead.purity_ratio
old: 1.6417448887374708
new: 0.9209242578902912
path: .spaces[0].metrics.halstead.volume
old: 916.4672727301116
new: 2174.074780503272
path: .spaces[0].metrics.halstead.level
old: 0.09360730593607304
new: 0.03675856307435255
path: .spaces[0].metrics.halstead.estimated_program_length
old: 262.6791821979953
new: 332.45365709839507
path: .spaces[0].metrics.halstead.length
old: 160.0
new: 361.0
path: .spaces[0].metrics.halstead.n1
old: 12.0
new: 21.0
path: .spaces[0].metrics.halstead.vocabulary
old: 53.0
new: 65.0
path: .spaces[0].metrics.halstead.difficulty
old: 10.682926829268292
new: 27.204545454545453
path: .spaces[0].metrics.halstead.N2
old: 73.0
new: 114.0
path: .spaces[0].metrics.halstead.time
old: 543.919600888603
new: 3285.8175659879
path: .spaces[0].metrics.cyclomatic.average
old: 1.0
new: 18.0
path: .spaces[0].metrics.cyclomatic.sum
old: 8.0
new: 18.0
path: .spaces[0].metrics.nargs.sum
old: 2.0
new: 4.0
path: .spaces[0].metrics.nargs.average
old: 0.5
new: 4.0
path: .spaces[0].metrics.cognitive.average
old: 0.0
new: 11.0
path: .spaces[0].metrics.cognitive.sum
old: 0.0
new: 11.0
path: .spaces[0].metrics.nom.functions
old: 4.0
new: 1.0
path: .spaces[0].metrics.nom.total
old: 4.0
new: 1.0
Code
extern "C" void
invoke_copy_to_stack(uint64_t* d, uint32_t paramCount, nsXPTCVariant* s, double *fprData)
{
/*
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;
uint32_t l_paramCount = paramCount, fpCount = 0;
double *l_fprData = fprData;
for(uint32_t i = 0; i < l_paramCount; i++, l_d++, l_s++)
{
if(l_s->IsPtrData())
{
*l_d = (uint64_t)l_s->ptr;
continue;
}
switch(l_s->type)
{
case nsXPTType::T_I8: *l_d = (uint64_t)l_s->val.i8; break;
case nsXPTType::T_I16: *l_d = (uint64_t)l_s->val.i16; break;
case nsXPTType::T_I32: *l_d = (uint64_t)l_s->val.i32; break;
case nsXPTType::T_I64: *l_d = (uint64_t)l_s->val.i64; break;
case nsXPTType::T_U8: *l_d = (uint64_t)l_s->val.u8; break;
case nsXPTType::T_U16: *l_d = (uint64_t)l_s->val.u16; break;
case nsXPTType::T_U32: *l_d = (uint64_t)l_s->val.u32; break;
case nsXPTType::T_U64: *l_d = (uint64_t)l_s->val.u64; break;
case nsXPTType::T_BOOL: *l_d = (uint64_t)l_s->val.b; break;
case nsXPTType::T_CHAR: *l_d = (uint64_t)l_s->val.c; break;
case nsXPTType::T_WCHAR: *l_d = (uint64_t)l_s->val.wc; break;
case nsXPTType::T_DOUBLE:
*((double*)l_d) = l_s->val.d;
if(fpCount < 13)
l_fprData[fpCount++] = l_s->val.d;
break;
case nsXPTType::T_FLOAT:
*((float*)l_d) = l_s->val.f;
if(fpCount < 13)
l_fprData[fpCount++] = l_s->val.f;
break;
default:
// all the others are plain pointer types
*l_d = (uint64_t)l_s->val.p;
break;
}
}
}