| 3211 | } |
| 3212 | |
| 3213 | UHDM::any* CompileHelper::defaultPatternAssignment(const UHDM::typespec* tps, |
| 3214 | UHDM::any* exp, |
| 3215 | DesignComponent* component, |
| 3216 | CompileDesign* compileDesign, |
| 3217 | ValuedComponentI* instance) { |
| 3218 | any* result = exp; |
| 3219 | if (tps == nullptr) { |
| 3220 | return result; |
| 3221 | } |
| 3222 | if (exp == nullptr) { |
| 3223 | return result; |
| 3224 | } |
| 3225 | UHDM::Serializer& s = compileDesign->getSerializer(); |
| 3226 | FileSystem* const fileSystem = FileSystem::getInstance(); |
| 3227 | bool invalidValue = false; |
| 3228 | int32_t ncsize = 32; |
| 3229 | range* r = nullptr; |
| 3230 | UHDM_OBJECT_TYPE ttps = tps->UhdmType(); |
| 3231 | UHDM_OBJECT_TYPE baseType = uhdmint_typespec; |
| 3232 | if (ttps == uhdmlogic_typespec) { |
| 3233 | logic_typespec* lts = (logic_typespec*)tps; |
| 3234 | baseType = uhdmlogic_typespec; |
| 3235 | if (lts->Ranges() && !lts->Ranges()->empty()) { |
| 3236 | r = (*lts->Ranges())[0]; |
| 3237 | } |
| 3238 | ncsize = 1; |
| 3239 | } else if (ttps == uhdmarray_typespec) { |
| 3240 | array_typespec* lts = (array_typespec*)tps; |
| 3241 | typespec* ets = nullptr; |
| 3242 | if (ref_typespec* rt = lts->Elem_typespec()) { |
| 3243 | ets = rt->Actual_typespec(); |
| 3244 | } |
| 3245 | if (ets != nullptr) { |
| 3246 | baseType = ets->UhdmType(); |
| 3247 | if (lts->Ranges() && !lts->Ranges()->empty()) { |
| 3248 | r = (*lts->Ranges())[0]; |
| 3249 | } |
| 3250 | ncsize = Bits( |
| 3251 | ets, invalidValue, component, compileDesign, Reduce::Yes, instance, |
| 3252 | fileSystem->toPathId(ets->VpiFile(), |
| 3253 | compileDesign->getCompiler()->getSymbolTable()), |
| 3254 | ets->VpiLineNo(), false); |
| 3255 | } |
| 3256 | } else if (ttps == uhdmpacked_array_typespec) { |
| 3257 | packed_array_typespec* lts = (packed_array_typespec*)tps; |
| 3258 | typespec* ets = nullptr; |
| 3259 | if (ref_typespec* rt = lts->Elem_typespec()) { |
| 3260 | ets = rt->Actual_typespec(); |
| 3261 | } |
| 3262 | if (ets != nullptr) { |
| 3263 | baseType = ets->UhdmType(); |
| 3264 | if (lts->Ranges() && !lts->Ranges()->empty()) { |
| 3265 | r = (*lts->Ranges())[0]; |
| 3266 | } |
| 3267 | ncsize = Bits( |
| 3268 | ets, invalidValue, component, compileDesign, Reduce::Yes, instance, |
| 3269 | fileSystem->toPathId(ets->VpiFile(), |
| 3270 | compileDesign->getCompiler()->getSymbolTable()), |
no test coverage detected