// Defines [methodValue] as a method on [classObj]. private static Obj BindMethod(bool isStatic, int symbol, ObjClass classObj, Obj methodContainer) { ObjFn methodFn = methodContainer as ObjFn ?? ((ObjClosure)methodContainer).Function; // Methods are always bound against the class, and not the metaclass, even // for static methods, because static methods don't have instance fields // anyway. Compiler.BindMethodCode(classObj, methodFn); Method method = new Method { MType = MethodType.Block, Obj = methodContainer }; if (isStatic) classObj = classObj.ClassObj; classObj.BindMethod(symbol, method); return null; }
public void Call(ObjClass objClass, string s) { if (!MethodNames.Contains(s)) { MethodNames.Add(s); } int symbol = MethodNames.IndexOf(s); objClass.BindMethod(symbol, new Method { MType = MethodType.Call }); }
/* Anotehr Dirty Hack */ public void Primitive(ObjClass objClass, string s, Primitive func) { if (!MethodNames.Contains(s)) { MethodNames.Add(s); } int symbol = MethodNames.IndexOf(s); Method m = new Method { Primitive = func, MType = MethodType.Primitive }; objClass.BindMethod(symbol, m); }