src/API.cpp
changeset 188 bab29bcec7fe
parent 187 9308d52205a0
child 195 c1ba166f3fc4
     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            }