From 35c68d8c58ac813a90132e700ab4e146212c0d16 Mon Sep 17 00:00:00 2001 From: Cary R Date: Tue, 16 Nov 2010 14:52:57 -0800 Subject: [PATCH] V0.8: Ignore system tasks/functions NULL arguments in @* calculation. System tasks and functions can be defined to have NULL arguments. This patch makes the @* sensitivity list calculation skip these NULL (constant) arguments. --- net_nex_input.cc | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/net_nex_input.cc b/net_nex_input.cc index 0847f505a..a4142bc0b 100644 --- a/net_nex_input.cc +++ b/net_nex_input.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002 Stephen Williams (steve@icarus.com) + * Copyright (c) 2002-2010 Stephen Williams (steve@icarus.com) * * This source code is free software; you can redistribute it * and/or modify it in source code form under the terms of the GNU @@ -130,16 +130,23 @@ NexusSet* NetESelect::nex_input(bool rem_out) return result; } +/* + * The $fread, etc. system functions can have NULL arguments. + */ NexusSet* NetESFunc::nex_input(bool rem_out) { if (nparms_ == 0) return new NexusSet; - NexusSet*result = parms_[0]->nex_input(rem_out); + NexusSet*result; + if (parms_[0]) result = parms_[0]->nex_input(rem_out); + else result = new NexusSet; for (unsigned idx = 1 ; idx < nparms_ ; idx += 1) { - NexusSet*tmp = parms_[idx]->nex_input(rem_out); - result->add(*tmp); - delete tmp; + if (parms_[idx]) { + NexusSet*tmp = parms_[idx]->nex_input(rem_out); + result->add(*tmp); + delete tmp; + } } return result; } @@ -372,16 +379,23 @@ NexusSet* NetRepeat::nex_input(bool rem_out) return result; } +/* + * The $display, etc. system tasks can have NULL arguments. + */ NexusSet* NetSTask::nex_input(bool rem_out) { if (parms_.count() == 0) return new NexusSet; - NexusSet*result = parms_[0]->nex_input(rem_out); + NexusSet*result; + if (parms_[0]) result = parms_[0]->nex_input(rem_out); + else result = new NexusSet; for (unsigned idx = 1 ; idx < parms_.count() ; idx += 1) { - NexusSet*tmp = parms_[idx]->nex_input(rem_out); - result->add(*tmp); - delete tmp; + if (parms_[idx]) { + NexusSet*tmp = parms_[idx]->nex_input(rem_out); + result->add(*tmp); + delete tmp; + } } return result;