Exemplo n.º 1
0
        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);
        }
Exemplo n.º 3
0
        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;
        }
Exemplo n.º 4
0
 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;
     }
 }
Exemplo n.º 5
0
 public abstract MelonObject Run(MelonObject self, params MelonObject[] args);
Exemplo n.º 6
0
 public MelonObject Length(MelonObject self, Arguments arguments)
 {
     return(Engine.CreateInteger((self as StringInstance).value.Length));
 }
Exemplo n.º 7
0
 public MelonObject Parse(MelonObject self, Arguments arguments)
 {
     return(Construct(int.Parse(arguments.GetAs <StringInstance>(0).value)));
 }
Exemplo n.º 8
0
 public MelonObject Constructor(MelonObject self, Arguments arguments)
 {
     return(new IntegerInstance(Engine, arguments.GetAs <IntegerInstance>(0).value));
 }
Exemplo n.º 9
0
 public MelonObject Length(MelonObject self, Arguments arguments)
 {
     return(Engine.CreateInteger((self as ArrayInstance).values.Count));
 }
Exemplo n.º 10
0
 public override MelonObject Run(MelonObject self, params MelonObject[] args)
 {
     return(Delegate.Invoke(self, new Arguments(args)));
 }