%if !EXISTS("::_BLOCK_PRIVATE_API_")
%assign ::_BLOCK_PRIVATE_API_ = 1
%function SLibInBlockScope() void
%return EXISTS("BlockIdx")
%endfunction
%function SLibGetCurrentBlock() void
%assert SLibInBlockScope()
%assign self = ::CompiledModel.System[BlockIdx[0]].Block[BlockIdx[2]]
%if self.BlockIdx[0] != BlockIdx[0] || self.BlockIdx[2] != BlockIdx[2]
%error "Incoherent BlockIdx in record."
%endif
%return self
%endfunction
%function SLibBlockIsExpressionCompliant(block) void
%return CGMODEL_ACCESS("Block.GetTLCExpressionCompliance", ...
block.BlockIdx[0], block.BlockIdx[2])
%endfunction
%function SLibBlockIntegerDowncastRequired(block) void
%return CGMODEL_ACCESS("Block.GetEnforceIntegerDowncast", ...
block.BlockIdx[0], block.BlockIdx[2])
%endfunction
%function SLibBlockGetCustomStorageComplianceLevel(block) void
%return CGMODEL_ACCESS("Block.GetCSCComplianceLevel", ...
block.BlockIdx[0], block.BlockIdx[2])
%endfunction
%endif