Constant init prototype working master
authorEbersold <aebersol@n3150.home>
Tue, 12 Apr 2022 21:24:32 +0000 (23:24 +0200)
committerEbersold <aebersol@n3150.home>
Tue, 12 Apr 2022 21:24:32 +0000 (23:24 +0200)
libgen/gen_lpcm_aac.cpp
libparser/lds.l
libparser/lds.y
libparser/lds_parser.cpp
libparser/lds_parser.h

index e831bbeb704ab5090d3b758ca8790c5c2720d10f..bddf9c5b3e3918624c86c55a49ddac016a5201ab 100644 (file)
@@ -88,8 +88,10 @@ void GenAac::genType(std::ostream &os,const aeb::lds::Type *t)
   {
     switch (t->getTypeID())
     {
   {
     switch (t->getTypeID())
     {
-      case aeb::lds::Type::IntegerTyID : t->printNative(os); break;
       case aeb::lds::Type::ArrayTyID  : t->printNative(os); break;
       case aeb::lds::Type::ArrayTyID  : t->printNative(os); break;
+        os<<"char *";
+      break;
+      case aeb::lds::Type::IntegerTyID : t->printNative(os); break;
       default:
         os<<"long";
     }
       default:
         os<<"long";
     }
@@ -399,6 +401,24 @@ void GenAac::gen_class_impl_ctors(std::ostream &os)
             ; vit != m_Variables.end()
             ; ++vit)
     {
             ; vit != m_Variables.end()
             ; ++vit)
     {
+      aeb::lds::GlobalVariable *V = vit->second;
+      if (V->getInitializer() != NULL )
+      {
+        switch (V->getType()->getTypeID())
+        {
+          case aeb::lds::Type::ArrayTyID  : 
+            os<<"  m_Globals["<<vit->first<<"].set_String(\""<<V->getInitializer()->getName().c_str()<<"\");\n";
+          break;
+          case aeb::lds::Type::IntegerTyID :
+          {
+            aeb::lds::ConstantInt *c = reinterpret_cast<aeb::lds::ConstantInt *>(V->getInitializer()); 
+            os<<"  m_Globals["<<vit->first<<"].set_Integer("<<c->getValue()<<");\n";
+          }
+          break;
+          default:
+            os<<"  m_Globals["<<vit->first<<"].set_Integer("<<V->getInitializer()<<");\n";
+        }
+      }
     }
     os<<"}"<<std::endl;
 }
     }
     os<<"}"<<std::endl;
 }
@@ -599,6 +619,11 @@ void GenAac::epilog()
        ; ait  != m_Variables.end()
        ; ++ait , ++counter ) 
   {
        ; ait  != m_Variables.end()
        ; ++ait , ++counter ) 
   {
+    aeb::lds::GlobalVariable *V = ait->second;
+    if (V->isConstant())
+    {
+      act<<"/* "<<ait->first<<" "<<counter<<" is constant */\n"; 
+    }
     act<<"#define "<<ait->first<<" "<<counter<<"\n"; 
   }
   act<<"#endif\n";
     act<<"#define "<<ait->first<<" "<<counter<<"\n"; 
   }
   act<<"#endif\n";
index ab0641544274b8ea9d7db24c77c70ca30f9f3ef5..5c32158eb8b50421510de748e344bb3845346ca2 100644 (file)
@@ -43,16 +43,20 @@ char *string_begin;
        yylval->expr = new AST::StringLiteral(yytext,NULL);    \
        return x;                                              \
      }                                      
        yylval->expr = new AST::StringLiteral(yytext,NULL);    \
        return x;                                              \
      }                                      
-#define CHAINE_TOK(x) { AST::StringLiteral *s = new AST::StringLiteral(string_begin,NULL); \
-                        yylval->expr = s;                                                  \
+#define CHAINE_TOK(x) { char k = *(yytext ); *(yytext )='\0';       \
+                        AST::StringLiteral *s = new AST::StringLiteral(string_begin,NULL); \
+                        yylval->expr  = s;                                                 \
+                        *(yytext )    = k;                                                 \
                         s->isConstantArray = true; return x; }
 
 #define NUM_TOK(x) { yylval->num = atol(yytext); return x; }
 #else
 #define TOK(x) { return x; }
 #define STR_TOK(x) { yylval->expr = new AST::StringLiteral(yytext,NULL); return x; }
                         s->isConstantArray = true; return x; }
 
 #define NUM_TOK(x) { yylval->num = atol(yytext); return x; }
 #else
 #define TOK(x) { return x; }
 #define STR_TOK(x) { yylval->expr = new AST::StringLiteral(yytext,NULL); return x; }
-#define CHAINE_TOK(x) { AST::StringLiteral *s = new AST::StringLiteral(string_begin,NULL); \
+#define CHAINE_TOK(x) { char k = *(yytext) ; *(yytext) = '\0'; \
+                        AST::StringLiteral *s = new AST::StringLiteral(string_begin,NULL); \
                         yylval->expr = s;                                                  \
                         yylval->expr = s;                                                  \
