diff options
author | Larry Doolittle <ldoolitt@recycle.lbl.gov> | 2017-11-23 18:34:08 -0800 |
---|---|---|
committer | Larry Doolittle <ldoolitt@recycle.lbl.gov> | 2017-11-23 18:34:08 -0800 |
commit | a043b124b5390380638eeec56fb143d2670af85c (patch) | |
tree | 5e47a230482db068dc3ce89716b6d6f2f04d6b82 /src/vhd2vl.y | |
parent | d65dfa59badc67797353ff65df9ad6e73af878e9 (diff) | |
download | vhdl2vl-a043b124b5390380638eeec56fb143d2670af85c.tar.gz vhdl2vl-a043b124b5390380638eeec56fb143d2670af85c.zip |
First stupid attempt to finish part select
No attempt to figure out -: vs. +:
Already yields much better results on test files
Diffstat (limited to 'src/vhd2vl.y')
-rw-r--r-- | src/vhd2vl.y | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/src/vhd2vl.y b/src/vhd2vl.y index be3102c..46deefc 100644 --- a/src/vhd2vl.y +++ b/src/vhd2vl.y @@ -302,30 +302,33 @@ slist *addind(slist *sl){ return sl; } -slist *addpar(slist *sl, vrange *v){ +slist *addpar_snug(slist *sl, vrange *v){ + fprintf(stderr,"addpar_snug %d: ", v->sizeval); + fslprint(stderr, v->size_expr); + fprintf(stderr,"\n"); if(v->nlo != NULL) { /* indexes are simple expressions */ - sl=addtxt(sl," ["); + sl=addtxt(sl,"["); if(v->nhi != NULL){ sl=addsl(sl,v->nhi); + if(v->sizeval==-2) sl=addtxt(sl,"+"); sl=addtxt(sl,":"); } - sl=addsl(sl,v->nlo); - sl=addtxt(sl,"] "); - } else { - sl=addtxt(sl," "); + if(v->sizeval==-2){ + sl=addsl(sl,v->size_expr); + sl=addtxt(sl," + 1"); + } else { + sl=addsl(sl,v->nlo); + } + sl=addtxt(sl,"]"); } return sl; } -slist *addpar_snug(slist *sl, vrange *v){ +slist *addpar(slist *sl, vrange *v){ + sl=addtxt(sl," "); if(v->nlo != NULL) { /* indexes are simple expressions */ - sl=addtxt(sl,"["); - if(v->nhi != NULL){ - sl=addsl(sl,v->nhi); - sl=addtxt(sl,":"); - } - sl=addsl(sl,v->nlo); - sl=addtxt(sl,"]"); + sl=addpar_snug(sl, v); + sl=addtxt(sl," "); } return sl; } @@ -1219,6 +1222,7 @@ vec_range : simple_expr updown simple_expr { } } else if ((range_diff = slist_check_diff($$->nhi, $$->nlo))) { if (DEBUG_RANGE) fprintf(stderr, "difference: %s\n", range_diff); + $$->sizeval = -2; /* special */ $$->size_expr = addtxt(NULL, range_diff); } else { /* make an expression to calculate the width of this vrange: |