示例#1
0
        public void VisitFunctionDefinition(FunctionDefinition functionDefinition)
        {
            var nodeId = functionDefinition.NodeId;

            _generatedCode
            .Append(
                TypeSignatureGenerator.GenerateTypeSignature(
                    ((FunctionType)_astContext.GetNodeType(nodeId)).ReturnType))
            .Append(' ')
            .Append(
                _astContext.GetNodeMangledName(nodeId) ?? functionDefinition.Identifier.Lexeme)
            .Append('(');

            for (var i = 0; i < functionDefinition.Parameters.Count; i++)
            {
                var parameter = functionDefinition.Parameters[i];
                _generatedCode
                .Append(
                    TypeSignatureGenerator.GenerateTypeSignature(
                        _astContext.GetNodeType(parameter.Node.NodeId)))
                .Append(' ')
                .Append(parameter.Node.Identifier);
                if (i < functionDefinition.Parameters.Count - 1)
                {
                    _generatedCode.Append(", ");
                }
            }

            _generatedCode.Append(") ");
            GenerateBlockCode(functionDefinition.Body);
        }
示例#2
0
        public void VisitVariableDefinition(VariableDefinition variableDefinition)
        {
            _generatedCode
            .Append(
                TypeSignatureGenerator.GenerateTypeSignature(
                    _astContext.GetNodeType(variableDefinition.NodeId)))
            .Append(' ')
            .Append(variableDefinition.Identifier);

            if (variableDefinition.Initializer != null)
            {
                _generatedCode
                .Append(" = ")
                .Append(
                    ExpressionCodeGenerator.GenerateExpressionCode(
                        variableDefinition.Initializer));
            }

            _generatedCode.Append(";\n");
        }
示例#3
0
        public static string GenerateTypeSignature(IType type)
        {
            var self = new TypeSignatureGenerator();

            return(type.Accept(self));
        }