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;