<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thanks Mattias/Michael,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
the reason for the 3 method types supported is that the library needs to work with the regular fpc compiler too (since the idea is to generate a user interface regardless of compiler with the same code) which doesn't currently support the "reference to..."
 syntax.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
> <span style="color: rgb(0, 0, 0); font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;">In other words:</span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="color: rgb(0, 0, 0); font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;">> Please create a bug report with a small example to demonstrate the bug.</span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I'll try to rule out my code more (since this is still in progress). Other interfaces seem to work fine, including the call to construct the one above the trouble line, which is what was confusing me.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Knowing that there aren't any known issues with either pattern leads me to think it's something dumb I did...</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
-Highball</div>
<div style=""></div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Pas2js <pas2js-bounces@lists.freepascal.org> on behalf of pas2js-request@lists.freepascal.org <pas2js-request@lists.freepascal.org><br>
<b>Sent:</b> Tuesday, April 28, 2020 6:00 AM<br>
<b>To:</b> pas2js@lists.freepascal.org <pas2js@lists.freepascal.org><br>
<b>Subject:</b> Pas2js Digest, Vol 26, Issue 5</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">Send Pas2js mailing list submissions to<br>
        pas2js@lists.freepascal.org<br>
<br>
To subscribe or unsubscribe via the World Wide Web, visit<br>
        <a href="https://lists.freepascal.org/cgi-bin/mailman/listinfo/pas2js">https://lists.freepascal.org/cgi-bin/mailman/listinfo/pas2js</a><br>
or, via email, send a message with subject or body 'help' to<br>
        pas2js-request@lists.freepascal.org<br>
<br>
You can reach the person managing the list at<br>
        pas2js-owner@lists.freepascal.org<br>
<br>
When replying, please edit your Subject line so it is more specific<br>
than "Re: Contents of Pas2js digest..."<br>
<br>
<br>
Today's Topics:<br>
<br>
   1. ui framework help with pas2js (mister highball)<br>
   2. Re: ui framework help with pas2js (Michael Van Canneyt)<br>
   3. Re: ui framework help with pas2js (Mattias Gaertner)<br>
<br>
<br>
----------------------------------------------------------------------<br>
<br>
Message: 1<br>
Date: Tue, 28 Apr 2020 03:43:51 +0000<br>
From: mister highball <mr.highball@hotmail.com><br>
To: Pas2js <pas2js@lists.freepascal.org><br>
Subject: [Pas2js] ui framework help with pas2js<br>
Message-ID:<br>
        <MN2PR14MB4221B182F380F15712C8708EF3AC0@MN2PR14MB4221.namprd14.prod.outlook.com><br>
        <br>
