Browse Source

pastojs: fixed check for static class method modifier in class helper for extrnal class

git-svn-id: trunk@43099 -
Mattias Gaertner 5 years ago
parent
commit
6864658f27
2 changed files with 24 additions and 2 deletions
  1. 2 2
      packages/pastojs/src/fppas2js.pp
  2. 22 0
      packages/pastojs/tests/tcmodules.pas

+ 2 - 2
packages/pastojs/src/fppas2js.pp

@@ -4124,10 +4124,10 @@ begin
               if TPasClassType(HelperForType).IsExternal then
                 begin
                 // method of a class helper for external class
-                if IsClassMethod(El) and not (ptmStatic in El.Modifiers) then
+                if IsClassMethod(Proc) and not (ptmStatic in El.Modifiers) then
                   RaiseMsg(20190201165259,nHelperClassMethodForExtClassMustBeStatic,
                     sHelperClassMethodForExtClassMustBeStatic,[],El);
-                if El.ClassType=TPasConstructor then
+                if Proc.ClassType=TPasConstructor then
                   RaiseNotYetImplemented(20190206153655,El);
                 end;
               end;

+ 22 - 0
packages/pastojs/tests/tcmodules.pas

@@ -670,6 +670,7 @@ type
     Procedure TestClassHelper_PassProperty;
     Procedure TestExtClassHelper_ClassVar;
     Procedure TestExtClassHelper_Method_Call;
+    Procedure TestExtClassHelper_ClassMethod_MissingStatic;
     Procedure TestRecordHelper_ClassVar;
     Procedure TestRecordHelper_Method_Call;
     Procedure TestRecordHelper_Constructor;
@@ -21651,6 +21652,27 @@ begin
     '']));
 end;
 
+procedure TTestModule.TestExtClassHelper_ClassMethod_MissingStatic;
+begin
+  StartProgram(false);
+  Add([
+  '{$modeswitch externalclass}',
+  'type',
+  '  TExtA = class external name ''ExtObj''',
+  '    procedure Run(w: word = 10);',
+  '  end;',
+  '  THelper = class helper for TExtA',
+  '    class procedure Fly;',
+  '  end;',
+  'class procedure THelper.Fly;',
+  'begin end;',
+  'begin',
+  '']);
+  SetExpectedPasResolverError(sHelperClassMethodForExtClassMustBeStatic,
+                              nHelperClassMethodForExtClassMustBeStatic);
+  ConvertProgram;
+end;
+
 procedure TTestModule.TestRecordHelper_ClassVar;
 begin
   StartProgram(false);