浏览代码

Enable indexing of struct pointers, and passing struct Self as Var.

Brucey 4 年之前
父节点
当前提交
89f76df04c
共有 2 个文件被更改,包括 3 次插入3 次删除
  1. 1 1
      ctranslator.bmx
  2. 2 2
      expr.bmx

+ 1 - 1
ctranslator.bmx

@@ -676,7 +676,7 @@ Type TCTranslator Extends TTranslator
 					' *sigh*
 					' if var is going to var, remove any leading dereference character.
 					' rather hacky. Would be better to cast variable to varptr during semanting (well done if you can work out where!)
-					If arg.exprType.EqualsType( ty.ActualType() ) And (ty._flags & TType.T_VAR) And (arg.exprType._flags & TType.T_VAR) Then
+					If arg.exprType.EqualsType( ty.ActualType() ) And (ty._flags & TType.T_VAR) And ( (arg.exprType._flags & TType.T_VAR) Or (TSelfExpr(arg) And TObjectType(arg.exprType) And TObjectType(arg.exprType).classdecl.IsStruct())) Then
 						If tc.startswith("*") Then
 							tc = tc[1..]
 						End If

+ 2 - 2
expr.bmx

@@ -153,7 +153,7 @@ 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) Or TSelfExpr(argExpr) Then
+							TInvokeExpr(argExpr) Or TInvokeMemberExpr(argExpr) Then
 						Err "Expression for 'Var' parameter must be a variable or an element of an array or pointer"
 					End If
 
@@ -2272,7 +2272,7 @@ Type TIndexExpr Extends TExpr
 		Next
 		
 		' operator overload?
-		If TObjectType(expr.exprType) Then
+		If TObjectType(expr.exprType) And Not IsPointerType( expr.exprType, 0 , TType.T_POINTER | TType.T_VARPTR) Then
 			Local args:TExpr[]
 			Local op:String
 			If set Then