mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-04 05:19:11 +00:00 
			
		
		
		
	Reorganizing code. Added script for generating VS project files
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
		
							parent
							
								
									2c464d413d
								
							
						
					
					
						commit
						8a6997960a
					
				
					 68 changed files with 167 additions and 170 deletions
				
			
		
							
								
								
									
										161
									
								
								mk_make.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										161
									
								
								mk_make.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,161 @@
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
 | 
					import glob
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BUILD_DIR='build-test'
 | 
				
			||||||
 | 
					SRC_DIR='src'
 | 
				
			||||||
 | 
					MODES=['Debug', 'Release']
 | 
				
			||||||
 | 
					PLATFORMS=['Win32', 'x64']
 | 
				
			||||||
 | 
					VS_COMMON_OPTIONS='WIN32;_WINDOWS;ASYNC_COMMANDS'
 | 
				
			||||||
 | 
					VS_DBG_OPTIONS='Z3DEBUG;_TRACE;_DEBUG'
 | 
				
			||||||
 | 
					VS_RELEASE_OPTIONS='NDEBUG;_EXTERNAL_RELEASE'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def is_debug(mode):
 | 
				
			||||||
 | 
					    return mode == 'Debug'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def is_x64(platform):
 | 
				
			||||||
 | 
					    return platform == 'x64'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def mk_dir(d):
 | 
				
			||||||
 | 
					    if not os.path.exists(d):
 | 
				
			||||||
 | 
					        os.makedirs(d)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Initialization
 | 
				
			||||||
 | 
					mk_dir(BUILD_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def module_src_dir(name):
 | 
				
			||||||
 | 
					    return '%s%s%s' % (SRC_DIR, os.sep, name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def module_build_dir(name):
 | 
				
			||||||
 | 
					    return '%s%s%s' % (BUILD_DIR, os.sep, name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def vs_header(f):
 | 
				
			||||||
 | 
					    f.write(
 | 
				
			||||||
 | 
					'<?xml version="1.0" encoding="utf-8"?>\n'
 | 
				
			||||||
 | 
					'<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\n')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GUI = 0
 | 
				
			||||||
 | 
					Name2GUI = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def vs_project_configurations(f, name):
 | 
				
			||||||
 | 
					    global GUI, Name2GUI
 | 
				
			||||||
 | 
					    f.write('  <ItemGroup Label="ProjectConfigurations">\n')
 | 
				
			||||||
 | 
					    for mode in MODES:
 | 
				
			||||||
 | 
					        for platform in PLATFORMS:
 | 
				
			||||||
 | 
					            f.write('    <ProjectConfiguration Include="%s|%s">\n' % (mode, platform))
 | 
				
			||||||
 | 
					            f.write('      <Configuration>%s</Configuration>\n' % mode)
 | 
				
			||||||
 | 
					            f.write('      <Platform>%s</Platform>\n' % platform)
 | 
				
			||||||
 | 
					            f.write('    </ProjectConfiguration>\n')
 | 
				
			||||||
 | 
					    f.write('  </ItemGroup>\n')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    f.write('   <PropertyGroup Label="Globals">\n')
 | 
				
			||||||
 | 
					    f.write('    <ProjectGuid>{00000000-0000-0000-000--%s}</ProjectGuid>\n' % GUI)
 | 
				
			||||||
 | 
					    f.write('    <ProjectName>%s</ProjectName>\n' % name)
 | 
				
			||||||
 | 
					    f.write('    <Keyword>Win32Proj</Keyword>\n')
 | 
				
			||||||
 | 
					    f.write('  </PropertyGroup>\n')
 | 
				
			||||||
 | 
					    f.write('  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\n')
 | 
				
			||||||
 | 
					    Name2GUI[name] = GUI
 | 
				
			||||||
 | 
					    GUI = GUI + 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def vs_lib_configurations(f, name):
 | 
				
			||||||
 | 
					    for mode in MODES:
 | 
				
			||||||
 | 
					        for platform in PLATFORMS:
 | 
				
			||||||
 | 
					            f.write('  <PropertyGroup Condition="\'$(Configuration)|$(Platform)\'==\'%s|%s\'" Label="Configuration">\n' % (mode, platform))
 | 
				
			||||||
 | 
					            f.write('    <ConfigurationType>StaticLibrary</ConfigurationType>\n')
 | 
				
			||||||
 | 
					            f.write('    <CharacterSet>Unicode</CharacterSet>\n')
 | 
				
			||||||
 | 
					            f.write('    <UseOfMfc>false</UseOfMfc>\n')
 | 
				
			||||||
 | 
					            f.write('  </PropertyGroup>\n')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    f.write('  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\n')
 | 
				
			||||||
 | 
					    f.write('  <ImportGroup Label="ExtensionSettings">\n')
 | 
				
			||||||
 | 
					    f.write('   </ImportGroup>\n')
 | 
				
			||||||
 | 
					    f.write('   <ImportGroup Label="PropertySheets">\n')
 | 
				
			||||||
 | 
					    f.write('    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists(\'$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props\')" Label="LocalAppDataPlatform" />  </ImportGroup>\n')
 | 
				
			||||||
 | 
					    f.write('  <PropertyGroup Label="UserMacros" />\n')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    f.write('  <PropertyGroup>\n')
 | 
				
			||||||
 | 
					    for mode in MODES:
 | 
				
			||||||
 | 
					        for platform in PLATFORMS:
 | 
				
			||||||
 | 
					            if is_x64(platform):
 | 
				
			||||||
 | 
					                f.write('    <OutDir Condition="\'$(Configuration)|$(Platform)\'==\'%s|%s\'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>\n' % 
 | 
				
			||||||
 | 
					                        (mode, platform))
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                f.write('    <OutDir Condition="\'$(Configuration)|$(Platform)\'==\'%s|%s\'">$(SolutionDir)$(Configuration)\</OutDir>\n' % (mode, platform))
 | 
				
			||||||
 | 
					    for mode in MODES:
 | 
				
			||||||
 | 
					        for platform in PLATFORMS:
 | 
				
			||||||
 | 
					            f.write('    <TargetName Condition="\'$(Configuration)|$(Platform)\'==\'%s|%s\'">%s</TargetName>\n' % (mode, platform, name))
 | 
				
			||||||
 | 
					            f.write('    <TargetExt Condition="\'$(Configuration)|$(Platform)\'==\'%s|%s\'">.lib</TargetExt>\n' % (mode, platform))
 | 
				
			||||||
 | 
					    f.write('  </PropertyGroup>\n')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def vs_compilation_options(f, name, deps):
 | 
				
			||||||
 | 
					    for mode in MODES:
 | 
				
			||||||
 | 
					        for platform in PLATFORMS:
 | 
				
			||||||
 | 
					            f.write('  <ItemDefinitionGroup Condition="\'$(Configuration)|$(Platform)\'==\'%s|%s\'">\n' % (mode, platform))
 | 
				
			||||||
 | 
					            if is_x64(platform):
 | 
				
			||||||
 | 
					                f.write('    <Midl>\n')
 | 
				
			||||||
 | 
					                f.write('      <TargetEnvironment>X64</TargetEnvironment>\n')
 | 
				
			||||||
 | 
					                f.write('    </Midl>\n')
 | 
				
			||||||
 | 
					            f.write('    <ClCompile>\n')
 | 
				
			||||||
 | 
					            if is_debug(mode):
 | 
				
			||||||
 | 
					                f.write('      <Optimization>Disabled</Optimization>\n')
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                f.write('      <Optimization>Full</Optimization>\n')
 | 
				
			||||||
 | 
					            options = VS_COMMON_OPTIONS
 | 
				
			||||||
 | 
					            if is_debug(mode):
 | 
				
			||||||
 | 
					                options = "%s;%s" % (options, VS_DBG_OPTIONS)
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                options = "%s;%s" % (options, VS_RELEASE_OPTIONS)
 | 
				
			||||||
 | 
					            if is_x64(platform):
 | 
				
			||||||
 | 
					                options = "%s;_AMD64_" % options
 | 
				
			||||||
 | 
					            f.write('      <PreprocessorDefinitions>%s;%%(PreprocessorDefinitions)</PreprocessorDefinitions>\n' % options)
 | 
				
			||||||
 | 
					            if is_debug(mode):
 | 
				
			||||||
 | 
					                f.write('      <MinimalRebuild>true</MinimalRebuild>\n')
 | 
				
			||||||
 | 
					                f.write('      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n')
 | 
				
			||||||
 | 
					                f.write('      <WarningLevel>Level3</WarningLevel>\n')
 | 
				
			||||||
 | 
					            f.write('      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n')
 | 
				
			||||||
 | 
					            f.write('      <OpenMPSupport>true</OpenMPSupport>\n')
 | 
				
			||||||
 | 
					            f.write('      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n')
 | 
				
			||||||
 | 
					            f.write('      <AdditionalIncludeDirectories>')
 | 
				
			||||||
 | 
					            f.write('..\..\src\%s' % name)
 | 
				
			||||||
 | 
					            for dep in deps:
 | 
				
			||||||
 | 
					                f.write(';..\..\src\%s' % dep)
 | 
				
			||||||
 | 
					            f.write('</AdditionalIncludeDirectories>\n')
 | 
				
			||||||
 | 
					            f.write('    </ClCompile>\n')
 | 
				
			||||||
 | 
					            f.write('    <Link>\n')
 | 
				
			||||||
 | 
					            f.write('      <OutputFile>$(OutDir)%s.lib</OutputFile>\n' % name)
 | 
				
			||||||
 | 
					            f.write('      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n')
 | 
				
			||||||
 | 
					            if is_x64(platform):
 | 
				
			||||||
 | 
					                f.write('      <TargetMachine>MachineX64</TargetMachine>\n')
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                f.write('      <TargetMachine>MachineX86</TargetMachine>\n')
 | 
				
			||||||
 | 
					            f.write('    </Link>\n')
 | 
				
			||||||
 | 
					            f.write('  </ItemDefinitionGroup>\n')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def add_vs_cpps(f, name):
 | 
				
			||||||
 | 
					    f.write('  <ItemGroup>\n')
 | 
				
			||||||
 | 
					    srcs = module_src_dir(name)
 | 
				
			||||||
 | 
					    for cppfile in glob.glob(os.path.join(srcs, '*.cpp')):
 | 
				
			||||||
 | 
					       f.write('    <ClCompile Include="..%s..%s%s" />\n' % (os.sep, os.sep, cppfile))
 | 
				
			||||||
 | 
					    f.write('  </ItemGroup>\n')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def vs_footer(f):
 | 
				
			||||||
 | 
					    f.write(
 | 
				
			||||||
 | 
					'  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\n'
 | 
				
			||||||
 | 
					'  <ImportGroup Label="ExtensionTargets">\n'
 | 
				
			||||||
 | 
					'  </ImportGroup>\n'
 | 
				
			||||||
 | 
					'</Project>\n')
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					def add_lib(name, deps):
 | 
				
			||||||
 | 
					    module_dir = module_build_dir(name)
 | 
				
			||||||
 | 
					    mk_dir(module_dir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    vs_proj = open('%s%s%s.vcxproj' % (module_dir, os.sep, name), 'w')
 | 
				
			||||||
 | 
					    vs_header(vs_proj)
 | 
				
			||||||
 | 
					    vs_project_configurations(vs_proj, name)
 | 
				
			||||||
 | 
					    vs_lib_configurations(vs_proj, name)
 | 
				
			||||||
 | 
					    vs_compilation_options(vs_proj, name, deps)
 | 
				
			||||||
 | 
					    add_vs_cpps(vs_proj, name)
 | 
				
			||||||
 | 
					    vs_footer(vs_proj)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					add_lib('util', [])
 | 
				
			||||||
 | 
					add_lib('polynomial', ['util'])
 | 
				
			||||||
 | 
					add_lib('ast', ['util', 'polynomial'])
 | 
				
			||||||
| 
						 | 
					@ -21,7 +21,6 @@ Revision History:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include"mpq.h"
 | 
					#include"mpq.h"
 | 
				
			||||||
#include"hash.h"
 | 
					#include"hash.h"
 | 
				
			||||||
#include"params.h"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef std::pair<mpq, mpq> mpq_inf;
 | 
					typedef std::pair<mpq, mpq> mpq_inf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,12 +31,12 @@ class mpq_inf_manager {
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    typedef mpq_inf numeral;
 | 
					    typedef mpq_inf numeral;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    mpq_inf_manager(mpq_manager<SYNCH> & _m, params_ref const & p = params_ref()):m(_m) {
 | 
					    mpq_inf_manager(mpq_manager<SYNCH> & _m, double inf = 0.0001):m(_m) {
 | 
				
			||||||
        updt_params(p);
 | 
					        set_inf(inf);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void updt_params(params_ref const & p) {
 | 
					    void set_inf(double inf) {
 | 
				
			||||||
        m_inf = p.get_double(":infinitesimal-as-double", 0.00001);
 | 
					        m_inf = inf;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    enum inf_kind { NEG=-1, ZERO, POS };
 | 
					    enum inf_kind { NEG=-1, ZERO, POS };
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,7 +17,6 @@ Notes:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--*/
 | 
					--*/
 | 
				
			||||||
#include"params.h"
 | 
					#include"params.h"
 | 
				
			||||||
#include"ast.h"
 | 
					 | 
				
			||||||
#include"rational.h"
 | 
					#include"rational.h"
 | 
				
			||||||
#include"symbol.h"
 | 
					#include"symbol.h"
 | 
				
			||||||
#include"dictionary.h"
 | 
					#include"dictionary.h"
 | 
				
			||||||
| 
						 | 
					@ -158,11 +157,9 @@ class params {
 | 
				
			||||||
            char const *  m_str_value;
 | 
					            char const *  m_str_value;
 | 
				
			||||||
            char const *  m_sym_value;
 | 
					            char const *  m_sym_value;
 | 
				
			||||||
            rational *    m_rat_value;
 | 
					            rational *    m_rat_value;
 | 
				
			||||||
            ast *         m_ast_value;
 | 
					 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    typedef std::pair<symbol, value> entry;
 | 
					    typedef std::pair<symbol, value> entry;
 | 
				
			||||||
    ast_manager *  m_manager;
 | 
					 | 
				
			||||||
    svector<entry> m_entries;
 | 
					    svector<entry> m_entries;
 | 
				
			||||||
    unsigned       m_ref_count;
 | 
					    unsigned       m_ref_count;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
| 
						 | 
					@ -170,7 +167,7 @@ class params {
 | 
				
			||||||
    void del_values();
 | 
					    void del_values();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    params():m_manager(0), m_ref_count(0) {}
 | 
					    params():m_ref_count(0) {}
 | 
				
			||||||
    ~params() {
 | 
					    ~params() {
 | 
				
			||||||
        reset();
 | 
					        reset();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -178,8 +175,6 @@ public:
 | 
				
			||||||
    void inc_ref() { m_ref_count++; }
 | 
					    void inc_ref() { m_ref_count++; }
 | 
				
			||||||
    void dec_ref() { SASSERT(m_ref_count > 0); m_ref_count--; if (m_ref_count == 0) dealloc(this); }
 | 
					    void dec_ref() { SASSERT(m_ref_count > 0); m_ref_count--; if (m_ref_count == 0) dealloc(this); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void set_manager(ast_manager & m);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    bool empty() const { return m_entries.empty(); }
 | 
					    bool empty() const { return m_entries.empty(); }
 | 
				
			||||||
    bool contains(symbol const & k) const;
 | 
					    bool contains(symbol const & k) const;
 | 
				
			||||||
    bool contains(char const * k) const;
 | 
					    bool contains(char const * k) const;
 | 
				
			||||||
| 
						 | 
					@ -213,12 +208,6 @@ public:
 | 
				
			||||||
    rational get_rat(char const * k, rational const & _default) const; 
 | 
					    rational get_rat(char const * k, rational const & _default) const; 
 | 
				
			||||||
    symbol get_sym(symbol const & k, symbol const & _default) const;
 | 
					    symbol get_sym(symbol const & k, symbol const & _default) const;
 | 
				
			||||||
    symbol get_sym(char const * k, symbol const & _default) const;
 | 
					    symbol get_sym(char const * k, symbol const & _default) const;
 | 
				
			||||||
    expr * get_expr(symbol const & k, expr * _default) const;
 | 
					 | 
				
			||||||
    expr * get_expr(char const * k, expr * _default) const;
 | 
					 | 
				
			||||||
    func_decl * get_func_decl(symbol const & k, func_decl * _default) const;
 | 
					 | 
				
			||||||
    func_decl * get_func_decl(char const * k, func_decl * _default) const;
 | 
					 | 
				
			||||||
    sort * get_sort(symbol const & k, sort * _default) const;
 | 
					 | 
				
			||||||
    sort * get_sort(char const * k, sort * _default) const;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // setters
 | 
					    // setters
 | 
				
			||||||
    void set_bool(symbol const & k, bool v);
 | 
					    void set_bool(symbol const & k, bool v);
 | 
				
			||||||
| 
						 | 
					@ -233,12 +222,6 @@ public:
 | 
				
			||||||
    void set_rat(char const * k, rational const & v); 
 | 
					    void set_rat(char const * k, rational const & v); 
 | 
				
			||||||
    void set_sym(symbol const & k, symbol const & v);
 | 
					    void set_sym(symbol const & k, symbol const & v);
 | 
				
			||||||
    void set_sym(char const * k, symbol const & v);
 | 
					    void set_sym(char const * k, symbol const & v);
 | 
				
			||||||
    void set_expr(symbol const & k, expr * v);
 | 
					 | 
				
			||||||
    void set_expr(char const * k, expr * v);
 | 
					 | 
				
			||||||
    void set_func_decl(symbol const & k, func_decl * v);
 | 
					 | 
				
			||||||
    void set_func_decl(char const * k, func_decl * v);
 | 
					 | 
				
			||||||
    void set_sort(symbol const & k, sort * v);
 | 
					 | 
				
			||||||
    void set_sort(char const * k, sort * v);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void display(std::ostream & out) const {
 | 
					    void display(std::ostream & out) const {
 | 
				
			||||||
        out << "(params";
 | 
					        out << "(params";
 | 
				
			||||||
| 
						 | 
					@ -265,11 +248,6 @@ public:
 | 
				
			||||||
            case CPK_STRING:
 | 
					            case CPK_STRING:
 | 
				
			||||||
                out << " " << it->second.m_str_value;
 | 
					                out << " " << it->second.m_str_value;
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case CPK_EXPR:
 | 
					 | 
				
			||||||
            case CPK_FUNC_DECL:
 | 
					 | 
				
			||||||
            case CPK_SORT:
 | 
					 | 
				
			||||||
                out << " #" << it->second.m_ast_value->get_id();
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            default:
 | 
					            default:
 | 
				
			||||||
                UNREACHABLE();
 | 
					                UNREACHABLE();
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
| 
						 | 
					@ -344,15 +322,6 @@ void params_ref::copy_core(params const * src) {
 | 
				
			||||||
        case CPK_STRING:
 | 
					        case CPK_STRING:
 | 
				
			||||||
            m_params->set_str(it->first, it->second.m_str_value);
 | 
					            m_params->set_str(it->first, it->second.m_str_value);
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case CPK_EXPR:
 | 
					 | 
				
			||||||
            m_params->set_expr(it->first, static_cast<expr*>(it->second.m_ast_value));
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
        case CPK_FUNC_DECL:
 | 
					 | 
				
			||||||
            m_params->set_func_decl(it->first, static_cast<func_decl*>(it->second.m_ast_value));
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
        case CPK_SORT:
 | 
					 | 
				
			||||||
            m_params->set_sort(it->first, static_cast<sort*>(it->second.m_ast_value));
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
        default:
 | 
					        default:
 | 
				
			||||||
            UNREACHABLE();
 | 
					            UNREACHABLE();
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
| 
						 | 
					@ -369,7 +338,6 @@ void params_ref::init() {
 | 
				
			||||||
        params * old = m_params;
 | 
					        params * old = m_params;
 | 
				
			||||||
        m_params = alloc(params);
 | 
					        m_params = alloc(params);
 | 
				
			||||||
        m_params->inc_ref();
 | 
					        m_params->inc_ref();
 | 
				
			||||||
        m_params->m_manager = old->m_manager;
 | 
					 | 
				
			||||||
        copy_core(old);
 | 
					        copy_core(old);
 | 
				
			||||||
        old->dec_ref();
 | 
					        old->dec_ref();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -385,12 +353,6 @@ double params_ref::get_double(symbol const & k, double _default) const { return
 | 
				
			||||||
double params_ref::get_double(char const * k, double _default) const { return m_params ? m_params->get_double(k, _default) : _default; }
 | 
					double params_ref::get_double(char const * k, double _default) const { return m_params ? m_params->get_double(k, _default) : _default; }
 | 
				
			||||||
char const * params_ref::get_str(symbol const & k, char const * _default) const { return m_params ? m_params->get_str(k, _default) : _default; }
 | 
					char const * params_ref::get_str(symbol const & k, char const * _default) const { return m_params ? m_params->get_str(k, _default) : _default; }
 | 
				
			||||||
char const * params_ref::get_str(char const * k, char const * _default) const { return m_params ? m_params->get_str(k, _default) : _default; }
 | 
					char const * params_ref::get_str(char const * k, char const * _default) const { return m_params ? m_params->get_str(k, _default) : _default; }
 | 
				
			||||||
expr * params_ref::get_expr(symbol const & k, expr * _default) const { return m_params ? m_params->get_expr(k, _default) : _default; }
 | 
					 | 
				
			||||||
expr * params_ref::get_expr(char const * k, expr * _default) const { return m_params ? m_params->get_expr(k, _default) : _default; }
 | 
					 | 
				
			||||||
func_decl * params_ref::get_func_decl(symbol const & k, func_decl * _default) const { return m_params ? m_params->get_func_decl(k, _default) : _default; }
 | 
					 | 
				
			||||||
func_decl * params_ref::get_func_decl(char const * k, func_decl * _default) const { return m_params ? m_params->get_func_decl(k, _default) : _default; }
 | 
					 | 
				
			||||||
sort * params_ref::get_sort(symbol const & k, sort * _default) const { return m_params ? m_params->get_sort(k, _default) : _default; }
 | 
					 | 
				
			||||||
sort * params_ref::get_sort(char const * k, sort * _default) const { return m_params ? m_params->get_sort(k, _default) : _default; }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
rational params_ref::get_rat(symbol const & k, rational const & _default) const { 
 | 
					rational params_ref::get_rat(symbol const & k, rational const & _default) const { 
 | 
				
			||||||
    return m_params ? m_params->get_rat(k, _default) : _default; 
 | 
					    return m_params ? m_params->get_rat(k, _default) : _default; 
 | 
				
			||||||
| 
						 | 
					@ -408,11 +370,6 @@ symbol params_ref::get_sym(char const * k, symbol const & _default) const {
 | 
				
			||||||
    return m_params ? m_params->get_sym(k, _default) : _default; 
 | 
					    return m_params ? m_params->get_sym(k, _default) : _default; 
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void params_ref::set_manager(ast_manager & m) {
 | 
					 | 
				
			||||||
    init();
 | 
					 | 
				
			||||||
    m_params->set_manager(m);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool params_ref::empty() const {
 | 
					bool params_ref::empty() const {
 | 
				
			||||||
    if (!m_params)
 | 
					    if (!m_params)
 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
| 
						 | 
					@ -506,35 +463,6 @@ void params_ref::set_sym(char const * k, symbol const & v) {
 | 
				
			||||||
    m_params->set_sym(k, v);
 | 
					    m_params->set_sym(k, v);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void params_ref::set_expr(symbol const & k, expr * v) {
 | 
					 | 
				
			||||||
    init();
 | 
					 | 
				
			||||||
    m_params->set_expr(k, v);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void params_ref::set_expr(char const * k, expr * v) {
 | 
					 | 
				
			||||||
    init();
 | 
					 | 
				
			||||||
    m_params->set_expr(k, v);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void params_ref::set_func_decl(symbol const & k, func_decl * v) {
 | 
					 | 
				
			||||||
    init();
 | 
					 | 
				
			||||||
    m_params->set_func_decl(k, v);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void params_ref::set_func_decl(char const * k, func_decl * v) {
 | 
					 | 
				
			||||||
    init();
 | 
					 | 
				
			||||||
    m_params->set_func_decl(k, v);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void params_ref::set_sort(symbol const & k, sort * v) {
 | 
					 | 
				
			||||||
    init();
 | 
					 | 
				
			||||||
    m_params->set_sort(k, v);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void params_ref::set_sort(char const * k, sort * v) {
 | 
					 | 
				
			||||||
    init();
 | 
					 | 
				
			||||||
    m_params->set_sort(k, v);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
void params::del_value(entry & e) {
 | 
					void params::del_value(entry & e) {
 | 
				
			||||||
    switch (e.second.m_kind) {
 | 
					    switch (e.second.m_kind) {
 | 
				
			||||||
| 
						 | 
					@ -542,21 +470,11 @@ void params::del_value(entry & e) {
 | 
				
			||||||
        if (e.second.m_kind == CPK_NUMERAL)
 | 
					        if (e.second.m_kind == CPK_NUMERAL)
 | 
				
			||||||
            dealloc(e.second.m_rat_value);
 | 
					            dealloc(e.second.m_rat_value);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case CPK_EXPR:
 | 
					 | 
				
			||||||
    case CPK_SORT:
 | 
					 | 
				
			||||||
    case CPK_FUNC_DECL:
 | 
					 | 
				
			||||||
        SASSERT(m_manager);
 | 
					 | 
				
			||||||
        m_manager->dec_ref(e.second.m_ast_value);
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void params::set_manager(ast_manager & m) {
 | 
					 | 
				
			||||||
    m_manager = &m;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define TRAVERSE_ENTRIES(CODE) {                        \
 | 
					#define TRAVERSE_ENTRIES(CODE) {                        \
 | 
				
			||||||
    svector<entry>::iterator it  = m_entries.begin();   \
 | 
					    svector<entry>::iterator it  = m_entries.begin();   \
 | 
				
			||||||
    svector<entry>::iterator end = m_entries.end();     \
 | 
					    svector<entry>::iterator end = m_entries.end();     \
 | 
				
			||||||
| 
						 | 
					@ -696,30 +614,6 @@ symbol params::get_sym(char const * k, symbol const & _default) const {
 | 
				
			||||||
    GET_VALUE(return symbol::mk_symbol_from_c_ptr(it->second.m_sym_value);, CPK_SYMBOL);
 | 
					    GET_VALUE(return symbol::mk_symbol_from_c_ptr(it->second.m_sym_value);, CPK_SYMBOL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
expr * params::get_expr(symbol const & k, expr * _default) const {
 | 
					 | 
				
			||||||
    GET_VALUE(return static_cast<expr*>(it->second.m_ast_value);, CPK_EXPR);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
expr * params::get_expr(char const * k, expr * _default) const {
 | 
					 | 
				
			||||||
    GET_VALUE(return static_cast<expr*>(it->second.m_ast_value);, CPK_EXPR);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func_decl * params::get_func_decl(symbol const & k, func_decl * _default) const {
 | 
					 | 
				
			||||||
    GET_VALUE(return static_cast<func_decl*>(it->second.m_ast_value);, CPK_FUNC_DECL);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func_decl * params::get_func_decl(char const * k, func_decl * _default) const {
 | 
					 | 
				
			||||||
    GET_VALUE(return static_cast<func_decl*>(it->second.m_ast_value);, CPK_FUNC_DECL);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sort * params::get_sort(symbol const & k, sort * _default) const {
 | 
					 | 
				
			||||||
    GET_VALUE(return static_cast<sort*>(it->second.m_ast_value);, CPK_SORT);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sort * params::get_sort(char const * k, sort * _default) const {
 | 
					 | 
				
			||||||
    GET_VALUE(return static_cast<sort*>(it->second.m_ast_value);, CPK_SORT);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define SET_VALUE(MATCH_CODE, ADD_CODE) {       \
 | 
					#define SET_VALUE(MATCH_CODE, ADD_CODE) {       \
 | 
				
			||||||
    TRAVERSE_ENTRIES(if (it->first == k) {      \
 | 
					    TRAVERSE_ENTRIES(if (it->first == k) {      \
 | 
				
			||||||
        MATCH_CODE                              \
 | 
					        MATCH_CODE                              \
 | 
				
			||||||
| 
						 | 
					@ -820,44 +714,3 @@ void params::set_sym(char const * k, symbol const & v) {
 | 
				
			||||||
    SET_SYM_VALUE();
 | 
					    SET_SYM_VALUE();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define SET_AST_VALUE(KIND) {                   \
 | 
					 | 
				
			||||||
    SASSERT(m_manager);                         \
 | 
					 | 
				
			||||||
    m_manager->inc_ref(v);                      \
 | 
					 | 
				
			||||||
    SET_VALUE({                                 \
 | 
					 | 
				
			||||||
        del_value(*it);                         \
 | 
					 | 
				
			||||||
        it->second.m_kind      = KIND;          \
 | 
					 | 
				
			||||||
        it->second.m_ast_value = v;             \
 | 
					 | 
				
			||||||
    },                                          \
 | 
					 | 
				
			||||||
    {                                           \
 | 
					 | 
				
			||||||
        entry new_entry;                        \
 | 
					 | 
				
			||||||
        new_entry.first  = symbol(k);           \
 | 
					 | 
				
			||||||
        new_entry.second.m_kind = KIND;         \
 | 
					 | 
				
			||||||
        new_entry.second.m_ast_value = v;       \
 | 
					 | 
				
			||||||
        m_entries.push_back(new_entry);         \
 | 
					 | 
				
			||||||
    })}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void params::set_expr(symbol const & k, expr * v) {
 | 
					 | 
				
			||||||
    SET_AST_VALUE(CPK_EXPR);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
void params::set_expr(char const * k, expr * v) {
 | 
					 | 
				
			||||||
    SET_AST_VALUE(CPK_EXPR);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void params::set_func_decl(symbol const & k, func_decl * v) {
 | 
					 | 
				
			||||||
    SET_AST_VALUE(CPK_FUNC_DECL);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void params::set_func_decl(char const * k, func_decl * v) {
 | 
					 | 
				
			||||||
    SET_AST_VALUE(CPK_FUNC_DECL);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void params::set_sort(symbol const & k, sort * v) {
 | 
					 | 
				
			||||||
    SET_AST_VALUE(CPK_SORT);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void params::set_sort(char const * k, sort * v) {
 | 
					 | 
				
			||||||
    SET_AST_VALUE(CPK_SORT);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
| 
						 | 
					@ -21,8 +21,6 @@ Notes:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include"cmd_context_types.h"
 | 
					#include"cmd_context_types.h"
 | 
				
			||||||
#include"vector.h"
 | 
					#include"vector.h"
 | 
				
			||||||
class ast;
 | 
					 | 
				
			||||||
class ast_manager;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef cmd_arg_kind param_kind;
 | 
					typedef cmd_arg_kind param_kind;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -56,14 +54,6 @@ public:
 | 
				
			||||||
    rational get_rat(char const * k, rational const & _default) const;
 | 
					    rational get_rat(char const * k, rational const & _default) const;
 | 
				
			||||||
    symbol get_sym(symbol const & k, symbol const & _default) const;
 | 
					    symbol get_sym(symbol const & k, symbol const & _default) const;
 | 
				
			||||||
    symbol get_sym(char const * k, symbol const & _default) const;
 | 
					    symbol get_sym(char const * k, symbol const & _default) const;
 | 
				
			||||||
    expr * get_expr(symbol const & k, expr * _default) const;
 | 
					 | 
				
			||||||
    expr * get_expr(char const * k, expr * _default) const;
 | 
					 | 
				
			||||||
    func_decl * get_func_decl(symbol const & k, func_decl * _default) const;
 | 
					 | 
				
			||||||
    func_decl * get_func_decl(char const * k, func_decl * _default) const;
 | 
					 | 
				
			||||||
    sort * get_sort(symbol const & k, sort * _default) const;
 | 
					 | 
				
			||||||
    sort * get_sort(char const * k, sort * _default) const;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void set_manager(ast_manager & m);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bool empty() const;
 | 
					    bool empty() const;
 | 
				
			||||||
    bool contains(symbol const & k) const;
 | 
					    bool contains(symbol const & k) const;
 | 
				
			||||||
| 
						 | 
					@ -85,12 +75,6 @@ public:
 | 
				
			||||||
    void set_rat(char const * k, rational const & v); 
 | 
					    void set_rat(char const * k, rational const & v); 
 | 
				
			||||||
    void set_sym(symbol const & k, symbol const & v);
 | 
					    void set_sym(symbol const & k, symbol const & v);
 | 
				
			||||||
    void set_sym(char const * k, symbol const & v);
 | 
					    void set_sym(char const * k, symbol const & v);
 | 
				
			||||||
    void set_expr(symbol const & k, expr * v);
 | 
					 | 
				
			||||||
    void set_expr(char const * k, expr * v);
 | 
					 | 
				
			||||||
    void set_func_decl(symbol const & k, func_decl * v);
 | 
					 | 
				
			||||||
    void set_func_decl(char const * k, func_decl * v);
 | 
					 | 
				
			||||||
    void set_sort(symbol const & k, sort * v);
 | 
					 | 
				
			||||||
    void set_sort(char const * k, sort * v);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void display(std::ostream & out) const;
 | 
					    void display(std::ostream & out) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,7 +20,7 @@ Notes:
 | 
				
			||||||
#include"map.h"
 | 
					#include"map.h"
 | 
				
			||||||
#include"str_hashtable.h"
 | 
					#include"str_hashtable.h"
 | 
				
			||||||
#include"buffer.h"
 | 
					#include"buffer.h"
 | 
				
			||||||
#include"ast_smt2_pp.h"
 | 
					#include"smt2_util.h"
 | 
				
			||||||
#include<iomanip>
 | 
					#include<iomanip>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void statistics::update(char const * key, unsigned inc) {
 | 
					void statistics::update(char const * key, unsigned inc) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue