Esempio n. 1
0
        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);
        }