func init // adds using namespace sys.add_use('System.Threading') // initialize managers this.delegate = sys.get_undef_manager('ThreadProc') // initialize instance params = this.props('Constructor').value if(params == 'None') if(isdef("Extern")) sys.add_var(this.name, 'Thread') end else if(params == 'Constructor') params = '' + 'new ThreadStart(' + (linked("onStart") ? 'ThreadProc' + this.id : this.delegate) + ')' elseif(params == 'Constructor2') params = '' + 'new ThreadStart(' + (linked("onStart") ? 'ThreadProc' + this.id : this.delegate) + ', '+ d("MaxStackSize") + ')' end sys.add_object(this.codename, 'Thread', params) // initialize properties this.set_props(blk_init) end // makes implementation methods for properties sys._prop_init('ApartmentState', 1, 1, 0) sys._prop_init('CurrentContext', 1, 0, 0, 'Thread') sys._prop_init('CurrentCulture', 1, 1, 0) sys._prop_init('CurrentPrincipal', 1, 1, 0, 'Thread') sys._prop_init('CurrentThread', 1, 0, 0, 'Thread') sys._prop_init('CurrentUICulture', 1, 1, 0) sys._prop_init('ExecutionContext', 1, 0, 0) sys._prop_init('IsAlive', 1, 0, 104) sys._prop_init('IsBackground', 1, 1, 104) sys._prop_init('IsThreadPoolThread', 1, 0, 104) sys._prop_init('ManagedThreadId', 1, 0, 1) sys._prop_init('Name', 1, 1, 2) sys._prop_init('Priority', 1, 1, 0) sys._prop_init('ThreadState', 1, 0, 0) // makes implementation of methods as properties sys._mtd_as_prop_init('AllocateDataSlot()') sys._mtd_as_prop_init('GetApartmentState()') sys._mtd_as_prop_init('GetCompressedStack()') sys._mtd_as_prop_init('GetDomain()') sys._mtd_as_prop_init('GetDomainID()') sys._mtd_as_prop_init('GetHashCode()') sys._mtd_as_prop_init('Yield()') sys._mtd_as_prop_init('Thread') // makes implementation of simple methods sys._method_init('Abort') sys._method_init('BeginCriticalRegion') sys._method_init('BeginThreadAffinity') sys._method_init('DisableComObjectEagerCleanup') sys._method_init('EndCriticalRegion') sys._method_init('EndThreadAffinity') sys._method_init('Interrupt') sys._method_init('Join') sys._method_init('MemoryBarrier') sys._method_init('ResetAbort') sys._method_init('Resume') sys._method_init('Start') sys._method_init('Suspend') // build delegate if(linked("onStart")) ini = block.reg("init").inc() if(pos(sys.get_frame_above(), 'UserClass', 0)) inits.add(ini) else this.parent.get_parent_sdk().class_events.add(ini) end // store original blocks sys.blocks_store() // create event code if(linked("doStart2")) event("onStart", 'data') else event("onStart") end ini.inc().println('private ', ((sys.get_project() == "Console") ? 'static ' : ''), 'void ThreadProc', this.id, linked("doStart2") ? '(object data) {' : '() {') if(not blk_lvars.empty()) ini.copyhere(blk_lvars) end ini.copyhere(blk) .println('}').dec() // restore original blocks sys.blocks_restore() end end func doStart2(data) blk.println(this.codename, '.Start(', d("parameter"), ');') end func doConstructor(data) blk.println(isdef("Extern") ? '' : 'Thread ', this.codename, ' = new Thread(', linked("onStart") ? 'ThreadProc' + this.id : this.delegate, ');') this.set_props(blk) end func doConstructor2(data) blk.println(isdef("Extern") ? '' : 'Thread ', this.codename, ' = new Thread(', linked("onStart") ? 'ThreadProc' + this.id : this.delegate + ', ' + d("MaxStackSize"), ');') this.set_props(blk) end func doAbort2(data) blk.println(this.codename, '.Abort(', d("stateInfo"), ');') end func doAllocateNamedDataSlot(data) if(linked("onAllocateNamedDataSlot")) event("onAllocateNamedDataSlot", 'Thread.AllocateNamedDataSlot(' + d("dataslot") + ')') else blk.println('Thread.AllocateNamedDataSlot(', d("dataslot"), ');') end end func doFreeNamedDataSlot(data) blk.println('Thread.FreeNamedDataSlot(', d("dataslot"), ');') end func doGetData(data) if(linked("onGetData")) event("onGetData", 'Thread.GetData(' + d("slot") + ')') else blk.println('Thread.GetData(', d("slot"), ');') end end func doGetNamedDataSlot(data) if(linked("onGetNamedDataSlot")) event("onGetNamedDataSlot", 'Thread.GetNamedDataSlot(' + d("dataslot") + ')') else blk.println('Thread.GetNamedDataSlot(', d("dataslot"), ');') end end func doJoin2(data) if(linked("onJoin")) event("onJoin", this.codename + '.Join(' + d("millisecondsTimeout") + ')') else blk.println(this.codename, '.Join(', d("millisecondsTimeout"), ');') end end func doJoin3(data) if(linked("onJoin")) event("onJoin", this.codename + '.Join(' + d("timeout") + ')') else blk.println(this.codename, '.Join(', d("timeout"), ');') end end func doSetApartmentState(data) blk.println(this.codename, '.SetApartmentState(', d("state"), ');') end func doSetCompressedStack(data) blk.println(this.codename, '.SetCompressedStack(', d("stack"), ');') end func doSetData(data) blk.println('Thread.SetData(', d("slot"), ', ', d("data"), ');') end func doSetProcessorAffinity(data) blk.println(this.codename, '.SetProcessorAffinity(', 'params ', d("cpus"), ');') end func doSleep(data) blk.println('Thread.Sleep(', d("millisecondsTimeout"), ');') end func doSleep2(data) blk.println('Thread.Sleep(', d("timeout"), ');') end func doSpinWait(data) blk.println('Thread.SpinWait(', d("iterations"), ');') end func doTrySetApartmentState(data) if(linked("onTrySetApartmentState")) event("onTrySetApartmentState", this.codename + '.TrySetApartmentState(' + d("state") + ')') else blk.println(this.codename, '.TrySetApartmentState(', d("state"), ');') end end func doVolatileRead(data) if(linked("onVolatileRead")) event("onVolatileRead", 'Thread.VolatileRead(' + 'ref ' + d("address") + ')') else blk.println('Thread.VolatileRead(', 'ref ', d("address"), ');') end end func doVolatileRead2(data) if(linked("onVolatileRead")) event("onVolatileRead", 'Thread.VolatileRead(' + 'ref ' + d("address") + ')') else blk.println('Thread.VolatileRead(', 'ref ', d("address"), ');') end end func doVolatileRead3(data) if(linked("onVolatileRead")) event("onVolatileRead", 'Thread.VolatileRead(' + 'ref ' + d("address") + ')') else blk.println('Thread.VolatileRead(', 'ref ', d("address"), ');') end end func doVolatileRead4(data) if(linked("onVolatileRead")) event("onVolatileRead", 'Thread.VolatileRead(' + 'ref ' + d("address") + ')') else blk.println('Thread.VolatileRead(', 'ref ', d("address"), ');') end end func doVolatileRead5(data) if(linked("onVolatileRead")) event("onVolatileRead", 'Thread.VolatileRead(' + 'ref ' + d("address") + ')') else blk.println('Thread.VolatileRead(', 'ref ', d("address"), ');') end end func doVolatileRead6(data) if(linked("onVolatileRead")) event("onVolatileRead", 'Thread.VolatileRead(' + 'ref ' + d("address") + ')') else blk.println('Thread.VolatileRead(', 'ref ', d("address"), ');') end end func doVolatileRead7(data) if(linked("onVolatileRead")) event("onVolatileRead", 'Thread.VolatileRead(' + 'ref ' + d("address") + ')') else blk.println('Thread.VolatileRead(', 'ref ', d("address"), ');') end end func doVolatileRead8(data) if(linked("onVolatileRead")) event("onVolatileRead", 'Thread.VolatileRead(' + 'ref ' + d("address") + ')') else blk.println('Thread.VolatileRead(', 'ref ', d("address"), ');') end end func doVolatileRead9(data) if(linked("onVolatileRead")) event("onVolatileRead", 'Thread.VolatileRead(' + 'ref ' + d("address") + ')') else blk.println('Thread.VolatileRead(', 'ref ', d("address"), ');') end end func doVolatileRead10(data) if(linked("onVolatileRead")) event("onVolatileRead", 'Thread.VolatileRead(' + 'ref ' + d("address") + ')') else blk.println('Thread.VolatileRead(', 'ref ', d("address"), ');') end end func doVolatileRead11(data) if(linked("onVolatileRead")) event("onVolatileRead", 'Thread.VolatileRead(' + 'ref ' + d("address") + ')') else blk.println('Thread.VolatileRead(', 'ref ', d("address"), ');') end end func doVolatileRead12(data) if(linked("onVolatileRead")) event("onVolatileRead", 'Thread.VolatileRead(' + 'ref ' + d("address") + ')') else blk.println('Thread.VolatileRead(', 'ref ', d("address"), ');') end end func doVolatileRead13(data) if(linked("onVolatileRead")) event("onVolatileRead", 'Thread.VolatileRead(' + 'ref ' + d("address") + ')') else blk.println('Thread.VolatileRead(', 'ref ', d("address"), ');') end end func doVolatileWrite(data) blk.println('Thread.VolatileWrite(', 'ref ', d("address"), ', ', d("value"), ');') end func doVolatileWrite2(data) blk.println('Thread.VolatileWrite(', 'ref ', d("address"), ', ', d("value"), ');') end func doVolatileWrite3(data) blk.println('Thread.VolatileWrite(', 'ref ', d("address"), ', ', d("value"), ');') end func doVolatileWrite4(data) blk.println('Thread.VolatileWrite(', 'ref ', d("address"), ', ', d("value"), ');') end func doVolatileWrite5(data) blk.println('Thread.VolatileWrite(', 'ref ', d("address"), ', ', d("value"), ');') end func doVolatileWrite6(data) blk.println('Thread.VolatileWrite(', 'ref ', d("address"), ', ', d("value"), ');') end func doVolatileWrite7(data) blk.println('Thread.VolatileWrite(', 'ref ', d("address"), ', ', d("value"), ');') end func doVolatileWrite8(data) blk.println('Thread.VolatileWrite(', 'ref ', d("address"), ', ', d("value"), ');') end func doVolatileWrite9(data) blk.println('Thread.VolatileWrite(', 'ref ', d("address"), ', ', d("value"), ');') end func doVolatileWrite10(data) blk.println('Thread.VolatileWrite(', 'ref ', d("address"), ', ', d("value"), ');') end func doVolatileWrite11(data) blk.println('Thread.VolatileWrite(', 'ref ', d("address"), ', ', d("value"), ');') end func doVolatileWrite12(data) blk.println('Thread.VolatileWrite(', 'ref ', d("address"), ', ', d("value"), ');') end func doVolatileWrite13(data) blk.println('Thread.VolatileWrite(', 'ref ', d("address"), ', ', d("value"), ');') end func set_props(blkout) sys.set_typed_field(14, 'ApartmentState', '', 'System.Threading.ApartmentState', '', blkout) sys.set_typed_field(20, 'CurrentCulture', '', '', blkout) sys.set_typed_field(20, 'CurrentPrincipal', '', '', blkout) sys.set_typed_field(20, 'CurrentUICulture', '', '', blkout) sys.set_typed_field(104, 'IsBackground', '', '', blkout) sys.set_typed_field(2, 'Name', '', '', blkout) sys.set_typed_field(14, 'Priority', '', 'System.Threading.ThreadPriority', '', blkout) end