12345678910111213141516171819202122232425262728293031323334353637[@@@warning"-9-27"]includeCtypesletliftx=xopenCtypes_staticletrecfield:typeta.ttyp->string->atyp->(a,t)field=funsfnameftype->matchs,fnamewith|View{ty;_},_->let{ftype;foffset;fname}=fieldtyfnameftypein{ftype;foffset;fname}|_->failwith("Unexpected field "^fname)letrecseal:typea.atyp->unit=function|Struct{tag;spec=Complete_;_}->raise(ModifyingSealedTypetag)|Union{utag;uspec=Some_;_}->raise(ModifyingSealedTypeutag)|View{ty;_}->sealty|_->raise(Unsupported"Sealing a non-structured type")type'aconst='aletconstant(typet)name(t:ttyp):t=matcht,namewith|Ctypes_static.View{Ctypes_static.read=read1;ty=Ctypes_static.PrimitiveCstubs_internals.Int64_t},"SCM_UNDEFINED"->(read1(2308L))|Ctypes_static.View{Ctypes_static.read=read2;ty=Ctypes_static.PrimitiveCstubs_internals.Int64_t},"SCM_EOL"->(read2(772L))|Ctypes_static.View{Ctypes_static.read=read3;ty=Ctypes_static.PrimitiveCstubs_internals.Int64_t},"SCM_BOOL_T"->(read3(1028L))|Ctypes_static.View{Ctypes_static.read=read4;ty=Ctypes_static.PrimitiveCstubs_internals.Int64_t},"SCM_BOOL_F"->(read4(4L))|_,s->failwith("unmatched constant: "^s)letenum(typea)name?typedef?unexpected(alist:(a*int64)list)=matchnamewith|s->failwith("unmatched enum: "^s)