Sha256: 6c815d9c7c3247700bcdf8f434ea39227dc65da627a99dfa5224a3470657ed0c

Contents?: true

Size: 764 Bytes

Versions: 1

Compression:

Stored size: 764 Bytes

Contents

#include "cruby.h"

VALUE
llrb_insn_opt_aset(VALUE recv, VALUE obj, VALUE set)
{
  if (!SPECIAL_CONST_P(recv)) {
    if (RBASIC_CLASS(recv) == rb_cArray && BASIC_OP_UNREDEFINED_P(BOP_ASET, ARRAY_REDEFINED_OP_FLAG) && FIXNUM_P(obj)) {
      rb_ary_store(recv, FIX2LONG(obj), set);
      return set;
    }
    else if (RBASIC_CLASS(recv) == rb_cHash && BASIC_OP_UNREDEFINED_P(BOP_ASET, HASH_REDEFINED_OP_FLAG)) {
      rb_hash_aset(recv, obj, set);
      return set;
    }
    else {
      //goto INSN_LABEL(normal_dispatch);
      return rb_funcall(recv, '+', 2, obj, set);
    }
  }
  else {
    //INSN_LABEL(normal_dispatch):
    //PUSH(recv);
    //PUSH(obj);
    //PUSH(set);
    //CALL_SIMPLE_METHOD(recv);
    return rb_funcall(recv, '+', 2, obj, set);
  }
}

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
llrb-0.0.1 ext/llrb_insn_opt_aset.c