// Protected Methods protected void EmitHeaderStatement(PySourceCodeEmiter emiter, PySourceCodeWriter writer, PyEmitStyle style, string header, IPyStatement statement) { style = style ?? new PyEmitStyle(); var iStyle = PyEmitStyle.xClone(style, ShowBracketsEnum.IfManyItems); if (style.UseBracketsEvenIfNotNecessary) { iStyle.Brackets = ShowBracketsEnum.Always; } var statementToEmit = PyCodeBlock.Reduce(statement); var emptyStatement = !PyCodeBlock.HasAny(statementToEmit); if (emptyStatement) { header += "{}"; } if (style.Compression == EmitStyleCompression.NearCrypto) { writer.Write(header); } else { writer.WriteLn(header); } if (emptyStatement) { return; } var myBracket = style.UseBracketsEvenIfNotNecessary; if (!myBracket) { var gf = statementToEmit.GetStatementEmitInfo(iStyle); if (gf != StatementEmitInfo.NormalSingleStatement) { myBracket = true; } } writer.IncIndent(); if (myBracket) { iStyle.Brackets = ShowBracketsEnum.Never; writer.OpenLn("{"); } statementToEmit.Emit(emiter, writer, iStyle); if (myBracket) { writer.CloseLn("}"); } writer.DecIndent(); }
// Public Methods public void Emit(PySourceCodeEmiter emiter, PySourceCodeWriter writer, PyEmitStyle style) { foreach (var i in NestedClasses) { i.Emit(emiter, writer, style); } var saveStyleCurrentClass = style.CurrentClass; var saveStyleCurrentNamespace = style.CurrentNamespace; try { if (IsEmpty) { return; } if (style.CurrentNamespace == null) { style.CurrentNamespace = PyNamespace.Root; } if (style.CurrentNamespace != Name.Namespace) { throw new Exception("Unable to emit class into different namespace"); } var e = ""; if (!_baseTypeName.IsEmpty) { e = " extends " + _baseTypeName.NameForEmit(style); } writer.OpenLnF("class {0}{1}:", Name.ShortName, e); style.CurrentClass = Name; // do not move this before "class XXX" is emited for (var orderGroup = 0; orderGroup < 3; orderGroup++) { foreach (var field in Fields.Where(_ => FieldOrderGroup(_) == orderGroup)) { field.Emit(emiter, writer, style); } } foreach (var me in Methods) { me.Emit(emiter, writer, style); } writer.CloseLn(""); } finally { style.CurrentClass = saveStyleCurrentClass; style.CurrentNamespace = saveStyleCurrentNamespace; } }
// Public Methods public override void Emit(PySourceCodeEmiter emiter, PySourceCodeWriter writer, PyEmitStyle style) { writer.OpenLnF("switch ({0}) {{", Expression.GetPyCode(style)); foreach (var sec in Sections) { foreach (var l in sec.Labels) { writer.WriteLnF("{0}{1}:", l.IsDefault ? "" : "case ", l.IsDefault ? "default" : l.Value.GetPyCode(style)); } writer.IncIndent(); sec.Statement.Emit(emiter, writer, style); writer.DecIndent(); } writer.CloseLn("}"); }
public virtual void Emit(PySourceCodeEmiter emiter, PySourceCodeWriter code, PyEmitStyle style) { // public function addFunction($function, $namespace = '') var argumentsCode = Arguments.Select(u => u.GetPyCode(style)).ToList(); var mk = GetPyMethodKind(); switch (mk) { case PyMethodKind.ClassStatic: code.WriteLn("@staticmethod"); argumentsCode.Insert(0, GetCurrentClassAlias()); break; case PyMethodKind.OutOfClass: break; case PyMethodKind.ClassInstance: argumentsCode.Insert(0, "self"); break; default: throw new ArgumentOutOfRangeException(); } var param = Arguments == null ? "" : string.Join(", ", argumentsCode); code.OpenLnF("def {0}({1}):", Name, param); { var g = GetGlobals(); if (!string.IsNullOrEmpty(g)) { code.WriteLnF("global {0};", g); } } foreach (var statement in Statements) { var g = PyEmitStyle.xClone(style); g.Brackets = ShowBracketsEnum.Never; g.CurrentMethod = this; statement.Emit(emiter, code, g); } code.CloseLn(""); }
// Public Methods public void Emit(PySourceCodeEmiter emiter, PySourceCodeWriter writer, PyEmitStyle style) { if (Statements.Count == 0) { return; } var bracketStyle = style == null ? ShowBracketsEnum.IfManyItems : style.Brackets; var brack = bracketStyle == ShowBracketsEnum.Never ? false : bracketStyle == ShowBracketsEnum.Always ? true : Statements == null || !(Statements.Count == 1); brack = false; if (Statements != null && Statements.Count == 1 && bracketStyle == ShowBracketsEnum.IfManyItems_OR_IfStatement) { if (Statements[0] is PyIfStatement) { brack = true; } } var iStyle = PyEmitStyle.xClone(style, ShowBracketsEnum.Never); if (brack) { writer.OpenLn("{"); } foreach (var i in Statements) { i.Emit(emiter, writer, iStyle); } if (brack) { writer.CloseLn("}"); } }
// Public Methods public override void Emit(PySourceCodeEmiter emiter, PySourceCodeWriter writer, PyEmitStyle style) { var isBeauty = style == null || style.Compression == EmitStyleCompression.Beauty; var ifTrueAny = PyCodeBlock.HasAny(_ifTrue); var ifFalseAny = PyCodeBlock.HasAny(_ifFalse); if (!ifTrueAny && !ifFalseAny) { return; } writer.OpenLnF("if{1}({0}){2}", Condition.GetPyCode(style), isBeauty ? " " : "", ifTrueAny ? "" : "{}"); if (ifTrueAny) { var iStyle = PyEmitStyle.xClone(style, ShowBracketsEnum.IfManyItems_OR_IfStatement); if (style != null && style.UseBracketsEvenIfNotNecessary) { iStyle.Brackets = ShowBracketsEnum.Always; } var bound = PyCodeBlock.Bound(_ifTrue); bound.Emit(emiter, writer, iStyle); } writer.DecIndent(); if (!ifFalseAny) { return; } var oneLine = _ifFalse is PyIfStatement; var oldIndent = writer.Intent; { if (oneLine) { writer.Write("else "); writer.SkipIndent = true; } else { writer.OpenLn("else"); } var myBracket = style != null && style.UseBracketsEvenIfNotNecessary; var iStyle = PyEmitStyle.xClone(style, myBracket ? ShowBracketsEnum.Never : ShowBracketsEnum.IfManyItems_OR_IfStatement); if (!myBracket) { var gf = _ifFalse.GetStatementEmitInfo(iStyle); if (gf != StatementEmitInfo.NormalSingleStatement) { myBracket = true; } } if (myBracket) { iStyle.Brackets = ShowBracketsEnum.Never; writer.OpenLn("{"); } _ifFalse.Emit(emiter, writer, iStyle); if (myBracket) { writer.CloseLn("}"); } } writer.Intent = oldIndent; }