diff --git a/VERSIONS.TXT b/VERSIONS.TXT index b2275143..22649509 100644 --- a/VERSIONS.TXT +++ b/VERSIONS.TXT @@ -1,4 +1,4 @@ -***** v2019-05-04 ***** +***** v2019-05-05 ***** MOD: [ANDROID] Changed MIN_SDK back to 16 like it was before. MOD: [DOCS] Added A-Z shortcuts on top of indexes. diff --git a/src/transcc/transcc.build/cpptool/main.cpp b/src/transcc/transcc.build/cpptool/main.cpp index 001bea73..6a60f86f 100755 --- a/src/transcc/transcc.build/cpptool/main.cpp +++ b/src/transcc/transcc.build/cpptool/main.cpp @@ -1,7 +1,7 @@ #include "main.h" -//${CONFIG_BEGIN} +//${CONFIG_BEGIN} #define CFG_BRL_DATABUFFER_IMPLEMENTED 1 #define CFG_BRL_FILESTREAM_IMPLEMENTED 1 #define CFG_BRL_OS_IMPLEMENTED 1 @@ -10,7 +10,7 @@ #define CFG_CD #define CFG_CONFIG release #define CFG_CPP_DOUBLE_PRECISION_FLOATS 1 -#define CFG_CPP_GC_MODE 0 +#define CFG_CPP_GC_MODE 1 #define CFG_HOST winnt #define CFG_LANG cpp #define CFG_MODPATH @@ -1817,10 +1817,17 @@ class BBGame{ virtual void OpenUrl( String url ); virtual void SetMouseVisible( bool visible ); virtual void SetMousePos( double xpos, double ypos ); + virtual void SetClipboard( String _text ); + virtual String GetClipboard(); virtual int GetDeviceWidth(){ return 0; } virtual int GetDeviceHeight(){ return 0; } virtual void SetDeviceWindow( int width,int height,int flags ){} + virtual void SetDeviceWindowIcon( String _path ){} + virtual void SetDeviceWindowPosition( int _x, int _y ){} + virtual void SetDeviceWindowSize( int _width, int _height ){} + virtual void SetDeviceWindowSizeLimits( int _minWidth, int _minHeight, int _maxWidth, int _maxHeight ){} + virtual void SetDeviceWindowTitle( String _title ){} virtual Array GetDisplayModes(){ return Array(); } virtual BBDisplayMode *GetDesktopMode(){ return 0; } virtual void SetSwapInterval( int interval ){} @@ -1973,6 +1980,13 @@ void BBGame::SetMouseVisible( bool visible ){ void BBGame::SetMousePos( double xpos, double ypos ){ } +void BBGame::SetClipboard( String _text ){ +} + +String BBGame::GetClipboard(){ + return ""; +} + //***** C++ Game ***** String BBGame::PathToFilePath( String path ){ @@ -5993,7 +6007,7 @@ String c_TransCC::p_GetReleaseVersion(){ return String(); } void c_TransCC::p_Run(Array t_args){ - this->m_args=t_args; + gc_assign(this->m_args,t_args); bbPrint(String(L"TRANS cerberus compiler V2019-02-21",35)); m_cerberusdir=RealPath(bb_os_ExtractDir(AppPath())+String(L"/..",3)); SetEnv(String(L"CERBERUSDIR",11),m_cerberusdir); @@ -6015,7 +6029,7 @@ void c_TransCC::p_Run(Array t_args){ bbPrint(String(L"Valid configs: debug release",28)); ExitApp(0); } - m_target=m__targets->p_Get(m_opt_target.Replace(String(L"_",1),String(L" ",1))); + gc_assign(m_target,m__targets->p_Get(m_opt_target.Replace(String(L"_",1),String(L" ",1)))); if(!((m_target)!=0)){ bb_transcc_Die(String(L"Invalid target",14)); } @@ -6033,6 +6047,10 @@ bool c_TransCC::p_Execute(String t_cmd,bool t_failHard){ } void c_TransCC::mark(){ Object::mark(); + gc_mark_q(m_args); + gc_mark_q(m__builders); + gc_mark_q(m__targets); + gc_mark_q(m_target); } String bb_os_ExtractDir(String t_path){ int t_i=t_path.FindLast(String(L"/",1)); @@ -6070,7 +6088,7 @@ c_IdentType* c_Type::m_objectType; c_IdentType* c_Type::m_throwableType; c_ArrayType* c_Type::p_ArrayOf(){ if(!((m_arrayOf)!=0)){ - m_arrayOf=(new c_ArrayType)->m_new(this); + gc_assign(m_arrayOf,(new c_ArrayType)->m_new(this)); } return m_arrayOf; } @@ -6093,6 +6111,7 @@ c_ClassDecl* c_Type::p_GetClass(){ } void c_Type::mark(){ Object::mark(); + gc_mark_q(m_arrayOf); } c_StringType::c_StringType(){ } @@ -6291,6 +6310,7 @@ int c_Decl::p_IsFinal(){ } void c_Decl::mark(){ Object::mark(); + gc_mark_q(m_scope); } c_ScopeDecl::c_ScopeDecl(){ m_decls=(new c_List3)->m_new(); @@ -6309,7 +6329,7 @@ int c_ScopeDecl::p_InsertDecl(c_Decl* t_decl){ if(!((t_ident).Length()!=0)){ return 0; } - t_decl->m_scope=this; + gc_assign(t_decl->m_scope,this); m_decls->p_AddLast3(t_decl); c_StringMap4* t_decls=0; Object* t_tdecl=m_declsMap->p_Get(t_ident); @@ -6599,6 +6619,9 @@ c_ScopeDecl* c_ScopeDecl::p_FindScopeDecl(String t_ident){ } void c_ScopeDecl::mark(){ c_Decl::mark(); + gc_mark_q(m_decls); + gc_mark_q(m_declsMap); + gc_mark_q(m_semanted); } c_ConfigScope::c_ConfigScope(){ m_cdecls=(new c_StringMap)->m_new(); @@ -6616,6 +6639,8 @@ c_ValDecl* c_ConfigScope::p_FindValDecl(String t_ident){ } void c_ConfigScope::mark(){ c_ScopeDecl::mark(); + gc_mark_q(m_cdecls); + gc_mark_q(m_vars); } String bb_config__errInfo; c_ConfigScope* bb_config__cfgScope; @@ -6636,14 +6661,14 @@ String c_ValDecl::p_ToString(){ } int c_ValDecl::p_OnSemant(){ if((m_type)!=0){ - m_type=m_type->p_Semant(); + gc_assign(m_type,m_type->p_Semant()); if((m_init)!=0){ - m_init=m_init->p_Semant2(m_type,0); + gc_assign(m_init,m_init->p_Semant2(m_type,0)); } }else{ if((m_init)!=0){ - m_init=m_init->p_Semant(); - m_type=m_init->m_exprType; + gc_assign(m_init,m_init->p_Semant()); + gc_assign(m_type,m_init->m_exprType); }else{ bb_config_InternalErr(String(L"Internal error",14)); } @@ -6661,6 +6686,8 @@ c_Expr* c_ValDecl::p_CopyInit(){ } void c_ValDecl::mark(){ c_Decl::mark(); + gc_mark_q(m_type); + gc_mark_q(m_init); } c_ConstDecl::c_ConstDecl(){ m_value=String(); @@ -6670,8 +6697,8 @@ c_ConstDecl* c_ConstDecl::m_new(String t_ident,int t_attrs,c_Type* t_type,c_Expr this->m_ident=t_ident; this->m_munged=t_ident; this->m_attrs=t_attrs; - this->m_type=t_type; - this->m_init=t_init; + gc_assign(this->m_type,t_type); + gc_assign(this->m_init,t_init); return this; } c_ConstDecl* c_ConstDecl::m_new2(){ @@ -6722,42 +6749,42 @@ c_ConstDecl* c_Map::p_Get(String t_key){ } int c_Map::p_RotateLeft(c_Node* t_node){ c_Node* t_child=t_node->m_right; - t_node->m_right=t_child->m_left; + gc_assign(t_node->m_right,t_child->m_left); if((t_child->m_left)!=0){ - t_child->m_left->m_parent=t_node; + gc_assign(t_child->m_left->m_parent,t_node); } - t_child->m_parent=t_node->m_parent; + gc_assign(t_child->m_parent,t_node->m_parent); if((t_node->m_parent)!=0){ if(t_node==t_node->m_parent->m_left){ - t_node->m_parent->m_left=t_child; + gc_assign(t_node->m_parent->m_left,t_child); }else{ - t_node->m_parent->m_right=t_child; + gc_assign(t_node->m_parent->m_right,t_child); } }else{ - m_root=t_child; + gc_assign(m_root,t_child); } - t_child->m_left=t_node; - t_node->m_parent=t_child; + gc_assign(t_child->m_left,t_node); + gc_assign(t_node->m_parent,t_child); return 0; } int c_Map::p_RotateRight(c_Node* t_node){ c_Node* t_child=t_node->m_left; - t_node->m_left=t_child->m_right; + gc_assign(t_node->m_left,t_child->m_right); if((t_child->m_right)!=0){ - t_child->m_right->m_parent=t_node; + gc_assign(t_child->m_right->m_parent,t_node); } - t_child->m_parent=t_node->m_parent; + gc_assign(t_child->m_parent,t_node->m_parent); if((t_node->m_parent)!=0){ if(t_node==t_node->m_parent->m_right){ - t_node->m_parent->m_right=t_child; + gc_assign(t_node->m_parent->m_right,t_child); }else{ - t_node->m_parent->m_left=t_child; + gc_assign(t_node->m_parent->m_left,t_child); } }else{ - m_root=t_child; + gc_assign(m_root,t_child); } - t_child->m_right=t_node; - t_node->m_parent=t_child; + gc_assign(t_child->m_right,t_node); + gc_assign(t_node->m_parent,t_child); return 0; } int c_Map::p_InsertFixup(c_Node* t_node){ @@ -6812,7 +6839,7 @@ bool c_Map::p_Set(String t_key,c_ConstDecl* t_value){ if(t_cmp<0){ t_node=t_node->m_left; }else{ - t_node->m_value=t_value; + gc_assign(t_node->m_value,t_value); return false; } } @@ -6820,13 +6847,13 @@ bool c_Map::p_Set(String t_key,c_ConstDecl* t_value){ t_node=(new c_Node)->m_new(t_key,t_value,-1,t_parent); if((t_parent)!=0){ if(t_cmp>0){ - t_parent->m_right=t_node; + gc_assign(t_parent->m_right,t_node); }else{ - t_parent->m_left=t_node; + gc_assign(t_parent->m_left,t_node); } p_InsertFixup(t_node); }else{ - m_root=t_node; + gc_assign(m_root,t_node); } return true; } @@ -6835,6 +6862,7 @@ bool c_Map::p_Contains(String t_key){ } void c_Map::mark(){ Object::mark(); + gc_mark_q(m_root); } c_StringMap::c_StringMap(){ } @@ -6858,9 +6886,9 @@ c_Node::c_Node(){ } c_Node* c_Node::m_new(String t_key,c_ConstDecl* t_value,int t_color,c_Node* t_parent){ this->m_key=t_key; - this->m_value=t_value; + gc_assign(this->m_value,t_value); this->m_color=t_color; - this->m_parent=t_parent; + gc_assign(this->m_parent,t_parent); return this; } c_Node* c_Node::m_new2(){ @@ -6868,6 +6896,10 @@ c_Node* c_Node::m_new2(){ } void c_Node::mark(){ Object::mark(); + gc_mark_q(m_right); + gc_mark_q(m_left); + gc_mark_q(m_value); + gc_mark_q(m_parent); } c_Expr::c_Expr(){ m_exprType=0; @@ -6887,7 +6919,7 @@ Array c_Expr::p_SemantArgs(Array t_args){ t_args=t_args.Slice(0); for(int t_i=0;t_ip_Semant(); + gc_assign(t_args[t_i],t_args[t_i]->p_Semant()); } } return t_args; @@ -6905,10 +6937,10 @@ Array c_Expr::p_CastArgs(Array t_args,c_FuncDecl* t_funcDecl t_args=t_args.Resize(t_funcDecl->m_argDecls.Length()); for(int t_i=0;t_ip_Cast(t_funcDecl->m_argDecls[t_i]->m_type,0); + gc_assign(t_args[t_i],t_args[t_i]->p_Cast(t_funcDecl->m_argDecls[t_i]->m_type,0)); }else{ if((t_funcDecl->m_argDecls[t_i]->m_init)!=0){ - t_args[t_i]=t_funcDecl->m_argDecls[t_i]->m_init; + gc_assign(t_args[t_i],t_funcDecl->m_argDecls[t_i]->m_init); }else{ bb_config_Err(String(L"Missing function argument '",27)+t_funcDecl->m_argDecls[t_i]->m_ident+String(L"'.",2)); } @@ -6942,7 +6974,7 @@ c_Expr* c_Expr::p_CopyExpr(c_Expr* t_expr){ Array c_Expr::p_CopyArgs(Array t_exprs){ t_exprs=t_exprs.Slice(0); for(int t_i=0;t_im_right; - t_node->m_right=t_child->m_left; + gc_assign(t_node->m_right,t_child->m_left); if((t_child->m_left)!=0){ - t_child->m_left->m_parent=t_node; + gc_assign(t_child->m_left->m_parent,t_node); } - t_child->m_parent=t_node->m_parent; + gc_assign(t_child->m_parent,t_node->m_parent); if((t_node->m_parent)!=0){ if(t_node==t_node->m_parent->m_left){ - t_node->m_parent->m_left=t_child; + gc_assign(t_node->m_parent->m_left,t_child); }else{ - t_node->m_parent->m_right=t_child; + gc_assign(t_node->m_parent->m_right,t_child); } }else{ - m_root=t_child; + gc_assign(m_root,t_child); } - t_child->m_left=t_node; - t_node->m_parent=t_child; + gc_assign(t_child->m_left,t_node); + gc_assign(t_node->m_parent,t_child); return 0; } int c_Map2::p_RotateRight2(c_Node2* t_node){ c_Node2* t_child=t_node->m_left; - t_node->m_left=t_child->m_right; + gc_assign(t_node->m_left,t_child->m_right); if((t_child->m_right)!=0){ - t_child->m_right->m_parent=t_node; + gc_assign(t_child->m_right->m_parent,t_node); } - t_child->m_parent=t_node->m_parent; + gc_assign(t_child->m_parent,t_node->m_parent); if((t_node->m_parent)!=0){ if(t_node==t_node->m_parent->m_right){ - t_node->m_parent->m_right=t_child; + gc_assign(t_node->m_parent->m_right,t_child); }else{ - t_node->m_parent->m_left=t_child; + gc_assign(t_node->m_parent->m_left,t_child); } }else{ - m_root=t_child; + gc_assign(m_root,t_child); } - t_child->m_right=t_node; - t_node->m_parent=t_child; + gc_assign(t_child->m_right,t_node); + gc_assign(t_node->m_parent,t_child); return 0; } int c_Map2::p_InsertFixup2(c_Node2* t_node){ @@ -7126,13 +7159,13 @@ bool c_Map2::p_Set2(String t_key,String t_value){ t_node=(new c_Node2)->m_new(t_key,t_value,-1,t_parent); if((t_parent)!=0){ if(t_cmp>0){ - t_parent->m_right=t_node; + gc_assign(t_parent->m_right,t_node); }else{ - t_parent->m_left=t_node; + gc_assign(t_parent->m_left,t_node); } p_InsertFixup2(t_node); }else{ - m_root=t_node; + gc_assign(m_root,t_node); } return true; } @@ -7177,6 +7210,7 @@ c_NodeEnumerator3* c_Map2::p_ObjectEnumerator(){ } void c_Map2::mark(){ Object::mark(); + gc_mark_q(m_root); } c_StringMap2::c_StringMap2(){ } @@ -7202,7 +7236,7 @@ c_Node2* c_Node2::m_new(String t_key,String t_value,int t_color,c_Node2* t_paren this->m_key=t_key; this->m_value=t_value; this->m_color=t_color; - this->m_parent=t_parent; + gc_assign(this->m_parent,t_parent); return this; } c_Node2* c_Node2::m_new2(){ @@ -7233,11 +7267,14 @@ String c_Node2::p_Value(){ } void c_Node2::mark(){ Object::mark(); + gc_mark_q(m_right); + gc_mark_q(m_left); + gc_mark_q(m_parent); } int bb_config_SetConfigVar(String t_key,String t_val,c_Type* t_type){ c_ConstDecl* t_decl=bb_config__cfgScope->m_cdecls->p_Get(t_key); if((t_decl)!=0){ - t_decl->m_type=t_type; + gc_assign(t_decl->m_type,t_type); }else{ t_decl=(new c_ConstDecl)->m_new(t_key,1048576,t_type,0); bb_config__cfgScope->m_cdecls->p_Set(t_key,t_decl); @@ -7265,13 +7302,13 @@ c_Stack* c_Stack::m_new(){ return this; } c_Stack* c_Stack::m_new2(Array t_data){ - this->m_data=t_data.Slice(0); + gc_assign(this->m_data,t_data.Slice(0)); this->m_length=t_data.Length(); return this; } void c_Stack::p_Push(String t_value){ if(m_length==m_data.Length()){ - m_data=m_data.Resize(m_length*2+10); + gc_assign(m_data,m_data.Resize(m_length*2+10)); } m_data[m_length]=t_value; m_length+=1; @@ -7302,7 +7339,7 @@ void c_Stack::p_Length(int t_newlength){ } }else{ if(t_newlength>m_data.Length()){ - m_data=m_data.Resize(bb_math_Max(m_length*2+10,t_newlength)); + gc_assign(m_data,m_data.Resize(bb_math_Max(m_length*2+10,t_newlength))); } } m_length=t_newlength; @@ -7327,6 +7364,7 @@ void c_Stack::p_Clear(){ } void c_Stack::mark(){ Object::mark(); + gc_mark_q(m_data); } c_StringStack::c_StringStack(){ } @@ -7393,7 +7431,7 @@ c_Builder::c_Builder(){ m_dataFiles=(new c_StringMap2)->m_new(); } c_Builder* c_Builder::m_new(c_TransCC* t_tcc){ - this->m_tcc=t_tcc; + gc_assign(this->m_tcc,t_tcc); return this; } c_Builder* c_Builder::m_new2(){ @@ -7439,7 +7477,7 @@ void c_Builder::p_Make(){ bb_config_SetConfigVar2(String(L"TARGET",6),bb_config_ENV_TARGET); bb_config_SetConfigVar2(String(L"CONFIG",6),bb_config_ENV_CONFIG); bb_config_SetConfigVar2(String(L"SAFEMODE",8),String(bb_config_ENV_SAFEMODE)); - m_app=bb_parser_ParseApp(m_tcc->m_opt_srcpath); + gc_assign(m_app,bb_parser_ParseApp(m_tcc->m_opt_srcpath)); bbPrint(String(L"Semanting...",12)); if((bb_config_GetConfigVar(String(L"REFLECTION_FILTER",17))).Length()!=0){ c_Reflector* t_r=(new c_Reflector)->m_new(); @@ -7621,6 +7659,9 @@ bool c_Builder::p_Execute(String t_cmd,bool t_failHard){ } void c_Builder::mark(){ Object::mark(); + gc_mark_q(m_tcc); + gc_mark_q(m_app); + gc_mark_q(m_dataFiles); } c_Map3::c_Map3(){ m_root=0; @@ -7630,42 +7671,42 @@ c_Map3* c_Map3::m_new(){ } int c_Map3::p_RotateLeft3(c_Node3* t_node){ c_Node3* t_child=t_node->m_right; - t_node->m_right=t_child->m_left; + gc_assign(t_node->m_right,t_child->m_left); if((t_child->m_left)!=0){ - t_child->m_left->m_parent=t_node; + gc_assign(t_child->m_left->m_parent,t_node); } - t_child->m_parent=t_node->m_parent; + gc_assign(t_child->m_parent,t_node->m_parent); if((t_node->m_parent)!=0){ if(t_node==t_node->m_parent->m_left){ - t_node->m_parent->m_left=t_child; + gc_assign(t_node->m_parent->m_left,t_child); }else{ - t_node->m_parent->m_right=t_child; + gc_assign(t_node->m_parent->m_right,t_child); } }else{ - m_root=t_child; + gc_assign(m_root,t_child); } - t_child->m_left=t_node; - t_node->m_parent=t_child; + gc_assign(t_child->m_left,t_node); + gc_assign(t_node->m_parent,t_child); return 0; } int c_Map3::p_RotateRight3(c_Node3* t_node){ c_Node3* t_child=t_node->m_left; - t_node->m_left=t_child->m_right; + gc_assign(t_node->m_left,t_child->m_right); if((t_child->m_right)!=0){ - t_child->m_right->m_parent=t_node; + gc_assign(t_child->m_right->m_parent,t_node); } - t_child->m_parent=t_node->m_parent; + gc_assign(t_child->m_parent,t_node->m_parent); if((t_node->m_parent)!=0){ if(t_node==t_node->m_parent->m_right){ - t_node->m_parent->m_right=t_child; + gc_assign(t_node->m_parent->m_right,t_child); }else{ - t_node->m_parent->m_left=t_child; + gc_assign(t_node->m_parent->m_left,t_child); } }else{ - m_root=t_child; + gc_assign(m_root,t_child); } - t_child->m_right=t_node; - t_node->m_parent=t_child; + gc_assign(t_child->m_right,t_node); + gc_assign(t_node->m_parent,t_child); return 0; } int c_Map3::p_InsertFixup3(c_Node3* t_node){ @@ -7720,7 +7761,7 @@ bool c_Map3::p_Set3(String t_key,c_Builder* t_value){ if(t_cmp<0){ t_node=t_node->m_left; }else{ - t_node->m_value=t_value; + gc_assign(t_node->m_value,t_value); return false; } } @@ -7728,13 +7769,13 @@ bool c_Map3::p_Set3(String t_key,c_Builder* t_value){ t_node=(new c_Node3)->m_new(t_key,t_value,-1,t_parent); if((t_parent)!=0){ if(t_cmp>0){ - t_parent->m_right=t_node; + gc_assign(t_parent->m_right,t_node); }else{ - t_parent->m_left=t_node; + gc_assign(t_parent->m_left,t_node); } p_InsertFixup3(t_node); }else{ - m_root=t_node; + gc_assign(m_root,t_node); } return true; } @@ -7776,6 +7817,7 @@ c_Builder* c_Map3::p_Get(String t_key){ } void c_Map3::mark(){ Object::mark(); + gc_mark_q(m_root); } c_StringMap3::c_StringMap3(){ } @@ -7804,7 +7846,7 @@ bool c_AndroidBuilder::p_IsValid(){ } void c_AndroidBuilder::p_Begin(){ bb_config_ENV_LANG=String(L"java",4); - bb_translator__trans=((new c_JavaTranslator)->m_new()); + gc_assign(bb_translator__trans,((new c_JavaTranslator)->m_new())); } bool c_AndroidBuilder::p_CreateDirRecursive(String t_path){ int t_i=0; @@ -8006,9 +8048,9 @@ c_Node3::c_Node3(){ } c_Node3* c_Node3::m_new(String t_key,c_Builder* t_value,int t_color,c_Node3* t_parent){ this->m_key=t_key; - this->m_value=t_value; + gc_assign(this->m_value,t_value); this->m_color=t_color; - this->m_parent=t_parent; + gc_assign(this->m_parent,t_parent); return this; } c_Node3* c_Node3::m_new2(){ @@ -8039,6 +8081,10 @@ String c_Node3::p_Key(){ } void c_Node3::mark(){ Object::mark(); + gc_mark_q(m_right); + gc_mark_q(m_left); + gc_mark_q(m_value); + gc_mark_q(m_parent); } c_AndroidNdkBuilder::c_AndroidNdkBuilder(){ } @@ -8055,7 +8101,7 @@ bool c_AndroidNdkBuilder::p_IsValid(){ } void c_AndroidNdkBuilder::p_Begin(){ bb_config_ENV_LANG=String(L"cpp",3); - bb_translator__trans=((new c_CppTranslator)->m_new()); + gc_assign(bb_translator__trans,((new c_CppTranslator)->m_new())); } String c_AndroidNdkBuilder::p_Config(){ c_StringStack* t_config=(new c_StringStack)->m_new2(); @@ -8215,7 +8261,7 @@ bool c_GlfwBuilder::p_IsValid(){ } void c_GlfwBuilder::p_Begin(){ bb_config_ENV_LANG=String(L"cpp",3); - bb_translator__trans=((new c_CppTranslator)->m_new()); + gc_assign(bb_translator__trans,((new c_CppTranslator)->m_new())); } String c_GlfwBuilder::p_Config(){ c_StringStack* t_config=(new c_StringStack)->m_new2(); @@ -8420,7 +8466,7 @@ bool c_Html5Builder::p_IsValid(){ } void c_Html5Builder::p_Begin(){ bb_config_ENV_LANG=String(L"js",2); - bb_translator__trans=((new c_JsTranslator)->m_new()); + gc_assign(bb_translator__trans,((new c_JsTranslator)->m_new())); } String c_Html5Builder::p_MetaData(){ c_StringStack* t_meta=(new c_StringStack)->m_new2(); @@ -8504,7 +8550,7 @@ bool c_IosBuilder::p_IsValid(){ } void c_IosBuilder::p_Begin(){ bb_config_ENV_LANG=String(L"cpp",3); - bb_translator__trans=((new c_CppTranslator)->m_new()); + gc_assign(bb_translator__trans,((new c_CppTranslator)->m_new())); } String c_IosBuilder::p_Config(){ c_StringStack* t_config=(new c_StringStack)->m_new2(); @@ -8768,6 +8814,8 @@ void c_IosBuilder::p_MakeTarget(){ } void c_IosBuilder::mark(){ c_Builder::mark(); + gc_mark_q(m__buildFiles); + gc_mark_q(m__fileRefs); } c_FlashBuilder::c_FlashBuilder(){ } @@ -8784,7 +8832,7 @@ bool c_FlashBuilder::p_IsValid(){ } void c_FlashBuilder::p_Begin(){ bb_config_ENV_LANG=String(L"as",2); - bb_translator__trans=((new c_AsTranslator)->m_new()); + gc_assign(bb_translator__trans,((new c_AsTranslator)->m_new())); } String c_FlashBuilder::p_Assets(){ c_StringStack* t_assets=(new c_StringStack)->m_new2(); @@ -8876,7 +8924,7 @@ bool c_PsmBuilder::p_IsValid(){ } void c_PsmBuilder::p_Begin(){ bb_config_ENV_LANG=String(L"cs",2); - bb_translator__trans=((new c_CsTranslator)->m_new()); + gc_assign(bb_translator__trans,((new c_CsTranslator)->m_new())); } String c_PsmBuilder::p_Content(){ c_StringStack* t_cont=(new c_StringStack)->m_new2(); @@ -8985,7 +9033,7 @@ bool c_StdcppBuilder::p_IsValid(){ } void c_StdcppBuilder::p_Begin(){ bb_config_ENV_LANG=String(L"cpp",3); - bb_translator__trans=((new c_CppTranslator)->m_new()); + gc_assign(bb_translator__trans,((new c_CppTranslator)->m_new())); } String c_StdcppBuilder::p_Config(){ c_StringStack* t_config=(new c_StringStack)->m_new2(); @@ -9083,7 +9131,7 @@ bool c_WinrtBuilder::p_IsValid(){ } void c_WinrtBuilder::p_Begin(){ bb_config_ENV_LANG=String(L"cpp",3); - bb_translator__trans=((new c_CppTranslator)->m_new()); + gc_assign(bb_translator__trans,((new c_CppTranslator)->m_new())); } String c_WinrtBuilder::p_Content2(bool t_csharp){ c_StringStack* t_cont=(new c_StringStack)->m_new2(); @@ -9156,7 +9204,7 @@ bool c_XnaBuilder::p_IsValid(){ } void c_XnaBuilder::p_Begin(){ bb_config_ENV_LANG=String(L"cs",2); - bb_translator__trans=((new c_CsTranslator)->m_new()); + gc_assign(bb_translator__trans,((new c_CsTranslator)->m_new())); } String c_XnaBuilder::p_Content(){ c_StringStack* t_cont=(new c_StringStack)->m_new2(); @@ -9295,7 +9343,7 @@ bool c_AGKBuilder::p_IsValid(){ } void c_AGKBuilder::p_Begin(){ bb_config_ENV_LANG=String(L"cpp",3); - bb_translator__trans=((new c_CppTranslator)->m_new()); + gc_assign(bb_translator__trans,((new c_CppTranslator)->m_new())); } String c_AGKBuilder::p_Config(){ c_StringStack* t_config=(new c_StringStack)->m_new2(); @@ -9476,7 +9524,7 @@ bool c_AGKBuilder_ios::p_IsValid(){ } void c_AGKBuilder_ios::p_Begin(){ bb_config_ENV_LANG=String(L"cpp",3); - bb_translator__trans=((new c_CppTranslator)->m_new()); + gc_assign(bb_translator__trans,((new c_CppTranslator)->m_new())); } String c_AGKBuilder_ios::p_Config(){ c_StringStack* t_config=(new c_StringStack)->m_new2(); @@ -9640,7 +9688,7 @@ c_NodeEnumerator::c_NodeEnumerator(){ m_node=0; } c_NodeEnumerator* c_NodeEnumerator::m_new(c_Node3* t_node){ - this->m_node=t_node; + gc_assign(this->m_node,t_node); return this; } c_NodeEnumerator* c_NodeEnumerator::m_new2(){ @@ -9651,11 +9699,12 @@ bool c_NodeEnumerator::p_HasNext(){ } c_Node3* c_NodeEnumerator::p_NextObject(){ c_Node3* t_t=m_node; - m_node=m_node->p_NextNode(); + gc_assign(m_node,m_node->p_NextNode()); return t_t; } void c_NodeEnumerator::mark(){ Object::mark(); + gc_mark_q(m_node); } c_List::c_List(){ m__head=((new c_HeadNode)->m_new()); @@ -9753,6 +9802,7 @@ void c_List::p_RemoveLast2(String t_value){ } void c_List::mark(){ Object::mark(); + gc_mark_q(m__head); } c_StringList::c_StringList(){ } @@ -9776,10 +9826,10 @@ c_Node4::c_Node4(){ m__data=String(); } c_Node4* c_Node4::m_new(c_Node4* t_succ,c_Node4* t_pred,String t_data){ - m__succ=t_succ; - m__pred=t_pred; - m__succ->m__pred=this; - m__pred->m__succ=this; + gc_assign(m__succ,t_succ); + gc_assign(m__pred,t_pred); + gc_assign(m__succ->m__pred,this); + gc_assign(m__pred->m__succ,this); m__data=t_data; return this; } @@ -9787,19 +9837,21 @@ c_Node4* c_Node4::m_new2(){ return this; } int c_Node4::p_Remove(){ - m__succ->m__pred=m__pred; - m__pred->m__succ=m__succ; + gc_assign(m__succ->m__pred,m__pred); + gc_assign(m__pred->m__succ,m__succ); return 0; } void c_Node4::mark(){ Object::mark(); + gc_mark_q(m__succ); + gc_mark_q(m__pred); } c_HeadNode::c_HeadNode(){ } c_HeadNode* c_HeadNode::m_new(){ c_Node4::m_new2(); - m__succ=(this); - m__pred=(this); + gc_assign(m__succ,(this)); + gc_assign(m__pred,(this)); return this; } void c_HeadNode::mark(){ @@ -9810,8 +9862,8 @@ c_Enumerator::c_Enumerator(){ m__curr=0; } c_Enumerator* c_Enumerator::m_new(c_List* t_list){ - m__list=t_list; - m__curr=t_list->m__head->m__succ; + gc_assign(m__list,t_list); + gc_assign(m__curr,t_list->m__head->m__succ); return this; } c_Enumerator* c_Enumerator::m_new2(){ @@ -9819,17 +9871,19 @@ c_Enumerator* c_Enumerator::m_new2(){ } bool c_Enumerator::p_HasNext(){ while(m__curr->m__succ->m__pred!=m__curr){ - m__curr=m__curr->m__succ; + gc_assign(m__curr,m__curr->m__succ); } return m__curr!=m__list->m__head; } String c_Enumerator::p_NextObject(){ String t_data=m__curr->m__data; - m__curr=m__curr->m__succ; + gc_assign(m__curr,m__curr->m__succ); return t_data; } void c_Enumerator::mark(){ Object::mark(); + gc_mark_q(m__list); + gc_mark_q(m__curr); } Array bb_os_LoadDir(String t_path,bool t_recursive,bool t_hidden){ c_StringList* t_dirs=(new c_StringList)->m_new2(); @@ -9872,15 +9926,15 @@ c_Stack2* c_Stack2::m_new(){ return this; } c_Stack2* c_Stack2::m_new2(Array t_data){ - this->m_data=t_data.Slice(0); + gc_assign(this->m_data,t_data.Slice(0)); this->m_length=t_data.Length(); return this; } void c_Stack2::p_Push4(c_ConfigScope* t_value){ if(m_length==m_data.Length()){ - m_data=m_data.Resize(m_length*2+10); + gc_assign(m_data,m_data.Resize(m_length*2+10)); } - m_data[m_length]=t_value; + gc_assign(m_data[m_length],t_value); m_length+=1; } void c_Stack2::p_Push5(Array t_values,int t_offset,int t_count){ @@ -9895,16 +9949,17 @@ c_ConfigScope* c_Stack2::m_NIL; c_ConfigScope* c_Stack2::p_Pop(){ m_length-=1; c_ConfigScope* t_v=m_data[m_length]; - m_data[m_length]=m_NIL; + gc_assign(m_data[m_length],m_NIL); return t_v; } void c_Stack2::mark(){ Object::mark(); + gc_mark_q(m_data); } c_Stack2* bb_config__cfgScopeStack; void bb_config_PushConfigScope(){ bb_config__cfgScopeStack->p_Push4(bb_config__cfgScope); - bb_config__cfgScope=(new c_ConfigScope)->m_new(); + gc_assign(bb_config__cfgScope,(new c_ConfigScope)->m_new()); } c_ModuleDecl::c_ModuleDecl(){ m_rmodpath=String(); @@ -10125,6 +10180,9 @@ int c_ModuleDecl::p_OnSemant(){ } void c_ModuleDecl::mark(){ c_ScopeDecl::mark(); + gc_mark_q(m_imported); + gc_mark_q(m_friends); + gc_mark_q(m_pubImported); } c_ScopeDecl* bb_config_GetConfigScope(){ return (bb_config__cfgScope); @@ -10180,6 +10238,7 @@ void c_List2::p_RemoveLast3(c_ScopeDecl* t_value){ } void c_List2::mark(){ Object::mark(); + gc_mark_q(m__head); } c_Node5::c_Node5(){ m__succ=0; @@ -10187,30 +10246,33 @@ c_Node5::c_Node5(){ m__data=0; } c_Node5* c_Node5::m_new(c_Node5* t_succ,c_Node5* t_pred,c_ScopeDecl* t_data){ - m__succ=t_succ; - m__pred=t_pred; - m__succ->m__pred=this; - m__pred->m__succ=this; - m__data=t_data; + gc_assign(m__succ,t_succ); + gc_assign(m__pred,t_pred); + gc_assign(m__succ->m__pred,this); + gc_assign(m__pred->m__succ,this); + gc_assign(m__data,t_data); return this; } c_Node5* c_Node5::m_new2(){ return this; } int c_Node5::p_Remove(){ - m__succ->m__pred=m__pred; - m__pred->m__succ=m__succ; + gc_assign(m__succ->m__pred,m__pred); + gc_assign(m__pred->m__succ,m__succ); return 0; } void c_Node5::mark(){ Object::mark(); + gc_mark_q(m__succ); + gc_mark_q(m__pred); + gc_mark_q(m__data); } c_HeadNode2::c_HeadNode2(){ } c_HeadNode2* c_HeadNode2::m_new(){ c_Node5::m_new2(); - m__succ=(this); - m__pred=(this); + gc_assign(m__succ,(this)); + gc_assign(m__pred,(this)); return this; } void c_HeadNode2::mark(){ @@ -10219,7 +10281,7 @@ void c_HeadNode2::mark(){ c_List2* bb_decl__envStack; int bb_decl_PushEnv(c_ScopeDecl* t_env){ bb_decl__envStack->p_AddLast2(bb_decl__env); - bb_decl__env=t_env; + gc_assign(bb_decl__env,t_env); return 0; } c_Toker::c_Toker(){ @@ -10237,7 +10299,7 @@ int c_Toker::p__init(){ if((m__keywords)!=0){ return 0; } - m__keywords=(new c_StringSet)->m_new(); + gc_assign(m__keywords,(new c_StringSet)->m_new()); Array t_=String(L"void strict public private protected friend property bool int float string array object mod continue exit include import module extern new self super eachin true false null not extends abstract final select case default const local global field method function class and or shl shr end if then else elseif endif while wend repeat until forever for to step next return interface implements inline alias try catch throw throwable enumerate",437).Split(String(L" ",1)); int t_2=0; while(t_2p_Insert(t_t); } - m__symbols=(new c_StringSet)->m_new(); + gc_assign(m__symbols,(new c_StringSet)->m_new()); m__symbols->p_Insert(String(L"..",2)); m__symbols->p_Insert(String(L":=",2)); m__symbols->p_Insert(String(L"*=",2)); @@ -10460,7 +10522,7 @@ c_Set::c_Set(){ m_map=0; } c_Set* c_Set::m_new(c_Map4* t_map){ - this->m_map=t_map; + gc_assign(this->m_map,t_map); return this; } c_Set* c_Set::m_new2(){ @@ -10475,6 +10537,7 @@ bool c_Set::p_Contains(String t_value){ } void c_Set::mark(){ Object::mark(); + gc_mark_q(m_map); } c_StringSet::c_StringSet(){ } @@ -10493,42 +10556,42 @@ c_Map4* c_Map4::m_new(){ } int c_Map4::p_RotateLeft4(c_Node6* t_node){ c_Node6* t_child=t_node->m_right; - t_node->m_right=t_child->m_left; + gc_assign(t_node->m_right,t_child->m_left); if((t_child->m_left)!=0){ - t_child->m_left->m_parent=t_node; + gc_assign(t_child->m_left->m_parent,t_node); } - t_child->m_parent=t_node->m_parent; + gc_assign(t_child->m_parent,t_node->m_parent); if((t_node->m_parent)!=0){ if(t_node==t_node->m_parent->m_left){ - t_node->m_parent->m_left=t_child; + gc_assign(t_node->m_parent->m_left,t_child); }else{ - t_node->m_parent->m_right=t_child; + gc_assign(t_node->m_parent->m_right,t_child); } }else{ - m_root=t_child; + gc_assign(m_root,t_child); } - t_child->m_left=t_node; - t_node->m_parent=t_child; + gc_assign(t_child->m_left,t_node); + gc_assign(t_node->m_parent,t_child); return 0; } int c_Map4::p_RotateRight4(c_Node6* t_node){ c_Node6* t_child=t_node->m_left; - t_node->m_left=t_child->m_right; + gc_assign(t_node->m_left,t_child->m_right); if((t_child->m_right)!=0){ - t_child->m_right->m_parent=t_node; + gc_assign(t_child->m_right->m_parent,t_node); } - t_child->m_parent=t_node->m_parent; + gc_assign(t_child->m_parent,t_node->m_parent); if((t_node->m_parent)!=0){ if(t_node==t_node->m_parent->m_right){ - t_node->m_parent->m_right=t_child; + gc_assign(t_node->m_parent->m_right,t_child); }else{ - t_node->m_parent->m_left=t_child; + gc_assign(t_node->m_parent->m_left,t_child); } }else{ - m_root=t_child; + gc_assign(m_root,t_child); } - t_child->m_right=t_node; - t_node->m_parent=t_child; + gc_assign(t_child->m_right,t_node); + gc_assign(t_node->m_parent,t_child); return 0; } int c_Map4::p_InsertFixup4(c_Node6* t_node){ @@ -10583,7 +10646,7 @@ bool c_Map4::p_Set4(String t_key,Object* t_value){ if(t_cmp<0){ t_node=t_node->m_left; }else{ - t_node->m_value=t_value; + gc_assign(t_node->m_value,t_value); return false; } } @@ -10591,13 +10654,13 @@ bool c_Map4::p_Set4(String t_key,Object* t_value){ t_node=(new c_Node6)->m_new(t_key,t_value,-1,t_parent); if((t_parent)!=0){ if(t_cmp>0){ - t_parent->m_right=t_node; + gc_assign(t_parent->m_right,t_node); }else{ - t_parent->m_left=t_node; + gc_assign(t_parent->m_left,t_node); } p_InsertFixup4(t_node); }else{ - m_root=t_node; + gc_assign(m_root,t_node); } return true; } @@ -10632,6 +10695,7 @@ Object* c_Map4::p_Get(String t_key){ } void c_Map4::mark(){ Object::mark(); + gc_mark_q(m_root); } c_StringMap4::c_StringMap4(){ } @@ -10655,9 +10719,9 @@ c_Node6::c_Node6(){ } c_Node6* c_Node6::m_new(String t_key,Object* t_value,int t_color,c_Node6* t_parent){ this->m_key=t_key; - this->m_value=t_value; + gc_assign(this->m_value,t_value); this->m_color=t_color; - this->m_parent=t_parent; + gc_assign(this->m_parent,t_parent); return this; } c_Node6* c_Node6::m_new2(){ @@ -10665,6 +10729,10 @@ c_Node6* c_Node6::m_new2(){ } void c_Node6::mark(){ Object::mark(); + gc_mark_q(m_right); + gc_mark_q(m_left); + gc_mark_q(m_value); + gc_mark_q(m_parent); } int bb_config_IsSpace(int t_ch){ return ((t_ch<=32)?1:0); @@ -10723,10 +10791,10 @@ c_AppDecl::c_AppDecl(){ m_mainFunc=0; } int c_AppDecl::p_InsertModule(c_ModuleDecl* t_mdecl){ - t_mdecl->m_scope=(this); + gc_assign(t_mdecl->m_scope,(this)); m_imported->p_Insert3(t_mdecl->m_filepath,t_mdecl); if(!((m_mainModule)!=0)){ - m_mainModule=t_mdecl; + gc_assign(m_mainModule,t_mdecl); } return 0; } @@ -10756,7 +10824,7 @@ int c_AppDecl::p_FinalizeClasses(){ } int c_AppDecl::p_OnSemant(){ bb_decl__env=0; - m_mainFunc=m_mainModule->p_FindFuncDecl(String(L"Main",4),Array(),0); + gc_assign(m_mainFunc,m_mainModule->p_FindFuncDecl(String(L"Main",4),Array(),0)); if(!((m_mainFunc)!=0)){ bb_config_Err(String(L"Function 'Main' not found.",26)); } @@ -10768,6 +10836,13 @@ int c_AppDecl::p_OnSemant(){ } void c_AppDecl::mark(){ c_ScopeDecl::mark(); + gc_mark_q(m_imported); + gc_mark_q(m_mainModule); + gc_mark_q(m_fileImports); + gc_mark_q(m_allSemantedDecls); + gc_mark_q(m_semantedGlobals); + gc_mark_q(m_semantedClasses); + gc_mark_q(m_mainFunc); } c_Map5::c_Map5(){ m_root=0; @@ -10803,42 +10878,42 @@ bool c_Map5::p_Contains(String t_key){ } int c_Map5::p_RotateLeft5(c_Node7* t_node){ c_Node7* t_child=t_node->m_right; - t_node->m_right=t_child->m_left; + gc_assign(t_node->m_right,t_child->m_left); if((t_child->m_left)!=0){ - t_child->m_left->m_parent=t_node; + gc_assign(t_child->m_left->m_parent,t_node); } - t_child->m_parent=t_node->m_parent; + gc_assign(t_child->m_parent,t_node->m_parent); if((t_node->m_parent)!=0){ if(t_node==t_node->m_parent->m_left){ - t_node->m_parent->m_left=t_child; + gc_assign(t_node->m_parent->m_left,t_child); }else{ - t_node->m_parent->m_right=t_child; + gc_assign(t_node->m_parent->m_right,t_child); } }else{ - m_root=t_child; + gc_assign(m_root,t_child); } - t_child->m_left=t_node; - t_node->m_parent=t_child; + gc_assign(t_child->m_left,t_node); + gc_assign(t_node->m_parent,t_child); return 0; } int c_Map5::p_RotateRight5(c_Node7* t_node){ c_Node7* t_child=t_node->m_left; - t_node->m_left=t_child->m_right; + gc_assign(t_node->m_left,t_child->m_right); if((t_child->m_right)!=0){ - t_child->m_right->m_parent=t_node; + gc_assign(t_child->m_right->m_parent,t_node); } - t_child->m_parent=t_node->m_parent; + gc_assign(t_child->m_parent,t_node->m_parent); if((t_node->m_parent)!=0){ if(t_node==t_node->m_parent->m_right){ - t_node->m_parent->m_right=t_child; + gc_assign(t_node->m_parent->m_right,t_child); }else{ - t_node->m_parent->m_left=t_child; + gc_assign(t_node->m_parent->m_left,t_child); } }else{ - m_root=t_child; + gc_assign(m_root,t_child); } - t_child->m_right=t_node; - t_node->m_parent=t_child; + gc_assign(t_child->m_right,t_node); + gc_assign(t_node->m_parent,t_child); return 0; } int c_Map5::p_InsertFixup5(c_Node7* t_node){ @@ -10893,7 +10968,7 @@ bool c_Map5::p_Set5(String t_key,c_ModuleDecl* t_value){ if(t_cmp<0){ t_node=t_node->m_left; }else{ - t_node->m_value=t_value; + gc_assign(t_node->m_value,t_value); return false; } } @@ -10901,13 +10976,13 @@ bool c_Map5::p_Set5(String t_key,c_ModuleDecl* t_value){ t_node=(new c_Node7)->m_new(t_key,t_value,-1,t_parent); if((t_parent)!=0){ if(t_cmp>0){ - t_parent->m_right=t_node; + gc_assign(t_parent->m_right,t_node); }else{ - t_parent->m_left=t_node; + gc_assign(t_parent->m_left,t_node); } p_InsertFixup5(t_node); }else{ - m_root=t_node; + gc_assign(m_root,t_node); } return true; } @@ -10929,6 +11004,7 @@ c_Node7* c_Map5::p_FirstNode(){ } void c_Map5::mark(){ Object::mark(); + gc_mark_q(m_root); } c_StringMap5::c_StringMap5(){ } @@ -10952,9 +11028,9 @@ c_Node7::c_Node7(){ } c_Node7* c_Node7::m_new(String t_key,c_ModuleDecl* t_value,int t_color,c_Node7* t_parent){ this->m_key=t_key; - this->m_value=t_value; + gc_assign(this->m_value,t_value); this->m_color=t_color; - this->m_parent=t_parent; + gc_assign(this->m_parent,t_parent); return this; } c_Node7* c_Node7::m_new2(){ @@ -10979,6 +11055,10 @@ c_Node7* c_Node7::p_NextNode(){ } void c_Node7::mark(){ Object::mark(); + gc_mark_q(m_right); + gc_mark_q(m_left); + gc_mark_q(m_value); + gc_mark_q(m_parent); } c_Parser::c_Parser(){ m__toke=String(); @@ -11034,9 +11114,9 @@ String c_Parser::p_NextToke(){ } c_Parser* c_Parser::m_new(c_Toker* t_toker,c_AppDecl* t_app,c_ModuleDecl* t_mdecl,int t_defattrs){ m__toke=String(L"\n",1); - m__toker=t_toker; - m__app=t_app; - m__module=t_mdecl; + gc_assign(m__toker,t_toker); + gc_assign(m__app,t_app); + gc_assign(m__module,t_mdecl); m__defattrs=t_defattrs; p_SetErr(); p_NextToke(); @@ -11270,7 +11350,7 @@ Array c_Parser::p_ParseArgs2(int t_stmt){ if(t_args.Length()==t_nargs){ t_args=t_args.Resize(t_nargs+10); } - t_args[t_nargs]=t_arg; + gc_assign(t_args[t_nargs],t_arg); t_nargs+=1; }while(!(!((p_CParse(String(L",",1)))!=0))); t_args=t_args.Slice(0,t_nargs); @@ -11398,7 +11478,7 @@ c_Expr* c_Parser::p_ParsePrimaryExpr(int t_stmt){ if((t_ty3)!=0){ t_expr=((new c_IdentTypeExpr)->m_new(t_ty3)); }else{ - m__toker=t_toker; + gc_assign(m__toker,t_toker); m__toke=m__toker->p_Toke(); m__tokeType=m__toker->p_TokeType(); t_expr=((new c_IdentExpr)->m_new(p_ParseIdent(),0)); @@ -11708,7 +11788,7 @@ c_List3* c_Parser::p_ParseEnum(String t_toke,int t_attrs){ int c_Parser::p_PushBlock(c_BlockDecl* t_block){ m__blockStack->p_AddLast7(m__block); m__errStack->p_AddLast(bb_config__errInfo); - m__block=t_block; + gc_assign(m__block,t_block); return 0; } int c_Parser::p_ParseDeclStmts(){ @@ -11740,7 +11820,7 @@ int c_Parser::p_ParseContinueStmt(){ return 0; } int c_Parser::p_PopBlock(){ - m__block=m__blockStack->p_RemoveLast(); + gc_assign(m__block,m__blockStack->p_RemoveLast()); bb_config__errInfo=m__errStack->p_RemoveLast(); return 0; } @@ -12195,7 +12275,7 @@ c_FuncDecl* c_Parser::p_ParseFuncDecl(int t_attrs){ if((p_CParse(String(L"=",1)))!=0){ t_funcDecl->m_munged=p_ParseStringLit(); if(t_funcDecl->m_munged==String(L"$resize",7)){ - t_funcDecl->m_retType=(c_Type::m_emptyArrayType); + gc_assign(t_funcDecl->m_retType,(c_Type::m_emptyArrayType)); } } } @@ -12512,6 +12592,12 @@ int c_Parser::p_ParseMain(){ } void c_Parser::mark(){ Object::mark(); + gc_mark_q(m__toker); + gc_mark_q(m__app); + gc_mark_q(m__module); + gc_mark_q(m__block); + gc_mark_q(m__blockStack); + gc_mark_q(m__errStack); } int bb_config_InternalErr(String t_err){ bbPrint(bb_config__errInfo+String(L" : ",3)+t_err); @@ -12789,7 +12875,7 @@ c_AliasDecl* c_AliasDecl::m_new(String t_ident,int t_attrs,Object* t_decl){ c_Decl::m_new(); this->m_ident=t_ident; this->m_attrs=t_attrs; - this->m_decl=t_decl; + gc_assign(this->m_decl,t_decl); return this; } c_AliasDecl* c_AliasDecl::m_new2(){ @@ -12804,6 +12890,7 @@ int c_AliasDecl::p_OnSemant(){ } void c_AliasDecl::mark(){ c_Decl::mark(); + gc_mark_q(m_decl); } c_List3::c_List3(){ m__head=((new c_HeadNode3)->m_new()); @@ -12838,6 +12925,7 @@ int c_List3::p_Count(){ } void c_List3::mark(){ Object::mark(); + gc_mark_q(m__head); } c_Node8::c_Node8(){ m__succ=0; @@ -12845,11 +12933,11 @@ c_Node8::c_Node8(){ m__data=0; } c_Node8* c_Node8::m_new(c_Node8* t_succ,c_Node8* t_pred,c_Decl* t_data){ - m__succ=t_succ; - m__pred=t_pred; - m__succ->m__pred=this; - m__pred->m__succ=this; - m__data=t_data; + gc_assign(m__succ,t_succ); + gc_assign(m__pred,t_pred); + gc_assign(m__succ->m__pred,this); + gc_assign(m__pred->m__succ,this); + gc_assign(m__data,t_data); return this; } c_Node8* c_Node8::m_new2(){ @@ -12857,13 +12945,16 @@ c_Node8* c_Node8::m_new2(){ } void c_Node8::mark(){ Object::mark(); + gc_mark_q(m__succ); + gc_mark_q(m__pred); + gc_mark_q(m__data); } c_HeadNode3::c_HeadNode3(){ } c_HeadNode3* c_HeadNode3::m_new(){ c_Node8::m_new2(); - m__succ=(this); - m__pred=(this); + gc_assign(m__succ,(this)); + gc_assign(m__pred,(this)); return this; } void c_HeadNode3::mark(){ @@ -12878,7 +12969,7 @@ int c_BlockDecl::p_AddStmt(c_Stmt* t_stmt){ } c_BlockDecl* c_BlockDecl::m_new(c_ScopeDecl* t_scope){ c_ScopeDecl::m_new(); - this->m_scope=t_scope; + gc_assign(this->m_scope,t_scope); return this; } c_BlockDecl* c_BlockDecl::m_new2(){ @@ -12906,11 +12997,12 @@ int c_BlockDecl::p_OnSemant(){ } c_BlockDecl* c_BlockDecl::p_CopyBlock(c_ScopeDecl* t_scope){ c_BlockDecl* t_t=dynamic_cast(p_Copy()); - t_t->m_scope=t_scope; + gc_assign(t_t->m_scope,t_scope); return t_t; } void c_BlockDecl::mark(){ c_ScopeDecl::mark(); + gc_mark_q(m_stmts); } c_FuncDecl::c_FuncDecl(){ m_retType=0; @@ -12924,8 +13016,8 @@ c_FuncDecl* c_FuncDecl::m_new(String t_ident,int t_attrs,c_Type* t_retType,Array c_BlockDecl::m_new2(); this->m_ident=t_ident; this->m_attrs=t_attrs; - this->m_retType=t_retType; - this->m_argDecls=t_argDecls; + gc_assign(this->m_retType,t_retType); + gc_assign(this->m_argDecls,t_argDecls); return this; } c_FuncDecl* c_FuncDecl::m_new2(){ @@ -12978,7 +13070,7 @@ bool c_FuncDecl::p_EqualsFunc(c_FuncDecl* t_decl){ c_Decl* c_FuncDecl::p_OnCopy(){ Array t_args=m_argDecls.Slice(0); for(int t_i=0;t_i(t_args[t_i]->p_Copy()); + gc_assign(t_args[t_i],dynamic_cast(t_args[t_i]->p_Copy())); } c_FuncDecl* t_t=(new c_FuncDecl)->m_new(m_ident,m_attrs,m_retType,t_args); c_Enumerator5* t_=m_stmts->p_ObjectEnumerator(); @@ -12995,9 +13087,9 @@ int c_FuncDecl::p_OnSemant(){ t_sclass=t_cdecl->m_superClass; } if(p_IsCtor()){ - m_retType=(t_cdecl->m_objectType); + gc_assign(m_retType,(t_cdecl->m_objectType)); }else{ - m_retType=m_retType->p_Semant(); + gc_assign(m_retType,m_retType->p_Semant()); } Array t_=m_argDecls; int t_2=0; @@ -13029,7 +13121,7 @@ int c_FuncDecl::p_OnSemant(){ t_found=1; t_decl2->p_Semant(); if(p_EqualsFunc(t_decl2)){ - m_overrides=t_decl2; + gc_assign(m_overrides,t_decl2); t_decl2->m_attrs|=16; break; } @@ -13067,6 +13159,9 @@ bool c_FuncDecl::p_IsVirtual(){ } void c_FuncDecl::mark(){ c_BlockDecl::mark(); + gc_mark_q(m_retType); + gc_mark_q(m_argDecls); + gc_mark_q(m_overrides); } c_List4::c_List4(){ m__head=((new c_HeadNode4)->m_new()); @@ -13092,6 +13187,7 @@ c_Enumerator3* c_List4::p_ObjectEnumerator(){ } void c_List4::mark(){ Object::mark(); + gc_mark_q(m__head); } c_FuncDeclList::c_FuncDeclList(){ } @@ -13108,11 +13204,11 @@ c_Node9::c_Node9(){ m__data=0; } c_Node9* c_Node9::m_new(c_Node9* t_succ,c_Node9* t_pred,c_FuncDecl* t_data){ - m__succ=t_succ; - m__pred=t_pred; - m__succ->m__pred=this; - m__pred->m__succ=this; - m__data=t_data; + gc_assign(m__succ,t_succ); + gc_assign(m__pred,t_pred); + gc_assign(m__succ->m__pred,this); + gc_assign(m__pred->m__succ,this); + gc_assign(m__data,t_data); return this; } c_Node9* c_Node9::m_new2(){ @@ -13120,13 +13216,16 @@ c_Node9* c_Node9::m_new2(){ } void c_Node9::mark(){ Object::mark(); + gc_mark_q(m__succ); + gc_mark_q(m__pred); + gc_mark_q(m__data); } c_HeadNode4::c_HeadNode4(){ } c_HeadNode4* c_HeadNode4::m_new(){ c_Node9::m_new2(); - m__succ=(this); - m__pred=(this); + gc_assign(m__succ,(this)); + gc_assign(m__pred,(this)); return this; } void c_HeadNode4::mark(){ @@ -13148,12 +13247,12 @@ c_ClassDecl* c_ClassDecl::m_new(String t_ident,int t_attrs,Array t_args c_ScopeDecl::m_new(); this->m_ident=t_ident; this->m_attrs=t_attrs; - this->m_args=t_args; - this->m_superTy=t_superTy; - this->m_impltys=t_impls; - this->m_objectType=(new c_ObjectType)->m_new(this); + gc_assign(this->m_args,t_args); + gc_assign(this->m_superTy,t_superTy); + gc_assign(this->m_impltys,t_impls); + gc_assign(this->m_objectType,(new c_ObjectType)->m_new(this)); if((t_args).Length()!=0){ - m_instances=(new c_List6)->m_new(); + gc_assign(m_instances,(new c_List6)->m_new()); } return this; } @@ -13275,9 +13374,9 @@ c_ClassDecl* c_ClassDecl::p_GenClassInstance(Array t_instArgs){ t_inst3->m_attrs&=-1048577; t_inst3->m_munged=m_munged; t_inst3->m_errInfo=m_errInfo; - t_inst3->m_scope=m_scope; - t_inst3->m_instanceof=this; - t_inst3->m_instArgs=t_instArgs; + gc_assign(t_inst3->m_scope,m_scope); + gc_assign(t_inst3->m_instanceof,this); + gc_assign(t_inst3->m_instArgs,t_instArgs); m_instances->p_AddLast6(t_inst3); for(int t_i2=0;t_i2p_InsertDecl((new c_AliasDecl)->m_new(m_args[t_i2],0,(t_instArgs[t_i2]))); @@ -13514,7 +13613,7 @@ int c_ClassDecl::p_OnSemant(){ } bb_decl_PushEnv(this); if((m_superTy)!=0){ - m_superClass=m_superTy->p_SemantClass(); + gc_assign(m_superClass,m_superTy->p_SemantClass()); if((m_superClass->p_IsFinal())!=0){ bb_config_Err(String(L"Cannot extend final class.",26)); } @@ -13544,7 +13643,7 @@ int c_ClassDecl::p_OnSemant(){ bb_config_Err(String(L"Duplicate interface ",20)+t_cdecl->p_ToString()+String(L".",1)); } } - t_impls[t_i]=t_cdecl; + gc_assign(t_impls[t_i],t_cdecl); t_implsall->p_Push22(t_cdecl); Array t_=t_cdecl->m_implmentsAll; int t_2=0; @@ -13554,11 +13653,11 @@ int c_ClassDecl::p_OnSemant(){ t_implsall->p_Push22(t_tdecl); } } - m_implmentsAll=Array(t_implsall->p_Length2()); + gc_assign(m_implmentsAll,Array(t_implsall->p_Length2())); for(int t_i2=0;t_i2p_Length2();t_i2=t_i2+1){ - m_implmentsAll[t_i2]=t_implsall->p_Get2(t_i2); + gc_assign(m_implmentsAll[t_i2],t_implsall->p_Get2(t_i2)); } - m_implments=t_impls; + gc_assign(m_implments,t_impls); bb_decl_PopEnv(); if(!((p_IsAbstract())!=0)){ c_Enumerator2* t_3=m_decls->p_ObjectEnumerator(); @@ -13630,12 +13729,22 @@ int c_ClassDecl::p_ExtendsClass(c_ClassDecl* t_cdecl){ } void c_ClassDecl::mark(){ c_ScopeDecl::mark(); + gc_mark_q(m_superClass); + gc_mark_q(m_args); + gc_mark_q(m_superTy); + gc_mark_q(m_impltys); + gc_mark_q(m_objectType); + gc_mark_q(m_instances); + gc_mark_q(m_instanceof); + gc_mark_q(m_instArgs); + gc_mark_q(m_implmentsAll); + gc_mark_q(m_implments); } int bb_decl_PopEnv(){ if(bb_decl__envStack->p_IsEmpty()){ bb_config_InternalErr(String(L"Internal error",14)); } - bb_decl__env=bb_decl__envStack->p_RemoveLast(); + gc_assign(bb_decl__env,bb_decl__envStack->p_RemoveLast()); return 0; } c_VoidType::c_VoidType(){ @@ -13660,7 +13769,7 @@ c_IdentType::c_IdentType(){ c_IdentType* c_IdentType::m_new(String t_ident,Array t_args){ c_Type::m_new(); this->m_ident=t_ident; - this->m_args=t_args; + gc_assign(this->m_args,t_args); return this; } c_IdentType* c_IdentType::m_new2(){ @@ -13673,7 +13782,7 @@ c_Type* c_IdentType::p_Semant(){ } Array t_targs=Array(m_args.Length()); for(int t_i=0;t_ip_Semant(); + gc_assign(t_targs[t_i],m_args[t_i]->p_Semant()); } String t_tyid=String(); c_Type* t_type=0; @@ -13729,6 +13838,7 @@ String c_IdentType::p_ToString(){ } void c_IdentType::mark(){ c_Type::mark(); + gc_mark_q(m_args); } c_Stack3::c_Stack3(){ m_data=Array(); @@ -13738,15 +13848,15 @@ c_Stack3* c_Stack3::m_new(){ return this; } c_Stack3* c_Stack3::m_new2(Array t_data){ - this->m_data=t_data.Slice(0); + gc_assign(this->m_data,t_data.Slice(0)); this->m_length=t_data.Length(); return this; } void c_Stack3::p_Push7(c_Type* t_value){ if(m_length==m_data.Length()){ - m_data=m_data.Resize(m_length*2+10); + gc_assign(m_data,m_data.Resize(m_length*2+10)); } - m_data[m_length]=t_value; + gc_assign(m_data[m_length],t_value); m_length+=1; } void c_Stack3::p_Push8(Array t_values,int t_offset,int t_count){ @@ -13760,19 +13870,20 @@ void c_Stack3::p_Push9(Array t_values,int t_offset){ Array c_Stack3::p_ToArray(){ Array t_t=Array(m_length); for(int t_i=0;t_im_elemType=t_elemType; + gc_assign(this->m_elemType,t_elemType); return this; } c_ArrayType* c_ArrayType::m_new2(){ @@ -13802,6 +13913,7 @@ String c_ArrayType::p_ToString(){ } void c_ArrayType::mark(){ c_Type::mark(); + gc_mark_q(m_elemType); } c_UnaryExpr::c_UnaryExpr(){ m_op=String(); @@ -13810,7 +13922,7 @@ c_UnaryExpr::c_UnaryExpr(){ c_UnaryExpr* c_UnaryExpr::m_new(String t_op,c_Expr* t_expr){ c_Expr::m_new(); this->m_op=t_op; - this->m_expr=t_expr; + gc_assign(this->m_expr,t_expr); return this; } c_UnaryExpr* c_UnaryExpr::m_new2(){ @@ -13826,19 +13938,19 @@ c_Expr* c_UnaryExpr::p_Semant(){ } String t_1=m_op; if(t_1==String(L"+",1) || t_1==String(L"-",1)){ - m_expr=m_expr->p_Semant(); + gc_assign(m_expr,m_expr->p_Semant()); if(!((dynamic_cast(m_expr->m_exprType))!=0)){ bb_config_Err(m_expr->p_ToString()+String(L" must be numeric for use with unary operator '",46)+m_op+String(L"'",1)); } - m_exprType=m_expr->m_exprType; + gc_assign(m_exprType,m_expr->m_exprType); }else{ if(t_1==String(L"~",1)){ - m_expr=m_expr->p_Semant2((c_Type::m_intType),0); - m_exprType=(c_Type::m_intType); + gc_assign(m_expr,m_expr->p_Semant2((c_Type::m_intType),0)); + gc_assign(m_exprType,(c_Type::m_intType)); }else{ if(t_1==String(L"not",3)){ - m_expr=m_expr->p_Semant2((c_Type::m_boolType),1); - m_exprType=(c_Type::m_boolType); + gc_assign(m_expr,m_expr->p_Semant2((c_Type::m_boolType),1)); + gc_assign(m_exprType,(c_Type::m_boolType)); }else{ bb_config_InternalErr(String(L"Internal error",14)); } @@ -13881,13 +13993,14 @@ String c_UnaryExpr::p_Trans(){ } void c_UnaryExpr::mark(){ c_Expr::mark(); + gc_mark_q(m_expr); } c_ArrayExpr::c_ArrayExpr(){ m_exprs=Array(); } c_ArrayExpr* c_ArrayExpr::m_new(Array t_exprs){ c_Expr::m_new(); - this->m_exprs=t_exprs; + gc_assign(this->m_exprs,t_exprs); return this; } c_ArrayExpr* c_ArrayExpr::m_new2(){ @@ -13901,16 +14014,16 @@ c_Expr* c_ArrayExpr::p_Semant(){ if((m_exprType)!=0){ return (this); } - m_exprs[0]=m_exprs[0]->p_Semant(); + gc_assign(m_exprs[0],m_exprs[0]->p_Semant()); c_Type* t_ty=m_exprs[0]->m_exprType; for(int t_i=1;t_ip_Semant(); + gc_assign(m_exprs[t_i],m_exprs[t_i]->p_Semant()); t_ty=p_BalanceTypes(t_ty,m_exprs[t_i]->m_exprType); } for(int t_i2=0;t_i2p_Cast(t_ty,0); + gc_assign(m_exprs[t_i2],m_exprs[t_i2]->p_Cast(t_ty,0)); } - m_exprType=(t_ty->p_ArrayOf()); + gc_assign(m_exprType,(t_ty->p_ArrayOf())); return (this); } String c_ArrayExpr::p_Trans(){ @@ -13918,6 +14031,7 @@ String c_ArrayExpr::p_Trans(){ } void c_ArrayExpr::mark(){ c_Expr::mark(); + gc_mark_q(m_exprs); } c_Stack4::c_Stack4(){ m_data=Array(); @@ -13927,15 +14041,15 @@ c_Stack4* c_Stack4::m_new(){ return this; } c_Stack4* c_Stack4::m_new2(Array t_data){ - this->m_data=t_data.Slice(0); + gc_assign(this->m_data,t_data.Slice(0)); this->m_length=t_data.Length(); return this; } void c_Stack4::p_Push10(c_Expr* t_value){ if(m_length==m_data.Length()){ - m_data=m_data.Resize(m_length*2+10); + gc_assign(m_data,m_data.Resize(m_length*2+10)); } - m_data[m_length]=t_value; + gc_assign(m_data[m_length],t_value); m_length+=1; } void c_Stack4::p_Push11(Array t_values,int t_offset,int t_count){ @@ -13949,12 +14063,13 @@ void c_Stack4::p_Push12(Array t_values,int t_offset){ Array c_Stack4::p_ToArray(){ Array t_t=Array(m_length); for(int t_i=0;t_im_ty=t_ty; + gc_assign(this->m_ty,t_ty); this->m_value=t_value; return this; } @@ -14002,7 +14117,7 @@ c_Expr* c_ConstExpr::p_Semant(){ if((m_exprType)!=0){ return (this); } - m_exprType=m_ty->p_Semant(); + gc_assign(m_exprType,m_ty->p_Semant()); return (this); } c_Expr* c_ConstExpr::p_Copy(){ @@ -14025,13 +14140,14 @@ String c_ConstExpr::p_Trans(){ } void c_ConstExpr::mark(){ c_Expr::mark(); + gc_mark_q(m_ty); } c_ScopeExpr::c_ScopeExpr(){ m_scope=0; } c_ScopeExpr* c_ScopeExpr::m_new(c_ScopeDecl* t_scope){ c_Expr::m_new(); - this->m_scope=t_scope; + gc_assign(this->m_scope,t_scope); return this; } c_ScopeExpr* c_ScopeExpr::m_new2(){ @@ -14054,6 +14170,7 @@ c_ScopeDecl* c_ScopeExpr::p_SemantScope(){ } void c_ScopeExpr::mark(){ c_Expr::mark(); + gc_mark_q(m_scope); } c_NewArrayExpr::c_NewArrayExpr(){ m_ty=0; @@ -14061,8 +14178,8 @@ c_NewArrayExpr::c_NewArrayExpr(){ } c_NewArrayExpr* c_NewArrayExpr::m_new(c_Type* t_ty,c_Expr* t_expr){ c_Expr::m_new(); - this->m_ty=t_ty; - this->m_expr=t_expr; + gc_assign(this->m_ty,t_ty); + gc_assign(this->m_expr,t_expr); return this; } c_NewArrayExpr* c_NewArrayExpr::m_new2(){ @@ -14079,9 +14196,9 @@ c_Expr* c_NewArrayExpr::p_Semant(){ if((m_exprType)!=0){ return (this); } - m_ty=m_ty->p_Semant(); - m_exprType=(m_ty->p_ArrayOf()); - m_expr=m_expr->p_Semant2((c_Type::m_intType),0); + gc_assign(m_ty,m_ty->p_Semant()); + gc_assign(m_exprType,(m_ty->p_ArrayOf())); + gc_assign(m_expr,m_expr->p_Semant2((c_Type::m_intType),0)); return (this); } String c_NewArrayExpr::p_Trans(){ @@ -14089,6 +14206,8 @@ String c_NewArrayExpr::p_Trans(){ } void c_NewArrayExpr::mark(){ c_Expr::mark(); + gc_mark_q(m_ty); + gc_mark_q(m_expr); } c_NewObjectExpr::c_NewObjectExpr(){ m_ty=0; @@ -14098,8 +14217,8 @@ c_NewObjectExpr::c_NewObjectExpr(){ } c_NewObjectExpr* c_NewObjectExpr::m_new(c_Type* t_ty,Array t_args){ c_Expr::m_new(); - this->m_ty=t_ty; - this->m_args=t_args; + gc_assign(this->m_ty,t_ty); + gc_assign(this->m_args,t_args); return this; } c_NewObjectExpr* c_NewObjectExpr::m_new2(){ @@ -14110,13 +14229,13 @@ c_Expr* c_NewObjectExpr::p_Semant(){ if((m_exprType)!=0){ return (this); } - m_ty=m_ty->p_Semant(); - m_args=p_SemantArgs(m_args); + gc_assign(m_ty,m_ty->p_Semant()); + gc_assign(m_args,p_SemantArgs(m_args)); c_ObjectType* t_objTy=dynamic_cast(m_ty); if(!((t_objTy)!=0)){ bb_config_Err(String(L"Expression is not a class.",26)); } - m_classDecl=t_objTy->m_classDecl; + gc_assign(m_classDecl,t_objTy->m_classDecl); if((m_classDecl->p_IsInterface())!=0){ bb_config_Err(String(L"Cannot create instance of an interface.",39)); } @@ -14131,14 +14250,14 @@ c_Expr* c_NewObjectExpr::p_Semant(){ bb_config_Err(String(L"No suitable constructor found for class ",40)+m_classDecl->p_ToString()+String(L".",1)); } }else{ - m_ctor=m_classDecl->p_FindFuncDecl(String(L"new",3),m_args,0); + gc_assign(m_ctor,m_classDecl->p_FindFuncDecl(String(L"new",3),m_args,0)); if(!((m_ctor)!=0)){ bb_config_Err(String(L"No suitable constructor found for class ",40)+m_classDecl->p_ToString()+String(L".",1)); } - m_args=p_CastArgs(m_args,m_ctor); + gc_assign(m_args,p_CastArgs(m_args,m_ctor)); } m_classDecl->m_attrs|=1; - m_exprType=m_ty; + gc_assign(m_exprType,m_ty); return (this); } c_Expr* c_NewObjectExpr::p_Copy(){ @@ -14149,6 +14268,10 @@ String c_NewObjectExpr::p_Trans(){ } void c_NewObjectExpr::mark(){ c_Expr::mark(); + gc_mark_q(m_ty); + gc_mark_q(m_args); + gc_mark_q(m_classDecl); + gc_mark_q(m_ctor); } c_CastExpr::c_CastExpr(){ m_ty=0; @@ -14157,8 +14280,8 @@ c_CastExpr::c_CastExpr(){ } c_CastExpr* c_CastExpr::m_new(c_Type* t_ty,c_Expr* t_expr,int t_flags){ c_Expr::m_new(); - this->m_ty=t_ty; - this->m_expr=t_expr; + gc_assign(this->m_ty,t_ty); + gc_assign(this->m_expr,t_expr); this->m_flags=t_flags; return this; } @@ -14170,8 +14293,8 @@ c_Expr* c_CastExpr::p_Semant(){ if((m_exprType)!=0){ return (this); } - m_ty=m_ty->p_Semant(); - m_expr=m_expr->p_Semant(); + gc_assign(m_ty,m_ty->p_Semant()); + gc_assign(m_expr,m_expr->p_Semant()); c_Type* t_src=m_expr->m_exprType; if((t_src->p_EqualsType(m_ty))!=0){ return m_expr; @@ -14182,7 +14305,7 @@ c_Expr* c_CastExpr::p_Semant(){ } if(((dynamic_cast(m_ty))!=0) && !((dynamic_cast(t_src))!=0)){ c_Expr* t_[]={m_expr}; - m_expr=((new c_NewObjectExpr)->m_new(m_ty,Array(t_,1)))->p_Semant(); + gc_assign(m_expr,((new c_NewObjectExpr)->m_new(m_ty,Array(t_,1)))->p_Semant()); }else{ if(((dynamic_cast(t_src))!=0) && !((dynamic_cast(m_ty))!=0)){ String t_op=String(); @@ -14204,30 +14327,30 @@ c_Expr* c_CastExpr::p_Semant(){ } } c_FuncDecl* t_fdecl=t_src->p_GetClass()->p_FindFuncDecl(t_op,Array(),0); - m_expr=((new c_InvokeMemberExpr)->m_new(m_expr,t_fdecl,Array()))->p_Semant(); + gc_assign(m_expr,((new c_InvokeMemberExpr)->m_new(m_expr,t_fdecl,Array()))->p_Semant()); } } - m_exprType=m_ty; + gc_assign(m_exprType,m_ty); }else{ if((dynamic_cast(m_ty))!=0){ if((dynamic_cast(t_src))!=0){ bb_config_Err(String(L"Cannot convert from Void to Bool.",33)); } if((m_flags&1)!=0){ - m_exprType=m_ty; + gc_assign(m_exprType,m_ty); } }else{ if((m_ty->p_ExtendsType(t_src))!=0){ if((m_flags&1)!=0){ if(dynamic_cast(m_ty)!=0==(dynamic_cast(t_src)!=0)){ - m_exprType=m_ty; + gc_assign(m_exprType,m_ty); } } }else{ if(((dynamic_cast(m_ty))!=0) && ((dynamic_cast(t_src))!=0)){ if((m_flags&1)!=0){ if(((t_src->p_GetClass()->p_IsInterface())!=0) || ((m_ty->p_GetClass()->p_IsInterface())!=0)){ - m_exprType=m_ty; + gc_assign(m_exprType,m_ty); } } } @@ -14297,6 +14420,8 @@ String c_CastExpr::p_Trans(){ } void c_CastExpr::mark(){ c_Expr::mark(); + gc_mark_q(m_ty); + gc_mark_q(m_expr); } c_IdentExpr::c_IdentExpr(){ m_ident=String(); @@ -14307,7 +14432,7 @@ c_IdentExpr::c_IdentExpr(){ c_IdentExpr* c_IdentExpr::m_new(String t_ident,c_Expr* t_expr){ c_Expr::m_new(); this->m_ident=t_ident; - this->m_expr=t_expr; + gc_assign(this->m_expr,t_expr); return this; } c_IdentExpr* c_IdentExpr::m_new2(){ @@ -14329,18 +14454,18 @@ int c_IdentExpr::p__Semant(){ return 0; } if((m_expr)!=0){ - m_scope=m_expr->p_SemantScope(); + gc_assign(m_scope,m_expr->p_SemantScope()); if((m_scope)!=0){ m_static=true; }else{ - m_expr=m_expr->p_Semant(); - m_scope=(m_expr->m_exprType->p_GetClass()); + gc_assign(m_expr,m_expr->p_Semant()); + gc_assign(m_scope,(m_expr->m_exprType->p_GetClass())); if(!((m_scope)!=0)){ bb_config_Err(String(L"Expression has no scope",23)); } } }else{ - m_scope=bb_decl__env; + gc_assign(m_scope,bb_decl__env); m_static=bb_decl__env->p_FuncScope()==0 || bb_decl__env->p_FuncScope()->p_IsStatic(); } return 0; @@ -14470,6 +14595,8 @@ c_Expr* c_IdentExpr::p_SemantFunc(Array t_args){ } void c_IdentExpr::mark(){ c_Expr::mark(); + gc_mark_q(m_expr); + gc_mark_q(m_scope); } c_SelfExpr::c_SelfExpr(){ } @@ -14491,7 +14618,7 @@ c_Expr* c_SelfExpr::p_Semant(){ }else{ bb_config_Err(String(L"Self cannot be used here.",25)); } - m_exprType=(bb_decl__env->p_ClassScope()->m_objectType); + gc_assign(m_exprType,(bb_decl__env->p_ClassScope()->m_objectType)); return (this); } bool c_SelfExpr::p_SideEffects(){ @@ -14554,6 +14681,7 @@ c_Node10* c_List5::p_AddFirst(c_Stmt* t_data){ } void c_List5::mark(){ Object::mark(); + gc_mark_q(m__head); } c_Node10::c_Node10(){ m__succ=0; @@ -14561,11 +14689,11 @@ c_Node10::c_Node10(){ m__data=0; } c_Node10* c_Node10::m_new(c_Node10* t_succ,c_Node10* t_pred,c_Stmt* t_data){ - m__succ=t_succ; - m__pred=t_pred; - m__succ->m__pred=this; - m__pred->m__succ=this; - m__data=t_data; + gc_assign(m__succ,t_succ); + gc_assign(m__pred,t_pred); + gc_assign(m__succ->m__pred,this); + gc_assign(m__pred->m__succ,this); + gc_assign(m__data,t_data); return this; } c_Node10* c_Node10::m_new2(){ @@ -14573,13 +14701,16 @@ c_Node10* c_Node10::m_new2(){ } void c_Node10::mark(){ Object::mark(); + gc_mark_q(m__succ); + gc_mark_q(m__pred); + gc_mark_q(m__data); } c_HeadNode5::c_HeadNode5(){ } c_HeadNode5* c_HeadNode5::m_new(){ c_Node10::m_new2(); - m__succ=(this); - m__pred=(this); + gc_assign(m__succ,(this)); + gc_assign(m__pred,(this)); return this; } void c_HeadNode5::mark(){ @@ -14593,7 +14724,7 @@ c_InvokeSuperExpr::c_InvokeSuperExpr(){ c_InvokeSuperExpr* c_InvokeSuperExpr::m_new(String t_ident,Array t_args){ c_Expr::m_new(); this->m_ident=t_ident; - this->m_args=t_args; + gc_assign(this->m_args,t_args); return this; } c_InvokeSuperExpr* c_InvokeSuperExpr::m_new2(){ @@ -14615,16 +14746,16 @@ c_Expr* c_InvokeSuperExpr::p_Semant(){ if(!((t_superClass)!=0)){ bb_config_Err(String(L"Class has no super class.",25)); } - m_args=p_SemantArgs(m_args); - m_funcDecl=t_superClass->p_FindFuncDecl(m_ident,m_args,0); + gc_assign(m_args,p_SemantArgs(m_args)); + gc_assign(m_funcDecl,t_superClass->p_FindFuncDecl(m_ident,m_args,0)); if(!((m_funcDecl)!=0)){ bb_config_Err(String(L"Can't find superclass method '",30)+m_ident+String(L"'.",2)); } if((m_funcDecl->p_IsAbstract())!=0){ bb_config_Err(String(L"Can't invoke abstract superclass method '",41)+m_ident+String(L"'.",2)); } - m_args=p_CastArgs(m_args,m_funcDecl); - m_exprType=m_funcDecl->m_retType; + gc_assign(m_args,p_CastArgs(m_args,m_funcDecl)); + gc_assign(m_exprType,m_funcDecl->m_retType); return (this); } String c_InvokeSuperExpr::p_Trans(){ @@ -14632,13 +14763,15 @@ String c_InvokeSuperExpr::p_Trans(){ } void c_InvokeSuperExpr::mark(){ c_Expr::mark(); + gc_mark_q(m_args); + gc_mark_q(m_funcDecl); } c_IdentTypeExpr::c_IdentTypeExpr(){ m_cdecl=0; } c_IdentTypeExpr* c_IdentTypeExpr::m_new(c_Type* t_type){ c_Expr::m_new(); - this->m_exprType=t_type; + gc_assign(this->m_exprType,t_type); return this; } c_IdentTypeExpr* c_IdentTypeExpr::m_new2(){ @@ -14652,8 +14785,8 @@ int c_IdentTypeExpr::p__Semant(){ if((m_cdecl)!=0){ return 0; } - m_exprType=m_exprType->p_Semant(); - m_cdecl=m_exprType->p_GetClass(); + gc_assign(m_exprType,m_exprType->p_Semant()); + gc_assign(m_cdecl,m_exprType->p_GetClass()); if(!((m_cdecl)!=0)){ bb_config_InternalErr(String(L"Internal error",14)); } @@ -14678,6 +14811,7 @@ c_Expr* c_IdentTypeExpr::p_SemantFunc(Array t_args){ } void c_IdentTypeExpr::mark(){ c_Expr::mark(); + gc_mark_q(m_cdecl); } c_FuncCallExpr::c_FuncCallExpr(){ m_expr=0; @@ -14685,8 +14819,8 @@ c_FuncCallExpr::c_FuncCallExpr(){ } c_FuncCallExpr* c_FuncCallExpr::m_new(c_Expr* t_expr,Array t_args){ c_Expr::m_new(); - this->m_expr=t_expr; - this->m_args=t_args; + gc_assign(this->m_expr,t_expr); + gc_assign(this->m_args,t_args); return this; } c_FuncCallExpr* c_FuncCallExpr::m_new2(){ @@ -14708,11 +14842,13 @@ String c_FuncCallExpr::p_ToString(){ return t_t+String(L")",1); } c_Expr* c_FuncCallExpr::p_Semant(){ - m_args=p_SemantArgs(m_args); + gc_assign(m_args,p_SemantArgs(m_args)); return m_expr->p_SemantFunc(m_args); } void c_FuncCallExpr::mark(){ c_Expr::mark(); + gc_mark_q(m_expr); + gc_mark_q(m_args); } c_SliceExpr::c_SliceExpr(){ m_expr=0; @@ -14721,9 +14857,9 @@ c_SliceExpr::c_SliceExpr(){ } c_SliceExpr* c_SliceExpr::m_new(c_Expr* t_expr,c_Expr* t_from,c_Expr* t_term){ c_Expr::m_new(); - this->m_expr=t_expr; - this->m_from=t_from; - this->m_term=t_term; + gc_assign(this->m_expr,t_expr); + gc_assign(this->m_from,t_from); + gc_assign(this->m_term,t_term); return this; } c_SliceExpr* c_SliceExpr::m_new2(){ @@ -14737,15 +14873,15 @@ c_Expr* c_SliceExpr::p_Semant(){ if((m_exprType)!=0){ return (this); } - m_expr=m_expr->p_Semant(); + gc_assign(m_expr,m_expr->p_Semant()); if(((dynamic_cast(m_expr->m_exprType))!=0) || ((dynamic_cast(m_expr->m_exprType))!=0)){ if((m_from)!=0){ - m_from=m_from->p_Semant2((c_Type::m_intType),0); + gc_assign(m_from,m_from->p_Semant2((c_Type::m_intType),0)); } if((m_term)!=0){ - m_term=m_term->p_Semant2((c_Type::m_intType),0); + gc_assign(m_term,m_term->p_Semant2((c_Type::m_intType),0)); } - m_exprType=m_expr->m_exprType; + gc_assign(m_exprType,m_expr->m_exprType); }else{ bb_config_Err(String(L"Slices can only be used on strings or arrays.",45)); } @@ -14768,6 +14904,9 @@ String c_SliceExpr::p_Trans(){ } void c_SliceExpr::mark(){ c_Expr::mark(); + gc_mark_q(m_expr); + gc_mark_q(m_from); + gc_mark_q(m_term); } c_IndexExpr::c_IndexExpr(){ m_expr=0; @@ -14775,8 +14914,8 @@ c_IndexExpr::c_IndexExpr(){ } c_IndexExpr* c_IndexExpr::m_new(c_Expr* t_expr,c_Expr* t_index){ c_Expr::m_new(); - this->m_expr=t_expr; - this->m_index=t_index; + gc_assign(this->m_expr,t_expr); + gc_assign(this->m_index,t_index); return this; } c_IndexExpr* c_IndexExpr::m_new2(){ @@ -14790,13 +14929,13 @@ c_Expr* c_IndexExpr::p_Semant(){ if((m_exprType)!=0){ return (this); } - m_expr=m_expr->p_Semant(); - m_index=m_index->p_Semant2((c_Type::m_intType),0); + gc_assign(m_expr,m_expr->p_Semant()); + gc_assign(m_index,m_index->p_Semant2((c_Type::m_intType),0)); if((dynamic_cast(m_expr->m_exprType))!=0){ - m_exprType=(c_Type::m_intType); + gc_assign(m_exprType,(c_Type::m_intType)); }else{ if((dynamic_cast(m_expr->m_exprType))!=0){ - m_exprType=dynamic_cast(m_expr->m_exprType)->m_elemType; + gc_assign(m_exprType,dynamic_cast(m_expr->m_exprType)->m_elemType); }else{ bb_config_Err(String(L"Only strings and arrays may be indexed.",39)); } @@ -14836,6 +14975,8 @@ String c_IndexExpr::p_TransVar(){ } void c_IndexExpr::mark(){ c_Expr::mark(); + gc_mark_q(m_expr); + gc_mark_q(m_index); } c_BinaryExpr::c_BinaryExpr(){ m_op=String(); @@ -14845,8 +14986,8 @@ c_BinaryExpr::c_BinaryExpr(){ c_BinaryExpr* c_BinaryExpr::m_new(String t_op,c_Expr* t_lhs,c_Expr* t_rhs){ c_Expr::m_new(); this->m_op=t_op; - this->m_lhs=t_lhs; - this->m_rhs=t_rhs; + gc_assign(this->m_lhs,t_lhs); + gc_assign(this->m_rhs,t_rhs); return this; } c_BinaryExpr* c_BinaryExpr::m_new2(){ @@ -14858,14 +14999,16 @@ String c_BinaryExpr::p_Trans(){ } void c_BinaryExpr::mark(){ c_Expr::mark(); + gc_mark_q(m_lhs); + gc_mark_q(m_rhs); } c_BinaryMathExpr::c_BinaryMathExpr(){ } c_BinaryMathExpr* c_BinaryMathExpr::m_new(String t_op,c_Expr* t_lhs,c_Expr* t_rhs){ c_BinaryExpr::m_new2(); this->m_op=t_op; - this->m_lhs=t_lhs; - this->m_rhs=t_rhs; + gc_assign(this->m_lhs,t_lhs); + gc_assign(this->m_rhs,t_rhs); return this; } c_BinaryMathExpr* c_BinaryMathExpr::m_new2(){ @@ -14879,13 +15022,13 @@ c_Expr* c_BinaryMathExpr::p_Semant(){ if((m_exprType)!=0){ return (this); } - m_lhs=m_lhs->p_Semant(); - m_rhs=m_rhs->p_Semant(); + gc_assign(m_lhs,m_lhs->p_Semant()); + gc_assign(m_rhs,m_rhs->p_Semant()); String t_3=m_op; if(t_3==String(L"&",1) || t_3==String(L"~",1) || t_3==String(L"|",1) || t_3==String(L"shl",3) || t_3==String(L"shr",3)){ - m_exprType=(c_Type::m_intType); + gc_assign(m_exprType,(c_Type::m_intType)); }else{ - m_exprType=p_BalanceTypes(m_lhs->m_exprType,m_rhs->m_exprType); + gc_assign(m_exprType,p_BalanceTypes(m_lhs->m_exprType,m_rhs->m_exprType)); if((dynamic_cast(m_exprType))!=0){ if(m_op!=String(L"+",1)){ bb_config_Err(String(L"Illegal string operator.",24)); @@ -14896,8 +15039,8 @@ c_Expr* c_BinaryMathExpr::p_Semant(){ } } } - m_lhs=m_lhs->p_Cast(m_exprType,0); - m_rhs=m_rhs->p_Cast(m_exprType,0); + gc_assign(m_lhs,m_lhs->p_Cast(m_exprType,0)); + gc_assign(m_rhs,m_rhs->p_Cast(m_exprType,0)); if(((dynamic_cast(m_lhs))!=0) && ((dynamic_cast(m_rhs))!=0)){ return p_EvalConst(); } @@ -15006,8 +15149,8 @@ c_BinaryCompareExpr::c_BinaryCompareExpr(){ c_BinaryCompareExpr* c_BinaryCompareExpr::m_new(String t_op,c_Expr* t_lhs,c_Expr* t_rhs){ c_BinaryExpr::m_new2(); this->m_op=t_op; - this->m_lhs=t_lhs; - this->m_rhs=t_rhs; + gc_assign(this->m_lhs,t_lhs); + gc_assign(this->m_rhs,t_rhs); return this; } c_BinaryCompareExpr* c_BinaryCompareExpr::m_new2(){ @@ -15021,9 +15164,9 @@ c_Expr* c_BinaryCompareExpr::p_Semant(){ if((m_exprType)!=0){ return (this); } - m_lhs=m_lhs->p_Semant(); - m_rhs=m_rhs->p_Semant(); - m_ty=p_BalanceTypes(m_lhs->m_exprType,m_rhs->m_exprType); + gc_assign(m_lhs,m_lhs->p_Semant()); + gc_assign(m_rhs,m_rhs->p_Semant()); + gc_assign(m_ty,p_BalanceTypes(m_lhs->m_exprType,m_rhs->m_exprType)); if((dynamic_cast(m_ty))!=0){ bb_config_Err(String(L"Arrays cannot be compared.",26)); } @@ -15033,9 +15176,9 @@ c_Expr* c_BinaryCompareExpr::p_Semant(){ if(((dynamic_cast(m_ty))!=0) && m_op!=String(L"=",1) && m_op!=String(L"<>",2)){ bb_config_Err(String(L"Objects can only be compared for equality.",42)); } - m_lhs=m_lhs->p_Cast(m_ty,0); - m_rhs=m_rhs->p_Cast(m_ty,0); - m_exprType=(c_Type::m_boolType); + gc_assign(m_lhs,m_lhs->p_Cast(m_ty,0)); + gc_assign(m_rhs,m_rhs->p_Cast(m_ty,0)); + gc_assign(m_exprType,(c_Type::m_boolType)); if(((dynamic_cast(m_lhs))!=0) && ((dynamic_cast(m_rhs))!=0)){ return p_EvalConst(); } @@ -15153,14 +15296,15 @@ String c_BinaryCompareExpr::p_Eval(){ } void c_BinaryCompareExpr::mark(){ c_BinaryExpr::mark(); + gc_mark_q(m_ty); } c_BinaryLogicExpr::c_BinaryLogicExpr(){ } c_BinaryLogicExpr* c_BinaryLogicExpr::m_new(String t_op,c_Expr* t_lhs,c_Expr* t_rhs){ c_BinaryExpr::m_new2(); this->m_op=t_op; - this->m_lhs=t_lhs; - this->m_rhs=t_rhs; + gc_assign(this->m_lhs,t_lhs); + gc_assign(this->m_rhs,t_rhs); return this; } c_BinaryLogicExpr* c_BinaryLogicExpr::m_new2(){ @@ -15174,9 +15318,9 @@ c_Expr* c_BinaryLogicExpr::p_Semant(){ if((m_exprType)!=0){ return (this); } - m_lhs=m_lhs->p_Semant2((c_Type::m_boolType),1); - m_rhs=m_rhs->p_Semant2((c_Type::m_boolType),1); - m_exprType=(c_Type::m_boolType); + gc_assign(m_lhs,m_lhs->p_Semant2((c_Type::m_boolType),1)); + gc_assign(m_rhs,m_rhs->p_Semant2((c_Type::m_boolType),1)); + gc_assign(m_exprType,(c_Type::m_boolType)); if(((dynamic_cast(m_lhs))!=0) && ((dynamic_cast(m_rhs))!=0)){ return p_EvalConst(); } @@ -15220,8 +15364,8 @@ c_GlobalDecl* c_GlobalDecl::m_new(String t_ident,int t_attrs,c_Type* t_type,c_Ex c_VarDecl::m_new(); this->m_ident=t_ident; this->m_attrs=t_attrs; - this->m_type=t_type; - this->m_init=t_init; + gc_assign(this->m_type,t_type); + gc_assign(this->m_init,t_init); return this; } c_GlobalDecl* c_GlobalDecl::m_new2(){ @@ -15243,8 +15387,8 @@ c_FieldDecl* c_FieldDecl::m_new(String t_ident,int t_attrs,c_Type* t_type,c_Expr c_VarDecl::m_new(); this->m_ident=t_ident; this->m_attrs=t_attrs; - this->m_type=t_type; - this->m_init=t_init; + gc_assign(this->m_type,t_type); + gc_assign(this->m_init,t_init); return this; } c_FieldDecl* c_FieldDecl::m_new2(){ @@ -15266,8 +15410,8 @@ c_LocalDecl* c_LocalDecl::m_new(String t_ident,int t_attrs,c_Type* t_type,c_Expr c_VarDecl::m_new(); this->m_ident=t_ident; this->m_attrs=t_attrs; - this->m_type=t_type; - this->m_init=t_init; + gc_assign(this->m_type,t_type); + gc_assign(this->m_init,t_init); return this; } c_LocalDecl* c_LocalDecl::m_new2(){ @@ -15288,8 +15432,8 @@ c_Enumerator2::c_Enumerator2(){ m__curr=0; } c_Enumerator2* c_Enumerator2::m_new(c_List3* t_list){ - m__list=t_list; - m__curr=t_list->m__head->m__succ; + gc_assign(m__list,t_list); + gc_assign(m__curr,t_list->m__head->m__succ); return this; } c_Enumerator2* c_Enumerator2::m_new2(){ @@ -15297,29 +15441,31 @@ c_Enumerator2* c_Enumerator2::m_new2(){ } bool c_Enumerator2::p_HasNext(){ while(m__curr->m__succ->m__pred!=m__curr){ - m__curr=m__curr->m__succ; + gc_assign(m__curr,m__curr->m__succ); } return m__curr!=m__list->m__head; } c_Decl* c_Enumerator2::p_NextObject(){ c_Decl* t_data=m__curr->m__data; - m__curr=m__curr->m__succ; + gc_assign(m__curr,m__curr->m__succ); return t_data; } void c_Enumerator2::mark(){ Object::mark(); + gc_mark_q(m__list); + gc_mark_q(m__curr); } c_DeclStmt::c_DeclStmt(){ m_decl=0; } c_DeclStmt* c_DeclStmt::m_new(c_Decl* t_decl){ c_Stmt::m_new(); - this->m_decl=t_decl; + gc_assign(this->m_decl,t_decl); return this; } c_DeclStmt* c_DeclStmt::m_new2(String t_id,c_Type* t_ty,c_Expr* t_init){ c_Stmt::m_new(); - this->m_decl=((new c_LocalDecl)->m_new(t_id,0,t_ty,t_init)); + gc_assign(this->m_decl,((new c_LocalDecl)->m_new(t_id,0,t_ty,t_init))); return this; } c_DeclStmt* c_DeclStmt::m_new3(){ @@ -15339,6 +15485,7 @@ String c_DeclStmt::p_Trans(){ } void c_DeclStmt::mark(){ c_Stmt::mark(); + gc_mark_q(m_decl); } c_Stack5::c_Stack5(){ m_data=Array(); @@ -15348,15 +15495,15 @@ c_Stack5* c_Stack5::m_new(){ return this; } c_Stack5* c_Stack5::m_new2(Array t_data){ - this->m_data=t_data.Slice(0); + gc_assign(this->m_data,t_data.Slice(0)); this->m_length=t_data.Length(); return this; } void c_Stack5::p_Push13(c_IdentType* t_value){ if(m_length==m_data.Length()){ - m_data=m_data.Resize(m_length*2+10); + gc_assign(m_data,m_data.Resize(m_length*2+10)); } - m_data[m_length]=t_value; + gc_assign(m_data[m_length],t_value); m_length+=1; } void c_Stack5::p_Push14(Array t_values,int t_offset,int t_count){ @@ -15370,19 +15517,20 @@ void c_Stack5::p_Push15(Array t_values,int t_offset){ Array c_Stack5::p_ToArray(){ Array t_t=Array(m_length); for(int t_i=0;t_im_classDecl=t_classDecl; + gc_assign(this->m_classDecl,t_classDecl); return this; } c_ObjectType* c_ObjectType::m_new2(){ @@ -15427,6 +15575,7 @@ String c_ObjectType::p_ToString(){ } void c_ObjectType::mark(){ c_Type::mark(); + gc_mark_q(m_classDecl); } c_List6::c_List6(){ m__head=((new c_HeadNode6)->m_new()); @@ -15452,6 +15601,7 @@ c_Enumerator4* c_List6::p_ObjectEnumerator(){ } void c_List6::mark(){ Object::mark(); + gc_mark_q(m__head); } c_Node11::c_Node11(){ m__succ=0; @@ -15459,11 +15609,11 @@ c_Node11::c_Node11(){ m__data=0; } c_Node11* c_Node11::m_new(c_Node11* t_succ,c_Node11* t_pred,c_ClassDecl* t_data){ - m__succ=t_succ; - m__pred=t_pred; - m__succ->m__pred=this; - m__pred->m__succ=this; - m__data=t_data; + gc_assign(m__succ,t_succ); + gc_assign(m__pred,t_pred); + gc_assign(m__succ->m__pred,this); + gc_assign(m__pred->m__succ,this); + gc_assign(m__data,t_data); return this; } c_Node11* c_Node11::m_new2(){ @@ -15471,13 +15621,16 @@ c_Node11* c_Node11::m_new2(){ } void c_Node11::mark(){ Object::mark(); + gc_mark_q(m__succ); + gc_mark_q(m__pred); + gc_mark_q(m__data); } c_HeadNode6::c_HeadNode6(){ } c_HeadNode6* c_HeadNode6::m_new(){ c_Node11::m_new2(); - m__succ=(this); - m__pred=(this); + gc_assign(m__succ,(this)); + gc_assign(m__pred,(this)); return this; } void c_HeadNode6::mark(){ @@ -15489,8 +15642,8 @@ c_ArgDecl* c_ArgDecl::m_new(String t_ident,int t_attrs,c_Type* t_type,c_Expr* t_ c_LocalDecl::m_new2(); this->m_ident=t_ident; this->m_attrs=t_attrs; - this->m_type=t_type; - this->m_init=t_init; + gc_assign(this->m_type,t_type); + gc_assign(this->m_init,t_init); return this; } c_ArgDecl* c_ArgDecl::m_new2(){ @@ -15514,15 +15667,15 @@ c_Stack6* c_Stack6::m_new(){ return this; } c_Stack6* c_Stack6::m_new2(Array t_data){ - this->m_data=t_data.Slice(0); + gc_assign(this->m_data,t_data.Slice(0)); this->m_length=t_data.Length(); return this; } void c_Stack6::p_Push16(c_ArgDecl* t_value){ if(m_length==m_data.Length()){ - m_data=m_data.Resize(m_length*2+10); + gc_assign(m_data,m_data.Resize(m_length*2+10)); } - m_data[m_length]=t_value; + gc_assign(m_data[m_length],t_value); m_length+=1; } void c_Stack6::p_Push17(Array t_values,int t_offset,int t_count){ @@ -15536,12 +15689,13 @@ void c_Stack6::p_Push18(Array t_values,int t_offset){ Array c_Stack6::p_ToArray(){ Array t_t=Array(m_length); for(int t_i=0;t_im_new()); @@ -15590,6 +15744,7 @@ void c_List7::p_RemoveLast4(c_BlockDecl* t_value){ } void c_List7::mark(){ Object::mark(); + gc_mark_q(m__head); } c_Node12::c_Node12(){ m__succ=0; @@ -15597,30 +15752,33 @@ c_Node12::c_Node12(){ m__data=0; } c_Node12* c_Node12::m_new(c_Node12* t_succ,c_Node12* t_pred,c_BlockDecl* t_data){ - m__succ=t_succ; - m__pred=t_pred; - m__succ->m__pred=this; - m__pred->m__succ=this; - m__data=t_data; + gc_assign(m__succ,t_succ); + gc_assign(m__pred,t_pred); + gc_assign(m__succ->m__pred,this); + gc_assign(m__pred->m__succ,this); + gc_assign(m__data,t_data); return this; } c_Node12* c_Node12::m_new2(){ return this; } int c_Node12::p_Remove(){ - m__succ->m__pred=m__pred; - m__pred->m__succ=m__succ; + gc_assign(m__succ->m__pred,m__pred); + gc_assign(m__pred->m__succ,m__succ); return 0; } void c_Node12::mark(){ Object::mark(); + gc_mark_q(m__succ); + gc_mark_q(m__pred); + gc_mark_q(m__data); } c_HeadNode7::c_HeadNode7(){ } c_HeadNode7* c_HeadNode7::m_new(){ c_Node12::m_new2(); - m__succ=(this); - m__pred=(this); + gc_assign(m__succ,(this)); + gc_assign(m__pred,(this)); return this; } void c_HeadNode7::mark(){ @@ -15631,7 +15789,7 @@ c_ReturnStmt::c_ReturnStmt(){ } c_ReturnStmt* c_ReturnStmt::m_new(c_Expr* t_expr){ c_Stmt::m_new(); - this->m_expr=t_expr; + gc_assign(this->m_expr,t_expr); return this; } c_ReturnStmt* c_ReturnStmt::m_new2(){ @@ -15653,16 +15811,16 @@ int c_ReturnStmt::p_OnSemant(){ if((dynamic_cast(t_fdecl->m_retType))!=0){ bb_config_Err(String(L"Void functions may not return a value.",38)); } - m_expr=m_expr->p_Semant2(t_fdecl->m_retType,0); + gc_assign(m_expr,m_expr->p_Semant2(t_fdecl->m_retType,0)); }else{ if(t_fdecl->p_IsCtor()){ - m_expr=((new c_SelfExpr)->m_new())->p_Semant(); + gc_assign(m_expr,((new c_SelfExpr)->m_new())->p_Semant()); }else{ if(!((dynamic_cast(t_fdecl->m_retType))!=0)){ if((bb_decl__env->p_ModuleScope()->p_IsStrict())!=0){ bb_config_Err(String(L"Missing return expression.",26)); } - m_expr=((new c_ConstExpr)->m_new(t_fdecl->m_retType,String()))->p_Semant(); + gc_assign(m_expr,((new c_ConstExpr)->m_new(t_fdecl->m_retType,String()))->p_Semant()); } } } @@ -15673,6 +15831,7 @@ String c_ReturnStmt::p_Trans(){ } void c_ReturnStmt::mark(){ c_Stmt::mark(); + gc_mark_q(m_expr); } c_BreakStmt::c_BreakStmt(){ } @@ -15723,9 +15882,9 @@ c_IfStmt::c_IfStmt(){ } c_IfStmt* c_IfStmt::m_new(c_Expr* t_expr,c_BlockDecl* t_thenBlock,c_BlockDecl* t_elseBlock){ c_Stmt::m_new(); - this->m_expr=t_expr; - this->m_thenBlock=t_thenBlock; - this->m_elseBlock=t_elseBlock; + gc_assign(this->m_expr,t_expr); + gc_assign(this->m_thenBlock,t_thenBlock); + gc_assign(this->m_elseBlock,t_elseBlock); return this; } c_IfStmt* c_IfStmt::m_new2(){ @@ -15736,7 +15895,7 @@ c_Stmt* c_IfStmt::p_OnCopy2(c_ScopeDecl* t_scope){ return ((new c_IfStmt)->m_new(m_expr->p_Copy(),m_thenBlock->p_CopyBlock(t_scope),m_elseBlock->p_CopyBlock(t_scope))); } int c_IfStmt::p_OnSemant(){ - m_expr=m_expr->p_Semant2((c_Type::m_boolType),1); + gc_assign(m_expr,m_expr->p_Semant2((c_Type::m_boolType),1)); m_thenBlock->p_Semant(); m_elseBlock->p_Semant(); return 0; @@ -15746,6 +15905,9 @@ String c_IfStmt::p_Trans(){ } void c_IfStmt::mark(){ c_Stmt::mark(); + gc_mark_q(m_expr); + gc_mark_q(m_thenBlock); + gc_mark_q(m_elseBlock); } c_WhileStmt::c_WhileStmt(){ m_expr=0; @@ -15753,8 +15915,8 @@ c_WhileStmt::c_WhileStmt(){ } c_WhileStmt* c_WhileStmt::m_new(c_Expr* t_expr,c_BlockDecl* t_block){ c_Stmt::m_new(); - this->m_expr=t_expr; - this->m_block=t_block; + gc_assign(this->m_expr,t_expr); + gc_assign(this->m_block,t_block); return this; } c_WhileStmt* c_WhileStmt::m_new2(){ @@ -15765,7 +15927,7 @@ c_Stmt* c_WhileStmt::p_OnCopy2(c_ScopeDecl* t_scope){ return ((new c_WhileStmt)->m_new(m_expr->p_Copy(),m_block->p_CopyBlock(t_scope))); } int c_WhileStmt::p_OnSemant(){ - m_expr=m_expr->p_Semant2((c_Type::m_boolType),1); + gc_assign(m_expr,m_expr->p_Semant2((c_Type::m_boolType),1)); bb_decl__loopnest+=1; m_block->p_Semant(); bb_decl__loopnest-=1; @@ -15776,6 +15938,8 @@ String c_WhileStmt::p_Trans(){ } void c_WhileStmt::mark(){ c_Stmt::mark(); + gc_mark_q(m_expr); + gc_mark_q(m_block); } c_RepeatStmt::c_RepeatStmt(){ m_block=0; @@ -15783,8 +15947,8 @@ c_RepeatStmt::c_RepeatStmt(){ } c_RepeatStmt* c_RepeatStmt::m_new(c_BlockDecl* t_block,c_Expr* t_expr){ c_Stmt::m_new(); - this->m_block=t_block; - this->m_expr=t_expr; + gc_assign(this->m_block,t_block); + gc_assign(this->m_expr,t_expr); return this; } c_RepeatStmt* c_RepeatStmt::m_new2(){ @@ -15798,7 +15962,7 @@ int c_RepeatStmt::p_OnSemant(){ bb_decl__loopnest+=1; m_block->p_Semant(); bb_decl__loopnest-=1; - m_expr=m_expr->p_Semant2((c_Type::m_boolType),1); + gc_assign(m_expr,m_expr->p_Semant2((c_Type::m_boolType),1)); return 0; } String c_RepeatStmt::p_Trans(){ @@ -15806,6 +15970,8 @@ String c_RepeatStmt::p_Trans(){ } void c_RepeatStmt::mark(){ c_Stmt::mark(); + gc_mark_q(m_block); + gc_mark_q(m_expr); } c_ForEachinStmt::c_ForEachinStmt(){ m_varid=String(); @@ -15817,10 +15983,10 @@ c_ForEachinStmt::c_ForEachinStmt(){ c_ForEachinStmt* c_ForEachinStmt::m_new(String t_varid,c_Type* t_varty,int t_varlocal,c_Expr* t_expr,c_BlockDecl* t_block){ c_Stmt::m_new(); this->m_varid=t_varid; - this->m_varty=t_varty; + gc_assign(this->m_varty,t_varty); this->m_varlocal=t_varlocal; - this->m_expr=t_expr; - this->m_block=t_block; + gc_assign(this->m_expr,t_expr); + gc_assign(this->m_block,t_block); return this; } c_ForEachinStmt* c_ForEachinStmt::m_new2(){ @@ -15831,7 +15997,7 @@ c_Stmt* c_ForEachinStmt::p_OnCopy2(c_ScopeDecl* t_scope){ return ((new c_ForEachinStmt)->m_new(m_varid,m_varty,m_varlocal,m_expr->p_Copy(),m_block->p_CopyBlock(t_scope))); } int c_ForEachinStmt::p_OnSemant(){ - m_expr=m_expr->p_Semant(); + gc_assign(m_expr,m_expr->p_Semant()); if(((dynamic_cast(m_expr->m_exprType))!=0) || ((dynamic_cast(m_expr->m_exprType))!=0)){ c_LocalDecl* t_exprTmp=(new c_LocalDecl)->m_new(String(),0,0,m_expr); c_LocalDecl* t_indexTmp=(new c_LocalDecl)->m_new(String(),0,0,((new c_ConstExpr)->m_new((c_Type::m_intType),String(L"0",1)))); @@ -15847,7 +16013,7 @@ int c_ForEachinStmt::p_OnSemant(){ m_block->m_stmts->p_AddFirst((new c_AssignStmt)->m_new(String(L"=",1),((new c_IdentExpr)->m_new(m_varid,0)),t_indexExpr)); } c_WhileStmt* t_whileStmt=(new c_WhileStmt)->m_new(t_cmpExpr,m_block); - m_block=(new c_BlockDecl)->m_new(m_block->m_scope); + gc_assign(m_block,(new c_BlockDecl)->m_new(m_block->m_scope)); m_block->p_AddStmt((new c_DeclStmt)->m_new(t_exprTmp)); m_block->p_AddStmt((new c_DeclStmt)->m_new(t_indexTmp)); m_block->p_AddStmt(t_whileStmt); @@ -15864,7 +16030,7 @@ int c_ForEachinStmt::p_OnSemant(){ m_block->m_stmts->p_AddFirst((new c_AssignStmt)->m_new(String(L"=",1),((new c_IdentExpr)->m_new(m_varid,0)),t_nextObjExpr)); } c_WhileStmt* t_whileStmt2=(new c_WhileStmt)->m_new(t_hasNextExpr,m_block); - m_block=(new c_BlockDecl)->m_new(m_block->m_scope); + gc_assign(m_block,(new c_BlockDecl)->m_new(m_block->m_scope)); m_block->p_AddStmt((new c_DeclStmt)->m_new(t_enumerTmp)); m_block->p_AddStmt(t_whileStmt2); }else{ @@ -15879,6 +16045,9 @@ String c_ForEachinStmt::p_Trans(){ } void c_ForEachinStmt::mark(){ c_Stmt::mark(); + gc_mark_q(m_varty); + gc_mark_q(m_expr); + gc_mark_q(m_block); } c_AssignStmt::c_AssignStmt(){ m_op=String(); @@ -15890,8 +16059,8 @@ c_AssignStmt::c_AssignStmt(){ c_AssignStmt* c_AssignStmt::m_new(String t_op,c_Expr* t_lhs,c_Expr* t_rhs){ c_Stmt::m_new(); this->m_op=t_op; - this->m_lhs=t_lhs; - this->m_rhs=t_rhs; + gc_assign(this->m_lhs,t_lhs); + gc_assign(this->m_rhs,t_rhs); return this; } c_AssignStmt* c_AssignStmt::m_new2(){ @@ -15905,9 +16074,9 @@ int c_AssignStmt::p_FixSideEffects(){ c_MemberVarExpr* t_e1=dynamic_cast(m_lhs); if((t_e1)!=0){ if(t_e1->m_expr->p_SideEffects()){ - m_tmp1=(new c_LocalDecl)->m_new(String(),0,t_e1->m_expr->m_exprType,t_e1->m_expr); + gc_assign(m_tmp1,(new c_LocalDecl)->m_new(String(),0,t_e1->m_expr->m_exprType,t_e1->m_expr)); m_tmp1->p_Semant(); - m_lhs=((new c_MemberVarExpr)->m_new(((new c_VarExpr)->m_new(m_tmp1)),t_e1->m_decl)); + gc_assign(m_lhs,((new c_MemberVarExpr)->m_new(((new c_VarExpr)->m_new(m_tmp1)),t_e1->m_decl))); } } c_IndexExpr* t_e2=dynamic_cast(m_lhs); @@ -15916,23 +16085,23 @@ int c_AssignStmt::p_FixSideEffects(){ c_Expr* t_index=t_e2->m_index; if(t_expr->p_SideEffects() || t_index->p_SideEffects()){ if(t_expr->p_SideEffects()){ - m_tmp1=(new c_LocalDecl)->m_new(String(),0,t_expr->m_exprType,t_expr); + gc_assign(m_tmp1,(new c_LocalDecl)->m_new(String(),0,t_expr->m_exprType,t_expr)); m_tmp1->p_Semant(); t_expr=((new c_VarExpr)->m_new(m_tmp1)); } if(t_index->p_SideEffects()){ - m_tmp2=(new c_LocalDecl)->m_new(String(),0,t_index->m_exprType,t_index); + gc_assign(m_tmp2,(new c_LocalDecl)->m_new(String(),0,t_index->m_exprType,t_index)); m_tmp2->p_Semant(); t_index=((new c_VarExpr)->m_new(m_tmp2)); } - m_lhs=((new c_IndexExpr)->m_new(t_expr,t_index))->p_Semant(); + gc_assign(m_lhs,((new c_IndexExpr)->m_new(t_expr,t_index))->p_Semant()); } } return 0; } int c_AssignStmt::p_OnSemant(){ - m_rhs=m_rhs->p_Semant(); - m_lhs=m_lhs->p_SemantSet(m_op,m_rhs); + gc_assign(m_rhs,m_rhs->p_Semant()); + gc_assign(m_lhs,m_lhs->p_SemantSet(m_op,m_rhs)); if(((dynamic_cast(m_lhs))!=0) || ((dynamic_cast(m_lhs))!=0)){ m_rhs=0; return 0; @@ -15940,7 +16109,7 @@ int c_AssignStmt::p_OnSemant(){ bool t_kludge=true; String t_1=m_op; if(t_1==String(L"=",1)){ - m_rhs=m_rhs->p_Cast(m_lhs->m_exprType,0); + gc_assign(m_rhs,m_rhs->p_Cast(m_lhs->m_exprType,0)); t_kludge=false; }else{ if(t_1==String(L"*=",2) || t_1==String(L"/=",2) || t_1==String(L"+=",2) || t_1==String(L"-=",2)){ @@ -15967,7 +16136,7 @@ int c_AssignStmt::p_OnSemant(){ } if(t_kludge){ p_FixSideEffects(); - m_rhs=((new c_BinaryMathExpr)->m_new(m_op.Slice(0,-1),m_lhs,m_rhs))->p_Semant()->p_Cast(m_lhs->m_exprType,0); + gc_assign(m_rhs,((new c_BinaryMathExpr)->m_new(m_op.Slice(0,-1),m_lhs,m_rhs))->p_Semant()->p_Cast(m_lhs->m_exprType,0)); m_op=String(L"=",1); } return 0; @@ -15978,6 +16147,10 @@ String c_AssignStmt::p_Trans(){ } void c_AssignStmt::mark(){ c_Stmt::mark(); + gc_mark_q(m_lhs); + gc_mark_q(m_rhs); + gc_mark_q(m_tmp1); + gc_mark_q(m_tmp2); } c_ForStmt::c_ForStmt(){ m_init=0; @@ -15987,10 +16160,10 @@ c_ForStmt::c_ForStmt(){ } c_ForStmt* c_ForStmt::m_new(c_Stmt* t_init,c_Expr* t_expr,c_Stmt* t_incr,c_BlockDecl* t_block){ c_Stmt::m_new(); - this->m_init=t_init; - this->m_expr=t_expr; - this->m_incr=t_incr; - this->m_block=t_block; + gc_assign(this->m_init,t_init); + gc_assign(this->m_expr,t_expr); + gc_assign(this->m_incr,t_incr); + gc_assign(this->m_block,t_block); return this; } c_ForStmt* c_ForStmt::m_new2(){ @@ -16003,7 +16176,7 @@ c_Stmt* c_ForStmt::p_OnCopy2(c_ScopeDecl* t_scope){ int c_ForStmt::p_OnSemant(){ bb_decl_PushEnv(m_block); m_init->p_Semant(); - m_expr=m_expr->p_Semant(); + gc_assign(m_expr,m_expr->p_Semant()); bb_decl__loopnest+=1; m_block->p_Semant(); bb_decl__loopnest-=1; @@ -16033,6 +16206,10 @@ String c_ForStmt::p_Trans(){ } void c_ForStmt::mark(){ c_Stmt::mark(); + gc_mark_q(m_init); + gc_mark_q(m_expr); + gc_mark_q(m_incr); + gc_mark_q(m_block); } c_CatchStmt::c_CatchStmt(){ m_init=0; @@ -16040,8 +16217,8 @@ c_CatchStmt::c_CatchStmt(){ } c_CatchStmt* c_CatchStmt::m_new(c_LocalDecl* t_init,c_BlockDecl* t_block){ c_Stmt::m_new(); - this->m_init=t_init; - this->m_block=t_block; + gc_assign(this->m_init,t_init); + gc_assign(this->m_block,t_block); return this; } c_CatchStmt* c_CatchStmt::m_new2(){ @@ -16068,6 +16245,8 @@ String c_CatchStmt::p_Trans(){ } void c_CatchStmt::mark(){ c_Stmt::mark(); + gc_mark_q(m_init); + gc_mark_q(m_block); } c_Stack7::c_Stack7(){ m_data=Array(); @@ -16077,15 +16256,15 @@ c_Stack7* c_Stack7::m_new(){ return this; } c_Stack7* c_Stack7::m_new2(Array t_data){ - this->m_data=t_data.Slice(0); + gc_assign(this->m_data,t_data.Slice(0)); this->m_length=t_data.Length(); return this; } void c_Stack7::p_Push19(c_CatchStmt* t_value){ if(m_length==m_data.Length()){ - m_data=m_data.Resize(m_length*2+10); + gc_assign(m_data,m_data.Resize(m_length*2+10)); } - m_data[m_length]=t_value; + gc_assign(m_data[m_length],t_value); m_length+=1; } void c_Stack7::p_Push20(Array t_values,int t_offset,int t_count){ @@ -16100,11 +16279,11 @@ c_CatchStmt* c_Stack7::m_NIL; void c_Stack7::p_Length(int t_newlength){ if(t_newlengthm_data.Length()){ - m_data=m_data.Resize(bb_math_Max(m_length*2+10,t_newlength)); + gc_assign(m_data,m_data.Resize(bb_math_Max(m_length*2+10,t_newlength))); } } m_length=t_newlength; @@ -16115,12 +16294,13 @@ int c_Stack7::p_Length2(){ Array c_Stack7::p_ToArray(){ Array t_t=Array(m_length); for(int t_i=0;t_it_y){ @@ -16140,8 +16320,8 @@ c_TryStmt::c_TryStmt(){ } c_TryStmt* c_TryStmt::m_new(c_BlockDecl* t_block,Array t_catches){ c_Stmt::m_new(); - this->m_block=t_block; - this->m_catches=t_catches; + gc_assign(this->m_block,t_block); + gc_assign(this->m_catches,t_catches); return this; } c_TryStmt* c_TryStmt::m_new2(){ @@ -16151,7 +16331,7 @@ c_TryStmt* c_TryStmt::m_new2(){ c_Stmt* c_TryStmt::p_OnCopy2(c_ScopeDecl* t_scope){ Array t_tcatches=this->m_catches.Slice(0); for(int t_i=0;t_i(t_tcatches[t_i]->p_Copy2(t_scope)); + gc_assign(t_tcatches[t_i],dynamic_cast(t_tcatches[t_i]->p_Copy2(t_scope))); } return ((new c_TryStmt)->m_new(m_block->p_CopyBlock(t_scope),t_tcatches)); } @@ -16173,13 +16353,15 @@ String c_TryStmt::p_Trans(){ } void c_TryStmt::mark(){ c_Stmt::mark(); + gc_mark_q(m_block); + gc_mark_q(m_catches); } c_ThrowStmt::c_ThrowStmt(){ m_expr=0; } c_ThrowStmt* c_ThrowStmt::m_new(c_Expr* t_expr){ c_Stmt::m_new(); - this->m_expr=t_expr; + gc_assign(this->m_expr,t_expr); return this; } c_ThrowStmt* c_ThrowStmt::m_new2(){ @@ -16190,7 +16372,7 @@ c_Stmt* c_ThrowStmt::p_OnCopy2(c_ScopeDecl* t_scope){ return ((new c_ThrowStmt)->m_new(m_expr->p_Copy())); } int c_ThrowStmt::p_OnSemant(){ - m_expr=m_expr->p_Semant(); + gc_assign(m_expr,m_expr->p_Semant()); if(!((dynamic_cast(m_expr->m_exprType))!=0)){ bb_config_Err(String(L"Expression type must extend Throwable",37)); } @@ -16204,13 +16386,14 @@ String c_ThrowStmt::p_Trans(){ } void c_ThrowStmt::mark(){ c_Stmt::mark(); + gc_mark_q(m_expr); } c_ExprStmt::c_ExprStmt(){ m_expr=0; } c_ExprStmt* c_ExprStmt::m_new(c_Expr* t_expr){ c_Stmt::m_new(); - this->m_expr=t_expr; + gc_assign(this->m_expr,t_expr); return this; } c_ExprStmt* c_ExprStmt::m_new2(){ @@ -16221,7 +16404,7 @@ c_Stmt* c_ExprStmt::p_OnCopy2(c_ScopeDecl* t_scope){ return ((new c_ExprStmt)->m_new(m_expr->p_Copy())); } int c_ExprStmt::p_OnSemant(){ - m_expr=m_expr->p_Semant(); + gc_assign(m_expr,m_expr->p_Semant()); if(!((m_expr)!=0)){ bb_config_InternalErr(String(L"Internal error",14)); } @@ -16232,6 +16415,7 @@ String c_ExprStmt::p_Trans(){ } void c_ExprStmt::mark(){ c_Stmt::mark(); + gc_mark_q(m_expr); } c_ModuleDecl* bb_parser_ParseModule(String t_modpath,String t_filepath,c_AppDecl* t_app){ String t_ident=t_modpath; @@ -16251,8 +16435,8 @@ c_Enumerator3::c_Enumerator3(){ m__curr=0; } c_Enumerator3* c_Enumerator3::m_new(c_List4* t_list){ - m__list=t_list; - m__curr=t_list->m__head->m__succ; + gc_assign(m__list,t_list); + gc_assign(m__curr,t_list->m__head->m__succ); return this; } c_Enumerator3* c_Enumerator3::m_new2(){ @@ -16260,17 +16444,19 @@ c_Enumerator3* c_Enumerator3::m_new2(){ } bool c_Enumerator3::p_HasNext(){ while(m__curr->m__succ->m__pred!=m__curr){ - m__curr=m__curr->m__succ; + gc_assign(m__curr,m__curr->m__succ); } return m__curr!=m__list->m__head; } c_FuncDecl* c_Enumerator3::p_NextObject(){ c_FuncDecl* t_data=m__curr->m__data; - m__curr=m__curr->m__succ; + gc_assign(m__curr,m__curr->m__succ); return t_data; } void c_Enumerator3::mark(){ Object::mark(); + gc_mark_q(m__list); + gc_mark_q(m__curr); } c_StringList* bb_config__errStack; int bb_config_PushErr(String t_errInfo){ @@ -16302,6 +16488,7 @@ c_Enumerator6* c_List8::p_ObjectEnumerator(){ } void c_List8::mark(){ Object::mark(); + gc_mark_q(m__head); } c_Node13::c_Node13(){ m__succ=0; @@ -16309,11 +16496,11 @@ c_Node13::c_Node13(){ m__data=0; } c_Node13* c_Node13::m_new(c_Node13* t_succ,c_Node13* t_pred,c_GlobalDecl* t_data){ - m__succ=t_succ; - m__pred=t_pred; - m__succ->m__pred=this; - m__pred->m__succ=this; - m__data=t_data; + gc_assign(m__succ,t_succ); + gc_assign(m__pred,t_pred); + gc_assign(m__succ->m__pred,this); + gc_assign(m__pred->m__succ,this); + gc_assign(m__data,t_data); return this; } c_Node13* c_Node13::m_new2(){ @@ -16321,13 +16508,16 @@ c_Node13* c_Node13::m_new2(){ } void c_Node13::mark(){ Object::mark(); + gc_mark_q(m__succ); + gc_mark_q(m__pred); + gc_mark_q(m__data); } c_HeadNode8::c_HeadNode8(){ } c_HeadNode8* c_HeadNode8::m_new(){ c_Node13::m_new2(); - m__succ=(this); - m__pred=(this); + gc_assign(m__succ,(this)); + gc_assign(m__pred,(this)); return this; } void c_HeadNode8::mark(){ @@ -16345,9 +16535,9 @@ c_InvokeMemberExpr::c_InvokeMemberExpr(){ } c_InvokeMemberExpr* c_InvokeMemberExpr::m_new(c_Expr* t_expr,c_FuncDecl* t_decl,Array t_args){ c_Expr::m_new(); - this->m_expr=t_expr; - this->m_decl=t_decl; - this->m_args=t_args; + gc_assign(this->m_expr,t_expr); + gc_assign(this->m_decl,t_decl); + gc_assign(this->m_args,t_args); return this; } c_InvokeMemberExpr* c_InvokeMemberExpr::m_new2(){ @@ -16358,11 +16548,11 @@ c_Expr* c_InvokeMemberExpr::p_Semant(){ if((m_exprType)!=0){ return (this); } - m_exprType=m_decl->m_retType; - m_args=p_CastArgs(m_args,m_decl); + gc_assign(m_exprType,m_decl->m_retType); + gc_assign(m_args,p_CastArgs(m_args,m_decl)); if(((dynamic_cast(m_exprType))!=0) && ((dynamic_cast(dynamic_cast(m_exprType)->m_elemType))!=0)){ m_isResize=1; - m_exprType=m_expr->m_exprType; + gc_assign(m_exprType,m_expr->m_exprType); } return (this); } @@ -16388,6 +16578,9 @@ String c_InvokeMemberExpr::p_TransStmt(){ } void c_InvokeMemberExpr::mark(){ c_Expr::mark(); + gc_mark_q(m_expr); + gc_mark_q(m_decl); + gc_mark_q(m_args); } c_Expr* bb_preprocessor_EvalExpr(c_Toker* t_toker){ c_StringStack* t_buf=(new c_StringStack)->m_new2(); @@ -16655,7 +16848,7 @@ c_Target* c_Target::m_new(String t_dir,String t_name,String t_system,c_Builder* this->m_dir=t_dir; this->m_name=t_name; this->m_system=t_system; - this->m_builder=t_builder; + gc_assign(this->m_builder,t_builder); return this; } c_Target* c_Target::m_new2(){ @@ -16663,6 +16856,7 @@ c_Target* c_Target::m_new2(){ } void c_Target::mark(){ Object::mark(); + gc_mark_q(m_builder); } c_Map6::c_Map6(){ m_root=0; @@ -16672,42 +16866,42 @@ c_Map6* c_Map6::m_new(){ } int c_Map6::p_RotateLeft6(c_Node14* t_node){ c_Node14* t_child=t_node->m_right; - t_node->m_right=t_child->m_left; + gc_assign(t_node->m_right,t_child->m_left); if((t_child->m_left)!=0){ - t_child->m_left->m_parent=t_node; + gc_assign(t_child->m_left->m_parent,t_node); } - t_child->m_parent=t_node->m_parent; + gc_assign(t_child->m_parent,t_node->m_parent); if((t_node->m_parent)!=0){ if(t_node==t_node->m_parent->m_left){ - t_node->m_parent->m_left=t_child; + gc_assign(t_node->m_parent->m_left,t_child); }else{ - t_node->m_parent->m_right=t_child; + gc_assign(t_node->m_parent->m_right,t_child); } }else{ - m_root=t_child; + gc_assign(m_root,t_child); } - t_child->m_left=t_node; - t_node->m_parent=t_child; + gc_assign(t_child->m_left,t_node); + gc_assign(t_node->m_parent,t_child); return 0; } int c_Map6::p_RotateRight6(c_Node14* t_node){ c_Node14* t_child=t_node->m_left; - t_node->m_left=t_child->m_right; + gc_assign(t_node->m_left,t_child->m_right); if((t_child->m_right)!=0){ - t_child->m_right->m_parent=t_node; + gc_assign(t_child->m_right->m_parent,t_node); } - t_child->m_parent=t_node->m_parent; + gc_assign(t_child->m_parent,t_node->m_parent); if((t_node->m_parent)!=0){ if(t_node==t_node->m_parent->m_right){ - t_node->m_parent->m_right=t_child; + gc_assign(t_node->m_parent->m_right,t_child); }else{ - t_node->m_parent->m_left=t_child; + gc_assign(t_node->m_parent->m_left,t_child); } }else{ - m_root=t_child; + gc_assign(m_root,t_child); } - t_child->m_right=t_node; - t_node->m_parent=t_child; + gc_assign(t_child->m_right,t_node); + gc_assign(t_node->m_parent,t_child); return 0; } int c_Map6::p_InsertFixup6(c_Node14* t_node){ @@ -16762,7 +16956,7 @@ bool c_Map6::p_Set6(String t_key,c_Target* t_value){ if(t_cmp<0){ t_node=t_node->m_left; }else{ - t_node->m_value=t_value; + gc_assign(t_node->m_value,t_value); return false; } } @@ -16770,13 +16964,13 @@ bool c_Map6::p_Set6(String t_key,c_Target* t_value){ t_node=(new c_Node14)->m_new(t_key,t_value,-1,t_parent); if((t_parent)!=0){ if(t_cmp>0){ - t_parent->m_right=t_node; + gc_assign(t_parent->m_right,t_node); }else{ - t_parent->m_left=t_node; + gc_assign(t_parent->m_left,t_node); } p_InsertFixup6(t_node); }else{ - m_root=t_node; + gc_assign(m_root,t_node); } return true; } @@ -16818,6 +17012,7 @@ c_Target* c_Map6::p_Get(String t_key){ } void c_Map6::mark(){ Object::mark(); + gc_mark_q(m_root); } c_StringMap6::c_StringMap6(){ } @@ -16841,9 +17036,9 @@ c_Node14::c_Node14(){ } c_Node14* c_Node14::m_new(String t_key,c_Target* t_value,int t_color,c_Node14* t_parent){ this->m_key=t_key; - this->m_value=t_value; + gc_assign(this->m_value,t_value); this->m_color=t_color; - this->m_parent=t_parent; + gc_assign(this->m_parent,t_parent); return this; } c_Node14* c_Node14::m_new2(){ @@ -16871,15 +17066,19 @@ String c_Node14::p_Key(){ } void c_Node14::mark(){ Object::mark(); + gc_mark_q(m_right); + gc_mark_q(m_left); + gc_mark_q(m_value); + gc_mark_q(m_parent); } void bb_config_PopConfigScope(){ - bb_config__cfgScope=bb_config__cfgScopeStack->p_Pop(); + gc_assign(bb_config__cfgScope,bb_config__cfgScopeStack->p_Pop()); } c_NodeEnumerator2::c_NodeEnumerator2(){ m_node=0; } c_NodeEnumerator2* c_NodeEnumerator2::m_new(c_Node14* t_node){ - this->m_node=t_node; + gc_assign(this->m_node,t_node); return this; } c_NodeEnumerator2* c_NodeEnumerator2::m_new2(){ @@ -16890,11 +17089,12 @@ bool c_NodeEnumerator2::p_HasNext(){ } c_Node14* c_NodeEnumerator2::p_NextObject(){ c_Node14* t_t=m_node; - m_node=m_node->p_NextNode(); + gc_assign(m_node,m_node->p_NextNode()); return t_t; } void c_NodeEnumerator2::mark(){ Object::mark(); + gc_mark_q(m_node); } String bb_config_ENV_HOST; String bb_config_ENV_CONFIG; @@ -17487,13 +17687,13 @@ int c_Reflector::p_Semant3(c_AppDecl* t_app){ c_ModuleDecl* t_mdecl=t_->p_NextObject(); String t_path=t_mdecl->m_rmodpath; if(t_path==String(L"reflection",10)){ - m_refmod=t_mdecl; + gc_assign(m_refmod,t_mdecl); }else{ if(t_path==String(L"cerberus.lang",13)){ - m_langmod=t_mdecl; + gc_assign(m_langmod,t_mdecl); }else{ if(t_path==String(L"cerberus.boxes",14)){ - m_boxesmod=t_mdecl; + gc_assign(m_boxesmod,t_mdecl); } } } @@ -17650,12 +17850,21 @@ int c_Reflector::p_Semant3(c_AppDecl* t_app){ } void c_Reflector::mark(){ Object::mark(); + gc_mark_q(m_refmod); + gc_mark_q(m_langmod); + gc_mark_q(m_boxesmod); + gc_mark_q(m_munged); + gc_mark_q(m_modexprs); + gc_mark_q(m_refmods); + gc_mark_q(m_classdecls); + gc_mark_q(m_classids); + gc_mark_q(m_output); } c_MapValues::c_MapValues(){ m_map=0; } c_MapValues* c_MapValues::m_new(c_Map5* t_map){ - this->m_map=t_map; + gc_assign(this->m_map,t_map); return this; } c_MapValues* c_MapValues::m_new2(){ @@ -17666,12 +17875,13 @@ c_ValueEnumerator* c_MapValues::p_ObjectEnumerator(){ } void c_MapValues::mark(){ Object::mark(); + gc_mark_q(m_map); } c_ValueEnumerator::c_ValueEnumerator(){ m_node=0; } c_ValueEnumerator* c_ValueEnumerator::m_new(c_Node7* t_node){ - this->m_node=t_node; + gc_assign(this->m_node,t_node); return this; } c_ValueEnumerator* c_ValueEnumerator::m_new2(){ @@ -17682,11 +17892,12 @@ bool c_ValueEnumerator::p_HasNext(){ } c_ModuleDecl* c_ValueEnumerator::p_NextObject(){ c_Node7* t_t=m_node; - m_node=m_node->p_NextNode(); + gc_assign(m_node,m_node->p_NextNode()); return t_t->m_value; } void c_ValueEnumerator::mark(){ Object::mark(); + gc_mark_q(m_node); } c_Map7::c_Map7(){ m_root=0; @@ -17722,42 +17933,42 @@ int c_Map7::p_Get(String t_key){ } int c_Map7::p_RotateLeft7(c_Node15* t_node){ c_Node15* t_child=t_node->m_right; - t_node->m_right=t_child->m_left; + gc_assign(t_node->m_right,t_child->m_left); if((t_child->m_left)!=0){ - t_child->m_left->m_parent=t_node; + gc_assign(t_child->m_left->m_parent,t_node); } - t_child->m_parent=t_node->m_parent; + gc_assign(t_child->m_parent,t_node->m_parent); if((t_node->m_parent)!=0){ if(t_node==t_node->m_parent->m_left){ - t_node->m_parent->m_left=t_child; + gc_assign(t_node->m_parent->m_left,t_child); }else{ - t_node->m_parent->m_right=t_child; + gc_assign(t_node->m_parent->m_right,t_child); } }else{ - m_root=t_child; + gc_assign(m_root,t_child); } - t_child->m_left=t_node; - t_node->m_parent=t_child; + gc_assign(t_child->m_left,t_node); + gc_assign(t_node->m_parent,t_child); return 0; } int c_Map7::p_RotateRight7(c_Node15* t_node){ c_Node15* t_child=t_node->m_left; - t_node->m_left=t_child->m_right; + gc_assign(t_node->m_left,t_child->m_right); if((t_child->m_right)!=0){ - t_child->m_right->m_parent=t_node; + gc_assign(t_child->m_right->m_parent,t_node); } - t_child->m_parent=t_node->m_parent; + gc_assign(t_child->m_parent,t_node->m_parent); if((t_node->m_parent)!=0){ if(t_node==t_node->m_parent->m_right){ - t_node->m_parent->m_right=t_child; + gc_assign(t_node->m_parent->m_right,t_child); }else{ - t_node->m_parent->m_left=t_child; + gc_assign(t_node->m_parent->m_left,t_child); } }else{ - m_root=t_child; + gc_assign(m_root,t_child); } - t_child->m_right=t_node; - t_node->m_parent=t_child; + gc_assign(t_child->m_right,t_node); + gc_assign(t_node->m_parent,t_child); return 0; } int c_Map7::p_InsertFixup7(c_Node15* t_node){ @@ -17820,18 +18031,19 @@ bool c_Map7::p_Set7(String t_key,int t_value){ t_node=(new c_Node15)->m_new(t_key,t_value,-1,t_parent); if((t_parent)!=0){ if(t_cmp>0){ - t_parent->m_right=t_node; + gc_assign(t_parent->m_right,t_node); }else{ - t_parent->m_left=t_node; + gc_assign(t_parent->m_left,t_node); } p_InsertFixup7(t_node); }else{ - m_root=t_node; + gc_assign(m_root,t_node); } return true; } void c_Map7::mark(){ Object::mark(); + gc_mark_q(m_root); } c_StringMap7::c_StringMap7(){ } @@ -17857,7 +18069,7 @@ c_Node15* c_Node15::m_new(String t_key,int t_value,int t_color,c_Node15* t_paren this->m_key=t_key; this->m_value=t_value; this->m_color=t_color; - this->m_parent=t_parent; + gc_assign(this->m_parent,t_parent); return this; } c_Node15* c_Node15::m_new2(){ @@ -17865,14 +18077,17 @@ c_Node15* c_Node15::m_new2(){ } void c_Node15::mark(){ Object::mark(); + gc_mark_q(m_right); + gc_mark_q(m_left); + gc_mark_q(m_parent); } c_Enumerator4::c_Enumerator4(){ m__list=0; m__curr=0; } c_Enumerator4* c_Enumerator4::m_new(c_List6* t_list){ - m__list=t_list; - m__curr=t_list->m__head->m__succ; + gc_assign(m__list,t_list); + gc_assign(m__curr,t_list->m__head->m__succ); return this; } c_Enumerator4* c_Enumerator4::m_new2(){ @@ -17880,17 +18095,19 @@ c_Enumerator4* c_Enumerator4::m_new2(){ } bool c_Enumerator4::p_HasNext(){ while(m__curr->m__succ->m__pred!=m__curr){ - m__curr=m__curr->m__succ; + gc_assign(m__curr,m__curr->m__succ); } return m__curr!=m__list->m__head; } c_ClassDecl* c_Enumerator4::p_NextObject(){ c_ClassDecl* t_data=m__curr->m__data; - m__curr=m__curr->m__succ; + gc_assign(m__curr,m__curr->m__succ); return t_data; } void c_Enumerator4::mark(){ Object::mark(); + gc_mark_q(m__list); + gc_mark_q(m__curr); } c_Stack8::c_Stack8(){ m_data=Array(); @@ -17900,7 +18117,7 @@ c_Stack8* c_Stack8::m_new(){ return this; } c_Stack8* c_Stack8::m_new2(Array t_data){ - this->m_data=t_data.Slice(0); + gc_assign(this->m_data,t_data.Slice(0)); this->m_length=t_data.Length(); return this; } @@ -17908,11 +18125,11 @@ c_ClassDecl* c_Stack8::m_NIL; void c_Stack8::p_Length(int t_newlength){ if(t_newlengthm_data.Length()){ - m_data=m_data.Resize(bb_math_Max(m_length*2+10,t_newlength)); + gc_assign(m_data,m_data.Resize(bb_math_Max(m_length*2+10,t_newlength))); } } m_length=t_newlength; @@ -17922,9 +18139,9 @@ int c_Stack8::p_Length2(){ } void c_Stack8::p_Push22(c_ClassDecl* t_value){ if(m_length==m_data.Length()){ - m_data=m_data.Resize(m_length*2+10); + gc_assign(m_data,m_data.Resize(m_length*2+10)); } - m_data[m_length]=t_value; + gc_assign(m_data[m_length],t_value); m_length+=1; } void c_Stack8::p_Push23(Array t_values,int t_offset,int t_count){ @@ -17940,6 +18157,7 @@ c_ClassDecl* c_Stack8::p_Get2(int t_index){ } void c_Stack8::mark(){ Object::mark(); + gc_mark_q(m_data); } int bb_parser_ParseSource(String t_source,c_AppDecl* t_app,c_ModuleDecl* t_mdecl,int t_defattrs){ c_Toker* t_toker=(new c_Toker)->m_new(String(L"$SOURCE",7),t_source); @@ -18694,6 +18912,10 @@ String c_CTranslator::p_TransBinaryOp(String t_op,String t_rhs){ } void c_CTranslator::mark(){ c_Translator::mark(); + gc_mark_q(m_funcMungs); + gc_mark_q(m_mungedFuncs); + gc_mark_q(m_mungedScopes); + gc_mark_q(m_lines); } c_JavaTranslator::c_JavaTranslator(){ m_langutil=false; @@ -19481,7 +19703,7 @@ c_NodeEnumerator3::c_NodeEnumerator3(){ m_node=0; } c_NodeEnumerator3* c_NodeEnumerator3::m_new(c_Node2* t_node){ - this->m_node=t_node; + gc_assign(this->m_node,t_node); return this; } c_NodeEnumerator3* c_NodeEnumerator3::m_new2(){ @@ -19492,11 +19714,12 @@ bool c_NodeEnumerator3::p_HasNext(){ } c_Node2* c_NodeEnumerator3::p_NextObject(){ c_Node2* t_t=m_node; - m_node=m_node->p_NextNode(); + gc_assign(m_node,m_node->p_NextNode()); return t_t; } void c_NodeEnumerator3::mark(){ Object::mark(); + gc_mark_q(m_node); } String bb_config_Enquote(String t_str,String t_lang){ String t_1=t_lang; @@ -20480,6 +20703,7 @@ String c_CppTranslator::p_TransAssignStmt2(c_AssignStmt* t_stmt){ } void c_CppTranslator::mark(){ c_CTranslator::mark(); + gc_mark_q(m_dbgLocals); } c_JsTranslator::c_JsTranslator(){ } @@ -21113,7 +21337,7 @@ BBFileStream* c_FileStream::m_OpenStream(String t_path,String t_mode){ } c_FileStream* c_FileStream::m_new(String t_path,String t_mode){ c_Stream::m_new(); - m__stream=m_OpenStream(t_path,t_mode); + gc_assign(m__stream,m_OpenStream(t_path,t_mode)); if(!((m__stream)!=0)){ bbError(String(L"Failed to open stream",21)); } @@ -21121,7 +21345,7 @@ c_FileStream* c_FileStream::m_new(String t_path,String t_mode){ } c_FileStream* c_FileStream::m_new2(BBFileStream* t_stream){ c_Stream::m_new(); - m__stream=t_stream; + gc_assign(m__stream,t_stream); return this; } c_FileStream* c_FileStream::m_new3(){ @@ -21156,6 +21380,7 @@ int c_FileStream::p_Seek(int t_position){ } void c_FileStream::mark(){ c_Stream::mark(); + gc_mark_q(m__stream); } c_DataBuffer::c_DataBuffer(){ } @@ -22600,6 +22825,7 @@ void c_List9::p_RemoveLast5(c_ModuleDecl* t_value){ } void c_List9::mark(){ Object::mark(); + gc_mark_q(m__head); } c_Node16::c_Node16(){ m__succ=0; @@ -22607,30 +22833,33 @@ c_Node16::c_Node16(){ m__data=0; } c_Node16* c_Node16::m_new(c_Node16* t_succ,c_Node16* t_pred,c_ModuleDecl* t_data){ - m__succ=t_succ; - m__pred=t_pred; - m__succ->m__pred=this; - m__pred->m__succ=this; - m__data=t_data; + gc_assign(m__succ,t_succ); + gc_assign(m__pred,t_pred); + gc_assign(m__succ->m__pred,this); + gc_assign(m__pred->m__succ,this); + gc_assign(m__data,t_data); return this; } c_Node16* c_Node16::m_new2(){ return this; } int c_Node16::p_Remove(){ - m__succ->m__pred=m__pred; - m__pred->m__succ=m__succ; + gc_assign(m__succ->m__pred,m__pred); + gc_assign(m__pred->m__succ,m__succ); return 0; } void c_Node16::mark(){ Object::mark(); + gc_mark_q(m__succ); + gc_mark_q(m__pred); + gc_mark_q(m__data); } c_HeadNode9::c_HeadNode9(){ } c_HeadNode9* c_HeadNode9::m_new(){ c_Node16::m_new2(); - m__succ=(this); - m__pred=(this); + gc_assign(m__succ,(this)); + gc_assign(m__pred,(this)); return this; } void c_HeadNode9::mark(){ @@ -22641,8 +22870,8 @@ c_Enumerator5::c_Enumerator5(){ m__curr=0; } c_Enumerator5* c_Enumerator5::m_new(c_List5* t_list){ - m__list=t_list; - m__curr=t_list->m__head->m__succ; + gc_assign(m__list,t_list); + gc_assign(m__curr,t_list->m__head->m__succ); return this; } c_Enumerator5* c_Enumerator5::m_new2(){ @@ -22650,17 +22879,19 @@ c_Enumerator5* c_Enumerator5::m_new2(){ } bool c_Enumerator5::p_HasNext(){ while(m__curr->m__succ->m__pred!=m__curr){ - m__curr=m__curr->m__succ; + gc_assign(m__curr,m__curr->m__succ); } return m__curr!=m__list->m__head; } c_Stmt* c_Enumerator5::p_NextObject(){ c_Stmt* t_data=m__curr->m__data; - m__curr=m__curr->m__succ; + gc_assign(m__curr,m__curr->m__succ); return t_data; } void c_Enumerator5::mark(){ Object::mark(); + gc_mark_q(m__list); + gc_mark_q(m__curr); } c_InvokeExpr::c_InvokeExpr(){ m_decl=0; @@ -22668,8 +22899,8 @@ c_InvokeExpr::c_InvokeExpr(){ } c_InvokeExpr* c_InvokeExpr::m_new(c_FuncDecl* t_decl,Array t_args){ c_Expr::m_new(); - this->m_decl=t_decl; - this->m_args=t_args; + gc_assign(this->m_decl,t_decl); + gc_assign(this->m_args,t_args); return this; } c_InvokeExpr* c_InvokeExpr::m_new2(){ @@ -22680,8 +22911,8 @@ c_Expr* c_InvokeExpr::p_Semant(){ if((m_exprType)!=0){ return (this); } - m_exprType=m_decl->m_retType; - m_args=p_CastArgs(m_args,m_decl); + gc_assign(m_exprType,m_decl->m_retType); + gc_assign(m_args,p_CastArgs(m_args,m_decl)); return (this); } String c_InvokeExpr::p_ToString(){ @@ -22703,6 +22934,8 @@ String c_InvokeExpr::p_TransStmt(){ } void c_InvokeExpr::mark(){ c_Expr::mark(); + gc_mark_q(m_decl); + gc_mark_q(m_args); } c_StmtExpr::c_StmtExpr(){ m_stmt=0; @@ -22710,8 +22943,8 @@ c_StmtExpr::c_StmtExpr(){ } c_StmtExpr* c_StmtExpr::m_new(c_Stmt* t_stmt,c_Expr* t_expr){ c_Expr::m_new(); - this->m_stmt=t_stmt; - this->m_expr=t_expr; + gc_assign(this->m_stmt,t_stmt); + gc_assign(this->m_expr,t_expr); return this; } c_StmtExpr* c_StmtExpr::m_new2(){ @@ -22723,8 +22956,8 @@ c_Expr* c_StmtExpr::p_Semant(){ return (this); } m_stmt->p_Semant(); - m_expr=m_expr->p_Semant(); - m_exprType=m_expr->m_exprType; + gc_assign(m_expr,m_expr->p_Semant()); + gc_assign(m_exprType,m_expr->m_exprType); return (this); } c_Expr* c_StmtExpr::p_Copy(){ @@ -22738,6 +22971,8 @@ String c_StmtExpr::p_Trans(){ } void c_StmtExpr::mark(){ c_Expr::mark(); + gc_mark_q(m_stmt); + gc_mark_q(m_expr); } c_MemberVarExpr::c_MemberVarExpr(){ m_expr=0; @@ -22745,8 +22980,8 @@ c_MemberVarExpr::c_MemberVarExpr(){ } c_MemberVarExpr* c_MemberVarExpr::m_new(c_Expr* t_expr,c_VarDecl* t_decl){ c_Expr::m_new(); - this->m_expr=t_expr; - this->m_decl=t_decl; + gc_assign(this->m_expr,t_expr); + gc_assign(this->m_decl,t_decl); return this; } c_MemberVarExpr* c_MemberVarExpr::m_new2(){ @@ -22760,7 +22995,7 @@ c_Expr* c_MemberVarExpr::p_Semant(){ if(!((m_decl->p_IsSemanted())!=0)){ bb_config_InternalErr(String(L"Internal error",14)); } - m_exprType=m_decl->m_type; + gc_assign(m_exprType,m_decl->m_type); return (this); } String c_MemberVarExpr::p_ToString(){ @@ -22780,13 +23015,15 @@ String c_MemberVarExpr::p_TransVar(){ } void c_MemberVarExpr::mark(){ c_Expr::mark(); + gc_mark_q(m_expr); + gc_mark_q(m_decl); } c_VarExpr::c_VarExpr(){ m_decl=0; } c_VarExpr* c_VarExpr::m_new(c_VarDecl* t_decl){ c_Expr::m_new(); - this->m_decl=t_decl; + gc_assign(this->m_decl,t_decl); return this; } c_VarExpr* c_VarExpr::m_new2(){ @@ -22800,7 +23037,7 @@ c_Expr* c_VarExpr::p_Semant(){ if(!((m_decl->p_IsSemanted())!=0)){ bb_config_InternalErr(String(L"Internal error",14)); } - m_exprType=m_decl->m_type; + gc_assign(m_exprType,m_decl->m_type); return (this); } String c_VarExpr::p_ToString(){ @@ -22822,6 +23059,7 @@ String c_VarExpr::p_TransVar(){ } void c_VarExpr::mark(){ c_Expr::mark(); + gc_mark_q(m_decl); } int bb_decl__loopnest; c_Map8::c_Map8(){ @@ -22855,42 +23093,42 @@ c_FuncDeclList* c_Map8::p_Get(String t_key){ } int c_Map8::p_RotateLeft8(c_Node17* t_node){ c_Node17* t_child=t_node->m_right; - t_node->m_right=t_child->m_left; + gc_assign(t_node->m_right,t_child->m_left); if((t_child->m_left)!=0){ - t_child->m_left->m_parent=t_node; + gc_assign(t_child->m_left->m_parent,t_node); } - t_child->m_parent=t_node->m_parent; + gc_assign(t_child->m_parent,t_node->m_parent); if((t_node->m_parent)!=0){ if(t_node==t_node->m_parent->m_left){ - t_node->m_parent->m_left=t_child; + gc_assign(t_node->m_parent->m_left,t_child); }else{ - t_node->m_parent->m_right=t_child; + gc_assign(t_node->m_parent->m_right,t_child); } }else{ - m_root=t_child; + gc_assign(m_root,t_child); } - t_child->m_left=t_node; - t_node->m_parent=t_child; + gc_assign(t_child->m_left,t_node); + gc_assign(t_node->m_parent,t_child); return 0; } int c_Map8::p_RotateRight8(c_Node17* t_node){ c_Node17* t_child=t_node->m_left; - t_node->m_left=t_child->m_right; + gc_assign(t_node->m_left,t_child->m_right); if((t_child->m_right)!=0){ - t_child->m_right->m_parent=t_node; + gc_assign(t_child->m_right->m_parent,t_node); } - t_child->m_parent=t_node->m_parent; + gc_assign(t_child->m_parent,t_node->m_parent); if((t_node->m_parent)!=0){ if(t_node==t_node->m_parent->m_right){ - t_node->m_parent->m_right=t_child; + gc_assign(t_node->m_parent->m_right,t_child); }else{ - t_node->m_parent->m_left=t_child; + gc_assign(t_node->m_parent->m_left,t_child); } }else{ - m_root=t_child; + gc_assign(m_root,t_child); } - t_child->m_right=t_node; - t_node->m_parent=t_child; + gc_assign(t_child->m_right,t_node); + gc_assign(t_node->m_parent,t_child); return 0; } int c_Map8::p_InsertFixup8(c_Node17* t_node){ @@ -22945,7 +23183,7 @@ bool c_Map8::p_Set8(String t_key,c_FuncDeclList* t_value){ if(t_cmp<0){ t_node=t_node->m_left; }else{ - t_node->m_value=t_value; + gc_assign(t_node->m_value,t_value); return false; } } @@ -22953,18 +23191,19 @@ bool c_Map8::p_Set8(String t_key,c_FuncDeclList* t_value){ t_node=(new c_Node17)->m_new(t_key,t_value,-1,t_parent); if((t_parent)!=0){ if(t_cmp>0){ - t_parent->m_right=t_node; + gc_assign(t_parent->m_right,t_node); }else{ - t_parent->m_left=t_node; + gc_assign(t_parent->m_left,t_node); } p_InsertFixup8(t_node); }else{ - m_root=t_node; + gc_assign(m_root,t_node); } return true; } void c_Map8::mark(){ Object::mark(); + gc_mark_q(m_root); } c_StringMap8::c_StringMap8(){ } @@ -22988,9 +23227,9 @@ c_Node17::c_Node17(){ } c_Node17* c_Node17::m_new(String t_key,c_FuncDeclList* t_value,int t_color,c_Node17* t_parent){ this->m_key=t_key; - this->m_value=t_value; + gc_assign(this->m_value,t_value); this->m_color=t_color; - this->m_parent=t_parent; + gc_assign(this->m_parent,t_parent); return this; } c_Node17* c_Node17::m_new2(){ @@ -22998,6 +23237,10 @@ c_Node17* c_Node17::m_new2(){ } void c_Node17::mark(){ Object::mark(); + gc_mark_q(m_right); + gc_mark_q(m_left); + gc_mark_q(m_value); + gc_mark_q(m_parent); } c_Map9::c_Map9(){ m_root=0; @@ -23026,42 +23269,42 @@ bool c_Map9::p_Contains(String t_key){ } int c_Map9::p_RotateLeft9(c_Node18* t_node){ c_Node18* t_child=t_node->m_right; - t_node->m_right=t_child->m_left; + gc_assign(t_node->m_right,t_child->m_left); if((t_child->m_left)!=0){ - t_child->m_left->m_parent=t_node; + gc_assign(t_child->m_left->m_parent,t_node); } - t_child->m_parent=t_node->m_parent; + gc_assign(t_child->m_parent,t_node->m_parent); if((t_node->m_parent)!=0){ if(t_node==t_node->m_parent->m_left){ - t_node->m_parent->m_left=t_child; + gc_assign(t_node->m_parent->m_left,t_child); }else{ - t_node->m_parent->m_right=t_child; + gc_assign(t_node->m_parent->m_right,t_child); } }else{ - m_root=t_child; + gc_assign(m_root,t_child); } - t_child->m_left=t_node; - t_node->m_parent=t_child; + gc_assign(t_child->m_left,t_node); + gc_assign(t_node->m_parent,t_child); return 0; } int c_Map9::p_RotateRight9(c_Node18* t_node){ c_Node18* t_child=t_node->m_left; - t_node->m_left=t_child->m_right; + gc_assign(t_node->m_left,t_child->m_right); if((t_child->m_right)!=0){ - t_child->m_right->m_parent=t_node; + gc_assign(t_child->m_right->m_parent,t_node); } - t_child->m_parent=t_node->m_parent; + gc_assign(t_child->m_parent,t_node->m_parent); if((t_node->m_parent)!=0){ if(t_node==t_node->m_parent->m_right){ - t_node->m_parent->m_right=t_child; + gc_assign(t_node->m_parent->m_right,t_child); }else{ - t_node->m_parent->m_left=t_child; + gc_assign(t_node->m_parent->m_left,t_child); } }else{ - m_root=t_child; + gc_assign(m_root,t_child); } - t_child->m_right=t_node; - t_node->m_parent=t_child; + gc_assign(t_child->m_right,t_node); + gc_assign(t_node->m_parent,t_child); return 0; } int c_Map9::p_InsertFixup9(c_Node18* t_node){ @@ -23116,7 +23359,7 @@ bool c_Map9::p_Set9(String t_key,c_FuncDecl* t_value){ if(t_cmp<0){ t_node=t_node->m_left; }else{ - t_node->m_value=t_value; + gc_assign(t_node->m_value,t_value); return false; } } @@ -23124,18 +23367,19 @@ bool c_Map9::p_Set9(String t_key,c_FuncDecl* t_value){ t_node=(new c_Node18)->m_new(t_key,t_value,-1,t_parent); if((t_parent)!=0){ if(t_cmp>0){ - t_parent->m_right=t_node; + gc_assign(t_parent->m_right,t_node); }else{ - t_parent->m_left=t_node; + gc_assign(t_parent->m_left,t_node); } p_InsertFixup9(t_node); }else{ - m_root=t_node; + gc_assign(m_root,t_node); } return true; } void c_Map9::mark(){ Object::mark(); + gc_mark_q(m_root); } c_StringMap9::c_StringMap9(){ } @@ -23159,9 +23403,9 @@ c_Node18::c_Node18(){ } c_Node18* c_Node18::m_new(String t_key,c_FuncDecl* t_value,int t_color,c_Node18* t_parent){ this->m_key=t_key; - this->m_value=t_value; + gc_assign(this->m_value,t_value); this->m_color=t_color; - this->m_parent=t_parent; + gc_assign(this->m_parent,t_parent); return this; } c_Node18* c_Node18::m_new2(){ @@ -23169,6 +23413,10 @@ c_Node18* c_Node18::m_new2(){ } void c_Node18::mark(){ Object::mark(); + gc_mark_q(m_right); + gc_mark_q(m_left); + gc_mark_q(m_value); + gc_mark_q(m_parent); } c_Map10::c_Map10(){ m_root=0; @@ -23201,42 +23449,42 @@ c_StringSet* c_Map10::p_Get(String t_key){ } int c_Map10::p_RotateLeft10(c_Node19* t_node){ c_Node19* t_child=t_node->m_right; - t_node->m_right=t_child->m_left; + gc_assign(t_node->m_right,t_child->m_left); if((t_child->m_left)!=0){ - t_child->m_left->m_parent=t_node; + gc_assign(t_child->m_left->m_parent,t_node); } - t_child->m_parent=t_node->m_parent; + gc_assign(t_child->m_parent,t_node->m_parent); if((t_node->m_parent)!=0){ if(t_node==t_node->m_parent->m_left){ - t_node->m_parent->m_left=t_child; + gc_assign(t_node->m_parent->m_left,t_child); }else{ - t_node->m_parent->m_right=t_child; + gc_assign(t_node->m_parent->m_right,t_child); } }else{ - m_root=t_child; + gc_assign(m_root,t_child); } - t_child->m_left=t_node; - t_node->m_parent=t_child; + gc_assign(t_child->m_left,t_node); + gc_assign(t_node->m_parent,t_child); return 0; } int c_Map10::p_RotateRight10(c_Node19* t_node){ c_Node19* t_child=t_node->m_left; - t_node->m_left=t_child->m_right; + gc_assign(t_node->m_left,t_child->m_right); if((t_child->m_right)!=0){ - t_child->m_right->m_parent=t_node; + gc_assign(t_child->m_right->m_parent,t_node); } - t_child->m_parent=t_node->m_parent; + gc_assign(t_child->m_parent,t_node->m_parent); if((t_node->m_parent)!=0){ if(t_node==t_node->m_parent->m_right){ - t_node->m_parent->m_right=t_child; + gc_assign(t_node->m_parent->m_right,t_child); }else{ - t_node->m_parent->m_left=t_child; + gc_assign(t_node->m_parent->m_left,t_child); } }else{ - m_root=t_child; + gc_assign(m_root,t_child); } - t_child->m_right=t_node; - t_node->m_parent=t_child; + gc_assign(t_child->m_right,t_node); + gc_assign(t_node->m_parent,t_child); return 0; } int c_Map10::p_InsertFixup10(c_Node19* t_node){ @@ -23291,7 +23539,7 @@ bool c_Map10::p_Set10(String t_key,c_StringSet* t_value){ if(t_cmp<0){ t_node=t_node->m_left; }else{ - t_node->m_value=t_value; + gc_assign(t_node->m_value,t_value); return false; } } @@ -23299,18 +23547,19 @@ bool c_Map10::p_Set10(String t_key,c_StringSet* t_value){ t_node=(new c_Node19)->m_new(t_key,t_value,-1,t_parent); if((t_parent)!=0){ if(t_cmp>0){ - t_parent->m_right=t_node; + gc_assign(t_parent->m_right,t_node); }else{ - t_parent->m_left=t_node; + gc_assign(t_parent->m_left,t_node); } p_InsertFixup10(t_node); }else{ - m_root=t_node; + gc_assign(m_root,t_node); } return true; } void c_Map10::mark(){ Object::mark(); + gc_mark_q(m_root); } c_StringMap10::c_StringMap10(){ } @@ -23334,9 +23583,9 @@ c_Node19::c_Node19(){ } c_Node19* c_Node19::m_new(String t_key,c_StringSet* t_value,int t_color,c_Node19* t_parent){ this->m_key=t_key; - this->m_value=t_value; + gc_assign(this->m_value,t_value); this->m_color=t_color; - this->m_parent=t_parent; + gc_assign(this->m_parent,t_parent); return this; } c_Node19* c_Node19::m_new2(){ @@ -23344,14 +23593,18 @@ c_Node19* c_Node19::m_new2(){ } void c_Node19::mark(){ Object::mark(); + gc_mark_q(m_right); + gc_mark_q(m_left); + gc_mark_q(m_value); + gc_mark_q(m_parent); } c_Enumerator6::c_Enumerator6(){ m__list=0; m__curr=0; } c_Enumerator6* c_Enumerator6::m_new(c_List8* t_list){ - m__list=t_list; - m__curr=t_list->m__head->m__succ; + gc_assign(m__list,t_list); + gc_assign(m__curr,t_list->m__head->m__succ); return this; } c_Enumerator6* c_Enumerator6::m_new2(){ @@ -23359,17 +23612,19 @@ c_Enumerator6* c_Enumerator6::m_new2(){ } bool c_Enumerator6::p_HasNext(){ while(m__curr->m__succ->m__pred!=m__curr){ - m__curr=m__curr->m__succ; + gc_assign(m__curr,m__curr->m__succ); } return m__curr!=m__list->m__head; } c_GlobalDecl* c_Enumerator6::p_NextObject(){ c_GlobalDecl* t_data=m__curr->m__data; - m__curr=m__curr->m__succ; + gc_assign(m__curr,m__curr->m__succ); return t_data; } void c_Enumerator6::mark(){ Object::mark(); + gc_mark_q(m__list); + gc_mark_q(m__curr); } c_Stack9::c_Stack9(){ m_data=Array(); @@ -23379,14 +23634,14 @@ c_Stack9* c_Stack9::m_new(){ return this; } c_Stack9* c_Stack9::m_new2(Array t_data){ - this->m_data=t_data.Slice(0); + gc_assign(this->m_data,t_data.Slice(0)); this->m_length=t_data.Length(); return this; } c_LocalDecl* c_Stack9::m_NIL; void c_Stack9::p_Clear(){ for(int t_i=0;t_im_data.Length()){ - m_data=m_data.Resize(bb_math_Max(m_length*2+10,t_newlength)); + gc_assign(m_data,m_data.Resize(bb_math_Max(m_length*2+10,t_newlength))); } } m_length=t_newlength; @@ -23410,9 +23665,9 @@ int c_Stack9::p_Length2(){ } void c_Stack9::p_Push25(c_LocalDecl* t_value){ if(m_length==m_data.Length()){ - m_data=m_data.Resize(m_length*2+10); + gc_assign(m_data,m_data.Resize(m_length*2+10)); } - m_data[m_length]=t_value; + gc_assign(m_data[m_length],t_value); m_length+=1; } void c_Stack9::p_Push26(Array t_values,int t_offset,int t_count){ @@ -23425,13 +23680,14 @@ void c_Stack9::p_Push27(Array t_values,int t_offset){ } void c_Stack9::mark(){ Object::mark(); + gc_mark_q(m_data); } c_Enumerator7::c_Enumerator7(){ m_stack=0; m_index=0; } c_Enumerator7* c_Enumerator7::m_new(c_Stack9* t_stack){ - this->m_stack=t_stack; + gc_assign(this->m_stack,t_stack); return this; } c_Enumerator7* c_Enumerator7::m_new2(){ @@ -23446,6 +23702,7 @@ c_LocalDecl* c_Enumerator7::p_NextObject(){ } void c_Enumerator7::mark(){ Object::mark(); + gc_mark_q(m_stack); } int bbInit(){ GC_CTOR @@ -23487,6 +23744,28 @@ int bbInit(){ return 0; } void gc_mark(){ + gc_mark_q(c_Type::m_stringType); + gc_mark_q(bb_config__cfgScope); + gc_mark_q(bb_config__cfgScopeStack); + gc_mark_q(bb_decl__env); + gc_mark_q(bb_decl__envStack); + gc_mark_q(c_Toker::m__keywords); + gc_mark_q(c_Toker::m__symbols); + gc_mark_q(c_Type::m_intType); + gc_mark_q(c_Type::m_floatType); + gc_mark_q(c_Type::m_boolType); + gc_mark_q(c_Type::m_voidType); + gc_mark_q(c_Type::m_objectType); + gc_mark_q(c_Type::m_throwableType); + gc_mark_q(c_Type::m_emptyArrayType); + gc_mark_q(c_Type::m_nullObjectType); + gc_mark_q(c_Stack7::m_NIL); + gc_mark_q(bb_config__errStack); + gc_mark_q(c_Stack2::m_NIL); + gc_mark_q(c_Stack8::m_NIL); + gc_mark_q(bb_translator__trans); + gc_mark_q(c_ClassDecl::m_nullObjectClass); + gc_mark_q(c_Stack9::m_NIL); } //${TRANSCODE_END}