+                        *yytext = k;                                                       \
                         s->isConstantArray = true; return x; }
 #define NUM_TOK(x) { yylval->num = atol(yytext); return x; }
 #endif
                         s->isConstantArray = true; return x; }
 #define NUM_TOK(x) { yylval->num = atol(yytext); return x; }
 #endif
@@ -119,7 +123,7 @@ integer_name {digit}*
 
 "'" {
   BEGIN(CHARSTRING);
 
 "'" {
   BEGIN(CHARSTRING);
-  string_begin = yytext;
+  string_begin = yytext + 1 ;
 }
 
 %{ /* COMMENT */ 
 }
 
 %{ /* COMMENT */ 
index 0c22818868fccd52fa3cf1010a6ea3b3772895cb..176a7f5aac4c54ba4e18623aa9991e121d1426b7 100644 (file)
@@ -372,6 +372,9 @@ void close_log() {
 
 %name-prefix="lds_"
 %pure-parser
 
 %name-prefix="lds_"
 %pure-parser
+// Needs changes if setup
+//%define api.prefix {lds_}
+//%define api.pure
 
 %lex-param {yyscan_t *scanner}
 %parse-param {yyscan_t scanner}
 
 %lex-param {yyscan_t *scanner}
 %parse-param {yyscan_t scanner}
@@ -826,7 +829,7 @@ variables_sort: variable_names sort {
   | variable_names sort T_ASSIGN expression {
     AST::Type *sort = dynamic_cast<AST::Type *>($<typ>2);
     /* Be sure expression is a constant expression or else exit */
   | variable_names sort T_ASSIGN expression {
     AST::Type *sort = dynamic_cast<AST::Type *>($<typ>2);
     /* Be sure expression is a constant expression or else exit */
-    LDS_LOG_INFO("variables_sort: TODO add initExpression");
+    //LDS_LOG_ERROR("variables_sort: TODO add initExpression");
     if (sort != NULL) 
     { 
       /* IDENTIFIER Is the Type*/
     if (sort != NULL) 
     { 
       /* IDENTIFIER Is the Type*/
@@ -836,7 +839,7 @@ variables_sort: variable_names sort {
       for (std::vector<AST::StringLiteral *>::iterator sit = a->begin(); sit != a->end() ; ++sit)
       {
         AST::StringLiteral *s = (*sit);
       for (std::vector<AST::StringLiteral *>::iterator sit = a->begin(); sit != a->end() ; ++sit)
       {
         AST::StringLiteral *s = (*sit);
-        // LDS_LOG_INFO("variables_sort: got 1 variable  %s type:%s",s->getString().c_str(),sort->getString().c_str());
+        //LDS_LOG_ERROR("variables_sort: got 1 variable  %s type:%s",s->getString().c_str(),sort->getTypeClassName());
         AST::VarDecl *v =ldsp->create_variable(m_CurrentDC,m_RootTranslationUnit,(*sit),sort);
         v->setInit($4);
         m_CurrentDC->addDecl(v);
         AST::VarDecl *v =ldsp->create_variable(m_CurrentDC,m_RootTranslationUnit,(*sit),sort);
         v->setInit($4);
         m_CurrentDC->addDecl(v);
@@ -1083,8 +1086,10 @@ default_initialization:  T_DEFAULT T_NUMBER {
   | T_DEFAULT  T_CHARSTRING {
     LDS_LOG_INFO("default_initialization: string ");
     AST::Type &Char = m_RootTranslationUnit->getASTContext().CharTy;
   | T_DEFAULT  T_CHARSTRING {
     LDS_LOG_INFO("default_initialization: string ");
     AST::Type &Char = m_RootTranslationUnit->getASTContext().CharTy;
-    AST::Type &CharArray = m_RootTranslationUnit->getASTContext().getConstantArrayType(&Char,strlen($<string>1)+1 );
-    $$ = new AST::StringLiteral($<string>1,&CharArray);
+    AST::Type &CharArray = m_RootTranslationUnit->getASTContext().getConstantArrayType(&Char
+                             ,strlen($<str_expr>2->getString().c_str())+1 );
+    $<str_expr>2->setType(&CharArray);
+    $$ = $<str_expr>2;
   } 
 ;
 
   } 
 ;
 
@@ -1436,6 +1441,7 @@ choice_of_sort: T_IDENTIFIER sort end {
 
 operation_signatures: /* Empty*/
   | T_OPERATORS operation_list {
 
 operation_signatures: /* Empty*/
   | T_OPERATORS operation_list {
+    LDS_LOG_ERROR("operation_signatures: operator lists TODO");
   }
 ;
 
   }
 ;
 
@@ -1462,6 +1468,7 @@ operation_name: T_IDENTIFIER {
 
 op_arguments: T_LPARENTHESES arguments T_RPARENTHESES {
     /* see 101 Pg 42 this is a <sort list>*/
 
 op_arguments: T_LPARENTHESES arguments T_RPARENTHESES {
     /* see 101 Pg 42 this is a <sort list>*/
+    $$ = $2;
   }
   | T_LPARENTHESES T_RPARENTHESES {
     $$ = NULL;
   }
   | T_LPARENTHESES T_RPARENTHESES {
     $$ = NULL;
@@ -1500,10 +1507,6 @@ op_result: T_RESULT sort {
     LDS_LOG_INFO("op_result: sort %s ",$2->getTypeClassName() );
  }
 ;
     LDS_LOG_INFO("op_result: sort %s ",$2->getTypeClassName() );
  }
 ;
-opt_task_definition: /**/
-  | task_definitions {
-  }
-;
 
 task_definitions: task {
         LDS_LOG_DEBUG("task_definitions: begin Stack size: " F_SIZE,m_StackDC.size());
 
 task_definitions: task {
         LDS_LOG_DEBUG("task_definitions: begin Stack size: " F_SIZE,m_StackDC.size());
@@ -2544,8 +2547,9 @@ primary: T_LPARENTHESES expression T_RPARENTHESES {
     }
     | T_CHARSTRING {
         LDS_LOG_DEBUG("primary: Constant string %s",$<str_expr>1->getString().c_str());
     }
     | T_CHARSTRING {
         LDS_LOG_DEBUG("primary: Constant string %s",$<str_expr>1->getString().c_str());
-        AST::Type &Char = m_RootTranslationUnit->getASTContext().CharTy;
-        AST::Type &CharArray = m_RootTranslationUnit->getASTContext().getConstantArrayType(&Char,strlen($<string>1)+1 );
+        AST::Type &Char      = m_RootTranslationUnit->getASTContext().StringTy;
+        AST::Type &CharArray = m_RootTranslationUnit->getASTContext().getConstantArrayType(&Char,strlen($<str_expr>1->getString().c_str())+1 );
+        $<str_expr>1->setType(&CharArray);
         $<expr>$ = $<str_expr>1;
     }
     | imperative_expression {
         $<expr>$ = $<str_expr>1;
     }
     | imperative_expression {
@@ -2684,7 +2688,7 @@ value_returning_proc_call:  action_name  actual_parameters  {
         //$<stmt>$ = act;
 
         //m_StackDC.pop();
         //$<stmt>$ = act;
 
         //m_StackDC.pop();
-        //* NEW */
+        /* NEW */
         
         if (fct->isNew() && args)
         {
         
         if (fct->isNew() && args)
         {
@@ -2756,12 +2760,12 @@ conditional_expression: T_TEST primary {
 ;
 
 primary_list: primary {
 ;
 
 primary_list: primary {
-      LDS_LOG_INFO("primary_list : TODO");
+      LDS_LOG_INFO("primary_list : Create ExprArray");
       $$ = new ExprArray();
       $$->push_back($1);
     }
     | primary_list T_COMMA primary {
       $$ = new ExprArray();
       $$->push_back($1);
     }
     | primary_list T_COMMA primary {
-      LDS_LOG_INFO("primary_list : TODO");
+      LDS_LOG_INFO("primary_list : Add primary To Primary Array");
       $$->push_back($3);
     }
 ;
       $$->push_back($3);
     }
 ;
index 7adfcb322501beb79943a0f42eb08e5f83a6c23b..41c6aebdde17a280d56319472862eddc20e5367b 100644 (file)
@@ -337,7 +337,7 @@ parser::function_complete(AST::DeclContext *m_CurrentDC,AST::TranslationUnitDecl
       /* Lookup has already be perfomed at primary level Its a constant String */
       LOG_ERROR("fonction_complete: action simple function call %s StringLiteral parameter  %s"
                   , fct->getName().c_str(),it->getString().c_str());
       /* Lookup has already be perfomed at primary level Its a constant String */
       LOG_ERROR("fonction_complete: action simple function call %s StringLiteral parameter  %s"
                   , fct->getName().c_str(),it->getString().c_str());
-      /* Parameter is string Literral Not always true */
+      /* Parameter is string Literal Not always true */
       AST::Type * vTy = &tu->getASTContext().StringTy;
       /* May be find a global constant ... or something like that */ 
       AST::DeclContext::lookup_result r = m_CurrentDC->lookup(it->getString());
       AST::Type * vTy = &tu->getASTContext().StringTy;
       /* May be find a global constant ... or something like that */ 
       AST::DeclContext::lookup_result r = m_CurrentDC->lookup(it->getString());
index 50e27381e03dc28e698d653381f62d0c520b9bb6..0c2db3576825425fd3cdc1681d0e36ba3adc53f4 100644 (file)
@@ -80,6 +80,11 @@ namespace lds {
        */ 
       void function_complete(AST::DeclContext *DC,AST::TranslationUnitDecl *tu,AST::FunctionDecl *fct,AST::ParenListExpr *args);
 
        */ 
       void function_complete(AST::DeclContext *DC,AST::TranslationUnitDecl *tu,AST::FunctionDecl *fct,AST::ParenListExpr *args);
 
+      /**
+       * Somehow I need to process actual parameters to see
+       * what it is and return the appropriate expression.
+       * Mainly because of constant 
+       */
     protected:
       static   parser *m_parser;
       ListenerList     m_listeners;
     protected:
       static   parser *m_parser;
       ListenerList     m_listeners;