Beispiel #1
0
        internal DebugValueEvaluationResult(DebugStackFrame stackFrame, string expression, string name, JObject json)
            : base(stackFrame, expression, name)
        {
            var repr = json["repr"];

            if (repr != null)
            {
                _reprObj = repr as JObject;
                if (_reprObj == null)
                {
                    throw new InvalidDataException(Invariant($"'repr' must be an object in:\n\n{json}"));
                }
            }

            TypeName       = json.Value <string>("type");
            Length         = json.Value <int?>("length");
            AttributeCount = json.Value <int?>("attr_count");
            SlotCount      = json.Value <int?>("slot_count");
            NameCount      = json.Value <int?>("name_count");

            var classes = json.Value <JArray>("classes");

            if (classes != null)
            {
                Classes = classes.Select(t => t.Value <string>()).ToArray();
            }

            var dim = json.Value <JArray>("dim");

            if (dim != null)
            {
                Dim = dim.Select(t => t.Value <int>()).ToArray();
            }

            var kind = json.Value <string>("kind");

            switch (kind)
            {
            case null:
            case "[[":
                Kind = DebugValueEvaluationResultKind.UnnamedItem;
                break;

            case "$":
                Kind = DebugValueEvaluationResultKind.NamedItem;
                break;

            case "@":
                Kind = DebugValueEvaluationResultKind.Slot;
                break;

            default:
                throw new InvalidDataException(Invariant($"Invalid kind '{kind}' in:\n\n{json}"));
            }

            var flags = json.Value <JArray>("flags")?.Select(v => v.Value <string>());

            if (flags != null)
            {
                foreach (var flag in flags)
                {
                    switch (flag)
                    {
                    case "atomic":
                        Flags |= DebugValueEvaluationResultFlags.Atomic;
                        break;

                    case "recursive":
                        Flags |= DebugValueEvaluationResultFlags.Recursive;
                        break;

                    case "has_parent_env":
                        Flags |= DebugValueEvaluationResultFlags.HasParentEnvironment;
                        break;

                    default:
                        throw new InvalidDataException(Invariant($"Unrecognized flag '{flag}' in:\n\n{json}"));
                    }
                }
            }
        }
        internal DebugValueEvaluationResult(DebugStackFrame stackFrame, string expression, string name, JObject json)
            : base(stackFrame, expression, name) {

            var repr = json["repr"];
            if (repr != null) {
                _reprObj = repr as JObject;
                if (_reprObj == null) {
                    throw new InvalidDataException(Invariant($"'repr' must be an object in:\n\n{json}"));
                }
            }

            TypeName = json.Value<string>("type");
            Length = json.Value<int?>("length");
            AttributeCount = json.Value<int?>("attr_count");
            SlotCount = json.Value<int?>("slot_count");
            NameCount = json.Value<int?>("name_count");

            var classes = json.Value<JArray>("classes");
            if (classes != null) {
                Classes = classes.Select(t => t.Value<string>()).ToArray();
            }

            var dim = json.Value<JArray>("dim");
            if (dim != null) {
                Dim = dim.Select(t => t.Value<int>()).ToArray();
            }

            var kind = json.Value<string>("kind");
            switch (kind) {
                case null:
                case "[[":
                    Kind = DebugValueEvaluationResultKind.UnnamedItem;
                    break;
                case "$":
                    Kind = DebugValueEvaluationResultKind.NamedItem;
                    break;
                case "@":
                    Kind = DebugValueEvaluationResultKind.Slot;
                    break;
                default:
                    throw new InvalidDataException(Invariant($"Invalid kind '{kind}' in:\n\n{json}"));
            }

            var flags = json.Value<JArray>("flags")?.Select(v => v.Value<string>());
            if (flags != null) {
                foreach (var flag in flags) {
                    switch (flag) {
                        case "atomic":
                            Flags |= DebugValueEvaluationResultFlags.Atomic;
                            break;
                        case "recursive":
                            Flags |= DebugValueEvaluationResultFlags.Recursive;
                            break;
                        case "has_parent_env":
                            Flags |= DebugValueEvaluationResultFlags.HasParentEnvironment;
                            break;
                        default:
                            throw new InvalidDataException(Invariant($"Unrecognized flag '{flag}' in:\n\n{json}"));
                    }
                }
            }
        }