blob: 1378792918f0b9c299c2684200659841a750a227 [file] [log] [blame]
/* -----------------------------------------------------------------------------
* hhvm.swg
*
* HHVM configuration file
* ----------------------------------------------------------------------------- */
%runtime "hhvmrun.swg" // runtime functions
/* Fragments */
%fragment("SWIG_PackData", "header") {
/* Pack binary data into a string */
SWIGINTERN char * SWIG_PackData(char *c, void *ptr, size_t sz) {
static const char hex[17] = "0123456789abcdef";
const unsigned char *u = (unsigned char *) ptr;
const unsigned char *eu = u + sz;
for (; u != eu; ++u) {
unsigned char uu = *u;
*(c++) = hex[(uu & 0xf0) >> 4];
*(c++) = hex[uu & 0xf];
}
return c;
}
}
%fragment("SWIG_UnPackData", "header") {
/* Unpack binary data from a string */
SWIGINTERN const char * SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
unsigned char *u = (unsigned char *) ptr;
const unsigned char *eu = u + sz;
for (; u != eu; ++u) {
char d = *(c++);
unsigned char uu;
if ((d >= '0') && (d <= '9'))
uu = ((d - '0') << 4);
else if ((d >= 'a') && (d <= 'f'))
uu = ((d - ('a'-10)) << 4);
else
return (char *) 0;
d = *(c++);
if ((d >= '0') && (d <= '9'))
uu |= (d - '0');
else if ((d >= 'a') && (d <= 'f'))
uu |= (d - ('a'-10));
else
return (char *) 0;
*u = uu;
}
return c;
}
}
%typemap(consttab) int,
unsigned int,
short,
unsigned short,
long,
long long,
unsigned long long,
unsigned long,
unsigned char,
signed char,
enum SWIGTYPE
"KindOfInt64";
%typemap(consttab) bool
"KindOfBoolean";
%typemap(consttab) float,
double
"KindOfDouble";
%typemap(consttab) char *,
char,
const char *,
char [ANY],
char [],
const char []
"KindOfPersistentString";
/* hni_parmtype typemaps */
%typemap(hni_parmtype) int,
unsigned int,
short,
unsigned short,
long,
long long,
unsigned long long,
unsigned long,
unsigned char,
signed char,
enum SWIGTYPE
"int64_t";
%typemap(hni_parmtype) bool
"bool";
%typemap(hni_parmtype) float,
double
"double";
%typemap(hni_parmtype) char *,
char,
const char *,
char [ANY],
char [],
const char []
"const HPHP::String&";
%typemap(hni_parmtype) SWIGTYPE *,
SWIGTYPE [],
SWIGTYPE &,
SWIGTYPE &&
"HPHP::VRefParam";
%typemap(hni_parmtype) SWIGTYPE
"const HPHP::Object&";
/* hni_rttype typemaps */
%typemap(hni_rttype) int,
unsigned int,
short,
unsigned short,
long,
long long,
unsigned long long,
unsigned long,
unsigned char,
signed char,
enum SWIGTYPE
"int64_t";
%typemap(hni_rttype) bool
"bool";
%typemap(hni_rttype) float,
double
"double";
%typemap(hni_rttype) char *,
char,
const char *,
char [ANY],
char [],
const char []
"HPHP::String";
%typemap(hni_rttype) void
"void";
%typemap(hni_rttype) SWIGTYPE *,
SWIGTYPE [],
SWIGTYPE &,
SWIGTYPE &&
"HPHP::Variant";
%typemap(hni_rttype) SWIGTYPE
"HPHP::Object";
/* in typemap */
%typemap(in) bool,
short,
unsigned short,
int,
unsigned int,
long,
unsigned long,
long long,
unsigned long long,
float,
double,
unsigned char,
signed char,
enum SWIGTYPE
%{ $1 = ($1_ltype)$input; %}
%typemap(in) char
{
if ($input.length() != 1) {
throw std::runtime_error("Expecting a string of length 1.\n");
}
$1 = $input[0];
}
%typemap(in) char *,
char [ANY],
char []
%{$1 = (char *)$input.c_str();%}
%typemap(in) SWIGTYPE *,
SWIGTYPE [],
SWIGTYPE &,
SWIGTYPE &&
%{$1 = ($1_ltype)HPHP::Native::data<_wrap_$hhclassname>($input.toObject())->_obj_ptr;%}
%typemap(in) SWIGTYPE ($&1_type argp)
%{
argp = ($&1_ltype)HPHP::Native::data<_wrap_$&hhclassname>($input)->_obj_ptr;
$1 = *argp;
%}
%typemap(in, fragment="SWIG_UnPackData") SWIGTYPE (CLASS::*) %{
const char *temp = HPHP::Native::data<_wrap_$hhclassname>($input.toObject())->_obj_ptr.c_str();
SWIG_UnpackData(temp, (void *)&$1, sizeof($1));
%}
/* out typemaps */
%typemap(out) int,
unsigned int,
short,
unsigned short,
long,
long long,
unsigned long long,
unsigned long,
unsigned char,
signed char,
enum SWIGTYPE
"$result = (int64_t)$1;"
%typemap(out) bool
"$result = (bool)$1;"
%typemap(out) float,
double
"$result = (double)$1;"
%typemap(out) char
"$result = HPHP::String::FromChar($1);"
%typemap(out) char *,
const char *,
char [ANY],
char [],
const char []
"$result = HPHP::String($1, HPHP::CopyString);"
%typemap(out) void ""
%typemap(out) SWIGTYPE *,
SWIGTYPE [],
SWIGTYPE &,
SWIGTYPE &&
%{
$result = HPHP::Object(_wrap_$hhclassname::getClass());
auto wrap_$1 = HPHP::Native::data<_wrap_$hhclassname>($result.toObject());
wrap_$1->_obj_ptr = (void *)$1;
wrap_$1->isRef = true;
%}
%typemap(out, fragment="SWIG_PackData") SWIGTYPE (CLASS::*) %{
auto cls = HPHP::Unit::lookupClass(HPHP::makeStaticString("$&hhclassname"));
$result = HPHP::Object(cls);
auto wrap_$1 = HPHP::Native::data<_wrap_$&hhclassname>($result.toObject());
char buf[128];
char *data = SWIG_PackData(buf, (void *)&$1, sizeof($1));
*data = '\0';
wrap_$1->_obj_ptr = HPHP::String::FromCStr(buf);
%}
%typemap(out) SWIGTYPE
%{
auto cls = HPHP::Unit::lookupClass(HPHP::makeStaticString("$&hhclassname"));
$result = HPHP::Object(cls);
auto wrap_$1 = HPHP::Native::data<_wrap_$&hhclassname>($result);
wrap_$1->_obj_ptr = new $1_ltype((const $1_ltype &) $1);
%}
/* php types */
%typemap(php_type) int,
unsigned int,
short,
unsigned short,
long,
long long,
unsigned long long,
unsigned long,
unsigned char,
signed char,
enum SWIGTYPE
"int";
%typemap(php_type) bool
"bool";
%typemap(php_type) float,
double
"float";
%typemap(php_type) char *,
char,
const char *,
char [ANY],
char [],
const char []
"string";
%typemap(php_type) void
"void";
%typemap(php_type) SWIGTYPE *,
SWIGTYPE [],
SWIGTYPE &,
SWIGTYPE &&
"mixed&";
%typemap(php_type) SWIGTYPE
"$&hhclassname";
%typecheck(SWIG_TYPECHECK_INTEGER, noblock = 1)
int, short, long,
unsigned int, unsigned short, unsigned long,
signed char, unsigned char,
long long, unsigned long long,
const int &, const short &, const long &,
const unsigned int &, const unsigned short &, const unsigned long &,
const long long &, const unsigned long long &,
enum SWIGTYPE
{
_v = $input.isInteger();
}
%typecheck(SWIG_TYPECHECK_DOUBLE, noblock = 1)
float, double,
const float &, const double &
{
_v = $input.isDouble();
}
%typecheck(SWIG_TYPECHECK_CHAR, noblock = 1) char
{
_v = ($input.isString() && $input.toString().length() == 1);
}
%typecheck(SWIG_TYPECHECK_STRING, noblock = 1) char *
{
_v = $input.isString();
}
%typecheck(SWIG_TYPECHECK_BOOL, noblock = 1)
bool, const bool &
{
_v = $input.isBoolean();
}
%typecheck(SWIG_TYPECHECK_POINTER, noblock = 1)
SWIGTYPE *,
SWIGTYPE []
{
_v = $input.isObject();
}
%typemap(variant_out) int,
unsigned int,
short,
unsigned short,
long,
long long,
unsigned long long,
unsigned long,
unsigned char,
signed char,
enum SWIGTYPE
".toInt64Val()";
%typemap(variant_out) bool
".toBooleanVal()";
%typemap(variant_out) float,
double
".toDoubleVal()";
%typemap(variant_out) char *,
char,
const char *,
char [ANY],
char [],
const char []
".toString()";
%typemap(variant_out) SWIGTYPE
".toObject()";
%typemap(variant_out) SWIGTYPE *,
SWIGTYPE [],
SWIGTYPE &,
SWIGTYPE &&
"";
%typemap(hhwrapclass) SWIGTYPE *, SWIGTYPE &, SWIGTYPE &&, SWIGTYPE [] %{
class _wrap_$hhclassname {
public:
static HPHP::Class* getClass();
void sweep() {
_obj_ptr = nullptr;
}
~_wrap_$hhclassname() { sweep(); }
static HPHP::Class* s_class;
static const HPHP::StaticString s_className;
void* _obj_ptr{nullptr};
bool isRef{false};
};
HPHP::Class* _wrap_$hhclassname::s_class = nullptr;
const HPHP::StaticString _wrap_$hhclassname::s_className("$hhclassname");
IMPLEMENT_GET_CLASS(_wrap_$hhclassname)
%}
%typemap(hhwrapclass) SWIGTYPE (CLASS::*) %{
class _wrap_$hhclassname {
public:
static HPHP::Class* getClass();
void sweep() {
_obj_ptr.clear();
}
~_wrap_$hhclassname() { sweep(); }
static HPHP::Class* s_class;
static const HPHP::StaticString s_className;
HPHP::String _obj_ptr;
bool isRef{false};
};
HPHP::Class* _wrap_$hhclassname::s_class = nullptr;
const HPHP::StaticString _wrap_$hhclassname::s_className("$hhclassname");
IMPLEMENT_GET_CLASS(_wrap_$hhclassname)
%}