Sha256: ba3fdf8f2b2eb6b0af4992521d9af2b4dd84e43b73b0b3ebf576ed00acc7f9b7

Contents?: true

Size: 1.9 KB

Versions: 4

Compression:

Stored size: 1.9 KB

Contents

#include "v8_standalone.h"

VALUE ruby_call_symbol;
VALUE ruby_respond_to_ID;

VALUE ruby_proc_class;
VALUE ruby_method_class;


bool is_callable(VALUE& object) {
  return Qtrue == rb_funcall(object, ruby_respond_to_ID, 1, ruby_call_symbol);  
}

bool is_function(VALUE& object) {
  VALUE klass = RDATA(object)->basic.klass;
  return  klass == ruby_proc_class || klass == ruby_method_class;
}

/**
 * Debugging aid
 */
VALUE v8_what_is_this(VALUE self, VALUE object) {
  VALUE boolean;
  switch (TYPE(object)) {
    case T_NIL:		
    printf("nil\n");
    break;
    case T_OBJECT:	
    printf("ordinary object\n"); 
    if (is_callable(object)) {
      printf("responds to call!<br/>");
    }
    break;
    case T_CLASS:		
      printf("class[%s]<br/>", rb_class2name(object)); 
      break;
    case T_MODULE:	printf("module\n"); break;
    case T_FLOAT:	printf("floating point number\n"); break;
    case T_STRING:	printf("string\n"); break;
    case T_REGEXP:	printf("regular expression\n"); break;
    case T_ARRAY:	printf("array\n"); break;
    case T_FIXNUM:	printf("Fixnum(31bit integer)\n"); break;
    case T_HASH:	printf("associative array\n"); break;
    case T_STRUCT:	printf("(Ruby) structure\n"); break;
    case T_BIGNUM:	printf("multi precision integer\n"); break;
    case T_FILE:	printf("IO\n"); break;
    case T_TRUE:	printf("true\n"); break;
    case T_FALSE:	printf("false\n"); break;
    case T_DATA:	
      printf("data... inspecting\n");
      if (is_function(object)) {
        printf("It's a function!!!<br/>");
      }
      if (is_callable(object)) {
        printf("Responds to call!<br/>");
      } else {
        printf("Does *NOT* respond to call<br/>");
      }
      v8_what_is_this(Qnil, RDATA(object)->basic.klass);
      break;
    case T_SYMBOL:	printf("symbol\n"); break;

    default:
    printf("I have no idea!!!\n");
      rb_raise(rb_eTypeError, "not valid value");
      break;
  }
  
  return Qnil;
}

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
therubyracer-0.4.3 ext/v8/v8_standalone.cpp
therubyracer-0.4.2 ext/v8/v8_standalone.cpp
therubyracer-0.4.1 ext/v8/v8_standalone.cpp
therubyracer-0.4.0 ext/v8/v8_standalone.cpp