/usr/share/axiom-20170501/src/algebra/FT.spad is in axiom-source 20170501-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | )abbrev domain FT FortranType
++ Author: Mike Dewar
++ Date Created: October 1992
++ Description:
++ Creates and manipulates objects which correspond to FORTRAN
++ data types, including array dimensions.
FortranType() : SIG == CODE where
FST ==> FortranScalarType
FSTU ==> Union(fst:FST,void:"void")
SIG ==> SetCategory with
coerce : $ -> OutputForm
++ coerce(x) provides a printable form for x
coerce : FST -> $
++ coerce(t) creates an element from a scalar type
scalarTypeOf : $ -> FSTU
++ scalarTypeOf(t) returns the FORTRAN data type of t
dimensionsOf : $ -> List Polynomial Integer
++ dimensionsOf(t) returns the dimensions of t
external? : $ -> Boolean
++ external?(u) returns true if u is declared to be EXTERNAL
construct : (FSTU,List Symbol,Boolean) -> $
++ construct(type,dims) creates an element of FortranType
construct : (FSTU,List Polynomial Integer,Boolean) -> $
++ construct(type,dims) creates an element of FortranType
fortranReal : () -> $
++ fortranReal() returns REAL, an element of FortranType
fortranDouble : () -> $
++ fortranDouble() returns DOUBLE PRECISION, an element of FortranType
fortranInteger : () -> $
++ fortranInteger() returns INTEGER, an element of FortranType
fortranLogical : () -> $
++ fortranLogical() returns LOGICAL, an element of FortranType
fortranComplex : () -> $
++ fortranComplex() returns COMPLEX, an element of FortranType
fortranDoubleComplex: () -> $
++ fortranDoubleComplex() returns DOUBLE COMPLEX, an element of
++ FortranType
fortranCharacter : () -> $
++ fortranCharacter() returns CHARACTER, an element of FortranType
CODE ==> add
Dims == List Polynomial Integer
Rep := Record(type : FSTU, dimensions : Dims, external : Boolean)
coerce(a:$):OutputForm ==
t : OutputForm
if external?(a) then
if scalarTypeOf(a) case void then
t := "EXTERNAL"::OutputForm
else
t := blankSeparate(["EXTERNAL"::OutputForm,
coerce(scalarTypeOf a)$FSTU])$OutputForm
else
t := coerce(scalarTypeOf a)$FSTU
empty? dimensionsOf(a) => t
sub(t,
paren([u::OutputForm for u in dimensionsOf(a)])$OutputForm)$OutputForm
scalarTypeOf(u:$):FSTU ==
u.type
dimensionsOf(u:$):Dims ==
u.dimensions
external?(u:$):Boolean ==
u.external
construct(t:FSTU, d:List Symbol, e:Boolean):$ ==
e and not empty? d => error "EXTERNAL objects cannot have dimensions"
not(e) and t case void => error "VOID objects must be EXTERNAL"
construct(t,[l::Polynomial(Integer) for l in d],e)$Rep
construct(t:FSTU, d:List Polynomial Integer, e:Boolean):$ ==
e and not empty? d => error "EXTERNAL objects cannot have dimensions"
not(e) and t case void => error "VOID objects must be EXTERNAL"
construct(t,d,e)$Rep
coerce(u:FST):$ ==
construct([u]$FSTU,[]@List Polynomial Integer,false)
fortranReal():$ == ("real"::FST)::$
fortranDouble():$ == ("double precision"::FST)::$
fortranInteger():$ == ("integer"::FST)::$
fortranComplex():$ == ("complex"::FST)::$
fortranDoubleComplex():$ == ("double complex"::FST)::$
fortranCharacter():$ == ("character"::FST)::$
fortranLogical():$ == ("logical"::FST)::$
|