Переглянути джерело

Don't accept new expressions as var args. Fixes #587.

Brucey 3 роки тому
батько
коміт
d6af7086ac
1 змінених файлів з 1 додано та 12 видалено
  1. 1 12
      expr.bmx

+ 1 - 12
expr.bmx

@@ -156,21 +156,10 @@ Type TExpr
 				If funcDecl.argDecls[i].ty._flags & TType.T_VAR Then
 
 					If TConstExpr(argExpr) Or TBinaryExpr(argExpr) Or (TIndexExpr(argExpr) And TStringType(TIndexExpr(argExpr).expr.exprType)) Or ..
-							TInvokeExpr(argExpr) Or TInvokeMemberExpr(argExpr) Then
+							TInvokeExpr(argExpr) Or TInvokeMemberExpr(argExpr) Or TNewObjectExpr(argExpr) or TNewArrayExpr(argExpr) Then
 						Err "Expression for 'Var' parameter must be a variable or an element of an array or pointer"
 					End If
 
-					' Passing a "new" object into a Var, requires us to create a local variable and pass its address instead.
-					If TNewObjectExpr(argExpr) Then
-						Local tmp:TLocalDecl=New TLocalDecl.Create( "",TNewObjectExpr(argExpr).ty,argExpr,, True )
-						tmp.Semant()
-						Local v:TVarExpr = New TVarExpr.Create( tmp )
-						Local stmt:TExpr = New TStmtExpr.Create( New TDeclStmt.Create( tmp ), v ).Semant()
-						stmt.exprType = TNewObjectExpr(argExpr).ty
-						args[i] = stmt
-						argExpr = args[i]
-					End If
-					
 					If TVarExpr(argExpr) Or TMemberVarExpr(argExpr) Then
 						Local decl:TDecl
 						If TVarExpr(argExpr) Then