Ejemplo n.º 1
0
Archivo: Def.cs Proyecto: Asixa/Orange
        public void Generate(Class generator)
        {
            var morpheme = Phrase.GetEnd(MatchType);

            Phrase.DoubleCheck(morpheme, MorphemeAttribute.Class);
            generator.public_field.Add(new Variable(morpheme.type, name));
        }
Ejemplo n.º 2
0
Archivo: Def.cs Proyecto: Asixa/Orange
        public override void Generate(Method generator)
        {
            var morpheme = Phrase.GetEnd(MatchType);

            Phrase.DoubleCheck(morpheme, MorphemeAttribute.Class);
            generator.locals.Add(new Variable(morpheme.type, name));
        }
Ejemplo n.º 3
0
Archivo: Let.cs Proyecto: Asixa/Orange
        public override void Generate(Method generator)
        {
            value.Check(generator);
            value.Generate(generator);
            var morpheme = Phrase.GetEnd(target);

            Phrase.DoubleCheck(morpheme, MorphemeAttribute.Object);
            var index = generator.GetVar(morpheme.name, out var attribute);

            if (index == -1)
            {
                Error(UnknownVariable, lex_line, lex_ch, morpheme.name);
            }
            generator.AddCode(attribute == 1?ISet.Storeloc:ISet.StoreField, index);
        }
Ejemplo n.º 4
0
 public void Generate(Class @class)
 {
     @class.current_method = this;
     if (return_match != null && @return == null)
     {
         @return = Phrase.GetEnd(return_match).type;
     }
     statements.Generate(this);
     Debugger.Message("-----" + name + "生成的字节码-------");
     for (var index = 0; index < locals.Count; index++)
     {
         Debugger.Message(".[" + index + "]" + locals[index].type + " " + locals[index].name);
     }
     foreach (var code in codes)
     {
         Debugger.Message(code.ToString());
     }
     Debugger.Message("--------------------------");
 }