public PointObject() { var keyX = new NameKey("x"); var localX = MemberDefinition.CreateAndBuild(keyX, new AnyType(), Access.ReadWrite); var keyY = new NameKey("y"); var localY = MemberDefinition.CreateAndBuild(keyY, new AnyType(), Access.ReadWrite); RootScope = Model.Instantiated.RootScope.CreateAndBuild( Scope.CreateAndBuild( new List <IsStatic>() { new IsStatic(MemberDefinition.CreateAndBuild(new NameKey("point"), new AnyType(), Access.ReadWrite), false) }), new[] { AssignOperation.CreateAndBuild( ObjectDefiniton.CreateAndBuild( Scope.CreateAndBuild( new List <IsStatic> { new IsStatic(localX, false), new IsStatic(localY, false) }), new IAssignOperation[] { AssignOperation.CreateAndBuild( ConstantNumber.CreateAndBuild(5), MemberReference.CreateAndBuild(localX)), AssignOperation.CreateAndBuild( ConstantNumber.CreateAndBuild(2), MemberReference.CreateAndBuild(localY)) }, InterfaceType.CreateAndBuild(new [] { localX, localY })), MemberReference.CreateAndBuild(MemberDefinition.CreateAndBuild(new NameKey("point"), new AnyType(), Access.ReadWrite))) }, EntryPointDefinition.CreateAndBuild(new EmptyType(), MemberDefinition.CreateAndBuild(new NameKey("input"), new NumberType(), Access.ReadWrite), Scope.CreateAndBuild(Array.Empty <IsStatic>()), Array.Empty <ICodeElement>(), Array.Empty <ICodeElement>())); }
public PairType() { var pairTypeNumber = InterfaceType.CreateAndBuild( new List <IMemberDefinition> { MemberDefinition.CreateAndBuild(new NameKey("x"), new NumberType(), Access.ReadWrite), MemberDefinition.CreateAndBuild(new NameKey("y"), new NumberType(), Access.ReadWrite) }); var inputKey = new NameKey("input"); var input = MemberDefinition.CreateAndBuild(inputKey, new NumberType(), Access.ReadWrite); var methodScope = Scope.CreateAndBuild(new List <IsStatic> { new IsStatic(input, false) }); var localX = MemberDefinition.CreateAndBuild(new NameKey("x"), new NumberType(), Access.ReadWrite); var localY = MemberDefinition.CreateAndBuild(new NameKey("y"), new NumberType(), Access.ReadWrite); var pairifyKey = new NameKey("pairify"); var pairify = MemberDefinition.CreateAndBuild(pairifyKey, MethodType.CreateAndBuild(new NumberType(), pairTypeNumber), Access.ReadWrite); RootScope = Model.Instantiated.RootScope.CreateAndBuild( Scope.CreateAndBuild( new List <IsStatic> { new IsStatic(MemberDefinition.CreateAndBuild(pairifyKey, MethodType.CreateAndBuild(new NumberType(), pairTypeNumber), Access.ReadWrite), false) }), new [] { AssignOperation.CreateAndBuild( MethodDefinition.CreateAndBuild( pairTypeNumber, input, methodScope, new ICodeElement[] { ReturnOperation.CreateAndBuild( ObjectDefiniton.CreateAndBuild( Scope.CreateAndBuild( new List <IsStatic> { new IsStatic(localX, false), new IsStatic(localY, false) }), new IAssignOperation[] { AssignOperation.CreateAndBuild( MemberReference.CreateAndBuild(input), MemberReference.CreateAndBuild(localX)), AssignOperation.CreateAndBuild( MemberReference.CreateAndBuild(input), MemberReference.CreateAndBuild(localY)) }, InterfaceType.CreateAndBuild(new [] { localX, localY }))) }, Array.Empty <ICodeElement>()), MemberReference.CreateAndBuild(pairify)) }, EntryPointDefinition.CreateAndBuild(new EmptyType(), MemberDefinition.CreateAndBuild(new NameKey("input"), new NumberType(), Access.ReadWrite), Scope.CreateAndBuild(Array.Empty <IsStatic>()), Array.Empty <ICodeElement>(), Array.Empty <ICodeElement>())); }
public override IBuildIntention <IEntryPointDefinition> GetBuildIntention(IConversionContext context) { var(toBuild, maker) = EntryPointDefinition.Create(); return(new BuildIntention <IEntryPointDefinition>(toBuild, () => { maker.Build( OutputType.Is1OrThrow().Convert(context), ParameterDefinition.Convert(context), Scope.Is1OrThrow().Convert(context), Body.GetValue().Select(x => x.Is1OrThrow().GetValue().ConvertElementOrThrow(context)).ToArray(), StaticInitailizers.Select(x => x.GetOrThrow().ConvertElementOrThrow(context)).ToArray()); })); }
public Closoure() { var xKey = new NameKey("x"); var x = MemberDefinition.CreateAndBuild(xKey, new NumberType(), Access.ReadWrite); var yKey = new NameKey("y"); var y = MemberDefinition.CreateAndBuild(yKey, new NumberType(), Access.ReadWrite); var methodScope = Scope.CreateAndBuild(new List <IsStatic> { new IsStatic(x, false) }); var innerMethodScope = Scope.CreateAndBuild(new List <IsStatic> { new IsStatic(y, false) }); RootScope = Model.Instantiated.RootScope.CreateAndBuild( Scope.CreateAndBuild( new List <IsStatic>() { new IsStatic(MemberDefinition.CreateAndBuild(new NameKey("create-accululator"), new AnyType(), Access.ReadWrite), false) }), new [] { AssignOperation.CreateAndBuild( MethodDefinition.CreateAndBuild( MethodType.CreateAndBuild( new NumberType(), new NumberType()), x, methodScope, new ICodeElement[] { ReturnOperation.CreateAndBuild( MethodDefinition.CreateAndBuild( new NumberType(), y, innerMethodScope, new ICodeElement[] { AssignOperation.CreateAndBuild( AddOperation.CreateAndBuild( MemberReference.CreateAndBuild(x), MemberReference.CreateAndBuild(y)), MemberReference.CreateAndBuild(x)), ReturnOperation.CreateAndBuild(MemberReference.CreateAndBuild(x)) }, Array.Empty <ICodeElement>()) ) }, Array.Empty <ICodeElement>()), MemberReference.CreateAndBuild(MemberDefinition.CreateAndBuild(new NameKey("create-accululator"), new AnyType(), Access.ReadWrite))) }, EntryPointDefinition.CreateAndBuild(new EmptyType(), MemberDefinition.CreateAndBuild(new NameKey("input"), new NumberType(), Access.ReadWrite), Scope.CreateAndBuild(Array.Empty <IsStatic>()), Array.Empty <ICodeElement>(), Array.Empty <ICodeElement>())); }
public LoadDetails GetLoadDetails() { var config = Services.RequireService <IConfigurationService>(); var rawFileOption = (ListOption)this.RawFileTypes.SelectedValue; string archName = null; string envName = null; string sAddr = null; string loader = null; EntryPointDefinition entry = null; if (rawFileOption != null && rawFileOption.Value != null) { var raw = (RawFileDefinition)rawFileOption.Value; loader = raw.Loader; archName = raw.Architecture; envName = raw.Environment; sAddr = raw.BaseAddress; entry = raw.EntryPoint; } ArchitectureDefinition archOption = this.GetSelectedArchitecture(); PlatformDefinition envOption = this.GetSelectedEnvironment(); archName = archName ?? archOption?.Name; envName = envName ?? envOption?.Name; sAddr = sAddr ?? this.AddressTextBox.Text.Trim(); var arch = config.GetArchitecture(archName); if (arch is null) { throw new InvalidOperationException($"Unable to load {archName} architecture."); } arch.LoadUserOptions(this.ArchitectureOptions); if (!arch.TryParseAddress(sAddr, out var addrBase)) { throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", sAddr)); } return(new LoadDetails { LoaderName = loader, ArchitectureName = archName, ArchitectureOptions = this.ArchitectureOptions, PlatformName = envName, LoadAddress = sAddr, EntryPoint = entry, }); }
public bool OpenBinaryAs(string initialFilename) { IOpenAsDialog dlg = null; IProcessorArchitecture arch = null; try { dlg = dlgFactory.CreateOpenAsDialog(); dlg.FileName.Text = initialFilename; dlg.Services = sc; dlg.ArchitectureOptions = new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase); if (uiSvc.ShowModalDialog(dlg) != DialogResult.OK) { return(false); } var rawFileOption = (ListOption)dlg.RawFileTypes.SelectedValue; string archName = null; string envName = null; string sAddr = null; string loader = null; EntryPointDefinition entry = null; if (rawFileOption != null && rawFileOption.Value != null) { var raw = (RawFileDefinition)rawFileOption.Value; loader = raw.Loader; archName = raw.Architecture; envName = raw.Environment; sAddr = raw.BaseAddress; entry = raw.EntryPoint; } ArchitectureDefinition archOption = dlg.GetSelectedArchitecture(); PlatformDefinition envOption = dlg.GetSelectedEnvironment(); archName = archName ?? archOption?.Name; envName = envName ?? envOption?.Name; sAddr = sAddr ?? dlg.AddressTextBox.Text.Trim(); arch = config.GetArchitecture(archName); if (arch == null) { throw new InvalidOperationException(string.Format("Unable to load {0} architecture.", archName)); } arch.LoadUserOptions(dlg.ArchitectureOptions); if (!arch.TryParseAddress(sAddr, out var addrBase)) { throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", sAddr)); } var details = new LoadDetails { LoaderName = loader, ArchitectureName = archName, ArchitectureOptions = dlg.ArchitectureOptions, PlatformName = envName, LoadAddress = sAddr, EntryPoint = entry, }; OpenBinary(dlg.FileName.Text, (f) => pageInitial.OpenBinaryAs(f, details), f => false); } catch (Exception ex) { uiSvc.ShowError( ex, string.Format("An error occurred when opening the binary file {0}.", dlg.FileName.Text)); } return(true); }
public Factorial() { var ifBlockScope = Scope.CreateAndBuild(new List <IsStatic> { }); var elseBlock = Scope.CreateAndBuild(new List <IsStatic> { }); var inputKey = new NameKey("input"); var input = MemberDefinition.CreateAndBuild(inputKey, new NumberType(), Access.ReadWrite); var facKey = new NameKey("fac"); var fac = MemberDefinition.CreateAndBuild(facKey, MethodType.CreateAndBuild(new NumberType(), new NumberType()), Access.ReadWrite); var methodScope = Scope.CreateAndBuild(new List <IsStatic> { new IsStatic(input, false) }); RootScope = Model.Instantiated.RootScope.CreateAndBuild( Scope.CreateAndBuild( new List <IsStatic> { new IsStatic(MemberDefinition.CreateAndBuild(facKey, MethodType.CreateAndBuild( new NumberType(), new NumberType()), Access.ReadWrite), false) }), new [] { AssignOperation.CreateAndBuild( MethodDefinition.CreateAndBuild( new NumberType(), input, methodScope, new ICodeElement[] { ElseOperation.CreateAndBuild( IfOperation.CreateAndBuild( LessThanOperation.CreateAndBuild( MemberReference.CreateAndBuild(input), ConstantNumber.CreateAndBuild(2)), BlockDefinition.CreateAndBuild( ifBlockScope, new ICodeElement[] { ReturnOperation.CreateAndBuild( ConstantNumber.CreateAndBuild(1)) }, Array.Empty <ICodeElement>())), BlockDefinition.CreateAndBuild( elseBlock, new ICodeElement[] { ReturnOperation.CreateAndBuild( MultiplyOperation.CreateAndBuild( NextCallOperation.CreateAndBuild( SubtractOperation.CreateAndBuild( MemberReference.CreateAndBuild(input), ConstantNumber.CreateAndBuild(1)), MemberReference.CreateAndBuild(fac)), MemberReference.CreateAndBuild(input))) }, Array.Empty <ICodeElement>())) }, Array.Empty <ICodeElement>()), MemberReference.CreateAndBuild(fac) ) }, EntryPointDefinition.CreateAndBuild(new EmptyType(), MemberDefinition.CreateAndBuild(new NameKey("input"), new NumberType(), Access.ReadWrite), Scope.CreateAndBuild(Array.Empty <IsStatic>()), Array.Empty <ICodeElement>(), Array.Empty <ICodeElement>()) ); }
public MirrorPointImplementation() { var keyX = new NameKey("x"); var localX = MemberDefinition.CreateAndBuild(keyX, new AnyType(), Access.ReadWrite); var keyY = new NameKey("y"); var localY = MemberDefinition.CreateAndBuild(keyY, new AnyType(), Access.ReadWrite); var contextKey = new NameKey("context"); var context = MemberDefinition.CreateAndBuild( contextKey, InterfaceType.CreateAndBuild( Scope.CreateAndBuild( new List <IsStatic>() { new IsStatic(localX, false), new IsStatic(localY, false), }).Members.Values.Select(x => x.Value).ToList()), Access.ReadWrite);; var inputKey = new NameKey("input"); var input = MemberDefinition.CreateAndBuild(inputKey, new EmptyType(), Access.ReadWrite); var tempKey = new NameKey("temp"); var temp = MemberDefinition.CreateAndBuild(tempKey, new AnyType(), Access.ReadWrite); var implementationScope = Scope.CreateAndBuild( new List <IsStatic> { new IsStatic(input, false), new IsStatic(temp, false) }); var intermediateScope = Scope.CreateAndBuild( new List <IsStatic> { new IsStatic(context, false) }); RootScope = Model.Instantiated.RootScope.CreateAndBuild( Scope.CreateAndBuild( new List <IsStatic>() { new IsStatic(MemberDefinition.CreateAndBuild(new NameKey("mirror"), new AnyType(), Access.ReadWrite), false) }), new[] { AssignOperation.CreateAndBuild( ImplementationDefinition.CreateAndBuild( new EmptyType(), context, input, implementationScope, new ICodeElement[] { AssignOperation.CreateAndBuild( PathOperation.CreateAndBuild(MemberReference.CreateAndBuild(context), MemberReference.CreateAndBuild(localX)), MemberReference.CreateAndBuild(temp) ), AssignOperation.CreateAndBuild( PathOperation.CreateAndBuild(MemberReference.CreateAndBuild(context), MemberReference.CreateAndBuild(localY)), PathOperation.CreateAndBuild(MemberReference.CreateAndBuild(context), MemberReference.CreateAndBuild(localX)) ), AssignOperation.CreateAndBuild( MemberReference.CreateAndBuild(temp), PathOperation.CreateAndBuild(MemberReference.CreateAndBuild(context), MemberReference.CreateAndBuild(localY)) ) }, Array.Empty <ICodeElement>(), intermediateScope), MemberReference.CreateAndBuild(MemberDefinition.CreateAndBuild(new NameKey("mirror"), new AnyType(), Access.ReadWrite))) }, EntryPointDefinition.CreateAndBuild(new EmptyType(), MemberDefinition.CreateAndBuild(new NameKey("input"), new NumberType(), Access.ReadWrite), Scope.CreateAndBuild(Array.Empty <IsStatic>()), Array.Empty <ICodeElement>(), Array.Empty <ICodeElement>())); }