diff --git a/SWIG/Doc/Manual/Contract.html b/SWIG/Doc/Manual/Contract.html new file mode 100644 index 000000000..f6a4b5ad9 --- /dev/null +++ b/SWIG/Doc/Manual/Contract.html @@ -0,0 +1,90 @@ + + + +Contract Checking + + + +

Contracts

+ + + +A common problem that arises when wrapping C libraries is that of maintaining +reliability and checking for errors. The fact of the matter is that many +C programs are notorious for not providing error checks. Not only that, +when you expose the internals of an application as a library, it +often becomes possible to crash it simply by providing bad inputs or +using it in a way that wasn't intended. + +

+This chapter describes SWIG's support for software contracts. In the context +of SWIG, a contract can be viewed as a constraint that is attached +to a declaration. For example, you can easily attach argument checking rules, +check the output values of a function and more. +When one of the rules is violated by a script, a runtime exception is +generated rather than having the program continue to execute. + +

The %contract directive

+ +Contracts are added to a declaration using the %contract directive. Here +is a simple example: + +
+
+%contract sqrt(double x) {
+require:
+    x >= 0;
+ensure:
+    sqrt >= 0;
+}
+
+...
+double sqrt(double);
+
+
+ +In this case, a contract is being added to the sqrt() function. +The %contract directive must always appear before the declaration +in question. Within the contract there are two sections, both of which +are optional. The require: +section specifies conditions that must hold before the function is called. +Typically, this is used to check argument values. The ensure: section +specifies conditions that must hold after the function is called. This is +often used to check return values or the state of the program. In both +cases, the conditions that must hold must be specified as boolean expressions. + +

+In the above example, we're simply making sure that sqrt() returns a non-negative +number (if it didn't, then it would be broken in some way). + +

+Once a contract has been specified, it modifies the behavior of the +resulting module. For example: + +

+
+>>> example.sqrt(2)
+1.4142135623730951
+>>> example.sqrt(-2)
+Traceback (most recent call last):
+  File "", line 1, in ?
+RuntimeError: Require assertion violation, in function sqrt( arg1>=0)
+>>>
+
+
+ +

%contract and classes

+ +

Constant aggregation and %aggregate_check

+ + +

Notes

+ +Contract support was implemented by Songyan (Tiger) Feng and first appeared +in SWIG-1.3.20. + +


+ +
SWIG 1.3 - Last Modified : November 12, 2003
+ + diff --git a/SWIG/Doc/Manual/chapters b/SWIG/Doc/Manual/chapters index 59bd7e2fe..16dfe6f2f 100644 --- a/SWIG/Doc/Manual/chapters +++ b/SWIG/Doc/Manual/chapters @@ -8,6 +8,7 @@ Preprocessor.html Arguments.html Typemaps.html Customization.html +Contract.html Varargs.html Warnings.html Library.html diff --git a/SWIG/Doc/Manual/index.html b/SWIG/Doc/Manual/index.html index 955bc4b0e..e0c82bdec 100644 --- a/SWIG/Doc/Manual/index.html +++ b/SWIG/Doc/Manual/index.html @@ -46,6 +46,7 @@ to help!).
  • Argument handling.
  • Typemaps
  • Customization features +
  • Contracts
  • Variable length arguments
  • Warning messages