From 2444649676b00189ddbddd0e36ee84e35f93d5e2 Mon Sep 17 00:00:00 2001 From: "jh9216.park" Date: Tue, 11 Jan 2022 23:57:00 -0500 Subject: [PATCH] Change constructor to make sure the ownership - If the input parameter is pointer type, it is difficult to know which side to release from - As std::unique_ptr<> is movable but not copiable, the ownership can be moved clearly Change-Id: I9cceb1274943f961e27a2d3798b7355c51448211 Signed-off-by: jh9216.park --- idlc/ast/declaration.cc | 10 +- idlc/ast/declaration.h | 6 +- idlc/ast/tidlc.yy | 15 ++- idlc/ast/tidlc_y.cpp | 220 +++++++++++++++++-------------- tests/unit_tests/declaration_unittest.cc | 47 ++++--- tests/unit_tests/interface_unittest.cc | 7 +- 6 files changed, 170 insertions(+), 135 deletions(-) diff --git a/idlc/ast/declaration.cc b/idlc/ast/declaration.cc index c3b4352..627af67 100644 --- a/idlc/ast/declaration.cc +++ b/idlc/ast/declaration.cc @@ -22,12 +22,12 @@ namespace tidl { -Declaration::Declaration(std::string id, BaseType* ret_type, - Parameters* params, std::string comments, - unsigned line, MethodType mtype) +Declaration::Declaration(std::string id, std::unique_ptr ret_type, + std::unique_ptr params, std::string comments, unsigned line, + MethodType mtype) : id_(std::move(id)), - ret_type_(ret_type), - params_(params), + ret_type_(std::move(ret_type)), + params_(std::move(params)), comments_(std::move(comments)), line_(line), mtype_(mtype) {} diff --git a/idlc/ast/declaration.h b/idlc/ast/declaration.h index 47ff701..e8ecb25 100644 --- a/idlc/ast/declaration.h +++ b/idlc/ast/declaration.h @@ -34,9 +34,9 @@ class Declaration { DELEGATE }; - Declaration(std::string id, BaseType* ret_type, Parameters* params, - std::string comments, unsigned line, - MethodType mtype = MethodType::SYNC); + Declaration(std::string id, std::unique_ptr ret_type, + std::unique_ptr params, std::string comments, unsigned line, + MethodType mtype = MethodType::SYNC); const std::string& GetID() const; const BaseType& GetType() const; diff --git a/idlc/ast/tidlc.yy b/idlc/ast/tidlc.yy index 25c17fd..cfb1caf 100644 --- a/idlc/ast/tidlc.yy +++ b/idlc/ast/tidlc.yy @@ -292,15 +292,18 @@ declaration: base_type T_ID T_LEFT parameter_list T_RIGHT T_SEMICOLON { $$ = NULL; delete $2; } else { - $$ = new tidl::Declaration($2->ToString(), $1, $4, $1->GetComments(), + $$ = new tidl::Declaration($2->ToString(), + std::unique_ptr($1), + std::unique_ptr($4), $1->GetComments(), @1.begin.line, tidl::Declaration::MethodType::SYNC); delete $2; } } | T_VOID T_ID T_LEFT parameter_list T_RIGHT T_ASYNC T_SEMICOLON { $$ = new tidl::Declaration($2->ToString(), - new tidl::BaseType("void", $1->GetComments()), $4, - $1->GetComments(), @1.begin.line, tidl::Declaration::MethodType::ASYNC); + std::unique_ptr(new tidl::BaseType("void", $1->GetComments())), + std::unique_ptr($4), $1->GetComments(), + @1.begin.line, tidl::Declaration::MethodType::ASYNC); delete $1; delete $2; } @@ -312,9 +315,9 @@ declaration: base_type T_ID T_LEFT parameter_list T_RIGHT T_SEMICOLON { delete $2; } else { $$ = new tidl::Declaration($2->ToString(), - new tidl::BaseType("void", $1->GetComments()), $4, - $1->GetComments(), @1.begin.line, - tidl::Declaration::MethodType::DELEGATE); + std::unique_ptr(new tidl::BaseType("void", $1->GetComments())), + std::unique_ptr($4), $1->GetComments(), + @1.begin.line, tidl::Declaration::MethodType::DELEGATE); delete $1; delete $2; } diff --git a/idlc/ast/tidlc_y.cpp b/idlc/ast/tidlc_y.cpp index 0fe462f..4df31eb 100644 --- a/idlc/ast/tidlc_y.cpp +++ b/idlc/ast/tidlc_y.cpp @@ -387,11 +387,11 @@ 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, 294, 301, 309, 314, 319, 324, 328, - 332, 336, 340, 346, 352, 363, 369, 372, 375, 380, - 383, 387, 393, 396, 402, 405, 418, 421, 425, 429, - 433, 437, 441, 445, 449, 459, 463, 467, 473, 480, - 484 + 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 }; #endif @@ -1564,126 +1564,142 @@ yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp, case 32: #line 289 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" { - ((*yyvalp).decl) = new tidl::Declaration((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.token)->ToString(), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.b_type), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.params), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.b_type)->GetComments(), - (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-5)].yystate.yyloc).begin.line, tidl::Declaration::MethodType::SYNC); - delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.token); + if (ps->IsGroupEnabled()) { + ps->ReportError("Group does not support 'sync' method type", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-5)].yystate.yyloc).begin.line); + ((*yyvalp).decl) = NULL; + delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.token); + } else { + ((*yyvalp).decl) = new tidl::Declaration((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.token)->ToString(), + std::unique_ptr((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.b_type)), + std::unique_ptr((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.params)), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.b_type)->GetComments(), + (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-5)].yystate.yyloc).begin.line, tidl::Declaration::MethodType::SYNC); + delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.token); + } } -#line 1572 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1580 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 33: -#line 294 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 302 "/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(), - new tidl::BaseType("void", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.token)->GetComments()), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.params), - (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.token)->GetComments(), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-6)].yystate.yyloc).begin.line, tidl::Declaration::MethodType::ASYNC); + std::unique_ptr(new tidl::BaseType("void", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.token)->GetComments())), + std::unique_ptr((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.params)), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.token)->GetComments(), + (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-6)].yystate.yyloc).begin.line, tidl::Declaration::MethodType::ASYNC); 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 1584 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1593 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 34: -#line 301 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 310 "/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(), - new tidl::BaseType("void", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.token)->GetComments()), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.params), - (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.token)->GetComments(), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-6)].yystate.yyloc).begin.line, - tidl::Declaration::MethodType::DELEGATE); - delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.token); - delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.token); + if (ps->IsGroupEnabled()) { + ps->ReportError("Group does not support 'delegate' method type", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-6)].yystate.yyloc).begin.line); + ((*yyvalp).decl) = NULL; + delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.token); + delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.token); + } else { + ((*yyvalp).decl) = new tidl::Declaration((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.token)->ToString(), + std::unique_ptr(new tidl::BaseType("void", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.token)->GetComments())), + std::unique_ptr((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.params)), (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.token)->GetComments(), + (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-6)].yystate.yyloc).begin.line, tidl::Declaration::MethodType::DELEGATE); + 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 1597 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1613 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 35: -#line 309 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 325 "/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 1607 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1623 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 36: -#line 314 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 330 "/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 1617 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1633 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 37: -#line 319 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 335 "/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 1627 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1643 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 38: -#line 324 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 340 "/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 1636 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1652 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 39: -#line 328 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 344 "/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 1645 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1661 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 40: -#line 332 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 348 "/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 1654 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1670 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 41: -#line 336 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 352 "/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 1663 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1679 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 42: -#line 340 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 356 "/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 1672 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1688 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 43: -#line 346 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 362 "/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((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.param))); } } -#line 1683 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1699 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 44: -#line 352 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 368 "/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) { @@ -1695,97 +1711,101 @@ yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp, } } } -#line 1699 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1715 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 45: -#line 363 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 379 "/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 1708 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1724 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 46: -#line 369 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 385 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" { ((*yyvalp).direction) = new tidl::Token("in", ""); } -#line 1716 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1732 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 47: -#line 372 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 388 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" { ((*yyvalp).direction) = new tidl::Token("out", ""); } -#line 1724 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1740 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 48: -#line 375 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 391 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" { ((*yyvalp).direction) = new tidl::Token("ref", ""); } -#line 1732 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1748 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 49: -#line 380 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 396 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" { ((*yyvalp).param) = nullptr; } -#line 1740 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1756 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 50: -#line 383 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 399 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" { ((*yyvalp).param) = nullptr; delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token); } -#line 1749 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1765 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 51: -#line 387 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 403 "/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 1758 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1774 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 52: -#line 393 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 409 "/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 1766 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1782 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 53: -#line 396 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 412 "/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 1775 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1791 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 54: -#line 402 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 418 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" { ((*yyvalp).b_type) = (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.b_type); } -#line 1783 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1799 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 55: -#line 405 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 421 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" { - if (!ps->IsBetaEnabled()) { + if (ps->IsGroupEnabled()) { + ps->ReportError("Group does not support 'file' type", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yyloc).begin.line); + ((*yyvalp).b_type) = NULL; + delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token); + } else if (!ps->IsBetaEnabled()) { ps->ReportError("syntax error. \"No identifier\".", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yyloc).begin.line); ps->ReportError("try to use beta version (-b option).", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yyloc).begin.line); ((*yyvalp).b_type) = NULL; @@ -1795,82 +1815,82 @@ yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp, delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token); } } -#line 1799 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1819 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 56: -#line 418 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 438 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" { ((*yyvalp).b_type) = (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.b_type); } -#line 1807 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1827 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 57: -#line 421 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 441 "/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 1816 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1836 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 58: -#line 425 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 445 "/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 1825 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1845 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 59: -#line 429 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 449 "/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 1834 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1854 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 60: -#line 433 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 453 "/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 1843 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1863 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 61: -#line 437 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 457 "/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 1852 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1872 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 62: -#line 441 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 461 "/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 1861 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1881 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 63: -#line 445 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 465 "/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 1870 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1890 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 64: -#line 449 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 469 "/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); @@ -1881,66 +1901,66 @@ yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp, delete (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.token); } } -#line 1885 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1905 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 65: -#line 459 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 479 "/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 1894 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1914 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 66: -#line 463 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 483 "/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 1903 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1923 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 67: -#line 467 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 487 "/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 1912 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1932 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 68: -#line 473 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 493 "/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 1922 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1942 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 69: -#line 480 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 500 "/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 1931 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1951 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; case 70: -#line 484 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 504 "/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 1940 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1960 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" break; -#line 1944 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 1964 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" default: break; } @@ -3402,7 +3422,7 @@ yyparse (yy::parser& yyparser, tidl::Parser* ps) // User initialization code. yylloc.initialize (); -#line 3406 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 3426 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" if (! yyinitGLRStack (yystackp, YYINITDEPTH)) @@ -3690,7 +3710,7 @@ yypdumpstack (yyGLRStack* yystackp) -#line 490 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" +#line 510 "/home/gogo/work/tidl/idlc/ast/tidlc.yy" #include @@ -3702,7 +3722,7 @@ void yy::parser::error(const yy::parser::location_type& l, } -#line 3706 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 3726 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" /*------------------. | Report an error. | @@ -3718,7 +3738,7 @@ yyerror (const yy::parser::location_type *yylocationp, yy::parser& yyparser, tid namespace yy { -#line 3722 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 3742 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" /// Build a parser object. parser::parser (tidl::Parser* ps_yyarg) @@ -3806,4 +3826,4 @@ namespace yy { #endif } // yy -#line 3810 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" +#line 3830 "/home/gogo/work/tidl/idlc/ast/tidlc_y.cpp" diff --git a/tests/unit_tests/declaration_unittest.cc b/tests/unit_tests/declaration_unittest.cc index fe9e0ec..c7710f8 100644 --- a/tests/unit_tests/declaration_unittest.cc +++ b/tests/unit_tests/declaration_unittest.cc @@ -24,10 +24,10 @@ class DeclarationTest : public testing::Test { public: - tidl::Parameters* params; + std::unique_ptr params; virtual void SetUp() { - params = new tidl::Parameters(); + params = std::unique_ptr(new tidl::Parameters()); EXPECT_NE(params, nullptr); params->Add(std::unique_ptr(new tidl::Parameter("test1", new tidl::ParameterType(new tidl::BaseType("int", "")), __LINE__))); @@ -38,25 +38,29 @@ class DeclarationTest : public testing::Test { }; TEST_F(DeclarationTest, Declaration_Constructor) { - tidl::Declaration decl("test", new tidl::BaseType("int", ""), params, "", - __LINE__); + tidl::Declaration decl("test", + std::unique_ptr(new tidl::BaseType("int", "")), + std::move(params), "", __LINE__); } TEST_F(DeclarationTest, Declaration_GetID) { - tidl::Declaration decl("test", new tidl::BaseType("int", ""), params, "", - __LINE__); + tidl::Declaration decl("test", + std::unique_ptr(new tidl::BaseType("int", "")), + std::move(params), "", __LINE__); EXPECT_EQ(decl.GetID(), "test"); } TEST_F(DeclarationTest, Declaration_GetType) { - tidl::Declaration decl("test", new tidl::BaseType("int", ""), params, "", - __LINE__); + tidl::Declaration decl("test", + std::unique_ptr(new tidl::BaseType("int", "")), + std::move(params), "", __LINE__); EXPECT_EQ(decl.GetType().ToString(), "int"); } TEST_F(DeclarationTest, Declaration_GetParameters) { - tidl::Declaration decl("test", new tidl::BaseType("int", ""), params, "", - __LINE__); + tidl::Declaration decl("test", + std::unique_ptr(new tidl::BaseType("int", "")), + std::move(params), "", __LINE__); int count = 0; for (const auto& param : decl.GetParameters()) { @@ -71,22 +75,26 @@ TEST_F(DeclarationTest, Declaration_GetParameters) { } TEST_F(DeclarationTest, Declaration_GetMethodType) { - tidl::Declaration decl("test", new tidl::BaseType("int", ""), params, "", - __LINE__, tidl::Declaration::MethodType::DELEGATE); + tidl::Declaration decl("test", + std::unique_ptr(new tidl::BaseType("int", "")), + std::move(params), "", __LINE__, + tidl::Declaration::MethodType::DELEGATE); EXPECT_EQ(decl.GetMethodType(), tidl::Declaration::MethodType::DELEGATE); } TEST_F(DeclarationTest, Declaration_GetComments) { std::string comments = "Test Declaration"; - tidl::Declaration decl("test", new tidl::BaseType("int", ""), params, - comments, __LINE__); + tidl::Declaration decl("test", + std::unique_ptr(new tidl::BaseType("int", "")), + std::move(params), comments, __LINE__); EXPECT_EQ(decl.GetComments(), comments); } TEST_F(DeclarationTest, Declaration_GetLine) { unsigned line = __LINE__; - tidl::Declaration decl("test", new tidl::BaseType("int", ""), params, "", - line); + tidl::Declaration decl("test", + std::unique_ptr(new tidl::BaseType("int", "")), + std::move(params), "", line); EXPECT_EQ(decl.GetLine(), line); } @@ -102,7 +110,9 @@ class DeclarationsTest : public testing::Test { params->Add(std::unique_ptr(new tidl::Parameter("test2", new tidl::ParameterType(new tidl::BaseType("int", "")), __LINE__))); auto decl = std::unique_ptr(new tidl::Declaration( - "test", new tidl::BaseType("int", ""), params, "", __LINE__)); + "test", + std::unique_ptr(new tidl::BaseType("int", "")), + std::unique_ptr(params), "", __LINE__)); EXPECT_NE(decl, nullptr); return decl; } @@ -144,6 +154,7 @@ TEST_F(DeclarationsTest, Declarations_Exist) { testParams->Add(std::unique_ptr(new tidl::Parameter("test1", new tidl::ParameterType(new tidl::BaseType("int", "")), __LINE__))); tidl::Declaration testDecl("test", - new tidl::BaseType("int", ""), testParams, "", __LINE__); + std::unique_ptr(new tidl::BaseType("int", "")), + std::unique_ptr(testParams), "", __LINE__); EXPECT_EQ(decls.Exist(testDecl), true); } diff --git a/tests/unit_tests/interface_unittest.cc b/tests/unit_tests/interface_unittest.cc index c2e2878..da85343 100644 --- a/tests/unit_tests/interface_unittest.cc +++ b/tests/unit_tests/interface_unittest.cc @@ -28,11 +28,12 @@ class InterfaceTest : public testing::Test { tidl::Parameters* params = new tidl::Parameters(); EXPECT_NE(params, nullptr); params->Add(std::unique_ptr(new tidl::Parameter("test1", - new tidl::ParameterType(new tidl::BaseType("int", "")), __LINE__))); + new tidl::ParameterType(new tidl::BaseType("int", "")), __LINE__))); params->Add(std::unique_ptr(new tidl::Parameter("test2", - new tidl::ParameterType(new tidl::BaseType("int", "")), __LINE__))); + new tidl::ParameterType(new tidl::BaseType("int", "")), __LINE__))); tidl::Declaration* decl = new tidl::Declaration("test", - new tidl::BaseType("int", ""), params, "", __LINE__); + std::unique_ptr(new tidl::BaseType("int", "")), + std::unique_ptr(params), "", __LINE__); EXPECT_NE(decl, nullptr); decls = new tidl::Declarations(); EXPECT_NE(decls, nullptr); -- 2.7.4