File: Types.c

package info (click to toggle)
oo2c32 1.5.0-1
  • links: PTS
  • area: main
  • in suites: potato
  • size: 8,748 kB
  • ctags: 5,415
  • sloc: ansic: 95,007; sh: 473; makefile: 344; perl: 57; lisp: 21
file content (76 lines) | stat: -rw-r--r-- 1,438 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/* low level interface to the type descriptor mechanism. */
#include "Types.h"
#include "__StdTypes.h"
#include "__Descr.h"
#include "__config.h"
#include "__libc.h"


/* number of bytes between start of memory block and start of user defined
   data: */
#define OFFSET_PTR 8


static _ModId _mid;

/* module descriptor */
static const struct {
  int length;
  void* pad;
  const char name[6];
} _n0 = {6, NULL, {"Types"}};
static struct _MD Types_md = {
  NULL, 
  &Kernel__ModuleDesc_td.td, 
  {
    NULL, 
    (const unsigned char*)_n0.name, 
    -1, 
    NULL
  }
};


Types__Type Types_BaseOf (Types__Type t, INTEGER level) {
  if ((0 <= level) && (level <= t->level)) {
    return t->btypes[level];
  } else {
    return NULL;
  }
}

INTEGER Types_LevelOf (Types__Type t) {
  return t->level;
}

void Types_NewObj (PTR (* o), Types__Type t) {
  char* mem = GC_malloc(t->size+OFFSET_PTR);
  char* var = mem+OFFSET_PTR;

#if !USE_GC
  (void)memset((void*)mem, 0, t->size+OFFSET_PTR);
#endif
  ((Types__Type*)var)[-1] = t;
  *o = var;
}

Types__Type Types_This (Kernel__Module mod, const CHAR *name) {
  Types__Type td = (Types__Type)mod->tdescs;
  while (td) {
    if (!strcmp((const char*)name, (const char*)td->name)) {
      return td;
    }
    td = td->next;
  };
  return NULL;
}

Types__Type Types_TypeOf (PTR o) {
  return ((Types__Type*)o)[-1];
}

void Types_init (void) {
  _mid = _register_module (&Types_md.md, NULL);
}