mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-02 18:10:23 +02:00
fcl-passrc: resolver: pass inlinespec as param
git-svn-id: trunk@43303 -
This commit is contained in:
parent
54f16d68be
commit
b6631e3857
@ -11450,7 +11450,8 @@ begin
|
||||
and ((C=TPrimitiveExpr)
|
||||
or (C=TNilExpr)
|
||||
or (C=TBoolConstExpr)
|
||||
or (C=TProcedureExpr)) then
|
||||
or (C=TProcedureExpr))
|
||||
or (C=TInlineSpecializeExpr) then
|
||||
// ok
|
||||
else if C=TUnaryExpr then
|
||||
AccessExpr(TUnaryExpr(Expr).Operand,Access)
|
||||
|
@ -156,6 +156,8 @@ type
|
||||
procedure TestGenProc_Infer_ProcT;
|
||||
procedure TestGenProc_Infer_Mismatch;
|
||||
procedure TestGenProc_Infer_ArrayOfT;
|
||||
procedure TestGenProc_Infer_PassAsArgDelphi;
|
||||
procedure TestGenProc_Infer_PassAsArgObjFPC;
|
||||
// ToDo procedure TestGenProc_Infer_ProcType;
|
||||
|
||||
// generic methods
|
||||
@ -2342,6 +2344,43 @@ begin
|
||||
ParseProgram;
|
||||
end;
|
||||
|
||||
procedure TTestResolveGenerics.TestGenProc_Infer_PassAsArgDelphi;
|
||||
begin
|
||||
StartProgram(false);
|
||||
Add([
|
||||
'{$mode delphi}',
|
||||
'function Run<T>(a: T): T;',
|
||||
'var b: T;',
|
||||
'begin',
|
||||
' Run(Run<word>(3));',
|
||||
' Run(Run(4));',
|
||||
'end;',
|
||||
'begin',
|
||||
' Run(Run<word>(5));',
|
||||
' Run(Run(6));',
|
||||
'']);
|
||||
ParseProgram;
|
||||
end;
|
||||
|
||||
procedure TTestResolveGenerics.TestGenProc_Infer_PassAsArgObjFPC;
|
||||
begin
|
||||
StartProgram(false);
|
||||
Add([
|
||||
'{$mode objfpc}',
|
||||
'{$ModeSwitch implicitfunctionspecialization}',
|
||||
'generic function Run<T>(a: T): T;',
|
||||
'var b: T;',
|
||||
'begin',
|
||||
' Run(specialize Run<word>(3));',
|
||||
' Run(Run(4));',
|
||||
'end;',
|
||||
'begin',
|
||||
' Run(specialize Run<word>(5));',
|
||||
' Run(Run(6));',
|
||||
'']);
|
||||
ParseProgram;
|
||||
end;
|
||||
|
||||
procedure TTestResolveGenerics.TestGenMethod_VirtualFail;
|
||||
begin
|
||||
StartProgram(false);
|
||||
|
@ -54,6 +54,7 @@ type
|
||||
procedure TestGenProc_Infer_OverloadForward;
|
||||
procedure TestGenProc_TypeInfo;
|
||||
procedure TestGenProc_Infer_Widen;
|
||||
procedure TestGenProc_Infer_PassAsArg;
|
||||
// ToDo: FuncName:=
|
||||
|
||||
// generic methods
|
||||
@ -1107,6 +1108,38 @@ begin
|
||||
'']));
|
||||
end;
|
||||
|
||||
procedure TTestGenerics.TestGenProc_Infer_PassAsArg;
|
||||
begin
|
||||
StartProgram(false);
|
||||
Add([
|
||||
'{$mode delphi}',
|
||||
'function Run<T>(a: T): T;',
|
||||
'var b: T;',
|
||||
'begin',
|
||||
' Run(Run<word>(3));',
|
||||
' Run(Run(word(4)));',
|
||||
'end;',
|
||||
'begin',
|
||||
' Run(Run<word>(5));',
|
||||
' Run(Run(word(6)));',
|
||||
'']);
|
||||
ConvertProgram;
|
||||
CheckSource('TestGenProc_Infer_PassAsArg',
|
||||
LinesToStr([ // statements
|
||||
'this.Run$s0 = function (a) {',
|
||||
' var Result = 0;',
|
||||
' var b = 0;',
|
||||
' $mod.Run$s0($mod.Run$s0(3));',
|
||||
' $mod.Run$s0($mod.Run$s0(4));',
|
||||
' return Result;',
|
||||
'};',
|
||||
'']),
|
||||
LinesToStr([ // $mod.$main
|
||||
'$mod.Run$s0($mod.Run$s0(5));',
|
||||
'$mod.Run$s0($mod.Run$s0(6));',
|
||||
'']));
|
||||
end;
|
||||
|
||||
procedure TTestGenerics.TestGenMethod_ObjFPC;
|
||||
begin
|
||||
StartProgram(false);
|
||||
|
Loading…
Reference in New Issue
Block a user