We should be specifying implements, because that is how you test for instances of your mixin, e.g. 'myview is boxmodel'.

I really seem to have take some shortcut with the LZX mixins. Ideally they would translate directly to JS, and the existing JS mechanism would "just work", but there is the issue of merging children (which we don't have in LFC classes) and of keeping the schema happy.

If you really want to do this right, we should solve those problems, and not be making interstitials in the tag compiler at all.

On Dec 5, 2009, at 20:51, Henry Minsky <[email protected]> wrote:

But in this case is there any need to emit this interface declaration at all, since we don't emit any code that for our interstitial classes that actually say 'implements' for the mixins it uses? Or maybe we should be doing that?

On Sat, Dec 5, 2009 at 2:03 PM, P T Withington <[email protected]> wrote:
Well, dynamic does make sense on a mixin (it is saying the class that mixes me in must be dynamic). So I think the bug now lies in the swf9 back-end, where it should drop the dynamic declaration when it generates the interface from the mixin.

On 2009-12-05, at 13:48, Henry Minsky wrote:

> Oh I see it's complaining that 'dynamic' can't be applied to interface. I
> guess that makes sense...
>
>
> org.openlaszlo.sc.CompilerError: line unknown: Error: Interface attribute
> dynamic is invalid, in line: dynamic interface $lzc$class_boxmodel {
>
> On Sat, Dec 5, 2009 at 11:24 AM, P T Withington <[email protected]> wrote:
>
>> I don't see what is malformed about the interface declaration. What is the >> Flex compiler complaining about? We know it handles mixins declared in JS
>> in the LFC.
>>
>> On 2009-12-05, at 09:23, Henry Minsky wrote:
>>
>>> OK, well, if I output just
>>>
>>> "dynamic mixin foo { }" then the swf10 compiler feels like it has to make
>> an
>>> interface for it, and
>>> the code it puts out isn't
>>> really well formed, so it barfs.
>>>
>>> e.g., if I have a declared mixin
>>>
>>>  <mixin name="boxmodel">
>>>      <attribute name="margin" type="number" value="0"/>
>>>
>>>      <setter name="margin" args="margin">
>>>          Debug.warn('set_margin', margin, this);
>>>      </setter>
>>>  </mixin>
>>>
>>> that eventually turns into a ScriptClass which is
>>>
>>> mixin $lzc$class_boxmodel
>>> and that gets converted by the swf10 backend into a .as file
>>>
>>> package {
>>> dynamic interface $lzc$class_boxmodel {
>>> }
>>> }
>>>
>>> So do we need to stop the swf10 generator from outputting anything at all
>>> for the mixin case?
>>>
>>>
>>> On Sat, Dec 5, 2009 at 5:51 AM, P T Withington <[email protected]> wrote:
>>>
>>>> Right now we don't support mixins extending anything. See what happens
>> if
>>>> you suppress the 'extends' clause when you output a mixin?
>>>>
>>>> On Dec 5, 2009, at 1:11, Henry Minsky <[email protected]> wrote:
>>>>
>>>> I need some help in hacking the script compiler back end to understand
>>>> "mixin".
>>>>
>>>> Currently we're passing the follwing values for 'kind' from ClassModel,
>>>>
>>>> mixin
>>>> class
>>>> instance class
>>>> anonymous
>>>>
>>>> If I just emit "class" for everything except "mixin", something in the
>>>> DHTML backend stil
>>>> chokes on "mixin":
>>>>
>>>> "dynamic mixin $lzc$class_testmixin extends LzView "
>>>>
>>>> compiles to something which causes a runtime error.
>>>>
>>>> [exec] js: "lps/includes/lfc/LFCdhtml-debug.js", line 298: uncaught >>>> JavaScript runtime exception: TypeError: Cannot find function make in
>> object
>>>>
>>>>    [exec] function () {
>>>>    [exec]     this.constructor = arguments.callee;
>>>>    [exec]     if (this.$lzsc$initialize !==
>>>> Instance.prototype.$lzsc$initialize) {
>>>>    [exec]         this.$lzsc$initialize.apply(this, arguments);
>>>>    [exec]     }
>>>>    [exec] }
>>>>    [exec] .
>>>>    [exec]     at lps/includes/lfc/LFCdhtml-debug.js:298
>>>>    [exec]     at test/lztest/lztest-mixins.js:153
>>>>    [exec]     at tmp/test_lztest_lztest-mixins.js:99
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Fri, Dec 4, 2009 at 6:03 PM, P T Withington < <[email protected]
>>>
>>>> [email protected]> wrote:
>>>>
>>>>> On 2009-12-04, at 17:47, Henry Minsky wrote:
>>>>>
>>>>>> On Fri, Dec 4, 2009 at 5:41 PM, P T Withington <<
>> [email protected]>
>>>>> [email protected]>wrote:
>>>>>>
>>>>>>> I don't see in ScriptClass that it is using `kind` in toString. Is
>> the
>>>>>>> changeset up to date?
>>>>>>>
>>>>>>
>>>>>> So for the ScriptClass.toString method , should I only output a
>>>>> non-empty
>>>>>> string if it's a "class" kind  , or just pass
>>>>>> along any class/mixin/interface to the script compiler
>>>>>
>>>>> Where toString has the literal "class" use the variable `kind` instead,
>>>>> and let the script compiler sort it out.
>>>>>
>>>>> "dynamic class" + ...
>>>>>
>>>>> =>
>>>>>
>>>>> "dynamic " + kind + ...
>>>>>
>>>>>
>>>>>>
>>>>>>>
>>>>>>> It seems that you should not need to make a copy of the element
>>>>> children in
>>>>>>> ViewCompiler (nor in ClassCompiler), since you're not munging the DOM
>>>>> in
>>>>>>> ClassModel any more.
>>>>>>>
>>>>>>
>>>>>> oh yeah..
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> So, not quite approved yet...
>>>>>>>
>>>>>>> On 2009-12-04, at 17:31, Henry Minsky wrote:
>>>>>>>
>>>>>>>>
>>>>>>>> really passes smokecheck now, in swf8,swf10, and dhtml
>>>>>>>>
>>>>>>>>
>>>>>>>> Change 20091204-hqm-g by [email protected] on 2009-12-04 10:17:09
>>>>> EST
>>>>>>>> in /Users/hqm/openlaszlo/trunk6
>>>>>>>> for <http://svn.openlaszlo.org/openlaszlo/trunk>
>>>>> http://svn.openlaszlo.org/openlaszlo/trunk
>>>>>>>>
>>>>>>>> Summary: fix for instance-mixin fails for non-top-level instance
>>>>>>>>
>>>>>>>> New Features:
>>>>>>>>
>>>>>>>> Bugs Fixed: LPP-8654  instance-mixin fails for non-top-level
>> instance
>>>>>>>>
>>>>>>>> Technical Reviewer: ptw
>>>>>>>> QA Reviewer: max
>>>>>>>> Doc Reviewer: (pending)
>>>>>>>>
>>>>>>>> Documentation:
>>>>>>>>
>>>>>>>> Release Notes:
>>>>>>>>
>>>>>>>> Overview:
>>>>>>>>
>>>>>>>>
>>>>>>>> Details:
>>>>>>>>
>>>>>>>> + ViewCompiler: updateSchema recursively map over child elements
>>>>>>>>
>>>>>>>> + ClassModel: remove code in ClassModel that inserted a classdef
>> into
>>>>> the
>>>>>>> DOM.
>>>>>>>>
>>>>>>>> + ScriptClass: added a "kind" field
>>>>>>>>
>>>>>>>> + updated lztest smoke check for mixins to have non- toplevel node
>> with
>>>>>>> mixin
>>>>>>>>
>>>>>>>> Tests:
>>>>>>>>
>>>>>>>> test case from bug
>>>>>>>> test/mixins.lzx
>>>>>>>> smokecheck
>>>>>>>> test/smoke/mixin-simple.lzx
>>>>>>>>
>>>>>>>>
>>>>>>>> Files:
>>>>>>>> M       test/lztest/lztest-mixins.lzx
>>>>>>>> M WEB-INF/lps/server/src/org/openlaszlo/sc/ ScriptClass.java
>>>>>>>> M
>>>>> WEB-INF/lps/server/src/org/openlaszlo/compiler/ViewCompiler.java
>>>>>>>> M
>> WEB-INF/lps/server/src/org/openlaszlo/compiler/ClassModel.java
>>>>>>>>
>>>>>>>>
>>>>>>>> Changeset:
>>>>>>> <http://svn.openlaszlo.org/openlaszlo/patches/20091204-hqm-g.tar >
>>>>> http://svn.openlaszlo.org/openlaszlo/patches/20091204-hqm-g.tar
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Laszlo-reviews mailing list
>>>>>>>> <[email protected]>
>> [email protected]
>>>>>>>> <http://www.openlaszlo.org/mailman/listinfo/laszlo-reviews>
>>>>> http://www.openlaszlo.org/mailman/listinfo/laszlo-reviews
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Henry Minsky
>>>>>> Software Architect
>>>>>> <[email protected]>[email protected]
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Henry Minsky
>>>> Software Architect
>>>> <[email protected]>[email protected]
>>>>
>>>>
>>>> _______________________________________________
>>>> Laszlo-reviews mailing list
>>>> [email protected]
>>>> http://www.openlaszlo.org/mailman/listinfo/laszlo-reviews
>>>>
>>>>
>>>
>>>
>>> --
>>> Henry Minsky
>>> Software Architect
>>> [email protected]
>>
>>
>
>
> --
> Henry Minsky
> Software Architect
> [email protected]




--
Henry Minsky
Software Architect
[email protected]


_______________________________________________
Laszlo-reviews mailing list
[email protected]
http://www.openlaszlo.org/mailman/listinfo/laszlo-reviews

Reply via email to