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
|
/* dtype.c: Code to deal with data types. */
/* Copyright (C) 1999 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "nawm.h"
#include "lang.h"
#include "parser.h"
static int nexttag;
static char **typenames;
void inittypes(void)
{
nexttag = 5;
typenames = xmalloc(nexttag * sizeof(char *));
typenames[0] = "void";
typenames[T_INT] = "int";
typenames[T_STR] = "string";
typenames[T_WIN] = "window";
typenames[T_ARRAY] = NULL;
}
int newtype(char *name)
{
typenames = xrealloc(typenames, (nexttag + 1) * sizeof(char *));
typenames[nexttag] = name;
define(DTYPE, name, (void *)nexttag);
return nexttag++;
}
char *typename(dtype t)
{
if (t > nexttag)
t = *(int *)t;
if (t == T_ARRAY)
return array_typename(t);
else
return typenames[t];
}
int is_array_type(dtype t)
{
return t > nexttag && *(int *)t == T_ARRAY;
}
nawmval initial_value(dtype t)
{
if (t < nexttag)
return 0;
else
return (nawmval)create_array(t, 5);
}
|