Browse Source

Added 'Internal' decl access.

Mark Sibly 8 years ago
parent
commit
d8fdb38ab6

+ 4 - 1
src/mx2cc/docs/docsmaker.monkey2

@@ -532,7 +532,10 @@ Class DocsMaker
 	End
 	
 	Method DocsHidden:Bool( decl:Decl )
-		Return (Not decl.IsPublic And Not decl.docs) Or decl.docs.StartsWith( "@hidden" )
+		
+		If decl.docs Return decl.docs.StartsWith( "@hidden" )
+		
+		Return decl.IsPrivate Or decl.IsInternal
 	End
 	
 	Method DocsHidden:Bool( decl:Decl,access:Int )

+ 8 - 2
src/mx2cc/parser.monkey2

@@ -149,17 +149,21 @@ Class Parser
 					flags=(flags & ~DECL_ACCESSMASK) | DECL_EXTERN
 					If CParse( "private" )
 						flags|=DECL_PRIVATE
+					Else If CParse( "internal" )
+						flags|=DECL_INTERNAL|DECL_PUBLIC
 					Else
 						CParse( "public" )
 						flags|=DECL_PUBLIC
 					Endif
 					ParseEol()
 					Continue
-				Case "public","private"
+				Case "public","private","internal"
 					flags&=~DECL_ACCESSMASK
 					If fileScope flags&=~DECL_EXTERN
 					If CParse( "private" )
 						flags|=DECL_PRIVATE
+					Else If CParse( "internal" )
+						flags|=DECL_INTERNAL|DECL_PUBLIC
 					Else
 						Parse( "public" )
 						flags|=DECL_PUBLIC
@@ -223,18 +227,20 @@ Class Parser
 		Return decls.ToArray()
 	End
 	
+	#rem
 	Method CParseAccess:Int( flags:Int )
 	
 		Select Toke
 		Case "public" flags=flags & ~(DECL_ACCESSMASK) | DECL_PUBLIC
 		Case "private" flags=flags & ~(DECL_ACCESSMASK) | DECL_PRIVATE
-		Case "protected" flags=flags & ~(DECL_ACCESSMASK) | DECL_PROTECTED
 		Case "internal" flags=flags & ~(DECL_ACCESSMASK) | DECL_INTERNAL
+		Case "protected" flags=flags & ~(DECL_ACCESSMASK) | DECL_PROTECTED
 		Default Return flags
 		End
 		Bump()
 		Return flags
 	End
+	#end
 	
 	Method ParseAliases( decls:Stack<Decl>,flags:Int )
 	

+ 12 - 6
src/mx2cc/test.monkey2

@@ -1,12 +1,18 @@
 
-Enum WindowFlags
-	HighDPI=1
-	Resizable=2
+#Import "test2"
+
+Internal
+
+Function InternalTest()
+	
+	print "Internal!"
+
 End
 
+Public
+
 Function Main()
 	
-	Local flags:=WindowFlags.HighDPI
-	
-	flags|=WindowFlags.Resizable
+	Test()
+
 End

+ 2 - 7
src/mx2cc/test2.monkey2

@@ -1,9 +1,4 @@
 
-Global c:C
-
-Class C
-End
-
-Function F( c:C )
-	Print "F()!"
+Function Test()
+	InternalTest()
 End

+ 11 - 10
src/mx2cc/value.monkey2

@@ -76,19 +76,19 @@ Class Value Extends SNode
 	
 	Function CheckAccess( decl:Decl,scope:Scope,tscope:Scope )
 	
+		If decl.IsInternal
+			If scope.FindFile().fdecl.module=tscope.FindFile().fdecl.module Return
+
+			Throw New SemantEx( "Internal declaration '"+decl.ident+"' cannot be accessed from here." )
+		Endif
+			
 		If decl.IsPublic Return
-		
+
 		Local cscope:=Cast<ClassScope>( scope )
 		If cscope
-		
+			
 			If scope.FindFile()=tscope.FindFile() Return
 
-			If decl.IsInternal
-				If scope.FindFile().fdecl.module=tscope.FindFile().fdecl.module Return
-
-				Throw New SemantEx( "Internal member '"+decl.ident+"' cannot be accessed from different module" )
-			Endif
-
 			Local ctype:=cscope.ctype
 			Local ctype2:=tscope.FindClass()
 			
@@ -96,7 +96,7 @@ Class Value Extends SNode
 			
 				If ctype=ctype2 Return
 				
-				Throw New SemantEx( "Private member '"+decl.ident+"' cannot be accessed from here" )
+				Throw New SemantEx( "Private member '"+decl.ident+"' cannot be accessed from here." )
 				
 			Else If decl.IsProtected
 			
@@ -105,7 +105,8 @@ Class Value Extends SNode
 					ctype2=ctype2.superType
 				Wend
 				
-				Throw New SemantEx( "Protected member '"+decl.ident+"' cannot be accessed from here" )
+				Throw New SemantEx( "Protected member '"+decl.ident+"' cannot be accessed from here." )
+
 			Endif
 
 		Endif