Fix for GitHub issue #28 - Insufficient string escaping in vvp script.

" characters in strings must be escaped when the compiler writes a
quoted string to a vvp script. This patch fixes up a few places where
this wasn't being done.
This commit is contained in:
Martin Whitaker 2014-06-09 22:40:26 +01:00
parent 855bf9cfe8
commit 529e029abd
1 changed files with 12 additions and 8 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2001-2012 Stephen Williams (steve@icarus.com)
* Copyright (c) 2001-2014 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
@ -2151,8 +2151,10 @@ int draw_scope(ivl_scope_t net, ivl_scope_t parent)
}
fprintf(vvp_out, "S_%p .scope %s%s, \"%s\" \"%s\" %d %d",
net, prefix, type, vvp_mangle_name(ivl_scope_basename(net)),
ivl_scope_tname(net), ivl_file_table_index(ivl_scope_file(net)),
net, prefix, type,
vvp_mangle_name(ivl_scope_basename(net)),
vvp_mangle_name(ivl_scope_tname(net)),
ivl_file_table_index(ivl_scope_file(net)),
ivl_scope_lineno(net));
if (parent) {
@ -2177,7 +2179,8 @@ int draw_scope(ivl_scope_t net, ivl_scope_t parent)
if( name == 0 )
name = "";
fprintf( vvp_out, " .port_info %u %s %u \"%s\"\n",
idx, vvp_port_info_type_str(ptype), width, name );
idx, vvp_port_info_type_str(ptype), width,
vvp_mangle_name(name) );
}
}
@ -2187,7 +2190,7 @@ int draw_scope(ivl_scope_t net, ivl_scope_t parent)
switch (ivl_expr_type(pex)) {
case IVL_EX_STRING:
fprintf(vvp_out, "P_%p .param/str \"%s\" %d %d %d, \"%s\";\n",
par, ivl_parameter_basename(par),
par, vvp_mangle_name(ivl_parameter_basename(par)),
ivl_parameter_local(par),
ivl_file_table_index(ivl_parameter_file(par)),
ivl_parameter_lineno(par),
@ -2195,7 +2198,7 @@ int draw_scope(ivl_scope_t net, ivl_scope_t parent)
break;
case IVL_EX_NUMBER:
fprintf(vvp_out, "P_%p .param/l \"%s\" %d %d %d, %sC4<",
par, ivl_parameter_basename(par),
par, vvp_mangle_name(ivl_parameter_basename(par)),
ivl_parameter_local(par),
ivl_file_table_index(ivl_parameter_file(par)),
ivl_parameter_lineno(par),
@ -2211,8 +2214,9 @@ int draw_scope(ivl_scope_t net, ivl_scope_t parent)
case IVL_EX_REALNUM:
{ char *res = draw_Cr_to_string(ivl_expr_dvalue(pex));
fprintf(vvp_out, "P_%p .param/real \"%s\" %d %d %d, %s; "
"value=%#g\n", par, ivl_parameter_basename(par),
ivl_parameter_local(par),
"value=%#g\n", par,
vvp_mangle_name(ivl_parameter_basename(par)),
ivl_parameter_local(par),
ivl_file_table_index(ivl_parameter_file(par)),
ivl_parameter_lineno(par), res,
ivl_expr_dvalue(pex));