annotate .cms/lib/codemirror/mode/gas/gas.js @ 0:78edf6b517a0 draft

24.10
author Coffee CMS <info@coffee-cms.ru>
date Fri, 11 Oct 2024 22:40:23 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1 // CodeMirror, copyright (c) by Marijn Haverbeke and others
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
2 // Distributed under an MIT license: https://codemirror.net/5/LICENSE
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
3
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
4 (function(mod) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
5 if (typeof exports == "object" && typeof module == "object") // CommonJS
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
6 mod(require("../../lib/codemirror"));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
7 else if (typeof define == "function" && define.amd) // AMD
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
8 define(["../../lib/codemirror"], mod);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
9 else // Plain browser env
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
10 mod(CodeMirror);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
11 })(function(CodeMirror) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
12 "use strict";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
13
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
14 CodeMirror.defineMode("gas", function(_config, parserConfig) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15 'use strict';
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17 // If an architecture is specified, its initialization function may
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 // populate this array with custom parsing functions which will be
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 // tried in the event that the standard functions do not find a match.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20 var custom = [];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 // The symbol used to start a line comment changes based on the target
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23 // architecture.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24 // If no architecture is pased in "parserConfig" then only multiline
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25 // comments will have syntax support.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26 var lineCommentStartSymbol = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28 // These directives are architecture independent.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29 // Machine specific directives should go in their respective
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30 // architecture initialization function.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31 // Reference:
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32 // http://sourceware.org/binutils/docs/as/Pseudo-Ops.html#Pseudo-Ops
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33 var directives = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34 ".abort" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35 ".align" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36 ".altmacro" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37 ".ascii" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 ".asciz" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39 ".balign" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40 ".balignw" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41 ".balignl" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42 ".bundle_align_mode" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 ".bundle_lock" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 ".bundle_unlock" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45 ".byte" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46 ".cfi_startproc" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 ".comm" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48 ".data" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49 ".def" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50 ".desc" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
51 ".dim" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
52 ".double" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
53 ".eject" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
54 ".else" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
55 ".elseif" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
56 ".end" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
57 ".endef" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
58 ".endfunc" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
59 ".endif" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
60 ".equ" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
61 ".equiv" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
62 ".eqv" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
63 ".err" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
64 ".error" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
65 ".exitm" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
66 ".extern" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
67 ".fail" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
68 ".file" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
69 ".fill" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
70 ".float" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
71 ".func" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
72 ".global" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
73 ".gnu_attribute" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
74 ".hidden" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
75 ".hword" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
76 ".ident" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
77 ".if" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
78 ".incbin" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
79 ".include" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
80 ".int" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
81 ".internal" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
82 ".irp" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
83 ".irpc" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
84 ".lcomm" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
85 ".lflags" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
86 ".line" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
87 ".linkonce" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
88 ".list" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
89 ".ln" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
90 ".loc" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
91 ".loc_mark_labels" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
92 ".local" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
93 ".long" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
94 ".macro" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
95 ".mri" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
96 ".noaltmacro" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
97 ".nolist" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
98 ".octa" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
99 ".offset" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
100 ".org" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
101 ".p2align" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
102 ".popsection" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
103 ".previous" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
104 ".print" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
105 ".protected" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
106 ".psize" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
107 ".purgem" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
108 ".pushsection" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
109 ".quad" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
110 ".reloc" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
111 ".rept" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
112 ".sbttl" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
113 ".scl" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
114 ".section" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
115 ".set" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
116 ".short" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
117 ".single" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
118 ".size" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
119 ".skip" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
120 ".sleb128" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
121 ".space" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
122 ".stab" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
123 ".string" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
124 ".struct" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
125 ".subsection" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
126 ".symver" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
127 ".tag" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
128 ".text" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
129 ".title" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
130 ".type" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
131 ".uleb128" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
132 ".val" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
133 ".version" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
134 ".vtable_entry" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
135 ".vtable_inherit" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
136 ".warning" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
137 ".weak" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
138 ".weakref" : "builtin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
139 ".word" : "builtin"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
140 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
141
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
142 var registers = {};
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
143
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
144 function x86(_parserConfig) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
145 lineCommentStartSymbol = "#";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
146
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
147 registers.al = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
148 registers.ah = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
149 registers.ax = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
150 registers.eax = "variable-2";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
151 registers.rax = "variable-3";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
152
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
153 registers.bl = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
154 registers.bh = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
155 registers.bx = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
156 registers.ebx = "variable-2";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
157 registers.rbx = "variable-3";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
158
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
159 registers.cl = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
160 registers.ch = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
161 registers.cx = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
162 registers.ecx = "variable-2";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
163 registers.rcx = "variable-3";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
164
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
165 registers.dl = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
166 registers.dh = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
167 registers.dx = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
168 registers.edx = "variable-2";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
169 registers.rdx = "variable-3";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
170
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
171 registers.si = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
172 registers.esi = "variable-2";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
173 registers.rsi = "variable-3";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
174
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
175 registers.di = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
176 registers.edi = "variable-2";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
177 registers.rdi = "variable-3";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
178
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
179 registers.sp = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
180 registers.esp = "variable-2";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
181 registers.rsp = "variable-3";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
182
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
183 registers.bp = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
184 registers.ebp = "variable-2";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
185 registers.rbp = "variable-3";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
186
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
187 registers.ip = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
188 registers.eip = "variable-2";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
189 registers.rip = "variable-3";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
190
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
191 registers.cs = "keyword";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
192 registers.ds = "keyword";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
193 registers.ss = "keyword";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
194 registers.es = "keyword";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
195 registers.fs = "keyword";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
196 registers.gs = "keyword";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
197 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
198
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
199 function armv6(_parserConfig) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
200 // Reference:
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
201 // http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
202 // http://infocenter.arm.com/help/topic/com.arm.doc.ddi0301h/DDI0301H_arm1176jzfs_r0p7_trm.pdf
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
203 lineCommentStartSymbol = "@";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
204 directives.syntax = "builtin";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
205
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
206 registers.r0 = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
207 registers.r1 = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
208 registers.r2 = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
209 registers.r3 = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
210 registers.r4 = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
211 registers.r5 = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
212 registers.r6 = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
213 registers.r7 = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
214 registers.r8 = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
215 registers.r9 = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
216 registers.r10 = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
217 registers.r11 = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
218 registers.r12 = "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
219
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
220 registers.sp = "variable-2";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
221 registers.lr = "variable-2";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
222 registers.pc = "variable-2";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
223 registers.r13 = registers.sp;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
224 registers.r14 = registers.lr;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
225 registers.r15 = registers.pc;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
226
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
227 custom.push(function(ch, stream) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
228 if (ch === '#') {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
229 stream.eatWhile(/\w/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
230 return "number";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
231 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
232 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
233 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
234
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
235 var arch = (parserConfig.architecture || "x86").toLowerCase();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
236 if (arch === "x86") {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
237 x86(parserConfig);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
238 } else if (arch === "arm" || arch === "armv6") {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
239 armv6(parserConfig);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
240 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
241
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
242 function nextUntilUnescaped(stream, end) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
243 var escaped = false, next;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
244 while ((next = stream.next()) != null) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
245 if (next === end && !escaped) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
246 return false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
247 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
248 escaped = !escaped && next === "\\";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
249 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
250 return escaped;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
251 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
252
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
253 function clikeComment(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
254 var maybeEnd = false, ch;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
255 while ((ch = stream.next()) != null) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
256 if (ch === "/" && maybeEnd) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
257 state.tokenize = null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
258 break;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
259 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
260 maybeEnd = (ch === "*");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
261 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
262 return "comment";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
263 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
264
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
265 return {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
266 startState: function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
267 return {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
268 tokenize: null
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
269 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
270 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
271
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
272 token: function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
273 if (state.tokenize) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
274 return state.tokenize(stream, state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
275 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
276
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
277 if (stream.eatSpace()) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
278 return null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
279 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
280
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
281 var style, cur, ch = stream.next();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
282
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
283 if (ch === "/") {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
284 if (stream.eat("*")) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
285 state.tokenize = clikeComment;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
286 return clikeComment(stream, state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
287 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
288 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
289
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
290 if (ch === lineCommentStartSymbol) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
291 stream.skipToEnd();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
292 return "comment";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
293 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
294
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
295 if (ch === '"') {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
296 nextUntilUnescaped(stream, '"');
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
297 return "string";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
298 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
299
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
300 if (ch === '.') {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
301 stream.eatWhile(/\w/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
302 cur = stream.current().toLowerCase();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
303 style = directives[cur];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
304 return style || null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
305 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
306
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
307 if (ch === '=') {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
308 stream.eatWhile(/\w/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
309 return "tag";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
310 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
311
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
312 if (ch === '{') {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
313 return "bracket";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
314 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
315
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
316 if (ch === '}') {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
317 return "bracket";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
318 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
319
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
320 if (/\d/.test(ch)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
321 if (ch === "0" && stream.eat("x")) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
322 stream.eatWhile(/[0-9a-fA-F]/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
323 return "number";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
324 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
325 stream.eatWhile(/\d/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
326 return "number";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
327 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
328
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
329 if (/\w/.test(ch)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
330 stream.eatWhile(/\w/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
331 if (stream.eat(":")) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
332 return 'tag';
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
333 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
334 cur = stream.current().toLowerCase();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
335 style = registers[cur];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
336 return style || null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
337 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
338
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
339 for (var i = 0; i < custom.length; i++) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
340 style = custom[i](ch, stream, state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
341 if (style) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
342 return style;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
343 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
344 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
345 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
346
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
347 lineComment: lineCommentStartSymbol,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
348 blockCommentStart: "/*",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
349 blockCommentEnd: "*/"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
350 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
351 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
352
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
353 });