maxscript/macros/value_locals.h File Reference
 
 
 
maxscript/macros/value_locals.h File Reference
#include "../kernel/MAXScript_TLS.h"
#include "../../assert1.h"

Defines

#define  one_value_local(n1)
#define  one_typed_value_local(n1)
#define  two_value_locals(n1, n2)
#define  two_typed_value_locals(n1, n2)
#define  three_value_locals(n1, n2, n3)
#define  three_typed_value_locals(n1, n2, n3)
#define  four_value_locals(n1, n2, n3, n4)
#define  four_typed_value_locals(n1, n2, n3, n4)
#define  five_value_locals(n1, n2, n3, n4, n5)
#define  five_typed_value_locals(n1, n2, n3, n4, n5)
#define  six_value_locals(n1, n2, n3, n4, n5, n6)
#define  six_typed_value_locals(n1, n2, n3, n4, n5, n6)
#define  seven_value_locals(n1, n2, n3, n4, n5, n6, n7)
#define  seven_typed_value_locals(n1, n2, n3, n4, n5, n6, n7)
#define  eight_value_locals(n1, n2, n3, n4, n5, n6, n7, n8)
#define  eight_typed_value_locals(n1, n2, n3, n4, n5, n6, n7, n8)
#define  nine_value_locals(n1, n2, n3, n4, n5, n6, n7, n8, n9)
#define  nine_typed_value_locals(n1, n2, n3, n4, n5, n6, n7, n8, n9)
#define  ten_value_locals(n1, n2, n3, n4, n5, n6, n7, n8, n9, n10)
#define  ten_typed_value_locals(n1, n2, n3, n4, n5, n6, n7, n8, n9, n10)
#define  eleven_value_locals(n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11)
#define  eleven_typed_value_locals(n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11)
#define  value_local_array(var, count)
#define  pop_value_local_array(var)   thread_local(current_locals_frame) = (Value**)var[-1];
#define  value_temp_array(var, count)
#define  value_temp_array0(var)
#define  realloc_value_temp_array(var, count, old_count)
#define  pop_value_temp_array(var)
#define  return_value(r)   { return templated_return_value_fn(r, vl.link); }
#define  return_value_no_pop(r)   { return templated_return_protected_fn(r); }
#define  return_protected(r)   { return templated_return_protected_fn(r); }
#define  pop_value_locals()   thread_local(current_locals_frame) = vl.link;
#define  reset_locals_frame()   thread_local(current_locals_frame) = (Value**)&vl;
#define  reset_locals_array_frame(var)   thread_local(current_locals_frame) = &var[-2];
#define  clear_current_frames()
#define  save_current_frames()
#define  restore_current_frames()
#define  save_current_source()
#define  restore_current_source()
#define  save_current_source_no_pos()
#define  restore_current_source_no_pos()
#define  save_current_source_pos()
#define  restore_current_source_pos()
#define  save_current_source_to_frame()
#define  save_current_source_to_frame_no_pos()
#define  save_current_source_to_frame_pos()
#define  save_current_source_to_frame_no_file()
#define  push_control(_c)
#define  pop_control()   thread_local(current_controller) = _save_cc;
#define  save_error_source_data()
#define  clear_error_source_data()

Functions

template<typename Type >
Type  templated_return_value_fn (Type r, Value **link)
template<typename Type >
Type  templated_return_protected_fn (Type r)

Define Documentation

#define one_value_local (   n1 )
Value:
struct { int count; Value** link; Value* n1; } vl =                             \
                { 1, NULL, NULL };                                                                                      \
        vl.link = thread_local(current_locals_frame);                                   \
        thread_local(current_locals_frame) = (Value**)&vl;
#define one_typed_value_local (   n1 )
Value:
struct { int count; Value** link; n1; } vl =                                    \
                { 1, NULL, NULL };                                                                                      \
        vl.link = thread_local(current_locals_frame);                                   \
        thread_local(current_locals_frame) = (Value**)&vl;
