build administrativa
[m6w6/ext-psi] / src / builtin.c
index e4e2e9bdd4348cdec0e7eaad857a754269aab5e4..6c767b934c45ecbbd67af4059f39774b9de6ec6b 100644 (file)
  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *******************************************************************************/
 
-#include "php_psi_stdinc.h"
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#else
+# include "php_config.h"
+#endif
+
+#include <stdbool.h>
+#include <stdarg.h>
 
 #include "php_psi.h"
 #include "builtin.h"
 #include "parser.h"
 #include "cpp.h"
 
-#include <stdarg.h>
-
 HashTable psi_builtins;
 
 static bool has_include(struct psi_cpp *cpp, struct psi_token *target, struct psi_plist **args, struct psi_plist **res);
 static bool has_include_next(struct psi_cpp *cpp, struct psi_token *target, struct psi_plist **args, struct psi_plist **res);
+static bool has_feature(struct psi_cpp *cpp, struct psi_token *target, struct psi_plist **args, struct psi_plist **res);
 static bool builtin_constant_p(struct psi_cpp *cpp, struct psi_token *target, struct psi_plist **args, struct psi_plist **res);
 static bool COUNTER__(struct psi_cpp *cpp, struct psi_token *target, struct psi_plist **args, struct psi_plist **res);
 
@@ -75,6 +81,7 @@ static void free_builtin(zval *p)
        }
 }
 
+PHP_MINIT_FUNCTION(psi_builtin);
 PHP_MINIT_FUNCTION(psi_builtin)
 {
 #define PSI_BUILTIN(builtin, ...) do { \
@@ -92,12 +99,15 @@ PHP_MINIT_FUNCTION(psi_builtin)
        zend_hash_init(&psi_builtins, 0, NULL, free_builtin, 1);
        PSI_BUILTIN(has_include, PSI_T_CPP_HEADER);
        PSI_BUILTIN(has_include_next, PSI_T_CPP_HEADER);
+       PSI_BUILTIN(has_feature, PSI_T_NAME);
        PSI_BUILTIN(builtin_constant_p, PSI_T_NAME);
+
        PSI_BUILTIN(COUNTER__, -1);
 
        return SUCCESS;
 }
 
+PHP_MSHUTDOWN_FUNCTION(psi_builtin);
 PHP_MSHUTDOWN_FUNCTION(psi_builtin)
 {
        zend_hash_destroy(&psi_builtins);
@@ -158,6 +168,12 @@ static bool has_include_next(struct psi_cpp *cpp, struct psi_token *target,
        return false;
 }
 
+static bool has_feature(struct psi_cpp *cpp, struct psi_token *target,
+               struct psi_plist **args, struct psi_plist **res_ptr)
+{
+       return false;
+}
+
 static bool builtin_constant_p(struct psi_cpp *cpp, struct psi_token *target,
                struct psi_plist **args, struct psi_plist **res_ptr)
 {
@@ -178,3 +194,43 @@ static bool COUNTER__(struct psi_cpp *cpp, struct psi_token *target,
 
        return true;
 }
+
+#ifdef __APPLE__
+#include <libkern/OSByteOrder.h>
+# define bswap_16(u) _OSSwapInt16(u)
+# define bswap_32(u) _OSSwapInt32(u)
+# define bswap_64(u) _OSSwapInt64(u)
+#elif defined(__FreeBSD__)
+# include <sys/endian.h>
+# define bswap_16(u) bswap16(u)
+# define bswap_32(u) bswap32(u)
+# define bswap_64(u) bswap64(u)
+#elif defined(__OpenBSD__)
+# include <sys/types.h>
+# define bswap_16(u) swap16(u)
+# define bswap_32(u) swap32(u)
+# define bswap_64(u) swap64(u)
+#elif defined(__NetBSD__)
+# include <sys/types.h>
+# include <machine/bswap.h>
+# define bswap_16(u) bswap16(u)
+# define bswap_32(u) bswap32(u)
+# define bswap_64(u) bswap64(u)
+#else
+# include <byteswap.h>
+#endif
+
+uint16_t psi_swap16(uint16_t u)
+{
+       return bswap_16(u);
+}
+
+uint32_t psi_swap32(uint32_t u)
+{
+       return bswap_32(u);
+}
+
+uint64_t psi_swap64(uint64_t u)
+{
+       return bswap_64(u);
+}