node-ffi-php-bindings
Version:
Generated node-ffi bindings for PHP source code. Embed PHP from node.js w/o creating your own node extension.
339 lines (295 loc) • 13 kB
JavaScript
var ffi = require('ffi'),
ref = require('ref'),
RefArray = require('ref-array'),
Struct = require('ref-struct'),
Union = require('ref-union');
var exports = module.exports = function (path) {
var _library = exports;
for (var key in _library._preload) {
if (!_library._preload.hasOwnProperty(key)) {
continue;
}
invoke_preload_function(key);
}
return ffi.Library(path, _library._functions);
};
exports._functions = {};
exports._preload = [];
// avoid prototype chain bug in ref-array that is triggered when an array is used in a struct
exports.__RefArray = function () {
var result = RefArray.apply(null, arguments);
result.toString = function () { return this.type.toString() + '[]'; };
return result;
};
exports.loadDependentSymbols = function () {
var _library = exports;
_library._IO_marker = Struct({});
_library._IO_marker.size = 1;
_library._preload['_IO_marker'] = ['_IO_marker', '_IO_FILE', function () {
_library._IO_marker.size = 0;
_library._IO_marker.defineProperty("_next", ref.refType(_library._IO_marker));
_library._IO_marker.defineProperty("_sbuf", ref.refType(_library._IO_FILE));
_library._IO_marker.defineProperty("_pos", 'int');
}];
_library._IO_FILE = Struct({});
_library._IO_FILE.size = 1;
_library._preload['_IO_FILE'] = ['_IO_marker', '_IO_FILE', function () {
_library._IO_FILE.size = 0;
_library._IO_FILE.defineProperty("_flags", 'int');
_library._IO_FILE.defineProperty("_IO_read_ptr", ref.refType('char'));
_library._IO_FILE.defineProperty("_IO_read_end", ref.refType('char'));
_library._IO_FILE.defineProperty("_IO_read_base", ref.refType('char'));
_library._IO_FILE.defineProperty("_IO_write_base", ref.refType('char'));
_library._IO_FILE.defineProperty("_IO_write_ptr", ref.refType('char'));
_library._IO_FILE.defineProperty("_IO_write_end", ref.refType('char'));
_library._IO_FILE.defineProperty("_IO_buf_base", ref.refType('char'));
_library._IO_FILE.defineProperty("_IO_buf_end", ref.refType('char'));
_library._IO_FILE.defineProperty("_IO_save_base", ref.refType('char'));
_library._IO_FILE.defineProperty("_IO_backup_base", ref.refType('char'));
_library._IO_FILE.defineProperty("_IO_save_end", ref.refType('char'));
_library._IO_FILE.defineProperty("_markers", ref.refType(_library._IO_marker));
_library._IO_FILE.defineProperty("_chain", ref.refType(_library._IO_FILE));
_library._IO_FILE.defineProperty("_fileno", 'int');
_library._IO_FILE.defineProperty("_flags2", 'int');
_library._IO_FILE.defineProperty("_old_offset", 'long');
_library._IO_FILE.defineProperty("_cur_column", 'ushort');
_library._IO_FILE.defineProperty("_vtable_offset", 'char');
_library._IO_FILE.defineProperty("_shortbuf", _library.__RefArray('char', 1));
_library._IO_FILE.defineProperty("_lock", ref.refType('void'));
_library._IO_FILE.defineProperty("_offset", 'long');
_library._IO_FILE.defineProperty("__pad1", ref.refType('void'));
_library._IO_FILE.defineProperty("__pad2", ref.refType('void'));
_library._IO_FILE.defineProperty("__pad3", ref.refType('void'));
_library._IO_FILE.defineProperty("__pad4", ref.refType('void'));
_library._IO_FILE.defineProperty("__pad5", 'ulong');
_library._IO_FILE.defineProperty("_mode", 'int');
_library._IO_FILE.defineProperty("_unused2", _library.__RefArray('char', 20));
}];
_library._preload['_IO_FILE'] = [function () {
_library._IO_FILE = _library._IO_FILE;
}];
_library.timeval = Struct({});
_library.timeval.size = 1;
_library._preload['timeval'] = [function () {
_library.timeval.size = 0;
_library.timeval.defineProperty("tv_sec", 'long');
_library.timeval.defineProperty("tv_usec", 'long');
}];
_library._preload['__jmp_buf'] = [function () {
_library.__jmp_buf = _library.__RefArray('long', 8);
}];
_library.__sigset_t = Struct({});
_library.__sigset_t.size = 1;
_library._preload['__sigset_t'] = [function () {
_library.__sigset_t.size = 0;
_library.__sigset_t.defineProperty("__val", _library.__RefArray('ulong', 16));
}];
_library.__jmp_buf_tag = Struct({});
_library.__jmp_buf_tag.size = 1;
_library._preload['__jmp_buf_tag'] = ['__jmp_buf', '__sigset_t', '__sigset_t', function () {
_library.__jmp_buf_tag.size = 0;
_library.__jmp_buf_tag.defineProperty("__jmpbuf", _library.__jmp_buf);
_library.__jmp_buf_tag.defineProperty("__mask_was_saved", 'int');
_library.__jmp_buf_tag.defineProperty("__saved_mask", _library.__sigset_t);
}];
_library._preload['time_t'] = [function () {
_library.time_t = 'long';
}];
_library._preload['FILE'] = ['_IO_FILE', function () {
_library.FILE = _library._IO_FILE;
}];
_library._preload['DIR'] = [function () {
_library.DIR = 'void';
}];
_library.timespec = Struct({});
_library.timespec.size = 1;
_library._preload['timespec'] = [function () {
_library.timespec.size = 0;
_library.timespec.defineProperty("tv_sec", 'long');
_library.timespec.defineProperty("tv_nsec", 'long');
}];
_library.stat = Struct({});
_library.stat.size = 1;
_library._preload['stat'] = ['timespec', 'timespec', 'timespec', 'timespec', 'timespec', 'timespec', function () {
_library.stat.size = 0;
_library.stat.defineProperty("st_dev", 'ulong');
_library.stat.defineProperty("st_ino", 'ulong');
_library.stat.defineProperty("st_nlink", 'ulong');
_library.stat.defineProperty("st_mode", 'uint');
_library.stat.defineProperty("st_uid", 'uint');
_library.stat.defineProperty("st_gid", 'uint');
_library.stat.defineProperty("__pad0", 'int');
_library.stat.defineProperty("st_rdev", 'ulong');
_library.stat.defineProperty("st_size", 'long');
_library.stat.defineProperty("st_blksize", 'long');
_library.stat.defineProperty("st_blocks", 'long');
_library.stat.defineProperty("st_atim", _library.timespec);
_library.stat.defineProperty("st_mtim", _library.timespec);
_library.stat.defineProperty("st_ctim", _library.timespec);
_library.stat.defineProperty("__glibc_reserved", _library.__RefArray('long', 3));
}];
_library._preload['socklen_t'] = [function () {
_library.socklen_t = 'uint';
}];
_library.sockaddr_storage = Struct({});
_library.sockaddr_storage.size = 1;
_library._preload['sockaddr_storage'] = [function () {
_library.sockaddr_storage.size = 0;
_library.sockaddr_storage.defineProperty("ss_family", 'ushort');
_library.sockaddr_storage.defineProperty("__ss_align", 'ulong');
_library.sockaddr_storage.defineProperty("__ss_padding", _library.__RefArray('char', 112));
}];
_library._preload['off_t'] = [function () {
_library.off_t = 'long';
}];
_library._preload['jmp_buf'] = [function () {
_library.jmp_buf = _library.__RefArray(_library.__jmp_buf_tag, 1);
}];
_library._preload['uid_t'] = [function () {
_library.uid_t = 'uint';
}];
_library.pollfd = Struct({});
_library.pollfd.size = 1;
_library._preload['pollfd'] = [function () {
_library.pollfd.size = 0;
_library.pollfd.defineProperty("fd", 'int');
_library.pollfd.defineProperty("events", 'short');
_library.pollfd.defineProperty("revents", 'short');
}];
_library._preload['mode_t'] = [function () {
_library.mode_t = 'uint';
}];
_library.utimbuf = Struct({});
_library.utimbuf.size = 1;
_library._preload['utimbuf'] = [function () {
_library.utimbuf.size = 0;
_library.utimbuf.defineProperty("actime", 'long');
_library.utimbuf.defineProperty("modtime", 'long');
}];
_library._preload['gid_t'] = [function () {
_library.gid_t = 'uint';
}];
_library.sockaddr = Struct({});
_library.sockaddr.size = 1;
_library._preload['sockaddr'] = [function () {
_library.sockaddr.size = 0;
_library.sockaddr.defineProperty("sa_family", 'ushort');
_library.sockaddr.defineProperty("sa_data", _library.__RefArray('char', 14));
}];
};
exports.loadAllBindings = function () {
require('./Zend/zend_static_allocator');
require('./Zend/zend_indent');
require('./Zend/zend_language_scanner');
require('./Zend/zend_interfaces');
require('./main/fopen_wrappers');
require('./main/php_memory_streams');
require('./Zend/zend_globals_macros');
require('./Zend/zend_qsort');
require('./main/spprintf');
require('./main/php');
require('./Zend/zend_ini');
require('./ext/standard/php_filestat');
require('./Zend/zend_vm');
require('./Zend/zend_objects');
require('./Zend/zend_ptr_stack');
require('./main/streams/php_stream_mmap');
require('./Zend/zend_iterators');
require('./Zend/zend_float');
require('./main/php_content_types');
require('./Zend/zend_ast');
require('./Zend/zend_llist');
require('./Zend/zend_API');
require('./ext/standard/php_string');
require('./Zend/zend_objects_API');
require('./Zend/zend_types');
require('./main/streams/php_stream_filter_api');
require('./main/php_ini');
require('./Zend/zend_virtual_cwd');
require('./ext/standard/head');
require('./Zend/zend_hash');
require('./Zend/zend_variables');
require('./ext/standard/php_crypt');
require('./Zend/zend_stack');
require('./Zend/zend_object_handlers');
require('./Zend/zend_modules');
require('./ext/standard/php_math');
require('./main/php_streams');
require('./ext/standard/quot_print');
require('./ext/standard/datetime');
require('./main/php_open_temporary_file');
require('./Zend/zend_gc');
require('./main/streams/php_stream_plain_wrapper');
require('./Zend/zend_compile');
require('./main/php_network');
require('./ext/standard/php_array');
require('./Zend/zend_ts_hash');
require('./main/php_output');
require('./Zend/zend');
require('./Zend/zend_execute');
require('./ext/standard/html');
require('./main/php_getopt');
require('./Zend/zend_operators');
require('./Zend/zend_strtod');
require('./Zend/zend_globals');
require('./main/streams/php_stream_transport');
require('./Zend/zend_closures');
require('./main/php_variables');
require('./main/snprintf');
require('./Zend/zend_list');
require('./Zend/zend_generators');
require('./ext/standard/php_lcg');
require('./Zend/zend_multibyte');
require('./ext/standard/php_smart_str_public');
require('./main/php_globals');
require('./ext/standard/pageinfo');
require('./ext/standard/php_var');
require('./main/streams/php_stream_glob_wrapper');
require('./Zend/zend_constants');
require('./main/SAPI');
require('./ext/date/lib/timelib');
require('./ext/standard/exec');
require('./Zend/zend_highlight');
require('./ext/standard/basic_functions');
require('./Zend/zend_alloc');
require('./ext/standard/php_mail');
require('./ext/standard/md5');
require('./Zend/zend_vm_opcodes');
require('./main/rfc1867');
require('./ext/standard/sha1');
require('./ext/standard/base64');
require('./ext/standard/file');
require('./ext/standard/url');
require('./ext/standard/php_image');
require('./ext/standard/info');
require('./ext/standard/dl');
require('./main/php_main');
require('./ext/date/lib/timelib_structs');
require('./ext/standard/php_versioning');
require('./ext/standard/php_password');
require('./main/streams/php_stream_context');
require('./ext/date/php_date');
require('./ext/standard/credits');
require('./Zend/zend_exceptions');
require('./main/php_ticks');
require('./ext/standard/php_rand');
require('./ext/standard/flock_compat');
require('./Zend/zend_stream');
require('./ext/standard/url_scanner_ex');
require('./sapi/embed/php_embed');
require('./Zend/zend_extensions');
require('./Zend/zend_builtin_functions');
};
function invoke_preload_function(key) {
var _library = exports;
var entry = _library._preload[key];
delete _library._preload[key];
if (entry) {
var func = entry.pop();
// execute dependent preloads
for (var i = 0; i != entry.length; ++i) {
invoke_preload_function(entry[i]);
}
func();
}
}