/
jsast_typedef.opa
119 lines (98 loc) · 2.92 KB
/
jsast_typedef.opa
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/*
Copyright © 2011 MLstate
This file is part of OPA.
OPA is free software: you can redistribute it and/or modify it under the
terms of the GNU Affero General Public License, version 3, as published by
the Free Software Foundation.
OPA is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
more details.
You should have received a copy of the GNU Affero General Public License
along with OPA. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* Types definitions for the Javascript runtime ast
*
* @category compiler
* @author Mathieu Barbin
* @author Valentin Gatien-Baron
* @stability stabilizing, unfrozen
**/
/**
* {1 About this module}
*
* {1 Where should I start?}
*
* {1 What if I need more?}
*/
/**
* The content of the [JsAst.mini_expr] ident node.
**/
type JsAst.ident = string
/**
* The run-time representation of the js code,
* Should support dependency analysis, and alpha renaming
**/
type JsAst.mini_expr =
/**
* A string evaluated representing js code.
* Can be evaluated at compile or run-time.
**/
{ verbatim : string }
/**
* A reference of a toplevel js ident, separated from the code, to be renamed.
**/
/ { ident : JsAst.ident}
/ { set_distant : llarray(JsAst.ident) }
/**
* A reference to a runtime type name
*/
/ { type_use : ServerAst.type_key }
/ { type_def : ServerAst.type_key }
/**
* A reference to a server function
*/
/ { rpc_use : ServerAst.rpc_key }
/ { rpc_def : ServerAst.rpc_key }
/**
* The type for representing the content of a code_elt
**/
type JsAst.content = llarray(JsAst.mini_expr)
/**
* The type for indexing {!JsAst.code_elt} during the cleaning.
*
* The top-level declaration name.
* References to this ident could be found in nodes {!JsAst.mini_expr} ident cases.
* The ident is :
* - only used when doing runtime cleaning.
* - mandatory for a top-level declaration (otherwise cleaning is broken)
* - empty in case the content is not a top-level declaration. (e.g. lib.js)
* The content contains the complete code_element (header and concrete syntax include)
**/
type JsAst.key_ident =
{ key : string }
/ { ident : JsAst.ident }
/ { key : string ; ident : JsAst.ident }
/**
* The run-time representation of a js top-level declaration.
**/
type JsAst.code_elt = {
ident : JsAst.key_ident
definition : ServerAst.definition
/**
* Some code_elt are tagged as root by the compiler.
* They should not be cleaned.
**/
root : Server.reference(bool)
/**
* The body of the declaration.
**/
content : JsAst.content
}
type JsAst.code = llarray(JsAst.code_elt)
/**
* An intermediate type for folding several JsAst.code
* @private do not enter the implementation of this type.
**/
type JsAst.lexems = list(string)