ref: ad872eeb19b4fcc41a5d34750ca6cdcf88a39795
dir: /dat.h/
enum DataTag
{
DataAux,
DataSession,
DataSessionList,
DataModule,
DataModuleList,
DataSymtab,
DataSymbol,
DataEnumeration,
DataTokenList,
DataArray,
DataAst,
DataMax,
};
typedef struct DataSpec DataSpec;
struct DataSpec
{
usize size;
};
extern DataSpec dataspecs[DataMax]; /* memory.c */
typedef struct Symbol Symbol;
typedef struct Symtab Symtab;
struct Symbol
{
char *name;
void *value;
Qid qsymbol;
Symtab *table;
uvlong id;
};
struct Symtab
{
RWLock lock;
uvlong count;
Symbol **symbols;
};
typedef struct Module Module;
struct Module
{
uvlong id;
char *name;
Symtab *symtab;
Qid qsession;
Qid qmodule;
};
typedef struct ModuleList ModuleList;
struct ModuleList
{
RWLock lock;
uvlong count;
Module **modules;
};
typedef struct Session Session;
struct Session
{
uvlong id;
char *name;
int active; /* is the session alive? */
ModuleList *modules;
/* file server stuff */
Qid qsession;
Qid qctl;
Qid qcons;
Qid qlog;
Qid qmodules;
Qid qthreads;
QLock loglock;
Rendez logwait;
uvlong logsize;
char *log;
Channel *input;
};
typedef struct Enumeration Enumeration;
struct Enumeration
{
uvlong count;
void **items;
};
enum TokenTag
{
TokNumber,
TokName,
TokLparen,
TokRparen,
TokLbrack,
TokRbrack,
TokNewline,
TokDiamond,
};
typedef struct Token Token;
struct Token
{
int tag;
union {
vlong num; /* TokNumber */
char *name; /* TokName: UTF-8 encoded name */
};
};
typedef struct TokenList TokenList;
struct TokenList
{
uvlong count;
Token *tokens;
};
enum ArrayType
{
TypeNumber,
TypeChar,
};
typedef struct Array Array;
#pragma incomplete Array
typedef struct Ast Ast;
struct Ast
{
int lol;
};