OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [objc-obj-c++-shared/] [runtime.h] - Blame information for rev 705

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 705 jeremybenn
/* Wrapper around <objc/runtime.h>
2
   Copyright (C) 2011 Free Software Foundation, Inc.
3
   Contributed by Nicola Pero
4
 
5
This file is part of GCC.
6
 
7
GCC is free software; you can redistribute it and/or modify
8
it under the terms of the GNU General Public License as published by
9
the Free Software Foundation; either version 3, or (at your option)
10
any later version.
11
 
12
GCC is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
GNU General Public License for more details.
16
 
17
You should have received a copy of the GNU General Public License
18
along with GCC; see the file COPYING3.  If not see
19
<http://www.gnu.org/licenses/>.  */
20
 
21
#ifndef _TESTSUITE_RUNTIME_H_
22
#define _TESTSUITE_RUNTIME_H_
23
 
24
/* Include this file where you'd normally include <objc/runtime.h>.
25
 
26
   Older versions of the NeXT runtime do not have <objc/runtime.h> and
27
   you need to include <objc/objc-runtime.h> instead.  This file takes
28
   care of figuring out if that's the case.  */
29
 
30
#ifndef __NEXT_RUNTIME__
31
 
32
/*
33
  GNU Objective-C runtime (libobjc).
34
*/
35
# include <objc/runtime.h>
36
 
37
#else
38
 
39
/*
40
  NeXT Objective-C runtime.
41
*/
42
 
43
/* Include next-abi.h to determine which version of the runtime we are
44
   dealing with.  TODO: If this is the only place including it, maybe
45
   it could be copied here ?  */
46
# include "next-abi.h"
47
 
48
# ifdef NEXT_OBJC_USE_NEW_INTERFACE
49
 
50
/* New NeXT runtime, with an API that should be basically identical to
51
   the GNU Objective-C one.  */
52
#  include <objc/runtime.h>
53
 
54
# else
55
 
56
/* Old NeXT runtime, with an API similar, but not identical to the new
57
   one.  To start with, different headers need to be included.  */
58
#  include <objc/objc-class.h>
59
#  include <objc/objc-runtime.h>
60
 
61
/* Not all functions are available in the old NeXT runtime.  A few
62
   that we need are not, and here we provide an implementation on top
63
   of the old NeXT API.  */
64
 
65
#  define class_isMetaClass(C) (CLS_GETINFO((struct objc_class *)C, CLS_META)? YES: NO)
66
#  define class_getName(C) object_getClassName(C)
67
#  define class_getSuperclass(C)  (((struct objc_class *)C)->super_class)
68
#  define method_getImplementation(M) (((Method)M)->method_imp)
69
#  define method_getTypeEncoding(M) (((Method)M)->method_types)
70
#  define object_getClass(O) (*(struct objc_class **)O)
71
 
72
#include <objc/Protocol.h>
73
BOOL class_conformsToProtocol (Class class_, Protocol *protocol)
74
{
75
  struct objc_protocol_list *p;
76
  int i;
77
  for (p = class_->protocols; p; p = p->next)
78
    for (i = 0; i < p->count; i++)
79
      if ([p->list[i] conformsTo: protocol])
80
        return YES;
81
  return NO;
82
}
83
 
84
#define protocol_getName(P) [P name]
85
#define protocol_isEqual(P,Q) [P isEqual: Q]
86
 
87
struct objc_method_description protocol_getMethodDescription (Protocol *protocol,
88
                                                              SEL selector,
89
                                                              BOOL requiredMethod,
90
                                                              BOOL instanceMethod)
91
{
92
  struct objc_method_description *tmp;
93
  struct objc_method_description result;
94
 
95
  if (instanceMethod)
96
    tmp = [protocol descriptionForInstanceMethod: selector];
97
  else
98
    tmp = [protocol descriptionForClassMethod: selector];
99
 
100
  if (tmp)
101
    result = *tmp;
102
  else
103
    {
104
      result.name = (SEL)0;
105
      result.types = (char *)0;
106
    }
107
 
108
  return result;
109
}
110
 
111
#  endif /* NEXT_OBJC_USE_NEW_INTERFACE */
112
 
113
# endif /* __NEXT_RUNTIME__ */
114
 
115
#endif /* _TESTSUITE_RUNTIME_H_ */
116
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.