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