summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2>2021-04-24 12:04:37 +0000
committermattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2>2021-04-24 12:04:37 +0000
commit1c1eaf2aa2edfc36da8bdc4587beecfd948e1905 (patch)
treecd0c9fa6462971d3bd3781981aac17edc6fcebaf
parente02562634b4376b387998d873d2dbcfc0da593fc (diff)
downloadfpc-1c1eaf2aa2edfc36da8bdc4587beecfd948e1905.tar.gz
pastojs: rtti of async function: pfAsync
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@49255 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--packages/pastojs/src/fppas2js.pp7
-rw-r--r--packages/pastojs/tests/tcmodules.pas27
2 files changed, 22 insertions, 12 deletions
diff --git a/packages/pastojs/src/fppas2js.pp b/packages/pastojs/src/fppas2js.pp
index 2054885b0d..0a6deca3df 100644
--- a/packages/pastojs/src/fppas2js.pp
+++ b/packages/pastojs/src/fppas2js.pp
@@ -2314,6 +2314,7 @@ type
pfVarargs = 2;
pfExternal = 4;
pfSafeCall = 8;
+ pfAsync = $10;
// PropertyFlag
pfGetFunction = 1; // getter is a function
pfSetProcedure = 2; // setter is a function
@@ -16565,10 +16566,12 @@ begin
if ResultTypeInfo<>nil then
InnerCall.AddArg(ResultTypeInfo);
end;
- // add param flags
+ // add procedure flags
Flags:=0;
if ptmVarargs in El.Modifiers then
inc(Flags,pfVarargs);
+ if ptmAsync in El.Modifiers then
+ inc(Flags,pfAsync);
if El.CallingConvention=ccSafeCall then
inc(Flags,pfSafeCall);
if Flags>0 then
@@ -20237,6 +20240,8 @@ begin
inc(Flags,pfStatic);
if ptmVarargs in Proc.ProcType.Modifiers then
inc(Flags,pfVarargs);
+ if ptmAsync in Proc.ProcType.Modifiers then
+ inc(Flags,pfAsync);
if Proc.IsExternal then
inc(Flags,pfExternal);
if Flags>0 then
diff --git a/packages/pastojs/tests/tcmodules.pas b/packages/pastojs/tests/tcmodules.pas
index d3f5908660..faadb69ff5 100644
--- a/packages/pastojs/tests/tcmodules.pas
+++ b/packages/pastojs/tests/tcmodules.pas
@@ -29738,17 +29738,19 @@ procedure TTestModule.TestRTTI_Class_Method;
begin
WithTypeInfo:=true;
StartProgram(false);
- Add('type');
- Add(' TObject = class');
- Add(' private');
- Add(' procedure Internal; external name ''$intern'';');
- Add(' published');
- Add(' procedure Click; virtual; abstract;');
- Add(' procedure Notify(Sender: TObject); virtual; abstract;');
- Add(' function GetNotify: boolean; external name ''GetNotify'';');
- Add(' procedure Println(a,b: longint); varargs; virtual; abstract;');
- Add(' end;');
- Add('begin');
+ Add([
+ 'type',
+ ' TObject = class',
+ ' private',
+ ' procedure Internal; external name ''$intern'';',
+ ' published',
+ ' procedure Click; virtual; abstract;',
+ ' procedure Notify(Sender: TObject); virtual; abstract;',
+ ' function GetNotify: boolean; external name ''GetNotify'';',
+ ' procedure Println(a,b: longint); varargs; virtual; abstract;',
+ ' function Fetch(URL: string): word; async; external name ''Fetch'';',
+ ' end;',
+ 'begin']);
ConvertProgram;
CheckSource('TestRTTI_Class_Method',
LinesToStr([ // statements
@@ -29764,6 +29766,9 @@ begin
' $r.addMethod("Println", 0, [["a", rtl.longint], ["b", rtl.longint]], null, {',
' flags: 2',
' });',
+ ' $r.addMethod("Fetch", 1, [["URL", rtl.string]], rtl.word, {',
+ ' flags: 20',
+ ' });',
'});',
'']),
LinesToStr([ // $mod.$main