Example #1
0
void op_gvdata(mval *v)
{
	mint x;
	DCL_THREADGBL_ACCESS;

	SETUP_THREADGBL_ACCESS;
	if (TREF(gv_last_subsc_null) && NEVER == gv_cur_region->null_subs)
		sgnl_gvnulsubsc();

	x = 0;
	if (gv_cur_region->dyn.addr->acc_meth == dba_bg || gv_cur_region->dyn.addr->acc_meth == dba_mm)
	{
		if (gv_target->root)
			x = gvcst_data();
	} else if (gv_cur_region->dyn.addr->acc_meth == dba_cm)
		x = gvcmx_data();
	else
		x = gvusr_data();
	*v = *fndata_table[x / 10][x & 1];
}
Example #2
0
void op_gvdata(mval *v)
{
	mint			x;
	gvnh_reg_t		*gvnh_reg;
	enum db_acc_method	acc_meth;
	DCL_THREADGBL_ACCESS;

	SETUP_THREADGBL_ACCESS;
	if (TREF(gv_last_subsc_null) && NEVER == gv_cur_region->null_subs)
		sgnl_gvnulsubsc();
	acc_meth = REG_ACC_METH(gv_cur_region);
	if (IS_ACC_METH_BG_OR_MM(acc_meth))
	{
		gvnh_reg = TREF(gd_targ_gvnh_reg);
		if (NULL == gvnh_reg)
			x = (gv_target->root ? gvcst_data() : 0);
		else
			INVOKE_GVCST_SPR_XXX(gvnh_reg, x = gvcst_spr_data());
	} else if (REG_ACC_METH(gv_cur_region) == dba_cm)
		x = gvcmx_data();
	else
		x = gvusr_data();
	*v = *fndata_table[x / 10][x & 1];
}