annotate src/luan/impl/Pointer.java @ 1561:e1a13e707bf3

start immutable
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 05 Nov 2020 20:24:09 -0700
parents 6a7c6879158d
children c922446f53aa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
670
58ebfec6178b all luan now compiles
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
1 package luan.impl;
58ebfec6178b all luan now compiles
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2
781
fbbdd369a13a rename DeepCloner to LuanCloner
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
3 import luan.LuanCloneable;
fbbdd369a13a rename DeepCloner to LuanCloner
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
4 import luan.LuanCloner;
1561
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 784
diff changeset
5 import luan.LuanImmutabler;
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 784
diff changeset
6 import luan.LuanException;
670
58ebfec6178b all luan now compiles
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
7
58ebfec6178b all luan now compiles
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
8
781
fbbdd369a13a rename DeepCloner to LuanCloner
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
9 public final class Pointer implements LuanCloneable {
1561
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 784
diff changeset
10 private Object o;
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 784
diff changeset
11 private boolean immutable = false;
670
58ebfec6178b all luan now compiles
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
12
671
82f130eba7b0 improve declarations
Franklin Schmidt <fschmidt@gmail.com>
parents: 670
diff changeset
13 public Pointer() {}
82f130eba7b0 improve declarations
Franklin Schmidt <fschmidt@gmail.com>
parents: 670
diff changeset
14
82f130eba7b0 improve declarations
Franklin Schmidt <fschmidt@gmail.com>
parents: 670
diff changeset
15 public Pointer(Object o) {
82f130eba7b0 improve declarations
Franklin Schmidt <fschmidt@gmail.com>
parents: 670
diff changeset
16 this.o = o;
82f130eba7b0 improve declarations
Franklin Schmidt <fschmidt@gmail.com>
parents: 670
diff changeset
17 }
82f130eba7b0 improve declarations
Franklin Schmidt <fschmidt@gmail.com>
parents: 670
diff changeset
18
784
6a7c6879158d revert shallowClone()
Franklin Schmidt <fschmidt@gmail.com>
parents: 782
diff changeset
19 @Override public Pointer shallowClone() {
670
58ebfec6178b all luan now compiles
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
20 return new Pointer();
58ebfec6178b all luan now compiles
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
21 }
58ebfec6178b all luan now compiles
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
22
781
fbbdd369a13a rename DeepCloner to LuanCloner
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
23 @Override public void deepenClone(LuanCloneable clone,LuanCloner cloner) {
670
58ebfec6178b all luan now compiles
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
24 ((Pointer)clone).o = cloner.get(o);
58ebfec6178b all luan now compiles
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
25 }
1561
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 784
diff changeset
26
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 784
diff changeset
27 @Override public void makeImmutable(LuanImmutabler immutabler) throws LuanException {
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 784
diff changeset
28 immutabler.makeImmutable(o);
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 784
diff changeset
29 immutable = true;
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 784
diff changeset
30 }
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 784
diff changeset
31
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 784
diff changeset
32 public Object get() {
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 784
diff changeset
33 return o;
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 784
diff changeset
34 }
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 784
diff changeset
35
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 784
diff changeset
36 public void set(Object o) throws LuanException {
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 784
diff changeset
37 if( immutable )
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 784
diff changeset
38 throw new LuanException("variable is immutable");
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 784
diff changeset
39 this.o = o;
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 784
diff changeset
40 }
670
58ebfec6178b all luan now compiles
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
41 }