Esempio n. 1
0
 public void Send(
     IValue receiver,
     ValueSymbol selector,
     IList<IValue> args,
     VM vm,
     SourceInfo info
 )
 {
     IValueFunc func = null;
     foreach (ValueSymbol klass in KlassList)
     {
         if (vm.Env.LookupMethod(klass, selector, out func))
         {
             break;
         }
     }
     if (func == null)
     {
         throw new RheaException(
             string.Format(
                 "invalid selector for {0}: {1}",
                 receiver,
                 selector.Name.ToIdentifier()
             ),
             info
         );
     }
     List<IValue> newArgs = new List<IValue>();
     newArgs.Add(receiver);
     newArgs.AddRange(args);
     func.Call(newArgs, vm, info);
 }
Esempio n. 2
0
 public static ValueSymbol Intern(string name)
 {
     ValueSymbol symbol;
     if (!smInstances.TryGetValue(name, out symbol))
     {
         symbol = new ValueSymbol(name, true);
         smInstances[name] = symbol;
     }
     return symbol;
 }
Esempio n. 3
0
 public IValueFunc this[ValueSymbol klass, ValueSymbol selector]
 {
     get
     {
         return mMethods[MakePair(klass, selector)];
     }
     set
     {
         mMethods[MakePair(klass, selector)] = value;
     }
 }
Esempio n. 4
0
 public IValue this[ValueSymbol symbol]
 {
     get
     {
         return mVariables[symbol];
     }
     set
     {
         mVariables[symbol] = value;
     }
 }
Esempio n. 5
0
 public ExprSend(
     IExpr recvExpr,
     ValueSymbol selector,
     IList<IExpr> argExprs,
     SourceInfo info
 )
 {
     RecvExpr = recvExpr;
     Selector = selector;
     ArgExprs = argExprs;
     mInfo = info;
 }
Esempio n. 6
0
 public void Send(ValueSymbol selector, IList<IValue> args, VM vm, SourceInfo info)
 {
     if (smKlassHolder == null)
     {
         smKlassHolder = new KlassHolder(
             new List<ValueSymbol> {
                 Klasses.Symbol,
                 Klasses.Object
             }
         );
     }
     smKlassHolder.Send(this, selector, args, vm, info);
 }
Esempio n. 7
0
 public void Send(ValueSymbol selector, IList<IValue> args, VM vm, SourceInfo info)
 {
     IValueFunc func;
     if (mMethods.TryGetValue(selector, out func))
     {
         List<IValue> newArgs = new List<IValue>();
         newArgs.Add(this);
         newArgs.AddRange(args);
         func.Call(newArgs, vm, info);
         return;
     }
     mKlassHolder.Send(this, selector, args, vm, info);
 }
Esempio n. 8
0
 public void Send(ValueSymbol selector, IList<IValue> args, VM vm, SourceInfo info)
 {
     smKlassHolder.Send(this, selector, args, vm, info);
 }
Esempio n. 9
0
 private static KeyValuePair<ValueSymbol, ValueSymbol> MakePair(ValueSymbol klass, ValueSymbol selector)
 {
     return new KeyValuePair<ValueSymbol, ValueSymbol>(klass, selector);
 }
Esempio n. 10
0
 public bool TryGetVariable(ValueSymbol symbol, out IValue value)
 {
     return mVariables.TryGetValue(symbol, out value);
 }
Esempio n. 11
0
 public bool TryGetMethod(ValueSymbol klass, ValueSymbol selector, out IValueFunc func)
 {
     return mMethods.TryGetValue(MakePair(klass, selector), out func);
 }
Esempio n. 12
0
 public bool ContainsVariable(ValueSymbol symbol)
 {
     return mVariables.ContainsKey(symbol);
 }
Esempio n. 13
0
 public bool ContainsMethod(ValueSymbol klass, ValueSymbol selector)
 {
     return mMethods.ContainsKey(MakePair(klass, selector));
 }
Esempio n. 14
0
 public void AddVariable(ValueSymbol symbol, IValue value)
 {
     mVariables.Add(symbol, value);
 }
Esempio n. 15
0
 public void AddMethod(ValueSymbol klass, ValueSymbol selector, IValueFunc func)
 {
     mMethods.Add(MakePair(klass, selector), func);
 }
Esempio n. 16
0
 public InsnSend(ValueSymbol selector, int argCount, SourceInfo info)
 {
     mSelector = selector;
     mArgCount = argCount;
     mInfo = info;
 }