From e1073915f95c702e578d823d06891d9d6666f58d Mon Sep 17 00:00:00 2001 From: Piotr Fusik Date: Mon, 24 Jan 2022 12:06:32 +0100 Subject: [cleanup] VisitLiteral*. --- CiResolver.cs | 23 +++++++++++- CiTree.cs | 38 ++++++++++++++++++- GenBase.cs | 118 ++++++++++++++++++++++++++++++++++------------------------ GenC.cs | 49 ++++++++++++------------ GenCCpp.cs | 6 +-- GenCl.cs | 2 +- GenCpp.cs | 15 +++----- GenCs.cs | 10 ++--- GenJava.cs | 24 ++++++------ GenJs.cs | 14 +++---- GenPy.cs | 36 +++++++++--------- GenPySwift.cs | 2 +- GenSwift.cs | 17 ++++----- 13 files changed, 210 insertions(+), 144 deletions(-) diff --git a/CiResolver.cs b/CiResolver.cs index fc4c8f4..e94d3fa 100644 --- a/CiResolver.cs +++ b/CiResolver.cs @@ -307,9 +307,28 @@ public class CiResolver : CiVisitor return expr; } - public override CiExpr Visit(CiLiteral expr, CiPriority parent) + public override void VisitLiteralLong(long value) + { + } + + public override void VisitLiteralDouble(double value) + { + } + + public override void VisitLiteralString(string value) + { + } + + public override void VisitLiteralNull() + { + } + + public override void VisitLiteralFalse() + { + } + + public override void VisitLiteralTrue() { - return expr; } public override CiExpr Visit(CiInterpolatedString expr, CiPriority parent) diff --git a/CiTree.cs b/CiTree.cs index 5048dd6..dbec8d9 100644 --- a/CiTree.cs +++ b/CiTree.cs @@ -69,7 +69,12 @@ public abstract class CiVisitor { public abstract CiExpr Visit(CiCollection expr, CiPriority parent); public abstract CiExpr Visit(CiVar expr, CiPriority parent); - public abstract CiExpr Visit(CiLiteral expr, CiPriority parent); + public abstract void VisitLiteralLong(long value); + public abstract void VisitLiteralDouble(double value); + public abstract void VisitLiteralString(string value); + public abstract void VisitLiteralNull(); + public abstract void VisitLiteralFalse(); + public abstract void VisitLiteralTrue(); public abstract CiExpr Visit(CiInterpolatedString expr, CiPriority parent); public abstract CiExpr Visit(CiSymbolReference expr, CiPriority parent); public abstract CiExpr Visit(CiPrefixExpr expr, CiPriority parent); @@ -360,7 +365,6 @@ public abstract class CiLiteral : CiExpr public static readonly CiLiteralFalse False = new CiLiteralFalse(); public static readonly CiLiteralTrue True = new CiLiteralTrue(); - public override CiExpr Accept(CiVisitor visitor, CiPriority parent) => visitor.Visit(this, parent); public override string ToString() => this.Value.ToString(); } @@ -372,6 +376,11 @@ public class CiLiteralLong : CiLiteral public CiLiteralLong(long value) : base(value) { } + public override CiExpr Accept(CiVisitor visitor, CiPriority parent) + { + visitor.VisitLiteralLong((long) this.Value); + return this; + } } public class CiLiteralDouble : CiLiteral @@ -379,6 +388,11 @@ public class CiLiteralDouble : CiLiteral public CiLiteralDouble(double value) : base(value) { } + public override CiExpr Accept(CiVisitor visitor, CiPriority parent) + { + visitor.VisitLiteralDouble((double) this.Value); + return this; + } } public class CiLiteralString : CiLiteral @@ -386,6 +400,11 @@ public class CiLiteralString : CiLiteral public CiLiteralString(string value) : base(value) { } + public override CiExpr Accept(CiVisitor visitor, CiPriority parent) + { + visitor.VisitLiteralString((string) this.Value); + return this; + } } public class CiLiteralNull : CiLiteral @@ -393,6 +412,11 @@ public class CiLiteralNull : CiLiteral public CiLiteralNull() : base(null) { } + public override CiExpr Accept(CiVisitor visitor, CiPriority parent) + { + visitor.VisitLiteralNull(); + return this; + } public override string ToString() => "null"; } @@ -408,6 +432,11 @@ public class CiLiteralFalse : CiLiteralBool public CiLiteralFalse() : base(false) { } + public override CiExpr Accept(CiVisitor visitor, CiPriority parent) + { + visitor.VisitLiteralFalse(); + return this; + } } public class CiLiteralTrue : CiLiteralBool @@ -415,6 +444,11 @@ public class CiLiteralTrue : CiLiteralBool public CiLiteralTrue() : base(true) { } + public override CiExpr Accept(CiVisitor visitor, CiPriority parent) + { + visitor.VisitLiteralTrue(); + return this; + } } public class CiImplicitEnumValue : CiExpr diff --git a/GenBase.cs b/GenBase.cs index d9ff09c..c831773 100644 --- a/GenBase.cs +++ b/GenBase.cs @@ -68,7 +68,7 @@ public abstract class GenBase : CiVisitor this.Writer.Write(s); } - protected void Write(long i) + public override void VisitLiteralLong(long i) { this.Writer.Write(i); } @@ -359,10 +359,50 @@ public abstract class GenBase : CiVisitor { for (int i = 0; i < array.Length; i++) { WriteComma(i); - Write(array[i]); + VisitLiteralLong(array[i]); } } + public override void VisitLiteralDouble(double value) + { + string s = value.ToString("R", CultureInfo.InvariantCulture); + Write(s); + foreach (char c in s) { + switch (c) { + case '-': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + break; + default: + return; + } + } + Write(".0"); // it looked like an integer + } + + public override void VisitLiteralNull() + { + Write("null"); + } + + public override void VisitLiteralFalse() + { + Write("false"); + } + + public override void VisitLiteralTrue() + { + Write("true"); + } + protected void WriteEscapedChar(char c, bool quoted = true) { switch (c) { @@ -379,58 +419,40 @@ public abstract class GenBase : CiVisitor } } - protected virtual void WriteLiteral(object value) + public override void VisitLiteralString(string value) + { + Write('"'); + foreach (char c in value) + WriteEscapedChar(c); + Write('"'); + } + + protected void WriteLiteral(object value) { switch (value) { case null: - Write("null"); + VisitLiteralNull(); break; case long l: - Write(l); + VisitLiteralLong(l); break; case bool b: - Write(b ? "true" : "false"); + if (b) + VisitLiteralTrue(); + else + VisitLiteralFalse(); break; case string s: - Write('"'); - foreach (char c in s) - WriteEscapedChar(c); - Write('"'); + VisitLiteralString(s); break; case double d: - string s2 = d.ToString("R", CultureInfo.InvariantCulture); - Write(s2); - foreach (char c in s2) { - switch (c) { - case '-': - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - break; - default: - return; - } - } - Write(".0"); // it looked like an integer + VisitLiteralDouble(d); break; default: throw new NotImplementedException(value.GetType().Name); } } - public override CiExpr Visit(CiLiteral expr, CiPriority parent) - { - WriteLiteral(expr.Value); - return expr; - } - protected abstract void WriteName(CiSymbol symbol); protected virtual TypeCode GetIntegerTypeCode(CiIntegerType integer, bool promote) @@ -511,10 +533,10 @@ public abstract class GenBase : CiVisitor protected virtual void WritePrintfWidth(CiInterpolatedPart part) { if (part.WidthExpr != null) - Write(part.Width); + VisitLiteralLong(part.Width); if (part.Precision >= 0) { Write('.'); - Write(part.Precision); + VisitLiteralLong(part.Precision); } } @@ -633,16 +655,16 @@ public abstract class GenBase : CiVisitor WriteCoercedInternal(type, expr, parent); } - protected virtual void WriteCoercedLiteral(CiType type, object value) + protected virtual void WriteCoercedLiteral(CiType type, CiLiteral literal) { - WriteLiteral(value); + WriteLiteral(literal.Value); } protected void WriteCoercedLiterals(CiType type, CiExpr[] exprs) { for (int i = 0; i < exprs.Length; i++) { WriteComma(i); - WriteCoercedLiteral(type, ((CiLiteral) exprs[i]).Value); + WriteCoercedLiteral(type, (CiLiteral) exprs[i]); } } @@ -787,13 +809,13 @@ public abstract class GenBase : CiVisitor Write("for ("); Write(intString); Write(" _i"); - Write(nesting); + VisitLiteralLong(nesting); Write(" = 0; _i"); - Write(nesting); + VisitLiteralLong(nesting); Write(" < "); - Write(count); + VisitLiteralLong(count); Write("; _i"); - Write(nesting); + VisitLiteralLong(nesting); Write("++) "); OpenBlock(); } @@ -803,7 +825,7 @@ public abstract class GenBase : CiVisitor WriteLocalName(def, CiPriority.Primary); for (int i = 0; i < nesting; i++) { Write("[_i"); - Write(i); + VisitLiteralLong(i); Write(']'); } } @@ -887,7 +909,7 @@ public abstract class GenBase : CiVisitor return; } if (right is CiLiteral rightLiteral) { - Write(leftValue + (long) rightLiteral.Value); + VisitLiteralLong(leftValue + (long) rightLiteral.Value); return; } } diff --git a/GenC.cs b/GenC.cs index c297147..1d7821f 100644 --- a/GenC.cs +++ b/GenC.cs @@ -80,12 +80,9 @@ public class GenC : GenCCpp Include("stdbool.h"); } - protected override void WriteLiteral(object value) + public override void VisitLiteralNull() { - if (value == null) - Write("NULL"); - else - base.WriteLiteral(value); + Write("NULL"); } protected override void WritePrintfWidth(CiInterpolatedPart part) @@ -267,7 +264,7 @@ public class GenC : GenCCpp Write("CiMatch_GetPos("); expr.Left.Accept(this, CiPriority.Argument); Write(", "); - Write(which); + VisitLiteralLong(which); Write(')'); } @@ -427,7 +424,7 @@ public class GenC : GenCCpp while (type is CiArrayType array) { if (type is CiArrayStorageType arrayStorage) { Write('['); - Write(arrayStorage.Length); + VisitLiteralLong(arrayStorage.Length); Write(']'); } else if (array.ElementType is CiArrayStorageType) @@ -686,7 +683,7 @@ public class GenC : GenCCpp int id = this.CurrentTemporaries.IndexOf(type); if (id < 0) { id = this.CurrentTemporaries.Count; - WriteDefinition(type, () => { Write("citemp"); Write(id); }, false, true); + WriteDefinition(type, () => { Write("citemp"); VisitLiteralLong(id); }, false, true); if (assign) { Write(" = "); if (expr != null) @@ -699,7 +696,7 @@ public class GenC : GenCCpp } else if (assign) { Write("citemp"); - Write(id); + VisitLiteralLong(id); Write(" = "); if (expr != null) WriteCoerced(type, expr, CiPriority.Argument); @@ -1024,7 +1021,7 @@ public class GenC : GenCCpp int tempId = this.CurrentTemporaries.IndexOf(expr); if (tempId >= 0) { Write("citemp"); - Write(tempId); + VisitLiteralLong(tempId); } else expr.Accept(this, CiPriority.Primary); @@ -1074,9 +1071,9 @@ public class GenC : GenCCpp Write("memcmp("); WriteArrayPtrAdd(ptr, offset); Write(", "); - WriteLiteral(literal); + VisitLiteralString(literal); Write(", "); - Write(literal.Length); + VisitLiteralLong(literal.Length); Write(')'); Write(GetEqOp(not)); Write('0'); @@ -1111,7 +1108,7 @@ public class GenC : GenCCpp Write('('); lengthExpr.Accept(this, CiPriority.Equality); Write(" != "); - Write(rightValue.Length); + VisitLiteralLong(rightValue.Length); Write(" || "); WriteSubstringEqual(cast, ptr, offset, rightValue, CiPriority.CondOr, true); if (parent > CiPriority.CondOr) @@ -1122,7 +1119,7 @@ public class GenC : GenCCpp Write('('); lengthExpr.Accept(this, CiPriority.Equality); Write(" == "); - Write(rightValue.Length); + VisitLiteralLong(rightValue.Length); Write(" && "); WriteSubstringEqual(cast, ptr, offset, rightValue, CiPriority.CondAnd, false); if (parent > CiPriority.CondAnd || parent == CiPriority.CondOr) @@ -1169,7 +1166,7 @@ public class GenC : GenCCpp { Write("for (int _i = 0; _i < "); if (args.Length == 1) - Write(((CiArrayStorageType) obj.Type).Length); + VisitLiteralLong(((CiArrayStorageType) obj.Type).Length); else args[2].Accept(this, CiPriority.Rel); // FIXME: side effect in every iteration WriteLine("; _i++)"); @@ -1192,7 +1189,7 @@ public class GenC : GenCCpp if (elementType is CiClass klass && NeedsConstructor(klass)) { WriteName(klass); Write("_Construct(&citemp"); - Write(id); + VisitLiteralLong(id); WriteLine(");"); } Write(function); @@ -1203,7 +1200,7 @@ public class GenC : GenCCpp args[0].Accept(this, CiPriority.Argument); } Write(", citemp"); - Write(id); + VisitLiteralLong(id); Write(')'); this.CurrentTemporaries[id] = elementType; } @@ -1427,7 +1424,7 @@ public class GenC : GenCCpp WriteArrayPtrAdd(obj, args[1]); Write(", "); if (args.Length == 1) - Write(((CiArrayStorageType) array).Length); + VisitLiteralLong(((CiArrayStorageType) array).Length); else args[2].Accept(this, CiPriority.Primary); WriteSizeofCompare(array); @@ -1484,7 +1481,7 @@ public class GenC : GenCCpp Write("qsort("); WriteArrayPtr(obj, CiPriority.Argument); Write(", "); - Write(arrayStorage.Length); + VisitLiteralLong(arrayStorage.Length); Write(", sizeof("); Write(typeCode); Write(')'); @@ -1856,13 +1853,13 @@ public class GenC : GenCCpp int nesting = 0; while (type is CiArrayStorageType array) { Write("for (int _i"); - Write(nesting); + VisitLiteralLong(nesting); Write(" = "); - Write(array.Length - 1); + VisitLiteralLong(array.Length - 1); Write("; _i"); - Write(nesting); + VisitLiteralLong(nesting); Write(" >= 0; _i"); - Write(nesting); + VisitLiteralLong(nesting); WriteLine("--)"); this.Indent++; nesting++; @@ -1895,7 +1892,7 @@ public class GenC : GenCCpp WriteLocalName(symbol, CiPriority.Primary); for (int i = 0; i < nesting; i++) { Write("[_i"); - Write(i); + VisitLiteralLong(i); Write(']'); } if (type is CiListType) @@ -2053,7 +2050,7 @@ public class GenC : GenCCpp Write(" = 0; "); WriteCamelCaseNotKeyword(element); Write(" < "); - Write(array.Length); + VisitLiteralLong(array.Length); Write("; "); WriteCamelCaseNotKeyword(element); Write("++)"); @@ -2945,7 +2942,7 @@ public class GenC : GenCCpp Write(' '); WriteResource(name, -1); Write('['); - Write(resources[name].Length); + VisitLiteralLong(resources[name].Length); WriteLine("] = {"); Write('\t'); Write(resources[name]); diff --git a/GenCCpp.cs b/GenCCpp.cs index 6aa29d4..d9b2568 100644 --- a/GenCCpp.cs +++ b/GenCCpp.cs @@ -1,6 +1,6 @@ // GenCCpp.cs - C/C++ code generator // -// Copyright (C) 2011-2021 Piotr Fusik +// Copyright (C) 2011-2022 Piotr Fusik // // This file is part of CiTo, see https://github.com/pfusik/cito // @@ -242,7 +242,7 @@ public abstract class GenCCpp : GenTyped int gotoId = this.StringSwitchesWithGoto.IndexOf(switchStatement); if (gotoId >= 0) { Write("goto ciafterswitch"); - Write(gotoId); + VisitLiteralLong(gotoId); WriteLine(';'); return; } @@ -304,7 +304,7 @@ public abstract class GenCCpp : GenTyped } if (gotoId >= 0) { Write("ciafterswitch"); - Write(gotoId); + VisitLiteralLong(gotoId); WriteLine(": ;"); } } diff --git a/GenCl.cs b/GenCl.cs index 47b7249..166d76e 100644 --- a/GenCl.cs +++ b/GenCl.cs @@ -112,7 +112,7 @@ public class GenCl : GenC } WriteArrayPtrAdd(ptr, offset); Write(", "); - WriteLiteral(literal); + VisitLiteralString(literal); Write(')'); } diff --git a/GenCpp.cs b/GenCpp.cs index bfde597..b412ecb 100644 --- a/GenCpp.cs +++ b/GenCpp.cs @@ -44,12 +44,9 @@ public class GenCpp : GenCCpp Include("cmath"); } - protected override void WriteLiteral(object value) + public override void VisitLiteralNull() { - if (value == null) - Write("nullptr"); - else - base.WriteLiteral(value); + Write("nullptr"); } public override CiExpr Visit(CiInterpolatedString expr, CiPriority parent) @@ -253,7 +250,7 @@ public class GenCpp : GenCCpp Write("std::array<"); Write(arrayStorage.ElementType, false); Write(", "); - Write(arrayStorage.Length); + VisitLiteralLong(arrayStorage.Length); Write('>'); break; case CiListType list: @@ -524,7 +521,7 @@ public class GenCpp : GenCCpp if (part.Prefix.Length > 0) { Write(" << "); - WriteLiteral(part.Prefix); + VisitLiteralString(part.Prefix); } Write(" << "); @@ -543,7 +540,7 @@ public class GenCpp : GenCCpp WriteStringLiteralWithNewLine(interpolated.Suffix); return; } - WriteLiteral(interpolated.Suffix); + VisitLiteralString(interpolated.Suffix); } } else { @@ -1292,7 +1289,7 @@ public class GenCpp : GenCCpp Include("array"); Include("cstdint"); Write("const std::array "); WriteResource(name, -1); if (define) { diff --git a/GenCs.cs b/GenCs.cs index 09c4b83..841cf64 100644 --- a/GenCs.cs +++ b/GenCs.cs @@ -270,9 +270,9 @@ public class GenCs : GenTyped } } - protected override void WriteCoercedLiteral(CiType type, object value) + protected override void WriteCoercedLiteral(CiType type, CiLiteral literal) { - WriteLiteral(value); + WriteLiteral(literal.Value); if (type == CiSystem.FloatType) Write('f'); } @@ -286,13 +286,13 @@ public class GenCs : GenTyped part.Argument.Accept(this, CiPriority.Argument); if (part.WidthExpr != null) { Write(','); - Write(part.Width); + VisitLiteralLong(part.Width); } if (part.Format != ' ') { Write(':'); Write(part.Format); if (part.Precision >= 0) - Write(part.Precision); + VisitLiteralLong(part.Precision); } Write('}'); } @@ -507,7 +507,7 @@ public class GenCs : GenTyped Write(", "); if (args.Length == 1) { Write("0, "); - Write(((CiArrayStorageType) obj.Type).Length); + VisitLiteralLong(((CiArrayStorageType) obj.Type).Length); } else { args[1].Accept(this, CiPriority.Argument); diff --git a/GenJava.cs b/GenJava.cs index 5351730..299c5fb 100644 --- a/GenJava.cs +++ b/GenJava.cs @@ -29,10 +29,10 @@ public class GenJava : GenTyped { string OutputDirectory; - protected override void WriteLiteral(object value) + public override void VisitLiteralLong(long value) { - base.WriteLiteral(value); - if (value is long l && l != (int) l) + base.VisitLiteralLong(value); + if (value != (int) value) Write('L'); } @@ -42,7 +42,7 @@ public class GenJava : GenTyped if (part.WidthExpr != null) throw new NotImplementedException("Cannot format integer with both width and precision"); Write('0'); - Write(part.Precision); + VisitLiteralLong(part.Precision); } else base.WritePrintfWidth(part); @@ -371,9 +371,9 @@ public class GenJava : GenTyped protected override void WriteResource(string name, int length) { Write("CiResource.getByteArray("); - WriteLiteral(name); + VisitLiteralString(name); Write(", "); - Write(length); + VisitLiteralLong(length); Write(')'); } @@ -435,7 +435,7 @@ public class GenJava : GenTyped Write('('); WriteIndexingInternal(leftBinary); // omit "& 0xff" Write(GetEqOp(not)); - Write((sbyte) l); + VisitLiteralLong((sbyte) l); if (parent > CiPriority.Equality) Write(')'); } @@ -448,12 +448,12 @@ public class GenJava : GenTyped return type is CiRangeType range && range.Min >= 0 && range.Max > sbyte.MaxValue && range.Max <= byte.MaxValue; } - protected override void WriteCoercedLiteral(CiType type, object value) + protected override void WriteCoercedLiteral(CiType type, CiLiteral literal) { if (IsUnsignedByte(type)) - Write((sbyte) (long) value); + VisitLiteralLong((sbyte) (long) literal.Value); else { - WriteLiteral(value); + WriteLiteral(literal.Value); if (type == CiSystem.FloatType) Write('f'); } @@ -467,7 +467,7 @@ public class GenJava : GenTyped Write('('); base.WriteIndexing(leftBinary, CiPriority.And); Write(" & "); - Write(0xff & (long) rightLiteral.Value); + VisitLiteralLong(0xff & (long) rightLiteral.Value); if (parent > CiPriority.CondAnd && parent != CiPriority.And) Write(')'); } @@ -863,7 +863,7 @@ public class GenJava : GenTyped WriteUppercaseWithUnderscores(konst.Name); Write(" = "); if (konst.Value is CiImplicitEnumValue imp) - Write(imp.Value); + VisitLiteralLong(imp.Value); else konst.Value.Accept(this, CiPriority.Argument); WriteLine(';'); diff --git a/GenJs.cs b/GenJs.cs index 448118b..2e328b6 100644 --- a/GenJs.cs +++ b/GenJs.cs @@ -180,20 +180,20 @@ public class GenJs : GenBase case 'E': Write(".toExponential("); if (part.Precision >= 0) - Write(part.Precision); + VisitLiteralLong(part.Precision); Write(").toUpperCase()"); break; case 'e': Write(".toExponential("); if (part.Precision >= 0) - Write(part.Precision); + VisitLiteralLong(part.Precision); Write(')'); break; case 'F': case 'f': Write(".toFixed("); if (part.Precision >= 0) - Write(part.Precision); + VisitLiteralLong(part.Precision); Write(')'); break; case 'X': @@ -208,18 +208,18 @@ public class GenJs : GenBase } if (part.Precision >= 0 && "DdXx".IndexOf(part.Format) >= 0) { Write(".padStart("); - Write(part.Precision); + VisitLiteralLong(part.Precision); Write(", \"0\")"); } } if (part.Width > 0) { Write(".padStart("); - Write(part.Width); + VisitLiteralLong(part.Width); Write(')'); } else if (part.Width < 0) { Write(".padEnd("); - Write(-part.Width); + VisitLiteralLong(-part.Width); Write(')'); } } @@ -728,7 +728,7 @@ public class GenJs : GenBase Write(konst.Documentation); WriteUppercaseWithUnderscores(konst.Name); Write(" : "); - Write(konst.Value.IntValue); + VisitLiteralLong(konst.Value.IntValue); } WriteLine(); CloseBlock(); diff --git a/GenPy.cs b/GenPy.cs index 921337f..eee9ec8 100644 --- a/GenPy.cs +++ b/GenPy.cs @@ -84,19 +84,19 @@ public class GenPy : GenPySwift WriteLine("\"\"\""); } - protected override void WriteLiteral(object value) + public override void VisitLiteralNull() { - switch (value) { - case null: - Write("None"); - break; - case bool b: - Write(b ? "True" : "False"); - break; - default: - base.WriteLiteral(value); - break; - } + Write("None"); + } + + public override void VisitLiteralFalse() + { + Write("False"); + } + + public override void VisitLiteralTrue() + { + Write("True"); } void WriteNameNotKeyword(string name) @@ -223,16 +223,16 @@ public class GenPy : GenPySwift if (part.Width >= 0) { if (!(part.Argument.Type is CiNumericType)) Write('>'); - Write(part.Width); + VisitLiteralLong(part.Width); } else { Write('<'); - Write(-part.Width); + VisitLiteralLong(-part.Width); } } if (part.Precision >= 0) { Write(part.Argument.Type is CiIntegerType ? '0' : '.'); - Write(part.Precision); + VisitLiteralLong(part.Precision); } if (part.Format != ' ' && part.Format != 'D') Write(part.Format); @@ -855,7 +855,7 @@ public class GenPy : GenPySwift void WriteInclusiveLimit(CiExpr limit, int increment, string incrementString) { if (limit is CiLiteral literal) - Write((long) literal.Value + increment); + VisitLiteralLong((long) literal.Value + increment); else { limit.Accept(this, CiPriority.Add); Write(incrementString); @@ -885,7 +885,7 @@ public class GenPy : GenPySwift } if (rangeStep != 1) { Write(", "); - Write(rangeStep); + VisitLiteralLong(rangeStep); } Write(')'); } @@ -1020,7 +1020,7 @@ public class GenPy : GenPySwift foreach (CiConst konst in enu) { WriteUppercaseWithUnderscores(konst.Name); Write(" = "); - Write(konst.Value.IntValue); + VisitLiteralLong(konst.Value.IntValue); WriteLine(); Write(konst.Documentation); } diff --git a/GenPySwift.cs b/GenPySwift.cs index 5439038..c6a38f8 100644 --- a/GenPySwift.cs +++ b/GenPySwift.cs @@ -266,7 +266,7 @@ public abstract class GenPySwift : GenBase void OpenWhileTrue() { Write("while "); - WriteLiteral(true); + VisitLiteralTrue(); OpenChild(); } diff --git a/GenSwift.cs b/GenSwift.cs index 02b9d52..5adf5de 100644 --- a/GenSwift.cs +++ b/GenSwift.cs @@ -310,12 +310,9 @@ public class GenSwift : GenPySwift } } - protected override void WriteLiteral(object value) + public override void VisitLiteralNull() { - if (value == null) - Write("nil"); - else - base.WriteLiteral(value); + Write("nil"); } void WriteInterpolatedLiteral(string s) @@ -518,7 +515,7 @@ public class GenSwift : GenPySwift else if (obj.Type is CiArrayStorageType arrayStorage && method == CiSystem.CollectionSortAll) { obj.Accept(this, CiPriority.Primary); Write("[0..<"); - Write(arrayStorage.Length); + VisitLiteralLong(arrayStorage.Length); Write("].sort()"); } else if (method == CiSystem.CollectionSortPart) { @@ -751,7 +748,7 @@ public class GenSwift : GenPySwift Write("](repeating: "); WriteDefaultValue(array.ElementType); Write(", count: "); - Write(array.Length); + VisitLiteralLong(array.Length); Write(')'); } } @@ -1119,7 +1116,7 @@ public class GenSwift : GenPySwift throw new NotImplementedException(cond.Op.ToString()); } Write(", by: "); - Write(rangeStep); + VisitLiteralLong(rangeStep); Write(')'); } } @@ -1245,7 +1242,7 @@ public class GenSwift : GenPySwift Write("[]"); else { Write("rawValue: "); - Write(i); + VisitLiteralLong(i); } WriteLine(')'); } @@ -1272,7 +1269,7 @@ public class GenSwift : GenPySwift WriteName(konst); if (!(konst.Value is CiImplicitEnumValue)) { Write(" = "); - Write(i); + VisitLiteralLong(i); } valueToConst.Add(i, konst); } -- cgit v1.2.3