#define two_value_locals (   n1,
  n2 
)
Value:
struct { int count; Value** link; Value *n1, *n2; } vl =                \
                { 2, NULL, NULL, NULL };                                                                        \
        vl.link = thread_local(current_locals_frame);                                   \
        thread_local(current_locals_frame) = (Value**)&vl;
#define two_typed_value_locals (   n1,
  n2 
)
Value:
struct { int count; Value** link; n1; n2; } vl =                                \
                { 2, NULL, NULL, NULL };                                                                        \
        vl.link = thread_local(current_locals_frame);                                   \
        thread_local(current_locals_frame) = (Value**)&vl;
#define three_value_locals (   n1,
  n2,
  n3 
)
Value:
struct { int count; Value** link; Value *n1, *n2, *n3; } vl =   \
                { 3, NULL, NULL, NULL, NULL };                                                          \
        vl.link = thread_local(current_locals_frame);                                   \
        thread_local(current_locals_frame) = (Value**)&vl;
#define three_typed_value_locals (   n1,
  n2,
  n3 
)
Value:
struct { int count; Value** link; n1; n2; n3; } vl =                    \
                { 3, NULL, NULL, NULL, NULL };                                                          \
        vl.link = thread_local(current_locals_frame);                                   \
        thread_local(current_locals_frame) = (Value**)&vl;
#define four_value_locals (   n1,
  n2,
  n3,
  n4 
)
Value:
struct { int count; Value** link; Value *n1, *n2, *n3, *n4; } vl =      \
                { 4, NULL, NULL, NULL, NULL, NULL };                                                    \
        vl.link = thread_local(current_locals_frame);                                           \
        thread_local(current_locals_frame) = (Value**)&vl;
#define four_typed_value_locals (   n1,
  n2,
  n3,
  n4 
)
Value:
struct { int count; Value** link; n1; n2; n3; n4; } vl =                \
                { 4, NULL, NULL, NULL, NULL, NULL };                                            \
        vl.link = thread_local(current_locals_frame);                                   \
        thread_local(current_locals_frame) = (Value**)&vl;
#define five_value_locals (   n1,
  n2,
  n3,
  n4,
  n5 
)
Value:
struct { int count; Value** link; Value *n1, *n2, *n3, *n4, *n5; } vl = \
                { 5, NULL, NULL, NULL, NULL, NULL, NULL };                                                  \
        vl.link = thread_local(current_locals_frame);                                               \
        thread_local(current_locals_frame) = (Value**)&vl;
#define five_typed_value_locals (   n1,
  n2,
  n3,
  n4,
  n5 
)
Value:
struct { int count; Value** link; n1; n2; n3; n4; n5; } vl =                    \
                { 5, NULL, NULL, NULL, NULL, NULL, NULL };                                                  \
        vl.link = thread_local(current_locals_frame);                                               \
        thread_local(current_locals_frame) = (Value**)&vl;
#define six_value_locals (   n1,
  n2,
  n3,
  n4,
  n5,
  n6 
)
Value:
struct { int count; Value** link; Value *n1, *n2, *n3, *n4, *n5, *n6; } vl = \
                { 6, NULL, NULL, NULL, NULL, NULL, NULL, NULL };                                                 \
        vl.link = thread_local(current_locals_frame);                                                            \
        thread_local(current_locals_frame) = (Value**)&vl;
#define six_typed_value_locals (   n1,
  n2,
  n3,
  n4,
  n5,
  n6 
)
Value:
struct { int count; Value** link; n1; n2; n3; n4; n5; n6; } vl =                \
                { 6, NULL, NULL, NULL, NULL, NULL, NULL, NULL };                                        \
        vl.link = thread_local(current_locals_frame);                                                   \
        thread_local(current_locals_frame) = (Value**)&vl;
#define seven_value_locals (   n1,
  n2,
  n3,
  n4,
  n5,
  n6,
  n7 
)
Value:
struct { int count; Value** link; Value *n1, *n2, *n3, *n4, *n5, *n6, *n7; } vl = \
                { 7, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };                                            \
        vl.link = thread_local(current_locals_frame);                                                                     \
        thread_local(current_locals_frame) = (Value**)&vl;
