[ {"type":"KeywordReserved","value":"const"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"std"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"@import"}, {"type":"Punctuation","value":"("}, {"type":"LiteralString","value":"\"std.zig\""}, {"type":"Punctuation","value":");"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordReserved","value":"const"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"builtin"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"std"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"builtin"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordReserved","value":"const"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"testing"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"std"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"testing"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordReserved","value":"pub"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"fn"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"once"}, {"type":"Punctuation","value":"("}, {"type":"KeywordReserved","value":"comptime"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"f"}, {"type":"Operator","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"fn"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"()"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordType","value":"void"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"Once"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"f"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"return"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"Once"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"f"}, {"type":"Punctuation","value":"){};"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"CommentSingle","value":"/// An object that executes the function `f` just once.\n"}, {"type":"KeywordReserved","value":"pub"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"fn"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"Once"}, {"type":"Punctuation","value":"("}, {"type":"KeywordReserved","value":"comptime"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"f"}, {"type":"Operator","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"fn"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"()"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordType","value":"void"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordType","value":"type"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"return"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"struct"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Name","value":"done"}, {"type":"Operator","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordType","value":"bool"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"false"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":"\n "}, {"type":"Name","value":"mutex"}, {"type":"Operator","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"std"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"Mutex"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"std"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"Mutex"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"init"}, {"type":"Punctuation","value":"(),"}, {"type":"TextWhitespace","value":"\n\n "}, {"type":"CommentSingle","value":"/// Call the function `f`.\n"}, {"type":"TextWhitespace","value":" "}, {"type":"CommentSingle","value":"/// If `call` is invoked multiple times `f` will be executed only the\n"}, {"type":"TextWhitespace","value":" "}, {"type":"CommentSingle","value":"/// first time.\n"}, {"type":"TextWhitespace","value":" "}, {"type":"CommentSingle","value":"/// The invocations are thread-safe.\n"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordReserved","value":"pub"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"fn"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"call"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"self"}, {"type":"Operator","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"*"}, {"type":"NameBuiltin","value":"@This"}, {"type":"Punctuation","value":"())"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordType","value":"void"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"if"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameBuiltin","value":"@atomicLoad"}, {"type":"Punctuation","value":"("}, {"type":"KeywordType","value":"bool"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"\u0026"}, {"type":"Name","value":"self"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"done"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"Acquire"}, {"type":"Punctuation","value":"))"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"return"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n\n "}, {"type":"Keyword","value":"return"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"self"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"callSlow"}, {"type":"Punctuation","value":"();"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n\n "}, {"type":"Keyword","value":"fn"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"callSlow"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"self"}, {"type":"Operator","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"*"}, {"type":"NameBuiltin","value":"@This"}, {"type":"Punctuation","value":"())"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordType","value":"void"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameBuiltin","value":"@setCold"}, {"type":"Punctuation","value":"("}, {"type":"KeywordConstant","value":"true"}, {"type":"Punctuation","value":");"}, {"type":"TextWhitespace","value":"\n\n "}, {"type":"KeywordReserved","value":"const"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"T"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"self"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"mutex"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"acquire"}, {"type":"Punctuation","value":"();"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"defer"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"T"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"release"}, {"type":"Punctuation","value":"();"}, {"type":"TextWhitespace","value":"\n\n "}, {"type":"CommentSingle","value":"// The first thread to acquire the mutex gets to run the initializer\n"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"if"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Operator","value":"!"}, {"type":"Name","value":"self"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"done"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Name","value":"f"}, {"type":"Punctuation","value":"();"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameBuiltin","value":"@atomicStore"}, {"type":"Punctuation","value":"("}, {"type":"KeywordType","value":"bool"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"\u0026"}, {"type":"Name","value":"self"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"done"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"true"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"Release"}, {"type":"Punctuation","value":");"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"};"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordReserved","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"global_number"}, {"type":"Operator","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordType","value":"i32"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumberInteger","value":"0"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordReserved","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"global_once"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"once"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"incr"}, {"type":"Punctuation","value":");"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Keyword","value":"fn"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"incr"}, {"type":"Punctuation","value":"()"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordType","value":"void"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Name","value":"global_number"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"+="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumberInteger","value":"1"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Keyword","value":"test"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"\"Once executes its function just once\""}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"if"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"builtin"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"single_threaded"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Name","value":"global_once"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"call"}, {"type":"Punctuation","value":"();"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Name","value":"global_once"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"call"}, {"type":"Punctuation","value":"();"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"else"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"KeywordReserved","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"threads"}, {"type":"Operator","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"["}, {"type":"LiteralNumberInteger","value":"10"}, {"type":"Punctuation","value":"]"}, {"type":"Operator","value":"*"}, {"type":"Name","value":"std"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"Thread"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"undefined"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"defer"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"for"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"threads"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"|"}, {"type":"Name","value":"handle"}, {"type":"Operator","value":"|"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"handle"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"wait"}, {"type":"Punctuation","value":"();"}, {"type":"TextWhitespace","value":"\n\n "}, {"type":"Keyword","value":"for"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"threads"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"|*"}, {"type":"Name","value":"handle"}, {"type":"Operator","value":"|"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Name","value":"handle"}, {"type":"Punctuation","value":"."}, {"type":"Operator","value":"*"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"try"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"std"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"Thread"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"spawn"}, {"type":"Punctuation","value":"("}, {"type":"NameBuiltin","value":"@as"}, {"type":"Punctuation","value":"("}, {"type":"KeywordType","value":"u8"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumberInteger","value":"0"}, {"type":"Punctuation","value":"),"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"struct"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"fn"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"thread_fn"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"x"}, {"type":"Operator","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordType","value":"u8"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordType","value":"void"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Name","value":"global_once"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"call"}, {"type":"Punctuation","value":"();"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"}."}, {"type":"Name","value":"thread_fn"}, {"type":"Punctuation","value":");"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n\n "}, {"type":"Name","value":"testing"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"expectEqual"}, {"type":"Punctuation","value":"("}, {"type":"NameBuiltin","value":"@as"}, {"type":"Punctuation","value":"("}, {"type":"KeywordType","value":"i32"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumberInteger","value":"1"}, {"type":"Punctuation","value":"),"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"global_number"}, {"type":"Punctuation","value":");"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n"} ]