Пример #1
0
        /// <summary>
        /// These label addresses aren't guaranteed correct until the final pass of the compiler
        /// </summary>
        public int GetLabelAddressBestEffort(TerminalName targetName)
        {
            var result = labelNameToAddress[targetName];

            if (result == null)
            {
                labelsHaveChanged = true;
                return(0);
            }
            return((int)result);
        }
Пример #2
0
        /// <summary>
        /// Mark the point in the generated code which is this label's target
        /// </summary>
        public void MarkLabel(TerminalName name)
        {
            var currentAddress  = emitter.CurrentAddress;
            var previousAddress = labelNameToAddress[name];

            if (previousAddress != null && (int)previousAddress != currentAddress)
            {
                labelsHaveChanged = true;
            }
            labelNameToAddress[name] = currentAddress;
            Debug.Print(name + ":");
        }
Пример #3
0
 protected VariableInfo(TerminalName name, Representation representation)
 {
     this.Name           = name;
     this.Representation = representation;
 }
Пример #4
0
 public StaticVariableInfo(TerminalName name, Static representation) : base(name, representation)
 {
 }
Пример #5
0
 public Label(TerminalName name)
 {
     this.Name=name;
 }
Пример #6
0
 public LocalVariableInfo(TerminalName name, Representation representation) : base(name, representation)
 {
 }
Пример #7
0
 public Representation AllocateRepresentation(TerminalName variableName)
 {
     return((Representation)AllocateRegisterIfPossible(null) ?? AllocateStackTemporary());
 }
Пример #8
0
 public Label(TerminalName name)
 {
     this.Name = name;
 }
Пример #9
0
 public bool IsLiveLocalVariableName(TerminalName name)
 {
     return(liveLocalVariableNames.ContainsKey(name));
 }
Пример #10
0
 public bool TryGetRepresentation(TerminalName refName, out Representation result)
 {
     result = (Representation)VariableNameToRepresentation[refName];
     return(result != null);
 }