Next: scope of visibility, Up: Modules [Contents][Index]
A module file must begin with a module declaration:
module modname [interface-type].
Note the final dot.
The modname parameter declares the name of the module. It is recommended that it be the same as the file name without the ‘.mfl’ extension. The module name must be a valid MFL literal. It also must not coincide with any defined MFL symbol, therefore we recommend to always quote it (see example below).
The optional parameter interface-type defines the default scope of visibility for the symbols declared in this module. If it is ‘public’, then all symbols declared in this module are made public (importable) by default, unless explicitly declared otherwise (see scope of visibility). If it is ‘static’, then all symbols, not explicitly marked as public, become static. If the interface-type is not given, ‘public’ is assumed.
The actual MFL code follows the ‘module’ line.
The module definition is terminated by the logical end of its
compilation unit, i.e. either by the end of file, or by the
keyword bye
, whichever occurs first.
Special keyword bye
may be used to prematurely end the current
compilation unit before the physical end of the containing file.
Any material between bye
and the end of file is ignored by the
compiler.
Let’s illustrate these concepts by writing a module ‘revip’:
module 'revip' public. func revip(string ip) returns string do return inet_ntoa(ntohl(inet_aton(ip))) done bye This text is ignored. You may put any additional documentation here.