Change constructor to make sure the ownership 51/269251/1
authorjh9216.park <jh9216.park@samsung.com>
Wed, 12 Jan 2022 04:57:00 +0000 (23:57 -0500)
committerjh9216.park <jh9216.park@samsung.com>
Wed, 12 Jan 2022 04:57:00 +0000 (23:57 -0500)
- 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 <jh9216.park@samsung.com>
idlc/ast/declaration.cc
idlc/ast/declaration.h
idlc/ast/tidlc.yy
idlc/ast/tidlc_y.cpp
tests/unit_tests/declaration_unittest.cc
tests/unit_tests/interface_unittest.cc

index c3b4352..627af67 100644 (file)
 
 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<BaseType> ret_type,
+    std::unique_ptr<Parameters> 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) {}
index 47ff701..e8ecb25 100644 (file)
@@ -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<BaseType> ret_type,
+      std::unique_ptr<Parameters> params, std::string comments, unsigned line,
+      MethodType mtype = MethodType::SYNC);
 
   const std::string& GetID() const;
   const BaseType& GetType() const;
index 25c17fd..cfb1caf 100644 (file)
@@ -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<tidl::BaseType>($1),
+          std::unique_ptr<tidl::Parameters>($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<tidl::BaseType>(new tidl::BaseType("void", $1->GetComments())),
+        std::unique_ptr<tidl::Parameters>($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<tidl::BaseType>(new tidl::BaseType("void", $1->GetComments())),
+          std::unique_ptr<tidl::Parameters>($4), $1->GetComments(),
+          @1.begin.line, tidl::Declaration::MethodType::DELEGATE);
       delete $1;
       delete $2;
     }
index 0fe462f..4df31eb 100644 (file)
@@ -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<tidl::BaseType>((YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.b_type)),
+          std::unique_ptr<tidl::Parameters>((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<tidl::BaseType>(new tidl::BaseType("void", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.token)->GetComments())),
+        std::unique_ptr<tidl::Parameters>((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<tidl::BaseType>(new tidl::BaseType("void", (YY_CAST (yyGLRStackItem const *, yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.token)->GetComments())),
+          std::unique_ptr<tidl::Parameters>((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<tidl::Parameter>((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 <ctype.h>
@@ -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"
index fe9e0ec..c7710f8 100644 (file)
 
 class DeclarationTest : public testing::Test {
  public:
-  tidl::Parameters* params;
+  std::unique_ptr<tidl::Parameters> params;
 
   virtual void SetUp() {
-    params = new tidl::Parameters();
+    params = std::unique_ptr<tidl::Parameters>(new tidl::Parameters());
     EXPECT_NE(params, nullptr);
     params->Add(std::unique_ptr<tidl::Parameter>(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<tidl::BaseType>(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<tidl::BaseType>(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<tidl::BaseType>(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<tidl::BaseType>(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<tidl::BaseType>(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<tidl::BaseType>(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<tidl::BaseType>(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<tidl::Parameter>(new tidl::Parameter("test2",
         new tidl::ParameterType(new tidl::BaseType("int", "")), __LINE__)));
     auto decl = std::unique_ptr<tidl::Declaration>(new tidl::Declaration(
-        "test", new tidl::BaseType("int", ""), params, "", __LINE__));
+        "test",
+        std::unique_ptr<tidl::BaseType>(new tidl::BaseType("int", "")),
+        std::unique_ptr<tidl::Parameters>(params), "", __LINE__));
     EXPECT_NE(decl, nullptr);
     return decl;
   }
@@ -144,6 +154,7 @@ TEST_F(DeclarationsTest, Declarations_Exist) {
   testParams->Add(std::unique_ptr<tidl::Parameter>(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<tidl::BaseType>(new tidl::BaseType("int", "")),
+        std::unique_ptr<tidl::Parameters>(testParams), "", __LINE__);
   EXPECT_EQ(decls.Exist(testDecl), true);
 }
index c2e2878..da85343 100644 (file)
@@ -28,11 +28,12 @@ class InterfaceTest : public testing::Test {
     tidl::Parameters* params = new tidl::Parameters();
     EXPECT_NE(params, nullptr);
     params->Add(std::unique_ptr<tidl::Parameter>(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<tidl::Parameter>(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<tidl::BaseType>(new tidl::BaseType("int", "")),
+        std::unique_ptr<tidl::Parameters>(params), "", __LINE__);
     EXPECT_NE(decl, nullptr);
     decls = new tidl::Declarations();
     EXPECT_NE(decls, nullptr);