aboutsummaryrefslogtreecommitdiff
path: root/src/interp/interp-fix.boot
diff options
context:
space:
mode:
Diffstat (limited to 'src/interp/interp-fix.boot')
-rw-r--r--src/interp/interp-fix.boot77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/interp/interp-fix.boot b/src/interp/interp-fix.boot
new file mode 100644
index 00000000..d21bfd1b
--- /dev/null
+++ b/src/interp/interp-fix.boot
@@ -0,0 +1,77 @@
+-- Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
+-- All rights reserved.
+--
+-- Redistribution and use in source and binary forms, with or without
+-- modification, are permitted provided that the following conditions are
+-- met:
+--
+-- - Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+--
+-- - Redistributions in binary form must reproduce the above copyright
+-- notice, this list of conditions and the following disclaimer in
+-- the documentation and/or other materials provided with the
+-- distribution.
+--
+-- - Neither the name of The Numerical ALgorithms Group Ltd. nor the
+-- names of its contributors may be used to endorse or promote products
+-- derived from this software without specific prior written permission.
+--
+-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+-- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+-- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+-- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+-- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+-- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+-- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+-- From newfort.boot:
+
+checkPrecision e ==
+ -- Do we have a string?
+ CHAR_-CODE(CHAR(e,0)) = 34 => e
+ e := delete(char " ",STRINGIMAGE e)
+ $fortranPrecision = "double" =>
+ iPart := SUBSEQ(e,0,(period:=POSITION(char ".",e))+1)
+ expt := if ePos := POSITION(char "E",e) then SUBSEQ(e,ePos+1) else "0"
+ rPart :=
+ ePos => SUBSEQ(e,period+1,ePos)
+ period+1 < LENGTH e => SUBSEQ(e,period+1)
+ "0"
+ STRCONC(iPart,rPart,"D",expt)
+ e
+
+-- From i-eval.boot
+
+evaluateType1 form ==
+ --evaluates the arguments passed to a constructor
+ [op,:argl]:= form
+ constructor? op =>
+ null (sig := getConstructorSignature form) =>
+ throwEvalTypeMsg("S2IE0005",[form])
+ [.,:ml] := sig
+ ml := replaceSharps(ml,form)
+ # argl ^= #ml => throwEvalTypeMsg("S2IE0003",[form,form])
+ for x in argl for m in ml for argnum in 1.. repeat
+ typeList := [v,:typeList] where v ==
+ categoryForm?(m) =>
+ m := evaluateType MSUBSTQ(x,'_$,m)
+ evalCategory(x' := (evaluateType x), m) => x'
+ throwEvalTypeMsg("S2IE0004",[form])
+
+ m := evaluateType m
+ GETDATABASE(opOf m,'CONSTRUCTORKIND) = 'domain and
+ (tree := mkAtree x) and putTarget(tree,m) and
+ ((bottomUp tree) is [m1]) and
+ (v:= coerceInteractive(getAndEvalConstructorArgument tree,m))
+ => objValUnwrap v
+ if x = $EmptyMode then x := $quadSymbol
+ throwEvalTypeMsg("S2IE0006",[makeOrdinal argnum,m,form])
+ [op,:NREVERSE typeList]
+ throwEvalTypeMsg("S2IE0007",[op])
+