<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Here's what I get when I run the app.swf directly:<div><br></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; ">TypeError: Error #1009: Cannot access a property or method of a null object reference.</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span class="Apple-tab-span" style="white-space:pre">        </span>at LzDelegate/register()</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span class="Apple-tab-span" style="white-space:pre">        </span>at $lzc$class_$m207/$m206()</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span class="Apple-tab-span" style="white-space:pre">        </span>at Function/<a href="http://adobe.com/AS3/2006/builtin::call()">http://adobe.com/AS3/2006/builtin::call()</a></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span class="Apple-tab-span" style="white-space:pre">        </span>at LzEvent/sendEvent()</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span class="Apple-tab-span" style="white-space:pre">        </span>at LzNode/__LZcallInit()</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span class="Apple-tab-span" style="white-space:pre">        </span>at LzCanvas/__LZcallInit()</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span class="Apple-tab-span" style="white-space:pre">        </span>at LzCanvas/__LZinstantiationDone()</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span class="Apple-tab-span" style="white-space:pre">        </span>at LzInstantiatorService/makeSomeViews()</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span class="Apple-tab-span" style="white-space:pre">        </span>at LzInstantiatorService/checkQ()</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span class="Apple-tab-span" style="white-space:pre">        </span>at Function/<a href="http://adobe.com/AS3/2006/builtin::call()">http://adobe.com/AS3/2006/builtin::call()</a></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span class="Apple-tab-span" style="white-space:pre">        </span>at LzEvent/sendEvent()</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span class="Apple-tab-span" style="white-space:pre">        </span>at LzIdleService/__idleupdate()</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span class="Apple-tab-span" style="white-space:pre">        </span>at LzIdleKernel$/__update()</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span class="Apple-tab-span" style="white-space:pre">        </span>at Function/<a href="http://adobe.com/AS3/2006/builtin::apply()">http://adobe.com/AS3/2006/builtin::apply()</a></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span class="Apple-tab-span" style="white-space:pre">        </span>at &lt;anonymous>()</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span class="Apple-tab-span" style="white-space:pre">        </span>at SetIntervalTimer/onTimer()</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span class="Apple-tab-span" style="white-space:pre">        </span>at flash.utils::Timer/_timerDispatch()</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span class="Apple-tab-span" style="white-space:pre">        </span>at flash.utils::Timer/tick()</div><div><font class="Apple-style-span" face="'Lucida Grande'"><br></font></div><div><font class="Apple-style-span" face="'Lucida Grande'">I guess this gets swallowed when running under the server. &nbsp;(Is it captured to</font></div><div><font class="Apple-style-span" face="'Lucida Grande'">a log, or would I see that if I ran in debug mode?)</font></div><div><font class="Apple-style-span" face="'Lucida Grande'"><br></font></div><div><font class="Apple-style-span" face="'Lucida Grande'">Without this changeset, LzDelegate.register() got translated to:</font></div><div><font class="Apple-style-span" face="'Lucida Grande'"><br></font></div><div><font class="Apple-style-span" face="'Lucida Grande'"><div>public function register (eventSender:LzEventable, eventName:String) {</div><div>var anEvent = eventSender[eventName];</div><div>var m = this.m;</div><div>if (m &amp;&amp; m.length != 1) {</div><div>var a = new Array(m.length);</div><div>this.m = function &nbsp;(ignore:*) {</div><div>return m.apply(this, a)</div><div>}};</div><div>if (!(anEvent is LzEvent)) {</div><div>anEvent = new LzEvent(eventSender, eventName, this)</div><div>} else {</div><div>anEvent.addDelegate(this)</div><div>};</div><div>this[this.lastevent++] = anEvent</div><div>}</div><div><br></div><div>With this change, we get this:</div><div><br></div></font></div><div><font class="Apple-style-span" face="'Lucida Grande'"><div>public function register ($1:LzEventable, $2:String) {</div><div>var $3 = $1[$2];</div><div>var m = this.m;</div><div>if (m &amp;&amp; m.length != 1) {</div><div>var a = new Array(m.length);</div><div>this.m = function &nbsp;($1:*) {</div><div>return m.apply(this, a)</div><div>}};</div><div>if (!($3 is LzEvent)) {</div><div>$3 = new LzEvent($1, $2, this)</div><div>} else {</div><div>$3.addDelegate(this)</div><div>};</div><div>this[this.lastevent++] = $3</div><div>}</div><div><br></div><div>I think that's okay. &nbsp;The function() closure reuses '$1', which actually</div><div>isn't an issue in this case since the arg is ignored, but I think it points</div><div>out a&nbsp;potential shadowing problem.</div><div><br></div><div>Also, Tucker mentioned that methods can have withThis turned off.</div><div>That might well fix the problem (getting rid of shadowing problems in other</div><div>places in the code), but I think I want to know for sure that's what it is.</div><div><br></div><div>Unless you all spot something here, I think I need to get into the debugger.</div><div>Henry, did you ever put together instructions on how to do that?</div><div><br></div><div>Thanks,</div><div><br></div><div>- Don</div><div><br></div></font></div><div><div>On Jul 17, 2008, at 10:16 AM, Henry Minsky wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>I can help debug swf9 tests, if you need. &nbsp;Just ping me if you would<br>like me to look at something that's failing.<br><br><br><br><br>On Thu, Jul 17, 2008 at 9:39 AM, Donald Anderson &lt;<a href="mailto:dda@ddanderson.com">dda@ddanderson.com</a>> wrote:<br><blockquote type="cite"><br></blockquote><blockquote type="cite">On Jul 17, 2008, at 9:10 AM, P T Withington wrote:<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Questions:<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">1) Do you need to copy default values for parameters, or is that not stored<br></blockquote><blockquote type="cite">on the parameter the way type and ellipsis is?<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">I think it already happens. &nbsp;&nbsp;Parameter names are ASTIdentifiers and<br></blockquote><blockquote type="cite">initializers are anything else (maybe ASTLiteral,<br></blockquote><blockquote type="cite">or an expression tree). &nbsp;This loop changes the ASTIdentifiers and preserves<br></blockquote><blockquote type="cite">the rest:<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;// Replace params<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;for (int i = 0, len = paramIds.length; i &lt; len; i++) {<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (paramIds[i] instanceof ASTIdentifier) {<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASTIdentifier oldParam = (ASTIdentifier)paramIds[i];<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleNode newParam = translateReference(oldParam).declare();<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;params.set(i, newParam);<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;}<br></blockquote><blockquote type="cite">But I'll find a way to test this.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">2) The tag compiler will emit #pragma withThis in both functions and<br></blockquote><blockquote type="cite">methods. &nbsp;The either the swf9 back-end should turn that into a no-op in a<br></blockquote><blockquote type="cite">method (as it is redundant), or we can change the tag compiler to _not_ emit<br></blockquote><blockquote type="cite">that in methods, but then the swf8 and dhtml back-ends will have to<br></blockquote><blockquote type="cite">automatically insert it for methods. &nbsp;I believe this will simply be an<br></blockquote><blockquote type="cite">efficiency not a correctness issue. &nbsp;If you want to defer, please file a<br></blockquote><blockquote type="cite">separate bug. &nbsp;The only way I know to test this would be to inspect the<br></blockquote><blockquote type="cite">generated code.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Should be easy enough. &nbsp;We are already tracking when we are in a declared<br></blockquote><blockquote type="cite">class and also when we are in a declared method.<br></blockquote><blockquote type="cite">Is that enough? &nbsp;Do any closures (which might have #pragma withThis) occur<br></blockquote><blockquote type="cite">within a Class.Method body?<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">3) I'd like to make sure at least _one_ of the known working swf9 tests<br></blockquote><blockquote type="cite">works after this change. &nbsp;If hello is the test, we need to get that working<br></blockquote><blockquote type="cite">again first.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Agreed. &nbsp;Max got lzpix working, and it does not yet work with this<br></blockquote><blockquote type="cite">changeset, so I have some work to do to debug that.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Otherwise, approved.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Thanks, I'll incorporate these and if the changes after debugging are<br></blockquote><blockquote type="cite">non-trivial, I will have you review again.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">On 2008-07-16, at 23:10EDT, Donald Anderson wrote:<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Change 20080716-dda-V by <a href="mailto:dda@97.sub-75-192-214.myvzw.com">dda@97.sub-75-192-214.myvzw.com</a> on 2008-07-16<br></blockquote><blockquote type="cite">21:26:41 EDT<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> &nbsp;in /Users/dda/laszlo/src/svn/openlaszlo/trunk-a<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> &nbsp;for <a href="http://svn.openlaszlo.org/openlaszlo/trunk">http://svn.openlaszlo.org/openlaszlo/trunk</a><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Summary: Fix remapLocals and withThis in SWF9<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">New Features:<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Bugs Fixed: LPP-6637<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Technical Reviewer: ptw (pending)<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">QA Reviewer: (pending)<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Doc Reviewer: (pending)<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Documentation:<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Release Notes:<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Details:<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> &nbsp;The SWF9 code generator has had a long standing bug that prevented<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> &nbsp;the withThis pragma from working. &nbsp;This change set fixes the fundamental<br></blockquote><blockquote type="cite">bug and<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> &nbsp;other smaller problems in order to allow withThis to function properly.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> &nbsp;withThis is necessary for the new approach to handling states.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> &nbsp;The code that disables the withThis from being operation has been removed.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> &nbsp;The bug was an extra visit of the function - the second visit sees some<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> &nbsp;artifacts left by the first visit, and gets confused. &nbsp;This has been<br></blockquote><blockquote type="cite">fixed.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> &nbsp;Mixins in SWF9 are handled by keeping the AST for the mixin and visiting<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> &nbsp;it whenever it is mixed in. &nbsp;The visited AST was not a complete copy,<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> &nbsp;only a shallow copy, and this exposed the same sort of extra visit bug.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> &nbsp;A deep copy function for SimpleNode (the basis for AST) was added.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> &nbsp;This required minor changes to all existing handcoded AST classes to<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> &nbsp;support deep copy. &nbsp;Fortunately there are not many of these classes,<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> &nbsp;but if we add any, we'll need to implement the deepCopy() function.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> &nbsp;Remapped formal arguments, (e.g. function foo(a, b) => function foo($1,<br></blockquote><blockquote type="cite">$2)),<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> &nbsp;must retain any ellipsis from the original declaration (e.g. function<br></blockquote><blockquote type="cite">foo(a, ...b) => function foo($1, ...$2))<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> &nbsp;I am also retaining type info, (e.g. function foo(a:*, b) => function<br></blockquote><blockquote type="cite">foo($1:*, $2))<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Tests:<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> Passes test case given by ptw in LPP-6637.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> Builds LFC without errors with withThis code enabled.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> Regression tests: smokecheck for swf8/dhtml.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> Unfortunately SWF9 hello seems broken (not due to this change),<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> so unable to test that.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Files:<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">M &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WEB-INF/lps/server/src/org/openlaszlo/sc/JavascriptGenerator.java<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">M &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WEB-INF/lps/server/src/org/openlaszlo/sc/SWF9Generator.java<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">M &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WEB-INF/lps/server/src/org/openlaszlo/sc/Compiler.java<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">M &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WEB-INF/lps/server/sc/src/org/openlaszlo/sc/parser/SimpleNode.java<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">M<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;WEB-INF/lps/server/sc/src/org/openlaszlo/sc/parser/ASTModifiedDefinition.java<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">M &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WEB-INF/lps/server/sc/src/org/openlaszlo/sc/parser/ASTOperator.java<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">M &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WEB-INF/lps/server/sc/src/org/openlaszlo/sc/parser/ASTLiteral.java<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">M<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;WEB-INF/lps/server/sc/src/org/openlaszlo/sc/parser/ASTFormalParameterList.java<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">M &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WEB-INF/lps/server/sc/src/org/openlaszlo/sc/parser/ASTIdentifier.java<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">M<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;WEB-INF/lps/server/sc/src/org/openlaszlo/sc/parser/ASTPassthroughDirective.java<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Changeset: <a href="http://svn.openlaszlo.org/openlaszlo/patches/20080716-dda-V.tar">http://svn.openlaszlo.org/openlaszlo/patches/20080716-dda-V.tar</a><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">--<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Don Anderson<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Java/C/C++, Berkeley DB, systems consultant<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">voice: 617-547-7881<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">email: <a href="mailto:dda@ddanderson.com">dda@ddanderson.com</a><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">www: <a href="http://www.ddanderson.com">http://www.ddanderson.com</a><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">--<br></blockquote><blockquote type="cite">Don Anderson<br></blockquote><blockquote type="cite">Java/C/C++, Berkeley DB, systems consultant<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">voice: 617-547-7881<br></blockquote><blockquote type="cite">email: <a href="mailto:dda@ddanderson.com">dda@ddanderson.com</a><br></blockquote><blockquote type="cite">www: <a href="http://www.ddanderson.com">http://www.ddanderson.com</a><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><br><br><br>-- <br>Henry Minsky<br>Software Architect<br><a href="mailto:hminsky@laszlosystems.com">hminsky@laszlosystems.com</a><br></div></blockquote></div><br><div> <span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br class="Apple-interchange-newline">--</div><div><br>Don Anderson<br>Java/C/C++, Berkeley DB, systems consultant<br><br>voice: 617-547-7881<br>email:&nbsp;<a href="mailto:dda@ddanderson.com">dda@ddanderson.com</a><br>www:&nbsp;<a href="http://www.ddanderson.com/">http://www.ddanderson.com</a><br></div></div></span></span><br class="Apple-interchange-newline"></div></span></div></span><br class="Apple-interchange-newline"> </div><br></div></body></html>