MCPcopy Create free account
hub / github.com/chipsalliance/Surelog / fromString

Method fromString

src/Expression/ExprBuilder.cpp:1023–1150  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1021}
1022
1023Value* ExprBuilder::fromString(std::string_view value) {
1024 Value* val = nullptr;
1025 if (value.find('\'') != std::string::npos) {
1026 std::string sval;
1027 char base = 'b';
1028 uint32_t i = 0;
1029 for (i = 0; i < value.size(); i++) {
1030 if (value[i] == '\'') {
1031 base = value[i + 1];
1032 if (base == 's' || base == 'S') base = value[i + 2];
1033 break;
1034 }
1035 }
1036 if (value.find_first_of("sS") != std::string::npos) {
1037 sval = value.substr(i + 3);
1038 } else {
1039 sval = value.substr(i + 2);
1040 }
1041 sval = StringUtils::replaceAll(sval, "_", "");
1042 // No check for validity of sval being a legal parse-able value.
1043 switch (base) {
1044 case 'h': {
1045 std::string_view size = StringUtils::rtrim_until(value, '\'');
1046 int32_t s = 0;
1047 if (NumUtils::parseInt32(size, &s) == nullptr) {
1048 s = 0;
1049 }
1050 StValue* stval = (StValue*)m_valueFactory.newStValue();
1051 stval->set(sval, Value::Type::Hexadecimal, s);
1052 val = stval;
1053 break;
1054 }
1055 case 'b': {
1056 std::string_view size = StringUtils::rtrim_until(value, '\'');
1057 int32_t s = 0;
1058 if (NumUtils::parseInt32(size, &s) == nullptr) {
1059 s = 0;
1060 }
1061 StValue* stval = (StValue*)m_valueFactory.newStValue();
1062 stval->set(sval, Value::Type::Binary, s);
1063 val = stval;
1064 break;
1065 }
1066 case 'o': {
1067 std::string_view size = StringUtils::rtrim_until(value, '\'');
1068 int32_t s = 0;
1069 if (NumUtils::parseInt32(size, &s) == nullptr) {
1070 s = 0;
1071 }
1072 StValue* stval = (StValue*)m_valueFactory.newStValue();
1073 stval->set(sval, Value::Type::Octal, s);
1074 val = stval;
1075 break;
1076 }
1077 case 'd': {
1078 long double v = 0;
1079 if ((sval.find('.') != std::string::npos) &&
1080 (NumUtils::parseLongDouble(sval, &v) != nullptr)) {

Callers 2

TESTFunction · 0.80
collectParams_Method · 0.80

Calls 6

parseInt32Function · 0.85
parseInt64Function · 0.85
parseUint64Function · 0.85
newStValueMethod · 0.80
newLValueMethod · 0.80
setMethod · 0.45

Tested by 1

TESTFunction · 0.64