Goose  Diff

Differences From Artifact [5a2bf81954]:

  • File bs/builtins/operators/where.cpp — part of check-in [2370e98869] at 2021-03-02 22:51:58 on branch trunk — Removed magic "tuple of types to tuple type" conversions and moved them into extension points so that any type can implement similar semantics (user: achavasse size: 2262)

To Artifact [4f55677e37]:

  • File bs/builtins/operators/where.cpp — part of check-in [b2945b5bb1] at 2021-03-05 17:56:37 on branch trunk — Implemented refinement type predicate unification. Predicate violations by variable initialization are now properly detected. (user: achavasse size: 2314)

58
59
60
61
62
63
64
65

66
67
68
69
70
71

            // Strip the start and end brackets
            auto beg = g.begin();
            advance( beg, 1 );
            move( beg, g.end(), back_inserter( toks ) );
            toks.resize( toks.size() - 1 );

            p.pushValue( Value( type.type(), InjectPredicatesIntoStdType( type.val(), preds ) ) );

            return true;
        };

        RegisterRule( e, "where"_sid, Rule( wherePrecedence, parseWhere ) );
    }
}







|
>






58
59
60
61
62
63
64
65
66
67
68
69
70
71
72

            // Strip the start and end brackets
            auto beg = g.begin();
            advance( beg, 1 );
            move( beg, g.end(), back_inserter( toks ) );
            toks.resize( toks.size() - 1 );

            p.pushValue( Value( type.type(), InjectPredicatesIntoStdType( type.val(), preds ) )
                .setLocationId( type.locationId() ) );
            return true;
        };

        RegisterRule( e, "where"_sid, Rule( wherePrecedence, parseWhere ) );
    }
}