Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Avatar for KuCalc : devops.
Download
50665 views
1
// CodeMirror, copyright (c) by Marijn Haverbeke and others
2
// Distributed under an MIT license: http://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.ax = "variable";
148
registers.eax = "variable-2";
149
registers.rax = "variable-3";
150
151
registers.bx = "variable";
152
registers.ebx = "variable-2";
153
registers.rbx = "variable-3";
154
155
registers.cx = "variable";
156
registers.ecx = "variable-2";
157
registers.rcx = "variable-3";
158
159
registers.dx = "variable";
160
registers.edx = "variable-2";
161
registers.rdx = "variable-3";
162
163
registers.si = "variable";
164
registers.esi = "variable-2";
165
registers.rsi = "variable-3";
166
167
registers.di = "variable";
168
registers.edi = "variable-2";
169
registers.rdi = "variable-3";
170
171
registers.sp = "variable";
172
registers.esp = "variable-2";
173
registers.rsp = "variable-3";
174
175
registers.bp = "variable";
176
registers.ebp = "variable-2";
177
registers.rbp = "variable-3";
178
179
registers.ip = "variable";
180
registers.eip = "variable-2";
181
registers.rip = "variable-3";
182
183
registers.cs = "keyword";
184
registers.ds = "keyword";
185
registers.ss = "keyword";
186
registers.es = "keyword";
187
registers.fs = "keyword";
188
registers.gs = "keyword";
189
}
190
191
function armv6(_parserConfig) {
192
// Reference:
193
// http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf
194
// http://infocenter.arm.com/help/topic/com.arm.doc.ddi0301h/DDI0301H_arm1176jzfs_r0p7_trm.pdf
195
lineCommentStartSymbol = "@";
196
directives.syntax = "builtin";
197
198
registers.r0 = "variable";
199
registers.r1 = "variable";
200
registers.r2 = "variable";
201
registers.r3 = "variable";
202
registers.r4 = "variable";
203
registers.r5 = "variable";
204
registers.r6 = "variable";
205
registers.r7 = "variable";
206
registers.r8 = "variable";
207
registers.r9 = "variable";
208
registers.r10 = "variable";
209
registers.r11 = "variable";
210
registers.r12 = "variable";
211
212
registers.sp = "variable-2";
213
registers.lr = "variable-2";
214
registers.pc = "variable-2";
215
registers.r13 = registers.sp;
216
registers.r14 = registers.lr;
217
registers.r15 = registers.pc;
218
219
custom.push(function(ch, stream) {
220
if (ch === '#') {
221
stream.eatWhile(/\w/);
222
return "number";
223
}
224
});
225
}
226
227
var arch = (parserConfig.architecture || "x86").toLowerCase();
228
if (arch === "x86") {
229
x86(parserConfig);
230
} else if (arch === "arm" || arch === "armv6") {
231
armv6(parserConfig);
232
}
233
234
function nextUntilUnescaped(stream, end) {
235
var escaped = false, next;
236
while ((next = stream.next()) != null) {
237
if (next === end && !escaped) {
238
return false;
239
}
240
escaped = !escaped && next === "\\";
241
}
242
return escaped;
243
}
244
245
function clikeComment(stream, state) {
246
var maybeEnd = false, ch;
247
while ((ch = stream.next()) != null) {
248
if (ch === "/" && maybeEnd) {
249
state.tokenize = null;
250
break;
251
}
252
maybeEnd = (ch === "*");
253
}
254
return "comment";
255
}
256
257
return {
258
startState: function() {
259
return {
260
tokenize: null
261
};
262
},
263
264
token: function(stream, state) {
265
if (state.tokenize) {
266
return state.tokenize(stream, state);
267
}
268
269
if (stream.eatSpace()) {
270
return null;
271
}
272
273
var style, cur, ch = stream.next();
274
275
if (ch === "/") {
276
if (stream.eat("*")) {
277
state.tokenize = clikeComment;
278
return clikeComment(stream, state);
279
}
280
}
281
282
if (ch === lineCommentStartSymbol) {
283
stream.skipToEnd();
284
return "comment";
285
}
286
287
if (ch === '"') {
288
nextUntilUnescaped(stream, '"');
289
return "string";
290
}
291
292
if (ch === '.') {
293
stream.eatWhile(/\w/);
294
cur = stream.current().toLowerCase();
295
style = directives[cur];
296
return style || null;
297
}
298
299
if (ch === '=') {
300
stream.eatWhile(/\w/);
301
return "tag";
302
}
303
304
if (ch === '{') {
305
return "braket";
306
}
307
308
if (ch === '}') {
309
return "braket";
310
}
311
312
if (/\d/.test(ch)) {
313
if (ch === "0" && stream.eat("x")) {
314
stream.eatWhile(/[0-9a-fA-F]/);
315
return "number";
316
}
317
stream.eatWhile(/\d/);
318
return "number";
319
}
320
321
if (/\w/.test(ch)) {
322
stream.eatWhile(/\w/);
323
if (stream.eat(":")) {
324
return 'tag';
325
}
326
cur = stream.current().toLowerCase();
327
style = registers[cur];
328
return style || null;
329
}
330
331
for (var i = 0; i < custom.length; i++) {
332
style = custom[i](ch, stream, state);
333
if (style) {
334
return style;
335
}
336
}
337
},
338
339
lineComment: lineCommentStartSymbol,
340
blockCommentStart: "/*",
341
blockCommentEnd: "*/"
342
};
343
});
344
345
});
346
347