Пример #1
0
        private static (DeserializableMember?Member, ImmutableArray <Diagnostic> Diagnostics) MakeMember(
            Location?location,
            DeserializerTypes types,
            string name,
            Setter setter,
            Parser?parser,
            Reset?reset,
            bool isRequired,
            int?order,
            ImmutableArray <Diagnostic> diags
            )
        {
            if (diags.IsEmpty)
            {
                if (parser == null && !Parser.TryGetDefault(types, setter.ValueType, out parser))
                {
                    var diag = Diagnostics.NoBuiltInParser(location, setter.ValueType);
                    diags = diags.Add(diag);
                    return(null, diags);
                }

                parser = Utils.NonNull(parser);

                return(new DeserializableMember(name, setter, parser, reset, isRequired, order), ImmutableArray <Diagnostic> .Empty);
            }

            return(null, diags);
        }
Пример #2
0
 public AstBinary(Parser?parser, Position startLoc, Position endLoc, AstNode left, AstNode right, Operator op) :
     base(parser, startLoc, endLoc)
 {
     Left     = left;
     Right    = right;
     Operator = op;
 }
Пример #3
0
 public override Program Load(Address?addrLoad)
 {
     this.program       = new Program();
     parser             = CreateParser();
     var(hdr, specific) = parser.ParseHeader(addrLoad);
     this.program       = parser.ParseLoadCommands(hdr, specific.Architecture, addrLoad);
     return(this.program);
 }
Пример #4
0
        private BindingRestrictions MakeRestrictions(Parser?expected, TypeInfo returnType)
        {
            var expectedConst = Expression.Constant(expected);
            var get           = GetParser(returnType);
            var eq            = Expression.Equal(expectedConst, get);

            var sameParserRestriction = BindingRestrictions.GetExpressionRestriction(eq);

            var expressionIsCellRestriction = BindingRestrictions.GetTypeRestriction(Expression, Types.DynamicCell);

            return(expressionIsCellRestriction.Merge(sameParserRestriction));
        }
Пример #5
0
        public void ConstructorTest()
        {
            try
            {
                parser = new Parser(bytes);
            }
            catch (Exception ex)
            {
                Assert.Fail(ex.Message);
            }

            Assert.Pass();
        }
Пример #6
0
 private void ValidateElement()
 {
     elementName.Init(reader.LocalName, XmlSchemaDatatype.XdrCanonizeUri(reader.NamespaceURI, NameTable, SchemaNames));
     ValidateChildElement();
     if (SchemaNames.IsXDRRoot(elementName.Name, elementName.Namespace) && reader.Depth > 0)
     {
         _inlineSchemaParser = new Parser(SchemaType.XDR, NameTable, SchemaNames, EventHandler);
         _inlineSchemaParser.StartParsing(reader, null);
         _inlineSchemaParser.ParseReaderNode();
     }
     else
     {
         ProcessElement();
     }
 }
Пример #7
0
        public bool?Process(char c)
        {
            _chars.Add(c);

            if (_parser == null)
            {
                switch (c)
                {
                case '[':
                    _parser = new CsiParser();
                    return(null);

                default:
                    return(false);
                }
            }

            return(_parser.Process(c));
        }
Пример #8
0
 private void ProcessInlineSchema()
 {
     if (!_inlineSchemaParser !.ParseReaderNode())
     { // Done
         _inlineSchemaParser.FinishParsing();
         SchemaInfo?xdrSchema = _inlineSchemaParser.XdrSchema;
         if (xdrSchema != null && xdrSchema.ErrorCount == 0)
         {
             foreach (string inlineNS in xdrSchema.TargetNamespaces.Keys)
             {
                 if (!this.schemaInfo !.HasSchema(inlineNS))
                 {
                     schemaInfo.Add(xdrSchema, EventHandler);
                     SchemaCollection !.Add(inlineNS, xdrSchema, null, false);
                     break;
                 }
             }
         }
         _inlineSchemaParser = null;
     }
 }
Пример #9
0
        private static Parser[] GetParserInstances(Assembly asm)
        {
            var parsers       = new List <Parser>();
            var customParsers = asm.GetTypes().Where(t => t.IsSubclassOf(typeof(Parser))).ToList();

            foreach (var parser in customParsers)
            {
                Log.Message($"Found custom parser: {parser}");
                Parser?parserInst = null;
                try
                {
                    parserInst = Activator.CreateInstance(parser) as Parser;
                }
                catch (Exception ex)
                {
                    Log.Error($"Can't instantiate type: {parser}. {ex}");
                }
                if (parserInst != null)
                {
                    parsers.Add(parserInst);
                }
            }
            return(parsers.ToArray());
        }
Пример #10
0
        public override Program LoadProgram(Address?addrLoad)
        {
            addrLoad ??= PreferredBaseAddress;
            this.program       = new Program();
            parser             = CreateParser();
            var(hdr, specific) = parser.ParseHeader(addrLoad);
            this.program       = parser.ParseLoadCommands(hdr, specific.Architecture, addrLoad);

            CollectSymbolStubs(parser, machoSymbols, imageSymbols);
            var imgSymbols = new SortedList <Address, ImageSymbol>();

            foreach (var de in imageSymbols)
            {
                if (program.SegmentMap.IsValidAddress(de.Key))
                {
                    program.ImageSymbols.Add(de.Key, de.Value);
                }
            }
            foreach (var ep in entryPoints)
            {
                program.EntryPoints[ep.Address] = ep;
            }
            return(this.program);
        }
