public MelonObject Push(MelonObject self, Arguments arguments) { var array = (self as ArrayInstance); array.values.AddRange(arguments.Values); return(array); }
public override MelonObject Run(MelonObject self, params MelonObject[] args) { var context = Context.Clone(); context.SetArguments(args); Engine.Execute(context); return(context.ReturnValue); }
public NativeFunctionInstance(string name, MelonObject self, MelonEngine engine, NativeFunctionDelegate del) : base(name, engine) { Self = self; ReturnTypeAttribute returnTypeAttribute = del.Method.GetCustomAttribute <ReturnTypeAttribute>(); if (returnTypeAttribute != null) { ReturnType = new TypeReference(engine, engine.GetType(returnTypeAttribute.Type)); } ParameterAttribute[] parameterAttributes = del.Method.GetCustomAttributes <ParameterAttribute>().ToArray(); if (parameterAttributes?.Length > 0) { ParameterTypes = new FunctionParameter[parameterAttributes.Length]; bool hasVarargs = false; for (int i = 0; i < parameterAttributes.Length; i++) { if (parameterAttributes[i].IsGeneric) { ParameterTypes[i] = new FunctionParameter(parameterAttributes[i].Name, parameterAttributes[i].GenericIndex); } else { ParameterTypes[i] = new FunctionParameter(parameterAttributes[i].Name, new TypeReference(engine, engine.GetType(parameterAttributes[i].Type))); } if (parameterAttributes[i].IsVarargs) { if (hasVarargs || i < parameterAttributes.Length - 1) { throw new MelonException("Varargs parameter can only appear once and has to be the last parameter"); } ParameterTypes[i].IsVarargs = true; hasVarargs = true; } } } else { ParameterTypes = new[] { new FunctionParameter("", new TypeReference(engine, engine.anyType)) { IsVarargs = true } }; } Delegate = del; }
public void SetValue(int index, MelonObject value) { if (values.Count == index) { values.Add(value); } else if (values.Count < index) { values.AddRange(Enumerable.Repeat(default(MelonObject), values.Count - index)); } else { values[index] = value; } }
public abstract MelonObject Run(MelonObject self, params MelonObject[] args);
public MelonObject Length(MelonObject self, Arguments arguments) { return(Engine.CreateInteger((self as StringInstance).value.Length)); }
public MelonObject Parse(MelonObject self, Arguments arguments) { return(Construct(int.Parse(arguments.GetAs <StringInstance>(0).value))); }
public MelonObject Constructor(MelonObject self, Arguments arguments) { return(new IntegerInstance(Engine, arguments.GetAs <IntegerInstance>(0).value)); }
public MelonObject Length(MelonObject self, Arguments arguments) { return(Engine.CreateInteger((self as ArrayInstance).values.Count)); }
public override MelonObject Run(MelonObject self, params MelonObject[] args) { return(Delegate.Invoke(self, new Arguments(args))); }