File: nil_method.c

package info (click to toggle)
gcc-avr 1%3A5.4.0%2BAtmel3.6.2-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 589,872 kB
  • sloc: ansic: 2,775,581; ada: 756,757; cpp: 723,977; f90: 117,673; asm: 66,898; makefile: 62,755; xml: 44,466; sh: 29,549; exp: 23,315; objc: 15,216; fortran: 10,901; pascal: 4,185; python: 4,093; perl: 2,969; awk: 2,811; ml: 2,385; cs: 879; yacc: 316; lex: 198; haskell: 112; lisp: 8
file content (55 lines) | stat: -rw-r--r-- 2,215 bytes parent folder | download | duplicates (4)
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
/* GNU Objective C Runtime nil receiver function
   Copyright (C) 1993-2015 Free Software Foundation, Inc.
   Contributed by Kresten Krab Thorup

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version.

GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
details.

Under Section 7 of GPL version 3, you are granted additional
permissions described in the GCC Runtime Library Exception, version
3.1, as published by the Free Software Foundation.

You should have received a copy of the GNU General Public License and
a copy of the GCC Runtime Library Exception along with this program;
see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
<http://www.gnu.org/licenses/>.  */


/* This is the nil method, the function that is called when the receiver
   of a method is nil */

#include "objc-private/common.h"
#include "objc/objc.h"

/* When the receiver of a method invocation is nil, the runtime
   returns nil_method() as the method implementation.  This function
   will be casted to whatever function was supposed to be executed to
   execute that method (that function will take an id, followed by a
   SEL, followed by who knows what arguments, depends on the method),
   and executed.
   
   For this reason, nil_method() should be a function which can be
   called in place of any function taking an 'id' argument followed by
   a 'SEL' argument, followed by zero, or one, or any number of
   arguments (both a fixed number, or a variable number !).
   
   There is no "proper" implementation of such a nil_method function
   in C, however in all existing implementations it does not matter
   when extra arguments are present, so we can simply create a function
   taking a receiver and a selector, and all other arguments will be
   ignored. :-)
*/

id
nil_method (id receiver, SEL op __attribute__ ((__unused__)))
{
  return receiver;
}