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 * This source code is free software; you can redistribute it
* and/or modify it in source code form under the terms of the GNU * 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", fprintf(vvp_out, "S_%p .scope %s%s, \"%s\" \"%s\" %d %d",
net, prefix, type, vvp_mangle_name(ivl_scope_basename(net)), net, prefix, type,
ivl_scope_tname(net), ivl_file_table_index(ivl_scope_file(net)), 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)); ivl_scope_lineno(net));
if (parent) { if (parent) {
@ -2177,7 +2179,8 @@ int draw_scope(ivl_scope_t net, ivl_scope_t parent)
if( name == 0 ) if( name == 0 )
name = ""; name = "";
fprintf( vvp_out, " .port_info %u %s %u \"%s\"\n", 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)) { switch (ivl_expr_type(pex)) {
case IVL_EX_STRING: case IVL_EX_STRING:
fprintf(vvp_out, "P_%p .param/str \"%s\" %d %d %d, \"%s\";\n", 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_parameter_local(par),
ivl_file_table_index(ivl_parameter_file(par)), ivl_file_table_index(ivl_parameter_file(par)),
ivl_parameter_lineno(par), ivl_parameter_lineno(par),
@ -2195,7 +2198,7 @@ int draw_scope(ivl_scope_t net, ivl_scope_t parent)
break; break;
case IVL_EX_NUMBER: case IVL_EX_NUMBER:
fprintf(vvp_out, "P_%p .param/l \"%s\" %d %d %d, %sC4<", 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_parameter_local(par),
ivl_file_table_index(ivl_parameter_file(par)), ivl_file_table_index(ivl_parameter_file(par)),
ivl_parameter_lineno(par), ivl_parameter_lineno(par),
@ -2211,8 +2214,9 @@ int draw_scope(ivl_scope_t net, ivl_scope_t parent)
case IVL_EX_REALNUM: case IVL_EX_REALNUM:
{ char *res = draw_Cr_to_string(ivl_expr_dvalue(pex)); { char *res = draw_Cr_to_string(ivl_expr_dvalue(pex));
fprintf(vvp_out, "P_%p .param/real \"%s\" %d %d %d, %s; " fprintf(vvp_out, "P_%p .param/real \"%s\" %d %d %d, %s; "
"value=%#g\n", par, ivl_parameter_basename(par), "value=%#g\n", par,
ivl_parameter_local(par), vvp_mangle_name(ivl_parameter_basename(par)),
ivl_parameter_local(par),
ivl_file_table_index(ivl_parameter_file(par)), ivl_file_table_index(ivl_parameter_file(par)),
ivl_parameter_lineno(par), res, ivl_parameter_lineno(par), res,
ivl_expr_dvalue(pex)); ivl_expr_dvalue(pex));