Browse Source

Fixed generation of numeric Vars.

woollybah 11 years ago
parent
commit
a7936bf4a1
2 changed files with 250 additions and 47 deletions
  1. 11 47
      ctranslator.bmx
  2. 239 0
      tests/framework/language/var_02.bmx

+ 11 - 47
ctranslator.bmx

@@ -561,7 +561,7 @@ t:+"NULLNULLNULL"
 	End Method
 
 	Method TransFunc$( decl:TFuncDecl,args:TExpr[],lhs:TExpr, sup:Int = False, scope:TScopeDecl = Null )
-'If decl.ident = "ToString" DebugStop
+'If decl.ident = "Sqr" DebugStop
 		' for calling the super class method instead
 		Local tSuper:String
 		If sup Then
@@ -1182,6 +1182,10 @@ EndRem
 
 		Local dst:TType=expr.exprType
 		Local src:TType=expr.expr.exprType
+		
+		If TNumericType(src) And (src._flags & TType.T_VAR) Then
+			t = Bra("*" + t)
+		End If
 
 		If (dst._flags & TType.T_VARPTR) Or (dst._flags & TType.T_VAR) Then
 			If Not TConstExpr(expr.expr) Then
@@ -1276,12 +1280,7 @@ EndRem
 			If TByteType( src) Return Bra("(BBINT)"+t)
 			If TShortType( src) Return Bra("(BBINT)"+t)
 			If TBoolType( src ) Return t
-			If TIntType( src ) Then
-				If src._flags & TType.T_VAR Then
-					Return Bra("*" + t)
-				End If
-				Return t
-			End If
+			If TIntType( src ) Return t
 			If TFloatType( src ) Return Bra("(BBINT)"+t)
 			If TDoubleType( src ) Return Bra("(BBINT)"+t)
 			If TLongType( src ) Return Bra("(BBINT)"+t)
@@ -1294,12 +1293,7 @@ EndRem
 			If TByteType( src) Return Bra("(BBLONG)"+t)
 			If TShortType( src) Return Bra("(BBLONG)"+t)
 			If TIntType( src) Return Bra("(BBLONG)"+t)
-			If TLongType( src ) Then
-				If src._flags & TType.T_VAR Then
-					Return Bra("*" + t)
-				End If
-				Return t
-			End If
+			If TLongType( src ) Return t
 			If TFloatType( src ) Return Bra("(BBLONG)"+t)
 			If TDoubleType( src ) Return Bra("(BBLONG)"+t)
 			If TStringType( src ) Return "bbStringToLong" + Bra(t)
@@ -1310,12 +1304,7 @@ EndRem
 			If TByteType( src ) Return Bra("(BBFLOAT)"+t)
 			If TIntType( src ) Return Bra("(BBFLOAT)"+t)
 			If TShortType( src ) Return Bra("(BBFLOAT)"+t)
-			If TFloatType( src ) Then
-				If src._flags & TType.T_VAR Then
-					Return Bra("*" + t)
-				End If
-				Return t
-			End If
+			If TFloatType( src ) Return t
 			If TDoubleType( src ) Return Bra("(BBFLOAT)"+t)
 			If TLongType( src ) Return Bra("(BBFLOAT)"+t)
 			If TStringType( src ) Return "bbStringToFloat" + Bra(t)
@@ -1326,28 +1315,13 @@ EndRem
 			If TByteType( src ) Return Bra("(BBDOUBLE)"+t)
 			If TIntType( src ) Return Bra("(BBDOUBLE)"+t)
 			If TShortType( src ) Return Bra("(BBDOUBLE)"+t)
-			If TDoubleType( src ) Then
-				If src._flags & TType.T_VAR Then
-					Return Bra("*" + t)
-				End If
-				Return t
-			End If
+			If TDoubleType( src ) Return t
 			If TFloatType( src ) Return Bra("(BBDOUBLE)"+t)
 			If TLongType( src ) Return Bra("(BBDOUBLE)"+t)
 			If TStringType( src ) Return "bbStringToDouble" + Bra(t)
 			'If TDoubleVarPtrType( src ) Return Bra("*" + t)
 			'If TPointerType( src ) Return Bra("(BBDOUBLE)"+t)
 		Else If TStringType( dst )
