public void CompileDocument(TongCompilerContext.DocumentContext docContext) { var scriptObjects = docContext.ScriptDocument.As <TongScriptObjectTable>(); var scriptObjectMap = scriptObjects.NodeMap; // Find interface nodes foreach (var obj in scriptObjectMap) { delNodeHandler nodeHandler = null; var nodeDefInfo = obj.Value.DomNode.Type.GetTag <SF.Tong.Schema.NodeTypeInfo>(); var curNodeDefInfo = nodeDefInfo; // Search hierarchy for the handler for (; curNodeDefInfo != null; curNodeDefInfo = curNodeDefInfo.Parent) { if (m_NodeHandler.TryGetValue(curNodeDefInfo.Name, out nodeHandler)) { break; } } if (nodeHandler != null) { nodeHandler(docContext, obj.Value); } else { throw new Exception("Don't know how to handle:" + nodeDefInfo.Name); } } }
/// <summary> /// Execute the task /// </summary> public override void Execute() { var inputList = AppConfig.GetValueSet("in"); if (inputList == null) { Outputs.WriteLine(OutputMessageType.Error, "No input source"); throw new InvalidDataException("Input list is empty. add parameter +in=<sourceFile>"); } foreach (var input in inputList) { try { Uri uri = new Uri(Path.GetFullPath(input.Key)); var docContext = new TongCompilerContext.DocumentContext(); docContext.ScriptDocument = Open(uri); if (docContext.ScriptDocument != null) { m_compileContext.DocumentContexts.Add(docContext); } } catch (Exception exp) { Outputs.WriteLine(OutputMessageType.Error, "Failed to loading {0}, error:{1}", input.Value, exp.Message); throw exp; } } }
void CompileTask(TongCompilerContext.DocumentContext docContext, ScriptNode interfaceNode) { var linkCache = interfaceNode.As <ScriptNodeLinkCache>(); foreach (var connection in linkCache.FromThisNode) { } docContext.CompiledInterfaces.Add(new object()); }
void CompileInterface(TongCompilerContext.DocumentContext docContext, ScriptNode interfaceNode) { var linkCache = interfaceNode.As <ScriptNodeLinkCache>(); var signalConnections = GetSignalOutputs(linkCache); if (signalConnections.Count == 0) { return; } // interface only allow single output if (signalConnections.Count > 1) { return; } BytecodeGenContext byteCodeGenContext = new BytecodeGenContext(); BuildByteCodeForInput(byteCodeGenContext, signalConnections[0]); docContext.CompiledInterfaces.Add(byteCodeGenContext.Builder); }