44 ------------------------------------------------------------------------------
55 The MIT License (MIT)
66
7- Copyright (c) 2024-2025 Aarno Labs LLC
7+ Copyright (c) 2024-2026 Aarno Labs LLC
88
99 Permission is hereby granted, free of charge, to any person obtaining a copy
1010 of this software and associated documentation files (the "Software"), to deal
@@ -88,17 +88,27 @@ let convert_b_attributes_to_function_conditions
8888 | [ACons ((" write_only" | "read_write" ), [] ); AInt refindex ] ->
8989 let par = get_par refindex in
9090 let ty = get_derefty par in
91- ([XXBuffer (ty, ArgValue par, RunTimeValue )],
91+ ([XXBuffer (ty, ArgValue par, RunTimeValue );
92+ XXBlockWrite (ty, ArgValue par, RunTimeValue )],
9293 [XXBlockWrite (ty, ArgValue par, RunTimeValue )])
9394
9495 | [ACons ((" write_only" | " read_write" ), [] );
9596 AInt refindex; AInt sizeindex] ->
9697 let rpar = get_par refindex in
9798 let spar = get_par sizeindex in
9899 let ty = get_derefty rpar in
99- ([XXBuffer (ty, ArgValue rpar, ArgValue spar)],
100+ ([XXBuffer (ty, ArgValue rpar, ArgValue spar);
101+ XXBlockWrite (ty, ArgValue rpar, RunTimeValue )],
100102 [XXBlockWrite (ty, ArgValue rpar, ArgValue spar)])
101103
104+ | [ACons (" write_only" , [AInt buffersize]); AInt refindex] ->
105+ let par = get_par refindex in
106+ let ty = get_derefty par in
107+ let bytesize = CHNumerical. mkNumerical buffersize in
108+ ([XXBuffer (ty, ArgValue par, NumConstant bytesize);
109+ XXBlockWrite (ty, ArgValue par, NumConstant bytesize)],
110+ [XXBlockWrite (ty, ArgValue par, NumConstant bytesize)])
111+
102112 | _ ->
103113 begin
104114 log_error_result
@@ -111,5 +121,72 @@ let convert_b_attributes_to_function_conditions
111121 ([] , [] )
112122 end ) in
113123 (pre @ xpre, side @ xside, xpost)
124+ | Attr ("chk_pre" , params ) ->
125+ let pre =
126+ (match params with
127+ | [ACons (" deref_read" , [] ); AInt refindex] ->
128+ let par = get_par refindex in
129+ let ty = get_derefty par in
130+ [XXBuffer (ty, ArgValue par, RunTimeValue )]
131+
132+ | [ACons (" deref_read" , [] ); AInt refindex; AInt sizeindex] ->
133+ let par1 = get_par refindex in
134+ let par2 = get_par sizeindex in
135+ let ty = get_derefty par1 in
136+ [XXBuffer (ty, ArgValue par1, ArgValue par2)]
137+
138+ | [ACons (" deref_read" , [AInt size]); AInt refindex] ->
139+ let par = get_par refindex in
140+ let ty = get_derefty par in
141+ let c = CHNumerical. mkNumerical size in
142+ [XXBuffer (ty, ArgValue par, NumConstant c)]
143+
144+ | [ACons (" deref_read" , [ACons (" ntp" , [] )]); AInt refindex] ->
145+ let par = get_par refindex in
146+ let ty = get_derefty par in
147+ [XXBuffer (ty, ArgValue par, ArgNullTerminatorPos (ArgValue par))]
148+
149+ | [ACons (" deref_write" , [] ); AInt refindex] ->
150+ let par = get_par refindex in
151+ let ty = get_derefty par in
152+ [XXBlockWrite (ty, ArgValue par, RunTimeValue )]
153+
154+ | [ACons (" deref_write" , [] ); AInt refindex; AInt sizeindex] ->
155+ let par1 = get_par refindex in
156+ let par2 = get_par sizeindex in
157+ let ty = get_derefty par1 in
158+ [XXBlockWrite (ty, ArgValue par1, ArgValue par2)]
159+
160+ | [ACons (" deref_write" , [AInt size]); AInt refindex] ->
161+ let par = get_par refindex in
162+ let ty = get_derefty par in
163+ let c = CHNumerical. mkNumerical size in
164+ [XXBlockWrite (ty, ArgValue par, NumConstant c)]
165+
166+ | [ACons (" not_null" , [] ); AInt refindex] ->
167+ let par = get_par refindex in
168+ [XXNotNull (ArgValue par)]
169+
170+ | [ACons (" null_terminated" , [] ); AInt refindex] ->
171+ let par = get_par refindex in
172+ [XXNullTerminated (ArgValue par)]
173+
174+ | [ACons (" initialized_range" , [ACons (" ntp" , [] )]); AInt refindex] ->
175+ let par = get_par refindex in
176+ let ty = get_derefty par in
177+ [XXInitializedRange (
178+ ty, ArgValue par, ArgNullTerminatorPos (ArgValue par))]
179+
180+ | _ ->
181+ begin
182+ log_error_result
183+ ~tag: " convert_b_attributes_to_function_conditions"
184+ ~msg: (name ^ " :chk_pre" )
185+ __FILE__ __LINE__
186+ [String. concat " , " (List. map b_attrparam_to_string params)];
187+ []
188+ end ) in
189+ (pre @ xpre, xside, xpost)
190+
114191 | _ ->
115192 acc) ([] , [] , [] ) attrs
0 commit comments