| // 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. |
| |
| |
| /* |
| * basic types |
| */ |
| typedef signed char int8; |
| typedef unsigned char uint8; |
| typedef signed short int16; |
| typedef unsigned short uint16; |
| typedef signed int int32; |
| typedef unsigned int uint32; |
| typedef signed long long int int64; |
| typedef unsigned long long int uint64; |
| typedef float float32; |
| typedef double float64; |
| |
| /* |
| * get rid of C types |
| */ |
| #define unsigned XXunsigned |
| #define signed XXsigned |
| #define char XXchar |
| #define short XXshort |
| #define int XXint |
| #define long XXlong |
| #define float XXfloat |
| #define double XXdouble |
| |
| /* |
| * defined types |
| */ |
| typedef uint8 bool; |
| typedef uint8 byte; |
| typedef struct |
| { |
| int32 len; |
| byte str[1]; |
| } *string; |
| typedef struct |
| { |
| byte* name; |
| uint32 hash; |
| void (*fun)(void); |
| } Sigs; |
| typedef struct |
| { |
| byte* name; |
| uint32 hash; |
| uint32 offset; |
| } Sigi; |
| typedef struct Map Map; |
| struct Map |
| { |
| Sigi* si; |
| Sigs* ss; |
| Map* link; |
| int32 bad; |
| int32 unused; |
| void (*fun[])(void); |
| }; |
| |
| /* |
| * defined constants |
| */ |
| enum |
| { |
| true = 1, |
| false = 0, |
| }; |
| |
| /* |
| * defined macros |
| * you need super-goru privilege |
| * to add this list. |
| */ |
| #define nelem(x) (sizeof(x)/sizeof((x)[0])) |
| #define nil ((void*)0) |
| |
| /* |
| * very low level |
| */ |
| void FLUSH(void*); |
| void prints(int8*); |
| void sys_exit(int32); |
| void sys_write(int32, void*, int32); |
| void sys_breakpoint(void); |
| uint8* sys_mmap(byte*, uint32, int32, int32, int32, uint32); |
| void sys_memclr(byte*, uint32); |
| |
| /* |
| * runtime |
| */ |
| void sys_printbool(bool); |
| void sys_printfloat(float64); |
| void sys_printint(int64); |
| void sys_printstring(string); |
| void sys_catstring(string, string, string); |
| void sys_cmpstring(string, string, int32); |
| void sys_slicestring(string, int32, int32, string); |
| void sys_indexstring(string, int32, byte); |
| void sys_intstring(int64, string); |
| void sys_ifaces2i(Sigi*, Sigs*, Map*, void*); |
| void sys_ifacei2i(Sigi*, Map*, void*); |
| void sys_ifacei2s(Sigs*, Map*, void*); |