I'm going to add this check and then commit the change:

if (!ScriptCompiler.isIdentifier(when)) {
  throw new CompilationError(
"'when' attribute for passthrough element must be a valid javascript identifier",
    element);
}


On 5/18/2010 5:44 PM, André Bargull wrote:
One think we could (should?) do, is to check whether the value is a valid javascript identifier. Otherwise people could write <passthrough when="(function () {return false})()" > or any other complex expression.


On 5/18/2010 4:31 PM, P T Withington wrote:
Ok. Henry, can you do what André proposes? This seems like the best plan.

I am pretty sure that if you end up with a back-end compile where the conditional is not defined that the back-end will signal an error; but I think that is the best we can do (since the tag compiler has to permit compiling to runtime-neutral .lzo, which has no runtime specification).

On 2010-05-18, at 10:22, André Bargull wrote:

I'm not sure whether it's possible test for valid compile-time conditionals at parse time. For example think of custom conditionals which are only used/available when compiling the actual application.
So, I'll only change two things:
- rename "runtime" to "when"
- remove prepending the "when" value with '$' in ClassModel.java, this means you need to write<passthrough when="$as3"> instead of<passthrough when="as3">. This makes<passthrough>'s "when" compatible with<switch>'s "property" attribute.



On 5/15/2010 3:31 PM, P T Withington wrote:
Ok, you convinced me. Reopen the bug and lets change it to `when="..."`. As a bonus, you can verify that the when condition is a valid compile-time conditional, but I'm pretty sure the script compiler will complain if it is not.

On 2010-05-15, at 09:13, André Bargull wrote:

But valid (= currently supported) runtimes are only 'swf8', 'swf9', 'swf10' and 'dhtml'. That means 'as3' is not a valid runtime identifier, but I think we still want to have a pass through for both, swf9 and swf10, to avoid duplicate code. (I know I'm a bit nit-picking right now, but this is my full intention, because from the user's point of view the current rationale might be confusing.)


On 5/15/2010 3:00 PM, P T Withington wrote:
In the case of passthrough, where its intent is to "pass through" to a particular target runtime, the runtime argument seems most appropriate to me. I suppose we should add some sanity checking that the runtime argument is a valid runtime.

If you really need a passthrough conditional to other properties, you can do so in a<script> tag.

---

The problem we are trying to solve here is that<switch> cannot be used in a binary library (because its semantics are that it is evaluated at parse time). Another approach would be to change switch to have an 'evaluation time' property, but that seemed like generality we didn't need.

On 2010-05-15, at 08:10, André Bargull wrote:


We had first:
<switch>
<when runtime="swf10">
<passthrough>
      import flash.utils.*;
</passthrough>
</when>
</switch>

"runtime" was only allowed to be: 'swf7', 'swf8', 'swf9', 'swf10' or 'dhtml'


The first form was deprecated in favor of:
<switch>
<when property="$swf10">
<passthrough>
      import flash.utils.*;
</passthrough>
</when>
</switch>

"property" can be any of the compile time constants: '$swf7', '$swf8', '$swf9', '$swf10', '$dhtml', '$as3', '$as2', '$debug' (left out some unused constants)


And now we're back with "runtime", although "runtime" is just any string which will be transformed to the compile time constants from above (by prepending "$" to the string).

<passthrough runtime="swf10">
  import flash.utils.*;
</passthrough>

But also possible:
<passthrough runtime="as3">
  import flash.utils.*;
</passthrough>

or:
<passthrough runtime="debug">
  import flash.utils.*;
</passthrough>


So, maybe<passthrough>'s new "runtime" attribute should rather be "property" like in<when>?



On 5/14/2010 10:46 PM, P T Withington wrote:

Approved!

On 2010-05-13, at 17:19, Henry Minsky wrote:



Change 20100513-hqm-p by [email protected] on 2010-05-13 17:17:23 EDT
    in /Users/hqm/openlaszlo/trunk1
    for http://svn.openlaszlo.org/openlaszlo/trunk

Summary:<passthrough>     should take a `runtime="..."` property

New Features:

Bugs Fixed: LPP-8995

Technical Reviewer: ptw
QA Reviewer: (pending)
Doc Reviewer: (pending)

Documentation:

Release Notes:

Overview:


Details:


Tests:

test case below, passthru should disappear in DHTML output:
<canvas width="100%" height="80%">
<debug  fontsize="12"/>

<class name="foo">
<passthrough runtime="swf10">
      import flash.net.*;
</passthrough>
<method name="foo">
      Debug.info('foobar');
</method>

</class>


</canvas>


Files:
M WEB-INF/lps/server/src/org/openlaszlo/compiler/NodeModel.java M WEB-INF/lps/server/src/org/openlaszlo/compiler/ClassModel.java

Changeset: http://svn.openlaszlo.org/openlaszlo/patches/20100513-hqm-p.tar










Reply via email to