public Function ParseFunction(Node funcNode) { // Left node is identifier, right node is funcNode Expect(funcNode.Left, TokenType.Identifier); Expect(funcNode.Right, TokenType.Block); var func = new Function(funcNode, funcNode.Left.Value); if (funcNode.Right.Right == null) { return(func); } // Create a data label for this functions lr store var data = new Data(DataType.Return) { Name = "return" + Data.Count, Type = DataType.Word, Value = "0" }; Data.Add(data); var lrRegister = func.AddRegister(data); func.StoreLr(data, lrRegister); // Iterate through statements in this functions block // Parse return separately var statement = funcNode.Right.Right; do { if (statement.Type == TokenType.Return) { func.AddReturn(ParseReturn(func, statement)); } else { func.AddData(ParseStatement(func, statement)); } statement = statement.Right; } while (statement != null); func.LoadLr(data, lrRegister); return(func); }