Skip to content

Commit 9c495af

Browse files
Chandloreshepmaster
authored andcommitted
Add demangling and directive hiding for assembly
1 parent 9a3f887 commit 9c495af

11 files changed

+372
-40
lines changed

ui/Cargo.lock

+28-20
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ui/Cargo.toml

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ log = "0.3.6"
1717
mktemp = "0.3.1"
1818
mount = "0.3.0"
1919
quick-error = "1.1.0"
20+
regex = "0.2.2"
21+
rustc-demangle = "0.1.5"
2022
serde = "1.0"
2123
serde_derive = "1.0"
2224
serde_json = "1.0"

ui/frontend/Configuration.tsx

+54-4
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,16 @@ import { connect } from 'react-redux';
55

66
import {
77
changeAssemblyFlavor,
8+
changeDemangleAssembly,
89
changeEditor,
10+
changeHideAssemblerDirectives,
911
changeKeybinding,
1012
changeOrientation,
1113
changeTheme,
1214
toggleConfiguration,
1315
} from './actions';
1416
import State from './state';
15-
import { AssemblyFlavor, Editor, Orientation } from './types';
17+
import { AssemblyFlavor, DemangleAssembly, Editor, HideAssemblerDirectives, Orientation } from './types';
1618

1719
const keybindingOptions = ACE_KEYBINDINGS.map(t => <option value={t} key={t}>{t}</option>);
1820
const themeOptions = ACE_THEMES.map(t => <option value={t} key={t}>{t}</option>);
@@ -49,6 +51,8 @@ class Configuration extends React.PureComponent<ConfigurationProps> {
4951
private onChangeTheme = e => this.props.changeTheme(e.target.value);
5052
private onChangeOrientation = e => this.props.changeOrientation(e.target.value);
5153
private onChangeAssemblyFlavor = e => this.props.changeAssemblyFlavor(e.target.value);
54+
private onChangeDemangleAssembly = e => this.props.changeDemangleAssembly(e.target.value);
55+
private onChangeHideAssemblerDirectives = e => this.props.changeHideAssemblerDirectives(e.target.value);
5256
private onKeyup = e => {
5357
if (e.keyCode === ESCAPE_KEYCODE && !e.defaultPrevented) {
5458
e.preventDefault();
@@ -65,7 +69,15 @@ class Configuration extends React.PureComponent<ConfigurationProps> {
6569
}
6670

6771
public render() {
68-
const { editor, keybinding, theme, orientation, assemblyFlavor, toggleConfiguration } = this.props;
72+
const { editor,
73+
keybinding,
74+
theme,
75+
orientation,
76+
assemblyFlavor,
77+
demangleAssembly,
78+
hideAssemblerDirectives,
79+
toggleConfiguration,
80+
} = this.props;
6981

7082
const advancedEditor = editor === Editor.Advanced;
7183

@@ -118,6 +130,22 @@ class Configuration extends React.PureComponent<ConfigurationProps> {
118130
<option value={AssemblyFlavor.Intel}>Intel</option>
119131
</ConfigurationSelect>
120132

133+
<ConfigurationSelect what="demangleAssembly"
134+
label="Demangle Symbols"
135+
defaultValue={demangleAssembly}
136+
onChange={this.onChangeDemangleAssembly}>
137+
<option value={DemangleAssembly.Demangle}>Demangled</option>
138+
<option value={DemangleAssembly.Mangle}>Mangled</option>
139+
</ConfigurationSelect>
140+
141+
<ConfigurationSelect what="hideAssemblerDirectives"
142+
label="Assembler Directives"
143+
defaultValue={hideAssemblerDirectives}
144+
onChange={this.onChangeHideAssemblerDirectives}>
145+
<option value={HideAssemblerDirectives.Hide}>Remove</option>
146+
<option value={HideAssemblerDirectives.Show}>Display</option>
147+
</ConfigurationSelect>
148+
121149
<div className="configuration-actions">
122150
<button onClick={toggleConfiguration}>Done</button>
123151
</div>
@@ -132,16 +160,36 @@ interface ConfigurationProps {
132160
changeTheme: (_: string) => any;
133161
changeOrientation: (Orientation) => any;
134162
changeAssemblyFlavor: (AssemblyFlavor) => any;
163+
changeDemangleAssembly: (DemangleAssembly) => any;
164+
changeHideAssemblerDirectives: (HideAssemblerDirectives) => any;
135165
editor: Editor;
136166
keybinding: string;
137167
theme: string;
138168
orientation: Orientation;
139169
assemblyFlavor: AssemblyFlavor;
170+
demangleAssembly: DemangleAssembly;
171+
hideAssemblerDirectives: HideAssemblerDirectives;
140172
toggleConfiguration: () => any;
141173
}
142174

143-
const mapStateToProps = ({ configuration: { editor, keybinding, theme, orientation, assemblyFlavor } }: State) => (
144-
{ editor, keybinding, theme, orientation, assemblyFlavor }
175+
const mapStateToProps = ({ configuration: {
176+
editor,
177+
keybinding,
178+
theme,
179+
orientation,
180+
assemblyFlavor,
181+
demangleAssembly,
182+
hideAssemblerDirectives},
183+
}: State) => (
184+
{
185+
editor,
186+
keybinding,
187+
theme,
188+
orientation,
189+
assemblyFlavor,
190+
demangleAssembly,
191+
hideAssemblerDirectives,
192+
}
145193
);
146194

147195
const mapDispatchToProps = ({
@@ -150,6 +198,8 @@ const mapDispatchToProps = ({
150198
changeTheme,
151199
changeOrientation,
152200
changeAssemblyFlavor,
201+
changeDemangleAssembly,
202+
changeHideAssemblerDirectives,
153203
toggleConfiguration,
154204
});
155205

ui/frontend/actions.ts

+50-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,16 @@ import url from 'url';
55
import { load as loadGist, save as saveGist } from './gist';
66
import { getCrateType, runAsTest } from './selectors';
77
import State from './state';
8-
import { AssemblyFlavor, Channel, Editor, Mode, Orientation, Page } from './types';
8+
import {
9+
AssemblyFlavor,
10+
Channel,
11+
DemangleAssembly,
12+
Editor,
13+
HideAssemblerDirectives,
14+
Mode,
15+
Orientation,
16+
Page,
17+
} from './types';
918

1019
const routes = {
1120
compile: { pathname: '/compile' },
@@ -45,6 +54,8 @@ export enum ActionType {
4554
ChangeOrientation = 'CHANGE_ORIENTATION',
4655
ChangeAssemblyFlavor = 'CHANGE_ASSEMBLY_FLAVOR',
4756
ChangeChannel = 'CHANGE_CHANNEL',
57+
ChangeDemangleAssembly = 'CHANGE_DEMANGLE_ASSEMBLY',
58+
ChangeHideAssemblerDirectives = 'CHANGE_HIDE_ASSEMBLER_DIRECTIVES',
4859
ChangeMode = 'CHANGE_MODE',
4960
ChangeFocus = 'CHANGE_FOCUS',
5061
ExecuteRequest = 'EXECUTE_REQUEST',
@@ -68,8 +79,10 @@ export type Action =
6879
| SetPageAction
6980
| ChangeAssemblyFlavorAction
7081
| ChangeChannelAction
82+
| ChangeDemangleAssemblyAction
7183
| ChangeEditorAction
7284
| ChangeFocusAction
85+
| ChangeHideAssemblerDirectivesAction
7386
| ChangeKeybindingAction
7487
| ChangeModeAction
7588
| ChangeOrientationAction
@@ -124,6 +137,16 @@ export interface ChangeAssemblyFlavorAction {
124137
assemblyFlavor: AssemblyFlavor;
125138
}
126139

140+
export interface ChangeDemangleAssemblyAction {
141+
type: ActionType.ChangeDemangleAssembly;
142+
demangleAssembly: DemangleAssembly;
143+
}
144+
145+
export interface ChangeHideAssemblerDirectivesAction {
146+
type: ActionType.ChangeHideAssemblerDirectives;
147+
hideAssemblerDirectives: HideAssemblerDirectives;
148+
}
149+
127150
export interface ChangeChannelAction {
128151
type: ActionType.ChangeChannel;
129152
channel: Channel;
@@ -163,6 +186,14 @@ export function changeAssemblyFlavor(assemblyFlavor): ChangeAssemblyFlavorAction
163186
return { type: ActionType.ChangeAssemblyFlavor, assemblyFlavor };
164187
}
165188

189+
export function changeDemangleAssembly(demangleAssembly): ChangeDemangleAssemblyAction {
190+
return { type: ActionType.ChangeDemangleAssembly, demangleAssembly };
191+
}
192+
193+
export function changeHideAssemblerDirectives(hideAssemblerDirectives): ChangeHideAssemblerDirectivesAction {
194+
return { type: ActionType.ChangeHideAssemblerDirectives, hideAssemblerDirectives };
195+
}
196+
166197
export function changeChannel(channel: Channel): ChangeChannelAction {
167198
return { type: ActionType.ChangeChannel, channel };
168199
}
@@ -260,10 +291,26 @@ function performCompile(target, { request, success, failure }): ThunkAction {
260291
dispatch(request());
261292

262293
const state = getState();
263-
const { code, configuration: { channel, mode, assemblyFlavor } } = state;
294+
const { code, configuration: {
295+
channel,
296+
mode,
297+
assemblyFlavor,
298+
demangleAssembly,
299+
hideAssemblerDirectives,
300+
} } = state;
264301
const crateType = getCrateType(state);
265302
const tests = runAsTest(state);
266-
const body = { channel, mode, crateType, tests, code, target, assemblyFlavor };
303+
const body = {
304+
channel,
305+
mode,
306+
crateType,
307+
tests,
308+
code,
309+
target,
310+
assemblyFlavor,
311+
demangleAssembly,
312+
hideAssemblerDirectives,
313+
};
267314

268315
return jsonPost(routes.compile, body)
269316
.then(json => dispatch(success(json)))

ui/frontend/index.scss

+1-1
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,7 @@ $PHI: 2.61803398875;
427427
margin-top: 10em;
428428

429429
width: 600px;
430-
height: 600px / $PHI;
430+
height: 950px / $PHI;
431431
}
432432
}
433433

ui/frontend/local_storage.ts

+5
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ export function serialize(state) {
1010
theme: state.configuration.theme,
1111
orientation: state.configuration.orientation,
1212
assemblyFlavor: state.configuration.assemblyFlavor,
13+
demangleAssembly: state.configuration.demangleAssembly,
14+
hideAssemblerDirectives: state.configuration.hideAssemblerDirectives,
1315
},
1416
code: state.code,
1517
});
@@ -28,6 +30,9 @@ export function deserialize(savedState) {
2830
theme: parsedState.configuration.theme || defaultConfiguration.theme,
2931
orientation: parsedState.configuration.orientation || defaultConfiguration.orientation,
3032
assemblyFlavor: parsedState.configuration.assemblyFlavor || defaultConfiguration.assemblyFlavor,
33+
demangleAssembly: parsedState.configuration.demangleAssembly || defaultConfiguration.demangleAssembly,
34+
hideAssemblerDirectives:
35+
parsedState.configuration.hideAssemblerDirectives || defaultConfiguration.hideAssemblerDirectives,
3136
},
3237
code: parsedState.code,
3338
};

ui/frontend/reducers/configuration.ts

+17-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
import { Action, ActionType } from '../actions';
2-
import { AssemblyFlavor, Channel, Editor, Mode, Orientation } from '../types';
2+
import {
3+
AssemblyFlavor,
4+
Channel,
5+
DemangleAssembly,
6+
Editor,
7+
HideAssemblerDirectives,
8+
Mode,
9+
Orientation,
10+
} from '../types';
311

412
export interface State {
513
shown: boolean;
@@ -8,6 +16,8 @@ export interface State {
816
theme: string;
917
orientation: Orientation;
1018
assemblyFlavor: AssemblyFlavor;
19+
demangleAssembly: DemangleAssembly;
20+
hideAssemblerDirectives: HideAssemblerDirectives;
1121
channel: Channel;
1222
mode: Mode;
1323
}
@@ -19,6 +29,8 @@ export const DEFAULT: State = {
1929
theme: 'github',
2030
orientation: Orientation.Automatic,
2131
assemblyFlavor: AssemblyFlavor.Att,
32+
demangleAssembly: DemangleAssembly.Demangle,
33+
hideAssemblerDirectives: HideAssemblerDirectives.Hide,
2234
channel: Channel.Stable,
2335
mode: Mode.Debug,
2436
};
@@ -37,6 +49,10 @@ export default function configuration(state = DEFAULT, action: Action): State {
3749
return { ...state, orientation: action.orientation };
3850
case ActionType.ChangeAssemblyFlavor:
3951
return { ...state, assemblyFlavor: action.assemblyFlavor };
52+
case ActionType.ChangeDemangleAssembly:
53+
return { ...state, demangleAssembly: action.demangleAssembly };
54+
case ActionType.ChangeHideAssemblerDirectives:
55+
return { ...state, hideAssemblerDirectives: action.hideAssemblerDirectives };
4056
case ActionType.ChangeChannel:
4157
return { ...state, channel: action.channel };
4258
case ActionType.ChangeMode:

ui/frontend/types.ts

+10
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,16 @@ export enum AssemblyFlavor {
4141
Intel = 'intel',
4242
}
4343

44+
export enum DemangleAssembly {
45+
Demangle = 'demangle',
46+
Mangle = 'mangle',
47+
}
48+
49+
export enum HideAssemblerDirectives {
50+
Hide = 'hide',
51+
Show = 'show',
52+
}
53+
4454
export enum Channel {
4555
Stable = 'stable',
4656
Beta = 'beta',

0 commit comments

Comments
 (0)