summaryrefslogtreecommitdiffstats
path: root/src/vhd2vl.y
diff options
context:
space:
mode:
authorLarry Doolittle <ldoolitt@recycle.lbl.gov>2017-11-23 18:34:08 -0800
committerLarry Doolittle <ldoolitt@recycle.lbl.gov>2017-11-23 18:34:08 -0800
commita043b124b5390380638eeec56fb143d2670af85c (patch)
tree5e47a230482db068dc3ce89716b6d6f2f04d6b82 /src/vhd2vl.y
parentd65dfa59badc67797353ff65df9ad6e73af878e9 (diff)
downloadvhdl2vl-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.y32
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:
OpenPOWER on IntegriCloud