mirror of
				https://github.com/Z3Prover/z3
				synced 2025-10-27 01:39:22 +00:00 
			
		
		
		
	Added function to select the next variable to split on (User-Propagator) (#6096)
* Added function to select the next variable to split on * Fixed typo * Small fixes * uint -> int
This commit is contained in:
		
							parent
							
								
									f08e3d70a9
								
							
						
					
					
						commit
						2fa60aa43c
					
				
					 17 changed files with 255 additions and 104 deletions
				
			
		|  | @ -61,6 +61,7 @@ DOUBLE     = 12 | |||
| FLOAT      = 13 | ||||
| CHAR       = 14 | ||||
| CHAR_PTR   = 15 | ||||
| LBOOL      = 16 | ||||
| 
 | ||||
| FIRST_FN_ID = 50 | ||||
| 
 | ||||
|  | @ -74,25 +75,25 @@ def is_fn(ty): | |||
| 
 | ||||
| Type2Str = { VOID : 'void', VOID_PTR : 'void*', INT : 'int', UINT : 'unsigned', INT64 : 'int64_t', UINT64 : 'uint64_t', DOUBLE : 'double', | ||||
|              FLOAT : 'float', STRING : 'Z3_string', STRING_PTR : 'Z3_string_ptr', BOOL : 'bool', SYMBOL : 'Z3_symbol', | ||||
|              PRINT_MODE : 'Z3_ast_print_mode', ERROR_CODE : 'Z3_error_code', CHAR: 'char', CHAR_PTR: 'Z3_char_ptr' | ||||
|              PRINT_MODE : 'Z3_ast_print_mode', ERROR_CODE : 'Z3_error_code', CHAR: 'char', CHAR_PTR: 'Z3_char_ptr', LBOOL : 'Z3_lbool' | ||||
|              } | ||||
| 
 | ||||
| Type2PyStr = { VOID_PTR : 'ctypes.c_void_p', INT : 'ctypes.c_int', UINT : 'ctypes.c_uint', INT64 : 'ctypes.c_longlong', | ||||
|                UINT64 : 'ctypes.c_ulonglong', DOUBLE : 'ctypes.c_double', FLOAT : 'ctypes.c_float', | ||||
|                STRING : 'ctypes.c_char_p', STRING_PTR : 'ctypes.POINTER(ctypes.c_char_p)', BOOL : 'ctypes.c_bool', SYMBOL : 'Symbol', | ||||
|                PRINT_MODE : 'ctypes.c_uint', ERROR_CODE : 'ctypes.c_uint', CHAR : 'ctypes.c_char', CHAR_PTR: 'ctypes.POINTER(ctypes.c_char)' | ||||
|                PRINT_MODE : 'ctypes.c_uint', ERROR_CODE : 'ctypes.c_uint', CHAR : 'ctypes.c_char', CHAR_PTR: 'ctypes.POINTER(ctypes.c_char)', LBOOL : 'ctypes.c_int' | ||||
|                } | ||||
| 
 | ||||
| # Mapping to .NET types | ||||
| Type2Dotnet = { VOID : 'void', VOID_PTR : 'IntPtr', INT : 'int', UINT : 'uint', INT64 : 'Int64', UINT64 : 'UInt64', DOUBLE : 'double', | ||||
|                 FLOAT : 'float', STRING : 'string', STRING_PTR : 'byte**', BOOL : 'byte', SYMBOL : 'IntPtr', | ||||
|                 PRINT_MODE : 'uint', ERROR_CODE : 'uint', CHAR : 'char', CHAR_PTR : 'IntPtr' } | ||||
|                 PRINT_MODE : 'uint', ERROR_CODE : 'uint', CHAR : 'char', CHAR_PTR : 'IntPtr', LBOOL : 'int' } | ||||
| 
 | ||||
| 
 | ||||
| # Mapping to ML types | ||||
| Type2ML = { VOID : 'unit', VOID_PTR : 'ptr', INT : 'int', UINT : 'int', INT64 : 'int', UINT64 : 'int', DOUBLE : 'float', | ||||
|             FLOAT : 'float', STRING : 'string', STRING_PTR : 'char**', | ||||
|             BOOL : 'bool', SYMBOL : 'z3_symbol', PRINT_MODE : 'int', ERROR_CODE : 'int', CHAR : 'char', CHAR_PTR : 'string' } | ||||
|             BOOL : 'bool', SYMBOL : 'z3_symbol', PRINT_MODE : 'int', ERROR_CODE : 'int', CHAR : 'char', CHAR_PTR : 'string', LBOOL : 'int' } | ||||
| 
 | ||||
| Closures = [] | ||||
| 
 | ||||
|  | @ -522,11 +523,11 @@ def mk_dotnet_wrappers(dotnet): | |||
| 
 | ||||
