Răsfoiți Sursa

Modified a bit the recognition of pass by reference and added a check that raise an error in case of declare a parameter by reference and give default value.

mingodad 13 ani în urmă
părinte
comite
a98cbf7ba6
1 a modificat fișierele cu 8 adăugiri și 7 ștergeri
  1. 8 7
      squirrel/sqcompiler.cpp

+ 8 - 7
squirrel/sqcompiler.cpp

@@ -1608,6 +1608,7 @@ if(color == "yellow"){
 		SQInteger defparams = 0;
 		SQInteger is_reference = 0;
 		while(_token!=_SC(')')) {
+            is_reference = 0; //reset is_reference
 			if(_token == TK_VARPARAMS) {
 				if(defparams > 0) Error(_SC("function with default parameters cannot have variable number of parameters"));
 				funcstate->AddParameter(_fs->CreateString(_SC("vargv")), _scope.nested+1);
@@ -1616,15 +1617,15 @@ if(color == "yellow"){
 				if(_token != _SC(')')) Error(_SC("expected ')'"));
 				break;
 			}
-			else if(_token == _SC('&')){
-			    is_reference = 1;
-			    Lex();
-			}
-			else {
+			else {
+			    if(_token == _SC('&')){
+                    is_reference = 1;
+                    Lex();
+                }
 				paramname = Expect(TK_IDENTIFIER);
 				funcstate->AddParameter(paramname, _scope.nested+1, is_reference ? _VAR_REFERENCE : _VAR_ANY);
-				is_reference = 0; //reset is_reference
-				if(_token == _SC('=')) {
+				if(_token == _SC('=')) {
+				    if(is_reference) Error(_SC("parameter passed by reference can't have default value"));
 					Lex();
 					Expression();
 					funcstate->AddDefaultParam(_fs->TopTarget());