Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/npl/head.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 113 - (show annotations) (download) (as text)
Fri Nov 3 05:48:52 2017 UTC (6 years, 5 months ago) by tamiya25
File MIME type: text/x-csrc
File size: 1167 byte(s)
vm
1 #include "npl.h"
2
3 npl_member_t* npl_member(npl_head_t *head, const wchar_t *name)
4 {
5 npl_type_t *type;
6 npl_member_t *m;
7 size_t i;
8
9 NPL_assert(head);
10 NPL_assert(name);
11
12 type = head->type;
13 while (type != NULL) {
14 m = type->members;
15 if (m != NULL) {
16 i = 0;
17 while (m[i].type != NULL) {
18 if (NPL_wcscmp(name, m[i].name) == 0)
19 return &m[i];
20 i++;
21 }
22 }
23 type = type->parent;
24 }
25
26 return NULL;
27 }
28
29 void* npl_member_addr(npl_head_t *head, npl_member_t *m)
30 {
31 unsigned char *p = (void*)head;
32
33 NPL_assert(head);
34 NPL_assert(m);
35
36 p = p + m->offset;
37 return p;
38 }
39
40 int npl_set(npl_head_t *head, npl_member_t *m, npl_val_t *val)
41 {
42 NPL_assert(head);
43 NPL_assert(m);
44 NPL_assert(val);
45
46 if (m->setter == NULL)
47 return 0;
48 return m->setter(head, val);
49 }
50
51 int npl_get(npl_head_t *head, npl_member_t *m, npl_val_t *val_r)
52 {
53 NPL_assert(head);
54 NPL_assert(m);
55 NPL_assert(val_r);
56
57 if (m->getter == NULL) {
58 npl_val_unset(val_r);
59 return 0;
60 }
61 return m->getter(head, val_r);
62 }
63
64 int npl_call(npl_head_t *head, npl_member_t *m, npl_vm_t *vm)
65 {
66 NPL_assert(head);
67 NPL_assert(m);
68 NPL_assert(vm);
69 NPL_assert(m->method);
70
71 return m->method(head, vm);
72 }
73

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26