mirror of
https://github.com/rubyjs/therubyracer
synced 2023-03-27 23:21:42 -04:00
couple of tweaks in prep for using v8. switched malloc/free to new/
delete. Changed class name to "Context" Also tried to link V8, but I don't know anything about the ruby make script.
This commit is contained in:
parent
138ef05d6a
commit
e7caf25d09
3 changed files with 15 additions and 20 deletions
|
@ -2,10 +2,7 @@ require 'mkmf'
|
|||
|
||||
CONFIG['LDSHARED'] = "g++ -shared"
|
||||
|
||||
#CPP.sub!(CONFIG['CPP'], 'g++ -E')
|
||||
#LINK.sub!(CONFIG['CC'], 'g++')
|
||||
#dir_config('v8')
|
||||
#have_library('v8')
|
||||
|
||||
|
||||
# dir_config('v8')
|
||||
# have_library('v8')
|
||||
create_makefile('v8')
|
||||
|
|
2
t.rb
2
t.rb
|
@ -1,6 +1,6 @@
|
|||
require 'v8'
|
||||
|
||||
e = V8::Class.new
|
||||
e = V8::Context.new
|
||||
e.print("Hello World")
|
||||
e.print("Hello World")
|
||||
e.print("Hello World")
|
||||
|
|
26
v8.cpp
26
v8.cpp
|
@ -2,16 +2,16 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
typedef struct some_struct {
|
||||
typedef struct v8_context {
|
||||
int a;
|
||||
} some_struct;
|
||||
} v8_context;
|
||||
|
||||
extern "C" {
|
||||
void Init_v8();
|
||||
}
|
||||
VALUE v8_allocate(VALUE clazz);
|
||||
void v8_mark(some_struct *s);
|
||||
void v8_free(some_struct *s);
|
||||
void v8_mark(v8_context *s);
|
||||
void v8_free(v8_context *s);
|
||||
|
||||
VALUE print(VALUE object, VALUE arg);
|
||||
|
||||
|
@ -22,7 +22,7 @@ extern "C" {
|
|||
void Init_v8() {
|
||||
printf("Init_v8()\n");
|
||||
rb_mModule = rb_define_module("V8");
|
||||
rb_cV8 = rb_define_class_under(rb_mModule, "Class", rb_cObject);
|
||||
rb_cV8 = rb_define_class_under(rb_mModule, "Context", rb_cObject);
|
||||
rb_define_alloc_func(rb_cV8, v8_allocate);
|
||||
rb_define_method(rb_cV8, "print", (VALUE(*)(...)) print, 1);
|
||||
}
|
||||
|
@ -30,25 +30,23 @@ extern "C" {
|
|||
|
||||
VALUE v8_allocate(VALUE clazz) {
|
||||
printf("v8_allocate()\n");
|
||||
some_struct *s = (some_struct *)malloc(sizeof(some_struct));
|
||||
memset(s, 0, sizeof(some_struct));
|
||||
v8_context *s = new v8_context;
|
||||
memset(s, 0, sizeof(v8_context));
|
||||
return Data_Wrap_Struct(clazz, v8_mark, v8_free, s);
|
||||
}
|
||||
|
||||
void v8_mark(some_struct *s) {
|
||||
printf("v8_mark\n");
|
||||
void v8_mark(v8_context *s) {
|
||||
// marked for gc?
|
||||
}
|
||||
|
||||
void v8_free(some_struct *s) {
|
||||
printf("v8_free\n");
|
||||
free(s);
|
||||
void v8_free(v8_context *s) {
|
||||
delete s;
|
||||
}
|
||||
|
||||
VALUE print(VALUE object, VALUE arg)
|
||||
{
|
||||
some_struct* s=0;
|
||||
Data_Get_Struct(object, struct some_struct, s);
|
||||
v8_context* s=0;
|
||||
Data_Get_Struct(object, struct v8_context, s);
|
||||
printf("%d %s\n", (s?s->a++:-1), RSTRING(arg)->ptr);
|
||||
return Qnil;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue