Both approaches work for me, so approved by QA!
On 5/14/2010 11:46 PM, Henry Minsky wrote:
OK I used that approach, and checked it in. On Fri, May 14, 2010 at 4:42 PM, P T Withington <[email protected] <mailto:[email protected]>> wrote: I think this is a more straightforward way to make this check: Index: SWF9Generator.java =================================================================== --- SWF9Generator.java (revision 16354) +++ SWF9Generator.java (working copy) @@ -503,18 +503,7 @@ if (mixin == null) { throw new CompilerError("Missing definition for mixin: " + ref.mixinname); } - // We need the actual super class because we need - // a trampoline to any constructor that it has. - SimpleNode superClassConst = null; - - if (ref.realsuper != null) { - superClassConst = (SimpleNode)classConstructors.get(ref.realsuper); - - // If superClass is null, then we don't know anything about - // it: it may be in an included library, etc. For that case, - // we currently require the caller to provide a constructor. - } - result.set(result.size(), createInterstitial(mixin, isname, ref, superClassConst)); + result.set(result.size(), createInterstitial(mixin, isname, ref)); } return result; } @@ -644,10 +633,9 @@ * @param mixin mixin that this interstitial implements * @param isname name for the interstitial * @param mixref the reference that caused this class to be created - * @param supernode the 'real' superclass, or null if none * @return the new interstitial class AST */ - SimpleNode createInterstitial(SimpleNode mixin, String isname, MixinReference mixref, SimpleNode supernode) + SimpleNode createInterstitial(SimpleNode mixin, String isname, MixinReference mixref) { // At this point, the mixin has already been visited. // We just need to grab its contents and make a fresh class @@ -667,22 +655,22 @@ assert mixinchildren[3] instanceof ASTEmptyExpression; assert mixinchildren[4] instanceof ASTEmptyExpression; // The interstitial has no mixins, but does implement the mixin - ischildren[3] = new ASTEmptyExpression(0); + ischildren[3] = new ASTEmptyExpression(0); ischildren[4] = newIdentifier(mixref.mixinname); System.arraycopy(mixinchildren, 5, ischildren, 5, origlen - 5); if (mixinconstructor == null) { - if (supernode == null && mixref.realsuper != null) { - + // We need the actual super class because we need + // a trampoline to any constructor that it has. + if (!classConstructors.containsKey(mixref.realsuper)) { // For an unknown superclass, we require the mixin programmer // to provide a constructor that handles all the cases it // might be used. This is a temporary measure - we currently // have no knowledge of superclasses that live in other libraries. - throw new CompilerError("Superclass " + mixref.realsuper + " used by mixin not defined, and no constructor supplied for mixin: " + mixref.mixinname); } - ischildren[origlen] = createInterstitialConstructor(isname, supernode); + ischildren[origlen] = createInterstitialConstructor(isname, classConstructors.get(mixref.realsuper)); } - + isnode.setChildren(ischildren); return isnode; On 2010-05-14, at 15:58, Henry Minsky wrote: > Change 20100514-hqm-R by [email protected] on 2010-05-14 15:53:55 EDT > in /Users/hqm/openlaszlo/trunk > for http://svn.openlaszlo.org/openlaszlo/trunk > > Summary: fix for mixins in swf10 script backend > > New Features: > > Bugs Fixed: LPP-8999 > > Technical Reviewer: ptw > QA Reviewer: andre > Doc Reviewer: (pending) > > Documentation: > > Release Notes: > > Overview: > > > Details: > > In the new memory-saving changes, SWF9Generator.createInterstitials is being passed only the AST for the superclass constructor method > itself, if it exists, or null if there is no explicitly defined constructor. It is > not being passed the entire superclass AST tree like it used to be. > > Since we don't actually have a pointer to the superclass def anymore, > the check for the existence of the superclass can now done by checking > if the classConstructors table contains an entry (possibly null) for > the classname or not. > > Tests: > > in swf10 these compile without error > test case from bug report > smokecheck > test/drawing/drawing.lzx > > Files: > M WEB-INF/lps/server/src/org/openlaszlo/sc/SWF9Generator.java > > Changeset: http://svn.openlaszlo.org/openlaszlo/patches/20100514-hqm-R.tar > -- Henry Minsky Software Architect [email protected] <mailto:[email protected]>
