1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 | function smali(hljs) {
|
9 | const smali_instr_low_prio = [
|
10 | 'add',
|
11 | 'and',
|
12 | 'cmp',
|
13 | 'cmpg',
|
14 | 'cmpl',
|
15 | 'const',
|
16 | 'div',
|
17 | 'double',
|
18 | 'float',
|
19 | 'goto',
|
20 | 'if',
|
21 | 'int',
|
22 | 'long',
|
23 | 'move',
|
24 | 'mul',
|
25 | 'neg',
|
26 | 'new',
|
27 | 'nop',
|
28 | 'not',
|
29 | 'or',
|
30 | 'rem',
|
31 | 'return',
|
32 | 'shl',
|
33 | 'shr',
|
34 | 'sput',
|
35 | 'sub',
|
36 | 'throw',
|
37 | 'ushr',
|
38 | 'xor'
|
39 | ];
|
40 | const smali_instr_high_prio = [
|
41 | 'aget',
|
42 | 'aput',
|
43 | 'array',
|
44 | 'check',
|
45 | 'execute',
|
46 | 'fill',
|
47 | 'filled',
|
48 | 'goto/16',
|
49 | 'goto/32',
|
50 | 'iget',
|
51 | 'instance',
|
52 | 'invoke',
|
53 | 'iput',
|
54 | 'monitor',
|
55 | 'packed',
|
56 | 'sget',
|
57 | 'sparse'
|
58 | ];
|
59 | const smali_keywords = [
|
60 | 'transient',
|
61 | 'constructor',
|
62 | 'abstract',
|
63 | 'final',
|
64 | 'synthetic',
|
65 | 'public',
|
66 | 'private',
|
67 | 'protected',
|
68 | 'static',
|
69 | 'bridge',
|
70 | 'system'
|
71 | ];
|
72 | return {
|
73 | name: 'Smali',
|
74 | contains: [
|
75 | {
|
76 | className: 'string',
|
77 | begin: '"',
|
78 | end: '"',
|
79 | relevance: 0
|
80 | },
|
81 | hljs.COMMENT(
|
82 | '#',
|
83 | '$',
|
84 | { relevance: 0 }
|
85 | ),
|
86 | {
|
87 | className: 'keyword',
|
88 | variants: [
|
89 | { begin: '\\s*\\.end\\s[a-zA-Z0-9]*' },
|
90 | {
|
91 | begin: '^[ ]*\\.[a-zA-Z]*',
|
92 | relevance: 0
|
93 | },
|
94 | {
|
95 | begin: '\\s:[a-zA-Z_0-9]*',
|
96 | relevance: 0
|
97 | },
|
98 | { begin: '\\s(' + smali_keywords.join('|') + ')' }
|
99 | ]
|
100 | },
|
101 | {
|
102 | className: 'built_in',
|
103 | variants: [
|
104 | { begin: '\\s(' + smali_instr_low_prio.join('|') + ')\\s' },
|
105 | {
|
106 | begin: '\\s(' + smali_instr_low_prio.join('|') + ')((-|/)[a-zA-Z0-9]+)+\\s',
|
107 | relevance: 10
|
108 | },
|
109 | {
|
110 | begin: '\\s(' + smali_instr_high_prio.join('|') + ')((-|/)[a-zA-Z0-9]+)*\\s',
|
111 | relevance: 10
|
112 | }
|
113 | ]
|
114 | },
|
115 | {
|
116 | className: 'class',
|
117 | begin: 'L[^\(;:\n]*;',
|
118 | relevance: 0
|
119 | },
|
120 | { begin: '[vp][0-9]+' }
|
121 | ]
|
122 | };
|
123 | }
|
124 |
|
125 | module.exports = smali;
|