private void EmitCodeOnAllSubnodes(StatementSequenceEmitter node, HappyPenguinCodeEmitter emitter)
 {
     foreach (var subNode in node.SubNodes)
     {
         subNode.EmitCode(emitter);
         if (subNode.SubNodes.Count > 0) //If there are subNodes, recurse again
         {
             EmitCodeOnAllSubnodes(subNode, emitter);
         }
     }
 }
Beispiel #2
0
 private void AddEmitterToRoot(StatementSequenceEmitter rootEmitter, StatementSequenceNode astNode)
 {
     foreach (var astSubNode in astNode.SubNodes)
     {
         StatementSequenceEmitter emittedNode = new NoOpEmitter();
         TypeSwitch.On(astSubNode)
         .Case((VariableDeclarationNode variableDeclarationNode) =>
         {
             emittedNode = new VariableDeclarationNodeEmitter(variableDeclarationNode);
         })
         .Case((ReturnStatementNode returnStatementNode) =>
         {
             emittedNode = new ReturnStatementNodeEmitter(returnStatementNode);
         });
         if (astSubNode is StatementSequenceNode)
         {
             AddEmitterToRoot(emittedNode, astSubNode as StatementSequenceNode); //Also copy subnodes
         }
         rootEmitter.SubNodes.Add(emittedNode);
     }
 }