| Type2Java = { VOID : 'void', VOID_PTR : 'long', INT : 'int', UINT : 'int', INT64 : 'long', UINT64 : 'long', DOUBLE : 'double', | ||||
|               FLOAT : 'float', STRING : 'String', STRING_PTR : 'StringPtr', | ||||
|               BOOL : 'boolean', SYMBOL : 'long', PRINT_MODE : 'int', ERROR_CODE : 'int', CHAR : 'char', CHAR_PTR : 'long' } | ||||
|               BOOL : 'boolean', SYMBOL : 'long', PRINT_MODE : 'int', ERROR_CODE : 'int', CHAR : 'char', CHAR_PTR : 'long', LBOOL : 'int' } | ||||
| 
 | ||||
| Type2JavaW = { VOID : 'void', VOID_PTR : 'jlong', INT : 'jint', UINT : 'jint', INT64 : 'jlong', UINT64 : 'jlong', DOUBLE : 'jdouble', | ||||
|                FLOAT : 'jfloat', STRING : 'jstring', STRING_PTR : 'jobject', | ||||
|                BOOL : 'jboolean', SYMBOL : 'jlong', PRINT_MODE : 'jint', ERROR_CODE : 'jint', CHAR : 'jchar', CHAR_PTR : 'jlong'} | ||||
|                BOOL : 'jboolean', SYMBOL : 'jlong', PRINT_MODE : 'jint', ERROR_CODE : 'jint', CHAR : 'jchar', CHAR_PTR : 'jlong', LBOOL : 'jint'} | ||||
| 
 | ||||
| def type2java(ty): | ||||
|     global Type2Java | ||||
|  | @ -1024,6 +1025,9 @@ def def_API(name, result, params): | |||
|             elif ty == VOID_PTR: | ||||
|                 log_c.write("  P(0);\n") | ||||
|                 exe_c.write("in.get_obj_addr(%s)" % i) | ||||
|             elif ty == LBOOL: | ||||
|                 log_c.write("  I(static_cast<signed>(a%s));\n" % i) | ||||
|                 exe_c.write("static_cast<%s>(in.get_int(%s))" % (type2str(ty), i)) | ||||
|             elif ty == PRINT_MODE or ty == ERROR_CODE: | ||||
|                 log_c.write("  U(static_cast<unsigned>(a%s));\n" % i) | ||||
|                 exe_c.write("static_cast<%s>(in.get_uint(%s))" % (type2str(ty), i)) | ||||
|  | @ -1298,7 +1302,7 @@ def ml_unwrap(t, ts, s): | |||
|         return '(' + ts + ') String_val(' + s + ')' | ||||
|     elif t == BOOL or (type2str(t) == 'bool'): | ||||
|         return '(' + ts + ') Bool_val(' + s + ')' | ||||
|     elif t == INT or t == PRINT_MODE or t == ERROR_CODE: | ||||
|     elif t == INT or t == PRINT_MODE or t == ERROR_CODE or t == LBOOL: | ||||
|         return '(' + ts + ') Int_val(' + s + ')' | ||||
|     elif t == UINT: | ||||
|         return '(' + ts + ') Unsigned_int_val(' + s + ')' | ||||
|  | @ -1319,7 +1323,7 @@ def ml_set_wrap(t, d, n): | |||
|         return d + ' = Val_unit;' | ||||
|     elif t == BOOL or (type2str(t) == 'bool'): | ||||
|         return d + ' = Val_bool(' + n + ');' | ||||
|     elif t == INT or t == UINT or t == PRINT_MODE or t == ERROR_CODE: | ||||
|     elif t == INT or t == UINT or t == PRINT_MODE or t == ERROR_CODE or t == LBOOL: | ||||
|         return d + ' = Val_int(' + n + ');' | ||||
|     elif t == INT64 or t == UINT64: | ||||
|         return d + ' = Val_long(' + n + ');' | ||||
|  | @ -1332,7 +1336,7 @@ def ml_set_wrap(t, d, n): | |||
|         return '*(' + pts + '*)Data_custom_val(' + d + ') = ' + n + ';' | ||||
| 
 | ||||
| def ml_alloc_and_store(t, lhs, rhs): | ||||
|     if t == VOID or t == BOOL or t == INT or t == UINT or t == PRINT_MODE or t == ERROR_CODE or t == INT64 or t == UINT64 or t == DOUBLE or t == STRING or (type2str(t) == 'bool'): | ||||
|     if t == VOID or t == BOOL or t == INT or t == UINT or t == PRINT_MODE or t == ERROR_CODE or t == INT64 or t == UINT64 or t == DOUBLE or t == STRING or t == LBOOL or (type2str(t) == 'bool'): | ||||
|         return ml_set_wrap(t, lhs, rhs) | ||||
|     else: | ||||
|         pts = ml_plus_type(type2str(t)) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue