mirror of
https://github.com/Z3Prover/z3
synced 2025-04-23 00:55:31 +00:00
merged
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
commit
124c0339c1
53 changed files with 4995 additions and 4595 deletions
|
@ -990,10 +990,13 @@ class JavaDLLComponent(Component):
|
|||
else:
|
||||
out.write('\t$(SLINK) $(SLINK_OUT_FLAG)libz3java$(SO_EXT) $(SLINK_FLAGS) api/java/Native$(OBJ_EXT) libz3$(SO_EXT)\n')
|
||||
out.write('%s.jar: libz3java$(SO_EXT) ' % self.package_name)
|
||||
# for java_file in get_java_files(self.src_dir):
|
||||
# out.write('%s ' % java_file)
|
||||
# for java_file in get_java_files((self.src_dir + "/%s/enumerations") % subdir):
|
||||
# out.write('%s ' % java_file)
|
||||
deps = ''
|
||||
for jfile in get_java_files(self.src_dir):
|
||||
deps += ('%s/%s ' % (self.to_src_dir, jfile))
|
||||
for jfile in get_java_files((self.src_dir + "/enumerations")):
|
||||
deps += ('%s/enumerations/%s ' % (self.to_src_dir, jfile))
|
||||
if IS_WINDOWS: deps = deps.replace('/', '\\')
|
||||
out.write(deps)
|
||||
out.write('\n')
|
||||
t = ('\t%s %s/enumerations/*.java -d api/java/classes\n' % (JAVAC, self.to_src_dir))
|
||||
if IS_WINDOWS: t = t.replace('/','\\')
|
||||
|
@ -1103,10 +1106,12 @@ class JavaExampleComponent(ExampleComponent):
|
|||
if JAVA_ENABLED:
|
||||
pkg = get_component(JAVA_COMPONENT).package_name + '.jar'
|
||||
out.write('_ex_%s: %s' % (self.name, pkg))
|
||||
# for javafile in get_java_files(self.ex_dir):
|
||||
# out.write(' ')
|
||||
# out.write('%s/%s' % (self.to_ex_dir, javafile))
|
||||
out.write('\n')
|
||||
deps = ''
|
||||
for jfile in get_java_files(self.ex_dir):
|
||||
out.write(' %s/%s' % (self.to_ex_dir, jfile))
|
||||
if IS_WINDOWS:
|
||||
deps = deps.replace('/', '\\')
|
||||
out.write('%s\n' % deps)
|
||||
out.write('\t%s -cp %s ' % (JAVAC, pkg))
|
||||
win_ex_dir = self.to_ex_dir
|
||||
for javafile in get_java_files(self.ex_dir):
|
||||
|
|
|
@ -489,18 +489,19 @@ def mk_java():
|
|||
java_native = open(java_nativef, 'w')
|
||||
java_native.write('// Automatically generated file\n')
|
||||
java_native.write('package %s;\n' % get_component('java').package_name)
|
||||
java_native.write('import %s.enumerations.*;\n' % get_component('java').package_name)
|
||||
java_native.write('public final class Native {\n')
|
||||
java_native.write(' public static class IntPtr { public int value; }\n')
|
||||
java_native.write(' public static class LongPtr { public long value; }\n')
|
||||
java_native.write(' public static class StringPtr { public String value; }\n')
|
||||
java_native.write(' public static class errorHandler { public long ptr; }\n')
|
||||
|
||||
if IS_WINDOWS:
|
||||
java_native.write(' static { System.loadLibrary("%s"); }\n' % get_component('java').dll_name)
|
||||
else:
|
||||
java_native.write(' static { System.loadLibrary("%s"); }\n' % get_component('java').dll_name[3:]) # We need 3: to extract the prexi 'lib' form the dll_name
|
||||
java_native.write('\n\n')
|
||||
for name, result, params in _dotnet_decls:
|
||||
java_native.write(' public static native %s %s(' % (type2java(result), java_method_name(name)))
|
||||
java_native.write(' protected static native %s INTERNAL%s(' % (type2java(result), java_method_name(name)))
|
||||
first = True
|
||||
i = 0;
|
||||
for param in params:
|
||||
|
@ -511,12 +512,46 @@ def mk_java():
|
|||
java_native.write('%s a%d' % (param2java(param), i))
|
||||
i = i + 1
|
||||
java_native.write(');\n')
|
||||
java_native.write(' public static void main(String[] args) {\n')
|
||||
java_native.write(' IntPtr major = new IntPtr(), minor = new IntPtr(), build = new IntPtr(), revision = new IntPtr();\n')
|
||||
java_native.write(' getVersion(major, minor, build, revision);\n')
|
||||
java_native.write(' System.out.format("Z3 (for Java) %d.%d.%d%n", major.value, minor.value, build.value);\n')
|
||||
java_native.write(' }\n')
|
||||
java_native.write('}\n');
|
||||
java_native.write('\n\n')
|
||||
# Exception wrappers
|
||||
for name, result, params in _dotnet_decls:
|
||||
java_native.write(' public static %s %s(' % (type2java(result), java_method_name(name)))
|
||||
first = True
|
||||
i = 0;
|
||||
for param in params:
|
||||
if first:
|
||||
first = False
|
||||
else:
|
||||
java_native.write(', ')
|
||||
java_native.write('%s a%d' % (param2java(param), i))
|
||||
i = i + 1
|
||||
java_native.write(')')
|
||||
if len(params) > 0 and param_type(params[0]) == CONTEXT:
|
||||
java_native.write(' throws Z3Exception')
|
||||
java_native.write('\n')
|
||||
java_native.write(' {\n')
|
||||
java_native.write(' ')
|
||||
if result != VOID:
|
||||
java_native.write('%s res = ' % type2java(result))
|
||||
java_native.write('INTERNAL%s(' % (java_method_name(name)))
|
||||
first = True
|
||||
i = 0;
|
||||
for param in params:
|
||||
if first:
|
||||
first = False
|
||||
else:
|
||||
java_native.write(', ')
|
||||
java_native.write('a%d' % i)
|
||||
i = i + 1
|
||||
java_native.write(');\n')
|
||||
if len(params) > 0 and param_type(params[0]) == CONTEXT:
|
||||
java_native.write(' Z3_error_code err = Z3_error_code.fromInt(INTERNALgetErrorCode(a0));\n')
|
||||
java_native.write(' if (err != Z3_error_code.Z3_OK)\n')
|
||||
java_native.write(' throw new Z3Exception(INTERNALgetErrorMsgEx(a0, err.toInt()));\n')
|
||||
if result != VOID:
|
||||
java_native.write(' return res;\n')
|
||||
java_native.write(' }\n\n')
|
||||
java_native.write('}\n')
|
||||
java_wrapper = open(java_wrapperf, 'w')
|
||||
java_wrapper.write('// Automatically generated file\n')
|
||||
java_wrapper.write('#include<jni.h>\n')
|
||||
|
@ -525,26 +560,27 @@ def mk_java():
|
|||
java_wrapper.write('#ifdef __cplusplus\n')
|
||||
java_wrapper.write('extern "C" {\n')
|
||||
java_wrapper.write('#endif\n\n')
|
||||
if VS_X64:
|
||||
java_wrapper.write('#define GETLONGAELEMS(T,OLD,NEW) \\\n')
|
||||
java_wrapper.write(' T * NEW = (T*) jenv->GetLongArrayElements(OLD, NULL); \n')
|
||||
java_wrapper.write('#define RELEASELONGAELEMS(OLD,NEW) \\\n')
|
||||
java_wrapper.write(' jenv->ReleaseLongArrayElements(OLD, (jlong *) NEW, JNI_ABORT); \n\n')
|
||||
else:
|
||||
java_wrapper.write('#define GETLONGAELEMS(T,OLD,NEW) \\\n')
|
||||
java_wrapper.write(' T * NEW = 0; { \\\n')
|
||||
java_wrapper.write(' jlong * temp = jenv->GetLongArrayElements(OLD, NULL); \\\n')
|
||||
java_wrapper.write(' unsigned int size = jenv->GetArrayLength(OLD); \\\n')
|
||||
java_wrapper.write(' NEW = (T*) (new int[size]); \\\n')
|
||||
java_wrapper.write(' for (unsigned i=0; i < size; i++) \\\n')
|
||||
java_wrapper.write(' NEW[i] = reinterpret_cast<T>(temp[i]); \\\n')
|
||||
java_wrapper.write(' jenv->ReleaseLongArrayElements(OLD, temp, JNI_ABORT); \\\n')
|
||||
java_wrapper.write(' } \n\n')
|
||||
java_wrapper.write('#define RELEASELONGAELEMS(OLD,NEW) \\\n')
|
||||
java_wrapper.write(' delete [] NEW; \n\n')
|
||||
java_wrapper.write('#if defined(_M_X64) || defined(_AMD64_)\n\n')
|
||||
java_wrapper.write('#define GETLONGAELEMS(T,OLD,NEW) \\\n')
|
||||
java_wrapper.write(' T * NEW = (T*) jenv->GetLongArrayElements(OLD, NULL); \n')
|
||||
java_wrapper.write('#define RELEASELONGAELEMS(OLD,NEW) \\\n')
|
||||
java_wrapper.write(' jenv->ReleaseLongArrayElements(OLD, (jlong *) NEW, JNI_ABORT); \n\n')
|
||||
java_wrapper.write('#else\n\n')
|
||||
java_wrapper.write('#define GETLONGAELEMS(T,OLD,NEW) \\\n')
|
||||
java_wrapper.write(' T * NEW = 0; { \\\n')
|
||||
java_wrapper.write(' jlong * temp = jenv->GetLongArrayElements(OLD, NULL); \\\n')
|
||||
java_wrapper.write(' unsigned int size = jenv->GetArrayLength(OLD); \\\n')
|
||||
java_wrapper.write(' NEW = (T*) (new int[size]); \\\n')
|
||||
java_wrapper.write(' for (unsigned i=0; i < size; i++) \\\n')
|
||||
java_wrapper.write(' NEW[i] = reinterpret_cast<T>(temp[i]); \\\n')
|
||||
java_wrapper.write(' jenv->ReleaseLongArrayElements(OLD, temp, JNI_ABORT); \\\n')
|
||||
java_wrapper.write(' } \n\n')
|
||||
java_wrapper.write('#define RELEASELONGAELEMS(OLD,NEW) \\\n')
|
||||
java_wrapper.write(' delete [] NEW; \n\n')
|
||||
java_wrapper.write('#endif\n\n')
|
||||
pkg_str = get_component('java').package_name.replace('.', '_')
|
||||
for name, result, params in _dotnet_decls:
|
||||
java_wrapper.write('JNIEXPORT %s JNICALL Java_%s_Native_%s(JNIEnv * jenv, jclass cls' % (type2javaw(result), pkg_str, java_method_name(name)))
|
||||
java_wrapper.write('JNIEXPORT %s JNICALL Java_%s_Native_INTERNAL%s(JNIEnv * jenv, jclass cls' % (type2javaw(result), pkg_str, java_method_name(name)))
|
||||
i = 0;
|
||||
for param in params:
|
||||
java_wrapper.write(', ')
|
||||
|
@ -629,7 +665,7 @@ def mk_java():
|
|||
if result == STRING:
|
||||
java_wrapper.write(' return jenv->NewStringUTF(result);\n')
|
||||
elif result != VOID:
|
||||
java_wrapper.write(' return (%s) result;\n' % type2javaw(result))
|
||||
java_wrapper.write(' return (%s) result;\n' % type2javaw(result))
|
||||
java_wrapper.write('}\n')
|
||||
java_wrapper.write('#ifdef __cplusplus\n')
|
||||
java_wrapper.write('}\n')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue