{"push_id":2467287349,"size":32,"distinct_size":29,"ref":"refs/heads/master","head":"2d0ff83acb34805a03da65256dc9359817a7989e","before":"51866392f20061ca016dec15ca0af3040da32e52","commits":[{"sha":"5fb1d22242bee20b672b5e9815b46a6b898114f5","author":{"name":"Brian Dickens","email":"6d130cd305f16d962de33d3d87602b04cea76901@gmail.com"},"message":"API REBVAL* managed by default, paired => singular\n\nIt was a goal for the API to be \"easy to use\" at the potential cost of\ninefficiency.  So an API-generated REBVAL* could be allocated, used,\nand left to be automatically cleaned up when the function frame it was\nallocated in ended.\n\nWith API use growing in the system, however, this would invite a kind\nof \"leak\" in code that would like to know if it was \"leaking\"--in the\nsense of burdening the garbage collector when it could be releasing\nhandles manually.  Also, some top level C code (such as the console)\nwould run indefinitely, meaning it would need to do lifetime management\nof its handles.\n\nSo as an interim measure, API handles were unmanaged.  This commit\nchanges it so that they are managed, however the GC will panic if it\nhas to free them in cases that aren't a fail().  So this doesn't change\nmuch except it is no longer needed to rebManage() a handle if you plan\nto call rebFail().\n\nIt also switches the API handles to live in singular REBSER instead of\n\"pairing\" REBSER.  It really is not strictly necessary that REBSER\nnodes be used at all for the containers of API handles (they could be\nin their own pool managed elsewhere, which would also make them easier\nto walk as roots without needing an independent pass).  But making them\nthe same size cuts down on definitions and enables greater reusability.\n\nThe reason to switch from a pairing to a singular array is in order to\nlocate a REBNOD* prior to the value payload, in the link field.  These\n\"underrun\" bytes can then be examined to discern a rebMalloc() data\nallocation from a REBVAL* handle...which cannot be done by looking at\nthe actual pointed-at data itself.","distinct":false,"url":"https://api.github.com/repos/codebybrett/ren-c/commits/5fb1d22242bee20b672b5e9815b46a6b898114f5"},{"sha":"e702c9715ece32962ca0c37af6b6f4e5eb68e08c","author":{"name":"Brian Dickens","email":"6d130cd305f16d962de33d3d87602b04cea76901@gmail.com"},"message":"Eliminate %root.r and %task.r, allow API roots during boot\n\nR3-Alpha had the concept of \"root series\" which held various series\nalive, even though they had no references in user code.  This would\nbe series like the mold buffer, or something like a plain empty block\nthat could be used many places.\n\nPractically speaking, these root series came down to being two arrays\nthat were hidden from the user.  These were the ROOT array and the\nTASK array, with the concept that in a multithreaded program each\nthread would get its own instance of the variables in TASK...while\nROOT would be global.\n\nRen-C introduced the idea of unmanaged series, and that a series would\nhave to be explicitly managed in order for the GC to pick it up.  This\nmeans that for anything that wasn't meant to be exposed to the user\nas a value (such as the mold buffer) it would be fine to just do a\nMake_Series() call to create it, and then a Free_Series() call at the\nend of the program.  By not putting the series into a REBVAL, it could\nbe accessed slightly faster (e.g. no need to say VAL_SERIES(mold_buf))\nand it would reduce the risk that these system arrays would become\nexposed to the user.\n\nAn additional mechanism also exists now for REBVAL* that want to have\nan indefinite lifetime, which is to use Alloc_Value().  So even if one\nwants a full value, it can be done without the ROOT or TASK arrays.\n\nThis simplifies matters by just not using arrays at all.  The Rebol\nfiles %task.r and %root.r can be eliminated in favor of plain PVAR\nand TVAR globals, and it means there doesn't need to be code generating\nC structures backing the arrays in %make-boot.r","distinct":false,"url":"https://api.github.com/repos/codebybrett/ren-c/commits/e702c9715ece32962ca0c37af6b6f4e5eb68e08c"},{"sha":"71b02feac8f44ca3c98ed75ed127a8e1160a5fd4","author":{"name":"Brian Dickens","email":"6d130cd305f16d962de33d3d87602b04cea76901@gmail.com"},"message":"TRAP? => ERROR? TRAP, kill CATCH?\n\nA change in the protocol for TRAP means it is now possible to tell\n\"from the outside\" if it trapped an error or not.  This is because\nif it ever returns an ERROR!, it means that error was actually raised.\nOther errors are turned into void...and if this is a problem, then\none needs to use TRAP/WITH to separate out the handling of errors\nthat were evaluated to normally vs raised.\n\nYet typically, processing of a TRAP is not of a routine that could\nreturn an ERROR! (unless one is writing truly generic code, like a\nconsole).  So ERROR? TRAP is a good enough test and is clearer.\n\nThe CATCH? function doesn't have any such discernment, but it really\nseems kind of useless to test for \"was there a catch\".  So since this\nwhole family of refinements is being removed, it is too.\n\nSimplifies TRAP to take advantage of the new automatic releasing of\nhandles when there is a fail() on their frame stack.  Also cuts down\non excessive commenting in TRAP.\n\nAlso fixes a bug by which the scanner was not putting newline info\non PATH! values.","distinct":false,"url":"https://api.github.com/repos/codebybrett/ren-c/commits/71b02feac8f44ca3c98ed75ed127a8e1160a5fd4"},{"sha":"3aee9f9dca1fc0035c5c3768c44ea4d9cb4fd4dd","author":{"name":"Brian Dickens","email":"6d130cd305f16d962de33d3d87602b04cea76901@gmail.com"},"message":"Fix pair recycling, edge condition in stack assert\n\nWhich part of a \"pairing\" series was considered the REBSER node changed\nat one point, but the GC marking for REB_PAIR didn't take that into\naccount...so it was marking the second value in the pairing.  Hence\npairs that were still in use could be recycled.  This fixes that.\n\nAlso changes DS_AT() so that it tolerates indexing into the stack at\none past the top, to use as a limit for copying.  Previously, it was\npossible to potentially see an END marker at one past the top in edge\ncases and assert.","distinct":true,"url":"https://api.github.com/repos/codebybrett/ren-c/commits/3aee9f9dca1fc0035c5c3768c44ea4d9cb4fd4dd"},{"sha":"67a7d439ef8740828493becd5648f0b268ffc00d","author":{"name":"Brian Dickens","email":"6d130cd305f16d962de33d3d87602b04cea76901@gmail.com"},"message":"Patch ELIDE bug in REDUCE, assert for related bugs\n\nREDUCE reused a frame without explicitly setting the DO_FLAG_XXX, which\nmeant that if something like ELIDE were to set DO_FLAG_NO_LOOKAHEAD\nas part of its operation then it would not get cleared on the next\ncall to Do_Core().  The consequence was that code like:\n\n    reduce [1 + 2 elide (3 + 4) 5 + 6]\n\n...would not work, because the ELIDE would shift the frame into a no\nlookahead mode that would not be cleared, so the 5 after the ELIDE\nwould evaluate without picking up the +, leaving (+ 6) to run and\ncause an error.\n\nThis addresses that issue by saving and restoring the frame flags on\neach Do_Next that reuses a frame.  But it also adds a generic check\nto catch reusage without resetting the flags, via a warning bit set on\nexit from Do_Core","distinct":true,"url":"https://api.github.com/repos/codebybrett/ren-c/commits/67a7d439ef8740828493becd5648f0b268ffc00d"},{"sha":"e9c8e55e8671754b54c1a3dc861d294e6459b956","author":{"name":"Brian Dickens","email":"6d130cd305f16d962de33d3d87602b04cea76901@gmail.com"},"message":"Fix CHAR! add/subtract from CHAR, add enfix tests\n\nR3-Alpha changed the behavior of math on CHAR! when subtracting another\nCHAR!, giving an INTEGER! of the delta.  (Rebol2 would return a CHAR!\nwith the codepoint of the difference, overflowing in the 8-bit space.\nRed gives a CHAR! but errors on overflow).\n\nThe behavior had become broken and wasn't giving signed differences,\nbut was unnoticed because the character tests hadn't been modified for\nR3-Alpha.  This fixes the behavior and updates the Rebol2 tests.\n\nAlso adds enfix tests, to mirror the examples given in the Trello.","distinct":true,"url":"https://api.github.com/repos/codebybrett/ren-c/commits/e9c8e55e8671754b54c1a3dc861d294e6459b956"},{"sha":"cab448c925e259c6f7d37f810c642e1f0276e1bd","author":{"name":"Brian Dickens","email":"6d130cd305f16d962de33d3d87602b04cea76901@gmail.com"},"message":"Triage and delete %r2-tests.r\n\nThe original R3-Alpha test suite was designed to compare and contrast\ntests with Rebol2, and could also be run with Rebol2.  That was deemed\nunimportant when integrating the tests into Ren-C and trying to\nformalize them, so those tests which would only pass in Rebol2 were\nremoved from the suite.\n\nRather than delete them, they were collected into a file to be looked\nat later.  Many of the tests had parallel versions that had been\nadapted for R3-Alpha, but not all did.  Some had yet to have the tests\nconverted to adapt to the changes, some were for features that had not\nbeen implemented, some were irrelevant, and some were just placeholders\nfor issues that hadn't been resolved.\n\nThis commit includes what triage could be done for those issues in\nterms of making new tests.  Github issues or Trello cards were made\nfor the other issues, just to get them out of the code and into a\nplace where they might be discussed.  The upshot is the deletion of\nthe %tests/old/r2-tests.r file, with all information believed to be\nextracted from it to more actionable locations.","distinct":true,"url":"https://api.github.com/repos/codebybrett/ren-c/commits/cab448c925e259c6f7d37f810c642e1f0276e1bd"},{"sha":"ee2b12454af62e85de122c679b96aadc9ea50c6f","author":{"name":"Brian Dickens","email":"6d130cd305f16d962de33d3d87602b04cea76901@gmail.com"},"message":"Respect array index in BIND without /COPY, clipboard tests\n\nAt one point it was noticed that BIND was only paying attention to the\nindex of the passed in ANY-ARRAY! if it was copied.  A comment to this\neffect was added, but it wasn't changed for fear of breaking something\nthat depended on that behavior.\n\nHowever it turns out that there was an actual bug already raised about\nthe issue, and a breaking test based on it:\n\nhttps://github.com/rebol/rebol-issues/issues/2086\n\nSince that test is probably a very rare example of code that depends\non the behavior, and it's fixed by changing it, this goes ahead and\nbites the bullet and fixes it.\n\nAlso stubs out a directory for the clipboard module as a place to hold\ntests for it, and updates those tests so they pass for the existing\nWindows clipboard implementation.","distinct":true,"url":"https://api.github.com/repos/codebybrett/ren-c/commits/ee2b12454af62e85de122c679b96aadc9ea50c6f"},{"sha":"854977c4778ff1cd1ba94d9571149e9c88ea520e","author":{"name":"Shixin Zeng","email":"732e7340692f11d23f6395d567310549b5a81f06@atronixengineering.com"},"message":"Add a user script hook to WAIT\n\nNow user can insert code into system/ports/pump if it needs WAIT to poll\nsomething (e.g. calling select or uv_run, etc.) and pump events into the\nsystem. This makes it possible to integrate other event loops.\n\nAs a note, because the hook (a block) is executed in WAIT at each\niteration, it should finish as soon as possible, or it will slow down\nI/O of the whole program.","distinct":true,"url":"https://api.github.com/repos/codebybrett/ren-c/commits/854977c4778ff1cd1ba94d9571149e9c88ea520e"},{"sha":"870dcb281d063e16adcf7dae02bc99ebeb647cd5","author":{"name":"Shixin Zeng","email":"732e7340692f11d23f6395d567310549b5a81f06@atronixengineering.com"},"message":"Fix compilation of the FFI extension","distinct":true,"url":"https://api.github.com/repos/codebybrett/ren-c/commits/870dcb281d063e16adcf7dae02bc99ebeb647cd5"},{"sha":"2a4d108df1df2963762a4f43a19cae4c9ce7726e","author":{"name":"Shixin Zeng","email":"732e7340692f11d23f6395d567310549b5a81f06@atronixengineering.com"},"message":"Make printf.r run on Windows as well","distinct":true,"url":"https://api.github.com/repos/codebybrett/ren-c/commits/2a4d108df1df2963762a4f43a19cae4c9ce7726e"},{"sha":"a7f84c5fb0ff56e67027c13500a6efdad3639138","author":{"name":"Shixin Zeng","email":"732e7340692f11d23f6395d567310549b5a81f06@atronixengineering.com"},"message":"Do not crash if an undefined action is called on a port\n\nObj_Value crashes if n == 0, which is what Find_Action returns when\naction is not found.","distinct":true,"url":"https://api.github.com/repos/codebybrett/ren-c/commits/a7f84c5fb0ff56e67027c13500a6efdad3639138"},{"sha":"eb99c8fcd5c2c57292ece422addcbc9699315ce3","author":{"name":"Brian Dickens","email":"6d130cd305f16d962de33d3d87602b04cea76901@gmail.com"},"message":"Fix PNG decoding/encoding, update LodePNG, resurrect tests\n\nSome PNG encoding and decoding tests had been removed from the main\nRen-C tests at some point.  Possibly because they didn't work after\nmerging in the Saphir/Atronix image codec changes.  (They worked\nin R3-Alpha.)  Or perhaps because they were part of a group where\nsome tests failed because of missing codecs (JPG/GIF encoding).\n\nWhatever the reason, the absence of these tests meant some checking on\nround-tripping and equivalencies of lossless encodings was not being\ndone.  Reinstating those tests discovered that although the PNG\ndecode and encode process was able to round-trip a file that would\nload correctly, the actual bytes in-memory for the image were not\nconsistent with what BMP or GIF decoding would produce.  (So if there\nwere an image viewer within Rebol tested, it would have shown wrong\ncolors for the PNG.)\n\nAs part of looking into the problem, this went ahead and synced up\nLodePNG to the current version from GitHub.\n\nHowever, the real issue is that IMAGE! uses \"quad\" values to access\npixels, as opposed to going according to bytes.  This means that it\nhas to be sensitive to the byte ordering of the underlying platform,\nand being compatible with it wasn't being done correctly.\n\nThe proabable \"right\" answer to dealing with this is to standardize\nthe byte order underlying an image to RGBA, and do that access via\nindividual unsigned-char access, so that the endianness is not an\nissue.  If a BINARY! series were used to do this, it would also mean\nthat rebRepossess() could be used to avoid creating an secondary\nseries for the image distinct from what the PNG decoding uses.\n\nThat is a separate issue, however.  This fixes the code for the moment,\nand makes the tests pass.  It also adds a usage of rebRepossess()\nin the encoder, rather than copy a series that doesn't need to be\ncopied.","distinct":true,"url":"https://api.github.com/repos/codebybrett/ren-c/commits/eb99c8fcd5c2c57292ece422addcbc9699315ce3"},{"sha":"0a8b0c672d4eadb62b07825d241024ab5a58a321","author":{"name":"Brian Dickens","email":"6d130cd305f16d962de33d3d87602b04cea76901@gmail.com"},"message":"Replace non-definitional EXIT with UNWIND\n\nAdding definitional RETURN meant that there actually had to be a\nunique local in each function to bind to, holding a specific instance\nof a function that knew how to return from a specific function.  If\nRebol2's EXIT were to be accommodated as well, each function would need\ntwo of these words.\n\nSo users of FUNCTION were asked to just say `return ()`.  Yet to better\ndeal with the concept of routines that weren't supposed to return a\nvalue, PROCEDURE was introduced.  But when it needed an arity-0 word\nto mean \"end the procedure and return to the caller with no result\",\nthe word LEAVE was chosen.\n\nThere was controversy over EXIT's role in the language.  The mechanism\nby which RETURN and EXIT had given the illusion of working was that\nnatives would not intercept them...so they would return from the\nnearest usermode function.  That was ended, so EXIT became more or\nless useless, unless it was used with a /FROM refinement that would\nexplicitly say which function FRAME! it wanted to jump to.  This\ncould be used to write usermode implementations of function generators\nthat provided definitional RETURN.\n\nHowever, the name EXIT for this wasn't particularly great.  And its\nbehavior was now more confusing...since the 0-arity version didn't\ndo anything anyone was likely to actually mean.\n\nSo this creates UNWIND to be the arity-1 form for targeting a specific\nfunction frame to return from, and deprecates EXIT so that it gives\nan informative message.  Eventually, EXIT will probably have the\nbehavior of what EXIT-REBOL does today...which is to give a guaranteed\ntermination of the interpreter without possibility of being caught\nthe way a QUIT is.","distinct":true,"url":"https://api.github.com/repos/codebybrett/ren-c/commits/0a8b0c672d4eadb62b07825d241024ab5a58a321"},{"sha":"6e7d81c7f02bb6ce0c930d2e6745bfaee99b3299","author":{"name":"Brian Dickens","email":"6d130cd305f16d962de33d3d87602b04cea76901@gmail.com"},"message":"Fix DEHEX behavior w.r.t. UTF-8, add corresponding ENHEX\n\nR3-Alpha did not follow RFC 3896, which states that percent-encoded\nURLs should be interpreting the percent encoded data as UTF-8.  This\nwas a longstanding bug report:\n\nhttps://github.com/rebol/rebol-issues/issues/1986\n\nA test was added that would fail, since the issue had not been fixed.\nThis test (along with many others) was put aside for later review\nwhen the tests were changed to require all tests pass.\n\nAs part of an effort to fully triage those \"put aside\" tests (in one\nway or another), this just goes ahead and fixes the issue.  It also\nadds a corresponding ENHEX native which follows the RFC for producing\nhex bytes for characters that need it.  Per that RFC, all hex byte\ncharacters are canonized to uppercase in production (though both\nupper and lower are tolerated by dehex).\n\nOne change in behavior is that a % sign in the source material *must*\nbe followed by two hex digits, either upper or lower case.  Other\nappearances of % will be treated as an error.","distinct":true,"url":"https://api.github.com/repos/codebybrett/ren-c/commits/6e7d81c7f02bb6ce0c930d2e6745bfaee99b3299"},{"sha":"46abbf6fc460269fccb963bf58cebad0b0659c78","author":{"name":"Brian Dickens","email":"6d130cd305f16d962de33d3d87602b04cea76901@gmail.com"},"message":"Use comparison of start/end to direct limit test in FOR\n\nIssue #1993 boils down to a fairly simple question of how the R2-styled\nFOR loop decides if it is counting upward or downward.  Historically\nit used the sign of the `bump` variable, so if it was positive it\nwould check to see if the state was greater than or equal to the end\nvalue...and if it was negative it would check to see if the state was\nless than or equal to the end value.\n\nHowever, this meant that a bump value of 0 would either have to be made\nan error, or have a seemingly asymmetric behavior resulting from\ndeciding that zero was either positive or negative.\n\nRather than making 0 illegal, it was proposed that the relative values\nof the start and the end be what controls the direction of comparison.\nThis implements the proposal.\n\nThe ticket discussing the proposal turned from something fairly mundane\ninto something very lengthy, which has been moderated somewhat in order\nto hopefully make the issue and arguments more approachable:\n\nhttps://github.com/rebol/rebol-issues/issues/1993\n\nThis allowed some tests which had been moved aside to be brought back\ninto the suite.","distinct":true,"url":"https://api.github.com/repos/codebybrett/ren-c/commits/46abbf6fc460269fccb963bf58cebad0b0659c78"},{"sha":"4d5d3f13757630a35816930452fec0a46436b59d","author":{"name":"Brian Dickens","email":"6d130cd305f16d962de33d3d87602b04cea76901@gmail.com"},"message":"Run body once if start=end in loops\n\nAn oversight in the previous commit meant it wasn't running loops\nthe single time it should, when start=end...it was returning void.\n\nSince the loops don't need to do an increment if start=end, then no\nsuch cases overflow, so this affected tests as well.\n\nThe tests caught this, but the commit was pushed in an oversight.","distinct":true,"url":"https://api.github.com/repos/codebybrett/ren-c/commits/4d5d3f13757630a35816930452fec0a46436b59d"},{"sha":"c0b6f958a9257cff764533db1b8316f0622a122c","author":{"name":"Brian Dickens","email":"6d130cd305f16d962de33d3d87602b04cea76901@gmail.com"},"message":"Allow BIND to SELF\n\nAlthough SELF is a hidden field, it is also considered \"bindable\".\nThis concept is somewhat nebulous, but R3-Alpha had the idea of these\ntwo things being different...though it applied only to SELF (while\nnow it's a generic bit that could, theoretically, be applied to\nother things).\n\nIt may be that no hidden fields are bindable from outside the object,\nbut for the moment this changes it to be compatible with R3-Alpha,\nas the bit does exist...so it makes it clearer, for now.\n\nIncludes some improvements to comments.","distinct":true,"url":"https://api.github.com/repos/codebybrett/ren-c/commits/c0b6f958a9257cff764533db1b8316f0622a122c"},{"sha":"41c3984b6993a168c43eaf59787dd325908385dc","author":{"name":"Brian Dickens","email":"6d130cd305f16d962de33d3d87602b04cea76901@gmail.com"},"message":"Triage and categorize tests in %pending-tests.r, remove file\n\nThere was a practice in the R3-Alpha tests of writing and committing\ntests for things that did not work, and then \"diffing\" the test results\nagainst a version of the tests run using another version.  This unusual\npractice was not preserved in Ren-C, which instead sought to get a\nclean run of the tests with 0 failures...that could be depended on and\ninterpreted using the version of the interpreter those tests were\nexecuted with.\n\nGetting to that point required several phases, one of fixing all places\nwhere test code could actually *crash* the interpreter so it was--at\nworst--an error.  The next phase was to fix as many bugs as possible,\nthough some were moved to a %pending-tests.r file for later review as\nlooking into them would take additional time.\n\nIn the interests of not having a \"test dumpster\" sitting around to trip\nover when doing searches in the code, this is the result of going\nthrough all the non-working tests and either fixing the relevant issue,\nor making sure the test code is properly attached to an issue in the\nbug database to be reviewed.  The result is being able to eliminate\nthe %pending-tests.r file.","distinct":true,"url":"https://api.github.com/repos/codebybrett/ren-c/commits/41c3984b6993a168c43eaf59787dd325908385dc"},{"sha":"e1bd07838b85e1448ace5058f2d279ba4b865383","author":{"name":"Brian Dickens","email":"6d130cd305f16d962de33d3d87602b04cea76901@gmail.com"},"message":"Base experimental DO-ALL on rebRescue() vs. PUSH_TRAP\n\nIn the ongoing effort to disentangle most code from the specifics of\nsetjmp/longjmp, this changes the very experimental DO-ALL to use\nrebRescue().\n\nIn the process, this loses the feature of propagating thrown values,\ninstead treating an attempt to throw out of a DO-ALL as an error.\nThat may be addressed later, if and when the construct turns out to\nbe important...but it raises some issues and would be distracting to\ndo so right now.\n\nAlso fixes a case where a REBVAL* was being passed to plain fail(),\nwhich is now deprecated, as that no longer means \"invalid argument\"","distinct":true,"url":"https://api.github.com/repos/codebybrett/ren-c/commits/e1bd07838b85e1448ace5058f2d279ba4b865383"}]}
{"actor":{"display_login":"codebybrett"}}