clipsruby 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/ext/clipsruby/agenda.c +1373 -0
- data/ext/clipsruby/agenda.h +169 -0
- data/ext/clipsruby/analysis.c +1142 -0
- data/ext/clipsruby/analysis.h +61 -0
- data/ext/clipsruby/argacces.c +526 -0
- data/ext/clipsruby/argacces.h +77 -0
- data/ext/clipsruby/bload.c +884 -0
- data/ext/clipsruby/bload.h +94 -0
- data/ext/clipsruby/bmathfun.c +557 -0
- data/ext/clipsruby/bmathfun.h +66 -0
- data/ext/clipsruby/bsave.c +634 -0
- data/ext/clipsruby/bsave.h +130 -0
- data/ext/clipsruby/classcom.c +976 -0
- data/ext/clipsruby/classcom.h +115 -0
- data/ext/clipsruby/classexm.c +1376 -0
- data/ext/clipsruby/classexm.h +97 -0
- data/ext/clipsruby/classfun.c +1392 -0
- data/ext/clipsruby/classfun.h +164 -0
- data/ext/clipsruby/classinf.c +1245 -0
- data/ext/clipsruby/classinf.h +94 -0
- data/ext/clipsruby/classini.c +843 -0
- data/ext/clipsruby/classini.h +75 -0
- data/ext/clipsruby/classpsr.c +957 -0
- data/ext/clipsruby/classpsr.h +73 -0
- data/ext/clipsruby/clips.h +133 -0
- data/ext/clipsruby/clipsruby.c +619 -0
- data/ext/clipsruby/clsltpsr.c +931 -0
- data/ext/clipsruby/clsltpsr.h +72 -0
- data/ext/clipsruby/commline.c +1217 -0
- data/ext/clipsruby/commline.h +131 -0
- data/ext/clipsruby/conscomp.c +1593 -0
- data/ext/clipsruby/conscomp.h +150 -0
- data/ext/clipsruby/constant.h +264 -0
- data/ext/clipsruby/constrct.c +1090 -0
- data/ext/clipsruby/constrct.h +216 -0
- data/ext/clipsruby/constrnt.c +554 -0
- data/ext/clipsruby/constrnt.h +132 -0
- data/ext/clipsruby/crstrtgy.c +1088 -0
- data/ext/clipsruby/crstrtgy.h +85 -0
- data/ext/clipsruby/cstrcbin.c +185 -0
- data/ext/clipsruby/cstrcbin.h +61 -0
- data/ext/clipsruby/cstrccmp.h +43 -0
- data/ext/clipsruby/cstrccom.c +1791 -0
- data/ext/clipsruby/cstrccom.h +115 -0
- data/ext/clipsruby/cstrcpsr.c +835 -0
- data/ext/clipsruby/cstrcpsr.h +97 -0
- data/ext/clipsruby/cstrnbin.c +282 -0
- data/ext/clipsruby/cstrnbin.h +55 -0
- data/ext/clipsruby/cstrnchk.c +826 -0
- data/ext/clipsruby/cstrnchk.h +91 -0
- data/ext/clipsruby/cstrncmp.c +238 -0
- data/ext/clipsruby/cstrncmp.h +57 -0
- data/ext/clipsruby/cstrnops.c +1176 -0
- data/ext/clipsruby/cstrnops.h +47 -0
- data/ext/clipsruby/cstrnpsr.c +1394 -0
- data/ext/clipsruby/cstrnpsr.h +88 -0
- data/ext/clipsruby/cstrnutl.c +564 -0
- data/ext/clipsruby/cstrnutl.h +54 -0
- data/ext/clipsruby/default.c +454 -0
- data/ext/clipsruby/default.h +57 -0
- data/ext/clipsruby/defins.c +971 -0
- data/ext/clipsruby/defins.h +127 -0
- data/ext/clipsruby/developr.c +677 -0
- data/ext/clipsruby/developr.h +69 -0
- data/ext/clipsruby/dffctbin.c +477 -0
- data/ext/clipsruby/dffctbin.h +76 -0
- data/ext/clipsruby/dffctbsc.c +308 -0
- data/ext/clipsruby/dffctbsc.h +72 -0
- data/ext/clipsruby/dffctcmp.c +297 -0
- data/ext/clipsruby/dffctcmp.h +44 -0
- data/ext/clipsruby/dffctdef.c +364 -0
- data/ext/clipsruby/dffctdef.h +104 -0
- data/ext/clipsruby/dffctpsr.c +179 -0
- data/ext/clipsruby/dffctpsr.h +49 -0
- data/ext/clipsruby/dffnxbin.c +520 -0
- data/ext/clipsruby/dffnxbin.h +67 -0
- data/ext/clipsruby/dffnxcmp.c +378 -0
- data/ext/clipsruby/dffnxcmp.h +54 -0
- data/ext/clipsruby/dffnxexe.c +241 -0
- data/ext/clipsruby/dffnxexe.h +58 -0
- data/ext/clipsruby/dffnxfun.c +1192 -0
- data/ext/clipsruby/dffnxfun.h +155 -0
- data/ext/clipsruby/dffnxpsr.c +514 -0
- data/ext/clipsruby/dffnxpsr.h +57 -0
- data/ext/clipsruby/dfinsbin.c +509 -0
- data/ext/clipsruby/dfinsbin.h +66 -0
- data/ext/clipsruby/dfinscmp.c +345 -0
- data/ext/clipsruby/dfinscmp.h +48 -0
- data/ext/clipsruby/drive.c +1191 -0
- data/ext/clipsruby/drive.h +65 -0
- data/ext/clipsruby/emathfun.c +1213 -0
- data/ext/clipsruby/emathfun.h +99 -0
- data/ext/clipsruby/engine.c +1568 -0
- data/ext/clipsruby/engine.h +203 -0
- data/ext/clipsruby/entities.h +276 -0
- data/ext/clipsruby/envrnbld.c +514 -0
- data/ext/clipsruby/envrnbld.h +40 -0
- data/ext/clipsruby/envrnmnt.c +257 -0
- data/ext/clipsruby/envrnmnt.h +112 -0
- data/ext/clipsruby/evaluatn.c +1736 -0
- data/ext/clipsruby/evaluatn.h +211 -0
- data/ext/clipsruby/expressn.c +494 -0
- data/ext/clipsruby/expressn.h +154 -0
- data/ext/clipsruby/exprnbin.c +538 -0
- data/ext/clipsruby/exprnbin.h +60 -0
- data/ext/clipsruby/exprnops.c +564 -0
- data/ext/clipsruby/exprnops.h +67 -0
- data/ext/clipsruby/exprnpsr.c +1112 -0
- data/ext/clipsruby/exprnpsr.h +98 -0
- data/ext/clipsruby/extconf.rb +2 -0
- data/ext/clipsruby/extnfunc.c +1015 -0
- data/ext/clipsruby/extnfunc.h +157 -0
- data/ext/clipsruby/factbin.c +447 -0
- data/ext/clipsruby/factbin.h +56 -0
- data/ext/clipsruby/factbld.c +1035 -0
- data/ext/clipsruby/factbld.h +63 -0
- data/ext/clipsruby/factcmp.c +386 -0
- data/ext/clipsruby/factcmp.h +46 -0
- data/ext/clipsruby/factcom.c +759 -0
- data/ext/clipsruby/factcom.h +80 -0
- data/ext/clipsruby/factfile.c +1761 -0
- data/ext/clipsruby/factfile.h +54 -0
- data/ext/clipsruby/factfun.c +682 -0
- data/ext/clipsruby/factfun.h +77 -0
- data/ext/clipsruby/factgen.c +1305 -0
- data/ext/clipsruby/factgen.h +229 -0
- data/ext/clipsruby/facthsh.c +438 -0
- data/ext/clipsruby/facthsh.h +81 -0
- data/ext/clipsruby/factlhs.c +250 -0
- data/ext/clipsruby/factlhs.h +54 -0
- data/ext/clipsruby/factmch.c +905 -0
- data/ext/clipsruby/factmch.h +68 -0
- data/ext/clipsruby/factmngr.c +3373 -0
- data/ext/clipsruby/factmngr.h +325 -0
- data/ext/clipsruby/factprt.c +498 -0
- data/ext/clipsruby/factprt.h +60 -0
- data/ext/clipsruby/factqpsr.c +796 -0
- data/ext/clipsruby/factqpsr.h +61 -0
- data/ext/clipsruby/factqury.c +1267 -0
- data/ext/clipsruby/factqury.h +112 -0
- data/ext/clipsruby/factrete.c +978 -0
- data/ext/clipsruby/factrete.h +70 -0
- data/ext/clipsruby/factrhs.c +667 -0
- data/ext/clipsruby/factrhs.h +55 -0
- data/ext/clipsruby/filecom.c +353 -0
- data/ext/clipsruby/filecom.h +137 -0
- data/ext/clipsruby/filertr.c +481 -0
- data/ext/clipsruby/filertr.h +94 -0
- data/ext/clipsruby/fileutil.c +1020 -0
- data/ext/clipsruby/fileutil.h +50 -0
- data/ext/clipsruby/generate.c +1079 -0
- data/ext/clipsruby/generate.h +57 -0
- data/ext/clipsruby/genrcbin.c +902 -0
- data/ext/clipsruby/genrcbin.h +69 -0
- data/ext/clipsruby/genrccmp.c +640 -0
- data/ext/clipsruby/genrccmp.h +59 -0
- data/ext/clipsruby/genrccom.c +2017 -0
- data/ext/clipsruby/genrccom.h +119 -0
- data/ext/clipsruby/genrcexe.c +737 -0
- data/ext/clipsruby/genrcexe.h +73 -0
- data/ext/clipsruby/genrcfun.c +890 -0
- data/ext/clipsruby/genrcfun.h +185 -0
- data/ext/clipsruby/genrcpsr.c +1618 -0
- data/ext/clipsruby/genrcpsr.h +80 -0
- data/ext/clipsruby/globlbin.c +458 -0
- data/ext/clipsruby/globlbin.h +71 -0
- data/ext/clipsruby/globlbsc.c +361 -0
- data/ext/clipsruby/globlbsc.h +83 -0
- data/ext/clipsruby/globlcmp.c +330 -0
- data/ext/clipsruby/globlcmp.h +52 -0
- data/ext/clipsruby/globlcom.c +289 -0
- data/ext/clipsruby/globlcom.h +63 -0
- data/ext/clipsruby/globldef.c +1087 -0
- data/ext/clipsruby/globldef.h +151 -0
- data/ext/clipsruby/globlpsr.c +530 -0
- data/ext/clipsruby/globlpsr.h +59 -0
- data/ext/clipsruby/immthpsr.c +431 -0
- data/ext/clipsruby/immthpsr.h +55 -0
- data/ext/clipsruby/incrrset.c +530 -0
- data/ext/clipsruby/incrrset.h +73 -0
- data/ext/clipsruby/inherpsr.c +850 -0
- data/ext/clipsruby/inherpsr.h +52 -0
- data/ext/clipsruby/inscom.c +2076 -0
- data/ext/clipsruby/inscom.h +182 -0
- data/ext/clipsruby/insfile.c +1764 -0
- data/ext/clipsruby/insfile.h +96 -0
- data/ext/clipsruby/insfun.c +1451 -0
- data/ext/clipsruby/insfun.h +134 -0
- data/ext/clipsruby/insmngr.c +2550 -0
- data/ext/clipsruby/insmngr.h +125 -0
- data/ext/clipsruby/insmoddp.c +1041 -0
- data/ext/clipsruby/insmoddp.h +91 -0
- data/ext/clipsruby/insmult.c +804 -0
- data/ext/clipsruby/insmult.h +62 -0
- data/ext/clipsruby/inspsr.c +602 -0
- data/ext/clipsruby/inspsr.h +60 -0
- data/ext/clipsruby/insquery.c +1278 -0
- data/ext/clipsruby/insquery.h +115 -0
- data/ext/clipsruby/insqypsr.c +729 -0
- data/ext/clipsruby/insqypsr.h +63 -0
- data/ext/clipsruby/iofun.c +2045 -0
- data/ext/clipsruby/iofun.h +116 -0
- data/ext/clipsruby/lgcldpnd.c +644 -0
- data/ext/clipsruby/lgcldpnd.h +75 -0
- data/ext/clipsruby/main.c +112 -0
- data/ext/clipsruby/match.h +142 -0
- data/ext/clipsruby/memalloc.c +481 -0
- data/ext/clipsruby/memalloc.h +197 -0
- data/ext/clipsruby/miscfun.c +1801 -0
- data/ext/clipsruby/miscfun.h +132 -0
- data/ext/clipsruby/modulbin.c +607 -0
- data/ext/clipsruby/modulbin.h +84 -0
- data/ext/clipsruby/modulbsc.c +347 -0
- data/ext/clipsruby/modulbsc.h +67 -0
- data/ext/clipsruby/modulcmp.c +499 -0
- data/ext/clipsruby/modulcmp.h +54 -0
- data/ext/clipsruby/moduldef.c +817 -0
- data/ext/clipsruby/moduldef.h +271 -0
- data/ext/clipsruby/modulpsr.c +1150 -0
- data/ext/clipsruby/modulpsr.h +69 -0
- data/ext/clipsruby/modulutl.c +1036 -0
- data/ext/clipsruby/modulutl.h +84 -0
- data/ext/clipsruby/msgcom.c +1221 -0
- data/ext/clipsruby/msgcom.h +125 -0
- data/ext/clipsruby/msgfun.c +1076 -0
- data/ext/clipsruby/msgfun.h +118 -0
- data/ext/clipsruby/msgpass.c +1441 -0
- data/ext/clipsruby/msgpass.h +103 -0
- data/ext/clipsruby/msgpsr.c +698 -0
- data/ext/clipsruby/msgpsr.h +73 -0
- data/ext/clipsruby/multifld.c +1404 -0
- data/ext/clipsruby/multifld.h +130 -0
- data/ext/clipsruby/multifun.c +2182 -0
- data/ext/clipsruby/multifun.h +102 -0
- data/ext/clipsruby/network.h +142 -0
- data/ext/clipsruby/objbin.c +1522 -0
- data/ext/clipsruby/objbin.h +79 -0
- data/ext/clipsruby/objcmp.c +1507 -0
- data/ext/clipsruby/objcmp.h +71 -0
- data/ext/clipsruby/object.h +260 -0
- data/ext/clipsruby/objrtbin.c +701 -0
- data/ext/clipsruby/objrtbin.h +79 -0
- data/ext/clipsruby/objrtbld.c +2393 -0
- data/ext/clipsruby/objrtbld.h +66 -0
- data/ext/clipsruby/objrtcmp.c +734 -0
- data/ext/clipsruby/objrtcmp.h +66 -0
- data/ext/clipsruby/objrtfnx.c +1330 -0
- data/ext/clipsruby/objrtfnx.h +222 -0
- data/ext/clipsruby/objrtgen.c +736 -0
- data/ext/clipsruby/objrtgen.h +63 -0
- data/ext/clipsruby/objrtmch.c +1524 -0
- data/ext/clipsruby/objrtmch.h +160 -0
- data/ext/clipsruby/parsefun.c +415 -0
- data/ext/clipsruby/parsefun.h +67 -0
- data/ext/clipsruby/pattern.c +1265 -0
- data/ext/clipsruby/pattern.h +163 -0
- data/ext/clipsruby/pprint.c +328 -0
- data/ext/clipsruby/pprint.h +79 -0
- data/ext/clipsruby/prccode.c +1478 -0
- data/ext/clipsruby/prccode.h +145 -0
- data/ext/clipsruby/prcdrfun.c +640 -0
- data/ext/clipsruby/prcdrfun.h +95 -0
- data/ext/clipsruby/prcdrpsr.c +1068 -0
- data/ext/clipsruby/prcdrpsr.h +79 -0
- data/ext/clipsruby/prdctfun.c +869 -0
- data/ext/clipsruby/prdctfun.h +77 -0
- data/ext/clipsruby/prntutil.c +878 -0
- data/ext/clipsruby/prntutil.h +125 -0
- data/ext/clipsruby/proflfun.c +827 -0
- data/ext/clipsruby/proflfun.h +118 -0
- data/ext/clipsruby/reorder.c +2082 -0
- data/ext/clipsruby/reorder.h +172 -0
- data/ext/clipsruby/reteutil.c +1732 -0
- data/ext/clipsruby/reteutil.h +111 -0
- data/ext/clipsruby/retract.c +710 -0
- data/ext/clipsruby/retract.h +74 -0
- data/ext/clipsruby/router.c +737 -0
- data/ext/clipsruby/router.h +147 -0
- data/ext/clipsruby/rulebin.c +1136 -0
- data/ext/clipsruby/rulebin.h +153 -0
- data/ext/clipsruby/rulebld.c +1328 -0
- data/ext/clipsruby/rulebld.h +62 -0
- data/ext/clipsruby/rulebsc.c +517 -0
- data/ext/clipsruby/rulebsc.h +91 -0
- data/ext/clipsruby/rulecmp.c +733 -0
- data/ext/clipsruby/rulecmp.h +63 -0
- data/ext/clipsruby/rulecom.c +1583 -0
- data/ext/clipsruby/rulecom.h +116 -0
- data/ext/clipsruby/rulecstr.c +892 -0
- data/ext/clipsruby/rulecstr.h +53 -0
- data/ext/clipsruby/ruledef.c +559 -0
- data/ext/clipsruby/ruledef.h +179 -0
- data/ext/clipsruby/ruledlt.c +599 -0
- data/ext/clipsruby/ruledlt.h +58 -0
- data/ext/clipsruby/rulelhs.c +1216 -0
- data/ext/clipsruby/rulelhs.h +52 -0
- data/ext/clipsruby/rulepsr.c +1073 -0
- data/ext/clipsruby/rulepsr.h +61 -0
- data/ext/clipsruby/scanner.c +856 -0
- data/ext/clipsruby/scanner.h +112 -0
- data/ext/clipsruby/setup.h +488 -0
- data/ext/clipsruby/sortfun.c +433 -0
- data/ext/clipsruby/sortfun.h +55 -0
- data/ext/clipsruby/strngfun.c +1173 -0
- data/ext/clipsruby/strngfun.h +96 -0
- data/ext/clipsruby/strngrtr.c +523 -0
- data/ext/clipsruby/strngrtr.h +97 -0
- data/ext/clipsruby/symblbin.c +648 -0
- data/ext/clipsruby/symblbin.h +64 -0
- data/ext/clipsruby/symblcmp.c +893 -0
- data/ext/clipsruby/symblcmp.h +61 -0
- data/ext/clipsruby/symbol.c +1961 -0
- data/ext/clipsruby/symbol.h +243 -0
- data/ext/clipsruby/sysdep.c +894 -0
- data/ext/clipsruby/sysdep.h +164 -0
- data/ext/clipsruby/textpro.c +1388 -0
- data/ext/clipsruby/textpro.h +77 -0
- data/ext/clipsruby/tmpltbin.c +609 -0
- data/ext/clipsruby/tmpltbin.h +108 -0
- data/ext/clipsruby/tmpltbsc.c +327 -0
- data/ext/clipsruby/tmpltbsc.h +87 -0
- data/ext/clipsruby/tmpltcmp.c +450 -0
- data/ext/clipsruby/tmpltcmp.h +57 -0
- data/ext/clipsruby/tmpltdef.c +584 -0
- data/ext/clipsruby/tmpltdef.h +155 -0
- data/ext/clipsruby/tmpltfun.c +2477 -0
- data/ext/clipsruby/tmpltfun.h +122 -0
- data/ext/clipsruby/tmpltlhs.c +379 -0
- data/ext/clipsruby/tmpltlhs.h +50 -0
- data/ext/clipsruby/tmpltpsr.c +819 -0
- data/ext/clipsruby/tmpltpsr.h +59 -0
- data/ext/clipsruby/tmpltrhs.c +595 -0
- data/ext/clipsruby/tmpltrhs.h +55 -0
- data/ext/clipsruby/tmpltutl.c +637 -0
- data/ext/clipsruby/tmpltutl.h +82 -0
- data/ext/clipsruby/userdata.c +156 -0
- data/ext/clipsruby/userdata.h +72 -0
- data/ext/clipsruby/userfunctions.c +70 -0
- data/ext/clipsruby/usrsetup.h +7 -0
- data/ext/clipsruby/utility.c +1594 -0
- data/ext/clipsruby/utility.h +250 -0
- data/ext/clipsruby/watch.c +865 -0
- data/ext/clipsruby/watch.h +124 -0
- data/lib/clipsruby.rb +1 -0
- metadata +388 -0
@@ -0,0 +1,538 @@
|
|
1
|
+
/*******************************************************/
|
2
|
+
/* "C" Language Integrated Production System */
|
3
|
+
/* */
|
4
|
+
/* CLIPS Version 6.40 02/02/21 */
|
5
|
+
/* */
|
6
|
+
/* EXPRESSION BSAVE/BLOAD MODULE */
|
7
|
+
/*******************************************************/
|
8
|
+
|
9
|
+
/*************************************************************/
|
10
|
+
/* Purpose: Implements the binary save/load feature for the */
|
11
|
+
/* expression data structure. */
|
12
|
+
/* */
|
13
|
+
/* Principal Programmer(s): */
|
14
|
+
/* Gary D. Riley */
|
15
|
+
/* */
|
16
|
+
/* Contributing Programmer(s): */
|
17
|
+
/* Brian L. Dantes */
|
18
|
+
/* */
|
19
|
+
/* Revision History: */
|
20
|
+
/* */
|
21
|
+
/* 6.30: Changed integer type/precision. */
|
22
|
+
/* */
|
23
|
+
/* 6.32: Bsave crash fix for external address type. */
|
24
|
+
/* */
|
25
|
+
/* 6.40: Pragma once and other inclusion changes. */
|
26
|
+
/* */
|
27
|
+
/* Removed use of void pointers for specific */
|
28
|
+
/* data structures. */
|
29
|
+
/* */
|
30
|
+
/*************************************************************/
|
31
|
+
|
32
|
+
#include "setup.h"
|
33
|
+
|
34
|
+
#if (BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE)
|
35
|
+
|
36
|
+
#include <stdio.h>
|
37
|
+
|
38
|
+
#include "bload.h"
|
39
|
+
#include "bsave.h"
|
40
|
+
#include "constrct.h"
|
41
|
+
#include "dffctdef.h"
|
42
|
+
#include "envrnmnt.h"
|
43
|
+
#include "extnfunc.h"
|
44
|
+
#include "memalloc.h"
|
45
|
+
#include "moduldef.h"
|
46
|
+
|
47
|
+
#if DEFRULE_CONSTRUCT
|
48
|
+
#include "network.h"
|
49
|
+
#endif
|
50
|
+
|
51
|
+
#if DEFGENERIC_CONSTRUCT
|
52
|
+
#include "genrcbin.h"
|
53
|
+
#endif
|
54
|
+
|
55
|
+
#if DEFFUNCTION_CONSTRUCT
|
56
|
+
#include "dffnxbin.h"
|
57
|
+
#endif
|
58
|
+
|
59
|
+
#if DEFTEMPLATE_CONSTRUCT
|
60
|
+
#include "factmngr.h"
|
61
|
+
#include "tmpltbin.h"
|
62
|
+
#endif
|
63
|
+
|
64
|
+
#if DEFGLOBAL_CONSTRUCT
|
65
|
+
#include "globlbin.h"
|
66
|
+
#endif
|
67
|
+
|
68
|
+
#if OBJECT_SYSTEM
|
69
|
+
#include "objbin.h"
|
70
|
+
#include "insfun.h"
|
71
|
+
#include "inscom.h"
|
72
|
+
#endif
|
73
|
+
|
74
|
+
#include "exprnbin.h"
|
75
|
+
|
76
|
+
/***************************************/
|
77
|
+
/* LOCAL INTERNAL FUNCTION DEFINITIONS */
|
78
|
+
/***************************************/
|
79
|
+
|
80
|
+
static void UpdateExpression(Environment *,void *,unsigned long);
|
81
|
+
|
82
|
+
/***********************************************************/
|
83
|
+
/* AllocateExpressions: Determines the amount of space */
|
84
|
+
/* required for loading the binary image of expressions */
|
85
|
+
/* and allocates that amount of space. */
|
86
|
+
/***********************************************************/
|
87
|
+
void AllocateExpressions(
|
88
|
+
Environment *theEnv)
|
89
|
+
{
|
90
|
+
size_t space;
|
91
|
+
|
92
|
+
GenReadBinary(theEnv,&ExpressionData(theEnv)->NumberOfExpressions,sizeof(long));
|
93
|
+
if (ExpressionData(theEnv)->NumberOfExpressions == 0L)
|
94
|
+
ExpressionData(theEnv)->ExpressionArray = NULL;
|
95
|
+
else
|
96
|
+
{
|
97
|
+
space = ExpressionData(theEnv)->NumberOfExpressions * sizeof(struct expr);
|
98
|
+
ExpressionData(theEnv)->ExpressionArray = (struct expr *) genalloc(theEnv,space);
|
99
|
+
}
|
100
|
+
}
|
101
|
+
|
102
|
+
/**********************************************/
|
103
|
+
/* RefreshExpressions: Refreshes the pointers */
|
104
|
+
/* used by the expression binary image. */
|
105
|
+
/**********************************************/
|
106
|
+
void RefreshExpressions(
|
107
|
+
Environment *theEnv)
|
108
|
+
{
|
109
|
+
if (ExpressionData(theEnv)->ExpressionArray == NULL) return;
|
110
|
+
|
111
|
+
BloadandRefresh(theEnv,ExpressionData(theEnv)->NumberOfExpressions,
|
112
|
+
sizeof(BSAVE_EXPRESSION),UpdateExpression);
|
113
|
+
}
|
114
|
+
|
115
|
+
/*********************************************************
|
116
|
+
NAME : UpdateExpression
|
117
|
+
DESCRIPTION : Given a bloaded expression buffer,
|
118
|
+
this routine refreshes the pointers
|
119
|
+
in the expression array
|
120
|
+
INPUTS : 1) a bloaded expression buffer
|
121
|
+
2) the index of the expression to refresh
|
122
|
+
RETURNS : Nothing useful
|
123
|
+
SIDE EFFECTS : Expression updated
|
124
|
+
NOTES : None
|
125
|
+
*********************************************************/
|
126
|
+
static void UpdateExpression(
|
127
|
+
Environment *theEnv,
|
128
|
+
void *buf,
|
129
|
+
unsigned long obji)
|
130
|
+
{
|
131
|
+
BSAVE_EXPRESSION *bexp;
|
132
|
+
unsigned long theIndex;
|
133
|
+
|
134
|
+
bexp = (BSAVE_EXPRESSION *) buf;
|
135
|
+
ExpressionData(theEnv)->ExpressionArray[obji].type = bexp->type;
|
136
|
+
switch(bexp->type)
|
137
|
+
{
|
138
|
+
case FCALL:
|
139
|
+
ExpressionData(theEnv)->ExpressionArray[obji].value = BloadData(theEnv)->FunctionArray[bexp->value];
|
140
|
+
break;
|
141
|
+
|
142
|
+
case GCALL:
|
143
|
+
#if DEFGENERIC_CONSTRUCT
|
144
|
+
ExpressionData(theEnv)->ExpressionArray[obji].value = GenericPointer(bexp->value);
|
145
|
+
#else
|
146
|
+
ExpressionData(theEnv)->ExpressionArray[obji].value = NULL;
|
147
|
+
#endif
|
148
|
+
break;
|
149
|
+
|
150
|
+
case PCALL:
|
151
|
+
#if DEFFUNCTION_CONSTRUCT
|
152
|
+
ExpressionData(theEnv)->ExpressionArray[obji].value = DeffunctionPointer(bexp->value);
|
153
|
+
#else
|
154
|
+
ExpressionData(theEnv)->ExpressionArray[obji].value = NULL;
|
155
|
+
#endif
|
156
|
+
break;
|
157
|
+
|
158
|
+
case DEFTEMPLATE_PTR:
|
159
|
+
#if DEFTEMPLATE_CONSTRUCT
|
160
|
+
ExpressionData(theEnv)->ExpressionArray[obji].value = DeftemplatePointer(bexp->value);
|
161
|
+
#else
|
162
|
+
ExpressionData(theEnv)->ExpressionArray[obji].value = NULL;
|
163
|
+
#endif
|
164
|
+
break;
|
165
|
+
|
166
|
+
case DEFCLASS_PTR:
|
167
|
+
#if OBJECT_SYSTEM
|
168
|
+
ExpressionData(theEnv)->ExpressionArray[obji].value = DefclassPointer(bexp->value);
|
169
|
+
#else
|
170
|
+
ExpressionData(theEnv)->ExpressionArray[obji].value = NULL;
|
171
|
+
#endif
|
172
|
+
break;
|
173
|
+
|
174
|
+
case DEFGLOBAL_PTR:
|
175
|
+
|
176
|
+
#if DEFGLOBAL_CONSTRUCT
|
177
|
+
ExpressionData(theEnv)->ExpressionArray[obji].value = DefglobalPointer(bexp->value);
|
178
|
+
#else
|
179
|
+
ExpressionData(theEnv)->ExpressionArray[obji].value = NULL;
|
180
|
+
#endif
|
181
|
+
break;
|
182
|
+
|
183
|
+
|
184
|
+
case INTEGER_TYPE:
|
185
|
+
ExpressionData(theEnv)->ExpressionArray[obji].value = SymbolData(theEnv)->IntegerArray[bexp->value];
|
186
|
+
IncrementIntegerCount(ExpressionData(theEnv)->ExpressionArray[obji].integerValue);
|
187
|
+
break;
|
188
|
+
|
189
|
+
case FLOAT_TYPE:
|
190
|
+
ExpressionData(theEnv)->ExpressionArray[obji].value = SymbolData(theEnv)->FloatArray[bexp->value];
|
191
|
+
IncrementFloatCount(ExpressionData(theEnv)->ExpressionArray[obji].floatValue);
|
192
|
+
break;
|
193
|
+
|
194
|
+
case INSTANCE_NAME_TYPE:
|
195
|
+
#if ! OBJECT_SYSTEM
|
196
|
+
ExpressionData(theEnv)->ExpressionArray[obji].type = SYMBOL_TYPE;
|
197
|
+
#endif
|
198
|
+
case GBL_VARIABLE:
|
199
|
+
case SYMBOL_TYPE:
|
200
|
+
case STRING_TYPE:
|
201
|
+
ExpressionData(theEnv)->ExpressionArray[obji].value = SymbolData(theEnv)->SymbolArray[bexp->value];
|
202
|
+
IncrementLexemeCount(ExpressionData(theEnv)->ExpressionArray[obji].lexemeValue);
|
203
|
+
break;
|
204
|
+
|
205
|
+
#if DEFTEMPLATE_CONSTRUCT
|
206
|
+
case FACT_ADDRESS_TYPE:
|
207
|
+
ExpressionData(theEnv)->ExpressionArray[obji].value = &FactData(theEnv)->DummyFact;
|
208
|
+
RetainFact((Fact *) ExpressionData(theEnv)->ExpressionArray[obji].value);
|
209
|
+
break;
|
210
|
+
#endif
|
211
|
+
|
212
|
+
#if OBJECT_SYSTEM
|
213
|
+
case INSTANCE_ADDRESS_TYPE:
|
214
|
+
ExpressionData(theEnv)->ExpressionArray[obji].value = &InstanceData(theEnv)->DummyInstance;
|
215
|
+
RetainInstance((Instance *) ExpressionData(theEnv)->ExpressionArray[obji].value);
|
216
|
+
break;
|
217
|
+
#endif
|
218
|
+
|
219
|
+
case EXTERNAL_ADDRESS_TYPE:
|
220
|
+
ExpressionData(theEnv)->ExpressionArray[obji].value = CreateCExternalAddress(theEnv,NULL);
|
221
|
+
IncrementExternalAddressCount(ExpressionData(theEnv)->ExpressionArray[obji].value);
|
222
|
+
break;
|
223
|
+
|
224
|
+
case VOID_TYPE:
|
225
|
+
break;
|
226
|
+
|
227
|
+
default:
|
228
|
+
if (EvaluationData(theEnv)->PrimitivesArray[bexp->type] == NULL) break;
|
229
|
+
if (EvaluationData(theEnv)->PrimitivesArray[bexp->type]->bitMap)
|
230
|
+
{
|
231
|
+
ExpressionData(theEnv)->ExpressionArray[obji].value = SymbolData(theEnv)->BitMapArray[bexp->value];
|
232
|
+
IncrementBitMapCount((CLIPSBitMap *) ExpressionData(theEnv)->ExpressionArray[obji].value);
|
233
|
+
}
|
234
|
+
break;
|
235
|
+
}
|
236
|
+
|
237
|
+
theIndex = bexp->nextArg;
|
238
|
+
if (theIndex == ULONG_MAX)
|
239
|
+
{ ExpressionData(theEnv)->ExpressionArray[obji].nextArg = NULL; }
|
240
|
+
else
|
241
|
+
{ ExpressionData(theEnv)->ExpressionArray[obji].nextArg = (struct expr *) &ExpressionData(theEnv)->ExpressionArray[theIndex]; }
|
242
|
+
|
243
|
+
theIndex = bexp->argList;
|
244
|
+
if (theIndex == ULONG_MAX)
|
245
|
+
{ ExpressionData(theEnv)->ExpressionArray[obji].argList = NULL; }
|
246
|
+
else
|
247
|
+
{ ExpressionData(theEnv)->ExpressionArray[obji].argList = (struct expr *) &ExpressionData(theEnv)->ExpressionArray[theIndex]; }
|
248
|
+
}
|
249
|
+
|
250
|
+
/*********************************************/
|
251
|
+
/* ClearBloadedExpressions: Clears the space */
|
252
|
+
/* utilized by an expression binary image. */
|
253
|
+
/*********************************************/
|
254
|
+
void ClearBloadedExpressions(
|
255
|
+
Environment *theEnv)
|
256
|
+
{
|
257
|
+
unsigned long i;
|
258
|
+
size_t space;
|
259
|
+
|
260
|
+
/*===============================================*/
|
261
|
+
/* Update the busy counts of atomic data values. */
|
262
|
+
/*===============================================*/
|
263
|
+
|
264
|
+
for (i = 0; i < ExpressionData(theEnv)->NumberOfExpressions; i++)
|
265
|
+
{
|
266
|
+
switch (ExpressionData(theEnv)->ExpressionArray[i].type)
|
267
|
+
{
|
268
|
+
case SYMBOL_TYPE :
|
269
|
+
case STRING_TYPE :
|
270
|
+
case INSTANCE_NAME_TYPE :
|
271
|
+
case GBL_VARIABLE :
|
272
|
+
ReleaseLexeme(theEnv,ExpressionData(theEnv)->ExpressionArray[i].lexemeValue);
|
273
|
+
break;
|
274
|
+
case FLOAT_TYPE :
|
275
|
+
ReleaseFloat(theEnv,ExpressionData(theEnv)->ExpressionArray[i].floatValue);
|
276
|
+
break;
|
277
|
+
case INTEGER_TYPE :
|
278
|
+
ReleaseInteger(theEnv,ExpressionData(theEnv)->ExpressionArray[i].integerValue);
|
279
|
+
break;
|
280
|
+
|
281
|
+
#if DEFTEMPLATE_CONSTRUCT
|
282
|
+
case FACT_ADDRESS_TYPE :
|
283
|
+
ReleaseFact(ExpressionData(theEnv)->ExpressionArray[i].factValue);
|
284
|
+
break;
|
285
|
+
#endif
|
286
|
+
|
287
|
+
#if OBJECT_SYSTEM
|
288
|
+
case INSTANCE_ADDRESS_TYPE :
|
289
|
+
ReleaseInstance(ExpressionData(theEnv)->ExpressionArray[i].instanceValue);
|
290
|
+
break;
|
291
|
+
#endif
|
292
|
+
|
293
|
+
case EXTERNAL_ADDRESS_TYPE:
|
294
|
+
ReleaseExternalAddress(theEnv,ExpressionData(theEnv)->ExpressionArray[i].externalAddressValue);
|
295
|
+
break;
|
296
|
+
|
297
|
+
case VOID_TYPE:
|
298
|
+
break;
|
299
|
+
|
300
|
+
default:
|
301
|
+
if (EvaluationData(theEnv)->PrimitivesArray[ExpressionData(theEnv)->ExpressionArray[i].type] == NULL) break;
|
302
|
+
if (EvaluationData(theEnv)->PrimitivesArray[ExpressionData(theEnv)->ExpressionArray[i].type]->bitMap)
|
303
|
+
{ DecrementBitMapReferenceCount(theEnv,ExpressionData(theEnv)->ExpressionArray[i].bitMapValue); }
|
304
|
+
break;
|
305
|
+
}
|
306
|
+
}
|
307
|
+
|
308
|
+
/*===================================*/
|
309
|
+
/* Free the binary expression array. */
|
310
|
+
/*===================================*/
|
311
|
+
|
312
|
+
space = ExpressionData(theEnv)->NumberOfExpressions * sizeof(struct expr);
|
313
|
+
if (space != 0) genfree(theEnv,ExpressionData(theEnv)->ExpressionArray,space);
|
314
|
+
ExpressionData(theEnv)->ExpressionArray = 0;
|
315
|
+
}
|
316
|
+
|
317
|
+
|
318
|
+
#if BLOAD_AND_BSAVE
|
319
|
+
|
320
|
+
/***************************************************
|
321
|
+
NAME : FindHashedExpressions
|
322
|
+
DESCRIPTION : Sets the bsave expression array
|
323
|
+
indices for hashed expression nodes
|
324
|
+
and marks the items needed by
|
325
|
+
these expressions
|
326
|
+
INPUTS : None
|
327
|
+
RETURNS : Nothing useful
|
328
|
+
SIDE EFFECTS : Atoms marked and ids set
|
329
|
+
NOTES : None
|
330
|
+
***************************************************/
|
331
|
+
void FindHashedExpressions(
|
332
|
+
Environment *theEnv)
|
333
|
+
{
|
334
|
+
unsigned i;
|
335
|
+
EXPRESSION_HN *exphash;
|
336
|
+
|
337
|
+
for (i = 0 ; i < EXPRESSION_HASH_SIZE ; i++)
|
338
|
+
for (exphash = ExpressionData(theEnv)->ExpressionHashTable[i] ; exphash != NULL ; exphash = exphash->next)
|
339
|
+
{
|
340
|
+
MarkNeededItems(theEnv,exphash->exp);
|
341
|
+
exphash->bsaveID = ExpressionData(theEnv)->ExpressionCount;
|
342
|
+
ExpressionData(theEnv)->ExpressionCount += ExpressionSize(exphash->exp);
|
343
|
+
}
|
344
|
+
}
|
345
|
+
|
346
|
+
/***************************************************
|
347
|
+
NAME : BsaveHashedExpressions
|
348
|
+
DESCRIPTION : Writes out hashed expressions
|
349
|
+
INPUTS : Bsave file stream pointer
|
350
|
+
RETURNS : Nothing useful
|
351
|
+
SIDE EFFECTS : Expressions written
|
352
|
+
NOTES : None
|
353
|
+
***************************************************/
|
354
|
+
void BsaveHashedExpressions(
|
355
|
+
Environment *theEnv,
|
356
|
+
FILE *fp)
|
357
|
+
{
|
358
|
+
unsigned i;
|
359
|
+
EXPRESSION_HN *exphash;
|
360
|
+
|
361
|
+
for (i = 0 ; i < EXPRESSION_HASH_SIZE ; i++)
|
362
|
+
for (exphash = ExpressionData(theEnv)->ExpressionHashTable[i] ; exphash != NULL ; exphash = exphash->next)
|
363
|
+
BsaveExpression(theEnv,exphash->exp,fp);
|
364
|
+
}
|
365
|
+
|
366
|
+
/***************************************************************/
|
367
|
+
/* BsaveConstructExpressions: Writes all expression needed by */
|
368
|
+
/* constructs for this binary image to the binary save file. */
|
369
|
+
/***************************************************************/
|
370
|
+
void BsaveConstructExpressions(
|
371
|
+
Environment *theEnv,
|
372
|
+
FILE *fp)
|
373
|
+
{
|
374
|
+
struct BinaryItem *biPtr;
|
375
|
+
|
376
|
+
for (biPtr = BsaveData(theEnv)->ListOfBinaryItems;
|
377
|
+
biPtr != NULL;
|
378
|
+
biPtr = biPtr->next)
|
379
|
+
{
|
380
|
+
if (biPtr->expressionFunction != NULL)
|
381
|
+
{ (*biPtr->expressionFunction)(theEnv,fp); }
|
382
|
+
}
|
383
|
+
}
|
384
|
+
|
385
|
+
/***************************************/
|
386
|
+
/* BsaveExpression: Recursively saves */
|
387
|
+
/* an expression to the binary file. */
|
388
|
+
/***************************************/
|
389
|
+
void BsaveExpression(
|
390
|
+
Environment *theEnv,
|
391
|
+
struct expr *testPtr,
|
392
|
+
FILE *fp)
|
393
|
+
{
|
394
|
+
BSAVE_EXPRESSION newTest;
|
395
|
+
unsigned long newIndex;
|
396
|
+
|
397
|
+
while (testPtr != NULL)
|
398
|
+
{
|
399
|
+
ExpressionData(theEnv)->ExpressionCount++;
|
400
|
+
|
401
|
+
/*================*/
|
402
|
+
/* Copy the type. */
|
403
|
+
/*================*/
|
404
|
+
|
405
|
+
newTest.type = testPtr->type;
|
406
|
+
|
407
|
+
/*=======================================*/
|
408
|
+
/* Convert the argList slot to an index. */
|
409
|
+
/*=======================================*/
|
410
|
+
|
411
|
+
if (testPtr->argList == NULL)
|
412
|
+
{ newTest.argList = ULONG_MAX; }
|
413
|
+
else
|
414
|
+
{ newTest.argList = ExpressionData(theEnv)->ExpressionCount; }
|
415
|
+
|
416
|
+
/*========================================*/
|
417
|
+
/* Convert the nextArg slot to an index. */
|
418
|
+
/*========================================*/
|
419
|
+
|
420
|
+
if (testPtr->nextArg == NULL)
|
421
|
+
{ newTest.nextArg = ULONG_MAX; }
|
422
|
+
else
|
423
|
+
{
|
424
|
+
newIndex = ExpressionData(theEnv)->ExpressionCount + ExpressionSize(testPtr->argList);
|
425
|
+
newTest.nextArg = newIndex;
|
426
|
+
}
|
427
|
+
|
428
|
+
/*=========================*/
|
429
|
+
/* Convert the value slot. */
|
430
|
+
/*=========================*/
|
431
|
+
|
432
|
+
switch(testPtr->type)
|
433
|
+
{
|
434
|
+
case FLOAT_TYPE:
|
435
|
+
newTest.value = testPtr->floatValue->bucket;
|
436
|
+
break;
|
437
|
+
|
438
|
+
case INTEGER_TYPE:
|
439
|
+
newTest.value = testPtr->integerValue->bucket;
|
440
|
+
break;
|
441
|
+
|
442
|
+
case FCALL:
|
443
|
+
newTest.value = testPtr->functionValue->bsaveIndex;
|
444
|
+
break;
|
445
|
+
|
446
|
+
case GCALL:
|
447
|
+
#if DEFGENERIC_CONSTRUCT
|
448
|
+
if (testPtr->value != NULL)
|
449
|
+
newTest.value = testPtr->constructValue->bsaveID;
|
450
|
+
else
|
451
|
+
#endif
|
452
|
+
newTest.value = ULONG_MAX;
|
453
|
+
break;
|
454
|
+
|
455
|
+
case PCALL:
|
456
|
+
#if DEFFUNCTION_CONSTRUCT
|
457
|
+
if (testPtr->value != NULL)
|
458
|
+
newTest.value = testPtr->constructValue->bsaveID;
|
459
|
+
else
|
460
|
+
#endif
|
461
|
+
newTest.value = ULONG_MAX;
|
462
|
+
break;
|
463
|
+
|
464
|
+
case DEFTEMPLATE_PTR:
|
465
|
+
#if DEFTEMPLATE_CONSTRUCT
|
466
|
+
if (testPtr->value != NULL)
|
467
|
+
newTest.value = testPtr->constructValue->bsaveID;
|
468
|
+
else
|
469
|
+
#endif
|
470
|
+
newTest.value = ULONG_MAX;
|
471
|
+
break;
|
472
|
+
|
473
|
+
case DEFCLASS_PTR:
|
474
|
+
#if OBJECT_SYSTEM
|
475
|
+
if (testPtr->value != NULL)
|
476
|
+
newTest.value = testPtr->constructValue->bsaveID;
|
477
|
+
else
|
478
|
+
#endif
|
479
|
+
newTest.value = ULONG_MAX;
|
480
|
+
break;
|
481
|
+
|
482
|
+
case DEFGLOBAL_PTR:
|
483
|
+
#if DEFGLOBAL_CONSTRUCT
|
484
|
+
if (testPtr->value != NULL)
|
485
|
+
newTest.value = testPtr->constructValue->bsaveID;
|
486
|
+
else
|
487
|
+
#endif
|
488
|
+
newTest.value = ULONG_MAX;
|
489
|
+
break;
|
490
|
+
|
491
|
+
#if OBJECT_SYSTEM
|
492
|
+
case INSTANCE_NAME_TYPE:
|
493
|
+
#endif
|
494
|
+
case SYMBOL_TYPE:
|
495
|
+
case GBL_VARIABLE:
|
496
|
+
case STRING_TYPE:
|
497
|
+
newTest.value = testPtr->lexemeValue->bucket;
|
498
|
+
break;
|
499
|
+
|
500
|
+
case FACT_ADDRESS_TYPE:
|
501
|
+
case INSTANCE_ADDRESS_TYPE:
|
502
|
+
case EXTERNAL_ADDRESS_TYPE:
|
503
|
+
newTest.value = ULONG_MAX;
|
504
|
+
break;
|
505
|
+
|
506
|
+
case VOID_TYPE:
|
507
|
+
break;
|
508
|
+
|
509
|
+
default:
|
510
|
+
if (EvaluationData(theEnv)->PrimitivesArray[testPtr->type] == NULL) break;
|
511
|
+
if (EvaluationData(theEnv)->PrimitivesArray[testPtr->type]->bitMap)
|
512
|
+
{ newTest.value = ((CLIPSBitMap *) testPtr->value)->bucket; }
|
513
|
+
break;
|
514
|
+
}
|
515
|
+
|
516
|
+
/*===========================*/
|
517
|
+
/* Write out the expression. */
|
518
|
+
/*===========================*/
|
519
|
+
|
520
|
+
GenWrite(&newTest,sizeof(BSAVE_EXPRESSION),fp);
|
521
|
+
|
522
|
+
/*==========================*/
|
523
|
+
/* Write out argument list. */
|
524
|
+
/*==========================*/
|
525
|
+
|
526
|
+
if (testPtr->argList != NULL)
|
527
|
+
{
|
528
|
+
BsaveExpression(theEnv,testPtr->argList,fp);
|
529
|
+
}
|
530
|
+
|
531
|
+
testPtr = testPtr->nextArg;
|
532
|
+
}
|
533
|
+
}
|
534
|
+
|
535
|
+
#endif /* BLOAD_AND_BSAVE */
|
536
|
+
|
537
|
+
#endif /* (BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE) */
|
538
|
+
|
@@ -0,0 +1,60 @@
|
|
1
|
+
/*******************************************************/
|
2
|
+
/* "C" Language Integrated Production System */
|
3
|
+
/* */
|
4
|
+
/* CLIPS Version 6.40 07/30/16 */
|
5
|
+
/* */
|
6
|
+
/* EXPRESSION BLOAD/BSAVE HEADER FILE */
|
7
|
+
/*******************************************************/
|
8
|
+
|
9
|
+
/*************************************************************/
|
10
|
+
/* Purpose: Implements the binary save/load feature for the */
|
11
|
+
/* expression data structure. */
|
12
|
+
/* */
|
13
|
+
/* Principal Programmer(s): */
|
14
|
+
/* Gary D. Riley */
|
15
|
+
/* Brian L. Dantes */
|
16
|
+
/* */
|
17
|
+
/* Contributing Programmer(s): */
|
18
|
+
/* */
|
19
|
+
/* Revision History: */
|
20
|
+
/* */
|
21
|
+
/* 6.30: Changed integer type/precision. */
|
22
|
+
/* */
|
23
|
+
/* 6.40: Removed LOCALE definition. */
|
24
|
+
/* */
|
25
|
+
/* Pragma once and other inclusion changes. */
|
26
|
+
/* */
|
27
|
+
/* Removed use of void pointers for specific */
|
28
|
+
/* data structures. */
|
29
|
+
/* */
|
30
|
+
/*************************************************************/
|
31
|
+
|
32
|
+
#ifndef _H_exprnbin
|
33
|
+
|
34
|
+
#pragma once
|
35
|
+
|
36
|
+
#define _H_exprnbin
|
37
|
+
|
38
|
+
#include <stdio.h>
|
39
|
+
|
40
|
+
#include "expressn.h"
|
41
|
+
|
42
|
+
#define ExpressionPointer(i) ((struct expr *) (((i) == ULONG_MAX) ? NULL : &ExpressionData(theEnv)->ExpressionArray[i]))
|
43
|
+
#define HashedExpressionPointer(i) ExpressionPointer(i)
|
44
|
+
|
45
|
+
void AllocateExpressions(Environment *);
|
46
|
+
void RefreshExpressions(Environment *);
|
47
|
+
void ClearBloadedExpressions(Environment *);
|
48
|
+
void FindHashedExpressions(Environment *);
|
49
|
+
void BsaveHashedExpressions(Environment *,FILE *);
|
50
|
+
void BsaveConstructExpressions(Environment *,FILE *);
|
51
|
+
void BsaveExpression(Environment *,struct expr *,FILE *);
|
52
|
+
|
53
|
+
#endif /* _H_exprnbin */
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
|