output for the Language.closure method needs 3 args iirc

1. the method reference
2. the 'this' reference that is being bound to
3. the stringified method reference name from (1)

I think the goal should be something like this:

org.apache.royale.utils.Language.closure(this.parentApplication.buttonFunction,
this.parentApplication, ' buttonFunction');

I can't spend more time on that right now, but if you want to try that
might help....


On Mon, Apr 6, 2020 at 9:16 AM Yishay Weiss <[email protected]> wrote:

> Hi,
>
> Changing to
>                                                 emitClosureStart();
>
> emitAssignedValue(assignedNode);
>                                                 MemberAccessExpressionNode
> maenode = (MemberAccessExpressionNode)assignedNode;
>
> emitClosureEnd(maenode.getLeftOperandNode(), definition);
>
> Results in
>
>   org.apache.royale.utils.Language.as(c, MyButton).clickFunction =
> org.apache.royale.utils.Language.closure(this.parentApplication.buttonFunction,
> 'Function');
>
> Which fails with
>
> TypeError: Object.defineProperty called on non-object
> Watch
> Call Stack
> org.apache.royale.utils.Language.closure
> Language.js:281
> MyBox.addElement
> MyBox.js:39
>
> From: Greg Dove<mailto:[email protected]>
> Sent: Monday, April 6, 2020 12:07 AM
> To: Apache Royale Development<mailto:[email protected]>
> Subject: Re: [royale-compiler] 01/01: Works on given test case. Hope I
> didn't break anything.
>
> Take a look at emitClosureStart and emitClosureEnd I think those will help
> out.
>
>
> On Mon, Apr 6, 2020 at 9:01 AM Greg Dove <[email protected]> wrote:
>
> >
> > You might find a place in the code where there is something already that
> > has 'needClosure' logic, but the logic that sets it to true does not yet
> > include the specific case you are dealing with.
> >
> > On Mon, Apr 6, 2020 at 8:53 AM Greg Dove <[email protected]> wrote:
> >
> >> I think it's a great start Yishay. But I'd suggest you look for other
> >> areas of the compiler code where there is a generation of
> Language.closure
> >> output. This should do the same thing I think, but be consistent.
> >>
> >>
> >> On Mon, Apr 6, 2020 at 8:51 AM <[email protected]> wrote:
> >>
> >>> This is an automated email from the ASF dual-hosted git repository.
> >>>
> >>> yishayw pushed a commit to branch issue_143
> >>> in repository https://gitbox.apache.org/repos/asf/royale-compiler.git
> >>>
> >>> commit 634cb4f3362c75317538ba0daedafd19742d00df
> >>> Author: DESKTOP-RH4S838\Yishay <[email protected]>
> >>> AuthorDate: Sun Apr 5 23:48:11 2020 +0300
> >>>
> >>>     Works on given test case. Hope I didn't break anything.
> >>>
> >>>     Reference #143
> >>> ---
> >>>  .../royale/compiler/internal/codegen/js/JSEmitter.java    | 15
> >>> ++++++++++++++-
> >>>  1 file changed, 14 insertions(+), 1 deletion(-)
> >>>
> >>> diff --git
> >>>
> a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/JSEmitter.java
> >>>
> b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/JSEmitter.java
> >>> index d24adca..24c65f3 100644
> >>> ---
> >>>
> a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/JSEmitter.java
> >>> +++
> >>>
> b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/JSEmitter.java
> >>> @@ -40,6 +40,7 @@ import
> >>> org.apache.royale.compiler.definitions.metadata.IMetaTag;
> >>>  import
> >>> org.apache.royale.compiler.definitions.metadata.IMetaTagAttribute;
> >>>  import org.apache.royale.compiler.internal.codegen.as.ASEmitter;
> >>>  import org.apache.royale.compiler.internal.codegen.as
> .ASEmitterTokens;
> >>> +import
> >>>
> org.apache.royale.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
> >>>  import
> >>> org.apache.royale.compiler.internal.codegen.js.jx.BlockCloseEmitter;
> >>>  import
> >>> org.apache.royale.compiler.internal.codegen.js.jx.BlockOpenEmitter;
> >>>  import org.apache.royale.compiler.internal.codegen.js.jx.CatchEmitter;
> >>> @@ -914,7 +915,19 @@ public class JSEmitter extends ASEmitter
> implements
> >>> IJSEmitter
> >>>                 {
> >>>                         write(coercionStart);
> >>>          }
> >>> -        emitAssignedValue(assignedNode);
> >>> +               if
> >>> (project.getBuiltinType(BuiltinType.FUNCTION).equals(definition) &&
> >>> +                               assignedNode instanceof
> >>> MemberAccessExpressionNode) {
> >>> +                       write(JSGoogEmitterTokens.GOOG_BIND.getToken()
> +
> >>> +
> >>>  ASEmitterTokens.PAREN_OPEN.getToken()
> >>> +                       );
> >>> +                       emitAssignedValue(assignedNode);
> >>> +                       write(ASEmitterTokens.COMMA.getToken());
> >>> +                       MemberAccessExpressionNode maenode =
> >>> (MemberAccessExpressionNode)assignedNode;
> >>> +                       getWalker().walk(maenode.getLeftOperandNode());
> >>> +                       write(ASEmitterTokens.PAREN_CLOSE.getToken());
> >>> +               } else {
> >>> +                       emitAssignedValue(assignedNode);
> >>> +               }
> >>>                 if (coercionStart != null)
> >>>                 {
> >>>                         if (coercionEnd != null)
> >>>
> >>>
>
>

Reply via email to