static const yytype_int16 yyrline[] =
{
0, 96, 96, 101, 106, 120, 123, 128, 134, 139,
- 145, 152, 158, 169, 175, 180, 184, 188, 194, 200,
- 211, 217, 222, 228, 235, 241, 249, 254, 259, 266,
- 272, 283, 289, 302, 310, 325, 330, 335, 340, 344,
- 348, 352, 356, 362, 368, 379, 385, 388, 391, 396,
- 399, 403, 409, 412, 418, 421, 438, 441, 445, 449,
- 453, 457, 461, 465, 469, 479, 483, 487, 493, 500,
- 504
+ 145, 152, 160, 171, 177, 182, 186, 190, 196, 204,
+ 215, 221, 226, 232, 239, 245, 253, 258, 263, 270,
+ 278, 289, 295, 308, 316, 331, 336, 341, 346, 350,
+ 354, 358, 362, 368, 376, 387, 393, 396, 399, 404,
+ 407, 411, 417, 420, 426, 429, 446, 449, 453, 457,
+ 461, 465, 469, 473, 477, 487, 491, 495, 501, 508,
+ 512
};
#endif
{
((*yyvalp).elms) = new (std::nothrow) tidl::Elements();
if (((*yyvalp).elms) != nullptr) {
- ((*yyvalp).elms)->Add(std::unique_ptr<tidl::Element>((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.elm)));
+ if ((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.elm) != nullptr) {
+ ((*yyvalp).elms)->Add(std::unique_ptr<tidl::Element>((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.elm)));
+ }
}
}
-#line 1343 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1345 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 12:
-#line 158 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 160 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).elms) = (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.elms);
if ((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.elm) != nullptr) {
}
}
}
-#line 1359 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1361 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 13:
-#line 169 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 171 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
ps->ReportError("syntax error in elements declarations.", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-2)].yystate.yyloc).begin.line);
((*yyvalp).elms) = (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.elms);
}
-#line 1368 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1370 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 14:
-#line 175 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 177 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).elm) = new tidl::Element((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.token)->ToString(), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.b_type), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.b_type)->GetComments(),
(YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-2)].yystate.yyloc).begin.line);
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.token);
}
-#line 1378 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1380 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 15:
-#line 180 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 182 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
ps->ReportError("syntax error. \"No identifier\".", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yyloc).begin.line);
((*yyvalp).elm) = NULL;
}
-#line 1387 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1389 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 16:
-#line 184 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 186 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
ps->ReportError("syntax error in element declaration.", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-1)].yystate.yyloc).begin.line);
((*yyvalp).elm) = NULL;
}
-#line 1396 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1398 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 17:
-#line 188 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 190 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
ps->ReportError("syntax error in element declaration.", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yyloc).begin.line);
((*yyvalp).elm) = NULL;
}
-#line 1405 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1407 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 18:
-#line 194 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 196 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).attrs) = new (std::nothrow) tidl::Attributes();
if (((*yyvalp).attrs) != nullptr) {
- ((*yyvalp).attrs)->Add(std::unique_ptr<tidl::Attribute>((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.attr)));
+ if ((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.attr) != nullptr) {
+ ((*yyvalp).attrs)->Add(std::unique_ptr<tidl::Attribute>((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.attr)));
+ }
}
}
-#line 1416 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1420 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 19:
-#line 200 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 204 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).attrs) = (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.attrs);
if ((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.attr) != nullptr) {
}
}
}
-#line 1432 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1436 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 20:
-#line 211 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 215 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
ps->ReportError("syntax error in attributes", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yyloc).begin.line);
((*yyvalp).attrs) = new tidl::Attributes();
}
-#line 1441 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1445 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 21:
-#line 217 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 221 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).attr) = new tidl::Attribute((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.token)->ToString(), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token)->ToString(), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-2)].yystate.yyloc).begin.line);
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.token);
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token);
}
-#line 1451 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1455 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 22:
-#line 222 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 226 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
ps->ReportError("syntax error in attribute declaration.", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-1)].yystate.yyloc).begin.line);
((*yyvalp).attr) = NULL;
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.token);
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token);
}
-#line 1462 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1466 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 23:
-#line 228 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 232 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
ps->ReportError("syntax error in attribute declaration.", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yyloc).begin.line);
((*yyvalp).attr) = NULL;
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.token);
}
-#line 1472 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1476 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 24:
-#line 235 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 239 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).interf) = new tidl::Interface((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.token)->ToString(), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.decls), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.token)->GetComments(),
new tidl::Attributes(), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-4)].yystate.yyloc).begin.line);
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.token);
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.token);
}
-#line 1483 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1487 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 25:
-#line 241 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 245 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).interf) = new tidl::Interface((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.token)->ToString(), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.decls), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-7)].yystate.yysemantics.yysval.token)->GetComments(), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.attrs),
(YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-7)].yystate.yyloc).begin.line);
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.token);
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.token);
}
-#line 1496 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1500 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 26:
-#line 249 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 253 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
ps->ReportError("syntax error. \"No identifier\".", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-3)].yystate.yyloc).begin.line);
((*yyvalp).interf) = NULL;
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.token);
}
-#line 1506 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1510 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 27:
-#line 254 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 258 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
ps->ReportError("syntax error in interface declaration.", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-3)].yystate.yyloc).begin.line);
((*yyvalp).interf) = NULL;
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.token);
}
-#line 1516 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1520 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 28:
-#line 259 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 263 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
ps->ReportError("syntax error in interface declaration.", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-1)].yystate.yyloc).begin.line);
((*yyvalp).interf) = NULL;
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.token);
}
-#line 1526 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1530 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 29:
-#line 266 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 270 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).decls) = new (std::nothrow) tidl::Declarations();
if (((*yyvalp).decls) != nullptr) {
- ((*yyvalp).decls)->Add(std::unique_ptr<tidl::Declaration>((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.decl)));
+ if ((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.decl) != nullptr) {
+ ((*yyvalp).decls)->Add(std::unique_ptr<tidl::Declaration>((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.decl)));
+ }
}
}
-#line 1537 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1543 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 30:
-#line 272 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 278 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).decls) = (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.decls);
if ((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.decl) != nullptr) {
}
}
}
-#line 1553 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1559 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 31:
-#line 283 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 289 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
ps->ReportError("syntax error in methods declaration.", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-1)].yystate.yyloc).begin.line);
((*yyvalp).decls) = (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.decls);
}
-#line 1562 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1568 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 32:
-#line 289 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 295 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
if (ps->IsGroupEnabled()) {
ps->ReportError("Group does not support 'sync' method type", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-5)].yystate.yyloc).begin.line);
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.token);
}
}
-#line 1580 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1586 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 33:
-#line 302 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 308 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).decl) = new tidl::Declaration((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.token)->ToString(),
std::unique_ptr<tidl::BaseType>(new tidl::BaseType("void", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.token)->GetComments())),
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.token);
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.token);
}
-#line 1593 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1599 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 34:
-#line 310 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 316 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
if (ps->IsGroupEnabled()) {
ps->ReportError("Group does not support 'delegate' method type", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-6)].yystate.yyloc).begin.line);
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.token);
}
}
-#line 1613 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1619 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 35:
-#line 325 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 331 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
ps->ReportError("syntax error in method declaration.", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-5)].yystate.yyloc).begin.line);
((*yyvalp).decl) = NULL;
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.token);
}
-#line 1623 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1629 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 36:
-#line 330 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 336 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
ps->ReportError("syntax error in method declaration.", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-5)].yystate.yyloc).begin.line);
((*yyvalp).decl) = NULL;
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.token);
}
-#line 1633 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1639 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 37:
-#line 335 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 341 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
ps->ReportError("syntax error. \"No async\".", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yyloc).begin.line);
((*yyvalp).decl) = NULL;
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.token);
}
-#line 1643 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1649 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 38:
-#line 340 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 346 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
ps->ReportError("syntax error. \"No identifier\".", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-3)].yystate.yyloc).begin.line);
((*yyvalp).decl) = NULL;
}
-#line 1652 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1658 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 39:
-#line 344 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 350 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
ps->ReportError("syntax error. \"No identifier\".", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-4)].yystate.yyloc).begin.line);
((*yyvalp).decl) = NULL;
}
-#line 1661 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1667 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 40:
-#line 348 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 354 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
ps->ReportError("syntax error. \"No identifier\".", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-4)].yystate.yyloc).begin.line);
((*yyvalp).decl) = NULL;
}
-#line 1670 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1676 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 41:
-#line 352 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 358 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
ps->ReportError("syntax error in method declaration.", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-1)].yystate.yyloc).begin.line);
((*yyvalp).decl) = NULL;
}
-#line 1679 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1685 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 42:
-#line 356 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 362 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
ps->ReportError("syntax error in method declaration.", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-1)].yystate.yyloc).begin.line);
((*yyvalp).decl) = NULL;
}
-#line 1688 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1694 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 43:
-#line 362 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 368 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).params) = new tidl::Parameters();
- if ((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.param) != nullptr) {
- ((*yyvalp).params)->Add(std::unique_ptr<tidl::Parameter>((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.param)));
+ if (((*yyvalp).params) != nullptr) {
+ if ((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.param) != nullptr) {
+ ((*yyvalp).params)->Add(std::unique_ptr<tidl::Parameter>((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.param)));
+ }
}
}
-#line 1699 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1707 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 44:
-#line 368 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 376 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).params) = (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.params);
if ((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.param) != nullptr) {
}
}
}
-#line 1715 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1723 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 45:
-#line 379 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 387 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
ps->ReportError("syntax error in parameter list", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yyloc).begin.line);
((*yyvalp).params) = new tidl::Parameters();
}
-#line 1724 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1732 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 46:
-#line 385 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 393 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).direction) = new tidl::Token("in", "");
}
-#line 1732 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1740 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 47:
-#line 388 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 396 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).direction) = new tidl::Token("out", "");
}
-#line 1740 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1748 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 48:
-#line 391 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 399 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).direction) = new tidl::Token("ref", "");
}
-#line 1748 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1756 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 49:
-#line 396 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 404 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).param) = nullptr;
}
-#line 1756 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1764 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 50:
-#line 399 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 407 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).param) = nullptr;
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token);
}
-#line 1765 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1773 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 51:
-#line 403 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 411 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).param) = new tidl::Parameter((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token)->ToString(), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.p_type), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-1)].yystate.yyloc).begin.line);
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token);
}
-#line 1774 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1782 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 52:
-#line 409 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 417 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).p_type) = new tidl::ParameterType((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.b_type));
}
-#line 1782 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1790 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 53:
-#line 412 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 420 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).p_type) = new tidl::ParameterType((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.b_type), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.direction)->ToString());
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.direction);
}
-#line 1791 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1799 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 54:
-#line 418 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 426 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).b_type) = (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.b_type);
}
-#line 1799 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1807 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 55:
-#line 421 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 429 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
if (ps->IsGroupEnabled()) {
ps->ReportError("Group does not support 'file' type", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yyloc).begin.line);
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token);
}
}
-#line 1819 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1827 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 56:
-#line 438 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 446 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).b_type) = (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.b_type);
}
-#line 1827 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1835 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 57:
-#line 441 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 449 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).b_type) = new tidl::BaseType("void", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token)->GetComments());
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token);
}
-#line 1836 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1844 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 58:
-#line 445 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 453 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).b_type) = new tidl::BaseType("char", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token)->GetComments());
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token);
}
-#line 1845 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1853 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 59:
-#line 449 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 457 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).b_type) = new tidl::BaseType("short", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token)->GetComments());
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token);
}
-#line 1854 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1862 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 60:
-#line 453 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 461 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).b_type) = new tidl::BaseType("int", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token)->GetComments());
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token);
}
-#line 1863 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1871 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 61:
-#line 457 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 465 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).b_type) = new tidl::BaseType("long", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token)->GetComments());
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token);
}
-#line 1872 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1880 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 62:
-#line 461 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 469 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).b_type) = new tidl::BaseType("float", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token)->GetComments());
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token);
}
-#line 1881 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1889 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 63:
-#line 465 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 473 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).b_type) = new tidl::BaseType("double", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token)->GetComments());
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token);
}
-#line 1890 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1898 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 64:
-#line 469 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 477 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
if (ps->IsCionEnabled()) {
ps->ReportError("Cion does not support 'bundle' type", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yyloc).begin.line);
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token);
}
}
-#line 1905 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1913 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 65:
-#line 479 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 487 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).b_type) = new tidl::BaseType("string", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token)->GetComments());
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token);
}
-#line 1914 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1922 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 66:
-#line 483 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 491 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).b_type) = new tidl::BaseType("bool", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token)->GetComments());
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token);
}
-#line 1923 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1931 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 67:
-#line 487 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 495 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).b_type) = new tidl::BaseType((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token)->ToString(), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token)->GetComments(), true);
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token);
}
-#line 1932 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1940 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 68:
-#line 493 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 501 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).b_type) = new tidl::BaseType((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.token)->ToString(), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.token)->GetComments());
((*yyvalp).b_type)->SetMetaType((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.b_type));
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.token);
}
-#line 1942 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1950 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 69:
-#line 500 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 508 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).token) = new tidl::Token("list", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token)->GetComments());
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token);
}
-#line 1951 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1959 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
case 70:
-#line 504 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 512 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
{
((*yyvalp).token) = new tidl::Token("array", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token)->GetComments());
delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token);
}
-#line 1960 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1968 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
break;
-#line 1964 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 1972 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
default: break;
}
// User initialization code.
yylloc.initialize ();
-#line 3426 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 3434 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
if (! yyinitGLRStack (yystackp, YYINITDEPTH))
-#line 510 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
+#line 518 "/home/gogo/work/tidl/idlc/ast/tidlc.yy"
#include <ctype.h>
}
-#line 3726 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 3734 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
/*------------------.
| Report an error. |
namespace yy {
-#line 3742 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 3750 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
/// Build a parser object.
parser::parser (tidl::Parser* ps_yyarg)
#endif
} // yy
-#line 3830 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
+#line 3838 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp"
--- /dev/null
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "idlc/gen/cpp_group_body_gen.h"
+
+namespace {
+#include "idlc/gen/cpp_group_body_gen_cb.h"
+}
+
+namespace tidl {
+
+CppGroupBodyGen::CppGroupBodyGen(std::shared_ptr<Document> doc)
+ : CppGeneratorBase(doc) {}
+
+void CppGroupBodyGen::OnInitGen(std::ofstream& stream) {
+ std::string key(".cc");
+ std::string header_file = FileName;
+ std::size_t found = header_file.rfind(key);
+ if (found != std::string::npos)
+ header_file.replace(found, key.length(), ".h");
+
+ GenVersion(stream);
+
+ ReplaceAll(CB_HEADER)
+ .Change("<HEADER_FILE>", header_file)
+ .Out(stream);
+
+ GenLogTag(stream, "RPC_PORT_GROUP");
+ GenLogDefinition(stream);
+ GenVersionDefinition(stream);
+ stream << NLine(1);
+ GenNamespace(stream);
+}
+
+void CppGroupBodyGen::OnFiniGen(std::ofstream& stream) {
+}
+
+void CppGroupBodyGen::GenNamespace(std::ofstream& stream) {
+ stream << "namespace rpc_port ";
+ GenBrace(stream, 0, [&]() {
+ stream << "namespace " << GetFileNamespace() << " ";
+ GenBrace(stream, 0, [&]() {
+ stream << NLine(1);
+ GenStructuresForBody(stream);
+ stream << "namespace group ";
+ GenBrace(stream, 0, [&]() {
+ GenPrototype(stream);
+ GenSerializer(stream);
+ GenDeSerializer(stream);
+ GenListSerializer(stream);
+ GenInterfaces(stream);
+ }, false, false);
+ stream << " // namespace group" + NLine(1);
+ }, false, false);
+ stream << " // namespace " + GetFileNamespace() + NLine(1);
+ }, false, false);
+ stream << " // namespace rpc_port" + NLine(1);
+}
+
+void CppGroupBodyGen::GenInterfaces(std::ofstream& stream) {
+ for (auto& i : GetDocument().GetBlocks()) {
+ if (i->GetType() != Block::TYPE_INTERFACE)
+ continue;
+ Interface& iface = static_cast<Interface&>(*i);
+ GenInterface(stream, iface);
+ }
+}
+
+void CppGroupBodyGen::GenInterface(std::ofstream& stream,
+ const Interface& iface) {
+ GenConstructor(stream, iface);
+ GenDestructor(stream, iface);
+ GenHelperMethods(stream, iface);
+ GenMethods(stream, iface);
+}
+
+void CppGroupBodyGen::GenConstructor(std::ofstream& stream,
+ const Interface& iface) {
+ ReplaceAll(CB_INTERFACE_CTOR)
+ .Change("<CLS_NAME>", iface.GetID())
+ .Out(stream);
+}
+
+void CppGroupBodyGen::GenDestructor(std::ofstream& stream,
+ const Interface& iface) {
+ ReplaceAll(CB_INTERFACE_DTOR)
+ .Change("<CLS_NAME>", iface.GetID())
+ .Out(stream);
+}
+
+std::string CppGroupBodyGen::GetDeserializer(const Interface& iface) {
+ std::string str;
+
+ for (const auto& i : iface.GetDeclarations()) {
+ str += ReplaceAll(CB_METHOD_DISPATCHER)
+ .Change("<METHOD_ID>", i->GetID())
+ .Change("<DISPATCH>", GetDispatcher(*i));
+ }
+
+ return str;
+}
+
+std::string CppGroupBodyGen::GetDispatcher(const Declaration& decl) {
+ std::string str;
+ int cnt = 1;
+
+ // Deserialize
+ for (const auto& i : decl.GetParameters()) {
+ if (i->GetParameterType().GetDirection() == ParameterType::Direction::OUT) {
+ cnt++;
+ continue;
+ }
+
+ std::string v = "param" + std::to_string(cnt);
+ std::string c = ConvertTypeToDeserializer(
+ i->GetParameterType().GetBaseType(), v, "p");
+ str += AddIndent(TAB_SIZE * 3, c);
+ cnt++;
+ }
+
+ // Invoke
+ cnt = 1;
+ std::string m;
+
+ m += "ptr->On" + decl.GetID() + "(";
+ for (const auto& i : decl.GetParameters()) {
+ (void)i;
+ if (cnt != 1) {
+ m += ", ";
+ }
+
+ m += "param" + std::to_string(cnt);
+ cnt++;
+ }
+
+ m += ");\n";
+ str += AddIndent(TAB_SIZE * 3, m);
+
+ return str;
+}
+
+void CppGroupBodyGen::GenHelperMethods(std::ofstream& stream,
+ const Interface& iface) {
+ ReplaceAll(CB_GROUP_HELPER_METHODS)
+ .Change("<CLS_NAME>", iface.GetID())
+ .Change("<DESERIALIZE>", GetDeserializer(iface))
+ .Out(stream);
+}
+
+void CppGroupBodyGen::GenMethods(std::ofstream& stream,
+ const Interface& iface) {
+ auto& decls = iface.GetDeclarations();
+
+ for (const auto& i : decls) {
+ GenInvocation(stream, iface, *i);
+ }
+}
+
+void CppGroupBodyGen::GenInvocation(std::ofstream& stream,
+ const Interface& iface, const Declaration& decl) {
+ ReplaceAll(CB_INVOCATION)
+ .Change("<RET_TYPE>", ConvertTypeToString(decl.GetType()))
+ .Change("<IFACE>", iface.GetID())
+ .Change("<METHOD>", decl.GetID())
+ .Change("<PARAMS>", GetParameters(decl.GetParameters()))
+ .Change("<SERIALIZE>", [&]() {
+ std::string m;
+ std::string ret;
+ for (const auto& i : decl.GetParameters()) {
+ auto& pt = i->GetParameterType();
+ if (pt.GetDirection() == ParameterType::Direction::OUT)
+ continue;
+ m += GenPrivateSharingRequest(pt.GetBaseType(), i->GetID());
+ m += ConvertTypeToSerializer(pt.GetBaseType(), i->GetID(), "p");
+ }
+
+ ret = AddIndent(TAB_SIZE, m) + NLine(1);
+ return ret;
+ })
+ .Out(stream);
+}
+
+} // namespace tidl