#define seven_typed_value_locals (   n1,
  n2,
  n3,
  n4,
  n5,
  n6,
  n7 
)
Value:
struct { int count; Value** link; n1; n2; n3; n4; n5; n6; n7; } vl =    \
                { 7, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };                          \
        vl.link = thread_local(current_locals_frame);                                                   \
        thread_local(current_locals_frame) = (Value**)&vl;
#define eight_value_locals (   n1,
  n2,
  n3,
  n4,
  n5,
  n6,
  n7,
  n8 
)
Value:
struct { int count; Value** link; Value *n1, *n2, *n3, *n4, *n5, *n6, *n7, *n8; } vl = \
                { 8, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };                                       \
        vl.link = thread_local(current_locals_frame);                                                                              \
        thread_local(current_locals_frame) = (Value**)&vl;
#define eight_typed_value_locals (   n1,
  n2,
  n3,
  n4,
  n5,
  n6,
  n7,
  n8 
)
Value:
struct { int count; Value** link; n1; n2; n3; n4; n5; n6; n7; n8; } vl =        \
                { 8, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };                    \
        vl.link = thread_local(current_locals_frame);                                                           \
        thread_local(current_locals_frame) = (Value**)&vl;
#define nine_value_locals (   n1,
  n2,
  n3,
  n4,
  n5,
  n6,
  n7,
  n8,
  n9 
)
Value:
struct { int count; Value** link; Value *n1, *n2, *n3, *n4, *n5, *n6, *n7, *n8, *n9; } vl = \
                { 9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };                                              \
        vl.link = thread_local(current_locals_frame);                                                                                           \
        thread_local(current_locals_frame) = (Value**)&vl;
#define nine_typed_value_locals (   n1,
  n2,
  n3,
  n4,
  n5,
  n6,
  n7,
  n8,
  n9 
)
Value:
struct { int count; Value** link; n1; n2; n3; n4; n5; n6; n7; n8; n9; } vl =    \
                { 9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };                      \
        vl.link = thread_local(current_locals_frame);                                                                   \
        thread_local(current_locals_frame) = (Value**)&vl;
#define ten_value_locals (   n1,
  n2,
  n3,
  n4,
  n5,
  n6,
  n7,
  n8,
  n9,
  n10 
)
Value:
struct { int count; Value** link; Value *n1, *n2, *n3, *n4, *n5, *n6, *n7, *n8, *n9, *n10; } vl =       \
                { 10, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };                                       \
                vl.link = thread_local(current_locals_frame);                                                                                           \
                thread_local(current_locals_frame) = (Value**)&vl;
#define ten_typed_value_locals (   n1,
  n2,
  n3,
  n4,
  n5,
  n6,
  n7,
  n8,
  n9,
  n10 
)
Value:
struct { int count; Value** link; n1; n2; n3; n4; n5; n6; n7; n8; n9; n10; } vl =       \
                { 10, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };       \
                vl.link = thread_local(current_locals_frame);                                                           \
                thread_local(current_locals_frame) = (Value**)&vl;
#define eleven_value_locals (   n1,
  n2,
  n3,
  n4,
  n5,
  n6,
  n7,
  n8,
  n9,
  n10,
  n11 
)
Value:
struct { int count; Value** link; Value *n1, *n2, *n3, *n4, *n5, *n6, *n7, *n8, *n9, *n10, *n11; } vl = \
                { 11, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };                                 \
                vl.link = thread_local(current_locals_frame);                                                                                                   \
                thread_local(current_locals_frame) = (Value**)&vl;
#define eleven_typed_value_locals (   n1,
  n2,
  n3,
  n4,
  n5,
  n6,
  n7,
  n8,
  n9,
  n10,
  n11 
)
Value:
struct { int count; Value** link; n1; n2; n3; n4; n5; n6; n7; n8; n9; n10; n11; } vl =  \
                { 11, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; \
                vl.link = thread_local(current_locals_frame);                                                                   \
                thread_local(current_locals_frame) = (Value**)&vl;
#define value_local_array (   var,
  count 
)
Value:
{                                                               \
        var = &((Value**)_alloca(((count) + 2) * sizeof(Value*)))[2];   \
        memset(var, 0, (count) * sizeof(Value*));                                               \
   var[-2] = (Value*)(static_cast<INT_PTR>(count));            \
        var[-1] = (Value*)thread_local(current_locals_frame);                   \
        thread_local(current_locals_frame) = &var[-2]; }
