2323#include " aval_bval_encoding.h"
2424#include " convert_literals.h"
2525#include " expr2verilog.h"
26+ #include " typename.h"
2627#include " verilog_bits.h"
2728#include " verilog_expr.h"
2829#include " verilog_lowering.h"
@@ -746,40 +747,7 @@ Function: verilog_typecheck_exprt::left
746747
747748constant_exprt verilog_typecheck_exprt::left (const exprt &expr)
748749{
749- // unpacked array: left bound
750- // packed array: index of most significant element
751- // 0 otherwise
752- auto left = [](const typet &type) -> mp_integer {
753- if (
754- type.id () == ID_unsignedbv || type.id () == ID_signedbv ||
755- type.id () == ID_verilog_unsignedbv || type.id () == ID_verilog_signedbv ||
756- type.id () == ID_bool)
757- {
758- auto offset = type.get_int (ID_C_offset);
759- if (type.get_bool (ID_C_increasing))
760- return offset;
761- else
762- return offset + get_width (type) - 1 ;
763- }
764- else if (type.id () == ID_array)
765- {
766- auto offset = numeric_cast_v<mp_integer>(
767- to_constant_expr (static_cast <const exprt &>(type.find (ID_offset))));
768- if (type.get_bool (ID_C_increasing))
769- return offset;
770- else
771- {
772- return offset +
773- numeric_cast_v<mp_integer>(
774- to_constant_expr (to_array_type (type).size ())) -
775- 1 ;
776- }
777- }
778- else
779- return 0 ;
780- };
781-
782- return from_integer (left (expr.type ()), integer_typet{});
750+ return from_integer (verilog_left (expr.type ()), integer_typet{});
783751}
784752
785753/* ******************************************************************\
@@ -796,40 +764,7 @@ Function: verilog_typecheck_exprt::right
796764
797765constant_exprt verilog_typecheck_exprt::right (const exprt &expr)
798766{
799- // unpacked array: right bound
800- // packed array: index of least significant element
801- // 0 otherwise
802- auto right = [](const typet &type) -> mp_integer {
803- if (
804- type.id () == ID_unsignedbv || type.id () == ID_signedbv ||
805- type.id () == ID_verilog_unsignedbv || type.id () == ID_verilog_signedbv ||
806- type.id () == ID_bool)
807- {
808- auto offset = type.get_int (ID_C_offset);
809- if (type.get_bool (ID_C_increasing))
810- return offset + get_width (type) - 1 ;
811- else
812- return offset;
813- }
814- else if (type.id () == ID_array)
815- {
816- auto offset = numeric_cast_v<mp_integer>(
817- to_constant_expr (static_cast <const exprt &>(type.find (ID_offset))));
818- if (type.get_bool (ID_C_increasing))
819- {
820- return offset +
821- numeric_cast_v<mp_integer>(
822- to_constant_expr (to_array_type (type).size ())) -
823- 1 ;
824- }
825- else
826- return offset;
827- }
828- else
829- return 0 ;
830- };
831-
832- return from_integer (right (expr.type ()), integer_typet{});
767+ return from_integer (verilog_right (expr.type ()), integer_typet{});
833768}
834769
835770/* ******************************************************************\
@@ -950,84 +885,8 @@ Function: verilog_typecheck_exprt::typename_string
950885
951886exprt verilog_typecheck_exprt::typename_string (const exprt &expr)
952887{
953- auto &type = expr.type ();
954-
955- auto left = this ->left (expr);
956- auto right = this ->right (expr);
957-
958- const auto verilog_type = type.get (ID_C_verilog_type);
959-
960- std::string s;
961-
962- if (type.id () == ID_unsignedbv)
963- {
964- if (verilog_type == ID_verilog_byte)
965- s = " byte unsigned" ;
966- else if (verilog_type == ID_verilog_int)
967- s = " int unsigned" ;
968- else if (verilog_type == ID_verilog_longint)
969- s = " longint unsigned" ;
970- else if (verilog_type == ID_verilog_shortint)
971- s = " shortint unsigned" ;
972- else
973- s = " bit[" + to_string (left) + " :" + to_string (right) + " ]" ;
974- }
975- else if (type.id () == ID_verilog_unsignedbv)
976- {
977- s = " logic[" + to_string (left) + " :" + to_string (right) + " ]" ;
978- }
979- else if (type.id () == ID_bool)
980- {
981- s = " bit" ;
982- }
983- else if (type.id () == ID_signedbv)
984- {
985- if (verilog_type == ID_verilog_byte)
986- s = " byte" ;
987- else if (verilog_type == ID_verilog_int)
988- s = " int" ;
989- else if (verilog_type == ID_verilog_longint)
990- s = " longint" ;
991- else if (verilog_type == ID_verilog_shortint)
992- s = " shortint" ;
993- else
994- s = " bit signed[" + to_string (left) + " :" + to_string (right) + " ]" ;
995- }
996- else if (type.id () == ID_verilog_signedbv)
997- {
998- s = " logic signed[" + to_string (left) + " :" + to_string (right) + " ]" ;
999- }
1000- else if (type.id () == ID_verilog_realtime)
1001- {
1002- s = " realtime" ;
1003- }
1004- else if (type.id () == ID_verilog_real)
1005- {
1006- s = " real" ;
1007- }
1008- else if (type.id () == ID_verilog_shortreal)
1009- {
1010- s = " shortreal" ;
1011- }
1012- else if (type.id () == ID_verilog_chandle)
1013- {
1014- s = " chandle" ;
1015- }
1016- else if (type.id () == ID_verilog_event)
1017- {
1018- s = " event" ;
1019- }
1020- else if (type.id () == ID_verilog_string)
1021- {
1022- s = " string" ;
1023- }
1024- else
1025- s = " ?" ;
1026-
1027- auto result = convert_string_literal (s);
1028- result.add_source_location () = expr.source_location ();
1029-
1030- return std::move (result);
888+ auto s = verilog_typename (expr.type ());
889+ return convert_string_literal (s).with_source_location (expr);
1031890}
1032891
1033892/* ******************************************************************\
0 commit comments