-
-			If src._flags & TType.T_VAR Then
-				If TByteType( src ) Return "bbStringFromInt"+Bra( "*" + t )
-				If TShortType( src ) Return "bbStringFromInt"+Bra( "*" + t )
-				If TIntType( src ) Return "bbStringFromInt"+Bra( "*" + t )
-				If TLongType( src ) Return "bbStringFromLong"+Bra( "*" + t )
-				If TFloatType( src ) Return "bbStringFromFloat"+Bra( "*" + t )
-				If TDoubleType( src ) Return "bbStringFromDouble"+Bra( "*" + t )
-			End If
-
 			If TBoolType( src ) Return "bbStringFromInt"+Bra( t )
 			If TByteType( src ) Return "bbStringFromInt"+Bra( t )
 			If TShortType( src ) Return "bbStringFromInt"+Bra( t )
@@ -1378,12 +1352,7 @@ EndRem
 'DebugStop
 		Else If TByteType( dst )
 			If TBoolType( src ) Return Bra( t )
-			If TByteType( src) Then
-				If src._flags & TType.T_VAR Then
-					Return Bra("*" + t)
-				End If
-				Return t
-			End If
+			If TByteType( src) Return t
 			If TShortType( src ) Return Bra("(BBBYTE)"+t)
 			If TIntType( src ) Return Bra("(BBBYTE)"+t)
 			If TFloatType( src ) Return Bra("(BBBYTE)"+t)
@@ -1393,12 +1362,7 @@ EndRem
 			'If TByteVarPtrType( src ) Return Bra("*" + t)
 		Else If TShortType( dst )
 			If TBoolType( src ) Return Bra( t )
-			If TShortType( src) Then
-				If src._flags & TType.T_VAR Then
-					Return Bra("*" + t)
-				End If
-				Return t
-			End If
+			If TShortType( src) Return t
 			If TByteType( src) Return Bra("(BBSHORT)"+t)
 			If TIntType( src ) Return Bra("(BBSHORT)"+t)
 			If TFloatType( src ) Return Bra("(BBSHORT)"+t)

+ 239 - 0
tests/framework/language/var_02.bmx

