Browse Source

Added support for multi-dimensional arrays.
Fixed string comparison generation (now uses bbStringCompare).
Fixed semanting order for types (fixes #8).
Improved handling of => and =< operators.
Fixed munged name generation for files using dots for word separators.
License updates.
Added AUTHORS.md

woollybah 11 years ago
parent
commit
08f1993b12
15 changed files with 359 additions and 98 deletions
  1. 15 0
      AUTHORS.md
  2. 1 3
      COPYING.md
  3. 7 7
      config.bmx
  4. 69 20
      ctranslator.bmx
  5. 22 14
      decl.bmx
  6. 83 11
      expr.bmx
  7. 33 12
      parser.bmx
  8. 7 7
      stmt.bmx
  9. 40 0
      tests/framework/language/arrays_0.bmx
  10. 28 0
      tests/framework/types/global_01.bmx
  11. 22 0
      tests/framework/types/global_02.bmx
  12. 1 0
      tests/mods.conf
  13. 7 7
      toker.bmx
  14. 13 8
      translator.bmx
  15. 11 9
      type.bmx

+ 15 - 0
AUTHORS.md

@@ -0,0 +1,15 @@
+Authors
+=======
+
+Names below are sorted alphabetically.
+
+Author
+------
+
+- Bruce A Henderson <[email protected]>
+
+
+Contributors
+------------
+
+- Ronny Otto

+ 1 - 3
COPYING.md

@@ -1,6 +1,4 @@
-Copyright (c) 2013-2014 Bruce A Henderson & Ronny Otto 
-
-Based on the public domain Monkey "trans" by Mark Sibly
+Copyright (c) 2013-2014 Bruce A Henderson
 
 This software is provided 'as-is', without any express or implied
 warranty. In no event will the authors be held liable for any damages

+ 7 - 7
config.bmx

@@ -1,26 +1,26 @@
-' Copyright (c) 2013-2014 Bruce A Henderson & Ronny Otto 
+' Copyright (c) 2013-2014 Bruce A Henderson
 '
 ' Based on the public domain Monkey "trans" by Mark Sibly
-' 
+'
 ' This software is provided 'as-is', without any express or implied
 ' warranty. In no event will the authors be held liable for any damages
 ' arising from the use of this software.
-' 
+'
 ' Permission is granted to anyone to use this software for any purpose,
 ' including commercial applications, and to alter it and redistribute it
 ' freely, subject to the following restrictions:
-' 
+'
 '    1. The origin of this software must not be misrepresented; you must not
 '    claim that you wrote the original software. If you use this software
 '    in a product, an acknowledgment in the product documentation would be
 '    appreciated but is not required.
-' 
+'
 '    2. Altered source versions must be plainly marked as such, and must not be
 '    misrepresented as being the original software.
-' 
+'
 '    3. This notice may not be removed or altered from any source
 '    distribution.
-' 
+'
 SuperStrict
 
 Import BRL.LinkedList

+ 69 - 20
ctranslator.bmx

@@ -1,26 +1,26 @@
-' Copyright (c) 2013-2014 Bruce A Henderson & Ronny Otto 
-' 
+' Copyright (c) 2013-2014 Bruce A Henderson
+'
 ' Based on the public domain Monkey "trans" by Mark Sibly
-' 
+'
 ' This software is provided 'as-is', without any express or implied
 ' warranty. In no event will the authors be held liable for any damages
 ' arising from the use of this software.
-' 
+'
 ' Permission is granted to anyone to use this software for any purpose,
 ' including commercial applications, and to alter it and redistribute it
 ' freely, subject to the following restrictions:
-' 
+'
 '    1. The origin of this software must not be misrepresented; you must not
 '    claim that you wrote the original software. If you use this software
 '    in a product, an acknowledgment in the product documentation would be
 '    appreciated but is not required.
-' 
+'
 '    2. Altered source versions must be plainly marked as such, and must not be
 '    misrepresented as being the original software.
-' 
+'
 '    3. This notice may not be removed or altered from any source
 '    distribution.
-' 
+'
 SuperStrict
 
 Import "parser.bmx"
@@ -698,10 +698,24 @@ Type TCTranslator Extends TTranslator
 	End Method
 	
 	Method TransNewArrayExpr$( expr:TNewArrayExpr )
-'		Local texpr$=expr.expr.Trans()
-		'
-		Return "bbArrayNew1D" + Bra(TransArrayType(expr.ty) + ", " + expr.expr.Trans())
-		'Return "Array<"+TransRefType( expr.ty, "LL" )+" >"+Bra( expr.expr.Trans() )
+
+		If expr.expr.length = 1 Then
+			Return "bbArrayNew1D" + Bra(TransArrayType(expr.ty) + ", " + expr.expr[0].Trans())
+		Else
+			' multiple array
+			Local s:String
+			
+			For Local i:Int = 0 Until expr.expr.length
+				If i Then
+					s:+ ", "
+				End If
+				
+				s:+ expr.expr[i].Trans()
+			Next
+			
+			Return "bbArrayNew" + Bra(TransArrayType(expr.ty) + ", " + expr.expr.length + ", " + s)
+		End If
+
 	End Method
 		
 	Method TransSelfExpr$( expr:TSelfExpr )
@@ -842,7 +856,7 @@ Type TCTranslator Extends TTranslator
 				t_expr = TransSubExpr( expr.expr,pri )
 			End If
 		Else
-				t_expr = TransSubExpr( expr.expr,pri )
+			t_expr = TransSubExpr( expr.expr,pri )
 		End If
 
 '		TransSubExpr( expr.expr,pri )
@@ -857,13 +871,41 @@ Type TCTranslator Extends TTranslator
 		If TStringType(expr.exprType) And expr.op = "+" Then
 			Return "bbStringConcat(" + t_lhs + "," + t_rhs + ")"
 		End If
-		
+
+		If TBinaryCompareExpr(expr) And TStringType(TBinaryCompareExpr(expr).ty) Then
+			Return "bbStringCompare" + Bra(t_lhs + ", " + t_rhs) + TransBinaryOp(expr.op, "") + "0"
+		End If
+
 		Return bra(t_lhs+TransBinaryOp( expr.op,t_rhs )+t_rhs)
 	End Method
 	
 	Method TransIndexExpr$( expr:TIndexExpr )
 		Local t_expr$=TransSubExpr( expr.expr )
-		Local t_index$=expr.index.Trans()
+		
+		Local t_index$
+		If expr.index.length = 1 Then
+			If TArraySizeExpr(expr.index[0]) Then
+				Local sizes:TArraySizeExpr = TArraySizeExpr(expr.index[0])
+				sizes.Trans()
+				Local v:String = sizes.val.munged
+				Local i:Int = 0
+				For i = 0 Until sizes.index.length - 1
+					If i Then
+						t_index :+ " + "
+					End If
+					t_index :+ "(*(" + v
+					If i Then
+						t_index :+ "+" + i
+					End If
+					t_index :+ ")) * " + sizes.index[i].Trans()
+				Next
+				t_index :+ " + " + sizes.index[i].Trans()
+				' (*(v+0)) * var1 + (*(v+1)) * var2 + var3
+'DebugStop
+			Else
+				t_index=expr.index[0].Trans()
+			End If
+		End If
 		
 		If TStringType( expr.expr.exprType ) Then
 			Return Bra(t_expr) + "->buf[" + t_index + "]" 
@@ -874,12 +916,12 @@ Type TCTranslator Extends TTranslator
 			Return Bra("(" + TransType(expr.exprType, "") + "*)BBARRAYDATA(" + t_expr + "," + t_expr + "->dims)") + "[" + t_index + "]"
 		End If
 		
-		Local swiz$
-		If TObjectType( expr.exprType )And expr.exprType.GetClass().IsInterface() swiz=".p"
+		'Local swiz$
+		'If TObjectType( expr.exprType )And expr.exprType.GetClass().IsInterface() swiz=".p"
 		
 		'If ENV_CONFIG="debug" Return t_expr+".At("+t_index+")"+swiz
 		
-		Return t_expr+"["+t_index+"]"+swiz
+		Return t_expr+"["+t_index+"]"
 	End Method
 	
 	Method TransSliceExpr$( expr:TSliceExpr )
@@ -931,11 +973,18 @@ Type TCTranslator Extends TTranslator
 '		If Not _env tt="static "
 
 		Emit tt+TransType( elemType, tmp.munged )+" "+tmp.munged+"[]={"+t+"};"
-'DebugStop
+
 		Return "bbArrayFromData" + Bra(TransArrayType(elemType) + "," + count + "," + tmp.munged )
 		'Return "Array<"+TransRefType( elemType, "MM" )+" >("+tmp.munged+","+expr.exprs.Length+")"
 	End Method
 
+	Method TransArraySizeExpr$ ( expr:TArraySizeExpr )
+		' scales[0] is the total size of the array
+		' we start from [1] because it is the size of the next full dimension.
+		' in the case of a 2-dimensional array, [1] represents the length of a row.
+		Return Bra("(BBARRAY)" + expr.expr.Trans()) + "->scales + 1"
+	End Method
+
 	Method TransIntrinsicExpr$( decl:TDecl,expr:TExpr,args:TExpr[] )
 		Local texpr$,arg0$,arg1$,arg2$
 		
@@ -2650,7 +2699,7 @@ End Rem
 	End Method
 	
 	Method TransApp( app:TAppDecl )
-	
+
 		If app.mainModule.IsSuperStrict()
 			opt_issuperstrict = True
 		End If

+ 22 - 14
decl.bmx

@@ -1,26 +1,26 @@
-' Copyright (c) 2013-2014 Bruce A Henderson & Ronny Otto 
+' Copyright (c) 2013-2014 Bruce A Henderson
 '
 ' Based on the public domain Monkey "trans" by Mark Sibly
-' 
+'
 ' This software is provided 'as-is', without any express or implied
 ' warranty. In no event will the authors be held liable for any damages
 ' arising from the use of this software.
-' 
+'
 ' Permission is granted to anyone to use this software for any purpose,
 ' including commercial applications, and to alter it and redistribute it
 ' freely, subject to the following restrictions:
-' 
+'
 '    1. The origin of this software must not be misrepresented; you must not
 '    claim that you wrote the original software. If you use this software
 '    in a product, an acknowledgment in the product documentation would be
 '    appreciated but is not required.
-' 
+'
 '    2. Altered source versions must be plainly marked as such, and must not be
 '    misrepresented as being the original software.
-' 
+'
 '    3. This notice may not be removed or altered from any source
 '    distribution.
-' 
+'
 
 Const DECL_EXTERN:Int=		$010000
 Const DECL_PRIVATE:Int=	    $020000
@@ -1459,13 +1459,6 @@ End Rem
 				Exit
 			Next
 			
-			For Local decl:TConstDecl = EachIn Decls()
-				decl.Semant()
-			Next
-			
-			For Local decl:TGlobalDecl = EachIn Decls()
-				decl.Semant()
-			Next
 			
 			' Don't need default new?
 			'If Not fdecl
@@ -1481,6 +1474,21 @@ End Rem
 		End If
 	End Method
 	
+	Method Semant()
+		If IsSemanted() Return
+		
+		Super.Semant()
+		
+		For Local decl:TConstDecl = EachIn Decls()
+			decl.Semant()
+		Next
+		
+		For Local decl:TGlobalDecl = EachIn Decls()
+			decl.Semant()
+		Next
+		
+	End Method
+	
 	'Ok, this dodgy looking beast 'resurrects' methods that may not currently be alive, but override methods that ARE.
 	Method UpdateLiveMethods:Int()
 	

+ 83 - 11
expr.bmx

@@ -1,4 +1,4 @@
-' Copyright (c) 2013-2014 Bruce A Henderson & Ronny Otto
+' Copyright (c) 2013-2014 Bruce A Henderson
 '
 ' Based on the public domain Monkey "trans" by Mark Sibly
 '
@@ -186,6 +186,11 @@ Type TStmtExpr Extends TExpr
 		Return _trans.TransStmtExpr( Self )
 	End Method
 
+	Method TransVar$()
+		Semant
+		Return _trans.TransStmtExpr( Self )
+	End Method
+
 End Type
 
 '	literal
@@ -558,9 +563,11 @@ End Type
 
 Type TNewArrayExpr Extends TExpr
 	Field ty:TType
-	Field expr:TExpr
 
-	Method Create:TNewArrayExpr( ty:TType,expr:TExpr )
+	Field expr:TExpr[]
+	
+	Method Create:TNewArrayExpr( ty:TType,expr:TExpr[] )
+
 		Self.ty=ty
 		Self.expr=expr
 		Return Self
@@ -568,7 +575,11 @@ Type TNewArrayExpr Extends TExpr
 
 	Method Copy:TExpr()
 		If exprType InternalErr
-		Return New TNewArrayExpr.Create( ty,CopyExpr(expr) )
+		Local cexpr:TExpr[expr.length]
+		For Local i:Int = 0 Until expr.length
+			cexpr[i] = CopyExpr(expr[i])
+		Next
+		Return New TNewArrayExpr.Create( ty,cexpr )
 	End Method
 
 	Method Semant:TExpr()
@@ -576,7 +587,9 @@ Type TNewArrayExpr Extends TExpr
 
 		ty=ty.Semant()
 		exprType=New TArrayType.Create( ty )
-		expr=expr.SemantAndCast( TType.intType )
+		For Local i:Int = 0 Until expr.length
+			expr[i]=expr[i].SemantAndCast( TType.intType )
+		Next
 		Return Self
 	End Method
 
@@ -1131,29 +1144,48 @@ End Type
 
 Type TIndexExpr Extends TExpr
 	Field expr:TExpr
-	Field index:TExpr
+	Field index:TExpr[]
 
-	Method Create:TIndexExpr( expr:TExpr,index:TExpr )
+	Method Create:TIndexExpr( expr:TExpr,index:TExpr[] )
 		Self.expr=expr
 		Self.index=index
 		Return Self
 	End Method
 
 	Method Copy:TExpr()
-		Return New TIndexExpr.Create( CopyExpr(expr),CopyExpr(index) )
+		Local ind:TExpr[]
+		For Local i:Int = 0 Until index.length
+			ind = ind + [CopyExpr(index[i])]
+		Next
+		Return New TIndexExpr.Create( CopyExpr(expr),ind )
 	End Method
 
 	Method Semant:TExpr()
 		If exprType Return Self
 
 		expr=expr.Semant()
-		index=index.SemantAndCast( TType.intType )
+		For Local i:Int = 0 Until index.length
+			index[i]=index[i].SemantAndCast( TType.intType )
+		Next
 
 		If TStringType( expr.exprType )
 			exprType=TType.intType
+			If index.length > 1 Then
+				Err "Illegal subexpression for string index"
+			End If
 		Else If TArrayType( expr.exprType )
 			exprType=TArrayType( expr.exprType ).elemType
 
+			If TArrayType( expr.exprType ).dims > 1 Then
+				Local sizeExpr:TExpr = New TArraySizeExpr.Create(expr, Null, index)
+				index = [sizeExpr]
+				Local tmp:TLocalDecl=New TLocalDecl.Create( "", TType.intPointerType, sizeExpr )
+				TArraySizeExpr(sizeExpr).val = tmp
+				Local stmt:TExpr = New TStmtExpr.Create( New TDeclStmt.Create( tmp ), Self ).Semant()
+				stmt.exprType = exprType
+				Return stmt
+				
+			End If
 			'If TObjectType(exprType) And Not TStringType(exprType) And Not TArrayType(exprType) Then
 			'	Local tmp:TLocalDecl=New TLocalDecl.Create( "", exprType,expr )
 			'	Local stmt:TExpr = New TStmtExpr.Create( New TDeclStmt.Create( tmp ),New TVarExpr.Create( tmp ) ).Semant()
@@ -1171,8 +1203,8 @@ Type TIndexExpr Extends TExpr
 	End Method
 
 	Method SemantSet:TExpr( op$,rhs:TExpr )
-		Semant
-		Return Self
+		Return Semant()
+		'Return Self
 	End Method
 
 	Method Trans$()
@@ -1270,6 +1302,46 @@ Type TArrayExpr Extends TExpr
 
 End Type
 
+Type TArraySizeExpr Extends TExpr
+
+	Field expr:TExpr
+	Field val:TDecl
+	Field index:TExpr[]
+
+	Method Create:TArraySizeExpr( expr:TExpr, val:TDecl, index:TExpr[] )
+		Self.expr=expr
+		Self.val=val
+		Self.index=index
+		Return Self
+	End Method
+
+	Method Copy:TExpr()
+		Local ind:TExpr[]
+		For Local i:Int = 0 Until index.length
+			ind = ind + [CopyExpr(index[i])]
+		Next
+		Return New TArraySizeExpr.Create( CopyExpr(expr), val, ind )
+	End Method
+
+	Method Semant:TExpr()
+		If exprType Return Self
+
+		expr=expr.Semant()
+		
+		For Local i:Int = 0 Until index.length
+			index[i]=index[i].SemantAndCast( TType.intType )
+		Next
+		
+		exprType=TType.intPointerType
+		Return Self
+	End Method
+
+	Method Trans$()
+		Return _trans.TransArraySizeExpr( Self )
+	End Method
+
+End Type
+
 Type TIdentTypeExpr Extends TExpr
 	Field cdecl:TClassDecl
 

+ 33 - 12
parser.bmx

@@ -1,4 +1,4 @@
-' Copyright (c) 2013-2014 Bruce A Henderson & Ronny Otto
+' Copyright (c) 2013-2014 Bruce A Henderson
 '
 ' Based on the public domain Monkey "trans" by Mark Sibly
 '
@@ -89,7 +89,7 @@ Type TForEachinStmt Extends TStmt
 
 			Local cmpExpr:TExpr=New TBinaryCompareExpr.Create( "<",New TVarExpr.Create( indexTmp ),lenExpr )
 
-			Local indexExpr:TExpr=New TIndexExpr.Create( New TVarExpr.Create( exprTmp ),New TVarExpr.Create( indexTmp ) )
+			Local indexExpr:TExpr=New TIndexExpr.Create( New TVarExpr.Create( exprTmp ),[New TVarExpr.Create( indexTmp )] )
 			Local addExpr:TExpr=New TBinaryMathExpr.Create( "+",New TVarExpr.Create( indexTmp ),New TConstExpr.Create( TType.intType,"1" ) )
 
 			block.stmts.AddFirst New TAssignStmt.Create( "=",New TVarExpr.Create( indexTmp ),addExpr )
@@ -665,8 +665,13 @@ Type TParser
 			NextToke
 			Local ty:TType=ParseType()
 			If CParse( "[" )
-				Local ln:TExpr=ParseExpr()
-				Parse "]"
+				Local ln:TExpr[]
+				Repeat
+					ln = ln + [ParseExpr()]
+					If CParse("]") Exit
+					Parse ","
+				Forever
+				'Parse "]"
 				While CParse( "[]" )
 					ty=New TArrayType.Create( ty)
 				Wend
@@ -901,7 +906,6 @@ Type TParser
 				End If
 
 			Case "["
-
 				NextToke
 				If CParse( ".." )
 					If _toke="]"
@@ -909,6 +913,7 @@ Type TParser
 					Else
 						expr=New TSliceExpr.Create( expr,Null,ParseExpr() )
 					EndIf
+					Parse "]"
 				Else
 					Local from:TExpr=ParseExpr()
 					If CParse( ".." )
@@ -917,11 +922,22 @@ Type TParser
 						Else
 							expr=New TSliceExpr.Create( expr,from,ParseExpr() )
 						EndIf
+						Parse "]"
 					Else
-						expr=New TIndexExpr.Create( expr,from )
+						Local ind:TExpr[] = [from]
+						Repeat
+							If CParse("]") Then
+								Exit
+							End If
+						
+							Parse ","							
+
+							ind = ind + [ParseExpr()]
+						Forever
+						
+						expr=New TIndexExpr.Create( expr,ind )
 					EndIf
 				EndIf
-				Parse "]"
 			Default
 				Return expr
 			End Select
@@ -1028,11 +1044,11 @@ Type TParser
 			Case "=","<",">","<=","=<",">=","=>","<>"
 				NextToke
 				' <= or =>
-				If (op=">" And (_toke="=")) OR (op="=" And (_toke=">"))
+				If (op=">" And (_toke="=")) Or (op="=" And (_toke=">"))
 					op:+_toke
 					NextToke
 				' <> or <= or =<
-				Else If (op="<" and _toke=">") OR (op="<" and _toke="=") OR (op="=" and _toke="<")
+				Else If (op="<" And _toke=">") Or (op="<" And _toke="=") Or (op="=" And _toke="<")
 					op:+_toke
 					NextToke
 				EndIf
@@ -1554,13 +1570,18 @@ Type TParser
 			If CParse( "=" )
 				init=ParseExpr()
 			Else If CParse( "[" )
-				Local ln:TExpr=ParseExpr()
-				Parse "]"
+				Local ln:TExpr[]
+				Repeat
+					ln = ln + [ParseExpr()]
+					If CParse("]") Exit
+					Parse(",")
+				Forever
+				'Parse "]"
 				While CParse( "[]" )
 					ty=New TArrayType.Create(ty)
 				Wend
 				init=New TNewArrayExpr.Create( ty,ln)
-				ty=New TArrayType.Create( ty )
+				ty=New TArrayType.Create( ty, ln.length )
 			Else If _toke = "(" Then
 	 			' function pointer?
 

+ 7 - 7
stmt.bmx

@@ -1,26 +1,26 @@
-' Copyright (c) 2013-2014 Bruce A Henderson & Ronny Otto 
+' Copyright (c) 2013-2014 Bruce A Henderson
 '
 ' Based on the public domain Monkey "trans" by Mark Sibly
-' 
+'
 ' This software is provided 'as-is', without any express or implied
 ' warranty. In no event will the authors be held liable for any damages
 ' arising from the use of this software.
-' 
+'
 ' Permission is granted to anyone to use this software for any purpose,
 ' including commercial applications, and to alter it and redistribute it
 ' freely, subject to the following restrictions:
-' 
+'
 '    1. The origin of this software must not be misrepresented; you must not
 '    claim that you wrote the original software. If you use this software
 '    in a product, an acknowledgment in the product documentation would be
 '    appreciated but is not required.
-' 
+'
 '    2. Altered source versions must be plainly marked as such, and must not be
 '    misrepresented as being the original software.
-' 
+'
 '    3. This notice may not be removed or altered from any source
 '    distribution.
-' 
+'
 
 Type TStmt
 	Field errInfo$

+ 40 - 0
tests/framework/language/arrays_0.bmx

@@ -0,0 +1,40 @@
+SuperStrict
+
+Framework BRL.Standardio
+
+Local a1:Int[] = [1,2,3,4,5,6,7,8,9,10]
+
+Local b1:Int[10]
+
+Local c1:Int[2,5]
+
+For Local i:Int = 0 Until a1.length
+	b1[i] = a1[i]
+	
+	c1[i/5,i Mod 5] = a1[i]
+Next
+
+Local s:String = "b1 = ["
+For Local i:Int = 0 Until a1.length
+	If i Then
+		s :+ ","
+	End If
+
+	s :+ b1[i]
+Next
+
+Print s + "]"
+
+s = "c1 = ["
+Local n:Int
+For Local x:Int = 0 Until 2
+	For Local y:Int = 0 Until 5
+		If n Then
+			s :+ ","
+		End If
+		n :+ 1
+		s:+ c1[x,y]
+	Next
+Next
+
+Print s + "]"

+ 28 - 0
tests/framework/types/global_01.bmx

@@ -0,0 +1,28 @@
+SuperStrict
+
+Framework BRL.Standardio
+
+
+' instance no init
+Global instance:TInstanceType
+
+Global instInit:TInstanceType = New TInstanceType
+
+If Not instance Then
+	Print "No Instance"
+Else
+	Print "Has Instance"
+End If
+
+If Not instInit Then
+	Print "No InstInit"
+Else
+	Print "Has InstInit"
+End If
+
+
+Type TInstanceType
+
+End Type
+
+

+ 22 - 0
tests/framework/types/global_02.bmx

@@ -0,0 +1,22 @@
+SuperStrict
+
+Framework BRL.Standardio
+
+
+If Not TInstanceType.instance Then
+	Print "No Instance"
+Else
+	Print "Has Instance"
+End If
+
+If Not TInstanceType.instInit Then
+	Print "No InstInit"
+Else
+	Print "Has InstInit"
+End If
+
+Type TInstanceType
+	Global instance:TInstanceType
+	Global instInit:TInstanceType = New TInstanceType
+
+End Type

+ 1 - 0
tests/mods.conf

@@ -50,3 +50,4 @@ brl.basic
 brl.httpstream
 pub.oggvorbis
 brl.oggloader
+brl.wavloader

+ 7 - 7
toker.bmx

@@ -1,26 +1,26 @@
-' Copyright (c) 2013-2014 Bruce A Henderson & Ronny Otto 
+' Copyright (c) 2013-2014 Bruce A Henderson
 '
 ' Based on the public domain Monkey "trans" by Mark Sibly
-' 
+'
 ' This software is provided 'as-is', without any express or implied
 ' warranty. In no event will the authors be held liable for any damages
 ' arising from the use of this software.
-' 
+'
 ' Permission is granted to anyone to use this software for any purpose,
 ' including commercial applications, and to alter it and redistribute it
 ' freely, subject to the following restrictions:
-' 
+'
 '    1. The origin of this software must not be misrepresented; you must not
 '    claim that you wrote the original software. If you use this software
 '    in a product, an acknowledgment in the product documentation would be
 '    appreciated but is not required.
-' 
+'
 '    2. Altered source versions must be plainly marked as such, and must not be
 '    misrepresented as being the original software.
-' 
+'
 '    3. This notice may not be removed or altered from any source
 '    distribution.
-' 
+'
 SuperStrict
 
 Import "config.bmx"

+ 13 - 8
translator.bmx

@@ -1,26 +1,26 @@
-' Copyright (c) 2013-2014 Bruce A Henderson & Ronny Otto 
+' Copyright (c) 2013-2014 Bruce A Henderson
 '
 ' Based on the public domain Monkey "trans" by Mark Sibly
-' 
+'
 ' This software is provided 'as-is', without any express or implied
 ' warranty. In no event will the authors be held liable for any damages
 ' arising from the use of this software.
-' 
+'
 ' Permission is granted to anyone to use this software for any purpose,
 ' including commercial applications, and to alter it and redistribute it
 ' freely, subject to the following restrictions:
-' 
+'
 '    1. The origin of this software must not be misrepresented; you must not
 '    claim that you wrote the original software. If you use this software
 '    in a product, an acknowledgment in the product documentation would be
 '    appreciated but is not required.
-' 
+'
 '    2. Altered source versions must be plainly marked as such, and must not be
 '    misrepresented as being the original software.
-' 
+'
 '    3. This notice may not be removed or altered from any source
 '    distribution.
-' 
+'
 
 Global _trans:TTranslator
 
@@ -128,6 +128,7 @@ Type TTranslator
 
 			If TModuleDecl( decl )
 				munged=decl.ModuleScope().munged+"_"+id
+				munged = munged.Replace(".", "_")
 			EndIf
 
 '		End Select
@@ -284,6 +285,8 @@ End Rem
 		Case "=" Return "=="
 		Case "<>" Return "!="
 		Case "<","<=",">",">=" Return op
+		Case "=<" Return "<="
+		Case "=>" Return ">="
 		Case "&","|" Return op
 		Case "~~" Return "^"
 		End Select
@@ -318,7 +321,7 @@ End Rem
 			Case "*","/","mod" Return 4
 			Case "+","-" Return 5
 			Case "shl","shr", "sar" Return 6
-			Case "<","<=",">",">=" Return 7
+			Case "<","<=",">",">=", "=<", "=>" Return 7
 			Case "=","<>" Return 8
 			Case "&" Return 9
 			Case "~~" Return 10
@@ -398,6 +401,8 @@ End Rem
 	
 	Method TransArrayExpr$( expr:TArrayExpr ) Abstract
 	
+	Method TransArraySizeExpr$ ( expr:TArraySizeExpr ) Abstract
+	
 	Method TransIntrinsicExpr$( decl:TDecl,expr:TExpr,args:TExpr[]=Null ) Abstract
 
 	Method BeginLocalScope()

+ 11 - 9
type.bmx

@@ -1,26 +1,26 @@
-' Copyright (c) 2013-2014 Bruce A Henderson & Ronny Otto 
+' Copyright (c) 2013-2014 Bruce A Henderson
 '
 ' Based on the public domain Monkey "trans" by Mark Sibly
-' 
+'
 ' This software is provided 'as-is', without any express or implied
 ' warranty. In no event will the authors be held liable for any damages
 ' arising from the use of this software.
-' 
+'
 ' Permission is granted to anyone to use this software for any purpose,
 ' including commercial applications, and to alter it and redistribute it
 ' freely, subject to the following restrictions:
-' 
+'
 '    1. The origin of this software must not be misrepresented; you must not
 '    claim that you wrote the original software. If you use this software
 '    in a product, an acknowledgment in the product documentation would be
 '    appreciated but is not required.
-' 
+'
 '    2. Altered source versions must be plainly marked as such, and must not be
 '    misrepresented as being the original software.
-' 
+'
 '    3. This notice may not be removed or altered from any source
 '    distribution.
-' 
+'
 SuperStrict
 
 Import "config.bmx"
@@ -406,9 +406,11 @@ End Type
 
 Type TArrayType Extends TType
 	Field elemType:TType
+	Field dims:Int
 	
-	Method Create:TArrayType( elemType:TType )
+	Method Create:TArrayType( elemType:TType, dims:Int = 1 )
 		Self.elemType=elemType
+		Self.dims = dims
 		Return Self
 	End Method
 	
@@ -430,7 +432,7 @@ Type TArrayType Extends TType
 	
 	Method Semant:TType()
 		Local ty:TType=elemType.Semant()
-		If ty<>elemType Return New TArrayType.Create( ty )
+		If ty<>elemType Return New TArrayType.Create( ty, dims )
 		Return Self
 	End Method