mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-10-02 06:41:06 +02:00
* completely handle assigned() in pass_1, replaced second_assigned with
internalerror git-svn-id: trunk@16812 -
This commit is contained in:
parent
2b6fea065d
commit
b0f3fd2533
@ -639,12 +639,7 @@ implementation
|
||||
|
||||
procedure tcginlinenode.second_assigned;
|
||||
begin
|
||||
secondpass(tcallparanode(left).left);
|
||||
{ force left to be an OS_ADDR, since in case of method procvars }
|
||||
{ the size is 2*OS_ADDR (JM) }
|
||||
cg.a_cmp_const_loc_label(current_asmdata.CurrAsmList,OS_ADDR,OC_NE,0,tcallparanode(left).left.location,current_procinfo.CurrTrueLabel);
|
||||
cg.a_jmp_always(current_asmdata.CurrAsmList,current_procinfo.CurrFalseLabel);
|
||||
location_reset(location,LOC_JUMP,OS_NO);
|
||||
internalerror(2011012501);
|
||||
end;
|
||||
|
||||
procedure Tcginlinenode.second_get_frame;
|
||||
|
@ -2258,9 +2258,6 @@ implementation
|
||||
begin
|
||||
{ the parser has already made sure the expression is valid }
|
||||
|
||||
{ there could be a procvar, which is 2*sizeof(pointer), while we }
|
||||
{ must only check the first pointer -> can't just convert to an }
|
||||
{ add node in all cases }
|
||||
set_varstate(tcallparanode(left).left,vs_read,[vsf_must_be_valid]);
|
||||
resultdef:=booltype;
|
||||
end;
|
||||
@ -2722,7 +2719,17 @@ implementation
|
||||
|
||||
in_assigned_x:
|
||||
begin
|
||||
expectloc := LOC_JUMP;
|
||||
{ in case of a complex procvar, only check the "code" pointer }
|
||||
hp:=tcallparanode(left).left;
|
||||
{ reused }
|
||||
tcallparanode(left).left:=nil;
|
||||
if (hp.resultdef.typ=procvardef) and
|
||||
not tprocvardef(hp.resultdef).is_addressonly then
|
||||
begin
|
||||
inserttypeconv_explicit(hp,search_system_type('TMETHOD').typedef);
|
||||
hp:=csubscriptnode.create(tsym(tabstractrecorddef(hp.resultdef).symtable.find('CODE')),hp);
|
||||
end;
|
||||
result:=caddnode.create(unequaln,hp,cnilnode.create);
|
||||
end;
|
||||
|
||||
in_pred_x,
|
||||
|
Loading…
Reference in New Issue
Block a user