Jade Q: ProcessContext::processNode

Subject: Jade Q: ProcessContext::processNode
From: christo@xxxxxxxxxxxxxxxxxx (Frank Christoph)
Date: Mon, 20 Oct 1997 17:06:17 +0900
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?  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?

--FC

 DSSSList info and archive:  http://www.mulberrytech.com/dsssl/dssslist


Current Thread