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 | {
|
85 | relevance: 0
|
86 | }
|
87 | ),
|
88 | {
|
89 | className: 'keyword',
|
90 | variants: [
|
91 | {
|
92 | begin: '\\s*\\.end\\s[a-zA-Z0-9]*'
|
93 | },
|
94 | {
|
95 | begin: '^[ ]*\\.[a-zA-Z]*',
|
96 | relevance: 0
|
97 | },
|
98 | {
|
99 | begin: '\\s:[a-zA-Z_0-9]*',
|
100 | relevance: 0
|
101 | },
|
102 | {
|
103 | begin: '\\s(' + smali_keywords.join('|') + ')'
|
104 | }
|
105 | ]
|
106 | },
|
107 | {
|
108 | className: 'built_in',
|
109 | variants: [
|
110 | {
|
111 | begin: '\\s(' + smali_instr_low_prio.join('|') + ')\\s'
|
112 | },
|
113 | {
|
114 | begin: '\\s(' + smali_instr_low_prio.join('|') + ')((-|/)[a-zA-Z0-9]+)+\\s',
|
115 | relevance: 10
|
116 | },
|
117 | {
|
118 | begin: '\\s(' + smali_instr_high_prio.join('|') + ')((-|/)[a-zA-Z0-9]+)*\\s',
|
119 | relevance: 10
|
120 | }
|
121 | ]
|
122 | },
|
123 | {
|
124 | className: 'class',
|
125 | begin: 'L[^\(;:\n]*;',
|
126 | relevance: 0
|
127 | },
|
128 | {
|
129 | begin: '[vp][0-9]+'
|
130 | }
|
131 | ]
|
132 | };
|
133 | }
|
134 |
|
135 | export { smali as default };
|