Fix valgrind cleanup of dynamic and queue arrays
This commit is contained in:
parent
6310b47538
commit
d29a6d134f
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001-2013 Stephen Williams (steve@icarus.com)
|
* Copyright (c) 2001-2015 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
|
||||||
|
|
@ -54,9 +54,9 @@ void port_delete(__vpiHandle*handle);
|
||||||
static void delete_sub_scopes(struct __vpiScope *scope)
|
static void delete_sub_scopes(struct __vpiScope *scope)
|
||||||
{
|
{
|
||||||
for (unsigned idx = 0; idx < scope->nintern; idx += 1) {
|
for (unsigned idx = 0; idx < scope->nintern; idx += 1) {
|
||||||
struct __vpiScope*lscope = static_cast<__vpiScope*>
|
vpiHandle item = (scope->intern)[idx];
|
||||||
((scope->intern)[idx]);
|
struct __vpiScope*lscope = static_cast<__vpiScope*>(item);
|
||||||
switch(scope->intern[idx]->get_type_code()) {
|
switch(item->get_type_code()) {
|
||||||
case vpiFunction:
|
case vpiFunction:
|
||||||
case vpiTask:
|
case vpiTask:
|
||||||
contexts_delete(lscope);
|
contexts_delete(lscope);
|
||||||
|
|
@ -66,18 +66,18 @@ static void delete_sub_scopes(struct __vpiScope *scope)
|
||||||
case vpiNamedFork:
|
case vpiNamedFork:
|
||||||
delete_sub_scopes(lscope);
|
delete_sub_scopes(lscope);
|
||||||
vthreads_delete(lscope);
|
vthreads_delete(lscope);
|
||||||
delete (scope->intern)[idx];
|
delete item;
|
||||||
break;
|
break;
|
||||||
case vpiMemory:
|
case vpiMemory:
|
||||||
case vpiNetArray:
|
case vpiNetArray:
|
||||||
memory_delete((scope->intern)[idx]);
|
memory_delete(item);
|
||||||
break;
|
break;
|
||||||
case vpiModPath:
|
case vpiModPath:
|
||||||
/* The destination ModPath is cleaned up later. */
|
/* The destination ModPath is cleaned up later. */
|
||||||
delete (scope->intern)[idx];
|
delete item;
|
||||||
break;
|
break;
|
||||||
case vpiNamedEvent:
|
case vpiNamedEvent:
|
||||||
named_event_delete((scope->intern)[idx]);
|
named_event_delete(item);
|
||||||
break;
|
break;
|
||||||
case vpiNet:
|
case vpiNet:
|
||||||
case vpiReg:
|
case vpiReg:
|
||||||
|
|
@ -87,32 +87,44 @@ static void delete_sub_scopes(struct __vpiScope *scope)
|
||||||
case vpiIntVar:
|
case vpiIntVar:
|
||||||
case vpiByteVar:
|
case vpiByteVar:
|
||||||
case vpiBitVar:
|
case vpiBitVar:
|
||||||
signal_delete((scope->intern)[idx]);
|
signal_delete(item);
|
||||||
break;
|
break;
|
||||||
case vpiParameter:
|
case vpiParameter:
|
||||||
parameter_delete((scope->intern)[idx]);
|
parameter_delete(item);
|
||||||
break;
|
break;
|
||||||
case vpiRealVar:
|
case vpiRealVar:
|
||||||
real_delete((scope->intern)[idx]);
|
real_delete(item);
|
||||||
break;
|
break;
|
||||||
case vpiEnumTypespec:
|
case vpiEnumTypespec:
|
||||||
enum_delete((scope->intern)[idx]);
|
enum_delete(item);
|
||||||
break;
|
break;
|
||||||
case vpiPort:
|
case vpiPort:
|
||||||
port_delete((scope->intern)[idx]);
|
port_delete(item);
|
||||||
break;
|
break;
|
||||||
case vpiStringVar:
|
case vpiStringVar:
|
||||||
string_delete((scope->intern)[idx]);
|
string_delete(item);
|
||||||
break;
|
break;
|
||||||
case vpiClassVar:
|
case vpiClassVar:
|
||||||
class_delete((scope->intern)[idx]);
|
class_delete(item);
|
||||||
break;
|
break;
|
||||||
case vpiRegArray:
|
case vpiArrayVar:
|
||||||
darray_delete((scope->intern)[idx]);
|
switch(item->vpi_get(vpiArrayType)) {
|
||||||
|
case vpiQueueArray:
|
||||||
|
queue_delete(item);
|
||||||
|
break;
|
||||||
|
case vpiDynamicArray:
|
||||||
|
darray_delete(item);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fprintf(stderr, "Need support for array type: %d\n",
|
||||||
|
item->vpi_get(vpiArrayType));
|
||||||
|
assert(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "Need support for type: %d\n",
|
fprintf(stderr, "Need support for type: %d\n",
|
||||||
scope->intern[idx]->get_type_code());
|
item->get_type_code());
|
||||||
assert(0);
|
assert(0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue