Skip to content

Commit

Permalink
[js] Fix long literals under a comparison.
Browse files Browse the repository at this point in the history
  • Loading branch information
pfusik committed May 31, 2023
1 parent 0822373 commit 1447c4b
Show file tree
Hide file tree
Showing 9 changed files with 124 additions and 108 deletions.
14 changes: 14 additions & 0 deletions AST.ci
Original file line number Diff line number Diff line change
Expand Up @@ -635,6 +635,20 @@ public class CiBinaryExpr : CiExpr
}
}
public override void Accept(CiVisitor! visitor, CiPriority parent) { visitor.VisitBinaryExpr(this, parent); }
public bool IsRel()
{
switch (this.Op) {
case CiToken.Equal:
case CiToken.NotEqual:
case CiToken.Less:
case CiToken.LessOrEqual:
case CiToken.Greater:
case CiToken.GreaterOrEqual:
return true;
default:
return false;
}
}
public bool IsAssign()
{
switch (this.Op) {
Expand Down
22 changes: 11 additions & 11 deletions GenBase.ci
Original file line number Diff line number Diff line change
Expand Up @@ -990,11 +990,6 @@ public abstract class GenBase : CiVisitor
WriteBinaryExpr(expr, parent > child, child, op, child);
}

void WriteRel!(CiBinaryExpr expr, CiPriority parent, string op)
{
WriteBinaryExpr(expr, parent > CiPriority.CondAnd, CiPriority.Rel, op, CiPriority.Rel);
}

protected static string GetEqOp(bool not) => not ? " != " : " == ";

protected virtual void WriteEqualOperand!(CiExpr expr, CiExpr other)
Expand All @@ -1018,6 +1013,11 @@ public abstract class GenBase : CiVisitor
WriteEqualExpr(left, right, parent, GetEqOp(not));
}

void WriteRel!(CiBinaryExpr expr, CiPriority parent, string op)
{
WriteBinaryExpr(expr, parent > CiPriority.CondAnd, CiPriority.Rel, op, CiPriority.Rel);
}

