00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00050 #ifndef __NUSMV_CORE_COMPILE_TYPE_CHECKING_TYPE_CHECKER_H__
00051 #define __NUSMV_CORE_COMPILE_TYPE_CHECKING_TYPE_CHECKER_H__
00052
00053 #include "nusmv/core/node/MasterNodeWalker.h"
00054
00055 #include "nusmv/core/compile/symb_table/SymbType.h"
00056 #include "nusmv/core/compile/symb_table/SymbLayer.h"
00057 #include "nusmv/core/utils/utils.h"
00058
00059
00060
00061
00062
00063
00064
00071 typedef struct TypeChecker_TAG* TypeChecker_ptr;
00072
00079 #define TYPE_CHECKER(self) \
00080 ((TypeChecker_ptr) self)
00081
00087 #define TYPE_CHECKER_CHECK_INSTANCE(self) \
00088 (nusmv_assert(TYPE_CHECKER(self) != TYPE_CHECKER(NULL)))
00089
00090
00091
00092
00093 struct Prop_TAG;
00094 struct SymbTable_TAG;
00095
00096
00099
00100
00101
00102
00113 TypeChecker_ptr
00114 TypeChecker_create(struct SymbTable_TAG* symbolTable);
00115
00128 TypeChecker_ptr TypeChecker_create_with_default_checkers(struct SymbTable_TAG* symbolTable);
00129
00138 void TypeChecker_destroy(TypeChecker_ptr self);
00139
00153 struct SymbTable_TAG*
00154 TypeChecker_get_symb_table(TypeChecker_ptr self);
00155
00163 boolean
00164 TypeChecker_check_symb_table(TypeChecker_ptr self);
00165
00191 boolean
00192 TypeChecker_check_layer(TypeChecker_ptr self,
00193 SymbLayer_ptr layer);
00194
00231 boolean
00232 TypeChecker_check_constrains(TypeChecker_ptr self,
00233 node_ptr init, node_ptr trans,
00234 node_ptr invar, node_ptr assign,
00235 node_ptr justice, node_ptr compassion);
00236
00254 boolean
00255 TypeChecker_check_property(TypeChecker_ptr self,
00256 struct Prop_TAG* property);
00257
00282 boolean
00283 TypeChecker_is_expression_wellformed(TypeChecker_ptr self,
00284 node_ptr expression,
00285 node_ptr context);
00286
00313 boolean
00314 TypeChecker_is_specification_wellformed(TypeChecker_ptr self,
00315 node_ptr expression);
00316
00345 boolean
00346 TypeChecker_is_type_wellformed(TypeChecker_ptr self,
00347 SymbType_ptr type, node_ptr varName);
00348
00371 SymbType_ptr
00372 TypeChecker_get_expression_type(TypeChecker_ptr self,
00373 node_ptr expression,
00374 node_ptr context);
00375
00391 boolean
00392 TypeChecker_is_expression_type_checked(TypeChecker_ptr self,
00393 node_ptr expression,
00394 node_ptr context);
00395
00399 #endif