Goose  Diff

Differences From Artifact [bbee0c71bf]:

  • File bs/verify/value.cpp — part of check-in [060e84f233] at 2020-06-20 19:59:21 on branch trunk — Verifier: some fixes to correctly handle tuples. Still not quite working yet. (user: achavasse size: 13355)

To Artifact [2c7b3db4a9]:

  • File bs/verify/value.cpp — part of check-in [8ddd71f9b2] at 2020-12-18 01:29:15 on branch trunk — References refactor: references are now values all the way to the llr, where a new "CalcAddress" instruction represents a conversion from a logical address (location + path) into an actual runtime or compilation time address. This is in preparation to allow references to be stored in variables or passed as parameters. (It just took 4.5 months to finish this... Refactoring just sucks) (user: achavasse size: 13449)

150
151
152
153
154
155
156
157

158
159
160
161
162
163

164
165
166
167
168
169
170
150
151
152
153
154
155
156

157
158
159
160
161
162

163
164
165
166
167
168
169
170







-
+





-
+







    optional< Z3Val > BuildZ3Op( Builder& b, const T& instr )
    {
        return nullopt;
    }

    optional< Z3Val > BuildZ3Op( Builder& b, const Load& instr )
    {
        return LoadFromAddress( b, instr.addr() );
        return LoadFromAddress( b, FromValue< builtins::Reference >( instr.addr() )->address() );
    }

    optional< Z3Val > BuildZ3Op( Builder& b, const Store& instr )
    {
        if( auto zv = BuildZ3ExprFromValue( b, instr.val() ) )
            StoreToAddress( b, instr.addr(), move( *zv ) );
            StoreToAddress( b, FromValue< builtins::Reference >( instr.addr() )->address(), move( *zv ) );
        return nullopt;
    }

    // Implemented in call.cpp
    extern optional< Z3Val > BuildZ3Op( Builder& b, const Call& instr );

    optional< Z3Val > BuildZ3Op( Builder& b, const CreateTemporary& instr )