Exemple #1
0
		void VisitFunctionType(FunctionType functionType)
		{
			WriteCommaSeparatedListInParenthesis (functionType.Parameters, false);
			Space ();
			WriteToken ("=>", Roles.Assign);
			Space ();
			functionType.ReturnType.AcceptVisitor (this);
		}
Exemple #2
0
			public override void VisitSimpleType (SimpleType simpleType)
			{
				base.VisitSimpleType (simpleType);

				var td = GetTypeDef (simpleType);

				if (td == null || !IsDelegate (td)) {
					return;
				}

				var subs = new Dictionary<string, AstType> ();

				var invoke = td.Methods.First (x => x.Name == "Invoke");

				if (simpleType.TypeArguments.Count > 0) {

					var ps = td.GenericParameters;
					var i = 0;
					foreach (var a in simpleType.TypeArguments) {

						subs [ps [i].Name] = a;

						i++;
					}
				}

				var nt = new FunctionType ();

				foreach (var p in invoke.Parameters) {

					var pt = p.ParameterType.IsGenericParameter ? subs [p.ParameterType.Name] : GetTsType (p.ParameterType);

					nt.Parameters.Add (new ParameterDeclaration (pt.Clone (), p.Name));
				}

				nt.ReturnType = invoke.ReturnType.IsGenericParameter ? subs [invoke.ReturnType.Name] : GetTsType (invoke.ReturnType);

				if (nt.ReturnType is PrimitiveType) {
					nt.ReturnType = MakePrimitiveTypesJsTypes.GetPrimitiveTypeReplacement ((PrimitiveType)nt.ReturnType);
				}
				foreach (var p in nt.Parameters) {
					if (p.Type is PrimitiveType) {
						p.Type = MakePrimitiveTypesJsTypes.GetPrimitiveTypeReplacement ((PrimitiveType)p.Type);
					}
				}

				nt.AddAnnotation (td);

				simpleType.ReplaceWith (nt);
			}