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,494 @@
|
|
1
|
+
/*******************************************************/
|
2
|
+
/* "C" Language Integrated Production System */
|
3
|
+
/* */
|
4
|
+
/* CLIPS Version 6.40 11/01/16 */
|
5
|
+
/* */
|
6
|
+
/* EXPRESSION MODULE */
|
7
|
+
/*******************************************************/
|
8
|
+
|
9
|
+
/*************************************************************/
|
10
|
+
/* Purpose: Contains routines for creating, deleting, */
|
11
|
+
/* compacting, installing, and hashing expressions. */
|
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.23: Changed name of variable exp to theExp */
|
22
|
+
/* because of Unix compiler warnings of shadowed */
|
23
|
+
/* definitions. */
|
24
|
+
/* */
|
25
|
+
/* 6.24: Corrected link errors with non-default */
|
26
|
+
/* setup.h configuration settings. */
|
27
|
+
/* */
|
28
|
+
/* 6.30: Removed conditional code for unsupported */
|
29
|
+
/* compilers/operating systems (IBM_MCW and */
|
30
|
+
/* MAC_MCW). */
|
31
|
+
/* */
|
32
|
+
/* Changed integer type/precision. */
|
33
|
+
/* */
|
34
|
+
/* Changed expression hashing value. */
|
35
|
+
/* */
|
36
|
+
/* 6.40: Pragma once and other inclusion changes. */
|
37
|
+
/* */
|
38
|
+
/* Removed use of void pointers for specific */
|
39
|
+
/* data structures. */
|
40
|
+
/* */
|
41
|
+
/* Eval support for run time and bload only. */
|
42
|
+
/* */
|
43
|
+
/*************************************************************/
|
44
|
+
|
45
|
+
#include "setup.h"
|
46
|
+
|
47
|
+
#include <stdio.h>
|
48
|
+
#include <stdlib.h>
|
49
|
+
#include <string.h>
|
50
|
+
#include <ctype.h>
|
51
|
+
|
52
|
+
#include "bload.h"
|
53
|
+
#include "envrnmnt.h"
|
54
|
+
#include "evaluatn.h"
|
55
|
+
#include "exprnops.h"
|
56
|
+
#include "extnfunc.h"
|
57
|
+
#include "memalloc.h"
|
58
|
+
#include "prntutil.h"
|
59
|
+
#include "router.h"
|
60
|
+
|
61
|
+
#include "expressn.h"
|
62
|
+
|
63
|
+
#define PRIME_ONE 257
|
64
|
+
#define PRIME_TWO 263
|
65
|
+
#define PRIME_THREE 269
|
66
|
+
|
67
|
+
/****************************************/
|
68
|
+
/* LOCAL INTERNAL FUNCTION DEFINITIONS */
|
69
|
+
/****************************************/
|
70
|
+
|
71
|
+
#if (! RUN_TIME)
|
72
|
+
static unsigned long ListToPacked(struct expr *,struct expr *,unsigned long);
|
73
|
+
#endif
|
74
|
+
static EXPRESSION_HN *FindHashedExpression(Environment *,Expression *,unsigned *,EXPRESSION_HN **);
|
75
|
+
static unsigned HashExpression(Expression *);
|
76
|
+
static void DeallocateExpressionData(Environment *);
|
77
|
+
|
78
|
+
/**************************************************/
|
79
|
+
/* InitExpressionData: Initializes the function */
|
80
|
+
/* pointers used in generating some expressions */
|
81
|
+
/* and the expression hash table. */
|
82
|
+
/**************************************************/
|
83
|
+
void InitExpressionData(
|
84
|
+
Environment *theEnv)
|
85
|
+
{
|
86
|
+
unsigned i;
|
87
|
+
|
88
|
+
AllocateEnvironmentData(theEnv,EXPRESSION_DATA,sizeof(struct expressionData),DeallocateExpressionData);
|
89
|
+
|
90
|
+
#if ! RUN_TIME
|
91
|
+
InitExpressionPointers(theEnv);
|
92
|
+
#endif
|
93
|
+
|
94
|
+
ExpressionData(theEnv)->ExpressionHashTable = (EXPRESSION_HN **)
|
95
|
+
gm2(theEnv,sizeof(EXPRESSION_HN *) * EXPRESSION_HASH_SIZE);
|
96
|
+
for (i = 0 ; i < EXPRESSION_HASH_SIZE ; i++)
|
97
|
+
ExpressionData(theEnv)->ExpressionHashTable[i] = NULL;
|
98
|
+
}
|
99
|
+
|
100
|
+
/*****************************************/
|
101
|
+
/* DeallocateExpressionData: Deallocates */
|
102
|
+
/* environment data for expressions. */
|
103
|
+
/*****************************************/
|
104
|
+
static void DeallocateExpressionData(
|
105
|
+
Environment *theEnv)
|
106
|
+
{
|
107
|
+
int i;
|
108
|
+
EXPRESSION_HN *tmpPtr, *nextPtr;
|
109
|
+
|
110
|
+
#if (BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE)
|
111
|
+
if (! Bloaded(theEnv))
|
112
|
+
#endif
|
113
|
+
{
|
114
|
+
for (i = 0; i < EXPRESSION_HASH_SIZE; i++)
|
115
|
+
{
|
116
|
+
tmpPtr = ExpressionData(theEnv)->ExpressionHashTable[i];
|
117
|
+
while (tmpPtr != NULL)
|
118
|
+
{
|
119
|
+
nextPtr = tmpPtr->next;
|
120
|
+
ReturnPackedExpression(theEnv,tmpPtr->exp);
|
121
|
+
rtn_struct(theEnv,exprHashNode,tmpPtr);
|
122
|
+
tmpPtr = nextPtr;
|
123
|
+
}
|
124
|
+
}
|
125
|
+
}
|
126
|
+
|
127
|
+
rm(theEnv,ExpressionData(theEnv)->ExpressionHashTable,
|
128
|
+
sizeof(EXPRESSION_HN *) * EXPRESSION_HASH_SIZE);
|
129
|
+
|
130
|
+
#if (BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE)
|
131
|
+
if ((ExpressionData(theEnv)->NumberOfExpressions != 0) && Bloaded(theEnv))
|
132
|
+
{
|
133
|
+
genfree(theEnv,ExpressionData(theEnv)->ExpressionArray,
|
134
|
+
ExpressionData(theEnv)->NumberOfExpressions * sizeof(struct expr));
|
135
|
+
}
|
136
|
+
#endif
|
137
|
+
}
|
138
|
+
|
139
|
+
/****************************************************/
|
140
|
+
/* InitExpressionPointers: Initializes the function */
|
141
|
+
/* pointers used in generating some expressions. */
|
142
|
+
/****************************************************/
|
143
|
+
void InitExpressionPointers(
|
144
|
+
Environment *theEnv)
|
145
|
+
{
|
146
|
+
ExpressionData(theEnv)->PTR_AND = FindFunction(theEnv,"and");
|
147
|
+
ExpressionData(theEnv)->PTR_OR = FindFunction(theEnv,"or");
|
148
|
+
ExpressionData(theEnv)->PTR_EQ = FindFunction(theEnv,"eq");
|
149
|
+
ExpressionData(theEnv)->PTR_NEQ = FindFunction(theEnv,"neq");
|
150
|
+
ExpressionData(theEnv)->PTR_NOT = FindFunction(theEnv,"not");
|
151
|
+
|
152
|
+
if ((ExpressionData(theEnv)->PTR_AND == NULL) || (ExpressionData(theEnv)->PTR_OR == NULL) ||
|
153
|
+
(ExpressionData(theEnv)->PTR_EQ == NULL) || (ExpressionData(theEnv)->PTR_NEQ == NULL) || (ExpressionData(theEnv)->PTR_NOT == NULL))
|
154
|
+
{
|
155
|
+
SystemError(theEnv,"EXPRESSN",1);
|
156
|
+
ExitRouter(theEnv,EXIT_FAILURE);
|
157
|
+
}
|
158
|
+
}
|
159
|
+
|
160
|
+
/***************************************************/
|
161
|
+
/* ExpressionInstall: Increments the busy count of */
|
162
|
+
/* atomic data values found in an expression. */
|
163
|
+
/***************************************************/
|
164
|
+
void ExpressionInstall(
|
165
|
+
Environment *theEnv,
|
166
|
+
struct expr *expression)
|
167
|
+
{
|
168
|
+
if (expression == NULL) return;
|
169
|
+
|
170
|
+
while (expression != NULL)
|
171
|
+
{
|
172
|
+
AtomInstall(theEnv,expression->type,expression->value);
|
173
|
+
ExpressionInstall(theEnv,expression->argList);
|
174
|
+
expression = expression->nextArg;
|
175
|
+
}
|
176
|
+
}
|
177
|
+
|
178
|
+
/*****************************************************/
|
179
|
+
/* ExpressionDeinstall: Decrements the busy count of */
|
180
|
+
/* atomic data values found in an expression. */
|
181
|
+
/*****************************************************/
|
182
|
+
void ExpressionDeinstall(
|
183
|
+
Environment *theEnv,
|
184
|
+
struct expr *expression)
|
185
|
+
{
|
186
|
+
if (expression == NULL) return;
|
187
|
+
|
188
|
+
while (expression != NULL)
|
189
|
+
{
|
190
|
+
AtomDeinstall(theEnv,expression->type,expression->value);
|
191
|
+
ExpressionDeinstall(theEnv,expression->argList);
|
192
|
+
expression = expression->nextArg;
|
193
|
+
}
|
194
|
+
}
|
195
|
+
|
196
|
+
#if (! RUN_TIME)
|
197
|
+
|
198
|
+
/***********************************************************************/
|
199
|
+
/* PackExpression: Copies an expression (created using multiple memory */
|
200
|
+
/* requests) into an array (created using a single memory request) */
|
201
|
+
/* while maintaining all appropriate links in the expression. A */
|
202
|
+
/* packed expression requires less total memory because it reduces */
|
203
|
+
/* the overhead required for multiple memory allocations. */
|
204
|
+
/***********************************************************************/
|
205
|
+
struct expr *PackExpression(
|
206
|
+
Environment *theEnv,
|
207
|
+
struct expr *original)
|
208
|
+
{
|
209
|
+
struct expr *packPtr;
|
210
|
+
|
211
|
+
if (original == NULL) return NULL;
|
212
|
+
|
213
|
+
packPtr = (struct expr *)
|
214
|
+
gm2(theEnv,sizeof (struct expr) * ExpressionSize(original));
|
215
|
+
ListToPacked(original,packPtr,0);
|
216
|
+
|
217
|
+
return packPtr;
|
218
|
+
}
|
219
|
+
|
220
|
+
/***********************************************************/
|
221
|
+
/* ListToPacked: Copies a list of expressions to an array. */
|
222
|
+
/***********************************************************/
|
223
|
+
static unsigned long ListToPacked(
|
224
|
+
struct expr *original,
|
225
|
+
struct expr *destination,
|
226
|
+
unsigned long count)
|
227
|
+
{
|
228
|
+
unsigned long i;
|
229
|
+
|
230
|
+
if (original == NULL) { return count; }
|
231
|
+
|
232
|
+
while (original != NULL)
|
233
|
+
{
|
234
|
+
i = count;
|
235
|
+
count++;
|
236
|
+
|
237
|
+
destination[i].type = original->type;
|
238
|
+
destination[i].value = original->value;
|
239
|
+
|
240
|
+
if (original->argList == NULL)
|
241
|
+
{ destination[i].argList = NULL; }
|
242
|
+
else
|
243
|
+
{
|
244
|
+
destination[i].argList =
|
245
|
+
(struct expr *) &destination[count];
|
246
|
+
count = ListToPacked(original->argList,destination,count);
|
247
|
+
}
|
248
|
+
|
249
|
+
if (original->nextArg == NULL)
|
250
|
+
{ destination[i].nextArg = NULL; }
|
251
|
+
else
|
252
|
+
{
|
253
|
+
destination[i].nextArg = &destination[count];
|
254
|
+
}
|
255
|
+
|
256
|
+
original = original->nextArg;
|
257
|
+
}
|
258
|
+
|
259
|
+
return count;
|
260
|
+
}
|
261
|
+
|
262
|
+
#endif /* (! RUN_TIME) */
|
263
|
+
|
264
|
+
/***************************************************************/
|
265
|
+
/* ReturnPackedExpression: Returns a packed expression created */
|
266
|
+
/* using PackExpression to the memory manager. */
|
267
|
+
/***************************************************************/
|
268
|
+
void ReturnPackedExpression(
|
269
|
+
Environment *theEnv,
|
270
|
+
struct expr *packPtr)
|
271
|
+
{
|
272
|
+
if (packPtr != NULL)
|
273
|
+
{
|
274
|
+
rm(theEnv,packPtr,sizeof (struct expr) * ExpressionSize(packPtr));
|
275
|
+
}
|
276
|
+
}
|
277
|
+
|
278
|
+
/***********************************************/
|
279
|
+
/* ReturnExpression: Returns a multiply linked */
|
280
|
+
/* list of expr data structures. */
|
281
|
+
/***********************************************/
|
282
|
+
void ReturnExpression(
|
283
|
+
Environment *theEnv,
|
284
|
+
struct expr *waste)
|
285
|
+
{
|
286
|
+
struct expr *tmp;
|
287
|
+
|
288
|
+
while (waste != NULL)
|
289
|
+
{
|
290
|
+
if (waste->argList != NULL) ReturnExpression(theEnv,waste->argList);
|
291
|
+
tmp = waste;
|
292
|
+
waste = waste->nextArg;
|
293
|
+
rtn_struct(theEnv,expr,tmp);
|
294
|
+
}
|
295
|
+
}
|
296
|
+
|
297
|
+
/***************************************************
|
298
|
+
NAME : FindHashedExpression
|
299
|
+
DESCRIPTION : Determines if a given expression
|
300
|
+
is in the expression hash table
|
301
|
+
INPUTS : 1) The expression
|
302
|
+
2) A buffer to hold the hash
|
303
|
+
value
|
304
|
+
3) A buffer to hold the previous
|
305
|
+
node in the hash chain
|
306
|
+
RETURNS : The expression hash table entry
|
307
|
+
(NULL if not found)
|
308
|
+
SIDE EFFECTS : None
|
309
|
+
NOTES : None
|
310
|
+
***************************************************/
|
311
|
+
static EXPRESSION_HN *FindHashedExpression(
|
312
|
+
Environment *theEnv,
|
313
|
+
Expression *theExp,
|
314
|
+
unsigned *hashval,
|
315
|
+
EXPRESSION_HN **prv)
|
316
|
+
{
|
317
|
+
EXPRESSION_HN *exphash;
|
318
|
+
|
319
|
+
if (theExp == NULL)
|
320
|
+
return NULL;
|
321
|
+
*hashval = HashExpression(theExp);
|
322
|
+
*prv = NULL;
|
323
|
+
exphash = ExpressionData(theEnv)->ExpressionHashTable[*hashval];
|
324
|
+
while (exphash != NULL)
|
325
|
+
{
|
326
|
+
if (IdenticalExpression(exphash->exp,theExp))
|
327
|
+
return(exphash);
|
328
|
+
*prv = exphash;
|
329
|
+
exphash = exphash->next;
|
330
|
+
}
|
331
|
+
return NULL;
|
332
|
+
}
|
333
|
+
|
334
|
+
/***************************************************
|
335
|
+
NAME : HashExpression
|
336
|
+
DESCRIPTION : Assigns a deterministic number to
|
337
|
+
an expression
|
338
|
+
INPUTS : The expression
|
339
|
+
RETURNS : The "value" of the expression
|
340
|
+
SIDE EFFECTS : None
|
341
|
+
NOTES : None
|
342
|
+
***************************************************/
|
343
|
+
static unsigned HashExpression(
|
344
|
+
Expression *theExp)
|
345
|
+
{
|
346
|
+
unsigned long tally = PRIME_THREE;
|
347
|
+
union
|
348
|
+
{
|
349
|
+
void *vv;
|
350
|
+
unsigned long uv;
|
351
|
+
} fis;
|
352
|
+
|
353
|
+
if (theExp->argList != NULL)
|
354
|
+
tally += HashExpression(theExp->argList) * PRIME_ONE;
|
355
|
+
while (theExp != NULL)
|
356
|
+
{
|
357
|
+
tally += theExp->type * PRIME_TWO;
|
358
|
+
fis.uv = 0;
|
359
|
+
fis.vv = theExp->value;
|
360
|
+
tally += fis.uv;
|
361
|
+
theExp = theExp->nextArg;
|
362
|
+
}
|
363
|
+
return (unsigned) (tally % EXPRESSION_HASH_SIZE);
|
364
|
+
}
|
365
|
+
|
366
|
+
/***************************************************
|
367
|
+
NAME : RemoveHashedExpression
|
368
|
+
DESCRIPTION : Removes a hashed expression from
|
369
|
+
the hash table
|
370
|
+
INPUTS : The expression
|
371
|
+
RETURNS : Nothing useful
|
372
|
+
SIDE EFFECTS : Hash node removed (or use count
|
373
|
+
decremented). If the hash node
|
374
|
+
is removed, the expression is
|
375
|
+
deinstalled and deleted
|
376
|
+
NOTES : If the expression is in use by
|
377
|
+
others, then the use count is
|
378
|
+
merely decremented
|
379
|
+
***************************************************/
|
380
|
+
void RemoveHashedExpression(
|
381
|
+
Environment *theEnv,
|
382
|
+
Expression *theExp)
|
383
|
+
{
|
384
|
+
EXPRESSION_HN *exphash,*prv;
|
385
|
+
unsigned hashval;
|
386
|
+
|
387
|
+
exphash = FindHashedExpression(theEnv,theExp,&hashval,&prv);
|
388
|
+
if (exphash == NULL)
|
389
|
+
return;
|
390
|
+
if (--exphash->count != 0)
|
391
|
+
return;
|
392
|
+
if (prv == NULL)
|
393
|
+
ExpressionData(theEnv)->ExpressionHashTable[hashval] = exphash->next;
|
394
|
+
else
|
395
|
+
prv->next = exphash->next;
|
396
|
+
ExpressionDeinstall(theEnv,exphash->exp);
|
397
|
+
ReturnPackedExpression(theEnv,exphash->exp);
|
398
|
+
rtn_struct(theEnv,exprHashNode,exphash);
|
399
|
+
}
|
400
|
+
|
401
|
+
#if (! BLOAD_ONLY) && (! RUN_TIME)
|
402
|
+
|
403
|
+
/*****************************************************
|
404
|
+
NAME : AddHashedExpression
|
405
|
+
DESCRIPTION : Adds a new expression to the
|
406
|
+
expression hash table (or increments
|
407
|
+
the use count if it is already there)
|
408
|
+
INPUTS : The (new) expression
|
409
|
+
RETURNS : A pointer to the (new) hash node
|
410
|
+
SIDE EFFECTS : Adds the new hash node or increments
|
411
|
+
the count of an existing one
|
412
|
+
NOTES : It is the caller's responsibility to
|
413
|
+
delete the passed expression. This
|
414
|
+
routine copies, packs and installs
|
415
|
+
the given expression
|
416
|
+
*****************************************************/
|
417
|
+
Expression *AddHashedExpression(
|
418
|
+
Environment *theEnv,
|
419
|
+
Expression *theExp)
|
420
|
+
{
|
421
|
+
EXPRESSION_HN *prv,*exphash;
|
422
|
+
unsigned hashval;
|
423
|
+
|
424
|
+
if (theExp == NULL) return NULL;
|
425
|
+
exphash = FindHashedExpression(theEnv,theExp,&hashval,&prv);
|
426
|
+
if (exphash != NULL)
|
427
|
+
{
|
428
|
+
exphash->count++;
|
429
|
+
return(exphash->exp);
|
430
|
+
}
|
431
|
+
exphash = get_struct(theEnv,exprHashNode);
|
432
|
+
exphash->hashval = hashval;
|
433
|
+
exphash->count = 1;
|
434
|
+
exphash->exp = PackExpression(theEnv,theExp);
|
435
|
+
ExpressionInstall(theEnv,exphash->exp);
|
436
|
+
exphash->next = ExpressionData(theEnv)->ExpressionHashTable[exphash->hashval];
|
437
|
+
ExpressionData(theEnv)->ExpressionHashTable[exphash->hashval] = exphash;
|
438
|
+
exphash->bsaveID = 0L;
|
439
|
+
return(exphash->exp);
|
440
|
+
}
|
441
|
+
|
442
|
+
#endif /* (! BLOAD_ONLY) && (! RUN_TIME) */
|
443
|
+
|
444
|
+
#if (BLOAD_AND_BSAVE || BLOAD_ONLY || BLOAD || CONSTRUCT_COMPILER) && (! RUN_TIME)
|
445
|
+
|
446
|
+
/***************************************************
|
447
|
+
NAME : HashedExpressionIndex
|
448
|
+
DESCRIPTION : Finds the expression bload array
|
449
|
+
index for a hashed expression
|
450
|
+
INPUTS : The expression
|
451
|
+
RETURNS : The bload index
|
452
|
+
SIDE EFFECTS : None
|
453
|
+
NOTES : None
|
454
|
+
***************************************************/
|
455
|
+
unsigned long HashedExpressionIndex(
|
456
|
+
Environment *theEnv,
|
457
|
+
Expression *theExp)
|
458
|
+
{
|
459
|
+
EXPRESSION_HN *exphash,*prv;
|
460
|
+
unsigned hashval;
|
461
|
+
|
462
|
+
if (theExp == NULL)
|
463
|
+
return ULONG_MAX;
|
464
|
+
exphash = FindHashedExpression(theEnv,theExp,&hashval,&prv);
|
465
|
+
return((exphash != NULL) ? exphash->bsaveID : ULONG_MAX);
|
466
|
+
}
|
467
|
+
|
468
|
+
#endif /* (BLOAD_AND_BSAVE || BLOAD_ONLY || BLOAD || CONSTRUCT_COMPILER) && (! RUN_TIME) */
|
469
|
+
|
470
|
+
/********************************************************/
|
471
|
+
/* SetSequenceOperatorRecognition: C access routine */
|
472
|
+
/* for the set-sequence-operator-recognition function */
|
473
|
+
/********************************************************/
|
474
|
+
bool SetSequenceOperatorRecognition(
|
475
|
+
Environment *theEnv,
|
476
|
+
bool value)
|
477
|
+
{
|
478
|
+
bool ov;
|
479
|
+
|
480
|
+
ov = ExpressionData(theEnv)->SequenceOpMode;
|
481
|
+
ExpressionData(theEnv)->SequenceOpMode = value;
|
482
|
+
return ov;
|
483
|
+
}
|
484
|
+
|
485
|
+
/********************************************************/
|
486
|
+
/* GetSequenceOperatorRecognition: C access routine */
|
487
|
+
/* for the Get-sequence-operator-recognition function */
|
488
|
+
/********************************************************/
|
489
|
+
bool GetSequenceOperatorRecognition(
|
490
|
+
Environment *theEnv)
|
491
|
+
{
|
492
|
+
return ExpressionData(theEnv)->SequenceOpMode;
|
493
|
+
}
|
494
|
+
|
@@ -0,0 +1,154 @@
|
|
1
|
+
/*******************************************************/
|
2
|
+
/* "C" Language Integrated Production System */
|
3
|
+
/* */
|
4
|
+
/* CLIPS Version 6.40 02/02/21 */
|
5
|
+
/* */
|
6
|
+
/* EXPRESSION HEADER FILE */
|
7
|
+
/*******************************************************/
|
8
|
+
|
9
|
+
/*************************************************************/
|
10
|
+
/* Purpose: Contains routines for creating, deleting, */
|
11
|
+
/* compacting, installing, and hashing expressions. */
|
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.24: Renamed BOOLEAN macro type to intBool. */
|
22
|
+
/* */
|
23
|
+
/* 6.30: Removed conditional code for unsupported */
|
24
|
+
/* compilers/operating systems (IBM_MCW and */
|
25
|
+
/* MAC_MCW). */
|
26
|
+
/* */
|
27
|
+
/* Changed integer type/precision. */
|
28
|
+
/* */
|
29
|
+
/* Changed expression hashing value. */
|
30
|
+
/* */
|
31
|
+
/* 6.40: Removed LOCALE definition. */
|
32
|
+
/* */
|
33
|
+
/* Pragma once and other inclusion changes. */
|
34
|
+
/* */
|
35
|
+
/* Added support for booleans with <stdbool.h>. */
|
36
|
+
/* */
|
37
|
+
/* Removed use of void pointers for specific */
|
38
|
+
/* data structures. */
|
39
|
+
/* */
|
40
|
+
/* Eval support for run time and bload only. */
|
41
|
+
/* */
|
42
|
+
/*************************************************************/
|
43
|
+
|
44
|
+
#ifndef _H_expressn
|
45
|
+
|
46
|
+
#pragma once
|
47
|
+
|
48
|
+
#define _H_expressn
|
49
|
+
|
50
|
+
struct exprHashNode;
|
51
|
+
typedef struct savedContexts SavedContexts;
|
52
|
+
|
53
|
+
#include "entities.h"
|
54
|
+
#include "exprnops.h"
|
55
|
+
#include "constrct.h"
|
56
|
+
|
57
|
+
/******************************/
|
58
|
+
/* Expression Data Structures */
|
59
|
+
/******************************/
|
60
|
+
|
61
|
+
struct expr
|
62
|
+
{
|
63
|
+
unsigned short type;
|
64
|
+
union
|
65
|
+
{
|
66
|
+
void *value;
|
67
|
+
CLIPSLexeme *lexemeValue;
|
68
|
+
CLIPSFloat *floatValue;
|
69
|
+
CLIPSInteger *integerValue;
|
70
|
+
CLIPSBitMap *bitMapValue;
|
71
|
+
ConstructHeader *constructValue;
|
72
|
+
FunctionDefinition *functionValue;
|
73
|
+
Fact *factValue;
|
74
|
+
Instance *instanceValue;
|
75
|
+
CLIPSExternalAddress *externalAddressValue;
|
76
|
+
};
|
77
|
+
Expression *argList;
|
78
|
+
Expression *nextArg;
|
79
|
+
};
|
80
|
+
|
81
|
+
#define arg_list argList
|
82
|
+
#define next_arg nextArg
|
83
|
+
|
84
|
+
typedef struct exprHashNode
|
85
|
+
{
|
86
|
+
unsigned hashval;
|
87
|
+
unsigned count;
|
88
|
+
Expression *exp;
|
89
|
+
struct exprHashNode *next;
|
90
|
+
unsigned long bsaveID;
|
91
|
+
} EXPRESSION_HN;
|
92
|
+
|
93
|
+
struct savedContexts
|
94
|
+
{
|
95
|
+
bool rtn;
|
96
|
+
bool brk;
|
97
|
+
struct savedContexts *nxt;
|
98
|
+
};
|
99
|
+
|
100
|
+
#define EXPRESSION_HASH_SIZE 503
|
101
|
+
|
102
|
+
/********************/
|
103
|
+
/* ENVIRONMENT DATA */
|
104
|
+
/********************/
|
105
|
+
|
106
|
+
#define EXPRESSION_DATA 45
|
107
|
+
|
108
|
+
struct expressionData
|
109
|
+
{
|
110
|
+
FunctionDefinition *PTR_AND;
|
111
|
+
FunctionDefinition *PTR_OR;
|
112
|
+
FunctionDefinition *PTR_EQ;
|
113
|
+
FunctionDefinition *PTR_NEQ;
|
114
|
+
FunctionDefinition *PTR_NOT;
|
115
|
+
EXPRESSION_HN **ExpressionHashTable;
|
116
|
+
#if (BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE)
|
117
|
+
unsigned long NumberOfExpressions;
|
118
|
+
Expression *ExpressionArray;
|
119
|
+
unsigned long ExpressionCount;
|
120
|
+
#endif
|
121
|
+
SavedContexts *svContexts;
|
122
|
+
bool ReturnContext;
|
123
|
+
bool BreakContext;
|
124
|
+
bool SequenceOpMode;
|
125
|
+
};
|
126
|
+
|
127
|
+
#define ExpressionData(theEnv) ((struct expressionData *) GetEnvironmentData(theEnv,EXPRESSION_DATA))
|
128
|
+
|
129
|
+
/********************/
|
130
|
+
/* Global Functions */
|
131
|
+
/********************/
|
132
|
+
|
133
|
+
void ReturnExpression(Environment *,Expression *);
|
134
|
+
void ExpressionInstall(Environment *,Expression *);
|
135
|
+
void ExpressionDeinstall(Environment *,Expression *);
|
136
|
+
Expression *PackExpression(Environment *,Expression *);
|
137
|
+
void ReturnPackedExpression(Environment *,Expression *);
|
138
|
+
void InitExpressionData(Environment *);
|
139
|
+
void InitExpressionPointers(Environment *);
|
140
|
+
bool SetSequenceOperatorRecognition(Environment *,bool);
|
141
|
+
bool GetSequenceOperatorRecognition(Environment *);
|
142
|
+
#if (! BLOAD_ONLY) && (! RUN_TIME)
|
143
|
+
Expression *AddHashedExpression(Environment *,Expression *);
|
144
|
+
#endif
|
145
|
+
void RemoveHashedExpression(Environment *,Expression *);
|
146
|
+
#if BLOAD_AND_BSAVE || BLOAD_ONLY || BLOAD || CONSTRUCT_COMPILER
|
147
|
+
unsigned long HashedExpressionIndex(Environment *,Expression *);
|
148
|
+
#endif
|
149
|
+
|
150
|
+
#endif
|
151
|
+
|
152
|
+
|
153
|
+
|
154
|
+
|