Subject: Re: Jade Q: ProcessContext::processNode From: James Clark <jjc@xxxxxxxxxx> Date: Mon, 20 Oct 1997 17:41:19 +0700 |
Frank Christoph wrote: > > In Jade, in the body of ProcessContext::processNode, there is a fragment of > code that gets invoked after the style engine finds a construction rule matching > a grove node: > > if (sosofoObj) // 83 case #1 > sosofoObj->process(*this); // 84 > else { // 85 > ELObj *obj = vm().eval(insn.pointer()); // 86 > if (vm_.interp->isError(obj)) { // 87 case #2 > if (processingMode->name().size() == 0) // 88 > processChildren(processingMode); // 89 > } // 90 > else { // 91 case #3 > ELObjDynamicRoot protect(*vm_.interp, obj); // 92 > ((SosofoObj *)obj)->process(*this); // 93 > } // 94 > } // 95 > > I've added comments indicating the three main cases here and numbered the lines. > > When a construction rule is invoked, the result of executing the body of the > rule will be either a sosofo object or it will foul up and produce an > error. I take it that the former corresponds to case #3, and the latter to > case #2. But case #1 looks like the match returns a sosofo without ever > executing any style language code; when does this occur? When it can optimize the expression into a constant sosofo (I don't think it actually ever does currently). > Also, what is > the significance of the condition on line 88, i.e., why process the children > only when the processing mode's name is null? Does this correspond to the > top-level mode? Yes. It's just an error-recovery heuristic. James DSSSList info and archive: http://www.mulberrytech.com/dsssl/dssslist
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Jade Q: ProcessContext::processNode, Frank Christoph | Thread | AIX, g++, collect2? & JAde, Honza Beranek |
Re: DSSSL capabilities - was RE: TO, Sebastian Rahtz | Date | Re: DSSSL capabilities - was RE: TO, Dave Love |
Month |