The .alias node degenerates to .net nodes.
Now that .net nodes are references to filters into vvp_net_t objects and are no longer functors on their own, the .alias node becomes exactly the same as a .net itself.
This commit is contained in:
parent
cbf3793ee6
commit
0d70adfc47
48
vvp/words.cc
48
vvp/words.cc
|
|
@ -243,6 +243,12 @@ static void __compile_net2(vvp_net_t*node, vvp_array_t array,
|
||||||
compile_vpi_symbol(my_label, obj);
|
compile_vpi_symbol(my_label, obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// REMOVE ME! Giving the net a label is a legacy of the times
|
||||||
|
// when the .net was a functor of its own. In the long run, we
|
||||||
|
// must fix the code generator to not rely on the label of the
|
||||||
|
// .net, then we will remove that label.
|
||||||
|
define_functor_symbol(my_label, node);
|
||||||
|
|
||||||
if (array)
|
if (array)
|
||||||
array_attach_word(array, array_addr, obj);
|
array_attach_word(array, array_addr, obj);
|
||||||
else if (obj)
|
else if (obj)
|
||||||
|
|
@ -435,6 +441,7 @@ void compile_aliasw(char*label, char*array_label, unsigned long array_addr,
|
||||||
vvp_net_t*node = vvp_net_lookup(argv[0].text);
|
vvp_net_t*node = vvp_net_lookup(argv[0].text);
|
||||||
|
|
||||||
/* Add the label into the functor symbol table. */
|
/* Add the label into the functor symbol table. */
|
||||||
|
assert(node);
|
||||||
define_functor_symbol(label, node);
|
define_functor_symbol(label, node);
|
||||||
|
|
||||||
vpiHandle obj = vvp_lookup_handle(argv[0].text);
|
vpiHandle obj = vvp_lookup_handle(argv[0].text);
|
||||||
|
|
@ -447,46 +454,19 @@ void compile_aliasw(char*label, char*array_label, unsigned long array_addr,
|
||||||
free(argv);
|
free(argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The .alias is practically identical to a .net. We create all the
|
||||||
|
* VPI stuff for the new name (and put it in the local scope) but
|
||||||
|
* reference the node in the net.
|
||||||
|
*/
|
||||||
void compile_alias(char*label, char*name, int msb, int lsb, bool signed_flag,
|
void compile_alias(char*label, char*name, int msb, int lsb, bool signed_flag,
|
||||||
unsigned argc, struct symb_s*argv)
|
unsigned argc, struct symb_s*argv)
|
||||||
{
|
{
|
||||||
assert(argc == 1);
|
__compile_net(label, name, 0, 0, msb, lsb, signed_flag, false, false, argc, argv);
|
||||||
|
|
||||||
vvp_net_t*node = vvp_net_lookup(argv[0].text);
|
|
||||||
|
|
||||||
/* Add the label into the functor symbol table. */
|
|
||||||
define_functor_symbol(label, node);
|
|
||||||
|
|
||||||
|
|
||||||
/* Make the vpiHandle for the reg. */
|
|
||||||
vpiHandle obj = vpip_make_net(name, msb, lsb, signed_flag, node);
|
|
||||||
compile_vpi_symbol(label, obj);
|
|
||||||
vpip_attach_to_current_scope(obj);
|
|
||||||
|
|
||||||
free(label);
|
|
||||||
delete[] name;
|
|
||||||
free(argv[0].text);
|
|
||||||
free(argv);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void compile_alias_real(char*label, char*name, int msb, int lsb,
|
void compile_alias_real(char*label, char*name, int msb, int lsb,
|
||||||
unsigned argc, struct symb_s*argv)
|
unsigned argc, struct symb_s*argv)
|
||||||
{
|
{
|
||||||
assert(argc == 1);
|
__compile_real(label, name, 0, 0, msb, lsb, false, argc, argv);
|
||||||
|
|
||||||
vvp_net_t*node = vvp_net_lookup(argv[0].text);
|
|
||||||
|
|
||||||
/* Add the label into the functor symbol table. */
|
|
||||||
define_functor_symbol(label, node);
|
|
||||||
|
|
||||||
|
|
||||||
/* Make the vpiHandle for the reg. */
|
|
||||||
vpiHandle obj = vpip_make_real_var(name, node);
|
|
||||||
compile_vpi_symbol(label, obj);
|
|
||||||
vpip_attach_to_current_scope(obj);
|
|
||||||
|
|
||||||
free(label);
|
|
||||||
delete[] name;
|
|
||||||
free(argv[0].text);
|
|
||||||
free(argv);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue