module Environment: sig
.. end
Operations on AST analysis and runtime environments.
Author(s): Tony BenBrahim < tony.benbrahim at gmail.com >
module StringMap: Map.Make
(
String
)
type
var_info = int * int
Variable information, tuple of index into scope and unique id
type
rec_varmap = {
}
represents variables map in a global or local scope, and reference to parent scope
type
var_prop = {
|
written_after_declared : bool ; |
|
read_after_declared : bool ; |
|
declaration_loc : string * int ; |
}
Properties of variable locations
type
label_pos = int * int * int * int
position of a label with within a template spec, tuple of start begin, start end,
end begin, end ending
type
template_spec_def = Ast.template_spec list * (string, label_pos) Hashtbl.t *
(string * int)
definition of a template specidifcation, used during validity checking.
tuple of sepecfication list and map of labels to label position
type
analysis_env = {
|
globals : rec_varmap ; |
|
num_globals : int ; |
|
locals : rec_varmap list ; |
|
num_locals : int list ; |
|
sdepth : int ; |
|
max_depth : int ; |
|
errors : string list ; |
|
warnings : string list ; |
|
unique_id : int ; |
|
names : string list ; |
|
varprops : (int, var_prop) Hashtbl.t ; |
|
imported : string list ; |
|
templates : (string, template_spec_def) Hashtbl.t ; |
|
constants : (int, Ast.runtime_variable_value) Hashtbl.t ; |
}
The analysis environment
val new_analysis_environment : unit -> analysis_env
returns a newly initialized analysis environment
Returns analysis_env
val get_constant_value : analysis_env -> int -> Ast.runtime_variable_value
gets the constant value for a variable
Returns runtime value of variable
env
: analysis environment
uid
: unique id of variable
val set_constant_value : analysis_env -> int -> Ast.runtime_variable_value -> unit
sets the declaration value for a variable
Returns unit
env
: analysis environment
uid
: unique id of variable
value
: runtime value of variable
val is_constant : analysis_env -> int -> bool
returns whether the variable is a constant
Returns true if the variable is a constant
env
: analysis environment
uid
: unique id of variable
val declare_variable : analysis_env ->
StringMap.key -> analysis_env * int
declare a variable if it does not exist or create a new entry and return new index
Returns a tuple of the modified environment and uid
env
: analysis environment
name
: name of variable to declare
val declare_variable_and_value : analysis_env ->
StringMap.key ->
Ast.runtime_variable_value -> analysis_env
declare a variable if it does not exist or create a new entry and return new index,
then sets constant value
Returns the modified environment
name
: name of variable to declare
env
: analysis environment
value
: the value to initialize the variable with
exception Variable_not_found of string
internal exception used during analysis
val resolve_variable : StringMap.key ->
analysis_env -> Ast.variable_location
Find variable in analysis scope
Raises Variable_not_found
when the variable is not found
Returns location
name
: the variable name
env
: the analysis environment
val uid_from_loc : Ast.variable_location -> int
returns uid from location
Returns the unique id of the variable
val resolve_variable_value : StringMap.key ->
analysis_env ->
Ast.runtime_variable_value * Ast.variable_location
Find variable and value in analysis scope
Raises Variable_not_found
when the variable is not found
Returns tuple of value and location
name
: the variable name
env
: the analysis environment
val new_analysis_scope : analysis_env -> analysis_env
Setups a new scope within the same global or local scope
Returns a new analysis environment setup for the new scope
env
: analysis environment
val pop_scope : analysis_env -> analysis_env
Pops the analysis scope
Returns a new environment with the last scope popped
env
: analysis environment
val new_analysis_stackframe : analysis_env -> analysis_env
Create a new stackframe
Returns a new analysis environment with a new stackframe
env
: analysis environment
val get_depth : analysis_env -> int
Returns the depth of the current stack frame
Returns the depth of the current stack frame, 0 indexed
env
: analysis environment
val add_error : analysis_env ->
string * int -> string -> analysis_env
Add an error to the analysis environemnt
Returns an analysis environment with the error added
env
: the analysis environment
codeloc
: a filename, line number tuple
message
: the error message
val add_warning : analysis_env ->
string * int -> string -> analysis_env
Add a warning to the analysis environemnt
Returns an analysis environment with the warning added
env
: the analysis environment
codeloc
: a filename, line number tuple
message
: the warning message
val has_errors : analysis_env -> bool
Returns true if there are errors in the environment
Returns true if there are errors, false otherwise
env
: the analysis environment
val add_import : analysis_env -> string -> analysis_env
adds an import to the list of imports
Returns the modified environment
env
: analysis environment
filename
: the filename
type
var_op_type =
| |
ReadOp |
| |
WriteOp |
| |
DeclareOp of (string * int) |
| |
DeclareWriteOp of (string * int) |
type of operation performed on variable
val record_usage : analysis_env ->
Ast.variable_location -> var_op_type -> unit
Records a variables property
Returns unit
env
: analysis environment
loc
: variable location
val add_template : analysis_env ->
string ->
Ast.template_spec list ->
(string, label_pos) Hashtbl.t ->
string * int -> analysis_env
Adds a template to the environment
Returns a new environment
*
name
: template name
spec_list
: list of line specifications
labels
: label positions
val has_import : analysis_env -> string -> bool
checks if a file has already been imported
Returns true if already imported, false otherwise
env
: analysis environment
filename
: the filename to check
val get_value : Ast.runtime_env -> Ast.variable_location -> Ast.runtime_variable_value
Retrieves a value at a location
Returns the value at the selected location
env
: a runtime environment
val set_value : Ast.runtime_env ->
Ast.runtime_variable_value ->
Ast.variable_location -> Ast.runtime_variable_value
Sets a value at a location
Returns the value that was set
env
: a runtime environment
value
: the value to set
val get_loc_name : Ast.runtime_env -> Ast.variable_location -> string
Returns the name of a location
Returns the name of the variable at location loc
env
: the runtime environment