geninit.c
来自「一款拥有一定历史的C语言编译器」· C语言 代码 · 共 144 行
C
144 行
/* * C compiler * ========== * * Copyright 1989, 1990, 1991 Christoph van Wuellen. * Credits to Matthew Brandt. * All commercial rights reserved. * * This compiler may be redistributed as long there is no * commercial interest. The compiler must not be redistributed * without its full sources. This notice must stay intact. * *//*****************************************************************************/#include "chdr.h"#include "expr.h"#include "cglbdec.h"#include "proto.h"#include "outproto.h"#ifdef CPU_DEFINED/*****************************************************************************/static void geninit P_ ((const EXPR *, unsigned char *));/*****************************************************************************/ static void inittype P2 (const EXPR *, ep, unsigned char *, data){ TYP *tp = ep->etp; UVAL uval; #ifdef FLOAT_SUPPORT RVAL rvl; #endif /* FLOAT_SUPPORT */ UNUSEDARG (data); switch (tp->type) { case bt_bool: put_char (ep); break; case bt_char: case bt_charu: case bt_uchar: case bt_schar: put_char (ep); break; case bt_short: case bt_ushort: case bt_int16: case bt_uint16: put_short (ep); break; case bt_pointer16: case bt_pointer32: break; case bt_bitfield: case bt_ubitfield: case bt_bbitfield: uval = ep->v.u & bitmask (bitfield_width (tp)); break; case bt_int32: case bt_uint32: case bt_ulong: case bt_long: put_long (ep); break; case bt_struct: break; case bt_union: break; #ifdef FLOAT_SUPPORT case bt_float: floatexpr (tp, &rvl); put_float (&rvl); break; case bt_double: floatexpr (tp, &rvl); put_double (&rval); break; case bt_longdouble: floatexpr (tp, &rvl); put_longdouble (&rvl); break; #endif /* FLOAT_SUPPORT */ case bt_func: break; default: break; }}static void geninit P2 (const EXPR *, ep, unsigned char *, data){ UNUSEDARG (data); if (!code_option) return; switch (ep->nodetype) { case en_list: for (; ep != NIL_EXPR; ep = ep->v.p[1]) { geninit (ep->v.p[0], data); } break; case en_icon: case en_fcon: case en_str: inittype (ep, data); break; case en_litval: geninit (ep->v.p[0], data); break; default: CANNOT_REACH_HERE (); }}void g_init P1 (const EXPR *, ep){ unsigned char *data; SIZE size; switch (ep->nodetype) { case en_literal: size = (SIZE) ep->v.p[1]->v.i; data = xalloc ((size_t) size); VOIDCAST memset (data, 0, (size_t) size); geninit (ep->v.p[0], data); break; default: CANNOT_REACH_HERE (); }}#endif /* CPU_DEFINED */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?