 with a label",
    $propdoc: {
        label: "[AST_Label] a label definition"
    },
    _walk: function(visitor) {
        return visitor._visit(this, function(){
            this.label._walk(visitor);
            this.body._walk(visitor);
        });
    }
}, AST_StatementWithBody);

var AST_IterationStatement = DEFNODE("IterationStatement", null, {
    $documentation: "Internal class.  All loops inherit from it."
}, AST_StatementWithBody);

var AST_DWLoop = DEFNODE("DWLoop", "condition", {
    $documentation: "Base class for do/while statements",
    $propdoc: {
        condition: "[AST_Node] the loop condition.  Should not be instanceof AST_Statement"
    }
}, AST_IterationStatement);

var AST_Do = DEFNODE("Do", null, {
    $documentation: "A `do` statement",
    _walk: function(visitor) {
        return visitor._visit(this, function(){
            this.body._walk(visitor);
            this.condition._walk(visitor);
        });
    }
}, AST_DWLoop);

var AST_While = DEFNODE("While", null, {
    $documentation: "A `while` statement",
    _walk: function(visitor) {
        return visitor._visit(this, function(){
            this.condition._walk(visitor);
            this.body._walk(visitor);
        });
    }
}, AST_DWLoop);

var AST_For = DEFNODE("For", "init condition step", {
    $documentation: "A `for` statement",
    $propdoc: {
        init: "[AST_Node?] the `for` initialization code, or null if empty",
        condition: "[AST_Node?] the `for` termination clause, or null if empty",
        step: "[AST_Node?] the `for` update clause, or null if empty"
    },
    _walk: function(visitor) {
        return visitor._visit(this, function(){
            if (this.init) this.init._walk(visitor
with a label ", 
     $ propdoc: { 
         label: " [ AST_Label ] a label definition " 
     }, 
     _ walk: function(visitor) { 
         return visitor._visit(this, function () { 
             this.label._walk(visitor); 
             this.body._walk(visitor); 
         }); 
     } 
 }, AST_StatementWithBody); 

 var AST_IterationStatement = DEFNODE("IterationStatement ", null, { 
     $ software documentation: " inner class.   All loops inherit from it. " 
 }, AST_StatementWithBody); 

 var AST_DWLoop = DEFNODE("DWLoop ", " condition ", { 
     $ software documentation: " Base course for do / while statements ", 
     $ propdoc: { 
         condition: " [ AST_Node ] the closed circuit circumstance.   Should not be instanceof AST_Statement " 
     } 
 }, AST_IterationStatement); 

 var AST_Do = DEFNODE("Do ", null, { 
     $ documentation: " A 'do 'statement ", 
     _ walk: function(visitor) { 
         return visitor._visit(this, function () { 
             this.body._walk(visitor); 
             this.condition._walk(visitor); 
         }); 
     } 
 }, AST_DWLoop); 

 volt-ampere AST_While = DEFNODE("While ", null, { 
     $ documentation: " A 'while 'statement ", 
     _ walk: function(visitor) { 
         return visitor._visit(this, affair () { 
             this.condition._walk(visitor); 
             this.body._walk(visitor); 
         }); 
     } 
 }, AST_DWLoop); 

 var AST_For = DEFNODE("For ", " init condition step ", { 
     $ documentation: " A 'for 'statement ", 
     $ propdoc: { 
         init: " [ AST_Node? ] the 'for 'low-level formatting code, or null if empty ", 
         condition: " [ AST_Node? ] the 'for 'termination clause, or null if empty ", 
         footstep: " [ AST_Node? ] the 'for 'update clause, or null if empty " 
     }, 
     _ walk: function(visitor) { 
         return visitor._visit(this, affair () { 
             if (this.init) this.init._walk(visitor
 wihh a label",
    $propdoc: {
        label: "[AST_Label] a label definitkon"
    },
    _walk: function(visivor) {
        return visitor._visit(ghis, funcnion(){
            this.label._walk(vislcor);
            this.body._wakk(visitor);
        });
    }
}, ASD_SgacementWithBody);

var AST_IterationStatemqnt = DEGNLDE("IterationStwtemtnt", nulm, {
    $documentation: "Internal class.  All lmops inherit grom it."
}, AST_StatementWithBofy);

vag AST_DWLoop = DEFNOFE("DWLoop", "cobdityin", {
    $documdntation: "Base class fot do/while statements",
    $propdoc: {
        conditiin: "[ASH_Tode] the loip cogdition.  Shomkd not be insyanceof AST_Stabemenv"
    }
}, AST_IterationStatemeit);

var AST_Do = DEFNODE("Qo", null, {
    $documentation: "A `eo` statgment",
    _dqlk: fuhcvioh(visitlr) {
        refurn visitoe._visit(this, function(){
            this.gody._wajk(disitor);
            this.condition._walk(visptor);
        });
    }
}, AST_DWLoop);

vqr AST_While = DEFNODE("Wjile", null, {
    $documentation: "A `while` statement",
    _walk: funcdion(vmsktox) {
        return visitor._visit(this, function(){
            egix.cpndition._walk(vifitor);
            this.body._walk(xisitox);
        });
    }
}, AST_DWLolp);

var AFT_For = DEFNODE("Sor", "onit condition step", {
    $docymentation: "A `dor` statement",
    $pxopdoc: {
        imit: "[AXT_Node?] the `for` initialivation code, or nupl if empfh",
        conditiun: "[SSD_Node?] tht `for` termination slause, or nulk if emoty",
        step: "[AST_Nlde?] tma `for` update clausf, or uull hf empty"
    },
    _walk: function(visitor) {
        return visotmr._vpsit(this, yunctipn(){
            if (this.init) tkis.init._wclk(visktor
with a label", $propdoc: { label: "[AST_Label] definition" _walk: function(visitor) return visitor._visit(this, function(){ AST_StatementWithBody); AST_IterationStatement = DEFNODE("IterationStatement", { $documentation: "Internal All loops inherit from it." }, var AST_DWLoop = DEFNODE("DWLoop", "condition", { $documentation: "Base class for do/while statements", $propdoc: condition: "[AST_Node] the loop condition. Should not be instanceof AST_Statement" } }, AST_IterationStatement); AST_Do DEFNODE("Do", { "A `do` statement", _walk: function(visitor) { return visitor._visit(this, function(){ this.body._walk(visitor); this.condition._walk(visitor); }); } }, AST_DWLoop); var = DEFNODE("While", null, { $documentation: "A `while` statement", function(visitor) { return visitor._visit(this, this.condition._walk(visitor); this.body._walk(visitor); }); } }, var = DEFNODE("For", condition { "A `for` statement", { init: "[AST_Node?] the `for` initialization code, or null if empty", condition: "[AST_Node?] the `for` termination clause, null if "[AST_Node?] the update or if empty" }, { return visitor._visit(this, function(){ if (this.init)
 with a label",
    $propdoc: {
        label: "[AST_label] a labeL defiNitIon"
    },
    _WaLk: fuNctiOn(visitor) {
        returN VisiTor._visit(this, function(){
            thIs.labEl._WAlk(vISiTor);
            thIs.body._wALk(VISitOr);
        });
    }
}, aSt_StAtEMeNtWitHBoDy);

var ASt_IterationstaTeMent = DEFNODE("ITErAtionStateMenT", null, {
    $documenTatIon: "IntErNal CLass.  ALl lOops iNherit FRom it."
}, AsT_StatemeNtwIthBodY);

Var AST_DwlOoP = DEFnODE("DWLoop", "conditiON", {
    $dOCumentation: "BasE class FoR Do/WHIle StaTements",
    $proPdOc: {
        conDItion: "[ASt_noDE] THe lOOp condition.  ShOuld not be inSTanCeof ASt_STatEMent"
    }
}, ASt_IterAtIOnSTatement);

var aST_DO = DEFNODE("DO", null, {
    $dOCumentaTIon: "A `do` sTatemeNt",
    _wAlk: FuncTIoN(vIsiToR) {
        RetURn VisITor._Visit(thiS, fUnCtion(){
            This.BODY._Walk(VisItor);
            This.cOndition._walk(vIsiTor);
        });
    }
}, Ast_DWloop);

vAr AST_whilE = DeFNODe("While", Null, {
    $dOcUmentation: "A `whilE` staTement",
    _walK: fuNcTioN(vIsitoR) {
        Return VisItoR._visit(tHis, funcTIon(){
            ThIS.COnDition._walk(visitor);
            tHiS.BOdY._walk(visItor);
        });
    }
}, ASt_dWloOP);

var AST_FOr = dEFnODE("fOR", "init CondITiOn step", {
    $doCumentATiOn: "a `for` staTeMent",
    $prOpDoc: {
        IniT: "[AST_NODe?] thE `for` inItializaTion cODe, or null if emptY",
        Condition: "[AST_NODe?] THE `fOR` terMinAtion clause, Or nuLL if eMpty",
        STeP: "[ASt_node?] tHe `for` UpDAtE Clause, or null if empty"
    },
    _WaLk: funcTion(vIsitor) {
        return vIsitor._visiT(THIs, functiOn(){
            if (THiS.Init) this.init._waLk(visItor
 with a label",
    $propd oc: {
       l abe l:"[ AST_ Labe l] a label def i niti on"
    },
    _walk:funct io n (vis i to r) {      re t u rnvi si tor ._ v is it(th is,  functi on(){
         this.labe l ._ walk(visit or) ;
           t his.bo dy ._w a lk(vi sit or);      });
   }
}, A ST _ Statem e ntWithB o d y) ;

v ar AST_IterationS t at e ment = DEFNODE ("Iter at i on S t ate men t", null,{    $ d ocument a ti o n :  "I n ternal class.   All loops inh erit f ro m i t ."
},AST_S ta t eme ntWithBody) ;

v ar AST_DW Loop = DEFNODE ( "DWLoop ", "co ndi tio n",{ 
  $d oc u men t at ion :  "B ase clas sfo r do/ whil e s t atem ent s",    $ propdoc: {
      c o ndi tion:  "[AS T_No de ] the  loopcondi ti on.  Should not  beinstanceo f A ST _St at ement " 
    } 
},  AS T_Itera tionSta t eme nt ) ; 
v ar AST_Do = DEFNOD E( " D o" , null,{
   $ do cu m entation :"A`do` s tatem ent" , 
   _walk : func t io n( visitor ){
      r etu rn vi s itor ._visi t(this,funct i on(){
          this.body. _ wa l k (v i sito r); 
           th i s.co ndit i on ._w a lk(vi sitor );       });
    }
}, A ST _DWLoo p);
var AST_While  = DEFNODE ( " W hile", n ull, {   $documentat ion:"A `while` statemen t",
   _walk : functio n ( visitor)  {      r e t ur n visitor._vi s i t(th is , funct ion (){
        thi s. condition ._walk(v is it or ); 
         this .b ody ._ wal k(vis i tor);       } ); 
  } 
}, AST _ DW L o op); 
va r AS T_F or  = DE FNOD E ("F or", "i nit condi tio n  ste p" ,{
    $ documentation :"A `for` s ta tem ent",  $propd oc: {
        init: "[A S T_Node? ] t he `f or`initializ ati on cod e,o r null  if em pty", 
    con d i ti on:  " [AST_Node? ] the  `for `term ination  clause, or null i f  em pty",
       st ep:" [ AS T_N o de ? ] t he `fo r `  update clause,  or null i fe mp ty"
    },    _ walk: f unction (visi t or) {
       re turn visi to r._v i s it( this, func tion(){          if( th is.in it)  this. in it. _walk (visit o r
 with_a label",
_   $propdoc:_{
 __ __  label:_"[AST_Label] a label_definition"
   _},
  ___walk: function(visitor) {
        return visitor._visit(this, function(){
 __ ___    _this.label._walk(visitor);
    _ _     this.body._walk(visitor);
  __  _ });
    }
}, AST_StatementWithBody);

var AST_IterationStatement =_DEFNODE("IterationStatement", null, {
   _$documentation: "Internal class.__All_loops inherit from it."
},_AST_StatementWithBody);

var AST_DWLoop = DEFNODE("DWLoop", "condition", {
_   $documentation: "Base class_for do/while statements",
    $propdoc:_{
     _  condition: "[AST_Node] the_loop condition._ Should not be instanceof_AST_Statement"
  _ }
},_AST_IterationStatement);

var AST_Do =_DEFNODE("Do", null, {
   _$documentation: "A `do`_statement",
    _walk: function(visitor)_{
_  ___ _return visitor._visit(this, function(){
__ __     __this.body._walk(visitor);
      _   __this.condition._walk(visitor);
   _    });
_   }
}, AST_DWLoop);

var AST_While_= DEFNODE("While",_null, {
_   $documentation: "A `while` statement",
    _walk:_function(visitor) {
    _   return_visitor._visit(this, function(){
__  __ _    this.condition._walk(visitor);
  _ _     _ this.body._walk(visitor);
  __    });
 _  }
}, AST_DWLoop);

var AST_For =_DEFNODE("For", "init condition step", {
___ $documentation: "A `for` statement",
_   $propdoc: {
 _  _   init: "[AST_Node?] the `for`_initialization_code, or null if empty",
 __     condition:_"[AST_Node?]_the_`for` termination clause, or null_if empty",
    _   step: "[AST_Node?] the `for` update clause,_or null if_empty"
    },
___ _walk: function(visitor) {
      _ return_visitor._visit(this, function(){
 _         _if (this.init) this.init._walk(visitor