• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2015 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5"use strict";
6
7class ScheduleView extends TextView {
8  constructor(id, broker) {
9    super(id, broker, null, false);
10    let view = this;
11    let BLOCK_STYLE = {
12      css: 'tag'
13    };
14    const BLOCK_HEADER_STYLE = {
15      css: 'com',
16      block_id: -1,
17      location: function(text) {
18        let matches = /\d+/.exec(text);
19        if (!matches) return undefined;
20        BLOCK_HEADER_STYLE.block_id = Number(matches[0]);
21        return {
22          block_id: BLOCK_HEADER_STYLE.block_id
23        };
24      },
25    };
26    const BLOCK_LINK_STYLE = {
27      css: 'tag',
28      link: function(text) {
29        let id = Number(text.substr(1));
30        view.select(function(location) { return location.block_id == id; }, true, true);
31      }
32    };
33    const ID_STYLE = {
34      css: 'tag',
35      location: function(text) {
36        let matches = /\d+/.exec(text);
37        return {
38          node_id: Number(matches[0]),
39          block_id: BLOCK_HEADER_STYLE.block_id
40        };
41      },
42    };
43    const ID_LINK_STYLE = {
44      css: 'tag',
45      link: function(text) {
46        let id = Number(text);
47        view.select(function(location) { return location.node_id == id; }, true, true);
48      }
49    };
50    const NODE_STYLE = { css: 'kwd' };
51    const GOTO_STYLE = { css: 'kwd',
52      goto_id: -2,
53      location: function(text) {
54        return {
55          node_id: GOTO_STYLE.goto_id--,
56          block_id: BLOCK_HEADER_STYLE.block_id
57        };
58      }
59    }
60    const ARROW_STYLE = { css: 'kwd' };
61    let patterns = [
62      [
63        [/^--- BLOCK B\d+/, BLOCK_HEADER_STYLE, 1],
64        [/^\s+\d+: /, ID_STYLE, 2],
65        [/^\s+Goto/, GOTO_STYLE, 6],
66        [/^.*/, null, -1]
67      ],
68      [
69        [/^ +/, null],
70        [/^\(deferred\)/, BLOCK_HEADER_STYLE],
71        [/^B\d+/, BLOCK_LINK_STYLE],
72        [/^<-/, ARROW_STYLE],
73        [/^->/, ARROW_STYLE],
74        [/^,/, null],
75        [/^---/, BLOCK_HEADER_STYLE, -1]
76      ],
77      // Parse opcode including []
78      [
79        [/^[A-Za-z0-9_]+(\[.*\])?$/, NODE_STYLE, -1],
80        [/^[A-Za-z0-9_]+(\[(\[.*?\]|.)*?\])?/, NODE_STYLE, 3]
81      ],
82      // Parse optional parameters
83      [
84        [/^ /, null, 4],
85        [/^\(/, null],
86        [/^\d+/, ID_LINK_STYLE],
87        [/^, /, null],
88        [/^\)$/, null, -1],
89        [/^\)/, null, 4],
90      ],
91      [
92        [/^ -> /, ARROW_STYLE, 5],
93        [/^.*/, null, -1]
94      ],
95      [
96        [/^B\d+$/, BLOCK_LINK_STYLE, -1],
97        [/^B\d+/, BLOCK_LINK_STYLE],
98        [/^, /, null]
99      ],
100      [
101        [/^ -> /, ARROW_STYLE],
102        [/^B\d+$/, BLOCK_LINK_STYLE, -1]
103      ]
104    ];
105    this.setPatterns(patterns);
106  }
107
108  initializeContent(data, rememberedSelection) {
109    super.initializeContent(data, rememberedSelection);
110    var graph = this;
111    var locations = [];
112    for (var id of rememberedSelection) {
113      locations.push({ node_id : id });
114    }
115    this.selectLocations(locations, true, true);
116  }
117
118  detachSelection() {
119    var selection = this.selection.detachSelection();
120    var s = new Set();
121    for (var i of selection) {
122      if (i.location.node_id != undefined && i.location.node_id > 0) {
123        s.add(i.location.node_id);
124      }
125    };
126    return s;
127  }
128}
129