Clean up SV class definition when using valgrind.
Also fix a memory leak when compiling class properties.
This commit is contained in:
parent
f5717a6e87
commit
927edf03d6
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2012 Stephen Williams (steve@icarus.com)
|
* Copyright (c) 2012-2013 Stephen Williams (steve@icarus.com)
|
||||||
*
|
*
|
||||||
* This source code is free software; you can redistribute it
|
* This source code is free software; you can redistribute it
|
||||||
* and/or modify it in source code form under the terms of the GNU
|
* and/or modify it in source code form under the terms of the GNU
|
||||||
|
|
@ -20,6 +20,10 @@
|
||||||
# include "class_type.h"
|
# include "class_type.h"
|
||||||
# include "compile.h"
|
# include "compile.h"
|
||||||
# include "vpi_priv.h"
|
# include "vpi_priv.h"
|
||||||
|
# include "config.h"
|
||||||
|
#ifdef CHECK_WITH_VALGRIND
|
||||||
|
# include "vvp_cleanup.h"
|
||||||
|
#endif
|
||||||
# include <cassert>
|
# include <cassert>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
@ -55,6 +59,8 @@ void compile_class_property(unsigned idx, char*nam, char*typ)
|
||||||
{
|
{
|
||||||
assert(compile_class);
|
assert(compile_class);
|
||||||
compile_class->set_property(idx, nam);
|
compile_class->set_property(idx, nam);
|
||||||
|
delete[]nam;
|
||||||
|
delete[]typ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void compile_class_done(void)
|
void compile_class_done(void)
|
||||||
|
|
@ -64,3 +70,10 @@ void compile_class_done(void)
|
||||||
scope->classes[compile_class->class_name()] = compile_class;
|
scope->classes[compile_class->class_name()] = compile_class;
|
||||||
compile_class = 0;
|
compile_class = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CHECK_WITH_VALGRIND
|
||||||
|
void class_def_delete(class_type *item)
|
||||||
|
{
|
||||||
|
delete item;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001-2012 Stephen Williams (steve@icarus.com)
|
* Copyright (c) 2001-2013 Stephen Williams (steve@icarus.com)
|
||||||
*
|
*
|
||||||
* This source code is free software; you can redistribute it
|
* This source code is free software; you can redistribute it
|
||||||
* and/or modify it in source code form under the terms of the GNU
|
* and/or modify it in source code form under the terms of the GNU
|
||||||
|
|
@ -116,6 +116,14 @@ static void delete_sub_scopes(struct __vpiScope *scope)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(scope->intern);
|
free(scope->intern);
|
||||||
|
|
||||||
|
/* Clean up any class definitions. */
|
||||||
|
map<std::string, class_type*>::iterator citer;
|
||||||
|
for (citer = scope->classes.begin();
|
||||||
|
citer != scope->classes.end(); ++ citer ) {
|
||||||
|
class_def_delete(citer->second);
|
||||||
|
}
|
||||||
|
scope->classes.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void root_table_delete(void)
|
void root_table_delete(void)
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,7 @@ extern void A_delete(class __vpiHandle *item);
|
||||||
extern void APV_delete(class __vpiHandle *item);
|
extern void APV_delete(class __vpiHandle *item);
|
||||||
extern void PV_delete(class __vpiHandle *item);
|
extern void PV_delete(class __vpiHandle *item);
|
||||||
extern void class_delete(class __vpiHandle *item);
|
extern void class_delete(class __vpiHandle *item);
|
||||||
|
extern void class_def_delete(class_type *item);
|
||||||
extern void constant_delete(class __vpiHandle *item);
|
extern void constant_delete(class __vpiHandle *item);
|
||||||
extern void contexts_delete(struct __vpiScope *scope);
|
extern void contexts_delete(struct __vpiScope *scope);
|
||||||
extern void darray_delete(class __vpiHandle *item);
|
extern void darray_delete(class __vpiHandle *item);
|
||||||
|
|
@ -62,6 +63,7 @@ extern void exec_ufunc_delete(vvp_code_t euf_code);
|
||||||
extern void vthreads_delete(struct __vpiScope*scope);
|
extern void vthreads_delete(struct __vpiScope*scope);
|
||||||
extern void vvp_net_delete(vvp_net_t *item);
|
extern void vvp_net_delete(vvp_net_t *item);
|
||||||
|
|
||||||
|
|
||||||
extern void pool_local_net(vvp_net_t *net);
|
extern void pool_local_net(vvp_net_t *net);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue