浏览代码

WIP geninfo dev.

Mark Sibly 7 年之前
父节点
当前提交
06cc5d80b5

+ 0 - 21
src/mx2cc/.mx2/test.monkey2

@@ -1,21 +0,0 @@
-#Import "<mojo>"
-
-Using mojo..
-
-Function Test:Int()
-	Return 0
-End
-
-Global g:=Image.Load( "test.png" )'New Image( 256,256 )
-
-Function Main:Void()
-	Local x:Int
-	Local y:Int
-	Local z:int
-	If x<10
-		Local t:=100
-	Else
-		Local t:=20
-	Endif
-End
-

+ 2 - 1
src/mx2cc/decl.monkey2

@@ -104,7 +104,8 @@ End
 
 Class FileDecl Extends Decl
 
-	Field path:String
+	Field path:String		'path for .monkey2 file
+	Field gpath:String		'path for .geninfo file
 	Field nmspace:String
 	Field usings:String[]
 	Field imports:String[]

+ 25 - 2
src/mx2cc/geninfo/geninfo.monkey2

@@ -1,7 +1,7 @@
 
 Namespace mx2.geninfo
 
-Class ParseInfoGenerator
+Class GeninfoGenerator
 
 	Method GenParseInfo:JsonValue( fdecl:FileDecl )
 	
@@ -10,6 +10,24 @@ Class ParseInfoGenerator
 		Return node
 	End
 	
+	Method GenSemantInfo()
+		
+		For Local fdecl:=Eachin Builder.mainModule.fileDecls
+			
+			If Not fdecl.gpath Continue
+			
+'			Print "path="+fdecl.path+" gpath="+fdecl.gpath
+			
+			Local jobj:=GenParseInfo( fdecl )
+			
+			Local json:=jobj.ToJson()
+			
+			CreateDir( ExtractDir( fdecl.gpath ) )
+			SaveString( json,fdecl.gpath )
+		Next
+		
+	End
+	
 	Private
 
 	Method GenNode<T>:JsonArray( args:T[] )
@@ -17,11 +35,16 @@ Class ParseInfoGenerator
 		Local jarr:=New JsonArray
 		
 		For Local arg:=Eachin args
+			If Not arg Continue
+			
 '			Local jval:=GenNode( arg )
 '			If jval jarr.Add( jval )
+
 			Local jval:=GenNode( arg )
 			If Not jval Continue
+			
 			Local jarr2:=Cast<JsonArray>( jval )
+			
 			If jarr2 
 				For Local jval:=Eachin jarr2
 					jarr.Add( jval )
@@ -207,7 +230,7 @@ Class ParseInfoGenerator
 	End
 	
 	Method GenNode:JsonValue( expr:Expr )
-	
+		
 		Local identExpr:=Cast<IdentExpr>( expr )
 		If identExpr Return GenNode( identExpr )
 		

+ 53 - 22
src/mx2cc/mx2cc.monkey2

@@ -26,8 +26,9 @@ Global StartDir:String
  
 'Const TestArgs:="mx2cc makeapp src/mx2cc/test.monkey2"
 
-Const TestArgs:="mx2cc makeapp -semant -geninfo src/mx2cc/test.monkey2"
-'Const TestArgs:="mx2cc makeapp -semant -geninfo modules/mojo3d/mojo3d.monkey2"
+Const TestArgs:="mx2cc geninfo src/mx2cc/test.monkey2"
+'Const TestArgs:="mx2cc geninfo modules/mojo3d/mojo3d.monkey2"
+'Const TestArgs:="mx2cc geninfo src/ted2go/Ted2.monkey2"
 
 'Const TestArgs:="mx2cc makeapp -verbose src/mx2cc/catan/main.monkey2"
 
@@ -140,6 +141,8 @@ Function Main()
 		Local start:=std.time.Now()
 		
 		Select cmd
+		Case "geninfo"
+			ok=GenInfo( args )
 		Case "makeapp"
 			ok=MakeApp( args )
 		Case "makemods"
@@ -162,6 +165,49 @@ Function Main()
 	If Not ok libc.exit_( 1 )
 End
 
