summaryrefslogtreecommitdiff
path: root/packages/pastojs
diff options
context:
space:
mode:
authormattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-03-07 14:48:25 +0000
committermattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-03-07 14:48:25 +0000
commit734a6fd81506220a21c303684d292119f23170ba (patch)
treefa229440a19ca37d5ad11fdb34f667f3ba658843 /packages/pastojs
parent84ade8158ec4e6c954b64dc9f31313d010be9e55 (diff)
downloadfpc-734a6fd81506220a21c303684d292119f23170ba.tar.gz
pastojs: pass class var to var argument
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@41632 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/pastojs')
-rw-r--r--packages/pastojs/src/fppas2js.pp24
-rw-r--r--packages/pastojs/tests/tcmodules.pas22
2 files changed, 29 insertions, 17 deletions
diff --git a/packages/pastojs/src/fppas2js.pp b/packages/pastojs/src/fppas2js.pp
index 79264f96e8..843d097025 100644
--- a/packages/pastojs/src/fppas2js.pp
+++ b/packages/pastojs/src/fppas2js.pp
@@ -8038,16 +8038,18 @@ var
var
Call: TJSCallExpression;
begin
- if AssignContext=nil then exit;
- if AssignContext.LeftResolved.LoTypeEl is TPasRecordType then
+ if AssignContext<>nil then
begin
- // aRecord:=right -> aRecord.$assign(right)
- Call:=CreateCallExpression(El);
- AssignContext.Call:=Call;
- Call.Expr:=CreateDotNameExpr(El,Result,TJSString(GetBIName(pbifnRecordAssign)));
- Call.AddArg(AssignContext.RightSide);
- AssignContext.RightSide:=nil;
- Result:=Call;
+ if AssignContext.LeftResolved.LoTypeEl is TPasRecordType then
+ begin
+ // aRecord:=right -> aRecord.$assign(right)
+ Call:=CreateCallExpression(El);
+ AssignContext.Call:=Call;
+ Call.Expr:=CreateDotNameExpr(El,Result,TJSString(GetBIName(pbifnRecordAssign)));
+ Call.AddArg(AssignContext.RightSide);
+ AssignContext.RightSide:=nil;
+ Result:=Call;
+ end;
end;
end;
@@ -8163,8 +8165,8 @@ begin
end;
end; // property redirect
- if (AContext.Access=caAssign)
- and aResolver.IsClassField(Decl) then
+ if aResolver.IsClassField(Decl)
+ and (AContext.Access in [caAssign,caByReference]) then
begin
// writing a class var -> aClass.VarName
PathExpr:=CreateReferencePathExpr(Decl.Parent,AContext);
diff --git a/packages/pastojs/tests/tcmodules.pas b/packages/pastojs/tests/tcmodules.pas
index 16a74e49a7..8e52855f26 100644
--- a/packages/pastojs/tests/tcmodules.pas
+++ b/packages/pastojs/tests/tcmodules.pas
@@ -12017,7 +12017,7 @@ begin
' class var vI: longint;',
' class var Sub: TObject;',
' constructor Create;',
- ' class function GetIt(Par: longint): tobject;',
+ ' class function GetIt(var Par: longint): tobject;',
' end;',
'constructor tobject.create;',
'begin',
@@ -12025,12 +12025,13 @@ begin
' Self.vi:=Self.vi+1;',
' inc(vi);',
'end;',
- 'class function tobject.getit(par: longint): tobject;',
+ 'class function tobject.getit(var par: longint): tobject;',
'begin',
- ' vi:=vi+par;',
- ' Self.vi:=Self.vi+par;',
+ ' vi:=vi+3;',
+ ' Self.vi:=Self.vi+4;',
' inc(vi);',
' Result:=self.sub;',
+ ' GetIt(vi);',
'end;',
'var Obj: tobject;',
'begin',
@@ -12058,10 +12059,19 @@ begin
' };',
' this.GetIt = function(Par){',
' var Result = null;',
- ' $mod.TObject.vI = this.vI + Par;',
- ' $mod.TObject.vI = this.vI + Par;',
+ ' $mod.TObject.vI = this.vI + 3;',
+ ' $mod.TObject.vI = this.vI + 4;',
' $mod.TObject.vI += 1;',
' Result = this.Sub;',
+ ' this.GetIt({',
+ ' p: $mod.TObject,',
+ ' get: function () {',
+ ' return this.p.vI;',
+ ' },',
+ ' set: function (v) {',
+ ' this.p.vI = v;',
+ ' }',
+ ' });',
' return Result;',
' };',
'});',