#define pop_value_local_array (   var )    thread_local(current_locals_frame) = (Value**)var[-1];
#define value_temp_array (   var,
  count 
)
Value:
{                                                       \
        var = &((Value**)ms_malloc(((count) + 2) * sizeof(Value*)))[2]; \
        memset(var, 0, (count) * sizeof(Value*));                                               \
   var[-2] = (Value*)(static_cast<INT_PTR>(count));            \
   var[-1] = (Value*)thread_local(current_locals_frame);       \
   thread_local(current_locals_frame) = &var[-2];}
#define value_temp_array0 (   var )
Value:
{                              \
   var = &((Value**)ms_malloc(2 * sizeof(Value*)))[2];   \
   var[-2] = 0; \
        var[-1] = (Value*)thread_local(current_locals_frame);                   \
        thread_local(current_locals_frame) = &var[-2];}
#define realloc_value_temp_array (   var,
  count,
  old_count 
)
Value:
{                                               \
        Value **oldPointer = &var[-2];                                                                                          \
        Value **sframe = thread_local(current_locals_frame);                                            \
        var = &((Value**)ms_realloc(&var[-2], ((count) + 2) * sizeof(Value*)))[2];              \
        if ((count) > (old_count))                                                                                                      \
                memset(&var[(old_count)], 0, ((count) - (old_count)) * sizeof(Value*)); \
   var[-2] = (Value*)(static_cast<INT_PTR>(count));               \
        Value **newPointer = &var[-2];                                                                                          \
        if (sframe == oldPointer)                                                                                                       \
        {       thread_local(current_locals_frame) = newPointer;                                                \
                DbgAssert( newPointer != (Value**)newPointer[1] );                                              \
        }                                                                                                                                                       \
        else                                                                                                                                            \
        {       Value **frame;                                                                                                                  \
                for (frame = sframe; frame && (Value**)frame[1] != oldPointer && frame != (Value**)frame[1]; frame = (Value**)frame[1]);        \
                if (frame) {                                                                                                                    \
                        DbgAssert( frame != (Value**)frame[1] );                                                        \
                        frame[1] = (Value*)newPointer;                                                                          \
                }                                                                                                                                               \
        }                                                                                                                                                       \
        }
#define pop_value_temp_array (   var )
Value:
{                                                       \
        Value **oldPointer = &var[-2];                                                          \
/*      Value **sframe = thread_local(current_locals_frame); */         \
        Value **head = (Value**)var[-1];                                                        \
        thread_local(current_locals_frame) = head;                                      \
        ms_free(oldPointer);                                                                                    \
        }
#define return_value (   r )    { return templated_return_value_fn(r, vl.link); }
#define return_value_no_pop (   r )    { return templated_return_protected_fn(r); }
#define return_protected (   r )    { return templated_return_protected_fn(r); }
#define pop_value_locals ( )    thread_local(current_locals_frame) = vl.link;
#define reset_locals_frame ( )    thread_local(current_locals_frame) = (Value**)&vl;
#define reset_locals_array_frame (   var )    thread_local(current_locals_frame) = &var[-2];
#define clear_current_frames ( )
Value:
{                                                               \
        thread_local(current_locals_frame) = NULL;                                      \
        thread_local(current_frame) = NULL;}
#define save_current_frames ( )
Value:
Value** _sclf = thread_local(current_locals_frame);                     \
        Value** _scsf = thread_local(current_scan_frame);                       \
        Value** _scf = thread_local(current_frame);
#define restore_current_frames ( )
Value:
{                                                               \
        thread_local(current_locals_frame) = _sclf;                                     \
        thread_local(current_scan_frame) = _scsf;                                       \
        thread_local(current_frame) = _scf;}
