blob: 71ba81b34f05d084d2f5d8e460b9793507df5033 [file] [log] [blame]
#ifndef _N3_META_TYPE_H_
#define _N3_META_TYPE_H_
#define do_nothing(obj, val)
#define _APP(A, B) A(B)
#define ON_PRIMITIVES(_, _F) \
_APP(_, _F(Boolean, bool, IntVal.getBoolValue(), do_nothing, writeBool, "Array<", " ", ">")) \
_APP(_, _F(UInt8, uint8, IntVal.getZExtValue(), do_nothing, writeS4, "Array<", " ", ">")) \
_APP(_, _F(SInt8, sint8, IntVal.getSExtValue(), do_nothing, writeS4, "Array<", " ", ">")) \
_APP(_, _F(Char, uint16, IntVal.getZExtValue(), do_nothing, writeChar, "", "", "")) \
_APP(_, _F(UInt16, uint16, IntVal.getZExtValue(), do_nothing, writeS4, "Array<", " ", ">")) \
_APP(_, _F(SInt16, sint16, IntVal.getSExtValue(), do_nothing, writeS4, "Array<", " ", ">")) \
_APP(_, _F(UInt32, uint32, IntVal.getZExtValue(), do_nothing, writeS4, "Array<", " ", ">")) \
_APP(_, _F(SInt32, sint32, IntVal.getSExtValue(), do_nothing, writeS4, "Array<", " ", ">")) \
_APP(_, _F(UInt64, uint64, IntVal.getZExtValue(), do_nothing, writeS8, "Array<", " ", ">")) \
_APP(_, _F(SInt64, sint64, IntVal.getSExtValue(), do_nothing, writeS8, "Array<", " ", ">")) \
_APP(_, _F(UIntPtr, uint*, PointerVal, do_nothing, writePtr, "Array<", " ", ">")) \
_APP(_, _F(IntPtr, int*, PointerVal, do_nothing, writePtr, "Array<", " ", ">")) \
_APP(_, _F(Float, float, FloatVal, do_nothing, writeFP, "Array<", " ", ">")) \
_APP(_, _F(Double, double, DoubleVal, do_nothing, writeFP, "Array<", " ", ">"))
#define ON_VOID(_, _F) \
_APP(_, _F(Void, void, abort(), do_nothing, abort(), "", "", ""))
#define ON_OBJECT(_, _F) \
_APP(_, _F(Object, VMObject*, PointerVal, llvm_gcroot, writeObj, "Array<", " ", ">"))
#define ON_STRING(_, _F) \
_APP(_, _F(String, uint16*, PointerVal, llvm_gcroot, writeObj, "", "", ""))
#define ON_TYPES(_, _F) \
ON_PRIMITIVES(_, _F) \
ON_OBJECT(_, _F)
#define _F_NT( name, type, gv_extractor, do_root, writer, pre, sep, post) name, type
#define _F_NTR( name, type, gv_extractor, do_root, writer, pre, sep, post) name, type, do_root
#define _F_NTE( name, type, gv_extractor, do_root, writer, pre, sep, post) name, type, gv_extractor
#define _F_NTRW(name, type, gv_extractor, do_root, writer, pre, sep, post) name, type, do_root, writer, pre, sep, post
#define _F_ALL( name, type, gv_extractor, do_root, writer, pre, sep, post) name, type, gv_extractor, writer, do_root, pre, sep, post
#endif