Content-Type: text/plain; charset="iso-8859-1"<br>
<br>
Hello!<br>
This is my first post to this mailing list, and just wanted to start out saying that I've been very much impressed using pas2js so far. I've been following the development for quite some time now, but I've just actually started to try and use the compiler.<br>
I've been working on a UI framework since this seems to be something the community could use.<br>
<br>
Here's the repo (it's in the infant stage)<br>
<a href="https://github.com/mr-highball/nyx">https://github.com/mr-highball/nyx</a><br>
<br>
The idea is to build the UI fluently in code, rather than rely on a traditional form editor. While there are some downsides, I believe the upsides are there too (UI changes can be checked in to git/diff'd, easy to see how things are hooked up, etc...).<br>
Additionally, I'm building the framework to allow the same code to be used to produce browser apps as well as desktop apps. Because of this I rely heavy on interfaces and creation of objects via factories.<br>
<br>
Now... here's my problem<br>
<br>
I have this code which is the most basic example I could come up with to debug my library (adding a button)<br>
<a href="https://github.com/mr-highball/nyx/blob/master/test/nyx_browser_test.lpr">https://github.com/mr-highball/nyx/blob/master/test/nyx_browser_test.lpr</a><br>
<br>
```<br>
var<br>
  UI : INyxUI;<br>
<br>
procedure BuildUI;<br>
var<br>
  I : Integer;<br>
  LContainer: INyxContainer;<br>
begin<br>
  UI := NewNyxUI;<br>
  LContainer := NewNyxContainer; //** Here's the issue **<br>
<br>
  //setup the ui with the demo ui components<br>
  UI<br>
    .AddContainer(LContainer, I) //add a container<br>
    .ContainerByIndex(I)<br>
      .Add(NewNyxButton)<br>
      .Container<br>
    .UI<br>
    .Render();<br>
end;<br>
```<br>
Rather than returning my interface on that line (the one above works just fine, and constructs the UI object the same way), an exception gets thrown and leads me to rtl.js (line:687) which looks like this (latest version being used 1.4.20)<br>
<br>
```<br>
for (var id in this){<br>
        if (this.hasOwnProperty(id)){<br>
          //console.log('rtl.intfRefs.free: id='+id+' '+this[id].$name+' $o='+this[id].$o.$classname);<br>
          this[id]._Release();<br>
```<br>
and throws, (Uncaught TypeError: Cannot read property '_Release' of null)<br>
<br>
This easily could be an issue with my code, but in this case it seems like my reference is getting immediately freed after creation and am having a hard time seeing why. I am debugging in the browser (chrome variant) but still having a hard time spotting the
 issue.<br>
I'm going to continue debugging this to see if I can gain some headway, but just didn't know if there were any known issues with<br>
<br>
  *   interface reference counting<br>
  *   object creation via metaclasses<br>
<br>
Any insight would be appreciated!<br>
<br>
Anyways, keep up the good work, and I'll be sure to post updates on the library when I have them<br>
<br>
-Highball<br>
-------------- next part --------------<br>
An HTML attachment was scrubbed...<br>
URL: <<a href="http://lists.freepascal.org/pipermail/pas2js/attachments/20200428/b4479143/attachment.htm">http://lists.freepascal.org/pipermail/pas2js/attachments/20200428/b4479143/attachment.htm</a>><br>
<br>
------------------------------<br>
<br>
Message: 2<br>
Date: Tue, 28 Apr 2020 08:35:05 +0200 (CEST)<br>
From: Michael Van Canneyt <michael@freepascal.org><br>
To: pas2js discussions <pas2js@lists.freepascal.org><br>
Subject: Re: [Pas2js] ui framework help with pas2js<br>
Message-ID: <alpine.DEB.2.21.2004280823000.16917@home><br>
Content-Type: text/plain; charset=US-ASCII; format=flowed<br>
<br>
<br>
<br>
On Tue, 28 Apr 2020, mister highball wrote:<br>
<br>
> Hello!<br>
> This is my first post to this mailing list, and just wanted to start out saying that I've been very much impressed using pas2js so far. I've been following the development for quite some time now, but I've just actually started to try and use the compiler.<br>
> I've been working on a UI framework since this seems to be something the community could use.<br>
><br>
> Here's the repo (it's in the infant stage)<br>
> <a href="https://github.com/mr-highball/nyx">https://github.com/mr-highball/nyx</a><br>
><br>
> The idea is to build the UI fluently in code, rather than rely on a traditional form editor. While there are some downsides, I believe the upsides are there too (UI changes can be checked in to git/diff'd, easy to see how things are hooked up, etc...).<br>
> Additionally, I'm building the framework to allow the same code to be used to produce browser apps as well as desktop apps. Because of this I rely heavy on interfaces and creation of objects via factories.<br>
<br>
A tip:<br>
<br>
   TNyxElementCallback = procedure(const AElement : INyxElement);<br>
   TNyxElementNestedCallback = procedure(const AElement : INyxElement) is nested;<br>
   TNyxElementMethod = procedure(const AElement : INyxElement) of object;<br>
<br>
Can be replaced by<br>
<br>
   TNyxElementCallback = reference to procedure(const AElement : INyxElement);<br>
<br>
You don't need the 3 different types. It will simplify your code a lot.<br>
<br>
><br>
> Now... here's my problem<br>
><br>
> I have this code which is the most basic example I could come up with to debug my library (adding a button)<br>
> <a href="https://github.com/mr-highball/nyx/blob/master/test/nyx_browser_test.lpr">
https://github.com/mr-highball/nyx/blob/master/test/nyx_browser_test.lpr</a><br>
><br>
> ```<br>
> var<br>
>  UI : INyxUI;<br>
><br>
> procedure BuildUI;<br>
> var<br>
>  I : Integer;<br>
>  LContainer: INyxContainer;<br>
> begin<br>
>  UI := NewNyxUI;<br>
>  LContainer := NewNyxContainer; //** Here's the issue **<br>
><br>
>  //setup the ui with the demo ui components<br>
>  UI<br>
>    .AddContainer(LContainer, I) //add a container<br>
>    .ContainerByIndex(I)<br>
>      .Add(NewNyxButton)<br>
>      .Container<br>
>    .UI<br>
>    .Render();<br>
> end; ```<br>
>  Rather than returning my interface on that line (the one above<br>
> works just fine, and constructs the UI object the same way), an exception<br>
> gets thrown and leads me to rtl.js (line:687) which looks like this<br>
> (latest version being used 1.4.20)<br>
><br>
> ```<br>
> for (var id in this){<br>
>        if (this.hasOwnProperty(id)){<br>
>          //console.log('rtl.intfRefs.free: id='+id+' '+this[id].$name+' $o='+this[id].$o.$classname);<br>
>          this[id]._Release();<br>
> ```<br>
> and throws, (Uncaught TypeError: Cannot read property '_Release' of null)<br>
><br>
> This easily could be an issue with my code, but in this case it seems like<br>
> my reference is getting immediately freed after creation and am having a<br>
> hard time seeing why.<br>
<br>
Since your're using interfaces: Reference counting issue, most likely.<br>
<br>
> I am debugging in the browser (chrome variant) but<br>
> still having a hard time spotting the issue.  I'm going to continue<br>
> debugging this to see if I can gain some headway, but just didn't know if<br>
> there were any known issues with<br>
><br>
>  *   interface reference counting<br>
>  *   object creation via metaclasses<br>
<br>
Both should work OK, bugs excepted of course. I personally don't use<br>
interfaces, but others do and we haven't received any bugrepors.<br>
(which doesn't necessarily mean there are no bugs, of course)<br>
<br>
By contrast I use metaclasses a lot and have not yet seen any errors.<br>
<br>
Michael..<br>
<br>
<br>
<br>
------------------------------<br>
<br>
Message: 3<br>
Date: Tue, 28 Apr 2020 09:57:00 +0200<br>
From: Mattias Gaertner <nc-gaertnma@netcologne.de><br>
To: pas2js@lists.freepascal.org<br>
Subject: Re: [Pas2js] ui framework help with pas2js<br>
Message-ID: <20200428095700.585757e0@limapholos.matflo.wg><br>
Content-Type: text/plain; charset=US-ASCII<br>
<br>
On Tue, 28 Apr 2020 08:35:05 +0200 (CEST)<br>
Michael Van Canneyt <michael@freepascal.org> wrote:<br>
<br>
>[...]<br>
> >  *   interface reference counting<br>
> >  *   object creation via metaclasses  <br>
> <br>
> Both should work OK, bugs excepted of course. I personally don't use<br>
> interfaces, but others do and we haven't received any bugrepors.<br>
> (which doesn't necessarily mean there are no bugs, of course)<br>
> <br>
> By contrast I use metaclasses a lot and have not yet seen any errors.<br>
<br>
In other words:<br>
Please create a bug report with a small example to demonstrate the bug.<br>
<br>
Mattias<br>
<br>
<br>
------------------------------<br>
<br>
Subject: Digest Footer<br>
<br>
_______________________________________________<br>
Pas2js maillist  -  Pas2js@lists.freepascal.org<br>
<a href="https://lists.freepascal.org/cgi-bin/mailman/listinfo/pas2js">https://lists.freepascal.org/cgi-bin/mailman/listinfo/pas2js</a><br>
<br>
<br>
------------------------------<br>
<br>
End of Pas2js Digest, Vol 26, Issue 5<br>
*************************************<br>
</div>
</span></font></div>
</body>
</html>