1.1 --- a/src/API.cpp Sun Sep 16 19:02:23 2012 -0700
1.2 +++ b/src/API.cpp Sun Sep 16 21:34:10 2012 -0700
1.3 @@ -489,34 +489,36 @@
1.4
1.5 case Ke::Parameter::Array:
1.6 {
1.7 - ke::Local<ke::ArrayMap> map(ke::ZONE(), ke::ZONE()->genericArrayMap());
1.8 + ke::Local<ke::ArrayMap> map(ke::ZONE(), ke::ZONE()->externalGenericArrayMap());
1.9 if (params[i].writeback()) {
1.10 - slot.obj = Array::NewExternal(ke::ZONE(), map, params[i].length(),
1.11 - params[i].buffer(), Heap::Tenure_Stack);
1.12 + slot.obj = Array::NewExternal(ke::ZONE(), map, params[i].buffer(),
1.13 + params[i].length(), Heap::Tenure_Stack);
1.14 if (!slot.obj)
1.15 return false;
1.16 } else {
1.17 Array *array = Array::New1D(ke::ZONE(), map, params[i].length(), Heap::Tenure_Stack);
1.18 if (!slot.obj)
1.19 return false;
1.20 - memcpy(array->vec(), params[i].buffer(), params[i].length() * sizeof(int));
1.21 + if (params[i].length())
1.22 + memcpy(array->bytes(), params[i].buffer(), params[i].length() * sizeof(int));
1.23 }
1.24 break;
1.25 }
1.26
1.27 case Ke::Parameter::CharArray:
1.28 {
1.29 - ke::Local<ke::ArrayMap> map(ke::ZONE(), ke::ZONE()->charArrayMap());
1.30 + ke::Local<ke::ArrayMap> map(ke::ZONE(), ke::ZONE()->externalCharArrayMap());
1.31 if (params[i].writeback()) {
1.32 - slot.obj = Array::NewExternal(ke::ZONE(), map, params[i].length(),
1.33 - params[i].buffer(), Heap::Tenure_Stack);
1.34 + slot.obj = Array::NewExternal(ke::ZONE(), map, params[i].buffer(),
1.35 + params[i].length(), Heap::Tenure_Stack);
1.36 if (!slot.obj)
1.37 return false;
1.38 } else {
1.39 Array *array = Array::New1D(ke::ZONE(), map, params[i].length(), Heap::Tenure_Stack);
1.40 if (!slot.obj)
1.41 return false;
1.42 - memcpy(array->vec(), params[i].buffer(), params[i].length() * sizeof(char));
1.43 + if (params[i].length())
1.44 + memcpy(array->bytes(), params[i].buffer(), params[i].length() * sizeof(char));
1.45 }
1.46 break;
1.47 }