kopia lustrzana https://github.com/backface/turtlestitch
refactored inheritance circularity avoidance
rodzic
735a0551b1
commit
34c8d245c2
|
@ -17,6 +17,9 @@
|
|||
* NEW Slovak translation, thanks, Peter Lukacovic
|
||||
* German
|
||||
|
||||
### 2019-12-19
|
||||
* objects, threads: refactored inheritance circularity avoidance
|
||||
|
||||
### 2019-12-18
|
||||
* gui, api: rearranged Snap! API into its own file
|
||||
* added API documentation
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
<script type="text/javascript" src="src/morphic.js?version=2019-11-12"></script>
|
||||
<script type="text/javascript" src="src/widgets.js?version=2019-10-16"></script>
|
||||
<script type="text/javascript" src="src/blocks.js?version=2019-12-13"></script>
|
||||
<script type="text/javascript" src="src/threads.js?version=2019-12-18"></script>
|
||||
<script type="text/javascript" src="src/objects.js?version=2019-12-16"></script>
|
||||
<script type="text/javascript" src="src/threads.js?version=2019-12-19"></script>
|
||||
<script type="text/javascript" src="src/objects.js?version=2019-12-19"></script>
|
||||
<script type="text/javascript" src="src/gui.js?version=2019-12-18"></script>
|
||||
<script type="text/javascript" src="src/paint.js?version=2019-06-27"></script>
|
||||
<script type="text/javascript" src="src/lists.js?version=2019-12-08"></script>
|
||||
|
|
|
@ -84,7 +84,7 @@ BlockEditorMorph, BlockDialogMorph, PrototypeHatBlockMorph, BooleanSlotMorph,
|
|||
localize, TableMorph, TableFrameMorph, normalizeCanvas, VectorPaintEditorMorph,
|
||||
HandleMorph, AlignmentMorph, Process, XML_Element, WorldMap, copyCanvas*/
|
||||
|
||||
modules.objects = '2019-December-15';
|
||||
modules.objects = '2019-December-19';
|
||||
|
||||
var SpriteMorph;
|
||||
var StageMorph;
|
||||
|
@ -6462,8 +6462,20 @@ SpriteMorph.prototype.chooseExemplar = function () {
|
|||
menu.popUpAtHand(this.world());
|
||||
};
|
||||
|
||||
SpriteMorph.prototype.setExemplar = function (another) {
|
||||
SpriteMorph.prototype.setExemplar = function (another, enableError) {
|
||||
var ide;
|
||||
|
||||
// check for circularity
|
||||
if (another instanceof SpriteMorph &&
|
||||
contains(another.allExemplars(), this)) {
|
||||
if (enableError) {
|
||||
throw new Error(
|
||||
localize('unable to inherit\n(disabled or circular?)')
|
||||
);
|
||||
}
|
||||
return; // silently fail so stored projects can still be loaded
|
||||
}
|
||||
|
||||
this.emancipate();
|
||||
this.exemplar = another;
|
||||
if (another) {
|
||||
|
|
|
@ -61,7 +61,7 @@ StageMorph, SpriteMorph, StagePrompterMorph, Note, modules, isString, copy,
|
|||
isNil, WatcherMorph, List, ListWatcherMorph, alert, console, TableMorph, Color,
|
||||
TableFrameMorph, ColorSlotMorph, isSnapObject, newCanvas, Symbol, SVG_Costume*/
|
||||
|
||||
modules.threads = '2019-December-18';
|
||||
modules.threads = '2019-December-19';
|
||||
|
||||
var ThreadManager;
|
||||
var Process;
|
||||
|
@ -4554,14 +4554,7 @@ Process.prototype.doSet = function (attribute, value) {
|
|||
case 'parent':
|
||||
this.assertType(rcvr, 'sprite');
|
||||
value = value instanceof SpriteMorph ? value : null;
|
||||
// avoid circularity
|
||||
if (value instanceof SpriteMorph &&
|
||||
contains(value.allExemplars(), rcvr)) {
|
||||
throw new Error(
|
||||
localize('unable to inherit\n(disabled or circular?)')
|
||||
);
|
||||
}
|
||||
rcvr.setExemplar(value);
|
||||
rcvr.setExemplar(value, true); // throw an error in case of circularity
|
||||
break;
|
||||
case 'temporary?':
|
||||
this.assertType(rcvr, 'sprite');
|
||||
|
|
Ładowanie…
Reference in New Issue