Files
sigmaker-ida/idasdk76/module/java/npooluti.hpp
2021-10-31 21:20:46 +02:00

105 lines
3.2 KiB
C++

#ifndef _NPOOLUTI_HPP_
#define _NPOOLUTI_HPP_
#include "upgrade.hpp"
const char *constant_type_to_str(uchar ctype);
void print_constant(
qstrvec_t *out,
const const_desc_t &cd,
ushort index,
bool strip_tags=false);
void *myAlloc(uint size);
NORETURN void errtrunc(void);
//-------------------------------------------------------------------------
struct bootstrap_method_def_t
{
ushort method_ref;
qvector<ushort> args;
bootstrap_method_def_t() : method_ref(0) {}
};
nodeidx_t bootstrap_methods_get_node(bool assert=true, bool can_create=false);
nodeidx_t bootstrap_methods_get_count();
void bootstrap_methods_set_count(nodeidx_t cnt);
bool bootstrap_methods_get_method(
bootstrap_method_def_t *out,
nodeidx_t idx);
//-----------------------------------------------------------------------------
void make_NameChars(bool on_load);
enum namechar_op_t
{
ncop_disable,
ncop_enable,
ncop_enable_without_parens,
};
//-------------------------------------------------------------------------
void op_NameChars(namechar_op_t op);
//------------------
static void inline endLoad_NameChar(void)
{
op_NameChars(ncop_enable_without_parens); // end load base (remove '()')
}
//------------------
static void inline enableExt_NameChar(void)
{
op_NameChars(ncop_enable); //j_field_dlm; // (for searches)
}
//------------------
static void inline disableExt_NameChar(void)
{
op_NameChars(ncop_disable);
}
//-----------------------------------------------------------------------
struct _STROP_
{
ushort size;
ushort flags;
};
// new flags at VER15
#define _OP_NOSIGN 0x0001 // not signature (always +_OP_NODSCR)
#define _OP_METSIGN 0x0002 // method signature: <:>(...)ret
#define _OP_CLSSIGN 0x0004 // class signature: <:>super{iface}
//#define _OP_ 0x0008
//#define _OP_ 0x0010
#define _OP_JSMRES_ 0x0020 // name reserved in jasmin (asm support)
// end of new flags
#define _OP_ONECLS 0x0040 // descriptor has class reference
#define _OP_FULLNM 0x0080 // field have '.', '/' or [ => no FM name
#define _OP_NOFNM 0x0100 // can only descriptor. Not name
#define _OP_VALPOS 0x0200 // has posit for call descriptor
#define _OP_NODSCR 0x0400 // not descriptor
//#define _OP_NULL_ 0x0800 // has simbols 0
//#define _OP_NAT0_ 0x1000 // has simbols disabled in Xlat-table
//#define _OP_WIDE_ 0x2000 // has simbols >= 0x100
#define _OP_BADFIRST 0x1000 // first char in string is badStart for ident
#define _OP_UNICHARS 0x2000 // have valid unicode characters
#define _OP_UTF8_ 0x4000 // Utf8 String
#define _OP_EXTSYM_ 0x8000 // contain (!qisprint(english) && !isJavaIdent())
// ver12 bits
// #define _OP_UNICODE_ 0x8000 // Unicode String (removed? from standard)
// for jasmin reserved words checking
#define _OP_NOWORD uint32(0xFFFF & ~(_OP_NOSIGN|_OP_ONECLS|_OP_NODSCR|_OP_UTF8_))
// low bits used as temporary in VER12
// _OP_NULL_ | _OP_NAT0_ | _OP_WIDE_
CASSERT((UPG12_EXTMASK >> 16) == 0x7000
&& (UPG12_CLRMASK >> 16) == 0xF03F
&& (UPG12_BADMASK >> 16) == 0x8000
&& (UPG12_EXTSET >> 16) == _OP_EXTSYM_);
//-----------------------------------------------------------------------------
#endif