@@ -0,0 +1,239 @@
+SuperStrict
+
+Framework brl.standardio
+Import brl.math
+
+Local n1:Byte   = 10
+Local n2:Short  = 10
+Local n3:Int    = 10
+Local n4:Long   = 10
+Local n5:Float  = 10.0
+Local n6:Double = 10.0
+
+Print Testb1(n1)
+Print Testb2(n2)
+Print Testb3(n3)
+Print Testb4(n4)
+Print Testb5(n5)
+Print Testb6(n6)
+
+Print Tests1(n1)
+Print Tests2(n2)
+Print Tests3(n3)
+Print Tests4(n4)
+Print Tests5(n5)
+Print Tests6(n6)
+
+Print Testi1(n1)
+Print Testi2(n2)
+Print Testi3(n3)
+Print Testi4(n4)
+Print Testi5(n5)
+Print Testi6(n6)
+
+Print Testl1(n1)
+Print Testl2(n2)
+Print Testl3(n3)
+Print Testl4(n4)
+Print Testl5(n5)
+Print Testl6(n6)
+
+Print Testf1(n1)
+Print Testf2(n2)
+Print Testf3(n3)
+Print Testf4(n4)
+Print Testf5(n5)
+Print Testf6(n6)
+
+Print Testd1(n1)
+Print Testd2(n2)
+Print Testd3(n3)
+Print Testd4(n4)
+Print Testd5(n5)
+Print Testd6(n6)
+
+
+Function Testb1:Byte( point_x:Byte Var) 
+     Local a:Byte = point_x
+     Return a
+End Function
+
+Function Testb2:Byte( point_x:Short Var) 
+     Local a:Byte = point_x
+     Return a
+End Function
+
+Function Testb3:Byte( point_x:Int Var) 
+     Local a:Byte = point_x
+     Return a
+End Function
+
+Function Testb4:Byte( point_x:Long Var) 
+     Local a:Byte = point_x
+     Return a
+End Function
+
+Function Testb5:Byte( point_x:Float Var) 
+     Local a:Byte = point_x
+     Return a
+End Function
+
+Function Testb6:Byte( point_x:Double Var) 
+     Local a:Byte = point_x
+     Return a
+End Function
+
+
+Function Tests1:Short( point_x:Byte Var) 
+     Local a:Short = point_x
+     Return a
+End Function
+
+Function Tests2:Short( point_x:Short Var) 
+     Local a:Short = point_x
+     Return a
+End Function
+
+Function Tests3:Short( point_x:Int Var) 
+     Local a:Short = point_x
+     Return a
+End Function
+
+Function Tests4:Short( point_x:Long Var) 
+     Local a:Short = point_x
+     Return a
+End Function
+
+Function Tests5:Short( point_x:Float Var) 
+     Local a:Short = point_x
+     Return a
+End Function
+
+Function Tests6:Short( point_x:Double Var) 
+     Local a:Short = point_x
+     Return a
+End Function
+
+
+Function Testi1:Int( point_x:Byte Var) 
+     Local a:Int = point_x
+     Return a
+End Function
+
+Function Testi2:Int( point_x:Short Var) 
+     Local a:Int = point_x
+     Return a
+End Function
+
+Function Testi3:Int( point_x:Int Var) 
+     Local a:Int = point_x
+     Return a
+End Function
+
+Function Testi4:Int( point_x:Long Var) 
+     Local a:Int = point_x
+     Return a
+End Function
+
+Function Testi5:Int( point_x:Float Var) 
+     Local a:Int = point_x
+     Return a
+End Function
+
+Function Testi6:Int( point_x:Double Var) 
+     Local a:Int = point_x
+     Return a
+End Function
+
+
+Function Testl1:Long( point_x:Byte Var) 
+     Local a:Long = point_x
+     Return a
+End Function
+
+Function Testl2:Long( point_x:Short Var) 
+     Local a:Long = point_x
+     Return a
+End Function
+
+Function Testl3:Long( point_x:Int Var) 
+     Local a:Long = point_x
+     Return a
+End Function
+
+Function Testl4:Long( point_x:Long Var) 
+     Local a:Long = point_x
+     Return a
+End Function
+
+Function Testl5:Long( point_x:Float Var) 
+     Local a:Long = point_x
+     Return a
+End Function
+
+Function Testl6:Long( point_x:Double Var) 
+     Local a:Long = point_x
+     Return a
+End Function
+
+
+Function Testf1:Float( point_x:Byte Var) 
+     Local a:Float=Sqr(point_x)
+     Return a
+End Function
+
+Function Testf2:Float( point_x:Short Var) 
+     Local a:Float=Sqr(point_x)
+     Return a
+End Function
+
+Function Testf3:Float( point_x:Int Var) 
+     Local a:Float=Sqr(point_x)
+     Return a
+End Function
+
+Function Testf4:Float( point_x:Long Var) 
+     Local a:Float=Sqr(point_x)
+     Return a
+End Function
+
+Function Testf5:Float( point_x:Float Var) 
+     Local a:Float=Sqr(point_x)
+     Return a
+End Function
+
+Function Testf6:Float( point_x:Double Var) 
+     Local a:Float=Sqr(point_x)
+     Return a
+End Function
+
+
+Function Testd1:Double( point_x:Byte Var) 
+     Local a:Double=Sqr(point_x)
+     Return a
+End Function
+
+Function Testd2:Double( point_x:Short Var) 
+     Local a:Double=Sqr(point_x)
+     Return a
+End Function
+
+Function Testd3:Double( point_x:Int Var) 
+     Local a:Double=Sqr(point_x)
+     Return a
+End Function
+
+Function Testd4:Double( point_x:Long Var) 
+     Local a:Double=Sqr(point_x)
+     Return a
+End Function
+
+Function Testd5:Double( point_x:Float Var) 
+     Local a:Double=Sqr(point_x)
+     Return a
+End Function
+
+Function Testd6:Double( point_x:Double Var) 
+     Local a:Double=Sqr(point_x)
+     Return a
+End Function