package gui; import java.util.ArrayList; /** * * @author Oliver Chu */ public class Constants { public static final Pointer ONE = Heap.allocateInt(1); public static final Pointer ZERO = Heap.allocateInt(0); public static final Pointer NEG_ONE = Heap.allocateInt(-1); public static final byte INT_TYPE = 0; public static final byte REAL_TYPE = 1; public static final byte STR_TYPE = 2; public static final byte TRUTH_TYPE = 3; public static final byte NULL_TYPE = 4; public static final byte NAME_TYPE = 5; public static final byte KEYWORD_TYPE = 6; public static final byte MESSAGE_TYPE = 7; public static final byte OBJECT_TYPE = 8; public static final byte LIST_TYPE = 9; public static final byte SUBPROGRAM_TYPE = 10; public static final byte BLOCK_TYPE = 11; public static final byte BIG_INT_TYPE = 12; public static final byte PRECISE_REAL_TYPE = 13; public static final byte BYTES_TYPE = 14; public static final byte WINDOW_TYPE = 15; public static final byte BUTTON_TYPE = 16; public static final byte INTERPRETER_TYPE = 17; public static final byte SHAPE_TYPE = 18; public static final byte TABLE_TYPE = 19; public static final byte RAT_TYPE = 20; public static final byte MATCHER_TYPE = 21; public static final byte IMG_TYPE = 22; // This is in case we run out of types: /* -- UNCOMMENT THIS BLOCK WHEN MORE TYPES ARE NEEDED. public static final byte DOUBLE_POINTER_TYPE = 127; public static final byte RESERVED_TYPE0 = -128; public static final byte RESERVED_TYPE1 = -127; public static final byte RESERVED_TYPE2 = -126; public static final byte RESERVED_TYPE3 = -125; public static final byte RESERVED_TYPE4 = -124; public static final byte RESERVED_TYPE5 = -123; public static final byte RESERVED_TYPE6 = -122; public static final byte RESERVED_TYPE7 = -121; public static final byte RESERVED_TYPE8 = -120; public static final byte RESERVED_TYPE9 = -119; public static final byte RESERVED_TYPE10 = -118; public static final byte RESERVED_TYPE11 = -117; */ public static final int PLUS = 0; public static final int MINUS = 1; public static final int MULTIPLY = 2; public static final int DIVIDE = 3; public static final int FLOOR_DIVIDE = 4; public static final int MODULO = 5; public static final int POWER = 6; public static final int INPUT = 7; public static final int OPEN_PAREN = 8; public static final int CLOSE_PAREN = 9; public static final int DOT = 10; public static final int EQUAL = 11; public static final int NOT_EQUAL = 12; public static final int GTR_THAN = 13; public static final int LESS_THAN = 14; public static final int GTR_OR_EQUAL = 15; public static final int LESS_OR_EQUAL = 16; public static final int QUOTE = 17; public static final int ASSIGN = 18; public static final int PRINT = 19; public static final int AND = 20; public static final int OR = 21; public static final int XOR = 22; public static final int NOT = 23; public static final int SHOW = 24; public static final int IMPORT = 25; public static final int INTO = 26; public static final int IF = 27; public static final int END = 28; public static final int ELSE = 29; public static final int WHILE = 30; public static final int CONTINUE = 31; public static final int BREAK = 32; public static final int REPEAT = 33; public static final int RETURN = 34; public static final int SUB = 35; public static final int WHEN = 36; public static final int FOR = 37; public static final int FOREACH = 38; public static final int ELSEIF = 39; public static final int INCREMENT = 40; public static final int DECREMENT = 41; public static final int DOUBLE_DOT = 42; public static final int COMMA = 43; public static final int OPEN_BRACKET = 44; public static final int CLOSE_BRACKET = 45; public static final int RUN = 46; public static final int BLOCK = 47; public static final int LEAVE = 48; public static final int INHERIT = 49; public static final int OF = 50; public static final int IN = 51; public static final int PLUS_ASSIGN = 52; public static final int MINUS_ASSIGN = 53; public static final int MULTIPLY_ASSIGN = 54; public static final int DIVIDE_ASSIGN = 55; public static final int MODULO_ASSIGN = 56; public static final int POWER_ASSIGN = 57; public static final int LINE_COMMENT = 58; public static final int ERASE = 59; public static final int ALL = 60; public static final int EXCEPT = 61; public static final int SWITCH = 62; public static final int CASE = 63; public static final int DEFAULT = 64; public static final int ELLIPSIS = 65; public static final int OPEN_BRACE = 66; public static final int CLOSE_BRACE = 67; public static final int GIVEN = 68; public static final int YIELD = 69; public static final int OTHERWISE = 70; public static final int QUESTION = 71; public static final int COLON = 72; public static final byte ADVANCE_BY_2 = 0; public static final byte CONTINUE_FALSE_IF = 1; public static final byte PUSH_EMPTY_PTR = 2; public static final byte POP_PTR = 3; public static final byte GO_AFTER_END_AND_POP = 4; public static final byte CONTINUE_TRUE_ELSEIF = 5; public static final byte CONTINUE_FALSE_ELSEIF = 6; public static final byte PUSH_PTR = 7; public static final byte GO_AFTER_END = 8; public static final byte MSG_CONTINUE = 9; public static final byte MSG_BREAK = 10; public static final byte RETURN_VALUE = 11; public static final byte DEFINE_SUB = 12; public static final byte RESET_REPEAT_AND_GO_AFTER_END = 13; public static final byte PUSH_PTR_AND_DECREMENT = 14; public static final byte DEFINE_BLOCK = 15; public static final byte MSG_LEAVE = 16; public static final byte MSG_FOR = 17; public static final byte MSG_FOREACH = 18; public static final byte MSG_SWITCH = 19; public static final ArrayList<Integer> MULT_FAMILY = getMultiplicationFamily(); public static final ArrayList<Integer> ADD_FAMILY = getAdditionFamily(); public static final ArrayList<Integer> OP_FAMILY = getOperatorFamily(); public static final ArrayList<Integer> TIER0_KEYWORDS = getTier0Keywords(); public static final ArrayList<Integer> COMP_FAMILY = getComparisonFamily(); public static final ArrayList<Integer> LOGIC_FAMILY = getLogicFamily(); public static final ArrayList<Integer> UNARY_FAMILY = getUnaryFamily(); public static final ArrayList<Byte> OBJECT_LIKE = getObjectFamily(); public static final ArrayList<String> BUILTIN_METHODS = getBuiltinMethods(); public static final SmartList<Pointer> BLOCK_STARTERS = getBlockStarters(); public static final Pointer MINT_NULL = new Pointer(Constants.NULL_TYPE, 0); public static final Pointer MINT_TRUE = new Pointer(Constants.TRUTH_TYPE, 1); public static final Pointer MINT_FALSE = new Pointer(Constants.TRUTH_TYPE, 0); /* Unused special constants */ public static final Pointer MINT_NIL = new Pointer(Constants.NULL_TYPE, 1); public static final Pointer MINT_NONE = new Pointer(Constants.NULL_TYPE, 2); public static final Pointer MINT_NOTHING = new Pointer(Constants.NULL_TYPE, 3); /* Empty is a sequence. It can be sliced and .length() / .size() * can be called on it. * VERY useful for making recursive lists! * Appending something to an empty will turn it into a list. */ public static final Pointer MINT_EMPTY = new Pointer(Constants.NULL_TYPE, 4); // For now, just use the empty list to substitute for empty. private static ArrayList<Integer> getMultiplicationFamily() { ArrayList<Integer> multFamily = new ArrayList<Integer>(); multFamily.add(MULTIPLY); multFamily.add(DIVIDE); multFamily.add(FLOOR_DIVIDE); multFamily.add(MODULO); return multFamily; } private static ArrayList<Integer> getAdditionFamily() { ArrayList<Integer> addFamily = new ArrayList<Integer>(); addFamily.add(PLUS); addFamily.add(MINUS); return addFamily; } private static ArrayList<Integer> getOperatorFamily() { //Cheat a little by realizing that all operators are a series //of consecutive integers: ArrayList<Integer> opFamily = new ArrayList<Integer>(); //When you add more operators, be sure to increase 45 to something else. for (int i = 0; i <= 45; i++) { opFamily.add(i); } return opFamily; } private static ArrayList<Integer> getTier0Keywords() { ArrayList<Integer> tier0 = new ArrayList<Integer>(); tier0.add(ASSIGN); tier0.add(PLUS_ASSIGN); tier0.add(MINUS_ASSIGN); tier0.add(MULTIPLY_ASSIGN); tier0.add(DIVIDE_ASSIGN); tier0.add(MODULO_ASSIGN); tier0.add(POWER_ASSIGN); tier0.add(PRINT); tier0.add(WHEN); tier0.add(IF); tier0.add(SHOW); tier0.add(IMPORT); tier0.add(END); tier0.add(ELSE); tier0.add(WHILE); tier0.add(CONTINUE); tier0.add(BREAK); tier0.add(REPEAT); tier0.add(RETURN); tier0.add(SUB); tier0.add(RUN); tier0.add(BLOCK); tier0.add(FOR); tier0.add(FOREACH); tier0.add(ELSEIF); tier0.add(INHERIT); tier0.add(LEAVE); tier0.add(INTO); tier0.add(IN); tier0.add(ERASE); tier0.add(ALL); tier0.add(EXCEPT); tier0.add(SWITCH); tier0.add(CASE); tier0.add(DEFAULT); tier0.add(GIVEN); tier0.add(YIELD); tier0.add(OTHERWISE); return tier0; } private static ArrayList<Integer> getComparisonFamily() { ArrayList<Integer> compFamily = new ArrayList<Integer>(); compFamily.add(EQUAL); compFamily.add(NOT_EQUAL); compFamily.add(GTR_THAN); compFamily.add(LESS_THAN); compFamily.add(GTR_OR_EQUAL); compFamily.add(LESS_OR_EQUAL); return compFamily; } private static ArrayList<Integer> getLogicFamily() { ArrayList<Integer> logicFamily = new ArrayList<Integer>(); logicFamily.add(AND); logicFamily.add(OR); logicFamily.add(XOR); return logicFamily; } private static SmartList<Pointer> getBlockStarters() { SmartList<Pointer> blockStarters = new SmartList<Pointer>(); blockStarters.add(new Pointer(Constants.KEYWORD_TYPE, Constants.BLOCK)); blockStarters.add(new Pointer(Constants.KEYWORD_TYPE, Constants.IF)); blockStarters.add(new Pointer(Constants.KEYWORD_TYPE, Constants.WHILE)); blockStarters.add(new Pointer(Constants.KEYWORD_TYPE, Constants.REPEAT)); blockStarters.add(new Pointer(Constants.KEYWORD_TYPE, Constants.FOR)); blockStarters.add(new Pointer(Constants.KEYWORD_TYPE, Constants.FOREACH)); blockStarters.add(new Pointer(Constants.KEYWORD_TYPE, Constants.SUB)); return blockStarters; } private static ArrayList<Integer> getUnaryFamily() { ArrayList<Integer> unary = new ArrayList<Integer>(); unary.add(NOT); unary.add(INCREMENT); unary.add(DECREMENT); return unary; } private static ArrayList<Byte> getObjectFamily() { ArrayList<Byte> objs = new ArrayList<Byte>(); objs.add(STR_TYPE); objs.add(OBJECT_TYPE); objs.add(LIST_TYPE); objs.add(IMG_TYPE); objs.add(BYTES_TYPE); objs.add(WINDOW_TYPE); objs.add(BUTTON_TYPE); objs.add(INT_TYPE); objs.add(REAL_TYPE); objs.add(RAT_TYPE); return objs; } private static ArrayList<String> getBuiltinMethods() { ArrayList<String> methods = new ArrayList<String>(); methods.add("length"); methods.add("size"); methods.add("pop"); methods.add("split"); methods.add("remove"); methods.add("reverse"); methods.add("find"); methods.add("add"); methods.add("append"); methods.add("display"); methods.add("setSize"); methods.add("charNum"); methods.add("get"); methods.add("set"); methods.add("setSize"); methods.add("display"); methods.add("hide"); methods.add("setTitle"); methods.add("pack"); methods.add("setLocation"); methods.add("enable"); methods.add("disable"); methods.add("setText"); methods.add("setSubprogram"); methods.add("setSize"); methods.add("setPosition"); methods.add("slice"); methods.add("replaceSlice"); methods.add("startsWith"); methods.add("endsWith"); methods.add("upper"); methods.add("lower"); methods.add("replace"); methods.add("remove"); methods.add("setBgColor"); methods.add("setDrawingColor"); methods.add("drawShape"); methods.add("clearShapes"); return methods; } }