Next: Expressions, Up: Semantics [Contents]
An import
clause denote the same expression where it was
(recursively) replaced by the set of declarations its corresponding
import-file contains. An import-file has the following syntax (see
Syntactic Specifications, for a definition of the symbols):
import-file ::= decs
Because the syntax is different, it is convenient to use another extension. We use *.tih for files to import, for instance:
/* fortytwo-fn.tih. */ function fortytwo() : int = 42
/* fortytwo-var.tih. */ import "fortytwo-fn.tih" var fortytwo := fortytwo()
/* fortytwo-main.tig. */ let import "fortytwo-var.tih" in print_int(fortytwo); print("\n") end
is rigorously equivalent to:
let function fortytwo() : int = 42 var fortytwo := fortytwo() in print_int(fortytwo); print("\n") end
There can never be a duplicate-name conflict between declarations from different files. For instance:
/* 1.tih */ function one() : int = 1
let import "1.tih" import "1.tih" in one() = one() end
is valid although
let function one() : int = 1 function one() : int = 1 in one() = one() end
is not: the function one
is defined twice in a row of function
declarations.
Importing a nonexistent file is an error. A imported file may not include itself, directly or indirectly. Both these errors must be diagnosed, with status set to 1 (see Errors).
When processing an import directive, the compiler starts looking for files in the current directory, then in all the directories of the include path, in order.
There are three name spaces: types, variables and functions. The original language definition features two: variables and functions share the same name space. The motivation, as noted by Sébastien Carlier, is that in FunTiger, in the second part of the book, functions can be assigned to variables:
let type a = {a : int} var a := 0 function a(a : a) : a = a{a = a.a} in a(a{a = a}) end
Three name spaces support is easier to implement.
• Type Declarations: | Semantics of type constructions | |
• Variable Declarations: | Semantics of variable definitions | |
• Function Declarations: | Function and primitive declaration semantics | |
• Method Declarations: | Method declaration semantics |
Next: Expressions, Up: Semantics [Contents]