More cleanup
This commit is contained in:
parent
20e57a29d4
commit
887840cfd9
@ -2577,27 +2577,11 @@ destroy_constraints() ->
|
|||||||
|
|
||||||
%% Solve all constraints by iterating until no-progress
|
%% Solve all constraints by iterating until no-progress
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-spec solve_all_constraints(env()) -> ok.
|
-spec solve_all_constraints(env()) -> ok.
|
||||||
solve_all_constraints(Env) ->
|
solve_all_constraints(Env) ->
|
||||||
Constraints = [C || C <- get_constraints(), not one_shot_field_constraint(Env, C) ],
|
Constraints = [C || C <- get_constraints(), not one_shot_field_constraint(Env, C) ],
|
||||||
solve_constraints_top(Env, Constraints).
|
solve_constraints_top(Env, Constraints).
|
||||||
|
|
||||||
%% solve_constraints_top(Env, Constraints) ->
|
|
||||||
%% UnsolvedCs = solve_constraints(Env, Constraints),
|
|
||||||
|
|
||||||
%% if length(UnsolvedCs) < length(Constraints) ->
|
|
||||||
%% solve_constraints_top(Env, UnsolvedCs);
|
|
||||||
%% true ->
|
|
||||||
%% Progress = solve_unknown_record_types(Env, UnsolvedCs),
|
|
||||||
%% if Progress == true ->
|
|
||||||
%% solve_constraints_top(Env, UnsolvedCs);
|
|
||||||
%% true ->
|
|
||||||
%% ok
|
|
||||||
%% end
|
|
||||||
%% end.
|
|
||||||
solve_constraints_top(Env, Constraints) ->
|
solve_constraints_top(Env, Constraints) ->
|
||||||
UnsolvedCs = solve_constraints(Env, Constraints),
|
UnsolvedCs = solve_constraints(Env, Constraints),
|
||||||
Progress = solve_unknown_record_constraints(Env, UnsolvedCs),
|
Progress = solve_unknown_record_constraints(Env, UnsolvedCs),
|
||||||
@ -2679,7 +2663,6 @@ one_shot_field_constraint(Env, #field_constraint{record_t = RecordType,
|
|||||||
_ -> lookup_record_field_arity(Env, FieldName, Arity, Kind)
|
_ -> lookup_record_field_arity(Env, FieldName, Arity, Kind)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
io:format("CS: ~p ~p ~p\n", [FieldName, FieldType, RecordType]),
|
|
||||||
case FieldInfos of
|
case FieldInfos of
|
||||||
[] ->
|
[] ->
|
||||||
type_error({undefined_field, Field}),
|
type_error({undefined_field, Field}),
|
||||||
@ -2734,17 +2717,10 @@ destroy_and_report_unsolved_constraints(Env) ->
|
|||||||
(_) -> false
|
(_) -> false
|
||||||
end, OtherCs5),
|
end, OtherCs5),
|
||||||
|
|
||||||
UnsolvedNamedArgCs = solve_constraints(Env, NamedArgCs),
|
check_field_constraints(Env, FieldCs),
|
||||||
[ type_error({unsolved_named_argument_constraint, C}) || C <- UnsolvedNamedArgCs ],
|
|
||||||
|
|
||||||
UnsolvedFieldCs = solve_constraints(Env, FieldCs),
|
|
||||||
case solve_unknown_record_types(Env, UnsolvedFieldCs) of
|
|
||||||
true -> ok;
|
|
||||||
Errors -> [ type_error(Err) || Err <- Errors ]
|
|
||||||
end,
|
|
||||||
|
|
||||||
check_record_create_constraints(Env, CreateCs),
|
check_record_create_constraints(Env, CreateCs),
|
||||||
check_is_contract_constraints(Env, ContractCs),
|
check_is_contract_constraints(Env, ContractCs),
|
||||||
|
check_named_args_constraints(Env, NamedArgCs),
|
||||||
check_bytes_constraints(Env, BytesCs),
|
check_bytes_constraints(Env, BytesCs),
|
||||||
check_aens_resolve_constraints(Env, AensResolveCs),
|
check_aens_resolve_constraints(Env, AensResolveCs),
|
||||||
check_oracle_type_constraints(Env, OracleTypeCs),
|
check_oracle_type_constraints(Env, OracleTypeCs),
|
||||||
@ -2813,6 +2789,17 @@ specialize_dependent_type(Env, Type) ->
|
|||||||
_ -> Type %% Currently no deep dependent types
|
_ -> Type %% Currently no deep dependent types
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
check_field_constraints(Env, Constraints) ->
|
||||||
|
UnsolvedFieldCs = solve_constraints(Env, Constraints),
|
||||||
|
case solve_unknown_record_constraints(Env, UnsolvedFieldCs) of
|
||||||
|
true -> ok;
|
||||||
|
Errors -> [ type_error(Err) || Err <- Errors ]
|
||||||
|
end.
|
||||||
|
|
||||||
|
check_named_args_constraints(Env, Constraints) ->
|
||||||
|
UnsolvedNamedArgCs = solve_constraints(Env, Constraints),
|
||||||
|
[ type_error({unsolved_named_argument_constraint, C}) || C <- UnsolvedNamedArgCs ].
|
||||||
|
|
||||||
check_bytes_constraints(Env, Constraints) ->
|
check_bytes_constraints(Env, Constraints) ->
|
||||||
InAddConstraint = [ T || {add_bytes, _, _, A, B, C} <- Constraints,
|
InAddConstraint = [ T || {add_bytes, _, _, A, B, C} <- Constraints,
|
||||||
T <- [A, B, C],
|
T <- [A, B, C],
|
||||||
@ -2908,18 +2895,6 @@ check_is_contract_constraints(Env, [C | Cs]) ->
|
|||||||
end,
|
end,
|
||||||
check_is_contract_constraints(Env, Cs).
|
check_is_contract_constraints(Env, Cs).
|
||||||
|
|
||||||
-spec solve_unknown_record_types(env(), [field_constraint()]) -> true | [tuple()].
|
|
||||||
solve_unknown_record_types(Env, Unknown) ->
|
|
||||||
UVars = lists:usort([UVar || #field_constraint{record_t = UVar = {uvar, _, _}} <- Unknown]),
|
|
||||||
Solutions = [solve_for_uvar(Env, UVar, [{Kind, When, Field}
|
|
||||||
|| #field_constraint{record_t = U, field = Field, kind = Kind, context = When} <- Unknown,
|
|
||||||
U == UVar])
|
|
||||||
|| UVar <- UVars],
|
|
||||||
case lists:member(true, Solutions) of
|
|
||||||
true -> true;
|
|
||||||
false -> Solutions
|
|
||||||
end.
|
|
||||||
|
|
||||||
record_type_name({app_t, _Attrs, RecId, _Args}) when ?is_type_id(RecId) ->
|
record_type_name({app_t, _Attrs, RecId, _Args}) when ?is_type_id(RecId) ->
|
||||||
RecId;
|
RecId;
|
||||||
record_type_name(RecId) when ?is_type_id(RecId) ->
|
record_type_name(RecId) when ?is_type_id(RecId) ->
|
||||||
|
Loading…
x
Reference in New Issue
Block a user