// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

#include <u.h>
#include <libc.h>
#include <bio.h>

enum
{
	Void = 1,
	Int8,
	Uint8,
	Int16,
	Uint16,
	Int32,
	Uint32,
	Int64,
	Uint64,
	Float32,
	Float64,
	Ptr,
	Struct,
	Array,
	Union,
	Typedef,
};

typedef struct Field Field;
typedef struct Type Type;

struct Type
{
	Type *next;	// next in hash table

	// stabs name and two-integer id
	char *name;
	int n1;
	int n2;

	// int kind
	int kind;

	// sub-type for ptr, array
	Type *type;

	// struct fields
	Field *f;
	int nf;
	int size;

	int saved;	// recorded in typ array
	int warned;	// warned about needing type
	int printed;	// has the definition been printed yet?
};

struct Field
{
	char *name;
	Type *type;
	int offset;
	int size;
};

// Constants
typedef struct Const Const;
struct Const
{
	char *name;
	vlong value;
};

// Recorded constants and types, to be printed.
extern Const *con;
extern int ncon;
extern Type **typ;
extern int ntyp;
extern int kindsize[];

// Language output
typedef struct Lang Lang;
struct Lang
{
	char *constbegin;
	char *constfmt;
	char *constend;

	char *typdef;
	char *typdefend;

	char *structbegin;
	char *unionbegin;
	char *structpadfmt;
	char *structend;

	int (*typefmt)(Fmt*);
};

extern Lang go, c;

void*	emalloc(int);
char*	estrdup(char*);
void*	erealloc(void*, int);
void		parsestabtype(char*);
