On Feb 20, 2008, at 5:05 AM, P T Withington wrote:
On 2008-02-19, at 19:00 EST, Donald Anderson wrote:
Henry,
I have the constraint function generator mostly ready.
First question - do we need an option to compute meta references?
That's apparently a compile time option, but I don't see when it's
turned on.
That was a failed experiment. Correct, but determined to be too
slow. For now, we are just keeping the code as a reference
implementation, turned off. It is trying to solve the problem that
if a constraint says `a.b.c`, we only listen for `c` changing in
`a.b`; if `b` changes in `a`, we won't notice.
Okay, I'll leave that code untouched.
In my current version, I am accepting as arguments 1) the name of
the original function,
and 2) the source for the function, for the moment I expect the
source
to look just like what you are now generating.
I am returning the source of a function with the name
XXX_dependencies.
I agree with you and Henry that it will be more useful going forward
if you accept an arbitrary expression (as a string) and return the
expression that computes the dependencies for that (also as a
string). Thus, to retrofit your code to the current "pattern" you
would analyze the expression that is the second argument to
setAttribute in the current constraint functions.
Are you doing this in RingDing? I think that would be the best
place, since then we can test against the known-working test cases.
At the moment I'm in devildog, but there's nothing that's branch-
specific at this point.
As for testing, if you want me to retrofit the current code in
compiler/NodeModel.java to use this
directly, well that could be done and tested in either branch, right?
The branch doesn't matter to me - but whether I retrofit (or merely
provide
a new internal API) does...
For example, input source is this: (culled from where this string
is made in NodeModel.java):
===
function $base$2Fbasefocusview$2Elzx_282_41_x_always () {
#pragma 'constraintFunction'
#pragma 'withThis'
this.setAttribute("x",
#beginAttribute
#file base/basefocusview.lzx
#line 282
-classroot.offset
#endAttribute
)}
===
Output source is currently:
===
/* -*- file: Compiler.substitute#-1.1 -*- */
function $base$2Fbasefocusview$2Elzx_282_41_x_always_dependencies
() {
#pragma "warnUndefinedReferences=false";
with (this) {
return [classroot, "offset"]
}}
===
I'm thinking instead I could accept simply '-classroot.offset'
and return just the text of the statements:
with (this) {
return [classroot, "offset"]
}
I would leave out the `with (this)` and have that be an implicit
burden on the callee. (Especially because that is implicit in JS2
method bodies).
Will do.
Then you could name the function whatever you want or
use it as a function expression. Or I could return just the
array (as an expression) like '[classroot, "offset"]' . It depends
on how you plan to use it, vs. how much of the details you need to
know.
- Don
--
Don Anderson
Java/C/C++, Berkeley DB, systems consultant
voice: 617-547-7881
email: [EMAIL PROTECTED]
www: http://www.ddanderson.com
--
Don Anderson
Java/C/C++, Berkeley DB, systems consultant
voice: 617-547-7881
email: [EMAIL PROTECTED]
www: http://www.ddanderson.com