2004-08-03 Martin Baulig <martin@ximian.com>
[mono.git] / mcs / mbas / argument.cs
index 90ee46cc97d6cbaa862f8b7d7c8db9dabb583221..8c36e39f835ebbfd60872e204283c74a23eae2f3 100644 (file)
@@ -9,7 +9,7 @@
 //
 #define USE_OLD
 
-namespace Mono.CSharp {
+namespace Mono.MonoBASIC {
        using System;
        using System.Collections;
        using System.Reflection;
@@ -25,7 +25,8 @@ namespace Mono.CSharp {
                        Expression,
                        Ref,
                        Out,
-                       NoArg
+                       NoArg,
+                       AddressOf
                };
 
                public AType ArgType;
@@ -64,7 +65,7 @@ namespace Mono.CSharp {
                {
                        return (a.ArgType == AType.Ref ? "ref " :
                                (a.ArgType == AType.Out ? "out " : "")) +
-                               TypeManager.CSharpName (a.Expr.Type);
+                               TypeManager.MonoBASIC_Name (a.Expr.Type);
                }
 
                public bool ResolveMethodGroup (EmitContext ec, Location loc)
@@ -86,6 +87,7 @@ namespace Mono.CSharp {
                        {
                                return true;                            
                        }
+
 /*
                        if (ArgType == AType.Ref) {
                                Expr = Expr.Resolve (ec);
@@ -93,12 +95,31 @@ namespace Mono.CSharp {
                                        return false;
 
                                Expr = Expr.ResolveLValue (ec, Expr);
-                       } else */if (ArgType == AType.Out)
+                       } else */
+
+                       if (ArgType == AType.Out)
                                Expr = Expr.ResolveLValue (ec, new EmptyExpression ());
-                       else
-                               Expr = Expr.Resolve (ec);
+                       else if (ArgType == AType.AddressOf) {
+                               Expression temp_expr = Expr;
+                               
+                               if (temp_expr is SimpleName) {
+                                       SimpleName sn = temp_expr as SimpleName;
+                                       temp_expr = sn.DoResolveAllowStatic(ec);
+                               }
+                               else if (temp_expr is MemberAccess)     {
+                                       MemberAccess ma = temp_expr as MemberAccess;
+                                       temp_expr = ma.DoResolve(ec);
+                               }
 
+                               if (temp_expr is MethodGroupExpr)
+                                       return true;
 
+                               ArgType = AType.Expression;
+                               Expr = Expr.Resolve (ec);
+                       }
+                       else
+                               Expr = Expr.Resolve (ec);
+                       
                        if (Expr == null)
                                return false;