Example #1
0
 register_global_value(int data_index, KurumiValue value)
 {
     if (data_index < data.Length)
     {
         data[data_index].reference = value;
     }
 }
Example #2
0
 add(KurumiValue value)
 {
     if (value != null)
     {
         args.Add(value);
     }
 }
Example #3
0
 stack_debug()
 {
     for (int i = 0; i < sp; i++)
     {
         KurumiValue v = value_stack[i];
         Console.WriteLine("{0}", v.to_string());
     }
 }
Example #4
0
 div(KurumiValue other)
 {
     if (other.type == KurumiValueTypes.Number || other.type == KurumiValueTypes.Integer)
     {
         return(new KurumiNumber(number / ((KurumiNumber)other).number));
     }
     return(this);
 }
Example #5
0
 debug()
 {
     for (int i = 0; i < args.Count; i++)
     {
         KurumiValue v = args[i];
         Console.WriteLine("Position in list: {2, 3} Value: {0, 8} Type: {1, 5}", v.to_string(), v.type, i);
     }
 }
Example #6
0
    print(KurumiScript script, KurumiValueList args)
    {
        int size = args.size();

        for (int i = 0; i < size; i++)
        {
            KurumiValue v = args.pop();
            Console.WriteLine(v.to_string());
        }
        args.add(new KurumiNull());
    }
Example #7
0
 add(KurumiValue other)
 {
     if (other.type == KurumiValueTypes.String)
     {
         return(other.add(this));
     }
     if (other.type == KurumiValueTypes.Number || other.type == KurumiValueTypes.Integer)
     {
         return(new KurumiNumber(number + ((KurumiNumber)other).number));
     }
     return(this);
 }
Example #8
0
    pop()
    {
        int size = args.Count;

        if (size <= 0)
        {
            return(null);
        }
        size -= 1;
        KurumiValue v = args[size];

        args.RemoveAt(size);
        return(v);
    }
Example #9
0
    interpret()
    {
        while (vp < expression.size() && !freeze)
        {
            KurumiValue value = expression[vp++];
            switch (value.type)
            {
            case KurumiValueTypes.Command:
                execute_command((KurumiCommand)value);
                break;

            case KurumiValueTypes.String:
            case KurumiValueTypes.Number:
                value_stack[sp++] = value;
                break;
            }
        }
    }
Example #10
0
 noteq(KurumiValue other)
 {
     return(other.equal_number(this).negation());
 }
Example #11
0
 set_value(string name, KurumiValue value)
 {
     register_global_value(storage.get_index_from_name(name), value);
 }
Example #12
0
 add(KurumiValue other)
 {
     return(new KurumiString(to_string() + other.to_string()));
 }
Example #13
0
 noteq(KurumiValue other)
 {
     return(other.equal_string(this).negation());
 }
Example #14
0
 equal(KurumiValue other)
 {
     return(other.equal_string(this));
 }
Example #15
0
 noteq(KurumiValue other)
 {
     return(this);
 }
Example #16
0
 div(KurumiValue other)
 {
     return(this);
 }
Example #17
0
 equal(KurumiValue other)
 {
     return(other.equal_number(this));
 }
Example #18
0
    execute_command(KurumiCommand command)
    {
        //Console.WriteLine("execute_command: {0}", command.command_type.ToString());
        //stack_debug();
        switch (command.command_type)
        {
        case KurumiCommandType.JMPIN: {
            KurumiValue jmpp = expression[vp++];
            KurumiValue expv = value_stack[--sp];
            if (expv.to_bool() == false)
            {
                vp = (int)jmpp.to_number();
            }
            break;
        }

        case KurumiCommandType.JMP: {
            KurumiValue jmpp = expression[vp++];
            vp = (int)jmpp.to_number();
            break;
        }

        case KurumiCommandType.ASSIGN: {
            KurumiValue rexp = value_stack[--sp];
            KurumiValue lexp = value_stack[--sp];
            ((KurumiReference)lexp).reference = rexp.clone();
            break;
        }

        case KurumiCommandType.ADD: {
            KurumiValue rexp = value_stack[--sp].dereference();
            KurumiValue lexp = value_stack[--sp].dereference();
            value_stack[sp++] = rexp.add(lexp);
            break;
        }

        case KurumiCommandType.SUB: {
            KurumiValue rexp = value_stack[--sp].dereference();
            KurumiValue lexp = value_stack[--sp].dereference();
            value_stack[sp] = lexp.sub(rexp);
            sp++;
            break;
        }

        case KurumiCommandType.MUL: {
            KurumiValue rexp = value_stack[--sp].dereference();
            KurumiValue lexp = value_stack[--sp].dereference();
            value_stack[sp++] = lexp.mul(rexp);
            break;
        }

        case KurumiCommandType.DIV: {
            KurumiValue rexp = value_stack[--sp].dereference();
            KurumiValue lexp = value_stack[--sp].dereference();
            value_stack[sp++] = lexp.div(rexp);
            break;
        }

        case KurumiCommandType.EQUAL: {
            KurumiValue rexp = value_stack[--sp].dereference();
            KurumiValue lexp = value_stack[--sp].dereference();
            value_stack[sp++] = lexp.equal(rexp);
            break;
        }

        case KurumiCommandType.NOTEQ: {
            KurumiValue rexp = value_stack[--sp].dereference();
            KurumiValue lexp = value_stack[--sp].dereference();
            value_stack[sp++] = lexp.noteq(rexp);
            break;
        }

        case KurumiCommandType.GTHAN: {
            KurumiValue rexp = value_stack[--sp].dereference();
            KurumiValue lexp = value_stack[--sp].dereference();
            value_stack[sp++] = lexp.gthan(rexp);
            break;
        }

        case KurumiCommandType.LTHAN: {
            KurumiValue rexp = value_stack[--sp].dereference();
            KurumiValue lexp = value_stack[--sp].dereference();
            value_stack[sp++] = lexp.lthan(rexp);
            break;
        }

        case KurumiCommandType.GOREQ: {
            KurumiValue rexp = value_stack[--sp].dereference();
            KurumiValue lexp = value_stack[--sp].dereference();
            value_stack[sp++] = lexp.goreq(rexp);
            break;
        }

        case KurumiCommandType.LOREQ: {
            KurumiValue rexp = value_stack[--sp].dereference();
            KurumiValue lexp = value_stack[--sp].dereference();
            value_stack[sp++] = lexp.loreq(rexp);
            break;
        }

        case KurumiCommandType.CALL: {
            KurumiValue     func = value_stack[--sp];
            KurumiValue     retc = expression[vp++];
            KurumiValue     size = expression[vp++];
            int             sz   = (int)size.to_number();
            int             rc   = (int)retc.to_number();
            KurumiValueList args = new KurumiValueList();
            if (sz > 0)
            {
                for (int i = 0; i < sz; i++)
                {
                    args.add(value_stack[--sp].dereference());
                }
            }
            func.call(this, args);
            if (rc > 0)
            {
                value_stack[sp++] = args.top();
            }
            break;
        }

        case KurumiCommandType.REF: {
            KurumiValue refv = expression[vp++];
            value_stack[sp++] = data[(int)refv.to_number()];
            break;
        }
        }
        //Console.WriteLine("after_execute_command");
        //stack_debug();
    }
Example #19
0
 equal(KurumiValue other)
 {
     return(this);
 }
Example #20
0
 lthan(KurumiValue other)
 {
     return(other.lthan_number(this));
 }
Example #21
0
 gthan(KurumiValue other)
 {
     return(this);
 }
Example #22
0
 goreq(KurumiValue other)
 {
     return(other.lthan_number(this).negation());
 }