2004-08-03 Martin Baulig <martin@ximian.com>
[mono.git] / mcs / mbas / argument.cs
index 518c15a355a895d7447dce1a4c8215805a8bbc94..8c36e39f835ebbfd60872e204283c74a23eae2f3 100644 (file)
@@ -25,7 +25,8 @@ namespace Mono.MonoBASIC {
                        Expression,
                        Ref,
                        Out,
-                       NoArg
+                       NoArg,
+                       AddressOf
                };
 
                public AType ArgType;
@@ -86,6 +87,7 @@ namespace Mono.MonoBASIC {
                        {
                                return true;                            
                        }
+
 /*
                        if (ArgType == AType.Ref) {
                                Expr = Expr.Resolve (ec);
@@ -93,12 +95,31 @@ namespace Mono.MonoBASIC {
                                        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;