summaryrefslogtreecommitdiff
path: root/apl9.h
diff options
context:
space:
mode:
Diffstat (limited to 'apl9.h')
-rw-r--r--apl9.h48
1 files changed, 41 insertions, 7 deletions
diff --git a/apl9.h b/apl9.h
index 63b6d7a..72b8ca2 100644
--- a/apl9.h
+++ b/apl9.h
@@ -27,13 +27,21 @@ typedef enum
typedef enum
{
+ OperatortypeDop,
+ OperatortypePrim,
+} operatorType;
+
+typedef enum
+{
FunctypeDfn,
FunctypePrim,
+ FunctypeOp,
} functionType;
/* Data types */
typedef struct Array Array;
typedef struct Statement Statement;
+typedef struct Operator Operator;
typedef struct Function Function;
typedef struct Datum Datum;
typedef struct Symbol Symbol;
@@ -61,12 +69,25 @@ struct Statement
Statement *next;
};
+struct Operator
+{
+ operatorType type;
+ int dyadic;
+ union {
+ int code;
+ Rune *dop;
+ };
+ Datum *left;
+ Datum *right;
+};
+
struct Function
{
functionType type;
union {
int code;
Rune *dfn;
+ Operator operator;
};
Array *left;
};
@@ -79,6 +100,7 @@ struct Datum
Array *array;
Statement stmt;
Function func;
+ Operator operator;
Symbol *symbol;
};
};
@@ -98,6 +120,8 @@ struct Symtab
typedef Array* (*fnmonad)(Array*);
typedef Array* (*fndyad)(Array*, Array*);
+typedef Array* (*opmonad)(Datum *, Array *, Array *);
+typedef Array* (*opdyad)(Datum *, Datum *, Array *, Array *);
/* Function prototypes for the different source files */
/* main.c */
@@ -107,6 +131,7 @@ Datum *evalline(Rune *);
Rune *ppdatum(Datum);
Rune *ppdatums(Datum *, int);
Rune *pparray(Array *);
+Rune *ppoperator(Operator);
/* lexer.c */
Statement *lexline(Rune *);
@@ -133,7 +158,10 @@ Array *allocarray(int, int, int);
void freearray(Array *);
void incref(Array *);
-/* Monadic functions from functions.h */
+/* functions.c */
+Array *runfunc(Function, Array *,Array *);
+
+/* Monadic functions from function.c */
Array *fnSame(Array *);
Array *fnTally(Array *);
Array *fnEnclose(Array *);
@@ -142,7 +170,7 @@ Array *fnIndexGenerator(Array *);
Array *fnRavel(Array *);
Array *fnShape(Array *);
-/* Dyadic functions from functions.h */
+/* Dyadic functions from function.c */
Array *fnPlus(Array *, Array *);
Array *fnMinus(Array *, Array *);
Array *fnTimes(Array *, Array *);
@@ -154,16 +182,22 @@ Array *fnRight(Array *, Array *);
Array *fnCatenateFirst(Array *, Array *);
Array *fnReshape(Array *, Array *);
+/* Monadic operators from operators.c */
+Array *opSwitch(Datum *, Array *, Array *);
+Array *opOver(Datum *, Datum *, Array *, Array *);
+
/* Global variables */
extern int traceeval; /* eval.c */
extern Rune *errormsg; /* eval.c */
extern int datasizes[]; /* array.c */
-extern Rune primfuncnames[]; /* function.c */
-extern Rune primmonopnames[]; /* lexer.c */
-extern Rune primdyadopnames[]; /* lexer.c */
+extern Rune primfuncnames[]; /* functions.c */
+extern Rune primmonopnames[]; /* operators.c */
+extern Rune primdyadopnames[]; /* operators.c */
extern Rune primhybridnames[]; /* lexer.c */
-extern fnmonad monadfunctiondefs[]; /* function.c */
-extern fndyad dyadfunctiondefs[]; /* function.c */
+extern fnmonad monadfunctiondefs[]; /* functions.c */
+extern fndyad dyadfunctiondefs[]; /* functions.c */
+extern opmonad monadoperatordefs[]; /* operators.c */
+extern opdyad dyadoperatordefs[]; /* operators.c */
extern Symtab *globalsymtab; /* symbol.c */
extern Symtab *currentsymtab; /* symbol.c */
extern int alloccounts; /* memory.c */ \ No newline at end of file