public override void EmitCpp(CppEmitContext cec) { base.EmitCpp(cec); if ((this.ModFlags & Modifiers.STATIC) != 0) { cec.Buf.Write("\tstatic ", Location); } else { cec.Buf.Write("\t", Location); } if (cec.Pass == CppPasses.CLASSDEF) { cec.Buf.Write(cec.MakeCppFullTypeName(this.ReturnType), " ", this.MethodName.Name, "("); parameters.EmitCpp(cec); cec.Buf.Write(");\n"); } else { cec.Buf.Write(cec.MakeCppFullTypeName(this.ReturnType), " ", cec.MakeCppTypeName(Parent.CurrentType, false), "::", this.MethodName.Name, "("); parameters.EmitCpp(cec); cec.Buf.Write(") "); if (MethodData != null) { MethodData.EmitCpp(Parent, cec); } Block = null; cec.Buf.Write("\n"); } }
protected override void DoEmitCpp(CppEmitContext cec) { // FIXME: Switch has changed.. base.DoEmitCpp(cec); // cec.Buf.Write ("\tswitch (", loc); // Expr.EmitCpp (cec); // cec.Buf.Write (") {\n"); // cec.Buf.Indent (); // // foreach (var section in Sections) { // foreach (var label in section.Labels) { // if (label.IsDefault) { // cec.Buf.Write ("\tdefault:\n", label.Location); // } else { // cec.Buf.Write ("\tcase ", label.Location); // label.Label.EmitCpp (cec); // cec.Buf.Write (":\n"); // } // } // cec.Buf.Indent (); // section.Block.EmitBlockCpp (cec, true, true); // cec.Buf.Unindent (); // } // // cec.Buf.Unindent (); // cec.Buf.Write ("\t}\n"); }
public override void EmitCpp(CppEmitContext cec) { var leftParens = cec.NeedParens(this, Left); var rightParens = cec.NeedParens(this, Right); if (leftParens) { cec.Buf.Write("(", Location); } Left.EmitCpp(cec); if (leftParens) { cec.Buf.Write(")"); } cec.Buf.Write(" " + this.OperName(oper) + " "); if (rightParens) { cec.Buf.Write("(", Location); } Right.EmitCpp(cec); if (rightParens) { cec.Buf.Write(")"); } }
protected override void DoEmitCpp(CppEmitContext cec) { // NOTE: WE don't optimize for emty loop right now.. cec.Buf.Write("\tfor (", loc); cec.PushForceExpr(true); if (Initializer != null) { Initializer.EmitCpp(cec); } cec.Buf.Write("; "); if (Condition != null) { Condition.EmitCpp(cec); } cec.Buf.Write("; "); if (Iterator != null) { Iterator.EmitCpp(cec); } cec.Buf.Write(") "); cec.PopForceExpr(); cec.Buf.WriteBlockStatement(Statement); cec.Buf.Write("\n"); }
protected override void DoEmitCpp(CppEmitContext cec) { if (Initializer != null) { cec.Buf.Write("\t", loc); Initializer.EmitCpp(cec); } else { cec.Buf.Write("\t", cec.MakeCppFullTypeName(this.type), " ", Variable.Name, loc); } if (declarators != null) { foreach (var d in declarators) { cec.Buf.Write(", "); if (d.Initializer != null) { d.Initializer.EmitCpp(cec); } else { cec.Buf.Write(d.Variable.Name); } } } cec.Buf.Write(";\n"); }
protected override void DoEmitCpp(CppEmitContext cec) { if (empty) { return; } // // Inform whether we are infinite or not // if (expr is Constant) { // expr is 'true', since the 'empty' case above handles the 'false' case cec.Buf.Write("\twhile (true) ", loc); } else { cec.Buf.Write("\twhile (", loc); expr.EmitCpp(cec); cec.Buf.Write(") "); } cec.Buf.WriteBlockStatement(Statement); cec.Buf.Write("\n"); }
public override void EmitContainerCpp(CppEmitContext cec) { VerifyClsCompliance(); var ns = cec.MakeCppNamespaceName(this.NS.Name); var ns_names = this.NS.Name.Split(new char[] { '.' }); bool is_global_ns = String.IsNullOrEmpty(ns); if (!is_global_ns && ns != cec.PrevNamespace) { if (cec.PrevNamespaceNames != null) { foreach (var n in cec.PrevNamespaceNames) { cec.Buf.Unindent(); cec.Buf.Write("\t}\n"); } } foreach (var n in ns_names) { cec.Buf.Write("\tnamespace ", n, " {\n"); cec.Buf.Indent(); } cec.MarkNamespaceDefined(NS.Name); cec.PrevNamespace = ns; cec.PrevNamespaceNames = ns_names; } base.EmitContainerCpp(cec); }
protected void EmitScopeInitializersCpp(CppEmitContext cec) { foreach (Statement s in scope_initializers) { s.EmitCpp(cec); } }
public override void EmitStatementCpp(CppEmitContext cec) { cec.Buf.Write("\t", Location); EmitCpp(cec); cec.Buf.Write(";\n"); }
public void EmitCallCpp(CppEmitContext cec, Arguments arguments) { cec.Buf.Write("(", Location); if (arguments != null) { arguments.EmitCpp(cec); } cec.Buf.Write(")"); }
/// <summary> /// Base C++ emit method. This is also entry point for CLS-Compliant verification. /// </summary> public virtual void EmitCpp(CppEmitContext cec) { if (!Compiler.Settings.VerifyClsCompliance) { return; } VerifyClsCompliance(); }
public override void EmitCpp(CppEmitContext cec) { cec.Buf.Write("new ", cec.MakeCppFullTypeName(Type, false), "(", Location); if (arguments != null) { arguments.EmitCpp(cec); } cec.Buf.Write(")"); }
public override void EmitContainerCpp(CppEmitContext cec) { if ((caching_flags & Flags.CloseTypeCreated) != 0) { return; } EmitCpp(cec); }
protected override void DoEmitCpp(CppEmitContext cec) { if (expr != null) { cec.Buf.Write("\treturn ", loc); expr.EmitCpp(cec); cec.Buf.Write(";\n"); } }
public virtual void EmitContainerCpp(CppEmitContext cec) { if (containers != null) { for (int i = 0; i < containers.Count; ++i) { containers[i].EmitContainerCpp(cec); } } }
protected override void DoEmitCpp(CppEmitContext cec) { cec.Buf.Write("\tdo ", loc); cec.Buf.WriteBlockStatement(EmbeddedStatement); cec.Buf.Write(" while (", expr.Location); expr.EmitCpp(cec); cec.Buf.Write(");\n"); }
public override void EmitCpp(CppEmitContext cec) { try { base.EmitCpp(cec); } catch { Console.WriteLine("Internal compiler error at {0}: exception caught while emitting {1}", Location, MethodBuilder); throw; } }
public override void EmitCpp(CppEmitContext cec) { if (Value != null) { cec.Buf.Write("\"", cec.Buf.EscapeString(Value), "\"", Location); } else { cec.Buf.Write("\"\"", Location); } }
public override void EmitCpp(CppEmitContext cec) { if (IsStatic) { cec.Buf.Write(cec.MakeCppFullTypeName(best_candidate.DeclaringType, false), loc); } else { InstanceExpression.EmitCpp(cec); } cec.Buf.Write("->", "get_", best_candidate.Name, "()", loc); }
public override void EmitCpp(CppEmitContext cec) { if (this.Get != null) { this.Get.EmitCpp(cec); } if (this.Set != null) { this.Set.EmitCpp(cec); } }
public override void EmitContainerCpp(CppEmitContext cec) { if (OptAttributes != null) { OptAttributes.EmitCpp(cec); } if (cec.Pass == CppPasses.PREDEF) { foreach (var tc in containers) { tc.PrepareEmit(); } } cec.PrevNamespace = null; cec.PrevNamespaceNames = null; base.EmitContainerCpp(cec); // Close last unclosed namespace.. if (cec.PrevNamespaceNames != null) { foreach (var n in cec.PrevNamespaceNames) { cec.Buf.Unindent(); cec.Buf.Write("\t}\n"); } } cec.PrevNamespace = null; cec.PrevNamespaceNames = null; if (cec.Pass == CppPasses.METHODS) { if (Compiler.Report.Errors == 0 && !Compiler.Settings.WriteMetadataOnly) { VerifyMembers(); } } if (anonymous_types != null) { foreach (var atypes in anonymous_types) { foreach (var at in atypes.Value) { at.EmitContainerCpp(cec); } } } }
public override void EmitCpp(CppEmitContext cec) { double d = Value; if (d == System.Math.Floor(d)) { cec.Buf.Write(GetValue().ToString(), ".0", Location); } else { cec.Buf.Write(GetValue().ToString(), Location); } }
public override void EmitCpp(CppEmitContext cec) { if (InstanceExpression != null) { InstanceExpression.EmitCpp(cec); cec.Buf.Write("->"); } else { cec.Buf.Write(DeclaringType.Name, "->", Location); } cec.Buf.Write(Name); }
public override void EmitCpp(CppEmitContext cec) { if (Target is PropertyExpr) { ((PropertyExpr)Target).EmitAssignCpp(cec, Source, false, false); } else { Target.EmitCpp(cec); cec.Buf.Write(" = "); Source.EmitCpp(cec); } }
public override void EmitAssignCpp(CppEmitContext cec, Expression source, bool leave_copy, bool isCompound) { if (IsStatic) { cec.Buf.Write(cec.MakeCppFullTypeName(best_candidate.DeclaringType, false), loc); } else { InstanceExpression.EmitCpp(cec); } cec.Buf.Write("->", "set_", best_candidate.Name, "("); source.EmitCpp(cec); cec.Buf.Write(")", loc); }
public virtual void EmitCpp(CppEmitContext cec) { bool first = true; foreach (Argument a in args) { if (!first) { cec.Buf.Write(", "); } a.Expr.EmitCpp(cec); first = false; } }
public void EmitCpp() { cec = new CppEmitContext(module); cec.Buf.Write("// Module: ", this.Name, ".cpp\n"); cec.Pass = CppPasses.PREDEF; module.EmitContainerCpp(cec); cec.Pass = CppPasses.CLASSDEF; module.EmitContainerCpp(cec); cec.Pass = CppPasses.METHODS; module.EmitContainerCpp(cec); }
public override void EmitCpp(CppEmitContext cec) { bool needsParen = cec.NeedParens(this, Expr); cec.Buf.Write(OperName(Oper), Location); if (needsParen) { cec.Buf.Write("("); } Expr.EmitCpp(cec); if (needsParen) { cec.Buf.Write(")"); } }
public override void EmitCpp(CppEmitContext cec) { if (cec.Pass == CppPasses.CLASSDEF) { cec.Buf.Write("\t", cec.MakeCppFullTypeName(this.Property.MemberType), " get_", Property.MemberName.Name, "();\n"); } else { cec.Buf.Write("\t", cec.MakeCppFullTypeName(this.Property.MemberType), cec.MakeCppTypeName(Parent.CurrentType, false), "::", " get_", Property.MemberName.Name, "() ", Location); method_data.EmitCpp(Parent as TypeDefinition, cec); cec.Buf.Write("\n"); block = null; } }
public override void EmitCpp(CppEmitContext cec) { cec.Buf.Write("\t", cec.MakeCppFullTypeName(MemberType), " ", Name, Location); if (initializer != null) { ResolveContext rc = new ResolveContext(this); var expr = initializer.Resolve(rc); if (expr != null) { cec.Buf.Write(" = "); expr.EmitCpp(cec); } } cec.Buf.Write(";\n"); }