Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Changes.rst for 0.17.0 #842

Closed
wants to merge 18 commits into from

Conversation

Dunbaratu
Copy link
Member

I read through this long list:

#716

and tried to extract all the things that were new features rather than bugs, and point to their locations in the documentation:

The relevant change is the file doc/source/changes.rst

Dunbaratu and others added 17 commits April 15, 2015 12:57
They're all part of the KOSNameTagWindow so
I changed them all in one go.
When I examined it, I saw that this is how it's
meant to work in normal cases:

There are two instruction pointers - one for where
you are in the interpreter context and another for
where you are in the program context.

When you run a program, it does this:

  1. Interpreter context has an OpcodeCall that calls built-in function run().
  2. Function run() tells CPU it should switch to program context on the
     next instruction.
  3. Function run() calls compiler, and populates the CPU's program context
     with the resulting program.
  4. Function run() finishes.
  5. CPU, like it does for all opcode executions, updates the instruction
     pointer of the current context to the next opcode.
  6. CPU finishes loop iteration, and begins new loop.
  7. CPU now is in the new program context, and is running the program.
  8. When program finishes or errors out, CPU returns to interpreter context and picks up where it left the instruction pointer for the interpreter.

The problem is when step 3 barfs and throws an exception, the CPU was
*already* told in step 2 that it is no longer going to be in interpreter
context, so when it handles the error it's handling it as if it had come
from a program instead of from the interpreter, and thus is does NOT advance
the interpreter's instruction pointer, thinking that had already been
done before in step 5 of the previous iteration just before it had
jumped into the "program" it thought it was running.

Thus the interpreter tries to run the same Opcode a second time, and gets
the new error because the stack was already popped in the first attempt
to call the run() function.  The second time it tries to call run(), the
args it needs aren't there on the stack anymore, thus the null ref error.

The fix was to detect when the compiler failed in step 3, and when it did,
to undo the "you are now in program context" setup it did in step 2, so
the CPU knows it's still in interpreter context and it does therefore need
to advance the interpreter's instruction pointer.
@Dunbaratu Dunbaratu added this to the v0.17.0 Punchlist milestone Apr 17, 2015
Kerbal Alarm Clock support
::::::::::::::::::::::::::

If you have the Kerbal Alarm Clock Mod isntalled, you can now

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

typo on 'isntalled'

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks. edited in my branch. thankfully it wasn't pulled yet.

@Dunbaratu
Copy link
Member Author

All these changes are ALREADY in develop!! But github is showing the diffs all wrong claiming they're not.

@Dunbaratu Dunbaratu closed this Apr 18, 2015
@Dunbaratu Dunbaratu deleted the docs_link_for_examples branch April 27, 2015 03:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants