Skip to content

Commit 723e71c

Browse files
authored
Merge pull request #348 from stesie/native-modules
support native modules
2 parents ea89904 + 7663fb6 commit 723e71c

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

tests/commonjs_native_basic.phpt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
--TEST--
2+
Test V8Js::setModuleLoader : Native Module basic behaviour
3+
--SKIPIF--
4+
<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>
5+
--FILE--
6+
<?php
7+
8+
class NativeModule {
9+
public function sayHello($name)
10+
{
11+
echo "Hello $name!\n";
12+
}
13+
}
14+
15+
$v8 = new V8Js();
16+
$v8->setModuleLoader(function($module) {
17+
return new NativeModule();
18+
});
19+
$v8->executeString('require("foo").sayHello("World");');
20+
?>
21+
===EOF===
22+
--EXPECT--
23+
Hello World!
24+
===EOF===

v8js_methods.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,15 @@ V8JS_METHOD(require)
406406
return;
407407
}
408408

409+
if(Z_TYPE(module_code) == IS_OBJECT) {
410+
v8::Local<v8::Object> newobj = zval_to_v8js(&module_code, isolate)->ToObject();
411+
c->modules_loaded[normalised_module_id].Reset(isolate, newobj);
412+
info.GetReturnValue().Set(newobj);
413+
414+
efree(normalised_path);
415+
return;
416+
}
417+
409418
// Convert the return value to string
410419
if (Z_TYPE(module_code) != IS_STRING) {
411420
convert_to_string(&module_code);

0 commit comments

Comments
 (0)