WALA/com.ibm.wala.cast/source/c/include/CAstWrapper.h

180 lines
3.4 KiB
C++
Executable File

#ifndef _CAST_WRAPPER_H
#define _CAST_WRAPPER_H
#include <list>
#include <jni.h>
#include "Exceptions.h"
using namespace std;
#ifdef TRACE_CAST_WRAPPER
#define LOG(x) log(x);
#else
#define LOG(x)
#endif
#ifdef _MSC_VER
#ifdef BUILD_CAST_DLL
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __declspec(dllimport)
#endif
class DLLEXPORT CAstWrapper {
#else
/**
* This class is a simple wrapper that provides a C++ object veneer
* over JNI calls to a CAst object in Javaland. This wrapper is used
* by the grammar rules of the bison grammar that defines PHP to build
* a CAst tree in Javaland.
*/
class CAstWrapper {
#endif
protected:
jobject Ast;
JNIEnv *env;
Exceptions &java_ex;
jclass HashSet;
jmethodID hashSetInit;
jmethodID hashSetAdd;
jclass LinkedList;
jmethodID linkedListInit;
jmethodID linkedListAdd;
private:
jclass CAstNode;
jclass CAstInterface;
jclass CAstPrinter;
jmethodID castPrint;
jmethodID makeNode0;
jmethodID makeNode1;
jmethodID makeNode2;
jmethodID makeNode3;
jmethodID makeNode4;
jmethodID makeNode5;
jmethodID makeNode6;
jmethodID makeNodeNary;
jmethodID makeNode1Nary;
jmethodID makeBool;
jmethodID makeChar;
jmethodID makeShort;
jmethodID makeInt;
jmethodID makeLong;
jmethodID makeDouble;
jmethodID makeFloat;
jmethodID makeObject;
jmethodID getChild;
jmethodID _getChildCount;
jmethodID getValue;
jmethodID _getKind;
jmethodID toString;
jmethodID getClass;
jmethodID intValue;
jmethodID _getEntityName;
jobject callReference;
public:
#define _INCLUDE_CONSTANTS
#include "cast_constants.h"
#define _INCLUDE_OPERATORS
#include "cast_operators.h"
#define _INCLUDE_QUALIFIERS
#include "cast_qualifiers.h"
#define _INCLUDE_CFM
#include "cast_control_flow_map.h"
public:
CAstWrapper(JNIEnv *env, Exceptions &ex, jobject Ast);
void assertIsCAstNode(jobject, int);
jobject makeNode(int);
jobject makeNode(int, jobject);
jobject makeNode(int, jobject, jobject);
jobject makeNode(int, jobject, jobject, jobject);
jobject makeNode(int, jobject, jobject, jobject, jobject);
jobject makeNode(int, jobject, jobject, jobject, jobject, jobject);
jobject makeNode(int, jobject, jobject, jobject, jobject, jobject, jobject);
jobject makeNode(int, jobjectArray);
jobject makeNode(int, jobject, jobjectArray);
jobject makeConstant(bool);
jobject makeConstant(char);
jobject makeConstant(short);
jobject makeConstant(int);
jobject makeConstant(long);
jobject makeConstant(double);
jobject makeConstant(float);
jobject makeConstant(jobject);
jobject makeConstant(const char *);
jobject makeConstant(const char *, int);
jobject getNthChild(jobject, int);
int getChildCount(jobject);
int getKind(jobject);
bool isConstantValue(jobject);
bool isConstantOfType(jobject, const char *);
bool isConstantOfType(jobject, jclass);
bool isSwitchDefaultConstantValue(jobject);
const char *getStringConstantValue(jobject);
jobject getConstantValue(jobject);
int getIntConstantValue(jobject);
jobjectArray makeArray(list<jobject> *);
jobjectArray makeArray(jclass, list<jobject> *);
jobjectArray makeArray(int, jobject[]);
jobjectArray makeArray(jclass, int, jobject[]);
jobject makeSet(list<jobject> *);
jobject makeList(list<jobject> *);
jobject getCallReference();
const char *getEntityName(jobject);
void log(jobject);
};
#endif