#define save_current_source ( )
Value:
Value* _save_source = thread_local(source_file);                        \
        MSZipPackage* _save_pkg = thread_local(current_pkg);            \
        unsigned int  _save_pos = thread_local(source_pos);                     \
        unsigned int _save_line = thread_local(source_line);            \
        DWORD _save_flags = thread_local(source_flags);
#define restore_current_source ( )
Value:
{                                                               \
        thread_local(source_file) = _save_source;                                       \
        thread_local(current_pkg) = _save_pkg;                                          \
        thread_local(source_pos) = _save_pos;                                           \
        thread_local(source_line) = _save_line;                                         \
        thread_local(source_flags) = _save_flags;}
#define save_current_source_no_pos ( )
Value:
Value* _save_source = thread_local(source_file);                        \
        MSZipPackage* _save_pkg = thread_local(current_pkg);            \
        DWORD _save_flags = thread_local(source_flags);
#define restore_current_source_no_pos ( )
Value:
{                                               \
        thread_local(source_file) = _save_source;                                       \
        thread_local(current_pkg) = _save_pkg;                                          \
        thread_local(source_flags) = _save_flags;}
#define save_current_source_pos ( )
Value:
unsigned int  _save_pos = thread_local(source_pos);                     \
        unsigned int _save_line = thread_local(source_line);            \
        DWORD _save_flags = thread_local(source_flags);
#define restore_current_source_pos ( )
Value:
{                                                       \
        thread_local(source_pos) = _save_pos;                                           \
        thread_local(source_line) = _save_line;                                         \
        thread_local(source_flags) = _save_flags;}
#define save_current_source_to_frame ( )
Value:
{                                               \
        Value** _frame = thread_local(current_scan_frame);                      \
        if (_frame) _frame[3] = thread_local(source_file);                      \
        if (_frame) _frame[4] = (Value*)thread_local(source_pos);       \
        if (_frame) _frame[8] = (Value*)thread_local(source_line);  \
        if (_frame) _frame[7] = (Value*)static_cast<DWORD_PTR>(thread_local(source_flags));}
#define save_current_source_to_frame_no_pos ( )
Value:
{                                       \
        Value** _frame = thread_local(current_scan_frame);                      \
        if (_frame) _frame[3] = thread_local(source_file);                      \
        if (_frame) _frame[7] = (Value*)static_cast<DWORD_PTR>(thread_local(source_flags));}
#define save_current_source_to_frame_pos ( )
Value:
{                                       \
        Value** _frame = thread_local(current_scan_frame);                      \
        if (_frame) _frame[4] = (Value*)thread_local(source_pos);       \
        if (_frame) _frame[8] = (Value*)thread_local(source_line);}
#define save_current_source_to_frame_no_file ( )
Value:
{                               \
        Value** _frame = thread_local(current_scan_frame);                      \
        if (_frame) _frame[4] = (Value*)thread_local(source_pos);   \
        if (_frame) _frame[8] = (Value*)thread_local(source_line);}
#define push_control (   _c )
Value:
Control* _save_cc = thread_local(current_controller);           \
        thread_local(current_controller) = _c;
#define pop_control ( )    thread_local(current_controller) = _save_cc;
#define save_error_source_data ( )
Value:
{                                                               \
        thread_local(err_source_file) = thread_local(source_file);      \
        thread_local(err_source_pos) = thread_local(source_pos);        \
        thread_local(err_source_line)= thread_local(source_line);   \
        thread_local(err_source_flags) = thread_local(source_flags);\
        thread_local(err_occurred) = TRUE;}
#define clear_error_source_data ( )
Value:
{                                                               \
        thread_local(err_source_file) = NULL;                                           \
        thread_local(err_source_pos) = 0;                                                       \
        thread_local(err_source_flags) = 0;                                                     \
        thread_local(err_source_line) = 0;                                                      \
        thread_local(err_occurred) = FALSE;}

Function Documentation

Type templated_return_value_fn ( Type  r,
Value **  link 
)
{
        thread_local(current_result) = r;
        thread_local(current_locals_frame) = link;
        return r;
}
Type templated_return_protected_fn ( Type  r )
{
        thread_local(current_result) = r;
        return r;
}