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 }