Skip to content

victorsndvg/ForEx

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

#ForEx

Fortran User Defined Exceptions Handler

Experimental Code: Use it carefully! still under development

Build Status codecov.io

##License

License

##What is ForEx?

ForEx is fortran 2003 project taking advance of the C preprocessor capabilities in order to emulate exception handling.

##Features

  • Exception hierarchy: ForEx can handle any error object extended from the Exception base class.
  • Local flow control: throwing an exception changes the local flow. THROW performs local jumps to the end of the TRY frame or FINALLY.
  • Global handling: the exception stack is a global object under the singleton pattern.
  • Single THROW call per scope:
    • Single throw call per local TRY scope.
    • Single throw call per local CATCH scope.
    • Single throw call per local FINALLY scope.
  • Re-throwing: a exception can be raised again in the CATCH scope.
  • Re-throwing Backtrace: an exception saves the stack of contexts where it has been throwed.
  • Handle throwed exceptions: CATCH iterate over all the exceptions looking for the first that matches the same class.
  • CATCH precedence: multiple CATCH calls in the same TRY frame are executed sequencially.
  • Automatic exception stack cleaning when CATCH: if several exceptions has been thrown along the program, only one of them will be handled in the next CATCH call.
  • Customizable catching action: Exception class contains the Catch procedure to customize the action performed when cathing it.
  • Automatic Backtrace of non handled exceptions: going out of the main TRY/ENDTRY scope with non handled exceptions in the stack causes exception backtrace flush.

##How to get ForEx

git clone https://github.com/victorsndvg/Forex.git

##Compilation

ForEx compile with GNU Fortran compiler 5.1 (and newer versions) and Intel Fortran compiler 15.0.1 (and newer versions).

ForEx uses CMake as a portable compilation system.

The easiest way to compile ForEx under Linux is:

$ cd ForEx
$ mkdir build
$ cd build
$ cmake ../
$ make

To compile ForEx under Windows use de equivalent commands

Remember, ForEx take advantage of the C preprocessor. To include it in your project, you have to add the preprocessor flags while compiling. Preprocesor flags depending on the compiler vendor:

  • GNU Fortran: -cpp
  • Intel Fortran: -fpp
  • IBM XLF: -qsuffix=f=f90:cpp=f90

###Using ForEx in your program

program test
USE ForEx

implicit none
#include "ExceptionHandler.i90"

TRY
    ! Variable allocation
    if(Error) then
        THROW(Exception(Code=-1, Message='An error message')
    endif
CATCH(Exception, Ex)
    call Ex%Print()
FINALLY
    ! Variable deallocation
ENDTRY

end program test

Releases

No releases published

Packages

No packages published