home *** CD-ROM | disk | FTP | other *** search
/ APDL Public Domain 1 / APDL_PD1A.iso / program / language / gofer / Sources / c / builtin next >
Encoding:
Text File  |  1993-02-12  |  4.3 KB  |  123 lines

  1. /* --------------------------------------------------------------------------
  2.  * builtin.c:   Copyright (c) Mark P Jones 1991-1993.   All rights reserved.
  3.  *              See goferite.h for details and conditions of use etc...
  4.  *              Gofer version 2.28 January 1993
  5.  *
  6.  * Primitive functions, input output etc...
  7.  * ------------------------------------------------------------------------*/
  8.  
  9. #define  NEED_MATH
  10. #include "prelude.h"
  11. #include "storage.h"
  12. #include "connect.h"
  13. #include "errors.h"
  14.  
  15. Name nameFatbar, nameFail;        /* primitives reqd for translation */
  16. Name nameIf,     nameSel;
  17. Name nameMinus,  nameDivide;
  18.  
  19. Name nameUndefMem;            /* undefined member primitive       */
  20. Name nameError;                /* error primitive function       */
  21. Name nameBlackHole;            /* for GC-detected black hole       */
  22.  
  23. Name nameAnd,    nameOr;        /* built-in logical connectives       */
  24. Name nameOtherwise;
  25.  
  26. Name namePrint,  nameNPrint;        /* primitives for printing       */
  27.  
  28. #ifdef LAMBDAVAR
  29. static Name nameLvUnbound;        /* unbound mutable variable       */
  30. #endif
  31. #ifdef LAMBDANU
  32. static Name nameLnUnbound;        /* unbound mutable variable       */
  33. static Name nameLnNocont;        /* unspecified continuation       */
  34. static Name nameLnFlip;            /* simple flip primitive       */
  35. static Name nameLnDone;            /* simple finishing continuation   */
  36. #endif
  37.  
  38. /* --------------------------------------------------------------------------
  39.  * Built-in primitives:
  40.  * ------------------------------------------------------------------------*/
  41.  
  42. #define PRIMITIVES_CODE 1        /* want to include code for prims  */
  43. #include "prims.c"
  44.  
  45. /* --------------------------------------------------------------------------
  46.  * Built-in control:
  47.  * ------------------------------------------------------------------------*/
  48.  
  49. Void builtIn(what)
  50. Int what; {
  51.     Int i;
  52.  
  53.     switch (what) {
  54.     case RESET   : if (writingFile) {
  55.                fclose(writingFile);
  56.                writingFile = 0;
  57.                }
  58.                break;
  59.  
  60.     case MARK    : for (i=0; i<NUM_CHARS; ++i)
  61.                mark(consCharArray[i]);
  62.                break;
  63.  
  64.     case INSTALL : for (i=0; i<NUM_CHARS; ++i)
  65.                consCharArray[i] = ap(nameCons,mkChar(i));
  66.  
  67.                consOpen       = consCharArray['('];
  68.                consSpace      = consCharArray[' '];
  69.                consComma      = consCharArray[','];
  70.                consClose      = consCharArray[')'];
  71.                consObrace     = consCharArray['{'];
  72.                consCbrace     = consCharArray['}'];
  73.                consOsq          = consCharArray['['];
  74.                consCsq          = consCharArray[']'];
  75.                consBack       = consCharArray['`'];
  76.                consMinus      = consCharArray['-'];
  77.                consQuote      = consCharArray['\''];
  78.                consDQuote     = consCharArray['\"'];
  79.  
  80. #define pFun(n,s,t)    addPrim(0,n=newName(findText(s)),t,NIL)
  81.                pFun(nameFatbar,       "_FATBAR", "primFatbar");
  82.                pFun(nameFail,       "_FAIL",   "primFail");
  83.                pFun(nameIf,       "_IF",     "primIf");
  84.                pFun(nameSel,       "_SEL",    "primSel");
  85.  
  86.                pFun(nameMinus,     "_minus",  "primMinusInt");
  87.                pFun(nameDivide,       "_divide", "primDivInt");
  88.  
  89.                pFun(namePrimCmp,   "_compare", "primCompare");
  90.                pFun(namePrint,       "_print",   "primPrint");
  91.                pFun(nameNPrint,       "_nprint",  "primNprint");
  92.                pFun(nameLPrint,       "_lprint",  "primLprint");
  93.                pFun(nameNLPrint,   "_nlprint", "primNlprint");
  94.                pFun(nameSPrint,       "_sprint",  "primSprint");
  95.                pFun(nameNSPrint,   "_nsprint", "primNsprint");
  96.                pFun(nameInput,       "_input",   "primInput");
  97.                pFun(nameUndefMem,  "_undefined_member", "primUndefMem");
  98.                pFun(nameBlackHole, "Gc Black Hole", "primGCBhole");
  99. #ifdef LAMBDAVAR
  100.                pFun(nameLvUnbound, "Unbound mutable variable",
  101.                             "primLvUnbound");
  102. #endif
  103. #ifdef LAMBDANU
  104.                pFun(nameLnUnbound, "Unbound mutable variable",
  105.                             "primLnUnbound");
  106.                pFun(nameLnNocont,  "Unspecified continuation",
  107.                             "primLnNocont");
  108.                pFun(nameLnFlip,       "_LambdaNuFlip", "primLnFlip");
  109.                pFun(nameLnDone,       "_LambdaNuDone", "primLnDone");
  110. #endif
  111. #undef pFun
  112. #define predef(nm,str) nm=newName(findText(str)); name(nm).defn=PREDEFINED
  113.                predef(nameAnd,        "&&");
  114.                predef(nameOr,        "||");
  115.                predef(nameOtherwise,    "otherwise");
  116.                predef(nameError,    "error");
  117. #undef  predef
  118.                break;
  119.     }
  120. }
  121.  
  122. /*-------------------------------------------------------------------------*/
  123.