示例#1
0
        /// <summary>
        /// Load program from ascii, bytecode or protected stream.
        /// </summary>
        /// <param name="stream">Program stream</param>
        /// <param name="rebuildLineNumber">Should rebuild line numbers</param>
        public void Load(Stream stream, bool rebuildLineNumber = true)
        {
            Erase();
            var programMode = FindDocumentType(stream);

            Bytecode.WriteByte((byte)programMode);
            switch (programMode)
            {
            case ProgramMode.Binary:
                stream.CopyTo(Bytecode);
                break;

            case ProgramMode.Protected:
                _protected = AllowProtect;
                ProtectedProgramEncoder.Decode(stream).CopyTo(Bytecode);
                break;

            case ProgramMode.Ascii:
                Merge(stream);
                break;
            }

            if (rebuildLineNumber && programMode != ProgramMode.Ascii)
            {
                RebuildLineNumbers();
            }
        }