22#define local_visible_class_s(_cls, _super) \
23 class _cls##Class; \
24 extern _cls##Class _cls##_class; \
25 class _cls##Class : public ValueMetaClass \
26 { \
27 public: \
28 _cls##Class(const MCHAR* name) : ValueMetaClass (name) { } \
29 void collect() { delete this; } \
30 Value* classOf_vf(Value** arg_list, int count) \
31 { \
32 UNUSED_PARAM(arg_list); \
33 CHECK_ARG_COUNT(classOf, 1, count + 1); \
34 return &_super##_class; \
35 } \
36 Value* superClassOf_vf(Value** arg_list, int count) \
37 { \
38 UNUSED_PARAM(arg_list); \
39 UNUSED_PARAM(count); \
40 return _super##_class.classOf_vf(NULL, 0); \
41 } \
42 Value* isKindOf_vf(Value** arg_list, int count) \
43 { \
44 CHECK_ARG_COUNT(isKindOf, 2, count + 1); \
45 Value* arg0 = arg_list[0]; \
46 return (arg0 == &_cls##_class || arg0 == &_super##_class) ? \
47 &true_value : \
48 _super##_class.isKindOf_vf(arg_list, count); \
49 } \
50 BOOL is_kind_of(ValueMetaClass* c) \
51 { \
52 return (c == &_cls##_class) ? 1 \
53 : _super##_class.is_kind_of(c); \
54 } \
55 };