|
@@ -461,7 +461,7 @@ implementation
|
|
internalerror(200611041);
|
|
internalerror(200611041);
|
|
end;
|
|
end;
|
|
|
|
|
|
- dispatchbyref:=(assigned(para.parasym) and (para.parasym.varspez in [vs_var,vs_out])) or
|
|
|
|
|
|
+ dispatchbyref:=(assigned(para.parasym) and (para.parasym.varspez in [vs_var,vs_out,vs_constref])) or
|
|
(para.left.resultdef.typ in [variantdef]);
|
|
(para.left.resultdef.typ in [variantdef]);
|
|
|
|
|
|
{ assign the argument/parameter to the temporary location }
|
|
{ assign the argument/parameter to the temporary location }
|
|
@@ -836,7 +836,7 @@ implementation
|
|
if (cs_strict_var_strings in current_settings.localswitches) and
|
|
if (cs_strict_var_strings in current_settings.localswitches) and
|
|
is_shortstring(left.resultdef) and
|
|
is_shortstring(left.resultdef) and
|
|
is_shortstring(parasym.vardef) and
|
|
is_shortstring(parasym.vardef) and
|
|
- (parasym.varspez in [vs_out,vs_var]) and
|
|
|
|
|
|
+ (parasym.varspez in [vs_out,vs_var,vs_constref]) and
|
|
not(is_open_string(parasym.vardef)) and
|
|
not(is_open_string(parasym.vardef)) and
|
|
not(equal_defs(left.resultdef,parasym.vardef)) then
|
|
not(equal_defs(left.resultdef,parasym.vardef)) then
|
|
begin
|
|
begin
|
|
@@ -878,6 +878,7 @@ implementation
|
|
|
|
|
|
case parasym.varspez of
|
|
case parasym.varspez of
|
|
vs_var,
|
|
vs_var,
|
|
|
|
+ vs_constref,
|
|
vs_out :
|
|
vs_out :
|
|
begin
|
|
begin
|
|
if not valid_for_formal_var(left,true) then
|
|
if not valid_for_formal_var(left,true) then
|
|
@@ -897,7 +898,7 @@ implementation
|
|
valid_for_var(left,true);
|
|
valid_for_var(left,true);
|
|
end;
|
|
end;
|
|
|
|
|
|
- if parasym.varspez in [vs_var,vs_out] then
|
|
|
|
|
|
+ if parasym.varspez in [vs_var,vs_out,vs_constref] then
|
|
set_unique(left);
|
|
set_unique(left);
|
|
|
|
|
|
{ When the address needs to be pushed then the register is
|
|
{ When the address needs to be pushed then the register is
|
|
@@ -933,7 +934,8 @@ implementation
|
|
set_varstate(left,vs_written,[]);
|
|
set_varstate(left,vs_written,[]);
|
|
set_varstate(left,vs_readwritten,[]);
|
|
set_varstate(left,vs_readwritten,[]);
|
|
end;
|
|
end;
|
|
- vs_var :
|
|
|
|
|
|
+ vs_var,
|
|
|
|
+ vs_constref:
|
|
set_varstate(left,vs_readwritten,[vsf_must_be_valid,vsf_use_hints]);
|
|
set_varstate(left,vs_readwritten,[vsf_must_be_valid,vsf_use_hints]);
|
|
else
|
|
else
|
|
set_varstate(left,vs_read,[vsf_must_be_valid]);
|
|
set_varstate(left,vs_read,[vsf_must_be_valid]);
|