diff --git a/idealingua-v1/idealingua-v1-test-defs/src/main/resources/defs/any/idltest/ast.domain b/idealingua-v1/idealingua-v1-test-defs/src/main/resources/defs/any/idltest/ast.domain index 220610fb..10553356 100644 --- a/idealingua-v1/idealingua-v1-test-defs/src/main/resources/defs/any/idltest/ast.domain +++ b/idealingua-v1/idealingua-v1-test-defs/src/main/resources/defs/any/idltest/ast.domain @@ -102,8 +102,17 @@ mixin TIfNode { + TypeInfo } +// Aliased (with reserved keywords as aliases) +adt AliasedAdt { + EventData as event + PublicData as public +} +data EventData { +} +data PublicData { +} diff --git a/idealingua-v1/idealingua-v1-transpilers/src/main/scala/izumi/idealingua/translator/tocsharp/CSharpTranslator.scala b/idealingua-v1/idealingua-v1-transpilers/src/main/scala/izumi/idealingua/translator/tocsharp/CSharpTranslator.scala index 49294aa9..1e64cd1e 100644 --- a/idealingua-v1/idealingua-v1-transpilers/src/main/scala/izumi/idealingua/translator/tocsharp/CSharpTranslator.scala +++ b/idealingua-v1/idealingua-v1-transpilers/src/main/scala/izumi/idealingua/translator/tocsharp/CSharpTranslator.scala @@ -111,33 +111,33 @@ class CSharpTranslator(ts: Typespace, options: CSharpTranslatorOptions) extends // it has no ambiguous name with regards to the rest. However, methods for adt will // have the same name making it ambiguous, so we bail out here by providing // an FQN - val nonambName = if (needsFQN.isDefined && needsFQN.get.usingName == "") CSharpType(member.typeId).renderType(true) else s"_${member.wireId}" + val nonambName = if (needsFQN.isDefined && needsFQN.get.usingName == "") CSharpType(member.typeId).renderType(true) else s"_${member.typename}" val operators = - s""" public static explicit operator $nonambName(${member.wireId} m) { + s""" public static explicit operator $nonambName(${member.typename} m) { | return m.Value; | } | - | public static explicit operator ${member.wireId}($nonambName m) { - | return new ${member.wireId}(m); + | public static explicit operator ${member.typename}($nonambName m) { + | return new ${member.typename}(m); | } """.stripMargin val operatorsDummy = s""" // We would normally want to have an operator, but unfortunately if it is an interface, | // it will fail on "user-defined conversions to or from an interface are not allowed". - | // public static explicit operator $nonambName(${member.wireId} m) { + | // public static explicit operator $nonambName(${member.typename} m) { | // return m.Value; | // } | // - | // public static explicit operator ${member.wireId}($nonambName m) { - | // return new ${member.wireId}(m); + | // public static explicit operator ${member.typename}($nonambName m) { + | // return new ${member.typename}(m); | // } """.stripMargin // val memberType = CSharpType(member.typeId) - s"""public sealed class ${member.wireId}: $adtName { + s"""public sealed class ${member.typename}: $adtName { | public $nonambName Value { get; private set; } - | public ${member.wireId}($nonambName value) { + | public ${member.typename}($nonambName value) { | this.Value = value; | } | @@ -151,7 +151,7 @@ class CSharpTranslator(ts: Typespace, options: CSharpTranslatorOptions) extends } protected def renderAdtUsings(m: AdtMember)(implicit im: CSharpImports, ts: Typespace): String = { - s"using _${m.wireId} = ${CSharpType(m.typeId).renderType(true)};" + s"using _${m.typename} = ${CSharpType(m.typeId).renderType(true)};" } protected def renderAdtImpl(adtName: String, members: List[AdtMember], renderUsings: Boolean = true)(implicit im: CSharpImports, ts: Typespace): String = { @@ -162,7 +162,7 @@ class CSharpTranslator(ts: Typespace, options: CSharpTranslatorOptions) extends |${ext.preModelEmit(ctx, adt)} |public abstract class $adtName { | public interface I${adtName}Visitor { - |${members.map(m => s" void Visit(${m.wireId} visitor);").mkString("\n")} + |${members.map(m => s" void Visit(${m.typename} visitor);").mkString("\n")} | } | | public abstract void Visit(I${adtName}Visitor visitor); diff --git a/idealingua-v1/idealingua-v1-transpilers/src/main/scala/izumi/idealingua/translator/tocsharp/extensions/JsonNetExtension.scala b/idealingua-v1/idealingua-v1-transpilers/src/main/scala/izumi/idealingua/translator/tocsharp/extensions/JsonNetExtension.scala index b0ce124a..3c8ee242 100644 --- a/idealingua-v1/idealingua-v1-transpilers/src/main/scala/izumi/idealingua/translator/tocsharp/extensions/JsonNetExtension.scala +++ b/idealingua-v1/idealingua-v1-transpilers/src/main/scala/izumi/idealingua/translator/tocsharp/extensions/JsonNetExtension.scala @@ -4,10 +4,10 @@ import izumi.fundamentals.platform.language.Quirks.discard import izumi.fundamentals.platform.strings.IzString._ import izumi.idealingua.model.common.TypeId._ import izumi.idealingua.model.common.{Generic, Primitive, TypeId} -import izumi.idealingua.model.problems.IDLException import izumi.idealingua.model.il.ast.typed.DefMethod import izumi.idealingua.model.il.ast.typed.DefMethod.Output.{Alternative, Singular} import izumi.idealingua.model.il.ast.typed.TypeDef._ +import izumi.idealingua.model.problems.IDLException import izumi.idealingua.model.typespace.Typespace import izumi.idealingua.translator.tocsharp.types.{CSharpClass, CSharpField, CSharpType} import izumi.idealingua.translator.tocsharp.{CSTContext, CSharpImports} @@ -412,9 +412,9 @@ object JsonNetExtension extends CSharpTranslatorExtension { | public override void WriteJson(JsonWriter writer, ${i.id.name} al, JsonSerializer serializer) { | writer.WriteStartObject(); |${i.alternatives - .map(m => s"""if (al is ${i.id.name}.${m.wireId}) { + .map(m => s"""if (al is ${i.id.name}.${m.typename}) { | writer.WritePropertyName("${m.wireId}"); - | var v = (al as ${i.id.name}.${m.wireId}).Value; + | var v = (al as ${i.id.name}.${m.typename}).Value; |${renderSerialize(m.typeId, "v").shift(4)} |} else""".stripMargin).mkString("\n").shift(8)} | { @@ -430,7 +430,7 @@ object JsonNetExtension extends CSharpTranslatorExtension { |${i.alternatives .map(m => s"""case "${m.wireId}": { | var v = serializer.Deserialize<${CSharpType(m.typeId).renderType(true)}>(kv.Value.CreateReader()); - | return new ${i.id.name}.${m.wireId}(v); + | return new ${i.id.name}.${m.typename}(v); |} """.stripMargin).mkString("\n").shift(12)} | default: diff --git a/idealingua-v1/idealingua-v1-transpilers/src/main/scala/izumi/idealingua/translator/tocsharp/extensions/NUnitExtension.scala b/idealingua-v1/idealingua-v1-transpilers/src/main/scala/izumi/idealingua/translator/tocsharp/extensions/NUnitExtension.scala index c57f539e..3137d7a1 100644 --- a/idealingua-v1/idealingua-v1-transpilers/src/main/scala/izumi/idealingua/translator/tocsharp/extensions/NUnitExtension.scala +++ b/idealingua-v1/idealingua-v1-transpilers/src/main/scala/izumi/idealingua/translator/tocsharp/extensions/NUnitExtension.scala @@ -109,7 +109,7 @@ object NUnitExtension extends CSharpTranslatorExtension { val code = s"""public static class ${name}TestHelper { | public static $name Create() { - | return new $name.${adt.wireId}($testValue); + | return new $name.${adt.typename}($testValue); | } |} |