public bool Equals(AsmSegment other) { if (ReferenceEquals(null, other)) { return(false); } if (ReferenceEquals(this, other)) { return(true); } return(Equals(Event, other.Event) && Offset == other.Offset && Length == other.Length); }
private void CreateExternalBindings() { foreach (AsmEvent evt in _scripts.GetOrderedModules().SelectMany(module => module.GetOrderedEvents())) { for (int i = 0; i < evt.Count; i++) { JsmOperation operation = evt[i]; switch (operation.Command) { case JsmCommand.REQ: case JsmCommand.REQEW: case JsmCommand.REQSW: { AsmSegment source = evt.Segments.GetSegmentByOffset(i); AsmValueSource labelTargetEvent = AsmValueSource.Create(evt, i - 1); AsmAbsoluteRequestBinding binding = new AsmAbsoluteRequestBinding(source, i - source.Offset, operation.Argument, labelTargetEvent); source.OutputBindings.Add(binding); AsmSegment[] targets = binding.ResolveTargets(); if (targets != null) { foreach (AsmSegment target in targets) { target.InputBindings.Add(binding); } } break; } case JsmCommand.PREQ: case JsmCommand.PREQEW: case JsmCommand.PREQSW: { AsmSegment source = evt.Segments.GetSegmentByOffset(i); AsmValueSource labelTargetEvent = AsmValueSource.Create(evt, i - 1); AsmRelativeRequestBinding binding = new AsmRelativeRequestBinding(source, i - source.Offset, operation.Argument, labelTargetEvent); source.OutputBindings.Add(binding); AsmSegment[] targets = binding.ResolveTargets(); if (targets != null) { foreach (AsmSegment target in targets) { target.InputBindings.Add(binding); } } break; } } } } }
private void CreateInternalBindings(AsmSegments segments, List <int> jumpFrom, List <int> jumpTo) { for (int s = 0; s < segments.Count - 1; s++) { AsmSegment source = segments[s]; AsmSegment target = segments[s + 1]; JsmOperation last = source[source.Length - 1]; if (last.Command == JsmCommand.JPF) { AsmConditionBinding binding = new AsmConditionBinding(source, target, AsmValueSource.Create(source, source.Length - 2), true); source.OutputBindings.Add(binding); target.InputBindings.Add(binding); } else if (last.Command != JsmCommand.JMP) { AsmHardlinkBinding binding = new AsmHardlinkBinding(source, target); source.OutputBindings.Add(binding); target.InputBindings.Add(binding); } } for (int i = 0; i < jumpFrom.Count; i++) { int fromIndex = jumpFrom[i]; int toIndex = jumpTo[i]; AsmSegment source = segments.GetSegmentByOffset(fromIndex); AsmSegment target = segments.GetSegmentByOffset(toIndex); JsmOperation last = source[source.Length - 1]; if (last.Command == JsmCommand.JMP) { AsmHardlinkBinding binding = new AsmHardlinkBinding(source, target); source.OutputBindings.Add(binding); target.InputBindings.Add(binding); } else if (last.Command == JsmCommand.JPF) { AsmConditionBinding binding = new AsmConditionBinding(source, target, AsmValueSource.Create(source, source.Length - 2), false); source.OutputBindings.Add(binding); target.InputBindings.Add(binding); } } }
public AsmRelativeRequestBinding(AsmSegment source, int sourceOffset, int partyMember, AsmValueSource targetEventSource) : base(AsmBindingType.RelativeRequest, source, sourceOffset) { PartyMember = partyMember; TargetEventSource = targetEventSource; }
public AsmCommandFactory(AsmSegment segment) { _event = segment.Event; _offset = segment.Offset; _length = segment.Length; }
public static AsmValueSource Create(AsmSegment segment, int offset) { return(Create(segment.Event, segment.Offset + offset)); }