|
@@ -1207,6 +1207,11 @@ ParameterValue handle_parameter_value(CheckerContext *ctx, Type *in_type, Type *
|
|
init_core_source_code_location(ctx->checker);
|
|
init_core_source_code_location(ctx->checker);
|
|
param_value.kind = ParameterValue_Location;
|
|
param_value.kind = ParameterValue_Location;
|
|
o.type = t_source_code_location;
|
|
o.type = t_source_code_location;
|
|
|
|
+
|
|
|
|
+ if (in_type) {
|
|
|
|
+ check_assignment(ctx, &o, in_type, str_lit("parameter value"));
|
|
|
|
+ }
|
|
|
|
+
|
|
} else {
|
|
} else {
|
|
if (in_type) {
|
|
if (in_type) {
|
|
check_expr_with_type_hint(ctx, &o, expr, in_type);
|
|
check_expr_with_type_hint(ctx, &o, expr, in_type);
|
|
@@ -1214,6 +1219,11 @@ ParameterValue handle_parameter_value(CheckerContext *ctx, Type *in_type, Type *
|
|
check_expr(ctx, &o, expr);
|
|
check_expr(ctx, &o, expr);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (in_type) {
|
|
|
|
+ check_assignment(ctx, &o, in_type, str_lit("parameter value"));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
if (is_operand_nil(o)) {
|
|
if (is_operand_nil(o)) {
|
|
param_value.kind = ParameterValue_Nil;
|
|
param_value.kind = ParameterValue_Nil;
|
|
} else if (o.mode != Addressing_Constant) {
|
|
} else if (o.mode != Addressing_Constant) {
|
|
@@ -1221,16 +1231,7 @@ ParameterValue handle_parameter_value(CheckerContext *ctx, Type *in_type, Type *
|
|
param_value.kind = ParameterValue_Constant;
|
|
param_value.kind = ParameterValue_Constant;
|
|
param_value.value = exact_value_procedure(expr);
|
|
param_value.value = exact_value_procedure(expr);
|
|
} else {
|
|
} else {
|
|
- Entity *e = nullptr;
|
|
|
|
- // if (o.mode == Addressing_Value && is_type_proc(o.type)) {
|
|
|
|
- if (o.mode == Addressing_Value || o.mode == Addressing_Variable) {
|
|
|
|
- Operand x = {};
|
|
|
|
- if (expr->kind == Ast_Ident) {
|
|
|
|
- e = check_ident(ctx, &x, expr, nullptr, nullptr, false);
|
|
|
|
- } else if (expr->kind == Ast_SelectorExpr) {
|
|
|
|
- e = check_selector(ctx, &x, expr, nullptr);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ Entity *e = entity_from_expr(o.expr);
|
|
|
|
|
|
if (e != nullptr) {
|
|
if (e != nullptr) {
|
|
if (e->kind == Entity_Procedure) {
|
|
if (e->kind == Entity_Procedure) {
|
|
@@ -1267,10 +1268,6 @@ ParameterValue handle_parameter_value(CheckerContext *ctx, Type *in_type, Type *
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- if (in_type) {
|
|
|
|
- check_assignment(ctx, &o, in_type, str_lit("parameter value"));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
if (out_type_) {
|
|
if (out_type_) {
|
|
if (in_type != nullptr) {
|
|
if (in_type != nullptr) {
|
|
*out_type_ = in_type;
|
|
*out_type_ = in_type;
|