finish() public méthode

public finish ( ) : void
Résultat void
Exemple #1
0
        protected void doReflect()
        {
            // ensure master type is reflected
            Type master = m_base;

            master.finish();
            List masterSlots = master.slots();

            // allocate slot data structures
            m_fields      = new List(Sys.FieldType, master.fields().sz());
            m_methods     = new List(Sys.MethodType, master.methods().sz());
            m_slots       = new List(Sys.SlotType, masterSlots.sz());
            m_slotsByName = new Hashtable(masterSlots.sz() * 3);

            // parameterize master's slots
            for (int i = 0; i < masterSlots.sz(); i++)
            {
                Slot slot = (Slot)masterSlots.get(i);
                if (slot is Method)
                {
                    slot = parameterize((Method)slot);
                    m_methods.add(slot);
                }
                else
                {
                    slot = parameterize((Field)slot);
                    m_fields.add(slot);
                }
                m_slots.add(slot);
                m_slotsByName[slot.m_name] = slot;
            }
        }
Exemple #2
0
        /// <summary>
        /// simple := type "(" str ")"
        /// </summary>
        private object readSimple(int line, Type t)
        {
            // parse: type(str)
              consume(Token.LPAREN, "Expected ( in simple");
              string str = consumeStr("Expected string literal for simple");
              consume(Token.RPAREN, "Expected ) in simple");

              // lookup the fromStr method
              t.finish();
              Method m = t.method("fromStr", false);
              if (m == null)
            throw err("Missing method: " + t.qname() + ".fromStr", line);

              // invoke parse method to translate into instance
              try
              {
            return m.invoke(null, new object[] { str });
              }
              catch (ParseErr.Val e)
              {
            throw ParseErr.make(e.err().msg() + " [Line " + line + "]").val;
              }
              catch (System.Exception e)
              {
            throw ParseErr.make(e.ToString() + " [Line " + line + "]", e).val;
              }
        }