public void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { writer.Write ("catch ("); writer.Write (NameAndType.Type.ToCSharp ()); writer.Write (' '); writer.Write (ctx.SafeName (NameAndType.Name)); writer.Write (')'); Block.GenerateCode (ctx, writer); }
public override void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { if (Value == null) writer.Write ("null"); else if (Value is string) { string s = Value as string; if (s [0] == '\'') { // 'foo' -> "foo" writer.Write ('"'); writer.Write (s.Substring (1, s.Length - 2)); writer.Write ('"'); } else writer.Write (s); // huh? why is Value double-quoted? } else if (Value is char) writer.Write ("\'" + Value + "\'"); else if (Value is long || Value is ulong || Value is double || Value is decimal) writer.Write (Value.ToString ()); else if (Value is RegexLiteral) { writer.Write ("new System.Text.RegularExpressions.Regex (@\""); writer.Write (((RegexLiteral) Value).Pattern); writer.Write ("\")"); } else throw new NotImplementedException (); }
public override void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { Array.GenerateCode (ctx, writer); writer.Write ('['); Index.GenerateCode (ctx, writer); writer.Write (']'); }
public override void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { writer.Write ("if ("); Condition.GenerateCode (ctx, writer); writer.WriteLine (")"); TrueStatement.GenerateCode (ctx, writer); if (FalseStatement != null) { writer.WriteLine ("else"); FalseStatement.GenerateCode (ctx, writer); } }
public override void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { if (IsPostfix) { Primary.GenerateCode (ctx, writer); writer.Write (Operator); } else { writer.Write (Operator); Primary.GenerateCode (ctx, writer); } }
public override void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { Target.GenerateCode (ctx, writer); writer.Write ('('); foreach (var expr in Arguments) { var tail = Arguments.Last () == expr ? "" : ", "; expr.GenerateCode (ctx, writer); writer.Write (tail); } writer.Write (')'); }
public override void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { OnGenerateCode (ctx, writer, false, null); }
public override void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { // if (xxx is IDisposable) ((IDisposable) xxx).Dispose (); writer.Write ("if ("); Target.GenerateCode (ctx, writer); writer.WriteLine (" is System.IDisposable)"); writer.WriteLine ("((IDisposable) "); Target.GenerateCode (ctx, writer); writer.WriteLine (").Dispose ();"); }
public override void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { writer.Write ("do"); Body.GenerateCode (ctx, writer); writer.WriteLine ("while ("); Condition.GenerateCode (ctx, writer); writer.WriteLine (");"); }
public override void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { writer.WriteLine ("continue;"); }
public void GenerateCode() { writer.WriteLine ("// This source is automatically generated"); writer.WriteLine ("using System;"); writer.WriteLine ("using System.Linq;"); writer.WriteLine ("using Number = System.Double;"); writer.WriteLine ("using Class = System.Type;"); var ctx = new CodeGenerationContext (); root.GenerateCode (ctx, writer); }
public override void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { Condition.GenerateCode (ctx, writer); writer.Write (" ? "); TrueValue.GenerateCode (ctx, writer); writer.Write (" : "); FalseValue.GenerateCode (ctx, writer); }
public void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { foreach (var item in Items) if (item is Import) item.GenerateCode (ctx, writer); foreach (var item in Items) if (!(item is Import)) item.GenerateCode (ctx, writer); }
public void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { var parentClassWriter = ctx.CurrentClassWriter; var sw = new StringWriter (); ctx.CurrentClassWriter = sw; var parentType = ctx.CurrentType; ctx.CurrentType = this; writer.WriteLine ("// class {0}", Name); foreach (var ev in Events) ev.GenerateCode (ctx, writer); ctx.WriteHeaders (Headers, writer, false, false); writer.WriteLine ("partial {3} {0}{1}{2}", Name, BaseClassName != null ? " : " : /*" : global::Object"*/String.Empty, BaseClassName, IsInterface ? "interface" : "class"); writer.WriteLine ("{"); foreach (var nsuse in NamespaceUses) { writer.WriteLine ("// FIXME: using directive inside class declaration is not allowed in C#"); writer.WriteLine ("// using {0};", nsuse.Name); } foreach (var item in Members) item.GenerateCode (ctx, writer); // output temporarily saved members (such as local functions) writer.Write (sw.ToString ()); writer.WriteLine ("}"); writer.WriteLine ("// end of class {0}", Name); ctx.CurrentType = parentType; ctx.CurrentClassWriter = parentClassWriter; }
public void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { if (LocalVariables != null) LocalVariables.GenerateCode (ctx, writer); else { foreach (var axs in AssignStatements) { var tail = AssignStatements.Last () == axs ? "" : ", "; axs.GenerateCode (ctx, writer); writer.Write (tail); } } }
public override void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { if (Function.Name == null) { Function.Name = "__anonymous" + ctx.NextAnonymousMethodIndex (); Function.GenerateCode (ctx, ctx.CurrentClassWriter); } writer.WriteLine ("/* embedded function {0} is written as a class member.*/", Function.Name); writer.Write (Function.Name); }
public override void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { ctx.InForHeadings = true; writer.Write ("for ("); Initializers.GenerateCode (ctx, writer); writer.Write ("; "); Condition.GenerateCode (ctx, writer); writer.Write ("; "); foreach (var iter in Iterators) { var tail = Iterators.Last () == iter ? "" : ", "; iter.GenerateCode (ctx, writer); writer.Write (tail); } ctx.InForHeadings = false; writer.WriteLine (')'); Body.GenerateCode (ctx, writer); }
public void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { writer.Write ("["); writer.Write (Name.ToCSharp ()); writer.Write ("("); foreach (var member in Members) { var tail = Members.Last () == member ? "" : ", "; writer.Write (ctx.SafeName (member.Name)); writer.Write (" = "); member.Value.GenerateCode (ctx, writer); writer.Write (tail); } writer.WriteLine (")]"); }
internal void OnGenerateCode(CodeGenerationContext ctx, TextWriter writer, bool returnVoid, string namePrefix) { bool isConstructor = ctx.CurrentType != null && ctx.CurrentType.Name == Name; if (returnVoid) writer.Write ("void"); else if (!isConstructor && ReturnTypeName != null) writer.Write (ReturnTypeName.ToCSharp ()); else if (!isConstructor) writer.Write ("/* no type? */"); writer.Write (' '); writer.Write (namePrefix); if (Name == "getTimer") writer.Write ("GlobalContext.getTimer"); else if (Name == "toString") writer.Write ("ToString"); else writer.Write (ctx.SafeName (Name)); writer.Write (" ("); foreach (var arg in Arguments) { var tail = Arguments.Last () == arg ? "" : ", "; if (arg.IsVarArg) writer.Write ("params object [] {0}", arg.Name); else { writer.Write (arg.Type.ToCSharp ()); writer.Write (' '); writer.Write (ctx.SafeName (arg.Name)); if (arg.DefaultValue != null) { writer.Write (" = "); arg.DefaultValue.GenerateCode (ctx, writer); } } writer.Write (tail); } writer.Write (')'); if (Body == null) // interface writer.WriteLine (';'); else { writer.WriteLine (); Body.GenerateCode (ctx, writer); } }
public abstract void GenerateCode(CodeGenerationContext ctx, TextWriter writer);
internal void OnGenerateCode(CodeGenerationContext ctx, TextWriter writer, bool returnVoid, string namePrefix) { // looks like only constructors have no return type. // Body is checked to distinguish class and interface. bool isInterface = Definition.Body == null; ctx.WriteHeaders (Headers, writer, Definition.ReturnTypeName != null && !isInterface, false); Definition.OnGenerateCode (ctx, writer, returnVoid, namePrefix); writer.WriteLine (); }
public override void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { Expression.GenerateCode (ctx, writer); if (!ctx.InForHeadings) writer.WriteLine (';'); }
public void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { string name = Type.ToCSharp (); // package functions cannot be imported. So disable them (as comment). switch (name) { case "flash.utils.getTimer": writer.Write ("// "); break; } // FIXME: this is sort of hack, but it is not really definite way to determine if the import is for a namespace or a type. So, basically I treat such ones that 1) if it ends with .* or 2) if the final identifier after '.' begins with Uppercase, as a namespace. bool isNS = name.EndsWith (".*", StringComparison.Ordinal); if (isNS) name = name.Substring (0, name.Length - 2); int idx = name.LastIndexOf ('.'); if (idx > 0 && idx + 1 < name.Length && !Char.IsUpper (name [idx + 1])) isNS = true; if (isNS) writer.WriteLine ("using {0};", name); else writer.WriteLine ("using {0} = {1};", name.Substring (name.LastIndexOf ('.') + 1), Type.ToCSharp ()); }
public override void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { ctx.WriteHeaders (Headers, writer, false, this is ConstantDeclaration); var bak = ctx.KnownLValueType; foreach (var ntv in NameTypeValues) { // because AS3 variable types could differ within a line (unlike C#), they have to be declared in split form (or I have to do something more complicated.) if (this is ConstantDeclaration) writer.Write ("const "); if (ntv.Type != null) writer.Write (ntv.Type.ToCSharp ()); else if (ntv.Value != null) writer.Write ("var"); else writer.Write ("dynamic"); ctx.KnownLValueType = ntv.Type; writer.Write (' '); writer.Write (ctx.SafeName (ntv.Name)); if (ntv.Value != null) { writer.Write (" = "); ntv.Value.GenerateCode (ctx, writer); } writer.WriteLine (';'); ctx.KnownLValueType = null; } ctx.KnownLValueType = bak; }
public override void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { Primary.GenerateCode (ctx, writer); writer.Write (" is "); writer.Write (Type.ToCSharp ()); }
public override void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { // probably the only difference from for-each is that it can declare local variable. writer.Write ("foreach (var ___"); writer.Write (" in "); Target.GenerateCode (ctx, writer); writer.WriteLine (") {"); Iterator.GenerateCode (ctx, writer); writer.WriteLine (" = ___;"); Body.GenerateCode (ctx, writer); writer.WriteLine ("}"); }
public override void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { var type = ctx.KnownLValueType != null ? ctx.KnownLValueType.GenericSubtype : null; writer.Write ("new {0} [] {{", type); foreach (var expr in Values) { var tail = Values.Last () == expr ? "" : ", "; expr.GenerateCode (ctx, writer); writer.Write (tail); } writer.Write ('}'); }
public void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { if (LocalVariableType != null) { writer.Write (LocalVariableType.ToCSharp ()); writer.Write (' '); } writer.Write (ctx.SafeName (Name)); }
public override void GenerateCode(CodeGenerationContext ctx, TextWriter writer) { writer.Write ("Util.CreateLiteralHash (new object [] {"); foreach (var pair in Values) { var tail = Values.Last () == pair ? "" : ", "; if (pair.Key is Literal) ((Literal) pair.Key).GenerateCode (ctx, writer); else writer.Write (ctx.SafeName ((Identifier) pair.Key)); writer.Write (", "); pair.Value.GenerateCode (ctx, writer); writer.Write (tail); } writer.Write ("})"); }
void GenerateFunctionBasedExpr(CodeGenerationContext ctx, TextWriter writer, string name) { Left.GenerateCode (ctx, writer); writer.Write (" = "); writer.Write (name); writer.Write (" ("); Left.GenerateCode (ctx, writer); writer.Write (", "); Right.GenerateCode (ctx, writer); writer.Write (");"); }