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,378 @@
|
|
1
|
+
/*******************************************************/
|
2
|
+
/* "C" Language Integrated Production System */
|
3
|
+
/* */
|
4
|
+
/* CLIPS Version 6.40 07/30/16 */
|
5
|
+
/* */
|
6
|
+
/* */
|
7
|
+
/*******************************************************/
|
8
|
+
|
9
|
+
/*************************************************************/
|
10
|
+
/* Purpose: Generic Function Construct Compiler Code */
|
11
|
+
/* */
|
12
|
+
/* Principal Programmer(s): */
|
13
|
+
/* Brian L. Dantes */
|
14
|
+
/* */
|
15
|
+
/* Contributing Programmer(s): */
|
16
|
+
/* */
|
17
|
+
/* Revision History: */
|
18
|
+
/* */
|
19
|
+
/* 6.30: Added support for path name argument to */
|
20
|
+
/* constructs-to-c. */
|
21
|
+
/* */
|
22
|
+
/* Added const qualifiers to remove C++ */
|
23
|
+
/* deprecation warnings. */
|
24
|
+
/* */
|
25
|
+
/* 6.40: Pragma once and other inclusion changes. */
|
26
|
+
/* */
|
27
|
+
/* Added support for booleans with <stdbool.h>. */
|
28
|
+
/* */
|
29
|
+
/* Removed use of void pointers for specific */
|
30
|
+
/* data structures. */
|
31
|
+
/* */
|
32
|
+
/*************************************************************/
|
33
|
+
|
34
|
+
/* =========================================
|
35
|
+
*****************************************
|
36
|
+
EXTERNAL DEFINITIONS
|
37
|
+
=========================================
|
38
|
+
***************************************** */
|
39
|
+
#include "setup.h"
|
40
|
+
|
41
|
+
#if DEFFUNCTION_CONSTRUCT && CONSTRUCT_COMPILER && (! RUN_TIME)
|
42
|
+
|
43
|
+
#include "conscomp.h"
|
44
|
+
#include "envrnmnt.h"
|
45
|
+
|
46
|
+
#include "dffnxcmp.h"
|
47
|
+
|
48
|
+
/***************************************/
|
49
|
+
/* LOCAL INTERNAL FUNCTION DEFINITIONS */
|
50
|
+
/***************************************/
|
51
|
+
|
52
|
+
static void ReadyDeffunctionsForCode(Environment *);
|
53
|
+
static bool DeffunctionsToCode(Environment *,const char *,const char *,char *,
|
54
|
+
unsigned int,FILE *,unsigned int,unsigned int);
|
55
|
+
static void CloseDeffunctionFiles(Environment *,FILE *,FILE *,unsigned int);
|
56
|
+
static void DeffunctionModuleToCode(Environment *,FILE *,Defmodule *,unsigned int,unsigned int);
|
57
|
+
static void SingleDeffunctionToCode(Environment *,FILE *,Deffunction *,
|
58
|
+
unsigned int,unsigned int,unsigned int);
|
59
|
+
static void InitDeffunctionCode(Environment *,FILE *,unsigned int,unsigned int);
|
60
|
+
|
61
|
+
/* =========================================
|
62
|
+
*****************************************
|
63
|
+
EXTERNALLY VISIBLE FUNCTIONS
|
64
|
+
=========================================
|
65
|
+
***************************************** */
|
66
|
+
|
67
|
+
/***************************************************
|
68
|
+
NAME : SetupDeffunctionCompiler
|
69
|
+
DESCRIPTION : Initializes the construct compiler
|
70
|
+
item for deffunctions
|
71
|
+
INPUTS : None
|
72
|
+
RETURNS : Nothing useful
|
73
|
+
SIDE EFFECTS : Code generator item initialized
|
74
|
+
NOTES : None
|
75
|
+
***************************************************/
|
76
|
+
void SetupDeffunctionCompiler(
|
77
|
+
Environment *theEnv)
|
78
|
+
{
|
79
|
+
DeffunctionData(theEnv)->DeffunctionCodeItem = AddCodeGeneratorItem(theEnv,"deffunctions",0,ReadyDeffunctionsForCode,
|
80
|
+
InitDeffunctionCode,DeffunctionsToCode,2);
|
81
|
+
}
|
82
|
+
|
83
|
+
|
84
|
+
/***************************************************
|
85
|
+
NAME : PrintDeffunctionReference
|
86
|
+
DESCRIPTION : Prints a reference to the run-time
|
87
|
+
deffunction array for the construct
|
88
|
+
compiler
|
89
|
+
INPUTS : 1) The file output destination
|
90
|
+
2) A pointer to the deffunction
|
91
|
+
3) The id of the run-time image
|
92
|
+
4) The maximum number of indices
|
93
|
+
in any array
|
94
|
+
RETURNS : Nothing useful
|
95
|
+
SIDE EFFECTS : Reference printed
|
96
|
+
NOTES : None
|
97
|
+
***************************************************/
|
98
|
+
void PrintDeffunctionReference(
|
99
|
+
Environment *theEnv,
|
100
|
+
FILE *fp,
|
101
|
+
Deffunction *dfPtr,
|
102
|
+
unsigned imageID,
|
103
|
+
unsigned maxIndices)
|
104
|
+
{
|
105
|
+
if (dfPtr == NULL)
|
106
|
+
fprintf(fp,"NULL");
|
107
|
+
else
|
108
|
+
fprintf(fp,"&%s%d_%lu[%lu]",ConstructPrefix(DeffunctionData(theEnv)->DeffunctionCodeItem),imageID,
|
109
|
+
((dfPtr->header.bsaveID / maxIndices) + 1),
|
110
|
+
(dfPtr->header.bsaveID % maxIndices));
|
111
|
+
}
|
112
|
+
|
113
|
+
/****************************************************
|
114
|
+
NAME : DeffunctionCModuleReference
|
115
|
+
DESCRIPTION : Prints out a reference to a
|
116
|
+
deffunction module
|
117
|
+
INPUTS : 1) The output file
|
118
|
+
2) The id of the module item
|
119
|
+
3) The id of the image
|
120
|
+
4) The maximum number of elements
|
121
|
+
allowed in an array
|
122
|
+
RETURNS : Nothing useful
|
123
|
+
SIDE EFFECTS : Deffunction module reference printed
|
124
|
+
NOTES : None
|
125
|
+
****************************************************/
|
126
|
+
void DeffunctionCModuleReference(
|
127
|
+
Environment *theEnv,
|
128
|
+
FILE *theFile,
|
129
|
+
unsigned long count,
|
130
|
+
unsigned int imageID,
|
131
|
+
unsigned int maxIndices)
|
132
|
+
{
|
133
|
+
fprintf(theFile,"MIHS &%s%u_%lu[%lu]",
|
134
|
+
ModulePrefix(DeffunctionData(theEnv)->DeffunctionCodeItem),
|
135
|
+
imageID,
|
136
|
+
(count / maxIndices) + 1,
|
137
|
+
(count % maxIndices));
|
138
|
+
}
|
139
|
+
|
140
|
+
/* =========================================
|
141
|
+
*****************************************
|
142
|
+
INTERNALLY VISIBLE FUNCTIONS
|
143
|
+
=========================================
|
144
|
+
***************************************** */
|
145
|
+
|
146
|
+
/***************************************************
|
147
|
+
NAME : ReadyDeffunctionsForCode
|
148
|
+
DESCRIPTION : Sets index of deffunctions
|
149
|
+
for use in compiled expressions
|
150
|
+
INPUTS : None
|
151
|
+
RETURNS : Nothing useful
|
152
|
+
SIDE EFFECTS : BsaveIndices set
|
153
|
+
NOTES : None
|
154
|
+
***************************************************/
|
155
|
+
static void ReadyDeffunctionsForCode(
|
156
|
+
Environment *theEnv)
|
157
|
+
{
|
158
|
+
MarkConstructBsaveIDs(theEnv,DeffunctionData(theEnv)->DeffunctionModuleIndex);
|
159
|
+
}
|
160
|
+
|
161
|
+
/**************************************************/
|
162
|
+
/* InitDeffunctionCode: Writes out initialization */
|
163
|
+
/* code for deffunction for a run-time module. */
|
164
|
+
/**************************************************/
|
165
|
+
static void InitDeffunctionCode(
|
166
|
+
Environment *theEnv,
|
167
|
+
FILE *initFP,
|
168
|
+
unsigned int imageID,
|
169
|
+
unsigned int maxIndices)
|
170
|
+
{
|
171
|
+
#if MAC_XCD
|
172
|
+
#pragma unused(maxIndices)
|
173
|
+
#pragma unused(imageID)
|
174
|
+
#pragma unused(theEnv)
|
175
|
+
#endif
|
176
|
+
fprintf(initFP," DeffunctionRunTimeInitialize(theEnv);\n");
|
177
|
+
}
|
178
|
+
|
179
|
+
/*******************************************************
|
180
|
+
NAME : DeffunctionsToCode
|
181
|
+
DESCRIPTION : Writes out static array code for
|
182
|
+
deffunctions
|
183
|
+
INPUTS : 1) The base name of the construct set
|
184
|
+
2) The base id for this construct
|
185
|
+
3) The file pointer for the header file
|
186
|
+
4) The base id for the construct set
|
187
|
+
5) The max number of indices allowed
|
188
|
+
in an array
|
189
|
+
RETURNS : False on errors,
|
190
|
+
True if deffunctions written
|
191
|
+
SIDE EFFECTS : Code written to files
|
192
|
+
NOTES : None
|
193
|
+
*******************************************************/
|
194
|
+
static bool DeffunctionsToCode(
|
195
|
+
Environment *theEnv,
|
196
|
+
const char *fileName,
|
197
|
+
const char *pathName,
|
198
|
+
char *fileNameBuffer,
|
199
|
+
unsigned int fileID,
|
200
|
+
FILE *headerFP,
|
201
|
+
unsigned int imageID,
|
202
|
+
unsigned int maxIndices)
|
203
|
+
{
|
204
|
+
unsigned int fileCount = 1;
|
205
|
+
Defmodule *theModule;
|
206
|
+
Deffunction *theDeffunction;
|
207
|
+
unsigned int moduleCount = 0, moduleArrayCount = 0, moduleArrayVersion = 1;
|
208
|
+
unsigned int deffunctionArrayCount = 0, deffunctionArrayVersion = 1;
|
209
|
+
FILE *moduleFile = NULL, *deffunctionFile = NULL;
|
210
|
+
|
211
|
+
/* ===============================================
|
212
|
+
Include the appropriate deffunction header file
|
213
|
+
=============================================== */
|
214
|
+
fprintf(headerFP,"#include \"dffnxfun.h\"\n");
|
215
|
+
|
216
|
+
/* =============================================================
|
217
|
+
Loop through all the modules and all the deffunctions writing
|
218
|
+
their C code representation to the file as they are traversed
|
219
|
+
============================================================= */
|
220
|
+
theModule = GetNextDefmodule(theEnv,NULL);
|
221
|
+
|
222
|
+
while (theModule != NULL)
|
223
|
+
{
|
224
|
+
SetCurrentModule(theEnv,theModule);
|
225
|
+
|
226
|
+
moduleFile = OpenFileIfNeeded(theEnv,moduleFile,fileName,pathName,fileNameBuffer,fileID,imageID,&fileCount,
|
227
|
+
moduleArrayVersion,headerFP,
|
228
|
+
"DeffunctionModuleData",ModulePrefix(DeffunctionData(theEnv)->DeffunctionCodeItem),
|
229
|
+
false,NULL);
|
230
|
+
|
231
|
+
if (moduleFile == NULL)
|
232
|
+
{
|
233
|
+
CloseDeffunctionFiles(theEnv,moduleFile,deffunctionFile,maxIndices);
|
234
|
+
return false;
|
235
|
+
}
|
236
|
+
|
237
|
+
DeffunctionModuleToCode(theEnv,moduleFile,theModule,imageID,maxIndices);
|
238
|
+
moduleFile = CloseFileIfNeeded(theEnv,moduleFile,&moduleArrayCount,&moduleArrayVersion,
|
239
|
+
maxIndices,NULL,NULL);
|
240
|
+
|
241
|
+
theDeffunction = GetNextDeffunction(theEnv,NULL);
|
242
|
+
|
243
|
+
while (theDeffunction != NULL)
|
244
|
+
{
|
245
|
+
deffunctionFile = OpenFileIfNeeded(theEnv,deffunctionFile,fileName,pathName,fileNameBuffer,fileID,imageID,&fileCount,
|
246
|
+
deffunctionArrayVersion,headerFP,
|
247
|
+
"Deffunction",ConstructPrefix(DeffunctionData(theEnv)->DeffunctionCodeItem),
|
248
|
+
false,NULL);
|
249
|
+
if (deffunctionFile == NULL)
|
250
|
+
{
|
251
|
+
CloseDeffunctionFiles(theEnv,moduleFile,deffunctionFile,maxIndices);
|
252
|
+
return false;
|
253
|
+
}
|
254
|
+
|
255
|
+
SingleDeffunctionToCode(theEnv,deffunctionFile,theDeffunction,imageID,
|
256
|
+
maxIndices,moduleCount);
|
257
|
+
deffunctionArrayCount++;
|
258
|
+
deffunctionFile = CloseFileIfNeeded(theEnv,deffunctionFile,&deffunctionArrayCount,
|
259
|
+
&deffunctionArrayVersion,maxIndices,NULL,NULL);
|
260
|
+
|
261
|
+
theDeffunction = GetNextDeffunction(theEnv,theDeffunction);
|
262
|
+
}
|
263
|
+
|
264
|
+
theModule = GetNextDefmodule(theEnv,theModule);
|
265
|
+
moduleCount++;
|
266
|
+
moduleArrayCount++;
|
267
|
+
}
|
268
|
+
|
269
|
+
CloseDeffunctionFiles(theEnv,moduleFile,deffunctionFile,maxIndices);
|
270
|
+
|
271
|
+
return true;
|
272
|
+
}
|
273
|
+
|
274
|
+
/***************************************************
|
275
|
+
NAME : CloseDeffunctionFiles
|
276
|
+
DESCRIPTION : Closes construct compiler files
|
277
|
+
for deffunction structures
|
278
|
+
INPUTS : 1) The deffunction module file
|
279
|
+
2) The deffunction structure file
|
280
|
+
3) The maximum number of indices
|
281
|
+
allowed in an array
|
282
|
+
RETURNS : Nothing useful
|
283
|
+
SIDE EFFECTS : Files closed
|
284
|
+
NOTES : None
|
285
|
+
***************************************************/
|
286
|
+
static void CloseDeffunctionFiles(
|
287
|
+
Environment *theEnv,
|
288
|
+
FILE *moduleFile,
|
289
|
+
FILE *deffunctionFile,
|
290
|
+
unsigned int maxIndices)
|
291
|
+
{
|
292
|
+
unsigned int count = maxIndices;
|
293
|
+
unsigned int arrayVersion = 0;
|
294
|
+
|
295
|
+
if (deffunctionFile != NULL)
|
296
|
+
{
|
297
|
+
count = maxIndices;
|
298
|
+
CloseFileIfNeeded(theEnv,deffunctionFile,&count,&arrayVersion,maxIndices,NULL,NULL);
|
299
|
+
}
|
300
|
+
|
301
|
+
if (moduleFile != NULL)
|
302
|
+
{
|
303
|
+
count = maxIndices;
|
304
|
+
CloseFileIfNeeded(theEnv,moduleFile,&count,&arrayVersion,maxIndices,NULL,NULL);
|
305
|
+
}
|
306
|
+
}
|
307
|
+
|
308
|
+
/***************************************************
|
309
|
+
NAME : DeffunctionModuleToCode
|
310
|
+
DESCRIPTION : Writes out the C values for a
|
311
|
+
deffunction module item
|
312
|
+
INPUTS : 1) The output file
|
313
|
+
2) The module for the deffunctions
|
314
|
+
3) The compile image id
|
315
|
+
4) The maximum number of elements
|
316
|
+
in an array
|
317
|
+
RETURNS : Nothing useful
|
318
|
+
SIDE EFFECTS : Deffunction module item written
|
319
|
+
NOTES : None
|
320
|
+
***************************************************/
|
321
|
+
static void DeffunctionModuleToCode(
|
322
|
+
Environment *theEnv,
|
323
|
+
FILE *theFile,
|
324
|
+
Defmodule *theModule,
|
325
|
+
unsigned int imageID,
|
326
|
+
unsigned int maxIndices)
|
327
|
+
{
|
328
|
+
fprintf(theFile,"{");
|
329
|
+
ConstructModuleToCode(theEnv,theFile,theModule,imageID,maxIndices,
|
330
|
+
DeffunctionData(theEnv)->DeffunctionModuleIndex,ConstructPrefix(DeffunctionData(theEnv)->DeffunctionCodeItem));
|
331
|
+
fprintf(theFile,"}");
|
332
|
+
}
|
333
|
+
|
334
|
+
/***************************************************
|
335
|
+
NAME : SingleDeffunctionToCode
|
336
|
+
DESCRIPTION : Writes out a single deffunction's
|
337
|
+
data to the file
|
338
|
+
INPUTS : 1) The output file
|
339
|
+
2) The deffunction
|
340
|
+
3) The compile image id
|
341
|
+
4) The maximum number of
|
342
|
+
elements in an array
|
343
|
+
5) The module index
|
344
|
+
RETURNS : Nothing useful
|
345
|
+
SIDE EFFECTS : Deffunction data written
|
346
|
+
NOTES : None
|
347
|
+
***************************************************/
|
348
|
+
static void SingleDeffunctionToCode(
|
349
|
+
Environment *theEnv,
|
350
|
+
FILE *theFile,
|
351
|
+
Deffunction *theDeffunction,
|
352
|
+
unsigned int imageID,
|
353
|
+
unsigned int maxIndices,
|
354
|
+
unsigned int moduleCount)
|
355
|
+
{
|
356
|
+
/* ==================
|
357
|
+
Deffunction Header
|
358
|
+
================== */
|
359
|
+
|
360
|
+
fprintf(theFile,"{");
|
361
|
+
ConstructHeaderToCode(theEnv,theFile,&theDeffunction->header,imageID,maxIndices,moduleCount,
|
362
|
+
ModulePrefix(DeffunctionData(theEnv)->DeffunctionCodeItem),
|
363
|
+
ConstructPrefix(DeffunctionData(theEnv)->DeffunctionCodeItem));
|
364
|
+
|
365
|
+
/* =========================
|
366
|
+
Deffunction specific data
|
367
|
+
========================= */
|
368
|
+
fprintf(theFile,",0,0,0,");
|
369
|
+
ExpressionToCode(theEnv,theFile,theDeffunction->code);
|
370
|
+
fprintf(theFile,",%d,%d,%d",
|
371
|
+
theDeffunction->minNumberOfParameters,
|
372
|
+
theDeffunction->maxNumberOfParameters,
|
373
|
+
theDeffunction->numberOfLocalVars);
|
374
|
+
|
375
|
+
fprintf(theFile,"}");
|
376
|
+
}
|
377
|
+
|
378
|
+
#endif
|
@@ -0,0 +1,54 @@
|
|
1
|
+
/*******************************************************/
|
2
|
+
/* "C" Language Integrated Production System */
|
3
|
+
/* */
|
4
|
+
/* CLIPS Version 6.40 07/30/16 */
|
5
|
+
/* */
|
6
|
+
/* */
|
7
|
+
/*******************************************************/
|
8
|
+
|
9
|
+
/*************************************************************/
|
10
|
+
/* Purpose: Deffunction Construct Compiler Code */
|
11
|
+
/* */
|
12
|
+
/* Principal Programmer(s): */
|
13
|
+
/* Brian L. Dantes */
|
14
|
+
/* */
|
15
|
+
/* Contributing Programmer(s): */
|
16
|
+
/* */
|
17
|
+
/* Revision History: */
|
18
|
+
/* */
|
19
|
+
/* 6.30: Added support for path name argument to */
|
20
|
+
/* constructs-to-c. */
|
21
|
+
/* */
|
22
|
+
/* Added const qualifiers to remove C++ */
|
23
|
+
/* deprecation warnings. */
|
24
|
+
/* */
|
25
|
+
/* 6.40: Removed LOCALE definition. */
|
26
|
+
/* */
|
27
|
+
/* Pragma once and other inclusion changes. */
|
28
|
+
/* */
|
29
|
+
/* Removed use of void pointers for specific */
|
30
|
+
/* data structures. */
|
31
|
+
/* */
|
32
|
+
/*************************************************************/
|
33
|
+
|
34
|
+
#ifndef _H_dffnxcmp
|
35
|
+
|
36
|
+
#pragma once
|
37
|
+
|
38
|
+
#define _H_dffnxcmp
|
39
|
+
|
40
|
+
#if DEFFUNCTION_CONSTRUCT && CONSTRUCT_COMPILER && (! RUN_TIME)
|
41
|
+
|
42
|
+
#include <stdio.h>
|
43
|
+
|
44
|
+
#include "dffnxfun.h"
|
45
|
+
|
46
|
+
void SetupDeffunctionCompiler(Environment *);
|
47
|
+
void PrintDeffunctionReference(Environment *,FILE *,Deffunction *,unsigned,unsigned);
|
48
|
+
void DeffunctionCModuleReference(Environment *,FILE *,unsigned long,unsigned int,unsigned int);
|
49
|
+
|
50
|
+
#endif /* DEFFUNCTION_CONSTRUCT && CONSTRUCT_COMPILER && (! RUN_TIME) */
|
51
|
+
|
52
|
+
#endif /* _H_dffnxcmp */
|
53
|
+
|
54
|
+
|
@@ -0,0 +1,241 @@
|
|
1
|
+
/*******************************************************/
|
2
|
+
/* "C" Language Integrated Production System */
|
3
|
+
/* */
|
4
|
+
/* CLIPS Version 6.40 10/01/16 */
|
5
|
+
/* */
|
6
|
+
/* */
|
7
|
+
/*******************************************************/
|
8
|
+
|
9
|
+
/*************************************************************/
|
10
|
+
/* Purpose: Deffunction Execution Routines */
|
11
|
+
/* */
|
12
|
+
/* Principal Programmer(s): */
|
13
|
+
/* Brian L. Dantes */
|
14
|
+
/* */
|
15
|
+
/* Contributing Programmer(s): */
|
16
|
+
/* */
|
17
|
+
/* Revision History: */
|
18
|
+
/* */
|
19
|
+
/* 6.23: Correction for FalseSymbol/TrueSymbol. DR0859 */
|
20
|
+
/* */
|
21
|
+
/* 6.30: Changed garbage collection algorithm. */
|
22
|
+
/* */
|
23
|
+
/* Changed integer type/precision. */
|
24
|
+
/* */
|
25
|
+
/* Added const qualifiers to remove C++ */
|
26
|
+
/* deprecation warnings. */
|
27
|
+
/* */
|
28
|
+
/* 6.40: Pragma once and other inclusion changes. */
|
29
|
+
/* */
|
30
|
+
/* Added support for booleans with <stdbool.h>. */
|
31
|
+
/* */
|
32
|
+
/* Removed use of void pointers for specific */
|
33
|
+
/* data structures. */
|
34
|
+
/* */
|
35
|
+
/* UDF redesign. */
|
36
|
+
/* */
|
37
|
+
/* Added GCBlockStart and GCBlockEnd functions */
|
38
|
+
/* for garbage collection blocks. */
|
39
|
+
/* */
|
40
|
+
/*************************************************************/
|
41
|
+
|
42
|
+
/* =========================================
|
43
|
+
*****************************************
|
44
|
+
EXTERNAL DEFINITIONS
|
45
|
+
=========================================
|
46
|
+
***************************************** */
|
47
|
+
#include "setup.h"
|
48
|
+
|
49
|
+
#if DEFFUNCTION_CONSTRUCT
|
50
|
+
|
51
|
+
#include <stdio.h>
|
52
|
+
#include <string.h>
|
53
|
+
|
54
|
+
#include "constrct.h"
|
55
|
+
#include "envrnmnt.h"
|
56
|
+
#include "prcdrfun.h"
|
57
|
+
#include "prccode.h"
|
58
|
+
#include "prntutil.h"
|
59
|
+
#include "proflfun.h"
|
60
|
+
#include "router.h"
|
61
|
+
#include "utility.h"
|
62
|
+
#include "watch.h"
|
63
|
+
|
64
|
+
#include "dffnxexe.h"
|
65
|
+
|
66
|
+
/* =========================================
|
67
|
+
*****************************************
|
68
|
+
CONSTANTS
|
69
|
+
=========================================
|
70
|
+
***************************************** */
|
71
|
+
#define BEGIN_TRACE ">> "
|
72
|
+
#define END_TRACE "<< "
|
73
|
+
|
74
|
+
/* =========================================
|
75
|
+
*****************************************
|
76
|
+
INTERNALLY VISIBLE FUNCTION HEADERS
|
77
|
+
=========================================
|
78
|
+
***************************************** */
|
79
|
+
|
80
|
+
static void UnboundDeffunctionErr(Environment *,const char *);
|
81
|
+
|
82
|
+
#if DEBUGGING_FUNCTIONS
|
83
|
+
static void WatchDeffunction(Environment *,const char *);
|
84
|
+
#endif
|
85
|
+
|
86
|
+
/* =========================================
|
87
|
+
*****************************************
|
88
|
+
EXTERNALLY VISIBLE FUNCTIONS
|
89
|
+
=========================================
|
90
|
+
***************************************** */
|
91
|
+
|
92
|
+
/****************************************************
|
93
|
+
NAME : CallDeffunction
|
94
|
+
DESCRIPTION : Executes the body of a deffunction
|
95
|
+
INPUTS : 1) The deffunction
|
96
|
+
2) Argument expressions
|
97
|
+
3) Data object buffer to hold result
|
98
|
+
RETURNS : Nothing useful
|
99
|
+
SIDE EFFECTS : Deffunction executed and result
|
100
|
+
stored in data object buffer
|
101
|
+
NOTES : Used in EvaluateExpression(theEnv,)
|
102
|
+
****************************************************/
|
103
|
+
void CallDeffunction(
|
104
|
+
Environment *theEnv,
|
105
|
+
Deffunction *dptr,
|
106
|
+
Expression *args,
|
107
|
+
UDFValue *returnValue)
|
108
|
+
{
|
109
|
+
bool oldce;
|
110
|
+
Deffunction *previouslyExecutingDeffunction;
|
111
|
+
GCBlock gcb;
|
112
|
+
#if PROFILING_FUNCTIONS
|
113
|
+
struct profileFrameInfo profileFrame;
|
114
|
+
#endif
|
115
|
+
|
116
|
+
returnValue->value = FalseSymbol(theEnv);
|
117
|
+
EvaluationData(theEnv)->EvaluationError = false;
|
118
|
+
if (EvaluationData(theEnv)->HaltExecution)
|
119
|
+
return;
|
120
|
+
|
121
|
+
GCBlockStart(theEnv,&gcb);
|
122
|
+
|
123
|
+
oldce = ExecutingConstruct(theEnv);
|
124
|
+
SetExecutingConstruct(theEnv,true);
|
125
|
+
previouslyExecutingDeffunction = DeffunctionData(theEnv)->ExecutingDeffunction;
|
126
|
+
DeffunctionData(theEnv)->ExecutingDeffunction = dptr;
|
127
|
+
EvaluationData(theEnv)->CurrentEvaluationDepth++;
|
128
|
+
dptr->executing++;
|
129
|
+
PushProcParameters(theEnv,args,CountArguments(args),DeffunctionName(dptr),
|
130
|
+
"deffunction",UnboundDeffunctionErr);
|
131
|
+
if (EvaluationData(theEnv)->EvaluationError)
|
132
|
+
{
|
133
|
+
dptr->executing--;
|
134
|
+
DeffunctionData(theEnv)->ExecutingDeffunction = previouslyExecutingDeffunction;
|
135
|
+
EvaluationData(theEnv)->CurrentEvaluationDepth--;
|
136
|
+
|
137
|
+
GCBlockEndUDF(theEnv,&gcb,returnValue);
|
138
|
+
CallPeriodicTasks(theEnv);
|
139
|
+
|
140
|
+
SetExecutingConstruct(theEnv,oldce);
|
141
|
+
return;
|
142
|
+
}
|
143
|
+
|
144
|
+
#if DEBUGGING_FUNCTIONS
|
145
|
+
if (dptr->trace)
|
146
|
+
WatchDeffunction(theEnv,BEGIN_TRACE);
|
147
|
+
#endif
|
148
|
+
|
149
|
+
#if PROFILING_FUNCTIONS
|
150
|
+
StartProfile(theEnv,&profileFrame,
|
151
|
+
&dptr->header.usrData,
|
152
|
+
ProfileFunctionData(theEnv)->ProfileConstructs);
|
153
|
+
#endif
|
154
|
+
|
155
|
+
EvaluateProcActions(theEnv,dptr->header.whichModule->theModule,
|
156
|
+
dptr->code,dptr->numberOfLocalVars,
|
157
|
+
returnValue,UnboundDeffunctionErr);
|
158
|
+
|
159
|
+
#if PROFILING_FUNCTIONS
|
160
|
+
EndProfile(theEnv,&profileFrame);
|
161
|
+
#endif
|
162
|
+
|
163
|
+
#if DEBUGGING_FUNCTIONS
|
164
|
+
if (dptr->trace)
|
165
|
+
WatchDeffunction(theEnv,END_TRACE);
|
166
|
+
#endif
|
167
|
+
ProcedureFunctionData(theEnv)->ReturnFlag = false;
|
168
|
+
|
169
|
+
dptr->executing--;
|
170
|
+
PopProcParameters(theEnv);
|
171
|
+
DeffunctionData(theEnv)->ExecutingDeffunction = previouslyExecutingDeffunction;
|
172
|
+
EvaluationData(theEnv)->CurrentEvaluationDepth--;
|
173
|
+
|
174
|
+
GCBlockEndUDF(theEnv,&gcb,returnValue);
|
175
|
+
CallPeriodicTasks(theEnv);
|
176
|
+
|
177
|
+
SetExecutingConstruct(theEnv,oldce);
|
178
|
+
}
|
179
|
+
|
180
|
+
/* =========================================
|
181
|
+
*****************************************
|
182
|
+
INTERNALLY VISIBLE FUNCTIONS
|
183
|
+
=========================================
|
184
|
+
***************************************** */
|
185
|
+
|
186
|
+
/*******************************************************
|
187
|
+
NAME : UnboundDeffunctionErr
|
188
|
+
DESCRIPTION : Print out a synopis of the currently
|
189
|
+
executing deffunction for unbound
|
190
|
+
variable errors
|
191
|
+
INPUTS : None
|
192
|
+
RETURNS : Nothing useful
|
193
|
+
SIDE EFFECTS : Error synopsis printed to STDERR
|
194
|
+
NOTES : None
|
195
|
+
*******************************************************/
|
196
|
+
static void UnboundDeffunctionErr(
|
197
|
+
Environment *theEnv,
|
198
|
+
const char *logName)
|
199
|
+
{
|
200
|
+
WriteString(theEnv,logName,"deffunction '");
|
201
|
+
WriteString(theEnv,logName,DeffunctionName(DeffunctionData(theEnv)->ExecutingDeffunction));
|
202
|
+
WriteString(theEnv,logName,"'.\n");
|
203
|
+
}
|
204
|
+
|
205
|
+
#if DEBUGGING_FUNCTIONS
|
206
|
+
|
207
|
+
/***************************************************
|
208
|
+
NAME : WatchDeffunction
|
209
|
+
DESCRIPTION : Displays a message indicating when
|
210
|
+
a deffunction began and ended
|
211
|
+
execution
|
212
|
+
INPUTS : The beginning or end trace string
|
213
|
+
to print when deffunction starts
|
214
|
+
or finishes respectively
|
215
|
+
RETURNS : Nothing useful
|
216
|
+
SIDE EFFECTS : Watch message printed
|
217
|
+
NOTES : None
|
218
|
+
***************************************************/
|
219
|
+
static void WatchDeffunction(
|
220
|
+
Environment *theEnv,
|
221
|
+
const char *tstring)
|
222
|
+
{
|
223
|
+
if (ConstructData(theEnv)->ClearReadyInProgress ||
|
224
|
+
ConstructData(theEnv)->ClearInProgress)
|
225
|
+
{ return; }
|
226
|
+
|
227
|
+
WriteString(theEnv,STDOUT,"DFN ");
|
228
|
+
WriteString(theEnv,STDOUT,tstring);
|
229
|
+
if (DeffunctionData(theEnv)->ExecutingDeffunction->header.whichModule->theModule != GetCurrentModule(theEnv))
|
230
|
+
{
|
231
|
+
WriteString(theEnv,STDOUT,DeffunctionModule(DeffunctionData(theEnv)->ExecutingDeffunction));;
|
232
|
+
WriteString(theEnv,STDOUT,"::");
|
233
|
+
}
|
234
|
+
WriteString(theEnv,STDOUT,DeffunctionData(theEnv)->ExecutingDeffunction->header.name->contents);
|
235
|
+
WriteString(theEnv,STDOUT," ED:");
|
236
|
+
WriteInteger(theEnv,STDOUT,EvaluationData(theEnv)->CurrentEvaluationDepth);
|
237
|
+
PrintProcParamArray(theEnv,STDOUT);
|
238
|
+
}
|
239
|
+
|
240
|
+
#endif
|
241
|
+
#endif
|