summaryrefslogtreecommitdiff
path: root/quadnames.c
diff options
context:
space:
mode:
Diffstat (limited to 'quadnames.c')
-rw-r--r--quadnames.c74
1 files changed, 33 insertions, 41 deletions
diff --git a/quadnames.c b/quadnames.c
index 7d5884c..57c5dbb 100644
--- a/quadnames.c
+++ b/quadnames.c
@@ -6,15 +6,15 @@
#include "apl9.h"
Datum *getquotequad(void);
-void setquotequad(Datum);
+void setquotequad(Datum *);
Datum *getquad(void);
-void setquad(Datum);
+void setquad(Datum *);
Datum *getio(void);
-void setio(Datum);
+void setio(Datum *);
Datum *getpp(void);
-void setpp(Datum);
+void setpp(Datum *);
Datum *getdiv(void);
-void setdiv(Datum);
+void setdiv(Datum *);
Datum *geta(void);
Datum *getd(void);
Datum *getself(void);
@@ -66,26 +66,25 @@ initquadnames(void)
}
}
-Datum
+Datum *
quadnamedatum(QuadnameDef q)
{
- Datum d;
- d.tag = q.tag;
+ Datum *d = allocdatum(q.tag, 0);
switch(q.tag){
case NameTag:
- d.name = q.name;
+ d->name = runestrdup(q.name);
break;
case FunctionTag:
- d.func.type = FunctypeQuad;
- d.func.quad = malloc(sizeof(QuadnameDef));
- *d.func.quad = q;
- d.func.left = nil;
+ d->func.type = FunctypeQuad;
+ d->func.quad = emalloc(sizeof(QuadnameDef));
+ *d->func.quad = q;
+ d->func.left = nil;
break;
case MonadicOpTag:
case DyadicOpTag:
default:
print("Can't use quad names with type=%d\n", q.tag);
- exits(nil);
+ threadexitsall(nil);
}
return d;
}
@@ -104,21 +103,20 @@ getquotequad(void)
sizemax = size+1;
quadquotebuf = nil;
}else{
- input = malloc(sizeof(Rune) * sizemax);
+ input = emalloc(sizeof(Rune) * sizemax);
size = 0;
}
do{
if(size == sizemax-1){
sizemax += 512;
- input = realloc(input, sizeof(Rune) * sizemax);
+ input = erealloc(input, sizeof(Rune) * sizemax);
}
input[size] = Bgetrune(stdin);
size++;
}while(input[size-1] != '\n');
input[size-1] = 0;
- Datum *result = mallocz(sizeof(Datum), 1);
- result->tag = ArrayTag;
+ Datum *result = allocdatum(ArrayTag, 0);
result->array = mkrunearray(input);
free(input);
unlock(&quadlock);
@@ -126,7 +124,7 @@ getquotequad(void)
}
void
-setquotequad(Datum new)
+setquotequad(Datum *new)
{
lock(&quadlock);
Rune *str = ppdatum(new);
@@ -158,7 +156,7 @@ getquad(void)
}
void
-setquad(Datum new)
+setquad(Datum *new)
{
lock(&quadlock);
needsnewline = 0;
@@ -170,65 +168,61 @@ setquad(Datum new)
Datum *
getio(void)
{
- Datum *d = mallocz(sizeof(Datum), 1);
- d->tag = ArrayTag;
+ Datum *d = allocdatum(ArrayTag, 0);
d->array = mkscalarint(globalIO());
return d;
}
void
-setio(Datum new)
+setio(Datum *new)
{
- if(new.tag != ArrayTag || new.array->rank != 0 || new.array->type != AtypeInt || (new.array->intdata[0] != 0 && new.array->intdata[0] != 1))
+ if(new->tag != ArrayTag || new->array->rank != 0 || new->array->type != AtypeInt || (new->array->intdata[0] != 0 && new->array->intdata[0] != 1))
throwerror(nil, EDomain);
else
- globalIOset(new.array->intdata[0]);
+ globalIOset(new->array->intdata[0]);
}
/* ⎕PP */
Datum *
getpp(void)
{
- Datum *d = mallocz(sizeof(Datum), 1);
- d->tag = ArrayTag;
+ Datum *d = allocdatum(ArrayTag, 0);
d->array = mkscalarint(printprecision);
return d;
}
void
-setpp(Datum new)
+setpp(Datum *new)
{
- if(new.tag != ArrayTag || new.array->rank != 0 || new.array->type != AtypeInt || new.array->intdata[0] < 0)
+ if(new->tag != ArrayTag || new->array->rank != 0 || new->array->type != AtypeInt || new->array->intdata[0] < 0)
throwerror(nil, EDomain);
else
- printprecision = new.array->intdata[0];
+ printprecision = new->array->intdata[0];
}
/* ⎕DIV */
Datum *
getdiv(void)
{
- Datum *d = mallocz(sizeof(Datum), 1);
- d->tag = ArrayTag;
+ Datum *d = allocdatum(ArrayTag, 0);
d->array = mkscalarint(globalDIV());
return d;
}
void
-setdiv(Datum new)
+setdiv(Datum *new)
{
- if(new.tag != ArrayTag || new.array->rank != 0 || new.array->type != AtypeInt || (new.array->intdata[0] != 0 && new.array->intdata[0] != 1))
+ if(new->tag != ArrayTag || new->array->rank != 0 || new->array->type != AtypeInt || (new->array->intdata[0] != 0 && new->array->intdata[0] != 1))
throwerror(nil, EDomain);
else
- globalDIVset(new.array->intdata[0]);
+ globalDIVset(new->array->intdata[0]);
}
/* ⎕A */
Datum *
geta(void)
{
- Datum *d = mallocz(sizeof(Datum), 1);
- d->tag = ArrayTag;
+ Datum *d = allocdatum(ArrayTag, 0);
d->array = mkrunearray(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ");
return d;
}
@@ -237,8 +231,7 @@ geta(void)
Datum *
getd(void)
{
- Datum *d = mallocz(sizeof(Datum), 1);
- d->tag = ArrayTag;
+ Datum *d = allocdatum(ArrayTag, 0);
d->array = mkrunearray(L"0123456789");
return d;
}
@@ -247,8 +240,7 @@ getd(void)
Datum *
getself(void)
{
- Datum *d = mallocz(sizeof(Datum), 1);
- d->tag = ArrayTag;
+ Datum *d = allocdatum(ArrayTag, 0);
d->array = mkscalarint(threadid());
return d;
}