12345678910111213141516171819202122232425262728293031323334353637383940 |
- % BIG-FASLEND.RED - Patch to FASLEND for huge files
- %
- % Author: Eric Benson
- % Symbolic Computation Group
- % Computer Science Dept.
- % University of Utah
- % Date: 7 May 1982
- % Copyright (c) 1982 University of Utah
- % <PSL.COMP>BIG-FASLEND.RED.4, 10-Jun-82 10:39:32, Edit by GRISS
- % Added InitCodeMax!* for testing
- %
- lisp procedure CompileUncompiledExpressions();
- <<ErrorPrintF("%n*** Init code length is %w%n",
- length car UncompiledExpressions!*);
- CompileInitCode('!*!*Fasl!*!*InitCode!*!*,
- car UncompiledExpressions!*)>>;
- FLUID '(InitCodeMax!*);
- LoadTime <<InitCodeMax!*:=350>>;
- lisp procedure CompileInitCode(Name, InitCodeList);
- begin scalar X, Len, LastHalf;
- return if ILessP(Len := length InitCodeList, InitCodeMax!*) then
- DfPrintFasl list('de, Name, '(), 'progn . InitCodeList)
- else
- << ErrorPrintF(
- "*** Initcode length %w too large, splitting into smaller pieces", Len);
- ErrorPrintF("*** Please use smaller files in FASL");
- X := PNTH(InitCodeList, IQuotient(Len, 2));
- LastHalf := cdr X;
- Rplacd(X, NIL); % tricky, split the code in 2
- X := Intern Concat(ID2String Name, StringGensym());
- Flag1(X, 'InternalFunction); % has to be internal to get called!
- CompileInitCode(X,
- InitCodeList);
- CompileInitCode(Name, list X . LastHalf) >>; % call previous
- end;
|