void PrintVariables(Sequence seqStart, Sequence seq) { if(seq != null) { Console.WriteLine("Available local variables:"); Dictionary<SequenceVariable, SetValueType> seqVars = new Dictionary<SequenceVariable, SetValueType>(); List<SequenceExpressionContainerConstructor> containerConstructors = new List<SequenceExpressionContainerConstructor>(); seqStart.GetLocalVariables(seqVars, containerConstructors, seq); foreach(SequenceVariable var in seqVars.Keys) { string type; string content; if(var.Value is IDictionary) EmitHelper.ToString((IDictionary)var.Value, out type, out content, null, shellProcEnv.ProcEnv.NamedGraph); else if(var.Value is IList) EmitHelper.ToString((IList)var.Value, out type, out content, null, shellProcEnv.ProcEnv.NamedGraph); else if(var.Value is IDeque) EmitHelper.ToString((IDeque)var.Value, out type, out content, null, shellProcEnv.ProcEnv.NamedGraph); else EmitHelper.ToString(var.Value, out type, out content, null, shellProcEnv.ProcEnv.NamedGraph); Console.WriteLine(" " + var.Name + " = " + content + " : " + type); } } else { Console.WriteLine("Available global (non null) variables:"); foreach(Variable var in shellProcEnv.ProcEnv.Variables) { string type; string content; if(var.Value is IDictionary) EmitHelper.ToString((IDictionary)var.Value, out type, out content, null, shellProcEnv.ProcEnv.NamedGraph); else if(var.Value is IList) EmitHelper.ToString((IList)var.Value, out type, out content, null, shellProcEnv.ProcEnv.NamedGraph); else if(var.Value is IDeque) EmitHelper.ToString((IDeque)var.Value, out type, out content, null, shellProcEnv.ProcEnv.NamedGraph); else EmitHelper.ToString(var.Value, out type, out content, null, shellProcEnv.ProcEnv.NamedGraph); Console.WriteLine(" " + var.Name + " = " + content + " : " + type); } } }
private void GenerateInternalDefinedSequenceApplicationMethod(SourceBuilder source, DefinedSequenceInfo sequence, Sequence seq) { source.AppendFront("public static bool ApplyXGRS_" + sequence.Name + "(GRGEN_LGSP.LGSPGraphProcessingEnvironment procEnv"); for(int i = 0; i < sequence.Parameters.Length; ++i) { source.Append(", " + TypesHelper.XgrsTypeToCSharpType(TypesHelper.DotNetTypeToXgrsType(sequence.ParameterTypes[i]), model) + " var_"); source.Append(sequence.Parameters[i]); } for(int i = 0; i < sequence.OutParameters.Length; ++i) { source.Append(", ref " + TypesHelper.XgrsTypeToCSharpType(TypesHelper.DotNetTypeToXgrsType(sequence.OutParameterTypes[i]), model) + " var_"); source.Append(sequence.OutParameters[i]); } source.Append(")\n"); source.AppendFront("{\n"); source.Indent(); source.AppendFront("GRGEN_LGSP.LGSPGraph graph = procEnv.graph;\n"); source.AppendFront("GRGEN_LGSP.LGSPActions actions = procEnv.curActions;\n"); knownRules.Clear(); if(gen.FireDebugEvents) { source.AppendFrontFormat("procEnv.DebugEntering(\"{0}\"", sequence.Name); for(int i = 0; i < sequence.Parameters.Length; ++i) { source.Append(", var_"); source.Append(sequence.Parameters[i]); } source.Append(");\n"); } EmitNeededVarAndRuleEntities(seq, source); EmitSequence(seq, source); if(gen.FireDebugEvents) { source.AppendFrontFormat("procEnv.DebugExiting(\"{0}\"", sequence.Name); for(int i = 0; i < sequence.OutParameters.Length; ++i) { source.Append(", var_"); source.Append(sequence.OutParameters[i]); } source.Append(");\n"); } source.AppendFront("return " + GetResultVar(seq) + ";\n"); source.Unindent(); source.AppendFront("}\n"); List<SequenceExpressionContainerConstructor> containerConstructors = new List<SequenceExpressionContainerConstructor>(); Dictionary<SequenceVariable, SetValueType> variables = new Dictionary<SequenceVariable, SetValueType>(); seq.GetLocalVariables(variables, containerConstructors, null); foreach(SequenceExpressionContainerConstructor cc in containerConstructors) { GenerateContainerConstructor(cc, source); } }