syntax = "proto2"; message VarRef { required int32 varnum = 1; } message ArrType { repeated Const elements = 1; } message KVPair { required string key = 1; required string val = 2; } message HashType { repeated KVPair keyval = 1; } message StringExtNoArg { enum StrExtOp { DUMP = 0; STRIP = 1; LSTRIP = 2; RSTRIP = 3; STRIPE = 4; LSTRIPE = 5; RSTRIPE = 6; SWAPCASE = 7; SWAPCASEE = 8; SQUEEZE = 9; } required StrExtOp str_op = 1; required string str_arg = 2; } message MathConst { enum MathConstLit { PI = 0; E = 1; } required MathConstLit math_const = 1; } message Const { oneof const_oneof { uint32 int_lit = 1; bool bool_val = 4; } } message BinaryOp { enum Op { ADD = 0; SUB = 1; MUL = 2; DIV = 3; MOD = 4; XOR = 5; AND = 6; OR = 7; EQ = 8; NE = 9; LE = 10; GE = 11; LT = 12; GT = 13; RS = 14; }; required Op op = 1; required Rvalue left = 2; required Rvalue right = 3; } message Rvalue { oneof rvalue_oneof { VarRef varref = 1; Const cons = 2; BinaryOp binop = 3; } } message AssignmentStatement { required Rvalue rvalue = 2; } message IfElse { required Rvalue cond = 1; required StatementSeq if_body = 2; required StatementSeq else_body = 3; } //TODO: Add Switch statement //message Switch { // required Rvalue switch_var = 1; // repeated Rvalue cond = 2; //} message Ternary { required Rvalue tern_cond = 1; required Rvalue t_branch = 2; required Rvalue f_branch = 3; } message ObjectSpace { enum OS_methods { COUNT = 1; } required OS_methods os_func = 1; required HashType os_arg = 2; } message Time { enum T_methods { AT = 1; GM = 2; } required T_methods t_func = 1; required uint32 t_arg = 2; } message Array { enum Arr_methods { FLATTEN = 1; COMPACT = 2; FETCH = 3; FILL = 4; ROTATE = 5; ROTATE_E = 6; DELETEIF = 7; INSERT = 8; BSEARCH = 9; KEEPIF = 10; SELECT = 11; VALUES_AT = 12; BLOCK = 13; DIG = 14; SLICE = 15; PERM = 16; COMB = 17; ASSOC = 18; RASSOC = 19; } required Arr_methods arr_func = 1; required ArrType arr_arg = 2; required Rvalue val_arg = 3; } message MathType { oneof math_arg_oneof { Rvalue math_rval = 2; MathConst math_const = 3; } } message MathOps { enum Mops { CBRT = 1; COS = 2; ERF = 3; ERFC = 4; LOG = 5; LOG10 = 6; LOG2 = 7; SIN = 8; SQRT = 9; TAN = 10; } required Mops math_op = 1; required MathType math_arg = 2; } message BuiltinFuncs { oneof bifunc_oneof { ObjectSpace os = 1; Time time = 2; Array arr = 3; MathOps mops = 4; } } message Statement { oneof stmt_oneof { AssignmentStatement assignment = 1; IfElse ifelse = 2; Ternary ternary_stmt = 3; BuiltinFuncs builtins = 4; StatementSeq blockstmt = 5; } } message StatementSeq { repeated Statement statements = 1; } message Function { required StatementSeq statements = 1; } package ruby_fuzzer;