MCPcopy Create free account
hub / github.com/FuzzAnything/PromptFuzz / refine_constraints_for_func

Function refine_constraints_for_func

src/program/infer/static_infer.rs:321–379  ·  view source on GitHub ↗

traversal the constraints and refine the conflic constraints. The remain constraits are creadiable.

(constraints: Vec<Constraint>)

Source from the content-addressed store, hash-verified

319
320/// traversal the constraints and refine the conflic constraints. The remain constraits are creadiable.
321fn refine_constraints_for_func(constraints: Vec<Constraint>) -> Vec<Constraint> {
322 let mut refined = Vec::new();
323 // refine for arg_tuple
324 let mut tuple_constraints: HashMap<ArgTuple, Vec<Constraint>> = HashMap::new();
325 for constraint in constraints {
326 if let Some(tuple) = constraint.get_arg_tuple() {
327 if let Some(cs) = tuple_constraints.get_mut(tuple) {
328 cs.push(constraint);
329 } else {
330 let cs = vec![constraint.clone()];
331 tuple_constraints.insert(*tuple, cs);
332 }
333 } else {
334 refined.push(constraint);
335 }
336 }
337
338 for (_, constraints) in tuple_constraints {
339 let refined_arg_cs = refine_constraints_for_arg_tuple(constraints);
340 refined.extend(refined_arg_cs);
341 }
342
343 // refine for array arg
344 let mut arg_constraints: HashMap<usize, Vec<Constraint>> = HashMap::new();
345 for constraint in refined {
346 let array_pos = constraint.get_array_arg();
347 if let Some(cs) = arg_constraints.get_mut(&array_pos) {
348 cs.push(constraint);
349 } else {
350 let cs = vec![constraint];
351 arg_constraints.insert(array_pos, cs);
352 }
353 }
354
355 let mut refined = Vec::new();
356 for (_, constraints) in arg_constraints {
357 let refined_arg_cs = refine_constraints_for_array_arg(constraints);
358 refined.extend(refined_arg_cs);
359 }
360
361 // refine for integer arg
362 let mut arg_constraints: HashMap<usize, Vec<Constraint>> = HashMap::new();
363 for constraint in refined {
364 let integer_pos = constraint.get_integer_arg();
365 if let Some(cs) = arg_constraints.get_mut(&integer_pos) {
366 cs.push(constraint);
367 } else {
368 let cs = vec![constraint];
369 arg_constraints.insert(integer_pos, cs);
370 }
371 }
372
373 let mut refined = Vec::new();
374 for (_, constraints) in arg_constraints {
375 let refined_arg_cs = refine_constraints_for_integer_arg(constraints);
376 refined.extend(refined_arg_cs);
377 }
378 refined

Callers 1

refine_constraintsFunction · 0.85

Calls 7

get_arg_tupleMethod · 0.80
get_array_argMethod · 0.80
get_integer_argMethod · 0.80
pushMethod · 0.45

Tested by

no test coverage detected