LaravelTest

Форк
0
353 строки · 8.9 Кб
1
// CodeMirror, copyright (c) by Marijn Haverbeke and others
2
// Distributed under an MIT license: https://codemirror.net/LICENSE
3

4
(function(mod) {
5
  if (typeof exports == "object" && typeof module == "object") // CommonJS
6
    mod(require("../../lib/codemirror"));
7
  else if (typeof define == "function" && define.amd) // AMD
8
    define(["../../lib/codemirror"], mod);
9
  else // Plain browser env
10
    mod(CodeMirror);
11
})(function(CodeMirror) {
12
"use strict";
13

14
CodeMirror.defineMode("gas", function(_config, parserConfig) {
15
  'use strict';
16

17
  // If an architecture is specified, its initialization function may
18
  // populate this array with custom parsing functions which will be
19
  // tried in the event that the standard functions do not find a match.
20
  var custom = [];
21

22
  // The symbol used to start a line comment changes based on the target
23
  // architecture.
24
  // If no architecture is pased in "parserConfig" then only multiline
25
  // comments will have syntax support.
26
  var lineCommentStartSymbol = "";
27

28
  // These directives are architecture independent.
29
  // Machine specific directives should go in their respective
30
  // architecture initialization function.
31
  // Reference:
32
  // http://sourceware.org/binutils/docs/as/Pseudo-Ops.html#Pseudo-Ops
33
  var directives = {
34
    ".abort" : "builtin",
35
    ".align" : "builtin",
36
    ".altmacro" : "builtin",
37
    ".ascii" : "builtin",
38
    ".asciz" : "builtin",
39
    ".balign" : "builtin",
40
    ".balignw" : "builtin",
41
    ".balignl" : "builtin",
42
    ".bundle_align_mode" : "builtin",
43
    ".bundle_lock" : "builtin",
44
    ".bundle_unlock" : "builtin",
45
    ".byte" : "builtin",
46
    ".cfi_startproc" : "builtin",
47
    ".comm" : "builtin",
48
    ".data" : "builtin",
49
    ".def" : "builtin",
50
    ".desc" : "builtin",
51
    ".dim" : "builtin",
52
    ".double" : "builtin",
53
    ".eject" : "builtin",
54
    ".else" : "builtin",
55
    ".elseif" : "builtin",
56
    ".end" : "builtin",
57
    ".endef" : "builtin",
58
    ".endfunc" : "builtin",
59
    ".endif" : "builtin",
60
    ".equ" : "builtin",
61
    ".equiv" : "builtin",
62
    ".eqv" : "builtin",
63
    ".err" : "builtin",
64
    ".error" : "builtin",
65
    ".exitm" : "builtin",
66
    ".extern" : "builtin",
67
    ".fail" : "builtin",
68
    ".file" : "builtin",
69
    ".fill" : "builtin",
70
    ".float" : "builtin",
71
    ".func" : "builtin",
72
    ".global" : "builtin",
73
    ".gnu_attribute" : "builtin",
74
    ".hidden" : "builtin",
75
    ".hword" : "builtin",
76
    ".ident" : "builtin",
77
    ".if" : "builtin",
78
    ".incbin" : "builtin",
79
    ".include" : "builtin",
80
    ".int" : "builtin",
81
    ".internal" : "builtin",
82
    ".irp" : "builtin",
83
    ".irpc" : "builtin",
84
    ".lcomm" : "builtin",
85
    ".lflags" : "builtin",
86
    ".line" : "builtin",
87
    ".linkonce" : "builtin",
88
    ".list" : "builtin",
89
    ".ln" : "builtin",
90
    ".loc" : "builtin",
91
    ".loc_mark_labels" : "builtin",
92
    ".local" : "builtin",
93
    ".long" : "builtin",
94
    ".macro" : "builtin",
95
    ".mri" : "builtin",
96
    ".noaltmacro" : "builtin",
97
    ".nolist" : "builtin",
98
    ".octa" : "builtin",
99
    ".offset" : "builtin",
100
    ".org" : "builtin",
101
    ".p2align" : "builtin",
102
    ".popsection" : "builtin",
103
    ".previous" : "builtin",
104
    ".print" : "builtin",
105
    ".protected" : "builtin",
106
    ".psize" : "builtin",
107
    ".purgem" : "builtin",
108
    ".pushsection" : "builtin",
109
    ".quad" : "builtin",
110
    ".reloc" : "builtin",
111
    ".rept" : "builtin",
112
    ".sbttl" : "builtin",
113
    ".scl" : "builtin",
114
    ".section" : "builtin",
115
    ".set" : "builtin",
116
    ".short" : "builtin",
117
    ".single" : "builtin",
118
    ".size" : "builtin",
119
    ".skip" : "builtin",
120
    ".sleb128" : "builtin",
121
    ".space" : "builtin",
122
    ".stab" : "builtin",
123
    ".string" : "builtin",
124
    ".struct" : "builtin",
125
    ".subsection" : "builtin",
126
    ".symver" : "builtin",
127
    ".tag" : "builtin",
128
    ".text" : "builtin",
129
    ".title" : "builtin",
130
    ".type" : "builtin",
131
    ".uleb128" : "builtin",
132
    ".val" : "builtin",
133
    ".version" : "builtin",
134
    ".vtable_entry" : "builtin",
135
    ".vtable_inherit" : "builtin",
136
    ".warning" : "builtin",
137
    ".weak" : "builtin",
138
    ".weakref" : "builtin",
139
    ".word" : "builtin"
140
  };
141

142
  var registers = {};
143

144
  function x86(_parserConfig) {
145
    lineCommentStartSymbol = "#";
146

147
    registers.al  = "variable";
148
    registers.ah  = "variable";
149
    registers.ax  = "variable";
150
    registers.eax = "variable-2";
151
    registers.rax = "variable-3";
152

153
    registers.bl  = "variable";
154
    registers.bh  = "variable";
155
    registers.bx  = "variable";
156
    registers.ebx = "variable-2";
157
    registers.rbx = "variable-3";
158

159
    registers.cl  = "variable";
160
    registers.ch  = "variable";
161
    registers.cx  = "variable";
162
    registers.ecx = "variable-2";
163
    registers.rcx = "variable-3";
164

165
    registers.dl  = "variable";
166
    registers.dh  = "variable";
167
    registers.dx  = "variable";
168
    registers.edx = "variable-2";
169
    registers.rdx = "variable-3";
170

171
    registers.si  = "variable";
172
    registers.esi = "variable-2";
173
    registers.rsi = "variable-3";
174

175
    registers.di  = "variable";
176
    registers.edi = "variable-2";
177
    registers.rdi = "variable-3";
178

179
    registers.sp  = "variable";
180
    registers.esp = "variable-2";
181
    registers.rsp = "variable-3";
182

183
    registers.bp  = "variable";
184
    registers.ebp = "variable-2";
185
    registers.rbp = "variable-3";
186

187
    registers.ip  = "variable";
188
    registers.eip = "variable-2";
189
    registers.rip = "variable-3";
190

191
    registers.cs  = "keyword";
192
    registers.ds  = "keyword";
193
    registers.ss  = "keyword";
194
    registers.es  = "keyword";
195
    registers.fs  = "keyword";
196
    registers.gs  = "keyword";
197
  }
198

199
  function armv6(_parserConfig) {
200
    // Reference:
201
    // http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf
202
    // http://infocenter.arm.com/help/topic/com.arm.doc.ddi0301h/DDI0301H_arm1176jzfs_r0p7_trm.pdf
203
    lineCommentStartSymbol = "@";
204
    directives.syntax = "builtin";
205

206
    registers.r0  = "variable";
207
    registers.r1  = "variable";
208
    registers.r2  = "variable";
209
    registers.r3  = "variable";
210
    registers.r4  = "variable";
211
    registers.r5  = "variable";
212
    registers.r6  = "variable";
213
    registers.r7  = "variable";
214
    registers.r8  = "variable";
215
    registers.r9  = "variable";
216
    registers.r10 = "variable";
217
    registers.r11 = "variable";
218
    registers.r12 = "variable";
219

220
    registers.sp  = "variable-2";
221
    registers.lr  = "variable-2";
222
    registers.pc  = "variable-2";
223
    registers.r13 = registers.sp;
224
    registers.r14 = registers.lr;
225
    registers.r15 = registers.pc;
226

227
    custom.push(function(ch, stream) {
228
      if (ch === '#') {
229
        stream.eatWhile(/\w/);
230
        return "number";
231
      }
232
    });
233
  }
234

235
  var arch = (parserConfig.architecture || "x86").toLowerCase();
236
  if (arch === "x86") {
237
    x86(parserConfig);
238
  } else if (arch === "arm" || arch === "armv6") {
239
    armv6(parserConfig);
240
  }
241

242
  function nextUntilUnescaped(stream, end) {
243
    var escaped = false, next;
244
    while ((next = stream.next()) != null) {
245
      if (next === end && !escaped) {
246
        return false;
247
      }
248
      escaped = !escaped && next === "\\";
249
    }
250
    return escaped;
251
  }
252

253
  function clikeComment(stream, state) {
254
    var maybeEnd = false, ch;
255
    while ((ch = stream.next()) != null) {
256
      if (ch === "/" && maybeEnd) {
257
        state.tokenize = null;
258
        break;
259
      }
260
      maybeEnd = (ch === "*");
261
    }
262
    return "comment";
263
  }
264

265
  return {
266
    startState: function() {
267
      return {
268
        tokenize: null
269
      };
270
    },
271

272
    token: function(stream, state) {
273
      if (state.tokenize) {
274
        return state.tokenize(stream, state);
275
      }
276

277
      if (stream.eatSpace()) {
278
        return null;
279
      }
280

281
      var style, cur, ch = stream.next();
282

283
      if (ch === "/") {
284
        if (stream.eat("*")) {
285
          state.tokenize = clikeComment;
286
          return clikeComment(stream, state);
287
        }
288
      }
289

290
      if (ch === lineCommentStartSymbol) {
291
        stream.skipToEnd();
292
        return "comment";
293
      }
294

295
      if (ch === '"') {
296
        nextUntilUnescaped(stream, '"');
297
        return "string";
298
      }
299

300
      if (ch === '.') {
301
        stream.eatWhile(/\w/);
302
        cur = stream.current().toLowerCase();
303
        style = directives[cur];
304
        return style || null;
305
      }
306

307
      if (ch === '=') {
308
        stream.eatWhile(/\w/);
309
        return "tag";
310
      }
311

312
      if (ch === '{') {
313
        return "bracket";
314
      }
315

316
      if (ch === '}') {
317
        return "bracket";
318
      }
319

320
      if (/\d/.test(ch)) {
321
        if (ch === "0" && stream.eat("x")) {
322
          stream.eatWhile(/[0-9a-fA-F]/);
323
          return "number";
324
        }
325
        stream.eatWhile(/\d/);
326
        return "number";
327
      }
328

329
      if (/\w/.test(ch)) {
330
        stream.eatWhile(/\w/);
331
        if (stream.eat(":")) {
332
          return 'tag';
333
        }
334
        cur = stream.current().toLowerCase();
335
        style = registers[cur];
336
        return style || null;
337
      }
338

339
      for (var i = 0; i < custom.length; i++) {
340
        style = custom[i](ch, stream, state);
341
        if (style) {
342
          return style;
343
        }
344
      }
345
    },
346

347
    lineComment: lineCommentStartSymbol,
348
    blockCommentStart: "/*",
349
    blockCommentEnd: "*/"
350
  };
351
});
352

353
});
354

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.