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

Method visit_var_decl

src/analysis/dfa.rs:168–201  ·  view source on GitHub ↗
(&mut self, stmt: &ast::Node)

Source from the content-addressed store, hash-verified

166 }
167
168 fn visit_var_decl(&mut self, stmt: &ast::Node) -> Result<()> {
169 if let ast::Clang::VarDecl(vd) = &stmt.kind {
170 let var = vd.get_name(stmt);
171 let ty = vd.get_type();
172 // if has init, init an object for this var.
173 let sym = if vd.has_init(stmt) {
174 let init = vd.get_init(stmt);
175 self.get_rvalue(init)?
176 } else {
177 self.env_mgr.create_uninit_object(ty)
178 };
179 self.store_mgr.bind_value(var, sym)?;
180 return Ok(());
181 } else if let ast::Clang::ParmVarDecl(pvd) = &stmt.kind {
182 let var = pvd.get_name(stmt);
183 let ty = pvd.get_type();
184 let sym = self.env_mgr.create_uninit_object(ty);
185 self.store_mgr.bind_value(var, sym)?;
186 return Ok(());
187 } else if let ast::Clang::FunctionDecl(_) = &stmt.kind {
188 return Ok(());
189 } else if let ast::Clang::CXXRecordDecl(_) = &stmt.kind {
190 return Ok(());
191 } else if let ast::Clang::RecordDecl(_) = &stmt.kind {
192 return Ok(());
193 } else if let ast::Clang::TypedefDecl(_) = &stmt.kind {
194 return Ok(());
195 } else if let ast::Clang::EnumDecl(_) = &stmt.kind {
196 return Ok(());
197 } else if let ast::Clang::Other = &stmt.kind {
198 return Ok(());
199 }
200 eyre::bail!("Visit VarDecl, but visited {stmt:?}")
201 }
202
203 fn visit_binary_operator(&mut self, stmt: &ast::Node) -> Result<()> {
204 if let ast::Clang::BinaryOperator(bo) = &stmt.kind {

Callers 2

visit_stmtMethod · 0.80
visit_decl_stmtMethod · 0.80

Calls 7

get_typeMethod · 0.80
has_initMethod · 0.80
get_initMethod · 0.80
get_rvalueMethod · 0.80
create_uninit_objectMethod · 0.80
bind_valueMethod · 0.80
get_nameMethod · 0.45

Tested by

no test coverage detected