diff --git a/src/data.cpp b/src/data.cpp index 95af43f..7e9780b 100644 --- a/src/data.cpp +++ b/src/data.cpp @@ -635,8 +635,11 @@ void Value::copyIn(const void *ptr, StoreType type) // assign array of scalar w/o convert dest = src; + } else if(src.original_type()!=ArrayType::Value) { + // assign array of scalar w/ implicit conversion + dest = detail::copyAs(desc->code.arrayType(), src.original_type(), src.data(), src.size()).freeze(); + } else { - // TODO: alloc and convert throw NoConvert(SB()<<"Unable to assign "<code<<" with "<(), INVALID_ALARM); } +void testAssignArray() +{ + testDiag("%s", __func__); + + auto val = TypeDef(TypeCode::Int32A).create(); + + val = shared_array({1, 2, 3}); + + val = shared_array({4, 5, 6}); // with implied conversion +} + void testAssignUnion() { testDiag("%s", __func__); @@ -438,6 +449,7 @@ MAIN(testdata) testSetup(); testTraverse(); testAssign(); + testAssignArray(); testAssignUnion(); testAssignAny(); testName();