-
Notifications
You must be signed in to change notification settings - Fork 0
/
lfe_macro.txt
65 lines (47 loc) · 1.54 KB
/
lfe_macro.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
MODULE
lfe_macro
MODULE SUMMARY
Lisp Flavoured Erlang (LFE) macro expander
DESCRIPTION
This module provides an interface to the LFE macro expander.
The expander is used by the LFE compile and in the shell but
can also be used by applications explicitly wanting to handle
a file.
DATA TYPES
sexpr()
An LFE s-expression, a list structure.
filesexpr() = {Sexpr,Line}
This is the format returned by lfe_io:parse_file/1 and
is used by the compiler to give better error
information.
env()
This is an macro and evaluation environment as created
by lfe_lib:new_env().
EXPORTS
expand_forms([FileSexpr], Env) -> ExpRet
where
FileSexpr = filesexpr()
Env = env()
ExpRet = {yes,[FileSexpr],Env,Warnings} | {error,Errors,Warnings}
macro_forms([FileSexpr], Env) -> {[FileSexpr],Env}.
where
FileSexpr = filesexpr()
Env = env()
expand_expr_all(Sexpr, Env) -> Sexpr.
where
Sexpr = sexpr()
Env = env()
Expand all macros in Sexpr either using the definitions in Env
or just the default macros. Note that any eventual new macro
definitions will be lost.
expand_expr(Sexpr, Env) -> {yes,Exp} | no.
expand_expr_1(Sexpr, Env) -> {yes,Exp} | no.
where
Sexpr = Exp = sexpr()
Env = env()
Test if the top s-expression here is a macro call, if so
expand it and return {yes,Expansion}, if not then return no.
expand_expr/2 will expand the top s-expression as much as
possible while expand_expr_1/2 will only try it once. These
functions use the macro definitions in the environment and the
standard pre-defined macros.