summaryrefslogtreecommitdiff
path: root/apl9.h
diff options
context:
space:
mode:
Diffstat (limited to 'apl9.h')
-rw-r--r--apl9.h27
1 files changed, 24 insertions, 3 deletions
diff --git a/apl9.h b/apl9.h
index 6b5445c..e487b63 100644
--- a/apl9.h
+++ b/apl9.h
@@ -20,7 +20,8 @@ typedef enum
typedef enum
{
- AtypeInt
+ AtypeInt,
+ AtypeArray
} arrayDataType;
/* Data types */
@@ -32,18 +33,20 @@ struct Array
arrayDataType type;
int rank;
int *shape;
+ int size;
union {
char *rawdata;
vlong *intdata;
+ Array **arraydata;
};
};
struct Datum
{
datumTag tag;
- Rune *strrep;
union {
Array *array;
+ int code;
};
};
@@ -51,15 +54,33 @@ struct Datum
/* print.c */
Rune *ppdatum(Datum);
Rune *ppdatums(Datum *, int);
+Rune *pparray(Array *);
/* lexer.c */
Datum *lexline(Rune *, int *);
/* array.c */
+Array *mkarray(int, int, int);
Array *mkscalarint(vlong);
+Array *duparray(Array *);
+int simplearray(Array *);
+int simplescalar(Array *);
/* eval.c */
Datum *eval(Datum *, int *);
+/* Monadic functions from functions.h */
+Array *fnEnclose(Array *);
+Array *fnNest(Array *);
+Array *fnRavel(Array *);
+
+/* Dyadic functions from functions.h */
+Array *fnCatenateFirst(Array *, Array *);
+
/* Global variables */
-Rune *errormsg; /* eval.c */ \ No newline at end of file
+extern Rune *errormsg; /* eval.c */
+extern int datasizes[]; /* array.c */
+extern Rune primfuncnames[]; /* lexer.c */
+extern Rune primmonopnames[]; /* lexer.c */
+extern Rune primdyadopnames[]; /* lexer.c */
+extern Rune primhybridnames[]; /* lexer.c */ \ No newline at end of file