// 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 #include #include 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*);