~ubuntu-branches/ubuntu/intrepid/ruby1.9/intrepid-updates

« back to all changes in this revision

Viewing changes to call_cfunc.ci

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2007-09-04 16:01:17 UTC
  • mfrom: (1.1.8 upstream)
  • Revision ID: james.westby@ubuntu.com-20070904160117-i15zckg2nhxe9fyw
Tags: 1.9.0+20070830-2ubuntu1
* Sync from Debian; remaining changes:
  - Add -g to CFLAGS.
* Fixes build failure on ia64.
* Fixes build failure with gcc-4.2 on lpia.
* Robustify check for target_os, fixing build failure on lpia.
* Set Ubuntu maintainer address.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* -*-c-*- */
2
 
 
3
 
/* from ruby1.9/eval.c */
4
 
 
5
 
static inline VALUE
6
 
call_cfunc(VALUE (*func)(), VALUE recv, int len, int argc, const VALUE *argv)
7
 
{
8
 
    /* printf("len: %d, argc: %d\n", len, argc); */
9
 
 
10
 
    if (len >= 0 && argc != len) {
11
 
        rb_raise(rb_eArgError, "wrong number of arguments(%d for %d)",
12
 
                 argc, len);
13
 
    }
14
 
 
15
 
    switch (len) {
16
 
      case -2:
17
 
        return (*func) (recv, rb_ary_new4(argc, argv));
18
 
        break;
19
 
      case -1:
20
 
        return (*func) (argc, argv, recv);
21
 
        break;
22
 
      case 0:
23
 
        return (*func) (recv);
24
 
        break;
25
 
      case 1:
26
 
        return (*func) (recv, argv[0]);
27
 
        break;
28
 
      case 2:
29
 
        return (*func) (recv, argv[0], argv[1]);
30
 
        break;
31
 
      case 3:
32
 
        return (*func) (recv, argv[0], argv[1], argv[2]);
33
 
        break;
34
 
      case 4:
35
 
        return (*func) (recv, argv[0], argv[1], argv[2], argv[3]);
36
 
        break;
37
 
      case 5:
38
 
        return (*func) (recv, argv[0], argv[1], argv[2], argv[3], argv[4]);
39
 
        break;
40
 
      case 6:
41
 
        return (*func) (recv, argv[0], argv[1], argv[2], argv[3], argv[4],
42
 
                        argv[5]);
43
 
        break;
44
 
      case 7:
45
 
        return (*func) (recv, argv[0], argv[1], argv[2], argv[3], argv[4],
46
 
                        argv[5], argv[6]);
47
 
        break;
48
 
      case 8:
49
 
        return (*func) (recv, argv[0], argv[1], argv[2], argv[3], argv[4],
50
 
                        argv[5], argv[6], argv[7]);
51
 
        break;
52
 
      case 9:
53
 
        return (*func) (recv, argv[0], argv[1], argv[2], argv[3], argv[4],
54
 
                        argv[5], argv[6], argv[7], argv[8]);
55
 
        break;
56
 
      case 10:
57
 
        return (*func) (recv, argv[0], argv[1], argv[2], argv[3], argv[4],
58
 
                        argv[5], argv[6], argv[7], argv[8], argv[9]);
59
 
        break;
60
 
      case 11:
61
 
        return (*func) (recv, argv[0], argv[1], argv[2], argv[3], argv[4],
62
 
                        argv[5], argv[6], argv[7], argv[8], argv[9],
63
 
                        argv[10]);
64
 
        break;
65
 
      case 12:
66
 
        return (*func) (recv, argv[0], argv[1], argv[2], argv[3], argv[4],
67
 
                        argv[5], argv[6], argv[7], argv[8], argv[9],
68
 
                        argv[10], argv[11]);
69
 
        break;
70
 
      case 13:
71
 
        return (*func) (recv, argv[0], argv[1], argv[2], argv[3], argv[4],
72
 
                        argv[5], argv[6], argv[7], argv[8], argv[9], argv[10],
73
 
                        argv[11], argv[12]);
74
 
        break;
75
 
      case 14:
76
 
        return (*func) (recv, argv[0], argv[1], argv[2], argv[3], argv[4],
77
 
                        argv[5], argv[6], argv[7], argv[8], argv[9], argv[10],
78
 
                        argv[11], argv[12], argv[13]);
79
 
        break;
80
 
      case 15:
81
 
        return (*func) (recv, argv[0], argv[1], argv[2], argv[3], argv[4],
82
 
                        argv[5], argv[6], argv[7], argv[8], argv[9], argv[10],
83
 
                        argv[11], argv[12], argv[13], argv[14]);
84
 
        break;
85
 
      default:
86
 
        rb_raise(rb_eArgError, "too many arguments(%d)", len);
87
 
        break;
88
 
    }
89
 
    return Qnil;                /* not reached */
90
 
}