core/systems/CFunction.cpp
changeset 183 78488edd8873
parent 181 1e1570518051
child 185 5e0987d38ee0
     1.1 --- a/core/systems/CFunction.cpp	Sun Nov 12 02:27:27 2006 +0000
     1.2 +++ b/core/systems/CFunction.cpp	Sun Nov 12 09:51:39 2006 +0000
     1.3 @@ -76,7 +76,7 @@
     1.4  {
     1.5  	if (!each)
     1.6  	{
     1.7 -		return PushArray(array, numcells, NULL, SMFUNC_COPYBACK_NONE);
     1.8 +		return PushArray(array, numcells, NULL, 0);
     1.9  	} else {
    1.10  		int err;
    1.11  		for (unsigned int i=0; i<numcells; i++)
    1.12 @@ -106,7 +106,7 @@
    1.13  		return SetError(err);
    1.14  	}
    1.15  
    1.16 -	info->flags = (inarray || (copyback & SMFUNC_COPYBACK_ALWAYS)) ? copyback : SMFUNC_COPYBACK_NONE;
    1.17 +	info->flags = inarray ? copyback : 0;
    1.18  	info->marked = true;
    1.19  	info->size = cells;
    1.20  	m_params[m_curparam] = info->local_addr;
    1.21 @@ -114,10 +114,7 @@
    1.22  
    1.23  	if (inarray)
    1.24  	{
    1.25 -		if (!(copyback & SMFUNC_ARRAY_NOINIT))
    1.26 -		{
    1.27 -			memcpy(info->phys_addr, inarray, sizeof(cell_t) * cells);
    1.28 -		}
    1.29 +		memcpy(info->phys_addr, inarray, sizeof(cell_t) * cells);
    1.30  		info->orig_addr = inarray;
    1.31  	} else {
    1.32  		info->orig_addr = info->phys_addr;
    1.33 @@ -133,10 +130,10 @@
    1.34  
    1.35  int CFunction::PushString(const char *string)
    1.36  {
    1.37 -	return _PushString(string, SMFUNC_COPYBACK_NONE);
    1.38 +	return _PushString(string, 0);
    1.39  }
    1.40  
    1.41 -int CFunction::PushStringByRef(char *string, int flags)
    1.42 +int CFunction::PushStringEx(char *string, int flags)
    1.43  {
    1.44  	return _PushString(string, flags);
    1.45  }
    1.46 @@ -163,8 +160,7 @@
    1.47  	m_params[m_curparam] = info->local_addr;
    1.48  	m_curparam++;	/* Prevent a leak */
    1.49  
    1.50 -	//:TODO: Use UTF-8 version
    1.51 -	if ((err=base->StringToLocal(info->local_addr, len, string)) != SP_ERROR_NONE)
    1.52 +	if ((err=base->StringToLocalUTF8(info->local_addr, len, string, NULL)) != SP_ERROR_NONE)
    1.53  	{
    1.54  		return SetError(err);
    1.55  	}
    1.56 @@ -197,7 +193,7 @@
    1.57  	m_errorstate = SP_ERROR_NONE;
    1.58  }
    1.59  
    1.60 -int CFunction::Execute(cell_t *result, IFunctionCopybackReader *reader)
    1.61 +int CFunction::Execute(cell_t *result)
    1.62  {
    1.63  	int err;
    1.64  	if (m_errorstate != SP_ERROR_NONE)
    1.65 @@ -236,17 +232,6 @@
    1.66  		}
    1.67  		if (docopies && temp_info[numparams].flags)
    1.68  		{
    1.69 -			if (reader)
    1.70 -			{
    1.71 -				if (!reader->OnCopybackArray(numparams, 
    1.72 -										temp_info[numparams].size, 
    1.73 -										temp_info[numparams].phys_addr,
    1.74 -										temp_info[numparams].orig_addr,
    1.75 -										temp_info[numparams].flags))
    1.76 -				{
    1.77 -					goto _skipcopy;
    1.78 -				}
    1.79 -			}
    1.80  			if (temp_info[numparams].orig_addr)
    1.81  			{
    1.82  				if (temp_info[numparams].size == 1)
    1.83 @@ -259,7 +244,6 @@
    1.84  				}
    1.85  			}
    1.86  		}
    1.87 -_skipcopy:
    1.88  		base->HeapPop(temp_info[numparams].local_addr);
    1.89  		temp_info[numparams].marked = false;
    1.90  	}