diff options
author | mattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2019-03-07 14:48:25 +0000 |
---|---|---|
committer | mattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2019-03-07 14:48:25 +0000 |
commit | 734a6fd81506220a21c303684d292119f23170ba (patch) | |
tree | fa229440a19ca37d5ad11fdb34f667f3ba658843 /packages/pastojs | |
parent | 84ade8158ec4e6c954b64dc9f31313d010be9e55 (diff) | |
download | fpc-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.pp | 24 | ||||
-rw-r--r-- | packages/pastojs/tests/tcmodules.pas | 22 |
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;', ' };', '});', |