@@ -39,6 +39,9 @@ const matlab_saveobj_ret_types = String[
3939 " timetable"
4040]
4141
42+ # Warning message for unknown regions
43+ const warn_msg = " Unknown metadata found in MCOS subsystem. Please raise an issue to the maintainers to help improve support."
44+
4245mutable struct Subsystem
4346 load_object_cache:: Dict{UInt32,MatlabOpaque}
4447 save_object_cache:: IdDict{MatlabOpaque,UInt32}
@@ -179,6 +182,34 @@ function load_mcos_regions!(
179182 end
180183end
181184
185+ function check_unknown_regions (subsys:: Subsystem )
186+ # Warn about unsupported regions
187+ # We don't know what they contain yet
188+ # Users can raise issues if they see this warning to help improve support
189+
190+ if length (subsys. _u6_metadata) > 0
191+ # This region is supposedly empty
192+ @warn warn_msg
193+ end
194+
195+ if any (subsys. _u7_metadata .!= 0 )
196+ # This is an 8 byte region, all zeros
197+ @warn warn_msg
198+ end
199+
200+ if subsys. _c3 === nothing
201+ return
202+ else
203+ for i= 1 : length (subsys. _c3)
204+ # This region is a cell array of empty structs
205+ if length (subsys. _c3[i]) > 0
206+ @warn warn_msg
207+ break
208+ end
209+ end
210+ end
211+ end
212+
182213function get_region (
183214 fwrap_metadata:: Vector{UInt8} , region_offsets:: AbstractVector{UInt32} , region:: Integer
184215)
@@ -221,6 +252,7 @@ function load_subsys!(subsys::Subsystem, subsystem_data::Dict{String,Any}, swap_
221252 end
222253
223254 subsys. prop_vals_defaults = mcos_data[end , 1 ]
255+ check_unknown_regions (subsys)
224256 return subsys
225257 catch
226258 @warn " Failed to load MAT-file subsystem data. Opaque objects will be skipped. Error: $(catch_backtrace ()) "
@@ -232,6 +264,12 @@ function get_classname(subsys::Subsystem, class_id::UInt32)
232264 namespace_idx = subsys. class_id_metadata[class_id * 4 + 1 ]
233265 classname_idx = subsys. class_id_metadata[class_id * 4 + 2 ]
234266
267+ if subsys. class_id_metadata[class_id * 4 + 3 ] != 0 ||
268+ subsys. class_id_metadata[class_id * 4 + 4 ] != 0
269+ # Unknown metadata
270+ @warn warn_msg
271+ end
272+
235273 namespace = if namespace_idx == 0
236274 " "
237275 else
@@ -369,7 +407,12 @@ function get_properties(subsys::Subsystem, object_id::UInt32)
369407 return Dict {String,Any} ()
370408 end
371409
372- class_id, _, _, saveobj_id, normobj_id, dep_id = get_object_metadata (subsys, object_id)
410+ class_id, _x1, _x2, saveobj_id, normobj_id, dep_id = get_object_metadata (subsys, object_id)
411+ if _x1 != 0 || _x2 != 0
412+ # Unknown metadata
413+ @warn warn_msg
414+ end
415+
373416 if saveobj_id != 0
374417 saveobj_ret_type = true
375418 obj_type_id = saveobj_id
0 commit comments