int32_t sp::ComputeSizeOfType(ReportingContext &cc, Type *aType, size_t level) { if (aType->isUnresolvedTypedef()) { cc.report(rmsg::recursive_type); return 0; } if (!aType->isArray()) { cc.report(rmsg::sizeof_needs_array); return 0; } ArrayType *type = aType->toArray(); for (size_t i = 1; i <= level; i++) { if (!type->contained()->isArray()) { cc.report(rmsg::sizeof_invalid_rank); return 0; } type = type->contained()->toArray(); } if (!type->hasFixedLength()) { cc.report(rmsg::sizeof_indeterminate); return 0; } return type->fixedLength(); }
FileReader(ReportingContext &cc, const char *path) : cc_(cc), path_(path), fp_(nullptr) { if ((fp_ = fopen(path, "rb")) == nullptr) cc.report(rmsg::file_read_error) << path; }