+Function GenInfo:Bool( args:String[] )
+
+	Local opts:=New BuildOpts
+	opts.productType="module"
+	opts.target="desktop"
+	opts.config="debug"
+	opts.clean=False
+	opts.fast=True
+	opts.verbose=0
+	opts.passes=2
+	opts.geninfo=True
+	
+	args=ParseOpts( opts,args )
+	If args.Length<>1 Fail( "Invalid app source file" )
+	
+	Local cd:=CurrentDir()
+	ChangeDir( StartDir )
+	opts.mainSource=RealPath( args[0].Replace( "\","/" ) )
+	ChangeDir( cd )
+	
+	Print ""
+	Print "***** Generating info for "+opts.mainSource+"' ("+opts.target+" "+opts.config+" "+opts.arch+" "+opts.toolchain+") *****"
+	Print ""
+
+	New BuilderInstance( opts )
+	
+	Builder.Parse()
+	If opts.passes=1
+		Local gen:=New GeninfoGenerator
+		Local jobj:=gen.GenParseInfo( Builder.mainModule.fileDecls[0] )
+		Print jobj.ToJson()
+		Return Builder.errors.Length=0
+	Endif
+	If Builder.errors.Length Return False
+	
+	Builder.Semant()
+	
+	Local gen:=New GeninfoGenerator
+	gen.GenSemantInfo()
+	
+	Return Builder.errors.Length=0
+End
+
 Function MakeApp:Bool( args:String[] )
 
 	Local opts:=New BuildOpts
@@ -193,34 +239,19 @@ Function MakeApp:Bool( args:String[] )
 	Print ""
 
 	New BuilderInstance( opts )
-	
+
+	'pass1 	
 	Builder.Parse()
-	If opts.passes=1
-		If opts.geninfo
-			Local gen:=New ParseInfoGenerator
-			Local jobj:=gen.GenParseInfo( Builder.mainModule.fileDecls[0] )
-			Print jobj.ToJson()
-		Endif
-		Return True
-	Endif
+	If opts.passes=1 Return Builder.errors.Length=0
 	If Builder.errors.Length Return False
 	
 	Builder.Semant()
+	If opts.passes=2 Return Builder.errors.Length=0
 	If Builder.errors.Length Return False
-	If opts.passes=2
-		If opts.geninfo
-			Local gen:=New ParseInfoGenerator
-			Local jobj:=gen.GenParseInfo( Builder.mainModule.fileDecls[0] )
-			Print jobj.ToJson()
-		Endif
-		Return True
-	Endif
 	
 	Builder.Translate()
+	If opts.passes=3 Return Builder.errors.Length=0
 	If Builder.errors.Length Return False
-	If opts.passes=3
-		Return True
-	Endif
 	
 	Builder.product.Build()
 	If Builder.errors.Length Return False

+ 9 - 2
src/mx2cc/parser.monkey2

@@ -22,11 +22,17 @@ Class Parser
 
 	Method ParseFile:FileDecl( ident:String,srcPath:String,ppsyms:StringMap<String> )
 		
+		Local gpath:=""
+		
 		If Builder.opts.geninfo
-			Local dir:=ExtractDir( srcPath )
+			
+			Local dir:=ExtractDir( srcPath )+".mx2/"
 			Local name:=StripDir( srcPath )
-			local path:=dir+".mx2/"+name
+			Local path:=dir+name
+			
 			If GetFileType( path )=FileType.File srcPath=path
+				
+			gpath=StripExt( path )+".geninfo"
 		Endif
 	
 		_ppsyms=ppsyms
@@ -37,6 +43,7 @@ Class Parser
 		_fdecl=New FileDecl
 		_fdecl.ident=ident
 		_fdecl.path=srcPath
+		_fdecl.gpath=gpath
 		_fdecl.nmspace=""
 		
 		Local source:=LoadString( srcPath )

+ 0 - 6
src/mx2cc/test.monkey2

@@ -1,14 +1,8 @@
 
-#Import "<mojo>"
-
-Using mojo..
-
 Function Test:Int()
 	Return 0
 End
 
-Global g:=Image.Load( "test.png" )'New Image( 256,256 )
-
 Function Main:Void()
 	Local x:Int
 	Local y:Int

+ 1 - 10
src/mx2cc/test2.monkey2

@@ -1,12 +1,3 @@
 
-
-Class VertexFormat
-	
-	Property Pitch:Int() Virtual
-		Return 0
-	End
-
-	Method UpdateGLAttribs() Virtual
-	End
+Function Test2()
 End
-