|  | @@ -215,69 +215,44 @@ static const struct EqualNode : public cmGeneratorExpressionNode
 | 
	
		
			
				|  |  |      const GeneratorExpressionContent* content,
 | 
	
		
			
				|  |  |      cmGeneratorExpressionDAGChecker* /*dagChecker*/) const override
 | 
	
		
			
				|  |  |    {
 | 
	
		
			
				|  |  | -    char* pEnd;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    int base = 0;
 | 
	
		
			
				|  |  | -    bool flipSign = false;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    const char* lhs = parameters[0].c_str();
 | 
	
		
			
				|  |  | -    if (cmHasLiteralPrefix(lhs, "0b") || cmHasLiteralPrefix(lhs, "0B")) {
 | 
	
		
			
				|  |  | -      base = 2;
 | 
	
		
			
				|  |  | -      lhs += 2;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    if (cmHasLiteralPrefix(lhs, "-0b") || cmHasLiteralPrefix(lhs, "-0B")) {
 | 
	
		
			
				|  |  | -      base = 2;
 | 
	
		
			
				|  |  | -      lhs += 3;
 | 
	
		
			
				|  |  | -      flipSign = true;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    if (cmHasLiteralPrefix(lhs, "+0b") || cmHasLiteralPrefix(lhs, "+0B")) {
 | 
	
		
			
				|  |  | -      base = 2;
 | 
	
		
			
				|  |  | -      lhs += 3;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    long lnum = strtol(lhs, &pEnd, base);
 | 
	
		
			
				|  |  | -    if (pEnd == lhs || *pEnd != '\0' || errno == ERANGE) {
 | 
	
		
			
				|  |  | -      reportError(context, content->GetOriginalExpression(),
 | 
	
		
			
				|  |  | -                  "$<EQUAL> parameter " + parameters[0] +
 | 
	
		
			
				|  |  | -                    " is not a valid integer.");
 | 
	
		
			
				|  |  | -      return std::string();
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    if (flipSign) {
 | 
	
		
			
				|  |  | -      lnum = -lnum;
 | 
	
		
			
				|  |  | +    long numbers[2];
 | 
	
		
			
				|  |  | +    for (int i = 0; i < 2; ++i) {
 | 
	
		
			
				|  |  | +      if (!ParameterToLong(parameters[i].c_str(), &numbers[i])) {
 | 
	
		
			
				|  |  | +        reportError(context, content->GetOriginalExpression(),
 | 
	
		
			
				|  |  | +                    "$<EQUAL> parameter " + parameters[i] +
 | 
	
		
			
				|  |  | +                      " is not a valid integer.");
 | 
	
		
			
				|  |  | +        return {};
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +    return numbers[0] == numbers[1] ? "1" : "0";
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    base = 0;
 | 
	
		
			
				|  |  | -    flipSign = false;
 | 
	
		
			
				|  |  | +  static bool ParameterToLong(const char* param, long* outResult)
 | 
	
		
			
				|  |  | +  {
 | 
	
		
			
				|  |  | +    const char isNegative = param[0] == '-';
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    const char* rhs = parameters[1].c_str();
 | 
	
		
			
				|  |  | -    if (cmHasLiteralPrefix(rhs, "0b") || cmHasLiteralPrefix(rhs, "0B")) {
 | 
	
		
			
				|  |  | -      base = 2;
 | 
	
		
			
				|  |  | -      rhs += 2;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    if (cmHasLiteralPrefix(rhs, "-0b") || cmHasLiteralPrefix(rhs, "-0B")) {
 | 
	
		
			
				|  |  | +    int base = 0;
 | 
	
		
			
				|  |  | +    if (cmHasLiteralPrefix(param, "0b") || cmHasLiteralPrefix(param, "0B")) {
 | 
	
		
			
				|  |  |        base = 2;
 | 
	
		
			
				|  |  | -      rhs += 3;
 | 
	
		
			
				|  |  | -      flipSign = true;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    if (cmHasLiteralPrefix(rhs, "+0b") || cmHasLiteralPrefix(rhs, "+0B")) {
 | 
	
		
			
				|  |  | +      param += 2;
 | 
	
		
			
				|  |  | +    } else if (cmHasLiteralPrefix(param, "-0b") ||
 | 
	
		
			
				|  |  | +               cmHasLiteralPrefix(param, "-0B") ||
 | 
	
		
			
				|  |  | +               cmHasLiteralPrefix(param, "+0b") ||
 | 
	
		
			
				|  |  | +               cmHasLiteralPrefix(param, "+0B")) {
 | 
	
		
			
				|  |  |        base = 2;
 | 
	
		
			
				|  |  | -      rhs += 3;
 | 
	
		
			
				|  |  | +      param += 3;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    long rnum = strtol(rhs, &pEnd, base);
 | 
	
		
			
				|  |  | -    if (pEnd == rhs || *pEnd != '\0' || errno == ERANGE) {
 | 
	
		
			
				|  |  | -      reportError(context, content->GetOriginalExpression(),
 | 
	
		
			
				|  |  | -                  "$<EQUAL> parameter " + parameters[1] +
 | 
	
		
			
				|  |  | -                    " is not a valid integer.");
 | 
	
		
			
				|  |  | -      return std::string();
 | 
	
		
			
				|  |  | +    char* pEnd;
 | 
	
		
			
				|  |  | +    long result = strtol(param, &pEnd, base);
 | 
	
		
			
				|  |  | +    if (pEnd == param || *pEnd != '\0' || errno == ERANGE) {
 | 
	
		
			
				|  |  | +      return false;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    if (flipSign) {
 | 
	
		
			
				|  |  | -      rnum = -rnum;
 | 
	
		
			
				|  |  | +    if (isNegative && result > 0) {
 | 
	
		
			
				|  |  | +      result *= -1;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    return lnum == rnum ? "1" : "0";
 | 
	
		
			
				|  |  | +    *outResult = result;
 | 
	
		
			
				|  |  | +    return true;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  } equalNode;
 | 
	
		
			
				|  |  |  
 |