예제 #1
0
        private bool buildMethod(ClassItemAccessLevel level, bool isStatic, Token token, EnegyData data)
        {
            //control if there are is name after function :)
            if (token.getCache().type() != TokenType.Variabel)
            {
                data.setError(new ScriptError("A method should have a name", token.getCache().posision()), db);
                return false;
            }

            string type = null;

            //okay the name can be a type so wee control it here :)
            if (Types.IsType(token.getCache().ToString(), db))
            {
                type = token.getCache().ToString();

                if(token.next().type() != TokenType.Variabel)
                {
                    data.setError(new ScriptError("A method should have a name", token.getCache().posision()), db);
                    return false;
                }
            }

            Method method = new Method(token.getCache().ToString());

            token.next();

            if (isStatic)
                method.SetStatic();

            method.SetAgumentStack(AgumentParser.parseAguments(token, db, data));
            method.SetBody(new CallScriptMethod(method.GetAgumentStack(), BodyParser.parse(token, data, db)).call);
            method.SetVariabel();//in this way the script can use agument as name :)
            method.setLevel(level);

            builder.SetMethod(method, data, db, token.getCache().posision());
            token.next();
            return true;
        }
예제 #2
0
        private static void createStringClass(EnegyData data, VariabelDatabase db, Posision pos)
        {
            Class s = new Class("string");

            Method format = new Method("format");
            format.SetStatic();
            format.GetAgumentStack().push("string", "query");
            format.GetAgumentStack().push("array", "parameters");
            format.SetBody(Format_caller);
            s.SetMethod(format, data, db, pos);

            //constructor :)
            Method constructor = new Method(null);
            constructor.GetAgumentStack().push("string", "s", new NullVariabel());
            constructor.SetBody(Constructor_caller);
            s.SetConstructor(constructor, data, db, pos);

            Method length = new Method("length");
            length.SetBody(Length_caller);
            s.SetMethod(length, data, db, pos);

            Method substr = new Method("substr");
            substr.GetAgumentStack().push("int", "min");
            substr.GetAgumentStack().push("int", "max", new NullVariabel());
            substr.SetBody(Substr_caller);
            s.SetMethod(substr, data, db, pos);

            Method indexOf = new Method("indexOf");
            indexOf.GetAgumentStack().push("string", "serche");
            indexOf.SetBody(IndexOf_caller);
            s.SetMethod(indexOf, data, db, pos);

            Method toChars = new Method("toChars");
            toChars.SetBody(ToChars_caller);
            s.SetMethod(toChars, data, db, pos);

            Method split = new Method("split");
            split.GetAgumentStack().push("string", "string");
            split.SetBody(Split_caller);
            s.SetMethod(split, data, db, pos);

            Method toLower = new Method("toLower");
            toLower.SetBody(ToLower_caller);
            s.SetMethod(toLower, data, db, pos);

            Method toUpper = new Method("toUpper");
            toUpper.SetBody(ToUpper_caller);
            s.SetMethod(toUpper, data, db, pos);

            Method toString = new Method("toString");
            toString.SetBody(ToString_caller);
            s.SetMethod(toString, data, db, pos);

            Method set = new Method("set");
            set.GetAgumentStack().push("string", "context");
            set.setLevel(ClassItemAccessLevel.Protected);
            set.SetBody(Set_caller);
            s.SetMethod(set, data, db, pos);

            db.pushClass(s, data);
        }