| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 | 
							- /*
 
-   +----------------------------------------------------------------------+
 
-   | PHP Version 7                                                        |
 
-   +----------------------------------------------------------------------+
 
-   | Copyright (c) 2016 The PHP Group                                     |
 
-   +----------------------------------------------------------------------+
 
-   | http://www.opensource.org/licenses/mit-license.php  MIT License      |
 
-   +----------------------------------------------------------------------+
 
-   | Author: Stefan Siegl <[email protected]>                                |
 
-   +----------------------------------------------------------------------+
 
- */
 
- #ifdef HAVE_CONFIG_H
 
- #include "config.h"
 
- #endif
 
- #include <assert.h>
 
- #include "php_v8js_macros.h"
 
- v8::Local<v8::Value> v8js_wrap_generator(v8::Isolate *isolate, v8::Local<v8::Value> wrapped_object) /* {{{ */
 
- {
 
- 	v8::Local<v8::Value> result;
 
- 	assert(!wrapped_object.IsEmpty());
 
- 	assert(wrapped_object->IsObject());
 
- 	v8::TryCatch try_catch;
 
- 	v8::Local<v8::String> source = v8::String::NewFromUtf8(isolate, "(\
 
- function(wrapped_object) {					\
 
- 	return (function*() {					\
 
- 		for(;;) {							\
 
- 			if(!wrapped_object.valid()) {	\
 
- 				return;						\
 
- 			}								\
 
- 			yield wrapped_object.current();	\
 
- 			wrapped_object.next();			\
 
- 		}									\
 
- 	})();									\
 
- })");
 
- 	v8::Local<v8::Script> script = v8::Script::Compile(source);
 
- 	if(script.IsEmpty()) {
 
- 		zend_error(E_ERROR, "Failed to compile Generator object wrapper");
 
- 		return result;
 
- 	}
 
- 	v8::Local<v8::Value> wrapper_fn_val = script->Run();
 
- 	if(wrapper_fn_val.IsEmpty() || !wrapper_fn_val->IsFunction()) {
 
- 		zend_error(E_ERROR, "Failed to create Generator object wrapper function");
 
- 		return result;
 
- 	}
 
- 	v8::Local<v8::Function> wrapper_fn = v8::Local<v8::Function>::Cast(wrapper_fn_val);
 
- 	v8::Local<v8::Value> *jsArgv = static_cast<v8::Local<v8::Value> *>(alloca(sizeof(v8::Local<v8::Value>)));
 
- 	new(&jsArgv[0]) v8::Local<v8::Value>;
 
- 	jsArgv[0] = v8::Local<v8::Value>::New(isolate, wrapped_object);
 
- 	result = wrapper_fn->Call(V8JS_GLOBAL(isolate), 1, jsArgv);
 
- 	return result;
 
- }
 
- /* }}} */
 
- /*
 
-  * Local variables:
 
-  * tab-width: 4
 
-  * c-basic-offset: 4
 
-  * End:
 
-  * vim600: noet sw=4 ts=4 fdm=marker
 
-  * vim<600: noet sw=4 ts=4
 
-  */
 
 
  |