public override void Generate(Generator generator, TypeReference returnType) { base.Generate(generator, returnType); expression.Prepare(generator, null); expression.Generate(generator); generator.Symbols.Source(generator.Assembler.Region.CurrentLocation, this); exceptionType.GenerateConversion(this, generator, expression.TypeReference); generator.Assembler.PushValue(); Method m = exceptionType.Definition.FindMethod(new Identifier(this, "Throw"), false, null, null, true); int offset = exceptionType.Definition.GetMethodOffset(this, m, exceptionType.Definition); // bypasses visibility generator.Assembler.FetchMethod(offset); generator.Assembler.PushValue(); Placeholder retSite = generator.Assembler.CallFromStack(0); if (generator.Resolver.CurrentDefinition != null) { generator.AddCallTraceEntry(retSite, this, generator.Resolver.CurrentDefinition.Name.DataModifierLess, generator.Resolver.CurrentFieldName); } else { generator.AddCallTraceEntry(retSite, this, "meh", "raiseOverflow"); } generator.Assembler.PopValue(); generator.Assembler.ExceptionHandlerInvoke(); }
public override void Generate(Generator generator) { base.Generate(generator); Placeholder textLocation = generator.AddTextLengthPrefix(text); generator.Symbols.Source(generator.Assembler.Region.CurrentLocation, this); generator.Assembler.SetValue(literalStringType.RuntimeStruct, textLocation); stringType.GenerateConversion(this, generator, literalStringType); }