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);
                }
            }
        }
Exemple #2
0
        /// <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);
        }