~ubuntu-branches/ubuntu/trusty/ruby1.9/trusty

« back to all changes in this revision

Viewing changes to vm_insnhelper.c

  • Committer: Bazaar Package Importer
  • Author(s): Stephan Hermann
  • Date: 2008-05-16 12:37:06 UTC
  • mfrom: (1.1.10 upstream)
  • Revision ID: james.westby@ubuntu.com-20080516123706-r4llcdfd35aobrjv
Tags: 1.9.0.1-1ubuntu1
* Merge from debian unstable, remaining changes:
  - Robustify check for target_os, fixing build failure on lpia.
* debian/control:
  - ruby1.9 pkg: moved rdoc1.9 suggestion to depends. (LP: #228345)

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
 
3
3
  insnhelper.c - instruction helper functions.
4
4
 
5
 
  $Author: ko1 $
6
 
  $Date: 2007-12-20 18:29:46 +0900 (Thu, 20 Dec 2007) $
 
5
  $Author: nobu $
7
6
 
8
7
  Copyright (C) 2007 Koichi Sasada
9
8
 
12
11
/* finish iseq array */
13
12
#include "insns.inc"
14
13
 
 
14
#include <math.h>
 
15
 
15
16
/* control stack frame */
16
17
 
17
18
 
95
96
 
96
97
/* method dispatch */
97
98
 
98
 
static inline int
 
99
static int
99
100
vm_callee_setup_arg(rb_thread_t *th, rb_iseq_t *iseq,
100
101
                    int argc, VALUE *argv, rb_block_t **block)
101
102
{
496
497
 
497
498
            switch (nd_type(node)) {
498
499
              case RUBY_VM_METHOD_NODE:{
499
 
                  vm_setup_method(th, cfp, num, blockptr, flag, (VALUE)node->nd_body, recv, klass);
500
 
                  return Qundef;
 
500
                vm_setup_method(th, cfp, num, blockptr, flag, (VALUE)node->nd_body, recv, klass);
 
501
                return Qundef;
501
502
              }
502
503
              case NODE_CFUNC:{
503
 
                  val = vm_call_cfunc(th, cfp, num, id, recv, mn->nd_clss, flag, node, blockptr);
504
 
                  break;
 
504
                val = vm_call_cfunc(th, cfp, num, id, recv, mn->nd_clss, flag, node, blockptr);
 
505
                break;
505
506
              }
506
507
              case NODE_ATTRSET:{
507
 
                  val = rb_ivar_set(recv, node->nd_vid, *(cfp->sp - 1));
508
 
                  cfp->sp -= 2;
509
 
                  break;
 
508
                val = rb_ivar_set(recv, node->nd_vid, *(cfp->sp - 1));
 
509
                cfp->sp -= 2;
 
510
                break;
510
511
              }
511
512
              case NODE_IVAR:{
512
 
                  val = rb_ivar_get(recv, node->nd_vid);
513
 
                  cfp->sp -= 1;
514
 
                  break;
 
513
                if (num != 0) {
 
514
                    rb_raise(rb_eArgError, "wrong number of arguments (%d for 0)",
 
515
                             num);
 
516
                }
 
517
                val = rb_attr_get(recv, node->nd_vid);
 
518
                cfp->sp -= 1;
 
519
                break;
515
520
              }
516
521
              case NODE_BMETHOD:{
517
 
                  VALUE *argv = cfp->sp - num;
518
 
                  val = vm_call_bmethod(th, id, node->nd_cval, recv, klass, num, argv, blockptr);
519
 
                  cfp->sp += - num - 1;
520
 
                  break;
 
522
                VALUE *argv = cfp->sp - num;
 
523
                val = vm_call_bmethod(th, id, node->nd_cval, recv, klass, num, argv, blockptr);
 
524
                cfp->sp += - num - 1;
 
525
                break;
521
526
              }
522
527
              case NODE_ZSUPER:{
523
 
                  klass = RCLASS_SUPER(mn->nd_clss);
524
 
                  mn = rb_method_node(klass, id);
 
528
                klass = RCLASS_SUPER(mn->nd_clss);
 
529
                mn = rb_method_node(klass, id);
525
530
 
526
 
                  if (mn != 0) {
527
 
                      goto normal_method_dispatch;
528
 
                  }
529
 
                  else {
530
 
                      goto start_method_dispatch;
531
 
                  }
 
531
                if (mn != 0) {
 
532
                    goto normal_method_dispatch;
 
533
                }
 
534
                else {
 
535
                    goto start_method_dispatch;
 
536
                }
532
537
              }
533
538
              default:{
534
 
                  printf("node: %s\n", ruby_node_name(nd_type(node)));
535
 
                  rb_bug("eval_invoke_method: unreachable");
536
 
                  /* unreachable */
537
 
                  break;
 
539
                printf("node: %s\n", ruby_node_name(nd_type(node)));
 
540
                rb_bug("eval_invoke_method: unreachable");
 
541
                /* unreachable */
 
542
                break;
538
543
              }
539
544
            }
540
545
        }