//======================================================================================== // R1233 subroutine-subprogram //---------------------------------------------------------------------------------------- void UntypedASTBuilder::build_SubroutineSubprogram(SubroutineSubprogram * subroutineSubprogram) { Sg_File_Info * start = NULL; SgUntypedNamedStatement * stmt = NULL; SgUntypedDeclarationList* sgDeclList = NULL; SgUntypedStatementList* sgStmtList = NULL; SgUntypedSubroutineDeclaration * subroutine = NULL; // SubroutineStmt // if (subroutineSubprogram->getSubroutineStmt()) { subroutine = dynamic_cast<SgUntypedSubroutineDeclaration*>(subroutineSubprogram->getSubroutineStmt()->getPayload()); assert(subroutine); } printf("build_MainSubroutine label: ........ %s\n", subroutine->get_label_string().c_str()); printf(" begin name: ........... %s\n", subroutine->get_name().c_str()); // SpecificationPart // SpecificationPart * specPart = subroutineSubprogram->getSpecificationPart(); sgDeclList = dynamic_cast<SgUntypedDeclarationList*>(specPart->givePayload()); assert(sgDeclList); subroutine->get_scope()->set_declaration_list(sgDeclList); printf(" spec_list_size: ........... %lu\n", sgDeclList->get_decl_list().size()); // ExecutionPart // ExecutionPart * execPart = subroutineSubprogram->getExecutionPart(); sgStmtList = dynamic_cast<SgUntypedStatementList*>(execPart->givePayload()); assert(sgStmtList); subroutine->get_scope()->set_statement_list(sgStmtList); printf(" exec_list_size: ........... %lu\n", sgStmtList->get_stmt_list().size()); // InternalSubprogramPart // InternalSubprogramPart * isubPart = subroutineSubprogram->getInternalSubprogramPart(); if (isubPart) { SgUntypedFunctionDeclarationList* sgFuncList; sgFuncList = dynamic_cast<SgUntypedFunctionDeclarationList*>(isubPart->givePayload()); assert(sgFuncList); subroutine->get_scope()->set_function_list(sgFuncList); } // EndSubroutineStmt // stmt = dynamic_cast<SgUntypedNamedStatement*>(subroutineSubprogram->getEndSubroutineStmt()->getPayload()); assert(stmt); subroutine->set_end_statement(stmt); printf(" end label: ........... %s\n", stmt->get_label_string().c_str()); printf(" end name: ........... %s\n", stmt->get_statement_name().c_str()); subroutineSubprogram->setPayload(subroutine); }
//======================================================================================== // R208 execution-part //---------------------------------------------------------------------------------------- void UntypedASTBuilder::build_ExecutionPart(ExecutionPart * executionPart) { SgUntypedStatement * stmt = NULL; SgUntypedStatementList * sgStmtList = new SgUntypedStatementList(NULL); std::vector<ExecutionPartConstruct*>* execList = executionPart->getExecutionPartConstructList(); for (int i = 0; i < execList->size(); i++) { stmt = dynamic_cast<SgUntypedStatement*>(execList->at(i)->getPayload()); assert(stmt); sgStmtList->get_stmt_list().push_back(stmt); } executionPart->setPayload(sgStmtList); printf("build_ExecutionPart: ............... %lu\n", sgStmtList->get_stmt_list().size()); }
//======================================================================================== // R208 execution-part //---------------------------------------------------------------------------------------- void UntypedASTBuilder::build_SpecAndExecPart(SpecAndExecPart * specAndExecPart) { #ifdef TODO_ROSE SgUntypedStatement * stmt = NULL; SgUntypedStatementList * sgStmtList = new SgUntypedStatementList(NULL); std::vector<Statement*>* ofpStmtList = specAndExecPart->getStatementList(); for (int i = 0; i < ofpStmtList->size(); i++) { stmt = dynamic_cast<SgUntypedStatement*>(ofpStmtList->at(i)->getPayload()); assert(stmt); sgStmtList->get_stmt_list().push_back(stmt); } specAndExecPart->setPayload(sgStmtList); #ifdef OFP_BUILD_DEBUG printf("build_SpecAndExecPart: ............... %lu\n", sgStmtList->get_stmt_list().size()); #endif #endif }
//======================================================================================== // R1101 main-program //---------------------------------------------------------------------------------------- void UntypedASTBuilder::build_MainProgram(MainProgram * mainProgram) { Sg_File_Info * start = NULL; SgUntypedNamedStatement * stmt = NULL; SgUntypedDeclarationList* sgDeclList = NULL; SgUntypedStatementList* sgStmtList = NULL; SgUntypedProgramHeaderDeclaration * program = NULL; // ProgramStmt // if (mainProgram->getProgramStmt()) { program = dynamic_cast<SgUntypedProgramHeaderDeclaration*>(mainProgram->getProgramStmt()->getPayload()); assert(program); } else { // no optional ProgramStmt SgUntypedFunctionScope * scope = new SgUntypedFunctionScope(NULL); scope->set_declaration_list(new SgUntypedDeclarationList(NULL)); scope->set_statement_list(new SgUntypedStatementList(NULL)); scope->set_function_list(new SgUntypedFunctionDeclarationList(NULL)); program = new SgUntypedProgramHeaderDeclaration(NULL, ""); program->set_statement_enum(SgToken::FORTRAN_PROGRAM); program->set_scope(scope); } printf("build_MainProgram label: ........... %s\n", program->get_label_string().c_str()); printf(" begin name: ........... %s\n", program->get_name().c_str()); // SpecificationPart // SpecificationPart * specPart = mainProgram->getSpecificationPart(); sgDeclList = dynamic_cast<SgUntypedDeclarationList*>(specPart->givePayload()); assert(sgDeclList); program->get_scope()->set_declaration_list(sgDeclList); printf(" spec_list_size: ........... %lu\n", sgDeclList->get_decl_list().size()); // ExecutionPart // ExecutionPart * execPart = mainProgram->getExecutionPart(); sgStmtList = dynamic_cast<SgUntypedStatementList*>(execPart->givePayload()); assert(sgStmtList); program->get_scope()->set_statement_list(sgStmtList); printf(" exec_list_size: ........... %lu\n", sgStmtList->get_stmt_list().size()); // InternalSubprogramPart // InternalSubprogramPart * isubPart = mainProgram->getInternalSubprogramPart(); if (isubPart) { SgUntypedFunctionDeclarationList* sgFuncList; sgFuncList = dynamic_cast<SgUntypedFunctionDeclarationList*>(isubPart->givePayload()); assert(sgFuncList); program->get_scope()->set_function_list(sgFuncList); } // EndProgramStmt // stmt = dynamic_cast<SgUntypedNamedStatement*>(mainProgram->getEndProgramStmt()->getPayload()); assert(stmt); program->set_end_statement(stmt); printf(" end label: ........... %s\n", stmt->get_label_string().c_str()); printf(" end name: ........... %s\n", stmt->get_statement_name().c_str()); mainProgram->setPayload(program); }
//======================================================================================== // SgUntypedStatementList //---------------------------------------------------------------------------------------- ATbool traverse_SgUntypedStatementList(ATerm term, SgUntypedStatementList** var_SgUntypedStatementList) { #ifdef PRINT_ATERM_TRAVERSAL printf("... traverse_SgUntypedStatementList: %s\n", ATwriteToString(term)); #endif ATerm term1; *var_SgUntypedStatementList = NULL; if (ATmatch(term, "SgUntypedStatementList(<term>)", &term1)) { SgUntypedStatementList* plist = new SgUntypedStatementList(); ATermList tail = (ATermList) ATmake("<term>", term1); while (! ATisEmpty(tail)) { SgUntypedStatement* arg; ATerm head = ATgetFirst(tail); tail = ATgetNext(tail); if (traverse_SgUntypedScope(head, (SgUntypedScope**) &arg)) { // SgUntypedScope plist->get_stmt_list().push_back(arg); continue; } if (traverse_SgUntypedOtherStatement(head, (SgUntypedOtherStatement**) &arg)) { // SgUntypedOtherStatement plist->get_stmt_list().push_back(arg); continue; } if (traverse_SgUntypedNamedStatement(head, (SgUntypedNamedStatement**) &arg)) { // SgUntypedNamedStatement plist->get_stmt_list().push_back(arg); continue; } if (traverse_SgUntypedBlockStatement(head, (SgUntypedBlockStatement**) &arg)) { // SgUntypedBlockStatement plist->get_stmt_list().push_back(arg); continue; } if (traverse_SgUntypedFunctionCallStatement(head, (SgUntypedFunctionCallStatement**) &arg)) { // SgUntypedFunctionCallStatement plist->get_stmt_list().push_back(arg); continue; } if (traverse_SgUntypedAssignmentStatement(head, (SgUntypedAssignmentStatement**) &arg)) { // SgUntypedAssignmentStatement plist->get_stmt_list().push_back(arg); continue; } if (traverse_SgUntypedDeclarationStatement(head, (SgUntypedDeclarationStatement**) &arg)) { // SgUntypedDeclarationStatement plist->get_stmt_list().push_back(arg); continue; } delete plist; return ATfalse; } *var_SgUntypedStatementList = plist; } else return ATfalse; return ATtrue; }
//======================================================================================== // R1233 subroutine-subprogram //---------------------------------------------------------------------------------------- void UntypedASTBuilder::build_SubroutineSubprogram(SubroutineSubprogram * subroutineSubprogram) { #if 0 Sg_File_Info * start = NULL; SgUntypedNamedStatement * stmt = NULL; SgUntypedDeclarationList* sgDeclList = NULL; SgUntypedStatementList* sgStmtList = NULL; SgUntypedSubroutineDeclaration * subroutine = NULL; // SubroutineStmt // subroutine = dynamic_cast<SgUntypedSubroutineDeclaration*>(subroutineSubprogram->getSubroutineStmt()->getPayload()); assert(subroutine); start = subroutine->get_startOfConstruct(); subroutine->set_scope(new SgUntypedFunctionScope(start)); #ifdef OFP_BUILD_DEBUG printf("build_Subroutine label: ........... %s\n", subroutine->get_label_string().c_str()); printf(" begin name: ........... %s\n", subroutine->get_name().c_str()); #endif // InitialSpecPart // InitialSpecPart * specPart = subroutineSubprogram->getInitialSpecPart(); sgDeclList = dynamic_cast<SgUntypedDeclarationList*>(specPart->givePayload()); assert(sgDeclList); subroutine->get_scope()->set_declaration_list(sgDeclList); #ifdef OFP_BUILD_DEBUG printf(" spec_list_size: ........... %lu\n", sgDeclList->get_decl_list().size()); #endif // SpecAndExecPart // SpecAndExecPart * execPart = subroutineSubprogram->getSpecAndExecPart(); sgStmtList = dynamic_cast<SgUntypedStatementList*>(execPart->givePayload()); assert(sgStmtList); subroutine->get_scope()->set_statement_list(sgStmtList); #ifdef OFP_BUILD_DEBUG printf(" exec_list_size: ........... %lu\n", sgStmtList->get_stmt_list().size()); #endif // InternalSubprogramPart // InternalSubprogramPart * isubPart = subroutineSubprogram->getInternalSubprogramPart(); if (isubPart) { SgUntypedFunctionDeclarationList* sgFuncList; sgFuncList = dynamic_cast<SgUntypedFunctionDeclarationList*>(isubPart->givePayload()); assert(sgFuncList); subroutine->get_scope()->set_function_list(sgFuncList); } else { subroutine->get_scope()->set_function_list(new SgUntypedFunctionDeclarationList(NULL)); } // EndSubroutineStmt // stmt = dynamic_cast<SgUntypedNamedStatement*>(subroutineSubprogram->getEndSubroutineStmt()->getPayload()); assert(stmt); subroutine->set_end_statement(stmt); #ifdef OFP_BUILD_DEBUG printf(" end label: ........... %s\n", stmt->get_label_string().c_str()); printf(" end name: ........... %s\n", stmt->get_statement_name().c_str()); #endif subroutineSubprogram->setPayload(subroutine); #endif }
//======================================================================================== // R1227 function-subprogram //---------------------------------------------------------------------------------------- void UntypedASTBuilder::build_FunctionSubprogram(FunctionSubprogram* functionSubprogram) { #if 0 Sg_File_Info * start = NULL; SgUntypedNamedStatement * stmt = NULL; SgUntypedDeclarationList* sgDeclList = NULL; SgUntypedStatementList* sgStmtList = NULL; SgUntypedFunctionDeclaration * function = NULL; // FunctionStmt // function = dynamic_cast<SgUntypedFunctionDeclaration*>(functionSubprogram->getFunctionStmt()->getPayload()); assert(function); start = function->get_startOfConstruct(); function->set_scope(new SgUntypedFunctionScope(start)); #if UNPARSER_AVAILABLE function->set_has_unparse(true); #endif #ifdef OFP_BUILD_DEBUG printf("build_Function label: ........... %s\n", function->get_label_string().c_str()); printf(" begin name: ........... %s\n", function->get_name().c_str()); #endif // InitialSpecPart // InitialSpecPart * specPart = functionSubprogram->getInitialSpecPart(); sgDeclList = dynamic_cast<SgUntypedDeclarationList*>(specPart->givePayload()); assert(sgDeclList); function->get_scope()->set_declaration_list(sgDeclList); #ifdef OFP_BUILD_DEBUG printf(" spec_list_size: ........... %lu\n", sgDeclList->get_decl_list().size()); #endif // SpecAndExecPart // SpecAndExecPart * execPart = functionSubprogram->getSpecAndExecPart(); sgStmtList = dynamic_cast<SgUntypedStatementList*>(execPart->givePayload()); assert(sgStmtList); function->get_scope()->set_statement_list(sgStmtList); #ifdef OFP_BUILD_DEBUG printf(" exec_list_size: ........... %lu\n", sgStmtList->get_stmt_list().size()); #endif // InternalSubprogramPart // InternalSubprogramPart * isubPart = functionSubprogram->getInternalSubprogramPart(); if (isubPart) { SgUntypedFunctionDeclarationList* sgFuncList; sgFuncList = dynamic_cast<SgUntypedFunctionDeclarationList*>(isubPart->givePayload()); assert(sgFuncList); function->get_scope()->set_function_list(sgFuncList); } else { function->get_scope()->set_function_list(new SgUntypedFunctionDeclarationList(NULL)); } // EndFunctionStmt // stmt = dynamic_cast<SgUntypedNamedStatement*>(functionSubprogram->getEndFunctionStmt()->getPayload()); assert(stmt); function->set_end_statement(stmt); #ifdef OFP_BUILD_DEBUG printf(" end label: ........... %s\n", stmt->get_label_string().c_str()); printf(" end name: ........... %s\n", stmt->get_statement_name().c_str()); #endif functionSubprogram->setPayload(function); #endif }
//======================================================================================== // R1101 main-program //---------------------------------------------------------------------------------------- void UntypedASTBuilder::build_MainProgram(MainProgram * mainProgram) { #ifdef TODO_ROSE Sg_File_Info * start = NULL; SgUntypedNamedStatement * stmt = NULL; SgUntypedDeclarationList* sgDeclList = NULL; SgUntypedStatementList* sgStmtList = NULL; SgUntypedProgramHeaderDeclaration * program = NULL; // ProgramStmt // if (mainProgram->getProgramStmt()) { program = dynamic_cast<SgUntypedProgramHeaderDeclaration*>(mainProgram->getProgramStmt()->getPayload()); assert(program); } else { // no optional ProgramStmt program = new SgUntypedProgramHeaderDeclaration(NULL, ""); program->set_statement_enum(SgToken::FORTRAN_PROGRAM); } program->set_scope(new SgUntypedFunctionScope(start)); #if UNPARSER_AVAILABLE program->set_has_unparse(true); #endif #ifdef OFP_BUILD_DEBUG printf("build_MainProgram label: ........... %s\n", program->get_label_string().c_str()); printf(" begin name: ........... %s\n", program->get_name().c_str()); #endif // InitialSpecPart // InitialSpecPart * specPart = mainProgram->getInitialSpecPart(); sgDeclList = dynamic_cast<SgUntypedDeclarationList*>(specPart->givePayload()); assert(sgDeclList); program->get_scope()->set_declaration_list(sgDeclList); #ifdef OFP_BUILD_DEBUG printf(" spec_list_size: ........... %lu\n", sgDeclList->get_decl_list().size()); #endif // SpecAndExecPart // SpecAndExecPart * execPart = mainProgram->getSpecAndExecPart(); sgStmtList = dynamic_cast<SgUntypedStatementList*>(execPart->givePayload()); assert(sgStmtList); program->get_scope()->set_statement_list(sgStmtList); #ifdef OFP_BUILD_DEBUG printf(" exec_list_size: ........... %lu\n", sgStmtList->get_stmt_list().size()); #endif // InternalSubprogramPart // InternalSubprogramPart * isubPart = mainProgram->getInternalSubprogramPart(); if (isubPart) { SgUntypedScope * isubScope = dynamic_cast<SgUntypedScope*>(isubPart->givePayload()); assert(isubScope); SgUntypedStatementList * sgStmtList = isubScope->get_statement_list(); SgUntypedFunctionDeclarationList * sgFuncList = isubScope->get_function_list(); // has one contains stmt SgUntypedStatement * contains = sgStmtList->get_stmt_list().front(); program->get_scope()->get_statement_list()->get_stmt_list().push_back(contains); program->get_scope()->set_function_list(sgFuncList); sgStmtList->get_stmt_list().clear(); } else { program->get_scope()->set_function_list(new SgUntypedFunctionDeclarationList(NULL)); } // EndProgramStmt // stmt = dynamic_cast<SgUntypedNamedStatement*>(mainProgram->getEndProgramStmt()->getPayload()); assert(stmt); program->set_end_statement(stmt); #ifdef OFP_BUILD_DEBUG printf(" end label: ........... %s\n", stmt->get_label_string().c_str()); printf(" end name: ........... %s\n", stmt->get_statement_name().c_str()); #endif mainProgram->setPayload(program); #else printf ("UntypedASTBuilder::build_MainProgram(): commented out! \n"); #endif }