{"push_id":1461652767,"size":2,"distinct_size":2,"ref":"refs/heads/universal-panic","head":"4f3030b6945708c7bb4218ec7a2d0e287123fbfd","before":"ef8cf0ba677f002fef47c5682bbd41b21c39dda2","commits":[{"sha":"aa0a832f14c87357855c379b907974042c1b6420","author":{"name":"Brian Dickens","email":"1d28577c3a34c1ac08d512237ad32156e7267b61@hostilefork.com"},"message":"Failed optimizations only run prefix functions\n\nIt's not clear why an assert wasn't being triggered on this before,\nbut when a failed lookahead falls through and reuses the Get_Var()\nwork and leaves the eval_type as REB_WORD, then it implicitly is a\nprefix function call.","distinct":true,"url":"https://api.github.com/repos/hostilefork/rebol/commits/aa0a832f14c87357855c379b907974042c1b6420"},{"sha":"4f3030b6945708c7bb4218ec7a2d0e287123fbfd","author":{"name":"Brian Dickens","email":"1d28577c3a34c1ac08d512237ad32156e7267b61@hostilefork.com"},"message":"Clearer split between series info bits and series header flags\n\nThe original R3-Alpha flags on series were 8 bits:\n\n    SER_MARK = 1,  // Series was found during GC mark scan.\n    SER_KEEP = 1<<1, // Series is permanent, do not GC it.\n    SER_LOCK = 1<<2, // Series is locked, do not expand it\n    SER_EXT  = 1<<3, // Series is external (library), do not GC it.\n    SER_FREE = 1<<4, // mark series as removed\n    SER_BARE = 1<<5, // Series has no links to GC-able values\n    SER_PROT = 1<<6, // Series is protected from modification\n    SER_MON  = 1<<7, // Monitoring\n\nThese flags were very scarce.  Ren-C made a tradeoff in growing the\nsize of a series node from 5x(void*) to 8x(void*) in order to implement\na trick of embedding arrays of size 1 directly into the node, as well\nas other small series...plus other optimization tricks.  One of those\ntricks made sure a flag set could do internal termination, at the cost\nof 2 of the 32 used bits in the flag set.  Another trick reused flags\nbetween value headers and series nodes to provide c common header.\n(The word symbol table was also converted into being GC-able and\nunified with the series nodes... pairing cells for API handles being\nGC'able, etc. etc.)\n\nOne group of the new flags were in a field called \"header\" and another\nin a field called \"info\".  There was not much logic in what would put\ninformation in one place or the other.  Names like SERIES_FLAG_XXX and\nREBSER_FLAG_XXX were not very clear, either.\n\nThis is a full going-over of the flags, splitting them into either\nSERIES/ARRAY/CONTEXT_FLAG_XXX or SERIES_INFO_XXX.  A new concept is\nto put the flags that tend to change over the lifetime of the series\ninto `info`, while the ones that are unlikely to change go in `header`.\n\nAlso, this takes flags out of enum {} declarations, because they are\nusing REBUPT as an unsigned integer of pointer size.  enum sizes and\ntypes in C are not specified, so this uses the #define to get the\nREBUPT constants from the macros directly.  At the same time it goes\nahead and makes it possible to distinguish UTF-8 characters from\ninternal END markers.\n\n(It is still possible to make a change to distinguish free series nodes\nfrom UTF-8, if that becomes interesting for the diagnostics, but it\nwould not be a \"feature\".)\n\nThis also makes the sacrifice of using full bytes for the series width\nin the small series optimization as well as the datatype.  Those can\nbe read with a single operation on most architectures, and these are\nextremely common values to be extracted.","distinct":true,"url":"https://api.github.com/repos/hostilefork/rebol/commits/4f3030b6945708c7bb4218ec7a2d0e287123fbfd"}]}
{"actor":{"display_login":"hostilefork"}}