annotate jtype.h @ 0:e0bbaa717f41 draft default tip

lol J
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Mon, 25 Nov 2013 11:56:30 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
1 /* Copyright 1990-2011, Jsoftware Inc. All rights reserved. */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
2 /* License in license.txt. */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
3 /* */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
4 /* Type Definitions */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
5
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
6 #define U unsigned
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
7
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
8 #if (SYS & SYS_UNIX)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
9 #define _stdcall
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
10 #endif
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
11
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
12 #if SY_64
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
13 typedef long long A1;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
14 typedef unsigned long long BT;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
15 typedef long long I;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
16 typedef long long SB;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
17 typedef unsigned long long UI;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
18
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
19 #else
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
20 typedef long A1;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
21 typedef unsigned long BT;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
22 typedef long I;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
23 typedef long SB;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
24 typedef unsigned long UI;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
25 #endif
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
26
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
27 typedef char B;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
28 typedef char C;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
29 typedef char* Ptr;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
30 typedef short S;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
31 typedef short C2;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
32 typedef unsigned char UC;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
33 typedef unsigned short US;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
34 typedef unsigned short U2;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
35 typedef unsigned int UINT;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
36 typedef int I4;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
37 typedef double D;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
38 typedef FILE* F;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
39
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
40 typedef long double LD;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
41 typedef struct {I k,flag,m,t,c,n,r,s[1];}* A;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
42 typedef struct {A a,t;}TA;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
43 typedef A (*AF)();
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
44 typedef UI (*UF)();
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
45 typedef void (*VF)();
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
46 typedef int (*CMP)(); /* comparison function in sort */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
47 typedef A X;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
48 typedef struct {X n,d;} Q;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
49 typedef struct {D re,im;} Z;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
50 typedef union {D d;UINT i[2];} DI;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
51
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
52 #if (SYS & SYS_PC+SYS_MACINTOSH) /* for use by the session manager */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
53 typedef S SI;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
54 #else
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
55 typedef I SI;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
56 #endif
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
57
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
58 /* Fields of type A */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
59
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
60 #define AK(x) ((x)->k) /* offset of ravel wrt x */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
61 #define AFLAG(x) ((x)->flag) /* flag */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
62 #define AM(x) ((x)->m) /* Max # bytes in ravel */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
63 #define AT(x) ((x)->t) /* Type; one of the #define below */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
64 #define AC(x) ((x)->c) /* Reference count. */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
65 #define AN(x) ((x)->n) /* # elements in ravel */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
66 #define AR(x) ((x)->r) /* Rank */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
67 #define AH 7L /* # non-shape header words in A */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
68 #define AS(x) ((x)->s) /* Pointer to shape */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
69
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
70 #if SY_64
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
71 #define AKX(x) (SZI*(AH+AR(x)))
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
72 #define WP(t,n,r) (AH+ r +(1&&t&LAST0)+((t&NAME?sizeof(NM):0)+(n)*bp(t)+SZI-1)/SZI)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
73 #else
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
74 #define AKX(x) (SZI*(AH+AR(x)+!(1&AR(x))))
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
75 #define WP(t,n,r) (AH+(r+!(1&r))+(1&&t&LAST0)+((t&NAME?sizeof(NM):0)+(n)*bp(t)+SZI-1)/SZI)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
76 #endif
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
77 /* make sure array values are double-word aligned */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
78
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
79 #define AV(x) ( (I*)((C*)(x)+AK(x))) /* pointer to ravel */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
80 #define BAV(x) ( (C*)(x)+AK(x) ) /* boolean */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
81 #define CAV(x) ( (C*)(x)+AK(x) ) /* character */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
82 #define USAV(x) ((US*)((C*)(x)+AK(x))) /* wchar */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
83 #define UAV(x) ( (UC*)(x)+AK(x) ) /* unsigned character */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
84 #define NAV(x) ((NM*)((C*)(x)+AK(x))) /* name */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
85 #define IAV(x) AV(x) /* integer */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
86 #define DAV(x) ( (D*)((C*)(x)+AK(x))) /* double */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
87 #define ZAV(x) ( (Z*)((C*)(x)+AK(x))) /* complex */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
88 #define XAV(x) ( (X*)((C*)(x)+AK(x))) /* extended */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
89 #define QAV(x) ( (Q*)((C*)(x)+AK(x))) /* rational */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
90 #define AAV(x) ( (A*)((C*)(x)+AK(x))) /* boxed */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
91 #define A1AV(x) ((A1*)((C*)(x)+AK(x))) /* boxed relative address */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
92 #define VAV(x) ( (V*)((C*)(x)+AK(x))) /* verb, adverb, conj */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
93 #define PAV(x) ( (P*)((C*)(x)+AK(x))) /* sparse */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
94 #define SBAV(x) ((SB*)((C*)(x)+AK(x))) /* symbol */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
95
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
96 /* Types for AT(x) field of type A */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
97 /* Note: BOOL name conflict with ???; SCHAR name conflict with sqltypes.h */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
98
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
99 #define B01 (I)1L /* B boolean */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
100 #define LIT (I)2L /* C literal (character) */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
101 #define INT (I)4L /* I integer */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
102 #define FL (I)8L /* D double (IEEE floating point) */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
103 #define CMPX (I)16L /* Z complex */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
104 #define BOX (I)32L /* A boxed */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
105 #define XNUM (I)64L /* X extended precision integer */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
106 #define RAT (I)128L /* Q rational number */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
107 #define BIT (I)256L /* BT bit boolean */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
108 #define SB01 (I)1024L /* P sparse boolean */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
109 #define SLIT (I)2048L /* P sparse literal (character) */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
110 #define SINT (I)4096L /* P sparse integer */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
111 #define SFL (I)8192L /* P sparse floating point */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
112 #define SCMPX (I)16384L /* P sparse complex */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
113 #define SBOX (I)32768L /* P sparse boxed */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
114 #define SBT (I)65536L /* SB symbol */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
115 #define C2T (I)131072L /* C2 unicode (2-byte characters) */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
116 #define VERB (I)262144L /* V verb */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
117 #define ADV (I)524288L /* V adverb */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
118 #define CONJ (I)1048576L /* V conjunction */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
119 #define ASGN (I)2097152L /* I assignment */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
120 #define MARK (I)4194304L /* I end-of-stack marker */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
121 #define SYMB (I)8388608L /* I locale (symbol table) */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
122 #define CONW (I)16777216L /* CW control word */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
123 #define NAME (I)33554432L /* NM name */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
124 #define LPAR (I)67108864L /* I left parenthesis */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
125 #define RPAR (I)134217728L /* I right parenthesis */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
126 #define XD (I)268435456L /* DX extended floating point */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
127 #define XZ (I)536870912L /* ZX extended complex */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
128
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
129 #define ANY -1L
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
130 #define SPARSE (SB01+SINT+SFL+SCMPX+SLIT+SBOX)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
131 #define DENSE (NOUN&~SPARSE)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
132 #define NUMERIC (B01+BIT+INT+FL+CMPX+XNUM+RAT+XD+XZ+SB01+SINT+SFL+SCMPX)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
133 #define DIRECT (LIT+C2T+B01+BIT+INT+FL+CMPX+SBT)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
134 #define JCHAR (LIT+C2T+SLIT)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
135 #define NOUN (NUMERIC+JCHAR+BOX+SBOX+SBT)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
136 #define FUNC (VERB+ADV+CONJ)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
137 #define RHS (NOUN+FUNC)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
138 #define IS1BYTE (B01+LIT)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
139 #define LAST0 (B01+LIT+C2T+NAME)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
140
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
141 #define HOMO(s,t) ((s)==(t) || (s)&NUMERIC&&(t)&NUMERIC || (s)&JCHAR&&(t)&JCHAR)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
142 #define STYPE(t) ((t)& B01?SB01:(t)& INT?SINT:(t)& FL?SFL:(t)& CMPX?SCMPX:(t)&LIT?SLIT:(t)& BOX?SBOX:0L)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
143 #define DTYPE(t) ((t)&SB01? B01:(t)&SINT? INT:(t)&SFL? FL:(t)&SCMPX? CMPX:(t)&SLIT?LIT:(t)&SBOX? BOX:0L)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
144
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
145 /* Values for AFLAG(x) field of type A */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
146
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
147 #define AFRO (I)1 /* read only; can't change data */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
148 #define AFNJA (I)2 /* non-J alloc; i.e. mem mapped */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
149 #define AFSMM (I)4 /* SMM managed */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
150 #define AFREL (I)8 /* uses relative addressing */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
151
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
152 #define AABS(rel,k) ((I)(rel)+(I)(k)) /* absolute address from relative address */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
153 #define AREL(abs,k) ((I)(abs)-(I)(k)) /* relative address from absolute address */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
154 #define ARELATIVE(w) (AT(w)&BOX&&AFLAG(w)&AFNJA+AFSMM+AFREL)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
155 #define AADR(w,z) ((w)?(A)((I)(w)+(I)(z)):(z))
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
156 #define AVR(i) AADR(ad,av[i])
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
157 #define IVR(i) AADR(id,iv[i])
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
158 #define WVR(i) AADR(wd,wv[i])
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
159 #define YVR(i) AADR(yd,yv[i])
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
160 #define AAV0(w) (ARELATIVE(w)?(A)(*AV(w)+(I)(w)):*AAV(w))
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
161 #define RELOCATE(w,z) (ARELATIVE(w)?relocate((I)(w)-(I)(z),(z)):(z))
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
162
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
163
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
164 typedef struct {I i;US n,go,source;C type;} CW;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
165
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
166 /* control word (always has corresponding token string) */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
167 /* type - as specified in w.h */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
168 /* go - line number to go to */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
169 /* source - source line number */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
170 /* i - beginning index of token string */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
171 /* n - length of token string */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
172
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
173
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
174 #define DCPARSE 1 /* sentence for parser */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
175 #define DCSCRIPT 2 /* script -- line() */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
176 #define DCCALL 3 /* verb/adv/conj call -- dbunquote() */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
177 #define DCJUNK 4 /* stack entry is obsolete */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
178
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
179 typedef struct DS{ /* 1 2 3 */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
180 struct DS*dclnk; /* x x x link to next stack entry */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
181 A dca; /* x fn/op name */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
182 A dcf; /* x fn/op */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
183 A dcx; /* x left argument */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
184 A dcy; /* x x x tokens; text ; right argument */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
185 A dcloc; /* x local symb table (0 if not explicit) */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
186 A dcc; /* x control matrix (0 if not explicit) */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
187 I dci; /* x x x index ; next index ; ptr to line # */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
188 I dcj; /* x x ; prev index ; error # */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
189 I dcn; /* x x ; line # ; ptr to symb entry */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
190 I dcm; /* x x ; script index; # of non-locale part of name */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
191 I dcstop; /* x the last stop in this function */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
192 C dctype; /* x x x type of entry (see #define DC*) */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
193 B dcsusp; /* x x 1 iff begins a debug suspension */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
194 C dcss; /* x single step code */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
195 } DST;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
196
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
197 typedef DST* DC;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
198
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
199
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
200 typedef struct {I e,p;X x;} DX;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
201 /* for the p field in DX */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
202 #define DXIPREC ((I)-1) /* infinite precision */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
203 #define DXINF ((I)-2) /* _ infinity */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
204 #define DXMINF ((I)-3) /* __ negative infinity */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
205
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
206 /* extended floating point */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
207 /* e - exponent */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
208 /* p - precision & other codes */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
209 /* +ve # of significant digits */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
210 /* _1 infinite precision (with trailing 0s) */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
211 /* _2 infinity _ */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
212 /* _3 negative infinity __ */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
213 /* x - mantissa */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
214 /* least significant digit first */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
215 /* decimal point after last digit */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
216
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
217
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
218 typedef struct {A name,val;I flag,sn,next,prev;} L;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
219
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
220 /* symbol pool entry LINFO entry */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
221 /* name - name on LHS of assignment or locale name */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
222 /* val - value or locale search path */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
223 /* flag - various flags */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
224 /* sn - script index */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
225 /* next - index of successor in hash list or 0 */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
226 /* prev - index of predecessor in hash list or address of hash entry */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
227
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
228 #define LCH (I)1 /* changed since last exec of 4!:5 */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
229 #define LHEAD (I)2 /* head pointer (no predecessor) */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
230 #define LINFO (I)4 /* locale info */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
231
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
232
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
233 typedef struct{A og,g;I ptr,flag;B sw0;} LS;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
234
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
235 /* og: old value of global */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
236 /* g: global at this level */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
237 /* ptr: index in pv/nv if numbered locale */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
238 /* pointer to stloc entry if named locale */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
239 /* flag: 1 if named locale marked for destruction */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
240 /* 2 if numbered locale marked for destruction */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
241 /* sw0: old value of stswitched */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
242
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
243
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
244 typedef struct{UI hash;I sn;L*e;UC m;C flag,s[1];} NM;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
245
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
246 /* hash: hash for non-locale part of name */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
247 /* m: length of non-locale part of name */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
248 /* sn: symbol table number on last reference */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
249 /* e: symbol pool entry on last reference */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
250 /* s: points to string part of full name (1 to ?? characters) */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
251
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
252 #define NMLOC 1 /* direct locale abc_lm_ */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
253 #define NMILOC 2 /* indirect locale abc__de__fgh ... */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
254 #define NMDOT 4 /* one of the names m. n. u. v. x. y. */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
255
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
256
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
257 typedef struct {I a,e,i,x;} P;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
258
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
259 /* value fields of sparse array types */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
260 /* fields are offsets from beginning of the P struct */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
261 /* a: sparse axes */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
262 /* e: sparse element */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
263 /* i: index matrix, columns correspond to a */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
264 /* x: value cells corresponding to rows of i */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
265
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
266 #define SPA(p,a) ((A)((p)->a+(C*)(p)))
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
267 #define SPB(p,a,x) {(p)->a=(C*)(x)-(C*)(p); RZ(p->a+(C*)(p));}
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
268
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
269
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
270 /* performance monitoring stuff */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
271
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
272 typedef struct{
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
273 A name; /* verb/adverb/conjunction name */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
274 A loc; /* locale name */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
275 I lc; /* line number (-1 for entry; -2 for exit) */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
276 I s; /* space */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
277 I t[2]; /* time */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
278 C val; /* valence: 1 or 2 */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
279 C unused[3]; /* padding */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
280 } PM;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
281
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
282 #define PMCOL 6 /* # of fields in PM */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
283
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
284 typedef struct{
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
285 I n; /* maximum number of records */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
286 I i; /* index of next record to be written */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
287 I s; /* initial bytesmax value */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
288 B rec; /* what to record (0 entry & exit; 1 all) */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
289 B trunc; /* what to do on overflow (0 wrap; 1 truncate) */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
290 B wrapped; /* 1 iff wrapping has happened */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
291 C unused[1]; /* padding */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
292 } PM0;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
293
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
294
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
295 /* each unique symbol has a row in jt->sbu */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
296 /* a row is interpreted per SBU */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
297 /* for best results make sizeof(SBU) a multiple of sizeof(I) */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
298
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
299 typedef struct{
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
300 I i; /* index into sbs */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
301 I n; /* length */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
302 UI h; /* hash value */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
303 I color; /* binary tree: color */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
304 I parent; /* binary tree: index of parent */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
305 I left; /* binary tree: index of left child */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
306 I right; /* binary tree: index of right child */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
307 I order; /* order number */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
308 I down; /* predecessor in ordering */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
309 I up; /* successor in ordering */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
310 I flag; /* bit flags */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
311 } SBU;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
312
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
313 #define SBC2 1 /* 1 iff 2-byte character */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
314
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
315
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
316 typedef struct {AF f1,f2;A f,g,h;I flag,mr,lr,rr,fdep;C id;} V;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
317
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
318 #define ID(f) (f&&FUNC&AT(f)?VAV(f)->id:C0)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
319
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
320 /* type V flag values */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
321 /* < 256 see vcompsc.c */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
322 #define VGERL (I)256 /* gerund left argument */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
323 #define VGERR (I)512 /* gerund right argument */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
324 #define VTAYFINITE (I)1024 /* t. finite polynomial */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
325 #define VIRS1 (I)2048 /* monad has integral rank support */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
326 #define VIRS2 (I)4096 /* dyad has integral rank support */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
327 #define VFLR (I)8192 /* function is <.@g */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
328 #define VCEIL (I)16384 /* function is >.@g */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
329 #define VMOD (I)32768 /* function is m&|@g */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
330 #define VLOCK (I)65536 /* function is locked */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
331 #define VNAMED (I)131072 /* named explicit defn */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
332 #define VFIX (I)262144 /* f. applied */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
333 #define VXOPR (I)524288 /* : defn with u. and x. */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
334 #define VXOP (I)1048576 /* : defn derived fn */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
335 #define VXOPCALL (I)2097152 /* : defn derived fn call */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
336 #define VTRY1 (I)4194304 /* monad contains try. */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
337 #define VTRY2 (I)8388608 /* dyad contains try. */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
338 #define VDDOP (I)16777216 /* derived from a derived operator */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
339
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
340
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
341 typedef struct {DX re;DX im;} ZX;
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
342
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
343 /* extended complex */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
344 /* re - real part */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
345 /* im - imaginary part */
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
346