|
@@ -169,7 +169,6 @@ interface
|
|
function docompare(p: tnode): boolean; override;
|
|
function docompare(p: tnode): boolean; override;
|
|
procedure printnodetree(var t:text);override;
|
|
procedure printnodetree(var t:text);override;
|
|
|
|
|
|
- property value : tnode read left write left;
|
|
|
|
property nextpara : tnode read right write right;
|
|
property nextpara : tnode read right write right;
|
|
property parametername : tnode read third write third;
|
|
property parametername : tnode read third write third;
|
|
end;
|
|
end;
|
|
@@ -267,9 +266,9 @@ implementation
|
|
procedure increase_paramssize;
|
|
procedure increase_paramssize;
|
|
begin
|
|
begin
|
|
{ for now we pass everything by reference
|
|
{ for now we pass everything by reference
|
|
- case para.value.resultdef.typ of
|
|
|
|
|
|
+ case para.left.resultdef.typ of
|
|
variantdef:
|
|
variantdef:
|
|
- inc(paramssize,para.value.resultdef.size);
|
|
|
|
|
|
+ inc(paramssize,para.left.resultdef.size);
|
|
else
|
|
else
|
|
}
|
|
}
|
|
inc(paramssize,sizeof(voidpointertype.size ));
|
|
inc(paramssize,sizeof(voidpointertype.size ));
|
|
@@ -301,41 +300,41 @@ implementation
|
|
while assigned(para) do
|
|
while assigned(para) do
|
|
begin
|
|
begin
|
|
inc(paracount);
|
|
inc(paracount);
|
|
- typecheckpass(para.value);
|
|
|
|
|
|
+ typecheckpass(para.left);
|
|
|
|
|
|
{ insert some extra casts }
|
|
{ insert some extra casts }
|
|
- if is_constintnode(para.value) and not(is_64bitint(para.value.resultdef)) then
|
|
|
|
|
|
+ if is_constintnode(para.left) and not(is_64bitint(para.left.resultdef)) then
|
|
begin
|
|
begin
|
|
- para.value:=ctypeconvnode.create_internal(para.value,s32inttype);
|
|
|
|
- typecheckpass(para.value);
|
|
|
|
|
|
+ para.left:=ctypeconvnode.create_internal(para.left,s32inttype);
|
|
|
|
+ typecheckpass(para.left);
|
|
end
|
|
end
|
|
- else if para.value.nodetype=stringconstn then
|
|
|
|
|
|
+ else if para.left.nodetype=stringconstn then
|
|
begin
|
|
begin
|
|
- para.value:=ctypeconvnode.create_internal(para.value,cwidestringtype);
|
|
|
|
- typecheckpass(para.value);
|
|
|
|
|
|
+ para.left:=ctypeconvnode.create_internal(para.left,cwidestringtype);
|
|
|
|
+ typecheckpass(para.left);
|
|
end
|
|
end
|
|
{ force automatable boolean type }
|
|
{ force automatable boolean type }
|
|
- else if is_boolean(para.value.resultdef) then
|
|
|
|
|
|
+ else if is_boolean(para.left.resultdef) then
|
|
begin
|
|
begin
|
|
- para.value:=ctypeconvnode.create_internal(para.value,bool16type);
|
|
|
|
- typecheckpass(para.value);
|
|
|
|
|
|
+ para.left:=ctypeconvnode.create_internal(para.left,bool16type);
|
|
|
|
+ typecheckpass(para.left);
|
|
end
|
|
end
|
|
{ force automatable float type }
|
|
{ force automatable float type }
|
|
- else if is_extended(para.value.resultdef) then
|
|
|
|
|
|
+ else if is_extended(para.left.resultdef) then
|
|
begin
|
|
begin
|
|
- para.value:=ctypeconvnode.create_internal(para.value,s64floattype);
|
|
|
|
- typecheckpass(para.value);
|
|
|
|
|
|
+ para.left:=ctypeconvnode.create_internal(para.left,s64floattype);
|
|
|
|
+ typecheckpass(para.left);
|
|
end;
|
|
end;
|
|
|
|
|
|
if assigned(para.parametername) then
|
|
if assigned(para.parametername) then
|
|
begin
|
|
begin
|
|
- typecheckpass(para.value);
|
|
|
|
|
|
+ typecheckpass(para.left);
|
|
inc(namedparacount);
|
|
inc(namedparacount);
|
|
end;
|
|
end;
|
|
|
|
|
|
- if para.value.nodetype<>nothingn then
|
|
|
|
- if not is_automatable(para.value.resultdef) then
|
|
|
|
- CGMessagePos1(para.value.fileinfo,type_e_not_automatable,para.value.resultdef.typename);
|
|
|
|
|
|
+ if para.left.nodetype<>nothingn then
|
|
|
|
+ if not is_automatable(para.left.resultdef) then
|
|
|
|
+ CGMessagePos1(para.left.fileinfo,type_e_not_automatable,para.left.resultdef.typename);
|
|
|
|
|
|
{ we've to know the parameter size to allocate the temp. space }
|
|
{ we've to know the parameter size to allocate the temp. space }
|
|
increase_paramssize;
|
|
increase_paramssize;
|
|
@@ -370,20 +369,20 @@ implementation
|
|
internalerror(200611041);
|
|
internalerror(200611041);
|
|
end;
|
|
end;
|
|
|
|
|
|
- dispatchbyref:=para.value.resultdef.typ in [variantdef];
|
|
|
|
|
|
+ dispatchbyref:=para.left.resultdef.typ in [variantdef];
|
|
{ assign the argument/parameter to the temporary location }
|
|
{ assign the argument/parameter to the temporary location }
|
|
|
|
|
|
- if para.value.nodetype<>nothingn then
|
|
|
|
|
|
+ if para.left.nodetype<>nothingn then
|
|
if dispatchbyref then
|
|
if dispatchbyref then
|
|
addstatement(statements,cassignmentnode.create(
|
|
addstatement(statements,cassignmentnode.create(
|
|
ctypeconvnode.create_internal(cderefnode.create(caddnode.create(addn,
|
|
ctypeconvnode.create_internal(cderefnode.create(caddnode.create(addn,
|
|
caddrnode.create(ctemprefnode.create(params)),
|
|
caddrnode.create(ctemprefnode.create(params)),
|
|
cordconstnode.create(paramssize,ptruinttype,false)
|
|
cordconstnode.create(paramssize,ptruinttype,false)
|
|
)),voidpointertype),
|
|
)),voidpointertype),
|
|
- ctypeconvnode.create_internal(caddrnode.create_internal(para.value),voidpointertype)))
|
|
|
|
|
|
+ ctypeconvnode.create_internal(caddrnode.create_internal(para.left),voidpointertype)))
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
- case para.value.resultdef.size of
|
|
|
|
|
|
+ case para.left.resultdef.size of
|
|
1..4:
|
|
1..4:
|
|
assignmenttype:=u32inttype;
|
|
assignmenttype:=u32inttype;
|
|
8:
|
|
8:
|
|
@@ -396,20 +395,20 @@ implementation
|
|
caddrnode.create(ctemprefnode.create(params)),
|
|
caddrnode.create(ctemprefnode.create(params)),
|
|
cordconstnode.create(paramssize,ptruinttype,false)
|
|
cordconstnode.create(paramssize,ptruinttype,false)
|
|
)),assignmenttype),
|
|
)),assignmenttype),
|
|
- ctypeconvnode.create_internal(para.value,assignmenttype)));
|
|
|
|
|
|
+ ctypeconvnode.create_internal(para.left,assignmenttype)));
|
|
end;
|
|
end;
|
|
|
|
|
|
- if is_ansistring(para.value.resultdef) then
|
|
|
|
|
|
+ if is_ansistring(para.left.resultdef) then
|
|
calldesc.argtypes[currargpos]:=varStrArg
|
|
calldesc.argtypes[currargpos]:=varStrArg
|
|
else
|
|
else
|
|
- calldesc.argtypes[currargpos]:=para.value.resultdef.getvardef;
|
|
|
|
|
|
+ calldesc.argtypes[currargpos]:=para.left.resultdef.getvardef;
|
|
|
|
|
|
if dispatchbyref then
|
|
if dispatchbyref then
|
|
calldesc.argtypes[currargpos]:=calldesc.argtypes[currargpos] or $80;
|
|
calldesc.argtypes[currargpos]:=calldesc.argtypes[currargpos] or $80;
|
|
|
|
|
|
increase_paramssize;
|
|
increase_paramssize;
|
|
|
|
|
|
- para.value:=nil;
|
|
|
|
|
|
+ para.left:=nil;
|
|
inc(currargpos);
|
|
inc(currargpos);
|
|
para:=tcallparanode(para.nextpara);
|
|
para:=tcallparanode(para.nextpara);
|
|
end;
|
|
end;
|