diff --git a/src/frontend/inpcom.c b/src/frontend/inpcom.c index 5ffad95a5..3c79011bc 100644 --- a/src/frontend/inpcom.c +++ b/src/frontend/inpcom.c @@ -6713,8 +6713,9 @@ inp_meas_current(struct line *deck) static void inp_add_levels(struct line *deck) { - struct line *card, *subc_start = NULL, *subc_prev = NULL; - int skip_control = 0, subs = 0; + struct line *card, *card_prev = deck; + int skip_control = 0, subs = 0, i; + static unsigned short levelinfo[NESTINGDEPTH]; for (card = deck; card; card = card->li_next) { @@ -6739,15 +6740,27 @@ inp_add_levels(struct line *deck) if (*curr_line == '.') { if (ciprefix(".subckt", curr_line)) { subs++; - subc_prev = subc_start; - subc_start = card; + levelinfo[subs - 1]++; + for (i = 0; i < NESTINGDEPTH; i++) + card->level[i] = levelinfo[i]; + card_prev = card; } else if (ciprefix(".ends", curr_line)) { subs--; - subc_start = subc_prev; + for (i = 0; i < NESTINGDEPTH; i++) + card->level[i] = card_prev->level[i]; + card_prev = card; } - else - continue; + else { + for (i = 0; i < NESTINGDEPTH; i++) + card->level[i] = card_prev->level[i]; + card_prev = card; + } + } + else { + for (i = 0; i < NESTINGDEPTH; i++) + card->level[i] = card_prev->level[i]; + card_prev = card; } } }