# { // Wrap up the class.
# if (p[11] && p[4] && p[4]->name != p[11]) {
# yyerror(@11, "error: Class end label doesn't match class name.");
# { // Wrap up the class.
# if (p[11] && p[4] && p[4]->name != p[11]) {
# yyerror(@11, "error: Class end label doesn't match class name.");
# { pform_start_class_declaration(@2, p[4], p[5].type, p[5].exprs, p[3]); }
()
# { pform_start_class_declaration(@2, p[4], p[5].type, p[5].exprs, p[3]); }
()
# { // Create a synthetic typedef for the class name so that the
# // lexor detects the name as a type.
# perm_string name = lex_strings.make(p[1]);
# { // Create a synthetic typedef for the class name so that the
# // lexor detects the name as a type.
# perm_string name = lex_strings.make(p[1]);
# { class_type_t*tmp = dynamic_cast<class_type_t*>(p[1].type);
# if (tmp == 0) {
# yyerror(@1, "Type name \"%s\"is not a predeclared class name.", p[1].text);
# { class_type_t*tmp = dynamic_cast<class_type_t*>(p[1].type);
# if (tmp == 0) {
# yyerror(@1, "Type name \"%s\"is not a predeclared class name.", p[1].text);
# { class_type_t*tmp = dynamic_cast<class_type_t*> (p[2].type);
# if (tmp == 0) {
# yyerror(@2, "error: class declaration endlabel \"%s\" is not a class name\n", p[2].text);
# { class_type_t*tmp = dynamic_cast<class_type_t*> (p[2].type);
# if (tmp == 0) {
# yyerror(@2, "error: class declaration endlabel \"%s\" is not a class name\n", p[2].text);
# { current_function->set_ports(p[6]);
# pform_set_constructor_return(current_function);
# pform_set_this_class(@3, current_function);
# { current_function->set_ports(p[6]);
# pform_set_constructor_return(current_function);
# pform_set_this_class(@3, current_function);
# { pform_class_property(@2, p[1], p[2], p[3]); }
()
# { pform_class_property(@2, p[1], p[2], p[3]); }
()
# { pform_class_property(@1, p[2] | property_qualifier_t::make_const(), p[3], p[4]); }
()
# { pform_class_property(@1, p[2] | property_qualifier_t::make_const(), p[3], p[4]); }
()
# { list<PExpr*>*expr_list = p[3];
# strip_tail_items(expr_list);
# PENewClass*tmp = new PENewClass(*expr_list);
# { list<PExpr*>*expr_list = p[3];
# strip_tail_items(expr_list);
# PENewClass*tmp = new PENewClass(*expr_list);
# { /* */
# if (gn_assertions_flag) {
# yyerror(@2, "sorry: concurrent_assertion_item not supported."
# { /* */
# if (gn_assertions_flag) {
# yyerror(@2, "sorry: concurrent_assertion_item not supported."
# { data_type_t*data_type = p[2];
# if (data_type == 0) {
# data_type = new vector_type_t(IVL_VT_LOGIC, false, 0);
# { data_type_t*data_type = p[2];
# if (data_type == 0) {
# data_type = new vector_type_t(IVL_VT_LOGIC, false, 0);
# { if (!p[1]->packed_flag) {
# yyerror(@1, "sorry: Unpacked structs not supported.");
# }
# { if (!p[1]->packed_flag) {
# yyerror(@1, "sorry: Unpacked structs not supported.");
# }
# { list<pform_range_t>*pd = make_range_from_width(integer_width);
# vector_type_t*tmp = new vector_type_t(IVL_VT_LOGIC, p[2], pd);
# tmp->reg_flag = true;
# { list<pform_range_t>*pd = make_range_from_width(integer_width);
# vector_type_t*tmp = new vector_type_t(IVL_VT_LOGIC, p[2], pd);
# tmp->reg_flag = true;
# { list<pform_range_t>*pd = make_range_from_width(64);
# vector_type_t*tmp = new vector_type_t(IVL_VT_LOGIC, false, pd);
# tmp->reg_flag = !gn_system_verilog();
# { list<pform_range_t>*pd = make_range_from_width(64);
# vector_type_t*tmp = new vector_type_t(IVL_VT_LOGIC, false, pd);
# tmp->reg_flag = !gn_system_verilog();
# { vector_type_t*tmp = new vector_type_t(IVL_VT_LOGIC, p[1], p[2]);
# tmp->implicit_flag = true;
# FILE_NAME(tmp, @1);
# { vector_type_t*tmp = new vector_type_t(IVL_VT_LOGIC, p[1], p[2]);
# tmp->implicit_flag = true;
# FILE_NAME(tmp, @1);
# { vector_type_t*tmp = new vector_type_t(IVL_VT_LOGIC, false, p[1]);
# tmp->implicit_flag = true;
# FILE_NAME(tmp, @1);
# { vector_type_t*tmp = new vector_type_t(IVL_VT_LOGIC, false, p[1]);
# tmp->implicit_flag = true;
# FILE_NAME(tmp, @1);
# { perm_string tmp3 = lex_strings.make(p[3]);
# pform_set_type_attrib(tmp3, p[5], p[7]);
# delete[] p[3];
# { perm_string tmp3 = lex_strings.make(p[3]);
# pform_set_type_attrib(tmp3, p[5], p[7]);
# delete[] p[3];
# { // Last step: check any closing name.
# if (p[11]) {
# if (strcmp(p[4],p[11]) != 0) {
# { // Last step: check any closing name.
# if (p[11]) {
# if (strcmp(p[4],p[11]) != 0) {
# { // Last step: check any closing name.
# if (p[14]) {
# if (strcmp(p[4],p[14]) != 0) {
# { // Last step: check any closing name.
# if (p[14]) {
# if (strcmp(p[4],p[14]) != 0) {
# { // Last step: check any closing name.
# if (p[8]) {
# if (strcmp(p[4],p[8]) != 0) {
# { // Last step: check any closing name.
# if (p[8]) {
# if (strcmp(p[4],p[8]) != 0) {
# { assert(current_function == 0);
# current_function = pform_push_function_scope(@1, p[4], p[2]);
# }
# { assert(current_function == 0);
# current_function = pform_push_function_scope(@1, p[4], p[2]);
# }
# { current_function->set_ports(p[7]);
# current_function->set_return(p[3]);
# current_function_set_statement(p[8]? @8 : @4, p[8]);
# { current_function->set_ports(p[7]);
# current_function->set_return(p[3]);
# current_function_set_statement(p[8]? @8 : @4, p[8]);
# { assert(current_function == 0);
# current_function = pform_push_function_scope(@1, p[4], p[2]);
# }
# { assert(current_function == 0);
# current_function = pform_push_function_scope(@1, p[4], p[2]);
# }
# { current_function->set_ports(p[7]);
# current_function->set_return(p[3]);
# current_function_set_statement(p[11]? @11 : @4, p[11]);
# { current_function->set_ports(p[7]);
# current_function->set_return(p[3]);
# current_function_set_statement(p[11]? @11 : @4, p[11]);
# { PForStatement*tmp = new PForStatement(p[3], p[5], p[7], p[9], p[11]);
# FILE_NAME(tmp, @1);
# p[0] = tmp;
# { PForStatement*tmp = new PForStatement(p[3], p[5], p[7], p[9], p[11]);
# FILE_NAME(tmp, @1);
# p[0] = tmp;
# { PForeach*tmp_for = pform_make_foreach(@1, p[3], p[5], p[9]);
#
# pform_pop_scope();
# { PForeach*tmp_for = pform_make_foreach(@1, p[3], p[5], p[9]);
#
# pform_pop_scope();
# { static unsigned for_counter = 0;
# char for_block_name [64];
# snif(parse_debug): printf(for_block_name, sizeof for_block_name, "$ivl_for_loop%u", for_counter);
# { static unsigned for_counter = 0;
# char for_block_name [64];
# snif(parse_debug): printf(for_block_name, sizeof for_block_name, "$ivl_for_loop%u", for_counter);
# { static unsigned foreach_counter = 0;
# char for_block_name[64];
# snif(parse_debug): printf(for_block_name, sizeof for_block_name, "$ivl_foreach%u", foreach_counter);
# { static unsigned foreach_counter = 0;
# char for_block_name[64];
# snif(parse_debug): printf(for_block_name, sizeof for_block_name, "$ivl_foreach%u", foreach_counter);
# { decl_assignment_t*tmp = new decl_assignment_t;
# tmp->name = lex_strings.make(p[1]);
# tmp->expr .reset(p[3]);
# { decl_assignment_t*tmp = new decl_assignment_t;
# tmp->name = lex_strings.make(p[1]);
# tmp->expr .reset(p[3]);
# { decl_assignment_t*tmp = new decl_assignment_t;
# tmp->name = lex_strings.make(p[1]);
# PENewClass*expr = new PENewClass;
# { decl_assignment_t*tmp = new decl_assignment_t;
# tmp->name = lex_strings.make(p[1]);
# PENewClass*expr = new PENewClass;
# { if (!pform_in_interface())
# yyerror(@1, "error: modport declarations are only allowed "
# "in interfaces.");
# { if (!pform_in_interface())
# yyerror(@1, "error: modport declarations are only allowed "
# "in interfaces.");
# { if (last_modport_port.type == MP_SIMPLE) {
# pform_add_modport_port(@3, last_modport_port.direction,
# p[3]->name, p[3]->parm);
# { if (last_modport_port.type == MP_SIMPLE) {
# pform_add_modport_port(@3, last_modport_port.direction,
# p[3]->name, p[3]->parm);
# { if (last_modport_port.type != MP_TF)
# yyerror(@3, "error: task/function declaration not allowed here.");
# }
# { if (last_modport_port.type != MP_TF)
# yyerror(@3, "error: task/function declaration not allowed here.");
# }
# { if (last_modport_port.type == MP_SIMPLE) {
# pform_add_modport_port(@3, last_modport_port.direction,
# lex_strings.make(p[3]), 0);
# { if (last_modport_port.type == MP_SIMPLE) {
# pform_add_modport_port(@3, last_modport_port.direction,
# lex_strings.make(p[3]), 0);
# { last_modport_port.type = MP_SIMPLE;
# last_modport_port.direction = p[2];
# pform_add_modport_port(@3, p[2], lex_strings.make(p[3]), 0);
# { last_modport_port.type = MP_SIMPLE;
# last_modport_port.direction = p[2];
# pform_add_modport_port(@3, p[2], lex_strings.make(p[3]), 0);
# { last_modport_port.type = MP_SIMPLE;
# last_modport_port.direction = p[2];
# pform_add_modport_port(@3, p[2], p[3]->name, p[3]->parm);
# { last_modport_port.type = MP_SIMPLE;
# last_modport_port.direction = p[2];
# pform_add_modport_port(@3, p[2], p[3]->name, p[3]->parm);
# { last_modport_port.type = MP_TF;
# last_modport_port.is_import = p[2];
# yyerror(@3, "sorry: modport task/function ports are not yet supported.");
# { last_modport_port.type = MP_TF;
# last_modport_port.is_import = p[2];
# yyerror(@3, "sorry: modport task/function ports are not yet supported.");
# { last_modport_port.type = MP_TF;
# last_modport_port.is_import = p[2];
# yyerror(@3, "sorry: modport task/function ports are not yet supported.");
# { last_modport_port.type = MP_TF;
# last_modport_port.is_import = p[2];
# yyerror(@3, "sorry: modport task/function ports are not yet supported.");
# { last_modport_port.type = MP_CLOCKING;
# last_modport_port.direction = NetNet::NOT_A_PORT;
# yyerror(@3, "sorry: modport clocking declaration is not yet supported.");
# { last_modport_port.type = MP_CLOCKING;
# last_modport_port.direction = NetNet::NOT_A_PORT;
# yyerror(@3, "sorry: modport clocking declaration is not yet supported.");
# { p[0] = pform_verinum_with_size(p[1],p[2], @2.text, @2.first_line);
# based_size = 0; }
()
# { p[0] = pform_verinum_with_size(p[1],p[2], @2.text, @2.first_line);
# based_size = 0; }
()
# { yyerror(@1, "error: Unbased SystemVerilog literal cannot have "
# "a size.");
# p[0] = p[1]; based_size = 0;}
# { yyerror(@1, "error: Unbased SystemVerilog literal cannot have "
# "a size.");
# p[0] = p[1]; based_size = 0;}
# { pform_end_package_declaration(@1);
# // If an end label is present make sure it match the package name.
# if (p[10]) {
# { pform_end_package_declaration(@1);
# // If an end label is present make sure it match the package name.
# if (p[10]) {
# { p[0] = NetNet::PREF;
# if (!gn_system_verilog()) {
# yyerror(@1, "error: Reference ports (ref) require SystemVerilog.");
# { p[0] = NetNet::PREF;
# if (!gn_system_verilog()) {
# yyerror(@1, "error: Reference ports (ref) require SystemVerilog.");
# { list<pform_range_t>*pd = make_range_from_width(integer_width);
# vector_type_t*tmp = new vector_type_t(IVL_VT_LOGIC, true, pd);
# tmp->reg_flag = true;
# { list<pform_range_t>*pd = make_range_from_width(integer_width);
# vector_type_t*tmp = new vector_type_t(IVL_VT_LOGIC, true, pd);
# tmp->reg_flag = true;
# { list<pform_range_t>*pd = make_range_from_width(64);
# vector_type_t*tmp = new vector_type_t(IVL_VT_LOGIC, false, pd);
# tmp->reg_flag = !gn_system_verilog();
# { list<pform_range_t>*pd = make_range_from_width(64);
# vector_type_t*tmp = new vector_type_t(IVL_VT_LOGIC, false, pd);
# tmp->reg_flag = !gn_system_verilog();
# { /* streaming concatenation is a SystemVerilog thing. */
# if (gn_system_verilog()) {
# yyerror(@2, "sorry: Streaming concatenation not supported.");
# { /* streaming concatenation is a SystemVerilog thing. */
# if (gn_system_verilog()) {
# yyerror(@2, "sorry: Streaming concatenation not supported.");
# { // Last step: check any closing name. This is done late so
# // that the parser can look ahead to detect the present
# // endlabel_opt but still have the pform_endmodule() called
# { // Last step: check any closing name. This is done late so
# // that the parser can look ahead to detect the present
# // endlabel_opt but still have the pform_endmodule() called
# { // Last step: check any closing name. This is done late so
# // that the parser can look ahead to detect the present
# // endlabel_opt but still have the pform_endmodule() called
# { // Last step: check any closing name. This is done late so
# // that the parser can look ahead to detect the present
# // endlabel_opt but still have the pform_endmodule() called
# { // Last step: check any closing name. This is done late so
# // that the parser can look ahead to detect the present
# // endlabel_opt but still have the pform_endmodule() called
# { // Last step: check any closing name. This is done late so
# // that the parser can look ahead to detect the present
# // endlabel_opt but still have the pform_endmodule() called
# { // Last step: check any closing name. This is done late so
# // that the parser can look ahead to detect the present
# // endlabel_opt but still have the pform_endmodule() called
# { // Last step: check any closing name. This is done late so
# // that the parser can look ahead to detect the present
# // endlabel_opt but still have the pform_endmodule() called
# { assert(current_task == 0);
# current_task = pform_push_task_scope(@1, p[3], p[2]);
# }
# { assert(current_task == 0);
# current_task = pform_push_task_scope(@1, p[3], p[2]);
# }
# { current_task->set_ports(p[6]);
# current_task_set_statement(@3, p[7]);
# pform_set_this_class(@3, current_task);
# { current_task->set_ports(p[6]);
# current_task_set_statement(@3, p[7]);
# pform_set_this_class(@3, current_task);
# { assert(current_task == 0);
# current_task = pform_push_task_scope(@1, p[3], p[2]);
# }
# { assert(current_task == 0);
# current_task = pform_push_task_scope(@1, p[3], p[2]);
# }
# { current_task->set_ports(p[6]);
# current_task_set_statement(@3, p[10]);
# pform_set_this_class(@3, current_task);
# { current_task->set_ports(p[6]);
# current_task_set_statement(@3, p[10]);
# pform_set_this_class(@3, current_task);
# { assert(current_task == 0);
# current_task = pform_push_task_scope(@1, p[3], p[2]);
# }
# { assert(current_task == 0);
# current_task = pform_push_task_scope(@1, p[3], p[2]);
# }
# { current_task->set_ports(0);
# current_task_set_statement(@3, p[9]);
# pform_set_this_class(@3, current_task);
# { current_task->set_ports(0);
# current_task_set_statement(@3, p[9]);
# pform_set_this_class(@3, current_task);
# { list<pform_range_t>*range_stub = make_range_from_width(integer_width);
# vector<pform_tf_port_t>*tmp = pform_make_task_ports(@1, p[1], IVL_VT_LOGIC, true,
# range_stub, p[3], true);
# { list<pform_range_t>*range_stub = make_range_from_width(integer_width);
# vector<pform_tf_port_t>*tmp = pform_make_task_ports(@1, p[1], IVL_VT_LOGIC, true,
# range_stub, p[3], true);
# { list<pform_range_t>*range_stub = make_range_from_width(64);
# vector<pform_tf_port_t>*tmp = pform_make_task_ports(@1, p[1], IVL_VT_LOGIC, false,
# range_stub, p[3]);
# { list<pform_range_t>*range_stub = make_range_from_width(64);
# vector<pform_tf_port_t>*tmp = pform_make_task_ports(@1, p[1], IVL_VT_LOGIC, false,
# range_stub, p[3]);
# { vector<pform_tf_port_t>*tmp = pform_make_task_ports(@1, p[1], IVL_VT_REAL, true,
# 0, p[3]);
# p[0] = tmp;
# { vector<pform_tf_port_t>*tmp = pform_make_task_ports(@1, p[1], IVL_VT_REAL, true,
# 0, p[3]);
# p[0] = tmp;
# { vector<pform_tf_port_t>*tmp = pform_make_task_ports(@1, p[1], IVL_VT_STRING, true,
# 0, p[3]);
# p[0] = tmp;
# { vector<pform_tf_port_t>*tmp = pform_make_task_ports(@1, p[1], IVL_VT_STRING, true,
# 0, p[3]);
# p[0] = tmp;
# { vector<pform_tf_port_t>*tmp;
# NetNet::PortType use_port_type = p[1];
# if ((use_port_type == NetNet::PIMPLICIT) && (gn_system_verilog() || (p[2] == 0)))
# { vector<pform_tf_port_t>*tmp;
# NetNet::PortType use_port_type = p[1];
# if ((use_port_type == NetNet::PIMPLICIT) && (gn_system_verilog() || (p[2] == 0)))
# { if (! gn_system_verilog()) {
# yyerror(@1, "error: Task/function default arguments require "
# "SystemVerilog.");
# { if (! gn_system_verilog()) {
# yyerror(@1, "error: Task/function default arguments require "
# "SystemVerilog.");
# { port_declaration_context.port_type = gn_system_verilog() ? NetNet::PINPUT : NetNet::PIMPLICIT;
# port_declaration_context.data_type = 0;
# }
# { port_declaration_context.port_type = gn_system_verilog() ? NetNet::PINPUT : NetNet::PIMPLICIT;
# port_declaration_context.data_type = 0;
# }
# { bool initial_decl = allow_timeunit_decl && allow_timeprec_decl;
# pform_set_timeunit(p[2], initial_decl);
# pform_set_timeprec(p[4], initial_decl);
# { bool initial_decl = allow_timeunit_decl && allow_timeprec_decl;
# pform_set_timeunit(p[2], initial_decl);
# pform_set_timeprec(p[4], initial_decl);
# { list<pform_range_t> *tmp = new list<pform_range_t>;
# pform_range_t index (0,0);
# tmp->push_back(index);
# { list<pform_range_t> *tmp = new list<pform_range_t>;
# pform_range_t index (0,0);
# tmp->push_back(index);
# { // SystemVerilog queue
# list<pform_range_t> *tmp = new list<pform_range_t>;
# pform_range_t index (new PENull,0);
# { // SystemVerilog queue
# list<pform_range_t> *tmp = new list<pform_range_t>;
# pform_range_t index (new PENull,0);
# { if (!gn_system_verilog()) {
# yyerror(@1, "error: overriding the default variable lifetime "
# "requires SystemVerilog.");
# { if (!gn_system_verilog()) {
# yyerror(@1, "error: overriding the default variable lifetime "
# "requires SystemVerilog.");
# { list<named_pexpr_t>*tmp = p[1];
# if (tmp) {
# tmp->splice(tmp->end(), *p[3]);
# { list<named_pexpr_t>*tmp = p[1];
# if (tmp) {
# tmp->splice(tmp->end(), *p[3]);
# { if (p[1]) pform_set_data_type(@1, p[1], p[2], NetNet::REG, attributes_in_context);
# }
()
# { if (p[1]) pform_set_data_type(@1, p[1], p[2], NetNet::REG, attributes_in_context);
# }
()
# { if (p[2]) pform_set_data_type(@2, p[2], p[3], NetNet::REG, attributes_in_context);
# var_lifetime = LexicalScope::INHERITED;
# }
# { if (p[2]) pform_set_data_type(@2, p[2], p[3], NetNet::REG, attributes_in_context);
# var_lifetime = LexicalScope::INHERITED;
# }
# { if (p[2]) pform_set_data_type(@2, p[2], p[3], NetNet::REG, attributes_in_context);
# }
()
# { if (p[2]) pform_set_data_type(@2, p[2], p[3], NetNet::REG, attributes_in_context);
# }
()
# { if (p[3]) pform_set_data_type(@3, p[3], p[4], NetNet::REG, attributes_in_context);
# var_lifetime = LexicalScope::INHERITED;
# }
# { if (p[3]) pform_set_data_type(@3, p[3], p[4], NetNet::REG, attributes_in_context);
# var_lifetime = LexicalScope::INHERITED;
# }
# { perm_string name = lex_strings.make(p[3]);
# pform_set_typedef(name, p[2], p[4]);
# delete[]p[3];
# { perm_string name = lex_strings.make(p[3]);
# pform_set_typedef(name, p[2], p[4]);
# delete[]p[3];
# { perm_string name = lex_strings.make(p[3].text);
# if (pform_test_type_identifier_local(name)) {
# yyerror(@3, "error: Typedef identifier \"%s\" is already a type name.", p[3].text);
# { perm_string name = lex_strings.make(p[3].text);
# if (pform_test_type_identifier_local(name)) {
# yyerror(@3, "error: Typedef identifier \"%s\" is already a type name.", p[3].text);
# { // Create a synthetic typedef for the class name so that the
# // lexor detects the name as a type.
# perm_string name = lex_strings.make(p[3]);
# { // Create a synthetic typedef for the class name so that the
# // lexor detects the name as a type.
# perm_string name = lex_strings.make(p[3]);
# { // Create a synthetic typedef for the class name so that the
# // lexor detects the name as a type.
# perm_string name = lex_strings.make(p[2]);
# { // Create a synthetic typedef for the class name so that the
# // lexor detects the name as a type.
# perm_string name = lex_strings.make(p[2]);
# { enum_type_t*enum_type = new enum_type_t;
# FILE_NAME(enum_type, @1);
# enum_type->names .reset(p[3]);
# { enum_type_t*enum_type = new enum_type_t;
# FILE_NAME(enum_type, @1);
# enum_type->names .reset(p[3]);
# { enum_type_t*enum_type = new enum_type_t;
# FILE_NAME(enum_type, @1);
# enum_type->names .reset(p[5]);
# { enum_type_t*enum_type = new enum_type_t;
# FILE_NAME(enum_type, @1);
# enum_type->names .reset(p[5]);
# { enum_type_t*enum_type = new enum_type_t;
# FILE_NAME(enum_type, @1);
# enum_type->names .reset(p[5]);
# { enum_type_t*enum_type = new enum_type_t;
# FILE_NAME(enum_type, @1);
# enum_type->names .reset(p[5]);
# { enum_type_t*enum_type = new enum_type_t;
# FILE_NAME(enum_type, @1);
# enum_type->names .reset(p[6]);
# { enum_type_t*enum_type = new enum_type_t;
# FILE_NAME(enum_type, @1);
# enum_type->names .reset(p[6]);
# { enum_type_t*enum_type = new enum_type_t;
# FILE_NAME(enum_type, @1);
# enum_type->names .reset(p[6]);
# { enum_type_t*enum_type = new enum_type_t;
# FILE_NAME(enum_type, @1);
# enum_type->names .reset(p[6]);
# { enum_type_t*enum_type = new enum_type_t;
# FILE_NAME(enum_type, @1);
# enum_type->names .reset(p[6]);
# { enum_type_t*enum_type = new enum_type_t;
# FILE_NAME(enum_type, @1);
# enum_type->names .reset(p[6]);
# { list<named_pexpr_t>*lst = p[1];
# lst->splice(lst->end(), *p[3]);
# delete p[3];
# { list<named_pexpr_t>*lst = p[1];
# lst->splice(lst->end(), *p[3]);
# delete p[3];
# { perm_string name = lex_strings.make(p[1]);
# long count = check_enum_seq_value(@1, p[3], false);
# delete[]p[1];
# { perm_string name = lex_strings.make(p[1]);
# long count = check_enum_seq_value(@1, p[3], false);
# delete[]p[1];
# { perm_string name = lex_strings.make(p[1]);
# p[0] = make_named_numbers(name, check_enum_seq_value(@1, p[3], true),
# check_enum_seq_value(@1, p[5], true));
# { perm_string name = lex_strings.make(p[1]);
# p[0] = make_named_numbers(name, check_enum_seq_value(@1, p[3], true),
# check_enum_seq_value(@1, p[5], true));
# { perm_string name = lex_strings.make(p[1]);
# delete[]p[1];
# p[0] = make_named_number(name, p[3]);
# { perm_string name = lex_strings.make(p[1]);
# delete[]p[1];
# p[0] = make_named_number(name, p[3]);
# { perm_string name = lex_strings.make(p[1]);
# long count = check_enum_seq_value(@1, p[3], false);
# p[0] = make_named_numbers(name, 0, count-1, p[6]);
# { perm_string name = lex_strings.make(p[1]);
# long count = check_enum_seq_value(@1, p[3], false);
# p[0] = make_named_numbers(name, 0, count-1, p[6]);
# { perm_string name = lex_strings.make(p[1]);
# p[0] = make_named_numbers(name, check_enum_seq_value(@1, p[3], true),
# check_enum_seq_value(@1, p[5], true), p[8]);
# { perm_string name = lex_strings.make(p[1]);
# p[0] = make_named_numbers(name, check_enum_seq_value(@1, p[3], true),
# check_enum_seq_value(@1, p[5], true), p[8]);
# { yyerror(@3, "error: Errors in struct member list.");
# yyerrok;
# struct_type_t*tmp = new struct_type_t;
# { yyerror(@3, "error: Errors in struct member list.");
# yyerrok;
# struct_type_t*tmp = new struct_type_t;
# { yyerror(@3, "error: Errors in union member list.");
# yyerrok;
# struct_type_t*tmp = new struct_type_t;
# { yyerror(@3, "error: Errors in union member list.");
# yyerrok;
# struct_type_t*tmp = new struct_type_t;
# { svector<PCase::Item*>*tmp;
# tmp = new svector<PCase::Item*>(*p[1], p[2]);
# delete p[1];
# { svector<PCase::Item*>*tmp;
# tmp = new svector<PCase::Item*>(*p[1], p[2]);
# delete p[1];
# { cerr << @1 << ": sorry: config declarations are not supported and "
# "will be skipped." << endl;
# delete[] p[2];
# { cerr << @1 << ": sorry: config declarations are not supported and "
# "will be skipped." << endl;
# delete[] p[2];
# { PEIdent*tmpi = new PEIdent(*p[2]);
# PEEvent*tmpe = new PEEvent(PEEvent::ANYEDGE, tmpi);
# PEventStatement*tmps = new PEventStatement(tmpe);
# { PEIdent*tmpi = new PEIdent(*p[2]);
# PEEvent*tmpe = new PEEvent(PEEvent::ANYEDGE, tmpi);
# PEventStatement*tmps = new PEventStatement(tmpe);
# { PEEvent*tmp = new PEEvent(PEEvent::POSEDGE, p[2]);
# FILE_NAME(tmp, @1);
# svector<PEEvent*>*tl = new svector<PEEvent*>(1);
# { PEEvent*tmp = new PEEvent(PEEvent::POSEDGE, p[2]);
# FILE_NAME(tmp, @1);
# svector<PEEvent*>*tl = new svector<PEEvent*>(1);
# { PEEvent*tmp = new PEEvent(PEEvent::NEGEDGE, p[2]);
# FILE_NAME(tmp, @1);
# svector<PEEvent*>*tl = new svector<PEEvent*>(1);
# { PEEvent*tmp = new PEEvent(PEEvent::NEGEDGE, p[2]);
# FILE_NAME(tmp, @1);
# svector<PEEvent*>*tl = new svector<PEEvent*>(1);
# { PEEvent*tmp = new PEEvent(PEEvent::ANYEDGE, p[1]);
# FILE_NAME(tmp, @1);
# svector<PEEvent*>*tl = new svector<PEEvent*>(1);
# { PEEvent*tmp = new PEEvent(PEEvent::ANYEDGE, p[1]);
# FILE_NAME(tmp, @1);
# svector<PEEvent*>*tl = new svector<PEEvent*>(1);
# { p[0] = pform_make_branch_probe_expression(@1, p[1], p[3], p[5]); }
()
# { p[0] = pform_make_branch_probe_expression(@1, p[1], p[3], p[5]); }
()
# { yyerror(@1, "error: '~' '&' is not a valid expression. "
# "Please use operator '~&' instead.");
# p[0] = None
# { yyerror(@1, "error: '~' '&' is not a valid expression. "
# "Please use operator '~&' instead.");
# p[0] = None
# { yyerror(@1, "error: '~' '|' is not a valid expression. "
# "Please use operator '~|' instead.");
# p[0] = None
# { yyerror(@1, "error: '~' '|' is not a valid expression. "
# "Please use operator '~|' instead.");
# p[0] = None
# { yyerror(@1, "error: '~' '^' is not a valid expression. "
# "Please use operator '~^' instead.");
# p[0] = None
# { yyerror(@1, "error: '~' '^' is not a valid expression. "
# "Please use operator '~^' instead.");
# p[0] = None
# { yyerror(@1, "error: Operand of unary ! "
# "is not a primary expression.");
# p[0] = None
# { yyerror(@1, "error: Operand of unary ! "
# "is not a primary expression.");
# p[0] = None
# { yyerror(@1, "error: Operand of reduction ^ "
# "is not a primary expression.");
# p[0] = None
# { yyerror(@1, "error: Operand of reduction ^ "
# "is not a primary expression.");
# p[0] = None
p[0] = PEBinary(Leaf(token.STRING, '^'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '^'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '**'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '**'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '*'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '*'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '/'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '/'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '%'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '%'), p[1], p[4])
p[0] = PEBinary(Leaf(token.AMPER, '&'), p[1], p[4])
p[0] = PEBinary(Leaf(token.AMPER, '&'), p[1], p[4])
p[0] = PEBinary(Leaf(token.VBAR, '|'), p[1], p[4])
p[0] = PEBinary(Leaf(token.VBAR, '|'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '~&'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '~&'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '~|'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '~|'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, 'K_XNOR'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, 'K_XNOR'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '<'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '<'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '>'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '>'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, 'K_LS'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, 'K_LS'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, 'K_RS'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, 'K_RS'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, 'K_RSS'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, 'K_RSS'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '=='), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '=='), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, 'K_CEQ'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, 'K_CEQ'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, 'K_WEQ'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, 'K_WEQ'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '<='), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '<='), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '>='), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '>='), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '!='), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '!='), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, 'K_CNE'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, 'K_CNE'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, 'K_WNE'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, 'K_WNE'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '||'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '||'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '&&'), p[1], p[4])
p[0] = PEBinary(Leaf(token.STRING, '&&'), p[1], p[4])
p[0] = Node(syms.atom, [p[1], Leaf(token.STRING, ' ? '),
p[4], Leaf(token.STRING, ' : '), p[6]])
p[0] = Node(syms.atom, [p[1], Leaf(token.STRING, ' ? '),
p[4], Leaf(token.STRING, ' : '), p[6]])
# { list<PExpr*>*expr_list = p[3];
# strip_tail_items(expr_list);
# PECallFunction*tmp = pform_make_call_function(@1, *p[1], *expr_list);
# { list<PExpr*>*expr_list = p[3];
# strip_tail_items(expr_list);
# PECallFunction*tmp = pform_make_call_function(@1, *p[1], *expr_list);
# { pform_name_t*t_name = p[1];
# while (! p[3]->empty()) {
# t_name->push_back(p[3]->front());
# { pform_name_t*t_name = p[1];
# while (! p[3]->empty()) {
# t_name->push_back(p[3]->front());
# { perm_string tn = lex_strings.make(p[1]);
# PECallFunction*tmp = new PECallFunction(tn, *p[3]);
# FILE_NAME(tmp, @1);
# { perm_string tn = lex_strings.make(p[1]);
# PECallFunction*tmp = new PECallFunction(tn, *p[3]);
# FILE_NAME(tmp, @1);
# { perm_string use_name = lex_strings.make(p[3]);
# PECallFunction*tmp = new PECallFunction(p[1], use_name, *p[5]);
# FILE_NAME(tmp, @3);
# { perm_string use_name = lex_strings.make(p[3]);
# PECallFunction*tmp = new PECallFunction(p[1], use_name, *p[5]);
# FILE_NAME(tmp, @3);
# { perm_string tn = lex_strings.make(p[1]);
# const vector<PExpr*>empty;
# PECallFunction*tmp = new PECallFunction(tn, empty);
# { perm_string tn = lex_strings.make(p[1]);
# const vector<PExpr*>empty;
# PECallFunction*tmp = new PECallFunction(tn, empty);
# { pform_name_t*t_name = p[1];
# while (! p[3]->empty()) {
# t_name->push_back(p[3]->front());
# { pform_name_t*t_name = p[1];
# while (! p[3]->empty()) {
# t_name->push_back(p[3]->front());
# { perm_string tn = perm_string::literal("$acos");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$acos");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$acosh");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$acosh");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$asin");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$asin");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$asinh");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$asinh");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$atan");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$atan");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$atanh");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$atanh");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$atan2");
# PECallFunction*tmp = make_call_function(tn, p[3], p[5]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$atan2");
# PECallFunction*tmp = make_call_function(tn, p[3], p[5]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$ceil");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$ceil");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$cos");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$cos");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$cosh");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$cosh");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$exp");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$exp");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$floor");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$floor");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$hypot");
# PECallFunction*tmp = make_call_function(tn, p[3], p[5]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$hypot");
# PECallFunction*tmp = make_call_function(tn, p[3], p[5]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$ln");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$ln");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$log10");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$log10");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$pow");
# PECallFunction*tmp = make_call_function(tn, p[3], p[5]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$pow");
# PECallFunction*tmp = make_call_function(tn, p[3], p[5]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$sin");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$sin");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$sinh");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$sinh");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$sqrt");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$sqrt");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$tan");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$tan");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$tanh");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { perm_string tn = perm_string::literal("$tanh");
# PECallFunction*tmp = make_call_function(tn, p[3]);
# FILE_NAME(tmp,@1);
# { // This is the empty queue syntax.
# if (gn_system_verilog()) {
# list<PExpr*> empty_list;
# { // This is the empty queue syntax.
# if (gn_system_verilog()) {
# list<PExpr*> empty_list;
# { PExpr*base = p[4];
# if (gn_system_verilog()) {
# PECastSize*tmp = new PECastSize(p[1], base);
# { PExpr*base = p[4];
# if (gn_system_verilog()) {
# PECastSize*tmp = new PECastSize(p[1], base);
# { PExpr*base = p[4];
# if (gn_system_verilog()) {
# PECastType*tmp = new PECastType(p[1], base);
# { PExpr*base = p[4];
# if (gn_system_verilog()) {
# PECastType*tmp = new PECastType(p[1], base);
# { svector<lgate>*tmp1 = p[1];
# lgate*tmp2 = p[3];
# svector<lgate>*out = new svector<lgate> (*tmp1, *tmp2);
# { svector<lgate>*tmp1 = p[1];
# lgate*tmp2 = p[3];
# svector<lgate>*out = new svector<lgate> (*tmp1, *tmp2);
# { pform_name_t * tmp = p[1];
# name_component_t&tail = tmp->back();
# index_component_t itmp;
# { pform_name_t * tmp = p[1];
# name_component_t&tail = tmp->back();
# index_component_t itmp;
# { pform_name_t * tmp = p[1];
# name_component_t&tail = tmp->back();
# if (! gn_system_verilog()) {
# { pform_name_t * tmp = p[1];
# name_component_t&tail = tmp->back();
# if (! gn_system_verilog()) {
# { pform_name_t * tmp = p[1];
# name_component_t&tail = tmp->back();
# index_component_t itmp;
# { pform_name_t * tmp = p[1];
# name_component_t&tail = tmp->back();
# index_component_t itmp;
# { pform_name_t * tmp = p[1];
# name_component_t&tail = tmp->back();
# index_component_t itmp;
# { pform_name_t * tmp = p[1];
# name_component_t&tail = tmp->back();
# index_component_t itmp;
# { pform_name_t * tmp = p[1];
# name_component_t&tail = tmp->back();
# index_component_t itmp;
# { pform_name_t * tmp = p[1];
# name_component_t&tail = tmp->back();
# index_component_t itmp;
# { p[0] = make_port_list(p[1], p[3], p[4], 0); }
()
# { p[0] = make_port_list(p[1], p[3], p[4], 0); }
()
# { p[0] = make_port_list(p[1], p[3], p[4], 0); }
()
# { p[0] = make_port_list(p[1], p[3], p[4], 0); }
()
# { p[0] = make_port_list(p[1], p[3], p[4], p[6]); }
()
# { p[0] = make_port_list(p[1], p[3], p[4], p[6]); }
()
# { Module::port_t*ptmp;
# perm_string name = lex_strings.make(p[3]);
# ptmp = pform_module_port_reference(name, @3.text,
# { Module::port_t*ptmp;
# perm_string name = lex_strings.make(p[3]);
# ptmp = pform_module_port_reference(name, @3.text,
comment, dt, name = p[2], p[4], p[5]
p[0] = absyn.port_decl(comment, dt, name)
comment, dt, name = p[2], p[4], p[5]
p[0] = absyn.port_decl(comment, dt, name)
# { Module::port_t*ptmp;
# perm_string name = lex_strings.make(p[4]);
# ptmp = pform_module_port_reference(name, @2.text,
# { Module::port_t*ptmp;
# perm_string name = lex_strings.make(p[4]);
# ptmp = pform_module_port_reference(name, @2.text,
# { Module::port_t*ptmp;
# perm_string name = lex_strings.make(p[5]);
# ptmp = pform_module_port_reference(name, @2.text, @2.first_line);
# { Module::port_t*ptmp;
# perm_string name = lex_strings.make(p[5]);
# ptmp = pform_module_port_reference(name, @2.text, @2.first_line);
# { Module::port_t*ptmp;
# perm_string name = lex_strings.make(p[4]);
# ptmp = pform_module_port_reference(name, @2.text,
# { Module::port_t*ptmp;
# perm_string name = lex_strings.make(p[4]);
# ptmp = pform_module_port_reference(name, @2.text,
comment, dt, name = p[2], p[4], p[5]
p[0] = absyn.port_decl(comment, dt, name)
comment, dt, name = p[2], p[4], p[5]
p[0] = absyn.port_decl(comment, dt, name)
# { Module::port_t*ptmp;
# perm_string name = lex_strings.make(p[4]);
# ptmp = pform_module_port_reference(name, @2.text,
# { Module::port_t*ptmp;
# perm_string name = lex_strings.make(p[4]);
# ptmp = pform_module_port_reference(name, @2.text,
# { pform_name_t*t_name = p[1];
# while (!p[3]->empty()) {
# t_name->push_back(p[3]->front());
# { pform_name_t*t_name = p[1];
# while (!p[3]->empty()) {
# t_name->push_back(p[3]->front());
# { list<PExpr*>*tmp = p[1];
# tmp->splice(tmp->end(), *p[3]);
# delete p[3];
# { list<PExpr*>*tmp = p[1];
# tmp->splice(tmp->end(), *p[3]);
# delete p[3];
# { pform_startmodule(@2, p[4], p[2]==K_program, p[2]==K_interface, p[3], p[1]); }
()
# { pform_startmodule(@2, p[4], p[2]==K_program, p[2]==K_interface, p[3], p[1]); }
()
# { Module::UCDriveType ucd;
# // The lexor detected `unconnected_drive directives and
# // marked what it found in the uc_drive variable. Use that
# { Module::UCDriveType ucd;
# // The lexor detected `unconnected_drive directives and
# // marked what it found in the uc_drive variable. Use that
p[0] = absyn.module_item_2(p[2], p[3], p[5])
#p[0] = ["module_item_2"]+list(p)
p[0] = absyn.module_item_2(p[2], p[3], p[5])
#p[0] = ["module_item_2"]+list(p)
# { data_type_t*data_type = p[3];
# if (data_type == 0) {
# data_type = new vector_type_t(IVL_VT_LOGIC, false, 0);
# { data_type_t*data_type = p[3];
# if (data_type == 0) {
# data_type = new vector_type_t(IVL_VT_LOGIC, false, 0);
# { real_type_t*tmpt = new real_type_t(real_type_t::REAL);
# pform_set_data_type(@2, tmpt, p[4], NetNet::WIRE, p[1]);
# if (p[3] != 0) {
# { real_type_t*tmpt = new real_type_t(real_type_t::REAL);
# pform_set_data_type(@2, tmpt, p[4], NetNet::WIRE, p[1]);
# if (p[3] != 0) {
# { real_type_t*tmpt = new real_type_t(real_type_t::REAL);
# pform_set_data_type(@2, tmpt, p[3], NetNet::WIRE, p[1]);
# delete p[1];
# { real_type_t*tmpt = new real_type_t(real_type_t::REAL);
# pform_set_data_type(@2, tmpt, p[3], NetNet::WIRE, p[1]);
# delete p[1];
# { data_type_t*data_type = p[3];
# if (data_type == 0) {
# data_type = new vector_type_t(IVL_VT_LOGIC, false, 0);
# { data_type_t*data_type = p[3];
# if (data_type == 0) {
# data_type = new vector_type_t(IVL_VT_LOGIC, false, 0);
# { data_type_t*data_type = p[3];
# if (data_type == 0) {
# data_type = new vector_type_t(IVL_VT_LOGIC, false, 0);
# { data_type_t*data_type = p[3];
# if (data_type == 0) {
# data_type = new vector_type_t(IVL_VT_LOGIC, false, 0);
# { real_type_t*data_type = new real_type_t(real_type_t::REAL);
# pform_makewire(@2, 0, str_strength, p[3], NetNet::WIRE, data_type);
# if (p[1]) {
# { real_type_t*data_type = new real_type_t(real_type_t::REAL);
# pform_makewire(@2, 0, str_strength, p[3], NetNet::WIRE, data_type);
# if (p[1]) {
# { pform_module_define_port(@2, p[5], p[2], p[3], p[4], p[1]); }
()
# { pform_module_define_port(@2, p[5], p[2], p[3], p[4], p[1]); }
()
# { real_type_t*real_type = new real_type_t(real_type_t::REAL);
# pform_module_define_port(@2, p[4], p[2], NetNet::WIRE, real_type, p[1]);
# }
# { real_type_t*real_type = new real_type_t(real_type_t::REAL);
# pform_module_define_port(@2, p[4], p[2], NetNet::WIRE, real_type, p[1]);
# }
# { NetNet::Type use_type = p[3] ? NetNet::IMPLICIT : NetNet::NONE;
# if (vector_type_t*dtype = dynamic_cast<vector_type_t*> (p[3])) {
# if (dtype->implicit_flag)
# { NetNet::Type use_type = p[3] ? NetNet::IMPLICIT : NetNet::NONE;
# if (vector_type_t*dtype = dynamic_cast<vector_type_t*> (p[3])) {
# if (dtype->implicit_flag)
# { NetNet::Type use_type = p[3] ? NetNet::IMPLICIT : NetNet::NONE;
# if (vector_type_t*dtype = dynamic_cast<vector_type_t*> (p[3])) {
# if (dtype->implicit_flag)
# { NetNet::Type use_type = p[3] ? NetNet::IMPLICIT : NetNet::NONE;
# if (vector_type_t*dtype = dynamic_cast<vector_type_t*> (p[3])) {
# if (dtype->implicit_flag)
# { NetNet::Type use_type = p[3] ? NetNet::IMPLICIT : NetNet::NONE;
# if (vector_type_t*dtype = dynamic_cast<vector_type_t*> (p[3])) {
# if (dtype->implicit_flag)
# { NetNet::Type use_type = p[3] ? NetNet::IMPLICIT : NetNet::NONE;
# if (vector_type_t*dtype = dynamic_cast<vector_type_t*> (p[3])) {
# if (dtype->implicit_flag)
# { pform_makegates(@2, p[2], str_strength, 0, p[3], p[1]); }
()
# { pform_makegates(@2, p[2], str_strength, 0, p[3], p[1]); }
()
# { pform_makegates(@2, p[2], str_strength, p[3], p[4], p[1]); }
()
# { pform_makegates(@2, p[2], str_strength, p[3], p[4], p[1]); }
()
# { pform_makegates(@2, p[2], p[3], 0, p[4], p[1]); }
()
# { pform_makegates(@2, p[2], p[3], 0, p[4], p[1]); }
()
# { pform_makegates(@2, p[2], p[3], p[4], p[5], p[1]); }
()
# { pform_makegates(@2, p[2], p[3], p[4], p[5], p[1]); }
()
# { pform_makegates(@2, p[2], str_strength, 0, p[3], p[1]); }
()
# { pform_makegates(@2, p[2], str_strength, 0, p[3], p[1]); }
()
# { pform_makegates(@2, p[2], str_strength, p[3], p[4], p[1]); }
()
# { pform_makegates(@2, p[2], str_strength, p[3], p[4], p[1]); }
()
# { pform_makegates(@1, PGBuiltin::PULLUP, pull_strength, 0, p[2], 0); }
()
# { pform_makegates(@1, PGBuiltin::PULLUP, pull_strength, 0, p[2], 0); }
()
# { pform_makegates(@1, PGBuiltin::PULLDOWN, pull_strength, 0, p[2], 0); }
()
# { pform_makegates(@1, PGBuiltin::PULLDOWN, pull_strength, 0, p[2], 0); }
()
# { pform_makegates(@1, PGBuiltin::PULLUP, p[3], 0, p[5], 0); }
()
# { pform_makegates(@1, PGBuiltin::PULLUP, p[3], 0, p[5], 0); }
()
# { pform_makegates(@1, PGBuiltin::PULLUP, p[3], 0, p[7], 0); }
()
# { pform_makegates(@1, PGBuiltin::PULLUP, p[3], 0, p[7], 0); }
()
# { pform_makegates(@1, PGBuiltin::PULLUP, p[5], 0, p[7], 0); }
()
# { pform_makegates(@1, PGBuiltin::PULLUP, p[5], 0, p[7], 0); }
()
# { pform_makegates(@1, PGBuiltin::PULLDOWN, p[3], 0, p[5], 0); }
()
# { pform_makegates(@1, PGBuiltin::PULLDOWN, p[3], 0, p[5], 0); }
()
# { pform_makegates(@1, PGBuiltin::PULLDOWN, p[5], 0, p[7], 0); }
()
# { pform_makegates(@1, PGBuiltin::PULLDOWN, p[5], 0, p[7], 0); }
()
# { pform_makegates(@1, PGBuiltin::PULLDOWN, p[3], 0, p[7], 0); }
()
# { pform_makegates(@1, PGBuiltin::PULLDOWN, p[3], 0, p[7], 0); }
()
# { perm_string tmp1 = lex_strings.make(p[2]);
# pform_make_modgates(@2, tmp1, p[3], p[4], p[1]);
# delete[]p[2];
# { perm_string tmp1 = lex_strings.make(p[2]);
# pform_make_modgates(@2, tmp1, p[3], p[4], p[1]);
# delete[]p[2];
# { pform_make_pgassign_list(p[4], p[3], p[2], @1.text, @1.first_line); }
()
# { pform_make_pgassign_list(p[4], p[3], p[2], @1.text, @1.first_line); }
()
# { // Test for bad nesting. I understand it, but it is illegal.
# if (pform_parent_generate()) {
# cerr << @1 << ": error: Generate/endgenerate regions cannot nest." << endl;
# { // Test for bad nesting. I understand it, but it is illegal.
# if (pform_parent_generate()) {
# cerr << @1 << ": error: Generate/endgenerate regions cannot nest." << endl;
# { yyerror(@1, "error: syntax error in left side "
# "of continuous assignment.");
# yyerrok;
# { yyerror(@1, "error: syntax error in left side "
# "of continuous assignment.");
# yyerrok;
# { yyerror(@1, "error: syntax error in "
# "continuous assignment");
# yyerrok;
# { yyerror(@1, "error: syntax error in "
# "continuous assignment");
# yyerrok;
# { yyerror(@1, "error: I give up on this "
# "function definition.");
# if (p[4]) {
# { yyerror(@1, "error: I give up on this "
# "function definition.");
# if (p[4]) {
# { perm_string tmp3 = lex_strings.make(p[3]);
# perm_string tmp5 = lex_strings.make(p[5]);
# pform_set_attrib(tmp3, tmp5, p[7]);
# { perm_string tmp3 = lex_strings.make(p[3]);
# perm_string tmp5 = lex_strings.make(p[5]);
# pform_set_attrib(tmp3, tmp5, p[7]);
# { if (pform_in_interface())
# yyerror(@1, "error: Parameter overrides are not allowed "
# "in interfaces.");
# { if (pform_in_interface())
# yyerror(@1, "error: Parameter overrides are not allowed "
# "in interfaces.");
# { pform_start_generate_for(@1, p[3], p[5], p[7], p[9], p[11]); }
()
# { pform_start_generate_for(@1, p[3], p[5], p[7], p[9], p[11]); }
()
# { if (pform_in_interface())
# yyerror(@1, "error: specparam declarations are not allowed "
# "in interfaces.");
# { if (pform_in_interface())
# yyerror(@1, "error: specparam declarations are not allowed "
# "in interfaces.");
# { if (pform_in_interface())
# yyerror(@1, "error: specify blocks are not allowed "
# "in interfaces.");
# { if (pform_in_interface())
# yyerror(@1, "error: specify blocks are not allowed "
# "in interfaces.");
# { /* Detect and warn about anachronistic begin/end use */
# if (generation_flag > GN_VER2001 && warn_anachronisms) {
# warn_count += 1;
# { /* Detect and warn about anachronistic begin/end use */
# if (generation_flag > GN_VER2001 && warn_anachronisms) {
# warn_count += 1;
# { /* Detect and warn about anachronistic named begin/end use */
# if (generation_flag > GN_VER2001 && warn_anachronisms) {
# warn_count += 1;
# { /* Detect and warn about anachronistic named begin/end use */
# if (generation_flag > GN_VER2001 && warn_anachronisms) {
# warn_count += 1;
# { pform_generate_block_name(p[3]);
# if (p[6]) {
# if (strcmp(p[3],p[6]) != 0) {
# { pform_generate_block_name(p[3]);
# if (p[6]) {
# if (strcmp(p[3],p[6]) != 0) {
# { p[0] = NetNet::UNRESOLVED_WIRE;
# cerr << @1.text << ":" << @1.first_line << ": warning: "
# "'wone' is deprecated, please use 'uwire' "
# { p[0] = NetNet::UNRESOLVED_WIRE;
# cerr << @1.text << ":" << @1.first_line << ": warning: "
# "'wone' is deprecated, please use 'uwire' "
# { param_active_range = p[3];
# param_active_signed = p[2];
# if ((p[1] == IVL_VT_NO_TYPE) && (p[3] != 0))
# { param_active_range = p[3];
# param_active_signed = p[2];
# if ((p[1] == IVL_VT_NO_TYPE) && (p[3] != 0))
# { param_active_range = make_range_from_width(integer_width);
# param_active_signed = true;
# param_active_type = IVL_VT_LOGIC;
# { param_active_range = make_range_from_width(integer_width);
# param_active_signed = true;
# param_active_type = IVL_VT_LOGIC;
# { param_active_range = make_range_from_width(64);
# param_active_signed = false;
# param_active_type = IVL_VT_LOGIC;
# { param_active_range = make_range_from_width(64);
# param_active_signed = false;
# param_active_type = IVL_VT_LOGIC;
# { param_active_range = 0;
# param_active_signed = true;
# param_active_type = IVL_VT_REAL;
# { param_active_range = 0;
# param_active_signed = true;
# param_active_type = IVL_VT_REAL;
# { param_active_range = make_range_from_width(p[1]);
# param_active_signed = true;
# param_active_type = IVL_VT_BOOL;
# { param_active_range = make_range_from_width(p[1]);
# param_active_signed = true;
# param_active_type = IVL_VT_BOOL;
# { pform_set_param_from_type(@1, p[1].type, p[1].text, param_active_range,
# param_active_signed, param_active_type);
# delete[]p[1].text;
# { pform_set_param_from_type(@1, p[1].type, p[1].text, param_active_range,
# param_active_signed, param_active_type);
# delete[]p[1].text;
expr = Node(syms.tfpdef, [tpname, Leaf(token.EQUAL, p[2]), p[3]])
p[0] = expr
expr = Node(syms.tfpdef, [tpname, Leaf(token.EQUAL, p[2]), p[3]])
p[0] = expr
# { PExpr*tmp = p[3];
# pform_set_parameter(@1, lex_strings.make(p[1]), param_active_type,
# param_active_signed, param_active_range, tmp, p[4]);
# { PExpr*tmp = p[3];
# pform_set_parameter(@1, lex_strings.make(p[1]), param_active_type,
# param_active_signed, param_active_range, tmp, p[4]);
# { PExpr*tmp = p[3];
# pform_set_localparam(@1, lex_strings.make(p[1]), param_active_type,
# param_active_signed, param_active_range, tmp);
# { PExpr*tmp = p[3];
# pform_set_localparam(@1, lex_strings.make(p[1]), param_active_type,
# param_active_signed, param_active_range, tmp);
# { p[0] = pform_parameter_value_range(p[1], false, p[3], false, p[5]); }
()
# { p[0] = pform_parameter_value_range(p[1], false, p[3], false, p[5]); }
()
# { p[0] = pform_parameter_value_range(p[1], false, p[3], true, p[5]); }
()
# { p[0] = pform_parameter_value_range(p[1], false, p[3], true, p[5]); }
()
# { p[0] = pform_parameter_value_range(p[1], true, p[3], false, p[5]); }
()
# { p[0] = pform_parameter_value_range(p[1], true, p[3], false, p[5]); }
()
# { p[0] = pform_parameter_value_range(p[1], true, p[3], true, p[5]); }
()
# { p[0] = pform_parameter_value_range(p[1], true, p[3], true, p[5]); }
()
# { p[0] = pform_parameter_value_range(true, false, p[2], false, p[2]); }
()
# { p[0] = pform_parameter_value_range(true, false, p[2], false, p[2]); }
()
# { yyerror(@3, "error: invalid port connection expression.");
# named_pexpr_t*tmp = new named_pexpr_t;
# tmp->name = lex_strings.make(p[2]);
# { yyerror(@3, "error: invalid port connection expression.");
# named_pexpr_t*tmp = new named_pexpr_t;
# tmp->name = lex_strings.make(p[2]);
# { named_pexpr_t*tmp = new named_pexpr_t;
# tmp->name = lex_strings.make(p[2]);
# tmp->parm = new PEIdent(lex_strings.make(p[2]), true);
# { named_pexpr_t*tmp = new named_pexpr_t;
# tmp->name = lex_strings.make(p[2]);
# tmp->parm = new PEIdent(lex_strings.make(p[2]), true);
# { Module::port_t*ptmp;
# perm_string name = lex_strings.make(p[1]);
# ptmp = pform_module_port_reference(name, @1.text, @1.first_line);
# { Module::port_t*ptmp;
# perm_string name = lex_strings.make(p[1]);
# ptmp = pform_module_port_reference(name, @1.text, @1.first_line);
# { yyerror(@1, "error: invalid port bit select");
# Module::port_t*ptmp = new Module::port_t;
# PEIdent*wtmp = new PEIdent(lex_strings.make(p[1]));
# { yyerror(@1, "error: invalid port bit select");
# Module::port_t*ptmp = new Module::port_t;
# PEIdent*wtmp = new PEIdent(lex_strings.make(p[1]));
# { Module::port_t*tmp = p[1];
# append(tmp->expr, p[3]->expr);
# delete p[3];
# { Module::port_t*tmp = p[1];
# append(tmp->expr, p[3]->expr);
# delete p[3];
# { list<pform_range_t> *tmp = p[1];
# if (p[2]) {
# tmp->splice(tmp->end(), *p[2]);
# { list<pform_range_t> *tmp = p[1];
# if (p[2]) {
# tmp->splice(tmp->end(), *p[2]);
# { perm_string name = lex_strings.make(p[1]);
# pform_makewire(@1, name, NetNet::REG,
# NetNet::NOT_A_PORT, IVL_VT_NO_TYPE, 0);
# { perm_string name = lex_strings.make(p[1]);
# pform_makewire(@1, name, NetNet::REG,
# NetNet::NOT_A_PORT, IVL_VT_NO_TYPE, 0);
# { if (pform_peek_scope()->var_init_needs_explicit_lifetime()
# && (var_lifetime == LexicalScope::INHERITED)) {
# cerr << @3 << ": warning: Static variable initialization requires "
# { if (pform_peek_scope()->var_init_needs_explicit_lifetime()
# && (var_lifetime == LexicalScope::INHERITED)) {
# cerr << @3 << ": warning: Static variable initialization requires "
# { list<PExpr*>*tmp = new list<PExpr*>;
# tmp->push_back(p[3]);
# p[0] = pform_assign_path_delay(p[1], tmp);
# { list<PExpr*>*tmp = new list<PExpr*>;
# tmp->push_back(p[3]);
# p[0] = pform_assign_path_delay(p[1], tmp);
# { int edge_flag = 0;
# p[0] = pform_make_specify_edge_path(@1, edge_flag, p[2], p[3], false, p[6], p[8]); }
()
# { int edge_flag = 0;
# p[0] = pform_make_specify_edge_path(@1, edge_flag, p[2], p[3], false, p[6], p[8]); }
()
# { int edge_flag = p[2]? 1 : -1;
# p[0] = pform_make_specify_edge_path(@1, edge_flag, p[3], p[4], false, p[7], p[9]);}
()
# { int edge_flag = p[2]? 1 : -1;
# p[0] = pform_make_specify_edge_path(@1, edge_flag, p[3], p[4], false, p[7], p[9]);}
()
# { int edge_flag = 0;
# p[0] = pform_make_specify_edge_path(@1, edge_flag, p[2], p[3], true, p[6], p[8]); }
()
# { int edge_flag = 0;
# p[0] = pform_make_specify_edge_path(@1, edge_flag, p[2], p[3], true, p[6], p[8]); }
()
# { int edge_flag = p[2]? 1 : -1;
# p[0] = pform_make_specify_edge_path(@1, edge_flag, p[3], p[4], true, p[7], p[9]); }
()
# { int edge_flag = p[2]? 1 : -1;
# p[0] = pform_make_specify_edge_path(@1, edge_flag, p[3], p[4], true, p[7], p[9]); }
()
# { list<PExpr*>*tmp = new list<PExpr*>;
# tmp->push_back(p[3]);
# p[0] = pform_assign_path_delay(p[1], tmp);
# { list<PExpr*>*tmp = new list<PExpr*>;
# tmp->push_back(p[3]);
# p[0] = pform_assign_path_delay(p[1], tmp);
# { p[0] = pform_make_specify_path(@1, p[2], p[3], false, p[5]); }
()
# { p[0] = pform_make_specify_path(@1, p[2], p[3], false, p[5]); }
()
# { p[0] = pform_make_specify_path(@1, p[2], p[3], true, p[5]); }
()
# { p[0] = pform_make_specify_path(@1, p[2], p[3], true, p[5]); }
()
# { if (gn_specify_blocks_flag) {
# yywarn(@4, "Bit selects are not currently supported "
# "in path declarations. The declaration "
# { if (gn_specify_blocks_flag) {
# yywarn(@4, "Bit selects are not currently supported "
# "in path declarations. The declaration "
# { if (gn_specify_blocks_flag) {
# yywarn(@4, "Part selects are not currently supported "
# "in path declarations. The declaration "
# { if (gn_specify_blocks_flag) {
# yywarn(@4, "Part selects are not currently supported "
# "in path declarations. The declaration "
# { if (gn_specify_blocks_flag) {
# yywarn(@4, "Bit selects are not currently supported "
# "in path declarations. The declaration "
# { if (gn_specify_blocks_flag) {
# yywarn(@4, "Bit selects are not currently supported "
# "in path declarations. The declaration "
# { if (gn_specify_blocks_flag) {
# yywarn(@4, "Part selects are not currently supported "
# "in path declarations. The declaration "
# { if (gn_specify_blocks_flag) {
# yywarn(@4, "Part selects are not currently supported "
# "in path declarations. The declaration "
# { PExpr*tmp = p[3];
# pform_set_specparam(@1, lex_strings.make(p[1]),
# param_active_range, tmp);
# { PExpr*tmp = p[3];
# pform_set_specparam(@1, lex_strings.make(p[1]),
# param_active_range, tmp);
# { args_after_notifier += 1;
# if (args_after_notifier >= 3) {
# cerr << @3 << ": warning: timing checks are not supported "
# { args_after_notifier += 1;
# if (args_after_notifier >= 3) {
# cerr << @3 << ": warning: timing checks are not supported "
def p_statement_item_2(p):
'''statement_item : K_deassign lpvalue ';' '''
if(parse_debug):
print('statement_item_2', list(p))
def p_statement_item_2(p):
'''statement_item : K_deassign lpvalue ';' '''
if(parse_debug):
print('statement_item_2', list(p))
# { PEventStatement*tmp = p[1];
# if (tmp == 0) {
# yyerror(@1, "error: Invalid event control.");
# { PEventStatement*tmp = p[1];
# if (tmp == 0) {
# yyerror(@1, "error: Invalid event control.");
# { PExpr*del = p[3]->front(); p[3]->pop_front();
# assert(p[3]->empty());
# PAssign*tmp = new PAssign(p[1],del,p[4]);
# { PExpr*del = p[3]->front(); p[3]->pop_front();
# assert(p[3]->empty());
# PAssign*tmp = new PAssign(p[1],del,p[4]);
# { PExpr*del = p[3]->front(); p[3]->pop_front();
# assert(p[3]->empty());
# PAssignNB*tmp = new PAssignNB(p[1],del,p[4]);
# { PExpr*del = p[3]->front(); p[3]->pop_front();
# assert(p[3]->empty());
# PAssignNB*tmp = new PAssignNB(p[1],del,p[4]);
# { PAssign*tmp = new PAssign(p[1],0,p[3],p[4]);
# FILE_NAME(tmp, @1);
# p[0] = tmp;
# { PAssign*tmp = new PAssign(p[1],0,p[3],p[4]);
# FILE_NAME(tmp, @1);
# p[0] = tmp;
# { PAssign*tmp = new PAssign(p[1],p[5],p[7],p[8]);
# FILE_NAME(tmp,@1);
# tmp->set_lineno(@1.first_line);
# { PAssign*tmp = new PAssign(p[1],p[5],p[7],p[8]);
# FILE_NAME(tmp,@1);
# tmp->set_lineno(@1.first_line);
# { PAssignNB*tmp = new PAssignNB(p[1],0,p[3],p[4]);
# FILE_NAME(tmp, @1);
# p[0] = tmp;
# { PAssignNB*tmp = new PAssignNB(p[1],0,p[3],p[4]);
# FILE_NAME(tmp, @1);
# p[0] = tmp;
# { PAssignNB*tmp = new PAssignNB(p[1],p[5],p[7],p[8]);
# FILE_NAME(tmp, @1);
# p[0] = tmp;
# { PAssignNB*tmp = new PAssignNB(p[1],p[5],p[7],p[8]);
# FILE_NAME(tmp, @1);
# p[0] = tmp;
# { PEventStatement*tmp;
# PEEvent*etmp = new PEEvent(PEEvent::POSITIVE, p[3]);
# tmp = new PEventStatement(etmp);
# { PEventStatement*tmp;
# PEEvent*etmp = new PEEvent(PEEvent::POSITIVE, p[3]);
# tmp = new PEventStatement(etmp);
# { /* ....randomize with { <constraints> } */
# if (p[1] && peek_tail_name(*p[1]) == "randomize") {
# if (!gn_system_verilog())
# { /* ....randomize with { <constraints> } */
# if (p[1] && peek_tail_name(*p[1]) == "randomize") {
# if (!gn_system_verilog())
# { pform_name_t*t_name = p[1];
# while (! p[3]->empty()) {
# t_name->push_back(p[3]->front());
# { pform_name_t*t_name = p[1];
# while (! p[3]->empty()) {
# t_name->push_back(p[3]->front());
# { yyerror(@3, "error: Syntax error in task arguments.");
# list<PExpr*>pt;
# PCallTask*tmp = pform_make_call_task(@1, *p[1], pt);
# { yyerror(@3, "error: Syntax error in task arguments.");
# list<PExpr*>pt;
# PCallTask*tmp = pform_make_call_task(@1, *p[1], pt);
# { PBlock*tmp = pform_push_block_scope(0, PBlock::BL_SEQ);
# FILE_NAME(tmp, @1);
# current_block_stack.push(tmp);
# { PBlock*tmp = pform_push_block_scope(0, PBlock::BL_SEQ);
# FILE_NAME(tmp, @1);
# current_block_stack.push(tmp);
# { PBlock*tmp = pform_push_block_scope(p[3], PBlock::BL_SEQ);
# FILE_NAME(tmp, @1);
# current_block_stack.push(tmp);
# { PBlock*tmp = pform_push_block_scope(p[3], PBlock::BL_SEQ);
# FILE_NAME(tmp, @1);
# current_block_stack.push(tmp);
# { PBlock*tmp = pform_push_block_scope(0, PBlock::BL_PAR);
# FILE_NAME(tmp, @1);
# current_block_stack.push(tmp);
# { PBlock*tmp = pform_push_block_scope(0, PBlock::BL_PAR);
# FILE_NAME(tmp, @1);
# current_block_stack.push(tmp);
# { PBlock*tmp = pform_push_block_scope(p[3], PBlock::BL_PAR);
# FILE_NAME(tmp, @1);
# current_block_stack.push(tmp);
# { PBlock*tmp = pform_push_block_scope(p[3], PBlock::BL_PAR);
# FILE_NAME(tmp, @1);
# current_block_stack.push(tmp);
# { vector<pform_tf_port_t>*tmp = p[1];
# size_t s1 = tmp->size();
# tmp->resize(s1 + p[2]->size());
# { vector<pform_tf_port_t>*tmp = p[1];
# size_t s1 = tmp->size();
# tmp->resize(s1 + p[2]->size());
# { PExpr*etmp = new PENumber(p[4]);
# PEIdent*itmp = new PEIdent(lex_strings.make(p[2]));
# PAssign*atmp = new PAssign(itmp, etmp);
# { PExpr*etmp = new PENumber(p[4]);
# PEIdent*itmp = new PEIdent(lex_strings.make(p[2]));
# PAssign*atmp = new PAssign(itmp, etmp);
# { perm_string pname = lex_strings.make(p[2]);
# PWire*pp = new PWire(pname, NetNet::IMPLICIT, NetNet::POUTPUT, IVL_VT_LOGIC);
# vector<PWire*>*tmp = new vector<PWire*>(1);
# { perm_string pname = lex_strings.make(p[2]);
# PWire*pp = new PWire(pname, NetNet::IMPLICIT, NetNet::POUTPUT, IVL_VT_LOGIC);
# vector<PWire*>*tmp = new vector<PWire*>(1);
# { perm_string pname = lex_strings.make(p[2]);
# PWire*pp = new PWire(pname, NetNet::REG, NetNet::PIMPLICIT, IVL_VT_LOGIC);
# vector<PWire*>*tmp = new vector<PWire*>(1);
# { perm_string pname = lex_strings.make(p[2]);
# PWire*pp = new PWire(pname, NetNet::REG, NetNet::PIMPLICIT, IVL_VT_LOGIC);
# vector<PWire*>*tmp = new vector<PWire*>(1);
# { perm_string pname = lex_strings.make(p[3]);
# PWire*pp = new PWire(pname, NetNet::REG, NetNet::POUTPUT, IVL_VT_LOGIC);
# vector<PWire*>*tmp = new vector<PWire*>(1);
# { perm_string pname = lex_strings.make(p[3]);
# PWire*pp = new PWire(pname, NetNet::REG, NetNet::POUTPUT, IVL_VT_LOGIC);
# vector<PWire*>*tmp = new vector<PWire*>(1);
# { vector<PWire*>*tmp = p[1];
# size_t s1 = p[1]->size();
# tmp->resize(s1+p[2]->size());
# { vector<PWire*>*tmp = p[1];
# size_t s1 = p[1]->size();
# tmp->resize(s1+p[2]->size());
# { perm_string tmp2 = lex_strings.make(p[2]);
# pform_make_udp(tmp2, p[4], p[7], p[9], p[8],
# @2.text, @2.first_line);
# { perm_string tmp2 = lex_strings.make(p[2]);
# pform_make_udp(tmp2, p[4], p[7], p[9], p[8],
# @2.text, @2.first_line);
# { perm_string tmp2 = lex_strings.make(p[2]);
# perm_string tmp6 = lex_strings.make(p[6]);
# pform_make_udp(tmp2, p[5], tmp6, p[7], p[9], p[12],
# { perm_string tmp2 = lex_strings.make(p[2]);
# perm_string tmp6 = lex_strings.make(p[6]);
# pform_make_udp(tmp2, p[5], tmp6, p[7], p[9], p[12],