comment memory leak

This commit is contained in:
David Rose 2004-07-09 23:19:40 +00:00
parent dc251e5e7d
commit 316e4e29a1
2 changed files with 117 additions and 101 deletions

View File

@ -271,16 +271,16 @@ static const short yyrline[] =
451, 455, 461, 461, 474, 476, 479, 481, 484, 493, 451, 455, 461, 461, 474, 476, 479, 481, 484, 493,
493, 504, 508, 510, 510, 538, 540, 540, 568, 570, 493, 504, 508, 510, 510, 538, 540, 540, 568, 570,
573, 575, 578, 583, 587, 593, 598, 606, 617, 631, 573, 575, 578, 583, 587, 593, 598, 606, 617, 631,
645, 680, 692, 706, 711, 718, 725, 734, 740, 746, 645, 680, 696, 714, 719, 726, 733, 742, 748, 754,
756, 761, 768, 775, 781, 789, 791, 801, 807, 821, 764, 769, 776, 783, 789, 797, 799, 809, 815, 829,
827, 837, 840, 851, 855, 859, 864, 868, 871, 881, 835, 845, 848, 859, 863, 867, 872, 876, 879, 889,
885, 890, 894, 898, 902, 906, 906, 914, 914, 922, 893, 898, 902, 906, 910, 914, 914, 922, 922, 930,
922, 930, 936, 942, 948, 956, 958, 961, 963, 966, 930, 938, 944, 950, 956, 964, 966, 969, 971, 974,
968, 971, 976, 980, 984, 988, 992, 996, 1000, 1004, 976, 979, 984, 988, 992, 996, 1000, 1004, 1008, 1012,
1008, 1012, 1016, 1020, 1024, 1028, 1032, 1036, 1040, 1044, 1016, 1020, 1024, 1028, 1032, 1036, 1040, 1044, 1048, 1052,
1048, 1054, 1059, 1063, 1067, 1071, 1075, 1079, 1083, 1087, 1056, 1062, 1067, 1071, 1075, 1079, 1083, 1087, 1091, 1095,
1091, 1097, 1107, 1107, 1118, 1134, 1141, 1154, 1159, 1162, 1099, 1105, 1115, 1115, 1126, 1142, 1149, 1162, 1167, 1170,
1162, 1176, 1178, 1179, 1180, 1192, 1192, 1209, 1214, 1220 1170, 1184, 1186, 1187, 1188, 1200, 1200, 1217, 1222, 1228
}; };
#endif #endif
@ -1744,13 +1744,17 @@ case 81:
} else { } else {
if (dc_file != (DCFile *)NULL) { if (dc_file != (DCFile *)NULL) {
dc_file->add_thing_to_delete(yyvsp[0].u.dclass); dc_file->add_thing_to_delete(yyvsp[0].u.dclass);
} else {
// This is a memory leak--this happens when we put an anonymous
// struct reference within the string passed to
// DCPackerInterface::check_match(). Maybe it doesn't really matter.
} }
yyval.u.parameter = new DCClassParameter(yyvsp[0].u.dclass); yyval.u.parameter = new DCClassParameter(yyvsp[0].u.dclass);
} }
} }
break; break;
case 82: case 82:
#line 693 "dcParser.yxx" #line 697 "dcParser.yxx"
{ {
// This is an inline switch definition. // This is an inline switch definition.
if (yyvsp[0].u.dswitch == (DCSwitch *)NULL) { if (yyvsp[0].u.dswitch == (DCSwitch *)NULL) {
@ -1758,19 +1762,23 @@ case 82:
} else { } else {
if (dc_file != (DCFile *)NULL) { if (dc_file != (DCFile *)NULL) {
dc_file->add_thing_to_delete(yyvsp[0].u.dswitch); dc_file->add_thing_to_delete(yyvsp[0].u.dswitch);
} else {
// This is a memory leak--this happens when we put an anonymous
// switch reference within the string passed to
// DCPackerInterface::check_match(). Maybe it doesn't really matter.
} }
yyval.u.parameter = new DCSwitchParameter(yyvsp[0].u.dswitch); yyval.u.parameter = new DCSwitchParameter(yyvsp[0].u.dswitch);
} }
} }
break; break;
case 83: case 83:
#line 708 "dcParser.yxx" #line 716 "dcParser.yxx"
{ {
double_range.clear(); double_range.clear();
} }
break; break;
case 84: case 84:
#line 712 "dcParser.yxx" #line 720 "dcParser.yxx"
{ {
double_range.clear(); double_range.clear();
if (!double_range.add_range(yyvsp[0].u.real, yyvsp[0].u.real)) { if (!double_range.add_range(yyvsp[0].u.real, yyvsp[0].u.real)) {
@ -1779,7 +1787,7 @@ case 84:
} }
break; break;
case 85: case 85:
#line 719 "dcParser.yxx" #line 727 "dcParser.yxx"
{ {
double_range.clear(); double_range.clear();
if (!double_range.add_range(yyvsp[-2].u.real, yyvsp[0].u.real)) { if (!double_range.add_range(yyvsp[-2].u.real, yyvsp[0].u.real)) {
@ -1788,7 +1796,7 @@ case 85:
} }
break; break;
case 86: case 86:
#line 726 "dcParser.yxx" #line 734 "dcParser.yxx"
{ {
double_range.clear(); double_range.clear();
if (yyvsp[0].u.real >= 0) { if (yyvsp[0].u.real >= 0) {
@ -1799,7 +1807,7 @@ case 86:
} }
break; break;
case 87: case 87:
#line 735 "dcParser.yxx" #line 743 "dcParser.yxx"
{ {
if (!double_range.add_range(yyvsp[0].u.real, yyvsp[0].u.real)) { if (!double_range.add_range(yyvsp[0].u.real, yyvsp[0].u.real)) {
yyerror("Overlapping range"); yyerror("Overlapping range");
@ -1807,7 +1815,7 @@ case 87:
} }
break; break;
case 88: case 88:
#line 741 "dcParser.yxx" #line 749 "dcParser.yxx"
{ {
if (!double_range.add_range(yyvsp[-2].u.real, yyvsp[0].u.real)) { if (!double_range.add_range(yyvsp[-2].u.real, yyvsp[0].u.real)) {
yyerror("Overlapping range"); yyerror("Overlapping range");
@ -1815,7 +1823,7 @@ case 88:
} }
break; break;
case 89: case 89:
#line 747 "dcParser.yxx" #line 755 "dcParser.yxx"
{ {
if (yyvsp[0].u.real >= 0) { if (yyvsp[0].u.real >= 0) {
yyerror("Syntax error"); yyerror("Syntax error");
@ -1825,13 +1833,13 @@ case 89:
} }
break; break;
case 90: case 90:
#line 758 "dcParser.yxx" #line 766 "dcParser.yxx"
{ {
uint_range.clear(); uint_range.clear();
} }
break; break;
case 91: case 91:
#line 762 "dcParser.yxx" #line 770 "dcParser.yxx"
{ {
uint_range.clear(); uint_range.clear();
if (!uint_range.add_range(yyvsp[0].u.s_uint, yyvsp[0].u.s_uint)) { if (!uint_range.add_range(yyvsp[0].u.s_uint, yyvsp[0].u.s_uint)) {
@ -1840,7 +1848,7 @@ case 91:
} }
break; break;
case 92: case 92:
#line 769 "dcParser.yxx" #line 777 "dcParser.yxx"
{ {
uint_range.clear(); uint_range.clear();
if (!uint_range.add_range(yyvsp[-2].u.s_uint, yyvsp[0].u.s_uint)) { if (!uint_range.add_range(yyvsp[-2].u.s_uint, yyvsp[0].u.s_uint)) {
@ -1849,7 +1857,7 @@ case 92:
} }
break; break;
case 93: case 93:
#line 776 "dcParser.yxx" #line 784 "dcParser.yxx"
{ {
if (!uint_range.add_range(yyvsp[0].u.s_uint, yyvsp[0].u.s_uint)) { if (!uint_range.add_range(yyvsp[0].u.s_uint, yyvsp[0].u.s_uint)) {
yyerror("Overlapping range"); yyerror("Overlapping range");
@ -1857,7 +1865,7 @@ case 93:
} }
break; break;
case 94: case 94:
#line 782 "dcParser.yxx" #line 790 "dcParser.yxx"
{ {
if (!uint_range.add_range(yyvsp[-2].u.s_uint, yyvsp[0].u.s_uint)) { if (!uint_range.add_range(yyvsp[-2].u.s_uint, yyvsp[0].u.s_uint)) {
yyerror("Overlapping range"); yyerror("Overlapping range");
@ -1865,7 +1873,7 @@ case 94:
} }
break; break;
case 96: case 96:
#line 792 "dcParser.yxx" #line 800 "dcParser.yxx"
{ {
if (yyvsp[-3].u.parameter == (DCParameter *)NULL) { if (yyvsp[-3].u.parameter == (DCParameter *)NULL) {
yyval.u.parameter = NULL; yyval.u.parameter = NULL;
@ -1875,14 +1883,14 @@ case 96:
} }
break; break;
case 97: case 97:
#line 803 "dcParser.yxx" #line 811 "dcParser.yxx"
{ {
current_parameter->set_name(yyvsp[0].str); current_parameter->set_name(yyvsp[0].str);
yyval.u.parameter = current_parameter; yyval.u.parameter = current_parameter;
} }
break; break;
case 98: case 98:
#line 808 "dcParser.yxx" #line 816 "dcParser.yxx"
{ {
if (yyvsp[0].u.s_uint == 0) { if (yyvsp[0].u.s_uint == 0) {
yyerror("Invalid divisor."); yyerror("Invalid divisor.");
@ -1898,13 +1906,13 @@ case 98:
} }
break; break;
case 99: case 99:
#line 822 "dcParser.yxx" #line 830 "dcParser.yxx"
{ {
yyval.u.parameter = new DCArrayParameter(yyvsp[-3].u.parameter, uint_range); yyval.u.parameter = new DCArrayParameter(yyvsp[-3].u.parameter, uint_range);
} }
break; break;
case 100: case 100:
#line 829 "dcParser.yxx" #line 837 "dcParser.yxx"
{ {
if (yyvsp[0].str.length() != 1) { if (yyvsp[0].str.length() != 1) {
yyerror("Single character required."); yyerror("Single character required.");
@ -1915,7 +1923,7 @@ case 100:
} }
break; break;
case 102: case 102:
#line 842 "dcParser.yxx" #line 850 "dcParser.yxx"
{ {
yyval.u.s_uint = (unsigned int)yyvsp[0].u.uint64; yyval.u.s_uint = (unsigned int)yyvsp[0].u.uint64;
if (yyval.u.s_uint != yyvsp[0].u.uint64) { if (yyval.u.s_uint != yyvsp[0].u.uint64) {
@ -1925,19 +1933,19 @@ case 102:
} }
break; break;
case 105: case 105:
#line 861 "dcParser.yxx" #line 869 "dcParser.yxx"
{ {
yyval.u.real = (double)yyvsp[0].u.uint64; yyval.u.real = (double)yyvsp[0].u.uint64;
} }
break; break;
case 106: case 106:
#line 865 "dcParser.yxx" #line 873 "dcParser.yxx"
{ {
yyval.u.real = (double)yyvsp[0].u.int64; yyval.u.real = (double)yyvsp[0].u.int64;
} }
break; break;
case 108: case 108:
#line 873 "dcParser.yxx" #line 881 "dcParser.yxx"
{ {
if (yyvsp[0].str.length() != 1) { if (yyvsp[0].str.length() != 1) {
yyerror("Single character required."); yyerror("Single character required.");
@ -1948,73 +1956,73 @@ case 108:
} }
break; break;
case 110: case 110:
#line 887 "dcParser.yxx" #line 895 "dcParser.yxx"
{ {
current_packer->pack_int64(yyvsp[0].u.int64); current_packer->pack_int64(yyvsp[0].u.int64);
} }
break; break;
case 111: case 111:
#line 891 "dcParser.yxx" #line 899 "dcParser.yxx"
{ {
current_packer->pack_uint64(yyvsp[0].u.uint64); current_packer->pack_uint64(yyvsp[0].u.uint64);
} }
break; break;
case 112: case 112:
#line 895 "dcParser.yxx" #line 903 "dcParser.yxx"
{ {
current_packer->pack_double(yyvsp[0].u.real); current_packer->pack_double(yyvsp[0].u.real);
} }
break; break;
case 113: case 113:
#line 899 "dcParser.yxx" #line 907 "dcParser.yxx"
{ {
current_packer->pack_string(yyvsp[0].str); current_packer->pack_string(yyvsp[0].str);
} }
break; break;
case 114: case 114:
#line 903 "dcParser.yxx" #line 911 "dcParser.yxx"
{ {
current_packer->pack_literal_value(yyvsp[0].str); current_packer->pack_literal_value(yyvsp[0].str);
} }
break; break;
case 115: case 115:
#line 907 "dcParser.yxx"
{
current_packer->push();
}
break;
case 116:
#line 911 "dcParser.yxx"
{
current_packer->pop();
}
break;
case 117:
#line 915 "dcParser.yxx" #line 915 "dcParser.yxx"
{ {
current_packer->push(); current_packer->push();
} }
break; break;
case 118: case 116:
#line 919 "dcParser.yxx" #line 919 "dcParser.yxx"
{ {
current_packer->pop(); current_packer->pop();
} }
break; break;
case 119: case 117:
#line 923 "dcParser.yxx" #line 923 "dcParser.yxx"
{ {
current_packer->push(); current_packer->push();
} }
break; break;
case 120: case 118:
#line 927 "dcParser.yxx" #line 927 "dcParser.yxx"
{ {
current_packer->pop(); current_packer->pop();
} }
break; break;
case 121: case 119:
#line 931 "dcParser.yxx" #line 931 "dcParser.yxx"
{
current_packer->push();
}
break;
case 120:
#line 935 "dcParser.yxx"
{
current_packer->pop();
}
break;
case 121:
#line 939 "dcParser.yxx"
{ {
for (unsigned int i = 0; i < yyvsp[0].u.s_uint; i++) { for (unsigned int i = 0; i < yyvsp[0].u.s_uint; i++) {
current_packer->pack_int64(yyvsp[-2].u.int64); current_packer->pack_int64(yyvsp[-2].u.int64);
@ -2022,7 +2030,7 @@ case 121:
} }
break; break;
case 122: case 122:
#line 937 "dcParser.yxx" #line 945 "dcParser.yxx"
{ {
for (unsigned int i = 0; i < yyvsp[0].u.s_uint; i++) { for (unsigned int i = 0; i < yyvsp[0].u.s_uint; i++) {
current_packer->pack_uint64(yyvsp[-2].u.uint64); current_packer->pack_uint64(yyvsp[-2].u.uint64);
@ -2030,7 +2038,7 @@ case 122:
} }
break; break;
case 123: case 123:
#line 943 "dcParser.yxx" #line 951 "dcParser.yxx"
{ {
for (unsigned int i = 0; i < yyvsp[0].u.s_uint; i++) { for (unsigned int i = 0; i < yyvsp[0].u.s_uint; i++) {
current_packer->pack_double(yyvsp[-2].u.real); current_packer->pack_double(yyvsp[-2].u.real);
@ -2038,7 +2046,7 @@ case 123:
} }
break; break;
case 124: case 124:
#line 949 "dcParser.yxx" #line 957 "dcParser.yxx"
{ {
for (unsigned int i = 0; i < yyvsp[0].u.s_uint; i++) { for (unsigned int i = 0; i < yyvsp[0].u.s_uint; i++) {
current_packer->pack_literal_value(yyvsp[-2].str); current_packer->pack_literal_value(yyvsp[-2].str);
@ -2046,187 +2054,187 @@ case 124:
} }
break; break;
case 131: case 131:
#line 973 "dcParser.yxx" #line 981 "dcParser.yxx"
{ {
yyval.u.subatomic = ST_int8; yyval.u.subatomic = ST_int8;
} }
break; break;
case 132: case 132:
#line 977 "dcParser.yxx" #line 985 "dcParser.yxx"
{ {
yyval.u.subatomic = ST_int16; yyval.u.subatomic = ST_int16;
} }
break; break;
case 133: case 133:
#line 981 "dcParser.yxx" #line 989 "dcParser.yxx"
{ {
yyval.u.subatomic = ST_int32; yyval.u.subatomic = ST_int32;
} }
break; break;
case 134: case 134:
#line 985 "dcParser.yxx" #line 993 "dcParser.yxx"
{ {
yyval.u.subatomic = ST_int64; yyval.u.subatomic = ST_int64;
} }
break; break;
case 135: case 135:
#line 989 "dcParser.yxx" #line 997 "dcParser.yxx"
{ {
yyval.u.subatomic = ST_uint8; yyval.u.subatomic = ST_uint8;
} }
break; break;
case 136: case 136:
#line 993 "dcParser.yxx" #line 1001 "dcParser.yxx"
{ {
yyval.u.subatomic = ST_uint16; yyval.u.subatomic = ST_uint16;
} }
break; break;
case 137: case 137:
#line 997 "dcParser.yxx" #line 1005 "dcParser.yxx"
{ {
yyval.u.subatomic = ST_uint32; yyval.u.subatomic = ST_uint32;
} }
break; break;
case 138: case 138:
#line 1001 "dcParser.yxx" #line 1009 "dcParser.yxx"
{ {
yyval.u.subatomic = ST_uint64; yyval.u.subatomic = ST_uint64;
} }
break; break;
case 139: case 139:
#line 1005 "dcParser.yxx" #line 1013 "dcParser.yxx"
{ {
yyval.u.subatomic = ST_float64; yyval.u.subatomic = ST_float64;
} }
break; break;
case 140: case 140:
#line 1009 "dcParser.yxx" #line 1017 "dcParser.yxx"
{ {
yyval.u.subatomic = ST_string; yyval.u.subatomic = ST_string;
} }
break; break;
case 141: case 141:
#line 1013 "dcParser.yxx" #line 1021 "dcParser.yxx"
{ {
yyval.u.subatomic = ST_blob; yyval.u.subatomic = ST_blob;
} }
break; break;
case 142: case 142:
#line 1017 "dcParser.yxx" #line 1025 "dcParser.yxx"
{ {
yyval.u.subatomic = ST_blob32; yyval.u.subatomic = ST_blob32;
} }
break; break;
case 143: case 143:
#line 1021 "dcParser.yxx" #line 1029 "dcParser.yxx"
{ {
yyval.u.subatomic = ST_int8array; yyval.u.subatomic = ST_int8array;
} }
break; break;
case 144: case 144:
#line 1025 "dcParser.yxx" #line 1033 "dcParser.yxx"
{ {
yyval.u.subatomic = ST_int16array; yyval.u.subatomic = ST_int16array;
} }
break; break;
case 145: case 145:
#line 1029 "dcParser.yxx" #line 1037 "dcParser.yxx"
{ {
yyval.u.subatomic = ST_int32array; yyval.u.subatomic = ST_int32array;
} }
break; break;
case 146: case 146:
#line 1033 "dcParser.yxx" #line 1041 "dcParser.yxx"
{ {
yyval.u.subatomic = ST_uint8array; yyval.u.subatomic = ST_uint8array;
} }
break; break;
case 147: case 147:
#line 1037 "dcParser.yxx" #line 1045 "dcParser.yxx"
{ {
yyval.u.subatomic = ST_uint16array; yyval.u.subatomic = ST_uint16array;
} }
break; break;
case 148: case 148:
#line 1041 "dcParser.yxx" #line 1049 "dcParser.yxx"
{ {
yyval.u.subatomic = ST_uint32array; yyval.u.subatomic = ST_uint32array;
} }
break; break;
case 149: case 149:
#line 1045 "dcParser.yxx" #line 1053 "dcParser.yxx"
{ {
yyval.u.subatomic = ST_uint32uint8array; yyval.u.subatomic = ST_uint32uint8array;
} }
break; break;
case 150: case 150:
#line 1049 "dcParser.yxx" #line 1057 "dcParser.yxx"
{ {
yyval.u.subatomic = ST_char; yyval.u.subatomic = ST_char;
} }
break; break;
case 151: case 151:
#line 1056 "dcParser.yxx" #line 1064 "dcParser.yxx"
{ {
yyval.u.s_int = 0; yyval.u.s_int = 0;
} }
break; break;
case 152: case 152:
#line 1060 "dcParser.yxx" #line 1068 "dcParser.yxx"
{ {
yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_required; yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_required;
} }
break; break;
case 153: case 153:
#line 1064 "dcParser.yxx" #line 1072 "dcParser.yxx"
{ {
yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_broadcast; yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_broadcast;
} }
break; break;
case 154: case 154:
#line 1068 "dcParser.yxx" #line 1076 "dcParser.yxx"
{ {
yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_p2p; yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_p2p;
} }
break; break;
case 155: case 155:
#line 1072 "dcParser.yxx" #line 1080 "dcParser.yxx"
{ {
yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_ram; yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_ram;
} }
break; break;
case 156: case 156:
#line 1076 "dcParser.yxx" #line 1084 "dcParser.yxx"
{ {
yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_db; yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_db;
} }
break; break;
case 157: case 157:
#line 1080 "dcParser.yxx" #line 1088 "dcParser.yxx"
{ {
yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_clsend; yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_clsend;
} }
break; break;
case 158: case 158:
#line 1084 "dcParser.yxx" #line 1092 "dcParser.yxx"
{ {
yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_clrecv; yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_clrecv;
} }
break; break;
case 159: case 159:
#line 1088 "dcParser.yxx" #line 1096 "dcParser.yxx"
{ {
yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_ownsend; yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_ownsend;
} }
break; break;
case 160: case 160:
#line 1092 "dcParser.yxx" #line 1100 "dcParser.yxx"
{ {
yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_airecv; yyval.u.s_int = yyvsp[-1].u.s_int | DCAtomicField::F_airecv;
} }
break; break;
case 161: case 161:
#line 1099 "dcParser.yxx" #line 1107 "dcParser.yxx"
{ {
if (yyvsp[0].u.s_int != 0) { if (yyvsp[0].u.s_int != 0) {
yyerror("Server flags are not allowed here."); yyerror("Server flags are not allowed here.");
@ -2235,19 +2243,19 @@ case 161:
} }
break; break;
case 162: case 162:
#line 1109 "dcParser.yxx" #line 1117 "dcParser.yxx"
{ {
current_molecular = new DCMolecularField(yyvsp[-1].str); current_molecular = new DCMolecularField(yyvsp[-1].str);
} }
break; break;
case 163: case 163:
#line 1113 "dcParser.yxx" #line 1121 "dcParser.yxx"
{ {
yyval.u.field = current_molecular; yyval.u.field = current_molecular;
} }
break; break;
case 164: case 164:
#line 1120 "dcParser.yxx" #line 1128 "dcParser.yxx"
{ {
DCField *field = current_class->get_field_by_name(yyvsp[0].str); DCField *field = current_class->get_field_by_name(yyvsp[0].str);
yyval.u.atomic = (DCAtomicField *)NULL; yyval.u.atomic = (DCAtomicField *)NULL;
@ -2262,7 +2270,7 @@ case 164:
} }
break; break;
case 165: case 165:
#line 1136 "dcParser.yxx" #line 1144 "dcParser.yxx"
{ {
if (yyvsp[0].u.atomic != (DCAtomicField *)NULL) { if (yyvsp[0].u.atomic != (DCAtomicField *)NULL) {
current_molecular->add_atomic(yyvsp[0].u.atomic); current_molecular->add_atomic(yyvsp[0].u.atomic);
@ -2270,7 +2278,7 @@ case 165:
} }
break; break;
case 166: case 166:
#line 1142 "dcParser.yxx" #line 1150 "dcParser.yxx"
{ {
if (yyvsp[0].u.atomic != (DCAtomicField *)NULL) { if (yyvsp[0].u.atomic != (DCAtomicField *)NULL) {
current_molecular->add_atomic(yyvsp[0].u.atomic); current_molecular->add_atomic(yyvsp[0].u.atomic);
@ -2283,27 +2291,27 @@ case 166:
} }
break; break;
case 167: case 167:
#line 1156 "dcParser.yxx" #line 1164 "dcParser.yxx"
{ {
yyval.str = ""; yyval.str = "";
} }
break; break;
case 169: case 169:
#line 1164 "dcParser.yxx" #line 1172 "dcParser.yxx"
{ {
yyval.u.dswitch = current_switch; yyval.u.dswitch = current_switch;
current_switch = new DCSwitch(yyvsp[-4].str, yyvsp[-2].u.parameter); current_switch = new DCSwitch(yyvsp[-4].str, yyvsp[-2].u.parameter);
} }
break; break;
case 170: case 170:
#line 1169 "dcParser.yxx" #line 1177 "dcParser.yxx"
{ {
yyval.u.dswitch = current_switch; yyval.u.dswitch = current_switch;
current_switch = (DCSwitch *)yyvsp[-2].u.parameter; current_switch = (DCSwitch *)yyvsp[-2].u.parameter;
} }
break; break;
case 174: case 174:
#line 1181 "dcParser.yxx" #line 1189 "dcParser.yxx"
{ {
if (current_switch->get_num_cases() == 0) { if (current_switch->get_num_cases() == 0) {
yyerror("case declaration required before first element"); yyerror("case declaration required before first element");
@ -2315,7 +2323,7 @@ case 174:
} }
break; break;
case 175: case 175:
#line 1194 "dcParser.yxx" #line 1202 "dcParser.yxx"
{ {
current_packer = &default_packer; current_packer = &default_packer;
current_packer->clear_data(); current_packer->clear_data();
@ -2323,7 +2331,7 @@ case 175:
} }
break; break;
case 176: case 176:
#line 1200 "dcParser.yxx" #line 1208 "dcParser.yxx"
{ {
if (!current_packer->end_pack()) { if (!current_packer->end_pack()) {
yyerror("Invalid value for switch parameter"); yyerror("Invalid value for switch parameter");
@ -2333,13 +2341,13 @@ case 176:
} }
break; break;
case 177: case 177:
#line 1211 "dcParser.yxx" #line 1219 "dcParser.yxx"
{ {
yyval.u.field = yyvsp[-1].u.parameter; yyval.u.field = yyvsp[-1].u.parameter;
} }
break; break;
case 178: case 178:
#line 1215 "dcParser.yxx" #line 1223 "dcParser.yxx"
{ {
yyval.u.field = yyvsp[0].u.parameter; yyval.u.field = yyvsp[0].u.parameter;
} }
@ -2577,4 +2585,4 @@ yyreturn:
#endif #endif
return yyresult; return yyresult;
} }
#line 1223 "dcParser.yxx" #line 1231 "dcParser.yxx"

View File

@ -685,6 +685,10 @@ type_name:
} else { } else {
if (dc_file != (DCFile *)NULL) { if (dc_file != (DCFile *)NULL) {
dc_file->add_thing_to_delete($1); dc_file->add_thing_to_delete($1);
} else {
// This is a memory leak--this happens when we put an anonymous
// struct reference within the string passed to
// DCPackerInterface::check_match(). Maybe it doesn't really matter.
} }
$$ = new DCClassParameter($1); $$ = new DCClassParameter($1);
} }
@ -697,6 +701,10 @@ type_name:
} else { } else {
if (dc_file != (DCFile *)NULL) { if (dc_file != (DCFile *)NULL) {
dc_file->add_thing_to_delete($1); dc_file->add_thing_to_delete($1);
} else {
// This is a memory leak--this happens when we put an anonymous
// switch reference within the string passed to
// DCPackerInterface::check_match(). Maybe it doesn't really matter.
} }
$$ = new DCSwitchParameter($1); $$ = new DCSwitchParameter($1);
} }