protected virtual void WriteAnd!(CiBinaryExpr expr, CiPriority parent)
{
WriteBinaryExpr(expr, parent > CiPriority.CondAnd && parent != CiPriority.And, CiPriority.And, " & ", CiPriority.And);
Expand Down Expand Up @@ -1078,6 +1078,12 @@ public abstract class GenBase : CiVisitor
case CiToken.ShiftRight:
WriteBinaryExpr(expr, parent > CiPriority.Shift, CiPriority.Shift, " >> ", CiPriority.Mul);
break;
case CiToken.Equal:
WriteEqual(expr.Left, expr.Right, parent, false);
break;
case CiToken.NotEqual:
WriteEqual(expr.Left, expr.Right, parent, true);
break;
case CiToken.Less:
WriteRel(expr, parent, " < ");
break;
Expand All @@ -1090,12 +1096,6 @@ public abstract class GenBase : CiVisitor
case CiToken.GreaterOrEqual:
WriteRel(expr, parent, " >= ");
break;
case CiToken.Equal:
WriteEqual(expr.Left, expr.Right, parent, false);
break;
case CiToken.NotEqual:
WriteEqual(expr.Left, expr.Right, parent, true);
break;
case CiToken.And:
WriteAnd(expr, parent);
break;
Expand Down
2 changes: 1 addition & 1 deletion GenJs.ci
Original file line number Diff line number Diff line change
Expand Up @@ -432,7 +432,7 @@ public class GenJsNoModule : GenBase

protected override void WriteBinaryOperand!(CiExpr expr, CiPriority parent, CiBinaryExpr binary)
{
WriteCoerced(binary.Type, expr, parent);
WriteCoerced(binary.IsRel() ? expr.Type : binary.Type, expr, parent);
}

static bool IsIdentifier(string s)
Expand Down
4 changes: 2 additions & 2 deletions GenSwift.ci
Original file line number Diff line number Diff line change
Expand Up @@ -887,12 +887,12 @@ public class GenSwift : GenPySwift
}
}
break;
case CiToken.Equal:
case CiToken.NotEqual:
case CiToken.Less:
case CiToken.LessOrEqual:
case CiToken.Greater:
case CiToken.GreaterOrEqual:
case CiToken.Equal:
case CiToken.NotEqual:
CiType? typeComp = this.System.PromoteFloatingTypes(binary.Left.Type, binary.Right.Type);
if (typeComp != null && typeComp != expr.Type) {
WriteCoerced(typeComp, expr, parent);
Expand Down
17 changes: 3 additions & 14 deletions GenTs.ci
Original file line number Diff line number Diff line change
Expand Up @@ -158,20 +158,9 @@ public class GenTs : GenJs
protected override void WriteBinaryOperand!(CiExpr expr, CiPriority parent, CiBinaryExpr binary)
{
CiType type = binary.Type;
if (expr.Type is CiNumericType) {
switch (binary.Op) {
case CiToken.Equal:
case CiToken.NotEqual:
case CiToken.Less:
case CiToken.LessOrEqual:
case CiToken.Greater:
case CiToken.GreaterOrEqual:
// work around https://github.com/microsoft/TypeScript/issues/30540
type = this.System.PromoteNumericTypes(binary.Left.Type, binary.Right.Type);
break;
default:
break;
}
if (expr.Type is CiNumericType && binary.IsRel()) {
// work around https://github.com/microsoft/TypeScript/issues/30540
type = this.System.PromoteNumericTypes(binary.Left.Type, binary.Right.Type);
}
WriteCoerced(type, expr, parent);
}
Expand Down
56 changes: 30 additions & 26 deletions Transpiled.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1478,6 +1478,21 @@ void CiBinaryExpr::accept(CiVisitor * visitor, CiPriority parent) const
visitor->visitBinaryExpr(this, parent);
}

bool CiBinaryExpr::isRel() const
{
switch (this->op) {
case CiToken::equal:
case CiToken::notEqual:
case CiToken::less:
case CiToken::lessOrEqual:
case CiToken::greater:
case CiToken::greaterOrEqual:
return true;
default:
return false;
}
}

bool CiBinaryExpr::isAssign() const
{
switch (this->op) {
Expand Down Expand Up @@ -7107,11 +7122,6 @@ void GenBase::writeBinaryExpr2(const CiBinaryExpr * expr, CiPriority parent, CiP
writeBinaryExpr(expr, parent > child, child, op, child);
}

void GenBase::writeRel(const CiBinaryExpr * expr, CiPriority parent, std::string_view op)
{
writeBinaryExpr(expr, parent > CiPriority::condAnd, CiPriority::rel, op, CiPriority::rel);
}

std::string_view GenBase::getEqOp(bool not_)
{
return not_ ? " != " : " == ";
Expand All @@ -7138,6 +7148,11 @@ void GenBase::writeEqual(const CiExpr * left, const CiExpr * right, CiPriority p
writeEqualExpr(left, right, parent, getEqOp(not_));
}

void GenBase::writeRel(const CiBinaryExpr * expr, CiPriority parent, std::string_view op)
{
writeBinaryExpr(expr, parent > CiPriority::condAnd, CiPriority::rel, op, CiPriority::rel);
}

void GenBase::writeAnd(const CiBinaryExpr * expr, CiPriority parent)
{
writeBinaryExpr(expr, parent > CiPriority::condAnd && parent != CiPriority::and_, CiPriority::and_, " & ", CiPriority::and_);
Expand Down Expand Up @@ -7201,6 +7216,12 @@ void GenBase::visitBinaryExpr(const CiBinaryExpr * expr, CiPriority parent)
case CiToken::shiftRight:
writeBinaryExpr(expr, parent > CiPriority::shift, CiPriority::shift, " >> ", CiPriority::mul);
break;
case CiToken::equal:
writeEqual(expr->left.get(), expr->right.get(), parent, false);
break;
case CiToken::notEqual:
writeEqual(expr->left.get(), expr->right.get(), parent, true);
break;
case CiToken::less:
writeRel(expr, parent, " < ");
break;
Expand All @@ -7213,12 +7234,6 @@ void GenBase::visitBinaryExpr(const CiBinaryExpr * expr, CiPriority parent)
case CiToken::greaterOrEqual:
writeRel(expr, parent, " >= ");
break;
case CiToken::equal:
writeEqual(expr->left.get(), expr->right.get(), parent, false);
break;
case CiToken::notEqual:
writeEqual(expr->left.get(), expr->right.get(), parent, true);
break;
case CiToken::and_:
writeAnd(expr, parent);
break;
Expand Down Expand Up @@ -17948,7 +17963,7 @@ void GenJsNoModule::writeCharAt(const CiBinaryExpr * expr)

void GenJsNoModule::writeBinaryOperand(const CiExpr * expr, CiPriority parent, const CiBinaryExpr * binary)
{
writeCoerced(binary->type.get(), expr, parent);
writeCoerced(binary->isRel() ? expr->type.get() : binary->type.get(), expr, parent);
}

bool GenJsNoModule::isIdentifier(std::string_view s)
Expand Down Expand Up @@ -18977,19 +18992,8 @@ void GenTs::writeAsType(const CiVar * def)
void GenTs::writeBinaryOperand(const CiExpr * expr, CiPriority parent, const CiBinaryExpr * binary)
{
const CiType * type = binary->type.get();
if (dynamic_cast<const CiNumericType *>(expr->type.get())) {
switch (binary->op) {
case CiToken::equal:
case CiToken::notEqual:
case CiToken::less:
case CiToken::lessOrEqual:
case CiToken::greater:
case CiToken::greaterOrEqual:
type = this->system->promoteNumericTypes(binary->left->type, binary->right->type).get();
break;
default:
break;
}
if (dynamic_cast<const CiNumericType *>(expr->type.get()) && binary->isRel()) {
type = this->system->promoteNumericTypes(binary->left->type, binary->right->type).get();
}
writeCoerced(type, expr, parent);
}
Expand Down Expand Up @@ -20303,7 +20307,7 @@ void GenSwift::writeBinaryOperand(const CiExpr * expr, CiPriority parent, const
}
}
}
else if (binary->op == CiToken::less || binary->op == CiToken::lessOrEqual || binary->op == CiToken::greater || binary->op == CiToken::greaterOrEqual || binary->op == CiToken::equal || binary->op == CiToken::notEqual) {
else if (binary->op == CiToken::equal || binary->op == CiToken::notEqual || binary->op == CiToken::less || binary->op == CiToken::lessOrEqual || binary->op == CiToken::greater || binary->op == CiToken::greaterOrEqual) {
const CiType * typeComp = this->system->promoteFloatingTypes(binary->left->type.get(), binary->right->type.get()).get();
if (typeComp != nullptr && typeComp != expr->type.get()) {
writeCoerced(typeComp, expr, parent);
Expand Down
58 changes: 31 additions & 27 deletions Transpiled.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1977,6 +1977,21 @@ public override void Accept(CiVisitor visitor, CiPriority parent)
visitor.VisitBinaryExpr(this, parent);
}

public bool IsRel()
{
switch (this.Op) {
case CiToken.Equal:
case CiToken.NotEqual:
case CiToken.Less:
case CiToken.LessOrEqual:
case CiToken.Greater:
case CiToken.GreaterOrEqual:
return true;
default:
return false;
}
}

public bool IsAssign()
{
switch (this.Op) {
Expand Down Expand Up @@ -7293,11 +7308,6 @@ protected void WriteBinaryExpr2(CiBinaryExpr expr, CiPriority parent, CiPriority
WriteBinaryExpr(expr, parent > child, child, op, child);
}

void WriteRel(CiBinaryExpr expr, CiPriority parent, string op)
{
WriteBinaryExpr(expr, parent > CiPriority.CondAnd, CiPriority.Rel, op, CiPriority.Rel);
}

protected static string GetEqOp(bool not) => not ? " != " : " == ";

protected virtual void WriteEqualOperand(CiExpr expr, CiExpr other)
Expand All @@ -7321,6 +7331,11 @@ protected virtual void WriteEqual(CiExpr left, CiExpr right, CiPriority parent,
WriteEqualExpr(left, right, parent, GetEqOp(not));
}

void WriteRel(CiBinaryExpr expr, CiPriority parent, string op)
{
WriteBinaryExpr(expr, parent > CiPriority.CondAnd, CiPriority.Rel, op, CiPriority.Rel);
}

protected virtual void WriteAnd(CiBinaryExpr expr, CiPriority parent)
{
WriteBinaryExpr(expr, parent > CiPriority.CondAnd && parent != CiPriority.And, CiPriority.And, " & ", CiPriority.And);
Expand Down Expand Up @@ -7381,6 +7396,12 @@ public override void VisitBinaryExpr(CiBinaryExpr expr, CiPriority parent)
case CiToken.ShiftRight:
WriteBinaryExpr(expr, parent > CiPriority.Shift, CiPriority.Shift, " >> ", CiPriority.Mul);
break;
case CiToken.Equal:
WriteEqual(expr.Left, expr.Right, parent, false);
break;
case CiToken.NotEqual:
WriteEqual(expr.Left, expr.Right, parent, true);
break;
case CiToken.Less:
WriteRel(expr, parent, " < ");
break;
Expand All @@ -7393,12 +7414,6 @@ public override void VisitBinaryExpr(CiBinaryExpr expr, CiPriority parent)
case CiToken.GreaterOrEqual:
WriteRel(expr, parent, " >= ");
break;
case CiToken.Equal:
WriteEqual(expr.Left, expr.Right, parent, false);
break;
case CiToken.NotEqual:
WriteEqual(expr.Left, expr.Right, parent, true);
break;
case CiToken.And:
WriteAnd(expr, parent);
break;
Expand Down Expand Up @@ -18642,7 +18657,7 @@ protected override void WriteCharAt(CiBinaryExpr expr)

protected override void WriteBinaryOperand(CiExpr expr, CiPriority parent, CiBinaryExpr binary)
{
WriteCoerced(binary.Type, expr, parent);
WriteCoerced(binary.IsRel() ? expr.Type : binary.Type, expr, parent);
}

static bool IsIdentifier(string s)
Expand Down Expand Up @@ -19680,19 +19695,8 @@ protected override void WriteAsType(CiVar def)
protected override void WriteBinaryOperand(CiExpr expr, CiPriority parent, CiBinaryExpr binary)
{
CiType type = binary.Type;
if (expr.Type is CiNumericType) {
switch (binary.Op) {
case CiToken.Equal:
case CiToken.NotEqual:
case CiToken.Less:
case CiToken.LessOrEqual:
case CiToken.Greater:
case CiToken.GreaterOrEqual:
type = this.System.PromoteNumericTypes(binary.Left.Type, binary.Right.Type);
break;
default:
break;
}
if (expr.Type is CiNumericType && binary.IsRel()) {
type = this.System.PromoteNumericTypes(binary.Left.Type, binary.Right.Type);
}
WriteCoerced(type, expr, parent);
}
Expand Down Expand Up @@ -21120,12 +21124,12 @@ protected override void WriteBinaryOperand(CiExpr expr, CiPriority parent, CiBin
}
}
break;
case CiToken.Equal:
case CiToken.NotEqual:
case CiToken.Less:
case CiToken.LessOrEqual:
case CiToken.Greater:
case CiToken.GreaterOrEqual:
case CiToken.Equal:
case CiToken.NotEqual:
CiType typeComp = this.System.PromoteFloatingTypes(binary.Left.Type, binary.Right.Type);
if (typeComp != null && typeComp != expr.Type) {
WriteCoerced(typeComp, expr, parent);
Expand Down
1 change: 1 addition & 0 deletions Transpiled.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -865,6 +865,7 @@ class CiBinaryExpr : public CiExpr
bool isConstEnum() const override;
int intValue() const override;
void accept(CiVisitor * visitor, CiPriority parent) const override;
bool isRel() const;
bool isAssign() const;
std::string_view getOpString() const;
std::string toString() const override;
Expand Down
Loading

0 comments on commit 1447c4b

Please sign in to comment.