public JNode VisitInvocationExpression(InvocationExpression node) { var res = node.Resolve(); //TEMP: danel //if (res.Type.Kind == TypeKind.Dynamic) //{ // var node2 = Js.Invoke(VisitExpression(node.Target), VisitExpressions(node.Arguments).ToArray()); // return node2; //} var node3 = Visit(res); return(node3); }
private void AssertInvocationResolution(InvocationExpression expression, MethodDefinition expected) { var result = expression.Resolve(_compilationUnit.GetScope()); Assert.IsInstanceOfType(result, typeof(InvocationResolveResult)); var invocationResult = (InvocationResolveResult)result; var method = (MethodDefinition)invocationResult.Member; Assert.AreEqual(expected.DeclaringType.FullName, method.DeclaringType.FullName); Assert.AreEqual(expected.Name, method.Name); Assert.AreEqual(expected.MemberType.FullName, method.MemberType.FullName); var expectedEnumerator = expected.GetParameters().GetEnumerator(); var resolvedEnumerator = method.GetParameters().GetEnumerator(); while (expectedEnumerator.MoveNext()) { if (!resolvedEnumerator.MoveNext()) Assert.Fail("Resolved method has too few parameters defined."); Assert.AreEqual(expectedEnumerator.Current.VariableType.FullName, resolvedEnumerator.Current.VariableType.FullName); } Assert.IsFalse(resolvedEnumerator.MoveNext(), "Resolved method has too many parameters defined."); Assert.IsFalse(invocationResult.IsError); }
public void LookupInvocationWithWrongParameterTypes() { _compilationUnit.UsingDirectives.Add(new UsingNamespaceDirective("System")); var invocation = new InvocationExpression { Target = new MemberReferenceExpression(new IdentifierExpression("Console"), "SetBufferSize"), Arguments = { new PrimitiveExpression(1), new PrimitiveExpression("test") } }; var result = invocation.Resolve(_compilationUnit.GetScope()); Assert.IsTrue(result.IsError); }