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); }
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"); }
public static string GenerateTypeSignature(IType type) { var self = new TypeSignatureGenerator(); return(type.Accept(self)); }