#ifndef PIGFUNC_H #define PIGFUNC_H /* * Macros to declare and define functions for import and export * using Pig symbol-tables. * * Copyright (C) 1999, Ashley Winters * * You may distribute under the terms of the LGPL as specified in the * README.LICENSE file which should be included with this library. * */ #include "pigtype.h" #define PIG_DECLARE_FUNC_0(ret, name) \ PIGFPTR _ ## name; \ inline ret name() { \ return (*(ret (*)())_ ## name)(); \ } #define PIG_DECLARE_FUNC_1(ret, name, t0) \ PIGFPTR _ ## name; \ inline ret name(t0 pig0) { \ return (*(ret (*)(t0))_ ## name)(pig0); \ } #define PIG_DECLARE_FUNC_2(ret, name, t0, t1) \ PIGFPTR _ ## name; \ inline ret name(t0 pig0, t1 pig1) { \ return (*(ret (*)(t0, t1))_ ## name)(pig0, pig1); \ } #define PIG_DECLARE_FUNC_3(ret, name, t0, t1, t2) \ PIGFPTR _ ## name; \ inline ret name(t0 pig0, t1 pig1, t2 pig2) { \ return (*(ret (*)(t0, t1, t2))_ ## name)(pig0, pig1, pig2); \ } #define PIG_DECLARE_FUNC_4(ret, name, t0, t1, t2, t3) \ PIGFPTR _ ## name; \ inline ret name(t0 pig0, t1 pig1, t2 pig2, t3 pig3) { \ return (*(ret (*)(t0, t1, t2, t3))_ ## name)(pig0, pig1, pig2, pig3);\ } #define PIG_DECLARE_VOID_FUNC_0(name) \ PIGFPTR _ ## name; \ inline void name() { \ (*(void (*)())_ ## name)(); \ } #define PIG_DECLARE_VOID_FUNC_1(name, t0) \ PIGFPTR _ ## name; \ inline void name(t0 pig0) { \ (*(void (*)(t0))_ ## name)(pig0); \ } #define PIG_DECLARE_VOID_FUNC_2(name, t0, t1) \ PIGFPTR _ ## name; \ inline void name(t0 pig0, t1 pig1) { \ (*(void (*)(t0, t1))_ ## name)(pig0, pig1); \ } #define PIG_DECLARE_VOID_FUNC_3(name, t0, t1, t2) \ PIGFPTR _ ## name; \ inline void name(t0 pig0, t1 pig1, t2 pig2) { \ (*(void (*)(t0, t1, t2))_ ## name)(pig0, pig1, pig2);\ } #define PIG_DECLARE_VOID_FUNC_4(name, t0, t1, t2, t3) \ PIGFPTR _ ## name; \ inline void name(t0 pig0, t1 pig1, t2 pig2, t3 pig3) { \ (*(void (*)(t0, t1, t2, t3))_ ## name)(pig0, pig1, pig2, pig3);\ } #define PIG_DEFINE_FUNC_0(ret, name) \ static ret __ ## name() #define PIG_DEFINE_FUNC_1(ret, name, t0) \ static ret __ ## name(t0 pig0) #define PIG_DEFINE_FUNC_2(ret, name, t0, t1) \ static ret __ ## name(t0 pig0, t1 pig1) #define PIG_DEFINE_FUNC_3(ret, name, t0, t1, t2) \ static ret __ ## name(t0 pig0, t1 pig1, t2 pig2) #define PIG_DEFINE_FUNC_4(ret, name, t0, t1, t2, t3) \ static ret __ ## name(t0 pig0, t1 pig1, t2 pig2, t3 pig3) #define PIG_DEFINE_VOID_FUNC_0(name) \ static void __ ## name() #define PIG_DEFINE_VOID_FUNC_1(name, t0) \ static void __ ## name(t0 pig0) #define PIG_DEFINE_VOID_FUNC_2(name, t0, t1) \ static void __ ## name(t0 pig0, t1 pig1) #define PIG_DEFINE_VOID_FUNC_3(name, t0, t1, t2) \ static void __ ## name(t0 pig0, t1 pig1, t2 pig2) #define PIG_DEFINE_VOID_FUNC_4(name, t0, t1, t2, t3) \ static void __ ## name(t0 pig0, t1 pig1, t2 pig2, t3 pig3) #define PIG_DEFINE_STUB_0(ret, name) \ static ret __ ## name() { \ croak("Undefined function %s at %s:%d called", #name, __FILE__,__LINE__); \ return 0; \ } #define PIG_DEFINE_STUB_1(ret, name, t0) \ static ret __ ## name(t0) { \ croak("Undefined function %s at %s:%d called", #name, __FILE__,__LINE__); \ return 0; \ } #define PIG_DEFINE_STUB_2(ret, name, t0, t1) \ static ret __ ## name(t0, t1) { \ croak("Undefined function %s at %s:%d called", #name, __FILE__,__LINE__); \ return 0; \ } #define PIG_DEFINE_STUB_3(ret, name, t0, t1, t2) \ static ret __ ## name(t0, t1, t2) { \ croak("Undefined function %s at %s:%d called", #name, __FILE__,__LINE__); \ return 0; \ } #define PIG_DEFINE_STUB_4(ret, name, t0, t1, t2, t3) \ static ret __ ## name(t0, t1, t2, t3) { \ croak("Undefined function %s at %s:%d called", #name, __FILE__,__LINE__); \ return 0; \ } #define PIG_DEFINE_VOID_STUB_0(name) \ static void __ ## name() { \ croak("Undefined function %s at %s:%d called", #name, __FILE__,__LINE__); \ } #define PIG_DEFINE_VOID_STUB_1(name, t0) \ static void __ ## name(t0) { \ croak("Undefined function %s at %s:%d called", #name, __FILE__,__LINE__); \ } #define PIG_DEFINE_VOID_STUB_2(name, t0, t1) \ static void __ ## name(t0, t1) { \ croak("Undefined function %s at %s:%d called", #name, __FILE__,__LINE__); \ } #define PIG_DEFINE_VOID_STUB_3(name, t0, t1, t2) \ static void __ ## name(t0, t1, t2) { \ croak("Undefined function %s at %s:%d called", #name, __FILE__,__LINE__); \ } #define PIG_DEFINE_VOID_STUB_4(name, t0, t1, t2, t3) \ static void __ ## name(t0, t1, t2, t3) { \ croak("Undefined function %s at %s:%d called", #name, __FILE__,__LINE__); \ } #endif // PIGFUNC_H