virtual Value* get_##p1##_##p2(
Value** arg_list, 
int count)                                               \
 
            {                                                                                                           \
                two_value_locals(cont, result);                                                                         \
                Value* args[4] = { n_##p1, keyarg_marker_value, n_propCaseSensitiveName, csn};                         \
 
                vl.cont = get_##p1(args, csn ? 4 : 1);                                                                  \
                Value* args2[4] = { n_##p2, keyarg_marker_value, n_propCaseSensitiveName, nested_csn};                 \
 
                vl.result = vl.cont->get_##p2(args2, nested_csn ? 4 : 1);                                               \
                return_value(vl.result);                                                                                \
            }                                                                                                           \
            virtual Value*  set_##p1##_##p2(Value** arg_list, int count)                                                \
            {                                                                                                           \
                one_value_local(cont);                                                                                  \
                Value* args[4] = { n_##p1, keyarg_marker_value, n_propCaseSensitiveName, csn};                          \
                vl.cont = get_##p1(args, csn ? 4 : 1);                                                                  \
                Value* args2[5] = { arg_list[0], n_##p2, keyarg_marker_value, n_propCaseSensitiveName, nested_csn};     \
                vl.cont->set_##p2(args2, nested_csn ? 5 : 2);                                                           \
                Value* args3[5] = { vl.cont, n_##p1, keyarg_marker_value, n_propCaseSensitiveName, csn};                \
                set_##p1(args3, csn ? 5 : 2);                                                                           \
                return arg_list[0];                                                                                     \
            }
ScripterExport Value * _get_key_arg_or_default(Value **arg_list, int count, Value *key_name, Value *def)
  105#define def_2_prop_path(p1, p2)                                                                                         \
  106            virtual Value*  get_##p1##_##p2(Value** arg_list, int count)                                                \
  107            {                                                                                                           \
  108                two_value_locals(cont, result);                                                                         \
  109                Value* csn = _get_key_arg_or_default(arg_list, count, n_propCaseSensitiveName, nullptr);                \
  110                Value* args[4] = { n_##p1, keyarg_marker_value, n_propCaseSensitiveName, csn};                          \
  111                vl.cont = get_##p1(args, csn ? 4 : 1);                                                                  \
  112                Value* nested_csn = _get_key_arg_or_default(arg_list, count, n_nestedPropCaseSensitiveName, nullptr);   \
  113                Value* args2[4] = { n_##p2, keyarg_marker_value, n_propCaseSensitiveName, nested_csn};                  \
  114                vl.result = vl.cont->get_##p2(args2, nested_csn ? 4 : 1);                                               \
  115                return_value(vl.result);                                                                                \
  116            }                                                                                                           \
  117            virtual Value*  set_##p1##_##p2(Value** arg_list, int count)                                                \
  118            {                                                                                                           \
  119                one_value_local(cont);                                                                                  \
  120                Value* csn = _get_key_arg_or_default(arg_list, count, n_propCaseSensitiveName, nullptr);                \
  121                Value* args[4] = { n_##p1, keyarg_marker_value, n_propCaseSensitiveName, csn};                          \
  122                vl.cont = get_##p1(args, csn ? 4 : 1);                                                                  \
  123                Value* nested_csn = _get_key_arg_or_default(arg_list, count, n_nestedPropCaseSensitiveName, nullptr);   \
  124                Value* args2[5] = { arg_list[0], n_##p2, keyarg_marker_value, n_propCaseSensitiveName, nested_csn};     \
  125                vl.cont->set_##p2(args2, nested_csn ? 5 : 2);                                                           \
  126                Value* args3[5] = { vl.cont, n_##p1, keyarg_marker_value, n_propCaseSensitiveName, csn};                \
  127                set_##p1(args3, csn ? 5 : 2);                                                                           \
  128                return arg_list[0];                                                                                     \
  129            }