Example #1
0
int check_loop_stmt(is_loop_stmt* node)
{
	int errors = 0;

	if (node->loop_label)
		errors += check_label(node->loop_label);

	switch (node->type)
	{
		case t_loop_stmt_for:
			errors += check_for(node->data.for_stmt, node->loop_label);
		break;

		case t_loop_stmt_while:
			errors += check_while(node->data.while_stmt, node->loop_label);
		break;

		case t_loop_stmt_do_while:
			errors += check_do_while(node->data.do_while_stmt, node->loop_label);
		break;
	}

	if (errors == 0)
	{
		/*
			TODO:
			propagate loop terminates, only if node condition is ALWAYS true
		*/
	}

	return errors;
}
Example #2
0
 int check_statement(ast::abstract::Statement* statement) {
     assert(statement != nullptr);
     switch(*statement) {
     case ast::ReturnNode:
         return check_return(dynamic_cast<ast::Return*>(statement));
         break;
     case ast::BranchNode:
         return check_branch(dynamic_cast<ast::Branch*>(statement));
         break;
     case ast::AssignmentNode:
         return check_assignment(dynamic_cast<ast::Assignment*>(statement));
         break;
     case ast::WhileNode:
         return check_while(dynamic_cast<ast::While*>(statement));
         break;
     case ast::VoidContextNode:
         return check_void_context(dynamic_cast<ast::VoidContext*>(statement));
         break;
     }
     assert(false);
     return EXIT_SUCCESS;
 }