protected override CompilerItem TranslateImpl(CompilerContext cc) { switch (_hintKind) { case VariableHintKind.Alloc: cc.AllocVar(_varData, new RegisterMask(_hintValue), VariableAlloc.Read); break; case VariableHintKind.Spill: if (_varData.State == VariableState.Register) cc.SpillVar(_varData); break; case VariableHintKind.Save: case VariableHintKind.SaveAndUnuse: if (_varData.State == VariableState.Register && _varData.Changed) { cc.EmitSaveVar(_varData, _varData.RegisterIndex); _varData.Changed = false; } if (_hintKind == VariableHintKind.SaveAndUnuse) goto case VariableHintKind.Unuse; break; case VariableHintKind.Unuse: cc.UnuseVar(_varData, VariableState.Unused); goto end; } cc.UnuseVarOnEndOfScope(this, _varData); end: return Next; }