comparison src/luan/LuanException.java @ 1578:c922446f53aa

immutable threading
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 08 Feb 2021 14:16:19 -0700
parents adba594db0b4
children a9ff30fb5d89
comparison
equal deleted inserted replaced
1577:60e5c324adf9 1578:c922446f53aa
7 import java.util.ArrayList; 7 import java.util.ArrayList;
8 import java.util.Map; 8 import java.util.Map;
9 import java.util.HashMap; 9 import java.util.HashMap;
10 10
11 11
12 public final class LuanException extends Exception implements LuanCloneable { 12 public final class LuanException extends Exception implements LuanMutable {
13 private LuanTable table; 13 private LuanTable table;
14 private Map extra = new HashMap(); 14 private Map extra = new HashMap();
15 private boolean immutable = false;
15 16
16 public LuanException(String msg,Throwable cause) { 17 public LuanException(String msg,Throwable cause) {
17 super(msg,cause); 18 super(msg,cause);
18 } 19 }
19 20
23 24
24 public LuanException(Throwable cause) { 25 public LuanException(Throwable cause) {
25 super(cause); 26 super(cause);
26 } 27 }
27 28
28 @Override public LuanException shallowClone() { 29 @Override public boolean isImmutable() {
29 return new LuanException(getMessage(),getCause()); 30 return immutable;
30 } 31 }
31 32
32 @Override public void deepenClone(LuanCloneable dc,LuanCloner cloner) { 33 @Override public void makeImmutable() {
33 LuanException clone = (LuanException)dc; 34 if(immutable)
34 clone.table = (LuanTable)cloner.clone(table); 35 return;
35 clone.extra = (Map)cloner.clone(extra); 36 immutable = true;
36 } 37 LuanMutable.makeImmutable(table);
37 38 LuanMutable.makeImmutable(extra);
38 @Override public void makeImmutable(LuanImmutabler immutabler) throws LuanException {
39 immutabler.makeImmutable(table);
40 immutabler.makeImmutable(extra);
41 } 39 }
42 40
43 public void put(String key,Object value) throws LuanException { 41 public void put(String key,Object value) throws LuanException {
44 if( table == null ) { 42 if( table == null ) {
45 extra.put(key,value); 43 extra.put(key,value);