Пример #11
0
 internal ExpressionEval(ILanguageDefinition languageDefinition, Lexer?lexer = null, Parser?parser = null)
 {
     LanguageDefinition = languageDefinition;
     Lexer  = lexer ?? new Lexer(LanguageDefinition);
     Parser = parser ?? new Parser(LanguageDefinition);
 }
Пример #12
0
 public AstUndefined(Parser?parser, Position startLoc, Position endLoc) : base(parser, startLoc, endLoc)
 {
 }
Пример #13
0
 public AstFalse(Parser?parser, Position startLoc, Position endLoc) : base(parser, startLoc, endLoc)
 {
 }
Пример #14
0
 public AstAssign(Parser?parser, Position startLoc, Position endLoc, AstNode left, AstNode right, Operator op) :
     base(parser, startLoc, endLoc, left, right, op)
 {
 }
Пример #15
0
 // returns true if we can
 static bool CanConvert <T>(Parser?p, ReadOnlySpan <char> data, in ReadContext ctx)
Пример #16
0
 public AstStatement(Parser?parser, Position startPos, Position endPos) : base(parser, startPos, endPos)
 {
 }
Пример #17
0
 public AstBoolean(Parser?parser, Position startLoc, Position endLoc) : base(parser, startLoc, endLoc)
 {
 }
Пример #18
0
        internal static DeserializableMember CreateInner(
            TypeInfo?beingDeserializedType,
            string?name,
            Setter?setter,
            Parser?parser,
            MemberRequired isRequired,
            Reset?reset,
            TypeInfo?aheadOfTimeGeneratedType
            )
        {
            if (beingDeserializedType == null)
            {
                Throw.ArgumentNullException(nameof(beingDeserializedType));
            }

            if (name == null)
            {
                Throw.ArgumentNullException(nameof(name));
            }

            if (setter == null)
            {
                Throw.ArgumentNullException(nameof(setter));
            }

            if (parser == null)
            {
                Throw.ArgumentNullException(nameof(parser));
            }

            if (name.Length == 0)
            {
                Throw.ArgumentException($"{nameof(name)} must be at least 1 character long", nameof(name));
            }

            bool isRequiredBool;

            switch (isRequired)
            {
            case MemberRequired.Yes:
                isRequiredBool = true;
                break;

            case MemberRequired.No:
                isRequiredBool = false;
                break;

            default:
                Throw.ArgumentException($"Unexpected {nameof(MemberRequired)}: {isRequired}", nameof(isRequired));
                return(default);
            }

            var valueType = setter.Takes;

            if (!valueType.IsAssignableFrom(parser.Creates))
            {
                Throw.ArgumentException($"Provided {nameof(Parser)} creates a {parser.Creates}, which cannot be passed to {setter} which expects a {valueType}", nameof(setter));
            }

            if (reset != null && reset.RowType.HasValue)
            {
                if (!reset.RowType.Value.IsAssignableFrom(beingDeserializedType))
                {
                    Throw.ArgumentException($"{nameof(reset)} must be callable on {beingDeserializedType}", nameof(reset));
                }
            }

            if (setter.Mode == BackingMode.ConstructorParameter && !isRequiredBool)
            {
                Throw.InvalidOperationException($"{nameof(Setter)} that is backed by a constructor parameter can only be used with {nameof(MemberRequired)}.{nameof(MemberRequired.Yes)}; {nameof(setter)} was {setter}");
            }

            return(new DeserializableMember(name, setter, parser, isRequiredBool, reset, aheadOfTimeGeneratedType));
        }
Пример #19
0
        private ManualTypeDescriberBuilder WithDeserializeMember(TypeInfo?forType, Setter?setter, string?name, Parser?parser, MemberRequired required, Reset?reset)
        {
            if (forType == null)
            {
                Throw.ArgumentNullException(nameof(forType));
            }

            if (setter == null)
            {
                Throw.ArgumentNullException(nameof(setter));
            }

            if (name == null)
            {
                Throw.ArgumentNullException(nameof(name));
            }

            if (parser == null)
            {
                Throw.ArgumentNullException(nameof(parser));
            }

            var toAdd = DeserializableMember.Create(forType, name, setter, parser, required, reset);

            if (!Deserializers.TryGetValue(forType, out var d))
            {
                Deserializers[forType] = d = ImmutableArray.CreateBuilder <DeserializableMember>();
            }

            d.Add(toAdd);

            return(this);
        }
Пример #20
0
 protected AstNode(Parser?parser, Position startLoc, Position endLoc)
 {
     Source = parser?.SourceFile;
     Start  = startLoc;
     End    = endLoc;
 }
Пример #21
0
 public AstInfinity(Parser?parser, Position startLoc, Position endLoc) : base(parser, startLoc, endLoc)
 {
 }
Пример #22
0
 public AstSequence(Parser?parser, Position startLoc, Position endLoc, ref StructList <AstNode> expressions) :
     base(parser, startLoc, endLoc)
 {
     Expressions.TransferFrom(ref expressions);
 }
Пример #23
0
 protected AstConstant(Parser?parser, Position startLoc, Position endLoc) : base(parser, startLoc, endLoc)
 {
 }