[mono-vb] VBNC30390 Compile Error
John Lenz
jlenz2 at math.uiuc.edu
Sat May 16 00:40:17 EDT 2009
On 04/17/2009 09:25 AM, John Lenz wrote:
> On 04/17/2009 03:09 AM, Rolf Bjarne Kvinge wrote:
>> Hi,
>>
>>> When attempting to compile a large vb.net project here at work with
>>> mono, I got a really weird error. I was able to strip it down to the
>>> attached file, the error comes about when there are two private
>>> subclasses of some class.
>>>
>>> I am using the mono-basic code from Mono 2.4, and I get the following
>>> error. The file compiles without errors in Visual Studio. As I
>>> mention
>>> in the comment, changing Bar to a public class makes the file compile
>>> without any errors.
>>>
>>>
>>> Visual Basic.Net Compiler version 0.0.0.5914 (Mono 2.4 - r) Copyright
>>> (C) 2004-2008 Rolf Bjarne Kvinge. All rights reserved.
>>>
>>> /home/john/test.vb (28,26) : Error VBNC30390: 'Bar.Testing' is not
>> accessible because it is 'Public'.
>>
>> Yes, this is really weird.
>>
>> However you seem to have forgotten to attach the file ;-)
>>
>
> I attached it, but maybe the list killed the attachment. Here it is inline
>
> Option Strict On
>
> Public Class Foo
>
> 'Changing Bar to a public class fixes the problem
> Private Class Bar
> Public Function Testing() As Integer
> Return 12
> End Function
> End Class
>
> Private b As Bar
>
> Public Sub New()
> b = New Bar()
> End Sub
>
>
> Private Class Baz
>
> Private parent As Foo
>
> Public Sub New(ByVal p As Foo)
> parent = p
> End Sub
>
> Public Function Test(ByVal i As Integer) As Integer
> Return parent.b.Testing() + i
> End Function
>
> End Class
>
> Public Function Test(ByVal i As Integer) As Integer
> Dim b As New Baz(Me)
> return b.Test(i)
> End Function
> End Class
The following patch against mono-basic-2.4 fixes the problem for me.
Index: mono-basic-2.4/vbnc/vbnc/source/General/Helper.vb
===================================================================
--- mono-basic-2.4.orig/vbnc/vbnc/source/General/Helper.vb 2009-05-15 23:33:04.000000000 -0500
+++ mono-basic-2.4/vbnc/vbnc/source/General/Helper.vb 2009-05-15 23:30:28.000000000 -0500
@@ -1981,8 +1981,6 @@
'If the called type is not a nested type it is accessible.
If CalledType.DeclaringType Is Nothing Then Return True
- 'If the called type is a private nested type it is inaccessible
- If CalledType.IsNestedPrivate Then Return Helper.CompareType(CalledType.DeclaringType, CallerType)
'Add all the surrounding types of the caller type to a list.
Dim callerHierarchy As New Generic.List(Of Type)
@@ -1996,6 +1994,10 @@
Do Until tmpCaller Is Nothing
If callerHierarchy.Contains(tmpCaller) Then
'We've reached a common surrounding type.
+
+ 'The caller can descend once into a private type, check that here.
+ If CalledType.IsNestedPrivate Then Return Helper.CompareType(CalledType.DeclaringType, tmpCaller)
+
'No matter what accessibility level this type has
'it is accessible.
Return True
@@ -2007,6 +2009,9 @@
tmpCaller = tmpCaller.DeclaringType
Loop
+ 'If the called type is a private nested type it is inaccessible
+ If CalledType.IsNestedPrivate Then Return Helper.CompareType(CalledType.DeclaringType, CallerType)
+
'There is no common surrounding type, and the access level of all
'surrounding types of the called types are non-private, so the type
'is accessible.
@@ -4023,4 +4028,4 @@
End Select
Return False
End Function
-End Class
\ No newline at end of file
+End Class
More information about the Mono-vb
mailing list