예제 #1
0
        private void EmitStatics()
        {
            //In order to be slightly nicer to our callers, we emit statics in order of declaration.
              var staticVariables=new Static[staticVariableToInfo.Count];
              foreach(StaticVariableInfo vi in staticVariableToInfo.Values) {
            var staticVar=vi.Representation;
            staticVariables[staticVar.DeclarationIndex]=staticVar;
              }

              foreach(var staticVar in staticVariables) {
            emitter.AlignToWord();
            var label=staticVar.StorageLabel;
            label.Mark();
            var labelName=label.Name.ToString();
            var initialData=staticVar.InitialData;

            for(var i=0; i<initialData.Length; ++i) {
              var item=initialData[i];
              var lo=(short)(item&0xffff);
              var hi=(short)(item>>16);

              var loComment="lo("+item.ToHex()+")";
              var hiComment="hi("+item.ToHex()+")";

              var assemblerComment="word "+i+" of "+labelName;

              emitter.Emit(lo, loComment, assemblerComment);
              emitter.Emit(hi, hiComment, assemblerComment);
            }
              }
        }
 public StaticVariableInfo(TerminalName name, Static representation)
     : base(name, representation)
 {
 }
예제 #3
0
 public void BindStaticVariableToNewRepresentation(IReference variable, string name, int[] initialData)
 {
     var terminalName=CreateTerminalName(name);
       var label=new Label(terminalName);
       var representation=new Static(staticVariableToInfo.Count, label, initialData);
       staticVariableToInfo.CheckedAdd(variable, new StaticVariableInfo(terminalName, representation));
 }