Thanks, Mike! EdB
On Thu, Nov 29, 2012 at 4:30 PM, Michael Schmalle <apa...@teotigraphix.com> wrote: > Hi, > > For those asking question about "where to alter" code, it's not pretty but I > think I know exactly what is going on now. > > If you can understand below, you will now have some insight to where and how > the JS code actually gets created. > > > ! Call the compiler load config compile(). > > > JSGenerator.generate() - creates the package, class, member traits > > - DirectiveProcessor.processNode(IFileNode) > - recusrsivly fill traits > > ----------------------------------------------------- > > Basically a snippet of the recursion; > > DirectiveProcessor.processNode(IFileNode) > - declarePackage(PackageNode) > - emitter.visitPackage(packageName) > - data.registerPackage(packageName) > - super.declarePackage(PackageNode) > - DirectiveProcessor.traverse(p.getScopedNode()) <- ClassNode (class > {}) > - for each ClassNode.getChild(i) > - processNode(ScopedBlockNode) > - JSGlobalDirectiveProcessor.declareClass(ClassNode) > - verifyClassModifiers(ClassNode) > - skins > - JSClassDirectiveProcessor cp = > backend.createClassDirectiveProcessor() > - cp.traverse(ClassNode.getScopedNode()) <- TypeScope > - for each TypeScope.getChild(i) > - processNode(TypeScope) > - > JSGlobalDirectiveProcessor.declareFunction(FunctionNode) > > > -------------------------------------------------------- > > !!!! > JavaScript source code creation after class traits have been traversed and > created; > > > JSEmiter.emit() > - emitClass(EmitterClassVisitor) > - IClassDefinition = getDefinition(ii.name) > - write class JSDoc > > > > - JSEmitter.emitClass() > - Line: 3267 - 3269 is What creates a class > - "MainCode=adobe.extend("MainCode",Object,{ ... });" > > > > - JSEmitter.emitInstanceTraits() is then called to write out the class > traits > - emitTraits() is then called to do the specific if the closure compiler > flag is not set > 1. emitCtor() emit constructor > - emit comma > 2. emit all variables before methods > - assembles the code "MainCode.foo" > - warns if there is a private namespace collision > - > 3. emit all methods other than constructor > - emit ",\n" > - emitMethod() > - emitJSDocForMethod() > - write("\tget_baz") > - write(" : ") <- assignmentOp > - write("function(") > - emitParameters(methodInfo) > - write("baz") > - write(")") > - if (returnType != null) > - write(JSDoc for return type) > - if interface method > - write(" {};\n") > - else > - write("\n") > - write(" {") > - write("\n") > - emitMethodBody() > ... you get the drift > - write(" }") > > - After all traits are written, control flow goes back to > JSEmitter.emitClass() line 3269 > - write("\n});\n\n") // end class > - add _CLASS member to instance > - add JSDoc for prototype._CLASS > - write("MainCode.prototype._CLASS = MainCode;\n") > > It will then go onto > - emitClassInfo() > - emitNamespaceInfo() > - emitJSONInfo() > > if (JSSharedData.JS_FRAMEWORK_NAME) > - emitFrameworkInit(); > > It will then finally emit register class > - "adobe.classes.MainCode=MainCode;" > > --------------- > MainCode._PACKAGE=adobe.globals;MainCode._NAME="MainCode"; > MainCode._FULLNAME="MainCode"; > MainCode._SUPER=Object; > MainCode._NAMESPACES={"foo::2":!0,"bar::7:MainCode":!0,"baz::2":!0,"baz::2":!0}; > adobe.classes.MainCode=MainCode; > --------------- > > Mike > > > > > > -- > Michael Schmalle - Teoti Graphix, LLC > http://www.teotigraphix.com > http://blog.teotigraphix.com > -- Ix Multimedia Software Jan Luykenstraat 27 3521 VB Utrecht T. 06-51952295 I. www.ixsoftware.nl