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); } } }
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); } }