From 53fda635c95a2c122545b6ee1a4dad09e16661be Mon Sep 17 00:00:00 2001 From: stefan schippers Date: Thu, 6 Feb 2025 10:39:50 +0100 Subject: [PATCH] remove dbg msg, reduce precision in eval_expr(), add expr() resolution at end of translate() --- src/eval_expr.y | 2 +- src/token.c | 11 +++++++++-- xschem_library/devices/pmos4.sym | 1 + 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/eval_expr.y b/src/eval_expr.y index 8a94444b..4fa59958 100644 --- a/src/eval_expr.y +++ b/src/eval_expr.y @@ -93,7 +93,7 @@ exp: NUM { $$ = $1;} static void get_expr(double x) { char xx[100]; - my_snprintf(xx, S(xx), "%.16g", x); + my_snprintf(xx, S(xx), "%.15g", x); my_mstrcat(_ALLOC_ID_, &ret, xx, NULL); strptr = str; } diff --git a/src/token.c b/src/token.c index 7eb1576c..b1c2f1c1 100644 --- a/src/token.c +++ b/src/token.c @@ -4488,7 +4488,7 @@ const char *translate(int inst, const char* s) } if(strstr(value1, "expr(") == value1) { char *ptr = strrchr(value1 + 5, ')'); - dbg(0, "translate(): expr():%s\n", value1); + dbg(1, "translate(): expr():%s\n", value1); *ptr = '\0'; my_strdup2(_ALLOC_ID_, &value1, eval_expr( translate3(value1 + 5, 1, xctx->inst[inst].prop_ptr, xctx->sym[xctx->inst[inst].ptr].templ, NULL))); @@ -4514,11 +4514,18 @@ const char *translate(int inst, const char* s) } /* while(1) */ dbg(2, "translate(): returning %s\n", result); my_free(_ALLOC_ID_, &token); - /* if result is like: 'tcleval(some_string)' pass it thru tcl evaluation so expressions * can be calculated */ my_strdup2(_ALLOC_ID_, &translated_tok, spice_get_node(tcl_hook2(result))); + if(strstr(translated_tok, "expr(") == translated_tok) { + char *ptr = strrchr(translated_tok + 5, ')'); + dbg(1, "translate(): expr():%s\n", translated_tok); + *ptr = '\0'; + my_strdup2(_ALLOC_ID_, &translated_tok, eval_expr( + translate3(translated_tok + 5, 1, xctx->inst[inst].prop_ptr, xctx->sym[xctx->inst[inst].ptr].templ, NULL))); + } + return translated_tok; } diff --git a/xschem_library/devices/pmos4.sym b/xschem_library/devices/pmos4.sym index c899b2cf..1e417597 100644 --- a/xschem_library/devices/pmos4.sym +++ b/xschem_library/devices/pmos4.sym @@ -59,3 +59,4 @@ T {@#3:net_name} 25 1.25 0 0 0.15 0.15 {layer=15 hide=instance} T {tcleval(vgs=[to_eng \{@#1:spice_get_voltage - @#2:spice_get_voltage \}] vds=[to_eng \{@#0:spice_get_voltage - @#2:spice_get_voltage \}])} 2.5 20 0 1 0.05 0.05 {layer=15 } T {@spice_get_current} 35 20 0 0 0.15 0.15 {layer=17} +T {expr( @w + @l )} 50 -30 0 0 0.2 0.2 {}