// 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; | |
// Language output | |
typedef struct Lang Lang; | |
struct Lang | |
{ | |
char *constbegin; | |
char *constfmt; | |
char *constend; | |
char *typdef; | |
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*); |