本文整理汇总了C#中Compiler.Indent方法的典型用法代码示例。如果您正苦于以下问题:C# Compiler.Indent方法的具体用法?C# Compiler.Indent怎么用?C# Compiler.Indent使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Compiler
的用法示例。
在下文中一共展示了Compiler.Indent方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Compile
public override void Compile(Compiler compiler, Node node, NodeParent parent)
{
compiler.AppendLine("while(true)");
compiler.AppendLine("{");
compiler.Indent();
if(((WhileLoopExpression)node).IsPostTest)
{
foreach(var stmt in ((WhileLoopExpression)node).Statements)
compiler.CompileNode(stmt, parent.CreateChild(node));
}
if (((WhileLoopExpression)node).IsWhileLoop)
compiler.CompileNode(((WhileLoopExpression)node).Condition, parent.CreateChild(node));
else
compiler.CompileNode(new NotExpression(((WhileLoopExpression)node).Condition, node.Location), parent.CreateChild(node));
compiler.AppendLine("$_cond = array_pop($_stack);");
compiler.AppendLine("if(get_class($_cond) === 'F_NilClass' || get_class($_cond) === 'F_FalseClass' || is_subclass_of($_cond, 'F_NilClass') || is_subclass_of($_cond, 'F_FalseClass'))");
compiler.AppendLine("{");
compiler.Indent();
compiler.AppendLine("break;");
compiler.Dedent();
compiler.AppendLine("}");
if (!((WhileLoopExpression)node).IsPostTest)
{
foreach (var stmt in ((WhileLoopExpression)node).Statements)
compiler.CompileNode(stmt, parent.CreateChild(node));
}
compiler.Dedent();
compiler.AppendLine("}");
}
示例2: Compile
public override void Compile(Compiler compiler, Node node, NodeParent parent)
{
var body = (Body)node;
if (body.RescueClauses != null)
{
for(int i = 0; i < body.RescueClauses.Count; i++)
{
compiler.AppendLine("try");
compiler.AppendLine("{");
compiler.Indent();
}
}
foreach (var stmt in body.Statements)
compiler.CompileNode(stmt, parent.CreateChild(node));
if (body.RescueClauses != null)
{
foreach (var rescue in body.RescueClauses)
{
compiler.Dedent();
compiler.AppendLine("}");
compiler.AppendLine("catch(ErrorCarrier $err)");
compiler.AppendLine("{");
compiler.Indent();
StringBuilder clause = new StringBuilder();
bool first = true;
foreach (var t in rescue.Types)
{
if (t.NodeType != NodeTypes.ConstantVariable)
throw new FructoseCompileException("Type constant must be supplied in rescue expression", rescue);
if (!first)
clause.Append(" && ");
first = false;
clause.Append(string.Format("!is_a($err->val, '{0}')", Mangling.RubyIdentifierToPHP(((ConstantVariable)t).Name)));
}
compiler.AppendLine("if({0})", clause.ToString());
compiler.Indent();
compiler.AppendLine("throw $err;");
compiler.Dedent();
compiler.AppendLine("{0} = $err->val;", ((Variable)(rescue.Target ?? new GlobalVariable("!", rescue.Location))).ToPHPVariable());
foreach (var stmt in rescue.Statements)
compiler.CompileNode(stmt, parent.CreateChild(node));
compiler.Dedent();
compiler.AppendLine("}");
}
}
}
示例3: Compile
public override void Compile(Compiler compiler, Node node, NodeParent parent)
{
var pa = (ParallelAssignmentExpression)node;
if (pa.Left.HasUnsplattedValue)
throw new FructoseCompileException("Unsplats not yet supported.", node);
if (pa.Right.Length == 1)
{
compiler.CompileNode(pa.Right[0], parent.CreateChild(node));
compiler.AppendLine("if(get_class($_stack[count($_stack)-1]) !== 'F_Array')");
compiler.Indent();
compiler.AppendLine("$_stack[] = F_Array::__from_array(array(array_pop($_stack)));");
compiler.Dedent();
}
else
{
compiler.AppendLine("$ptmp = array();");
foreach (var rval in pa.Right)
{
compiler.CompileNode(rval, parent.CreateChild(node));
compiler.AppendLine("$ptmp[] = array_pop($_stack);");
}
compiler.AppendLine("$_stack[] = F_Array::__from_array($ptmp);");
}
var sb = new StringBuilder();
foreach (var lval in pa.Left.LeftValues)
sb.Append(SimpleAssignment.assignmentVar(lval, parent) + ",");
compiler.AppendLine("@list({0}) = array_pop($_stack)->__ARRAY;", sb.ToString());
foreach (var lval in pa.Left.LeftValues.Reverse())
compiler.AppendLine("if({0} === NULL) {0} = new F_NilClass;", SimpleAssignment.assignmentVar(lval, parent));
}
示例4: Compile
public override void Compile(Compiler compiler, Node node, NodeParent parent)
{
compiler.CompileNode(((NotExpression)node).Expression, parent.CreateChild(node));
compiler.AppendLine("$_and_tmp = get_class(array_pop($_stack));");
compiler.AppendLine("if($_and_tmp !== 'F_NilClass' && $_and_tmp !== 'F_FalseClass')");
compiler.AppendLine("{");
compiler.Indent();
compiler.AppendLine("$_stack[] = new F_FalseClass;");
compiler.Dedent();
compiler.AppendLine("}");
compiler.AppendLine("else");
compiler.AppendLine("{");
compiler.Indent();
compiler.AppendLine("$_stack[] = new F_TrueClass;");
compiler.Dedent();
compiler.AppendLine("}");
}
示例5: Compile
public override void Compile(Compiler compiler, Node node, NodeParent parent)
{
compiler.CompileNode(((IfExpression)node).Condition, parent.CreateChild(node));
compiler.AppendLine("$_cond = array_pop($_stack);");
compiler.AppendLine("if(get_class($_cond) !== 'F_NilClass' && get_class($_cond) !== 'F_FalseClass' && !is_subclass_of($_cond, 'F_NilClass') && !is_subclass_of($_cond, 'F_FalseClass'))");
compiler.AppendLine("{");
compiler.Indent();
foreach (var stmt in ((IfExpression)node).Body)
compiler.CompileNode(stmt, parent.CreateChild(node));
compiler.Dedent();
compiler.AppendLine("}");
if (((IfExpression)node).ElseIfClauses.Count > 0)
{
compiler.AppendLine("else");
compiler.AppendLine("{");
compiler.Indent();
var firstelseif = ((IfExpression)node).ElseIfClauses.First();
var rest = ((IfExpression)node).ElseIfClauses.Skip(1).ToList();
if (firstelseif.Condition == null)
{
foreach (var stmt in firstelseif.Statements)
compiler.CompileNode(stmt, parent.CreateChild(node));
}
else
{
compiler.CompileNode(new IfExpression(firstelseif.Condition, firstelseif.Statements, rest,
new SourceSpan(firstelseif.Location.Start, (rest.Count > 0 ? rest.Last() : firstelseif).Location.End)), parent.CreateChild(node));
}
compiler.Dedent();
compiler.AppendLine("}");
}
}
示例6: Compile
public override void Compile(Compiler compiler, Node node, NodeParent parent)
{
CaseExpression c = (CaseExpression)node;
compiler.CompileNode(c.Value, parent.CreateChild(node));
compiler.AppendLine("$_caseval = array_pop($_stack);");
foreach(var when in c.WhenClauses)
{
var sb = new StringBuilder();
compiler.AppendLine("$_comparisons = array();");
foreach(var compar in when.Comparisons)
{
if(sb.Length > 0)
sb.Append(" || ");
sb.Append("_isTruthy(array_pop($_comparisons))");
compiler.CompileNode(compar, parent.CreateChild(node).CreateChild(when));
compiler.AppendLine("$_comparisons[] = array_pop($_stack)->__operator_stricteq(NULL, $_caseval);");
}
compiler.AppendLine("if({0})", sb.ToString());
compiler.AppendLine("{");
compiler.Indent();
foreach(var stmt in when.Statements)
compiler.CompileNode(stmt, parent.CreateChild(node).CreateChild(when));
compiler.Dedent();
compiler.AppendLine("}");
compiler.AppendLine("else");
compiler.AppendLine("{");
compiler.Indent();
}
if(c.ElseStatements != null)
foreach(var stmt in c.ElseStatements)
compiler.CompileNode(stmt, parent.CreateChild(node));
for(int i = 0; i < c.WhenClauses.Length; i++)
{
compiler.Dedent();
compiler.AppendLine("}");
}
}
示例7: Compile
public override void Compile(Compiler compiler, Node node, NodeParent parent)
{
if (parent.OfType<MethodDefinition>().Count() > 0)
throw new FructoseCompileException("Nested methods are not supported.", node);
if (((MethodDefinition)node).Parameters.Mandatory.Length > ((MethodDefinition)node).Parameters.LeadingMandatoryCount)
throw new FructoseCompileException("Additional arguments after splats in methods are currently unsupported.", node);
string visibility = parent.OfType<ClassDefinition>().Count() > 0 ?
"public " : "";
string signature = visibility + "function " + Mangling.RubyMethodToPHP(((MethodDefinition)node).Name) + "(";
List<string> compiledParams = new List<string>();
if (((MethodDefinition)node).Name.Contains("__lambda_"))
compiledParams.Add("$_locals");
compiledParams.Add("$block");
foreach (var arg in ((MethodDefinition)node).Parameters.Mandatory)
compiledParams.Add("$" + Mangling.RubyIdentifierToPHP(arg.ToString()));
foreach (var arg in ((MethodDefinition)node).Parameters.Optional)
compiledParams.Add("$" + Mangling.RubyIdentifierToPHP(arg.Left.ToString()) + "=NULL");
signature += String.Join(", ", compiledParams);
signature += ")";
compiler.AppendLine(signature);
compiler.AppendLine("{");
compiler.Indent();
compiler.AppendLine("$_stack = array();");
compiler.AppendLine("if(!isset($_locals)) $_locals = new stdClass;");
if (parent.OfType<ClassDefinition>().Count() > 0)
{
compiler.AppendLine("if(!isset($_locals->self)) $_locals->self = $this;");
}
else
{
compiler.AppendLine("global $_gthis;");
compiler.AppendLine("if(!isset($_locals->self)) $_locals->self = $_gthis;");
}
compiler.AppendLine("if(!isset($_locals->block)) $_locals->block = $block;");
compiler.AppendLine("foreach(array(" + string.Join(", ", ((MethodDefinition)node).Parameters.Mandatory
.Select(arg => "\"" + Mangling.RubyIdentifierToPHP(arg.ToString()) + "\"")
.ToArray()) + ") as $parm)");
compiler.Indent();
compiler.AppendLine("$_locals->$parm = $$parm;");
compiler.Dedent();
foreach (var arg in ((MethodDefinition)node).Parameters.Optional)
{
string parm = Mangling.RubyIdentifierToPHP(arg.Left.ToString());
compiler.AppendLine("if($" + parm + " === NULL) {");
compiler.Indent();
compiler.CompileNode(arg.Right, parent.CreateChild(node));
compiler.AppendLine("$_locals->" + parm + " = array_pop($_stack);");
compiler.Dedent();
compiler.AppendLine("} else {");
compiler.Indent();
compiler.AppendLine("$_locals->" + parm + " = $" + parm + ";");
compiler.Dedent();
compiler.AppendLine("}");
}
if (((MethodDefinition)node).Parameters.Unsplat != null)
compiler.AppendLine("$_locals->" + Mangling.RubyIdentifierToPHP(((MethodDefinition)node).Parameters.Unsplat.ToString()) + " = "
+ "F_Array::__from_array(array_slice(func_get_args(), " + compiledParams.Count + "));");
compiler.AppendLine("global $_lambda_objs;");
compiler.AppendLine("global $_globals;");
foreach (var child in ((MethodDefinition)node).Body.Statements)
compiler.CompileNode(child, parent.CreateChild(node));
if (((MethodDefinition)node).Name.Contains("__lambda_"))
compiler.AppendLine("return array( 'locals' => $_locals, 'retval' => array_pop($_stack) );");
else
compiler.AppendLine("return array_pop($_stack);");
compiler.Dedent();
compiler.AppendLine("}");
}
示例8: Compile
public override void Compile(Compiler compiler, IronRuby.Compiler.Ast.Node node, NodeParent parent)
{
string mname = Mangling.RubyMethodToPHP(((MethodCall)node).MethodName);
if (compilerMethods.ContainsKey(mname))
{
compilerMethods[mname].Compile(compiler, (MethodCall)node, parent);
return;
}
if (((MethodCall)node).Arguments != null)
foreach (var arg in ((MethodCall)node).Arguments.Expressions.Reverse())
compiler.CompileNode(arg, parent.CreateChild(node));
bool callStatic = false;
if (((MethodCall)node).Target == null)
{
compiler.AppendLine("$_stack[] = $_locals->self;");
}
else
{
if (((MethodCall)node).Target.NodeType == NodeTypes.ConstantVariable)
callStatic = true;
else
compiler.CompileNode(((MethodCall)node).Target, parent.CreateChild(node));
}
if (((MethodCall)node).Block != null)
{
compiler.AppendLine("$_lambda_objs_offset = count($_lambda_objs);");
compiler.AppendLine("$_lambda_objs[] = $_locals;");
}
if (((MethodCall)node).Block != null)
{
compiler.AppendLine("try");
compiler.AppendLine("{");
compiler.Indent();
}
string call = callStatic
? string.Format("$_stack[] = {0}::S{1}(", Mangling.RubyIdentifierToPHP(((ConstantVariable)((MethodCall)node).Target).Name), mname)
: string.Format("$_stack[] = array_pop($_stack)->{0}(", mname);
if (((MethodCall)node).Block != null)
{
if (((MethodCall)node).Block.NodeType == NodeTypes.BlockReference)
{
var expr = ((BlockReference)((MethodCall)node).Block).Expression;
if(expr.NodeType != NodeTypes.LocalVariable
&& parent.OfType<MethodDefinition>().Count() != 1
&& parent.OfType<MethodDefinition>().Single().Parameters != null
&& parent.OfType<MethodDefinition>().Single().Parameters.Block != null
&& ((LocalVariable)expr).Name != parent.OfType<MethodDefinition>().Single().Parameters.Block.Name)
throw new FructoseCompileException("Block references not referring to a block parameter are not yet supported.", ((MethodCall)node).Block);
call += "$block";
}
else
{
var block_mname = compiler.Transformations.RefactoredBlocksToMethods[(BlockDefinition)((MethodCall)node).Block];
call += "create_function('',sprintf('global $_lambda_objs; $args = func_get_args(); $offset = %d; $_locals = $_lambda_objs[$offset]; array_unshift($args, $_locals); $r = call_user_func_array(";
if (parent.OfType<ClassDefinition>().Count() > 0)
call += "array($_locals->self,\"" + Mangling.RubyIdentifierToPHP(block_mname) + "\")";
else
call += "\"" + Mangling.RubyIdentifierToPHP(block_mname) + "\"";
call += ", $args); $_lambda_objs[$offset] = $r[\"locals\"]; return $r[\"retval\"];',$_lambda_objs_offset))";
}
}
else
call += "NULL";
if (((MethodCall)node).Arguments != null)
{
for (int i = 0; i < ((MethodCall)node).Arguments.Expressions.Length; i++)
call += ", array_pop($_stack)";
}
compiler.AppendLine(call + ");");
if (((MethodCall)node).Block != null)
{
compiler.Dedent();
compiler.AppendLine("}");
compiler.AppendLine("catch(ReturnFromBlock $rfb)");
compiler.AppendLine("{");
compiler.Indent();
compiler.AppendLine("return $rfb->val;");
compiler.Dedent();
compiler.AppendLine("}");
compiler.AppendLine("$_locals = $_lambda_objs[$_lambda_objs_offset];");
}
}