Explorar o código

comment memory leak

David Rose %!s(int64=21) %!d(string=hai) anos
pai
achega
316e4e29a1
Modificáronse 2 ficheiros con 108 adicións e 92 borrados
  1. 100 92
      direct/src/dcparser/dcParser.cxx.prebuilt
  2. 8 0
      direct/src/dcparser/dcParser.yxx

+ 100 - 92
direct/src/dcparser/dcParser.cxx.prebuilt

@@ -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,
-     756,   761,   768,   775,   781,   789,   791,   801,   807,   821,
-     827,   837,   840,   851,   855,   859,   864,   868,   871,   881,
-     885,   890,   894,   898,   902,   906,   906,   914,   914,   922,
-     922,   930,   936,   942,   948,   956,   958,   961,   963,   966,
-     968,   971,   976,   980,   984,   988,   992,   996,  1000,  1004,
-    1008,  1012,  1016,  1020,  1024,  1028,  1032,  1036,  1040,  1044,
-    1048,  1054,  1059,  1063,  1067,  1071,  1075,  1079,  1083,  1087,
-    1091,  1097,  1107,  1107,  1118,  1134,  1141,  1154,  1159,  1162,
-    1162,  1176,  1178,  1179,  1180,  1192,  1192,  1209,  1214,  1220
+     645,   680,   696,   714,   719,   726,   733,   742,   748,   754,
+     764,   769,   776,   783,   789,   797,   799,   809,   815,   829,
+     835,   845,   848,   859,   863,   867,   872,   876,   879,   889,
+     893,   898,   902,   906,   910,   914,   914,   922,   922,   930,
+     930,   938,   944,   950,   956,   964,   966,   969,   971,   974,
+     976,   979,   984,   988,   992,   996,  1000,  1004,  1008,  1012,
+    1016,  1020,  1024,  1028,  1032,  1036,  1040,  1044,  1048,  1052,
+    1056,  1062,  1067,  1071,  1075,  1079,  1083,  1087,  1091,  1095,
+    1099,  1105,  1115,  1115,  1126,  1142,  1149,  1162,  1167,  1170,
+    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"
+#line 915 "dcParser.yxx"
 {
 {
   current_packer->push();
   current_packer->push();
 }
 }
     break;
     break;
 case 116:
 case 116:
-#line 911 "dcParser.yxx"
+#line 919 "dcParser.yxx"
 {
 {
   current_packer->pop();
   current_packer->pop();
 }
 }
     break;
     break;
 case 117:
 case 117:
-#line 915 "dcParser.yxx"
+#line 923 "dcParser.yxx"
 {
 {
   current_packer->push();
   current_packer->push();
 }
 }
     break;
     break;
 case 118:
 case 118:
-#line 919 "dcParser.yxx"
+#line 927 "dcParser.yxx"
 {
 {
   current_packer->pop();
   current_packer->pop();
 }
 }
     break;
     break;
 case 119:
 case 119:
-#line 923 "dcParser.yxx"
+#line 931 "dcParser.yxx"
 {
 {
   current_packer->push();
   current_packer->push();
 }
 }
     break;
     break;
 case 120:
 case 120:
-#line 927 "dcParser.yxx"
+#line 935 "dcParser.yxx"
 {
 {
   current_packer->pop();
   current_packer->pop();
 }
 }
     break;
     break;
 case 121:
 case 121:
-#line 931 "dcParser.yxx"
+#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"

+ 8 - 0
direct/src/dcparser/dcParser.yxx

@@ -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);
   }
   }