diff --git a/iocBoot/iocimagedemo/image.db b/iocBoot/iocimagedemo/image.db index 28aebca..0d9d774 100644 --- a/iocBoot/iocimagedemo/image.db +++ b/iocBoot/iocimagedemo/image.db @@ -74,3 +74,17 @@ record(mbbi, "$(N):ColorMode") { } }) } + +record(bo, "$(N):extra") { + field(ZNAM, "foo") + field(ONAM, "bar") + info(Q:group, { + "$(N):Array":{ + "attribute[1].value":{+type:"any", + +channel:"VAL", + +putorder:0, + +trigger:"attribute[1].value"}, + "attribute[1]":{+type:"meta", +channel:"SEVR"} + } + }) +} diff --git a/pdbApp/pdb.cpp b/pdbApp/pdb.cpp index 3f747dd..435c555 100644 --- a/pdbApp/pdb.cpp +++ b/pdbApp/pdb.cpp @@ -438,6 +438,9 @@ PDBProvider::PDBProvider(const epics::pvAccess::Configuration::const_shared_poin else builder = builder->addNestedStructure(parts[j].name); } + if(parts.back().isArray()) { + builder = builder->addNestedStructureArray(parts.back().name); + } } if(!mem.structID.empty()) @@ -457,7 +460,7 @@ PDBProvider::PDBProvider(const epics::pvAccess::Configuration::const_shared_poin std::tr1::shared_ptr pvifbuilder(PVIFBuilder::create(mem.type, chan.chan)); - if(!parts.empty()) + if(!parts.empty() && !parts.back().isArray()) builder = pvifbuilder->dtype(builder, parts.back().name); else builder = pvifbuilder->dtype(builder, ""); @@ -465,6 +468,8 @@ PDBProvider::PDBProvider(const epics::pvAccess::Configuration::const_shared_poin if(!parts.empty()) { for(size_t j=0; jendNested(); + if(parts.back().isArray()) + builder = builder->endNested(); } if(!mem.pvname.empty()) { @@ -744,8 +749,6 @@ FieldName::FieldName(const std::string& pv) } if(parts.empty()) throw std::runtime_error("Empty field name"); - if(parts.back().isArray()) - throw std::runtime_error("leaf field may not have sub-script : "+pv); } epics::pvData::PVFieldPtr