BadScript 2
Loading...
Searching...
No Matches
BadObjectReference.cs
Go to the documentation of this file.
3
5
9public abstract class BadObjectReference : BadObject
10{
15 public abstract BadObject Resolve();
16
20 public abstract void Delete();
21
27 public abstract void Set(BadObject obj, BadPropertyInfo? info = null, bool noChangeEvent = false);
28
37 public static BadObjectReference Make(
38 string refText,
39 Func<BadObject> getter,
40 Action<BadObject, BadPropertyInfo?>? setter = null,
41 Action? delete = null)
42 {
43 return new BadObjectReferenceImpl(refText, getter, (o, i, _) =>
44 {
45 if (setter == null)
46 {
47 throw new BadRuntimeException("Cannot set reference " + refText + " because it is read-only");
48 }
49 setter(o, i);
50 }, delete);
51 }
60 public static BadObjectReference Make(
61 string refText,
62 Func<BadObject> getter,
63 Action<BadObject, BadPropertyInfo?, bool>? setter,
64 Action? delete = null)
65 {
66 return new BadObjectReferenceImpl(refText, getter, setter, delete);
67 }
68
73 {
77 private readonly Action? m_Delete;
78
82 private readonly Func<BadObject> m_Getter;
83
87 private readonly string m_RefText;
88
92 private readonly Action<BadObject, BadPropertyInfo?, bool>? m_Setter;
93
102 string refText,
103 Func<BadObject> getter,
104 Action<BadObject, BadPropertyInfo?, bool>? setter,
105 Action? delete)
106 {
107 m_Getter = getter;
108 m_Setter = setter;
109 m_Delete = delete;
110 m_RefText = refText;
111 }
112
115 {
116 return m_Getter().GetPrototype();
117 }
118
120 public override BadObject Resolve()
121 {
122 return m_Getter();
123 }
124
126 public override void Set(BadObject obj, BadPropertyInfo? info = null, bool noChangeEvent = false)
127 {
128 if (m_Setter == null)
129 {
130 throw new BadRuntimeException("Cannot set reference " + m_RefText + " because it is read-only");
131 }
132
133 m_Setter(obj, info ?? new BadPropertyInfo(BadAnyPrototype.Instance), noChangeEvent);
134 }
135
137 public override string ToSafeString(List<BadObject> done)
138 {
139 return m_RefText;
140 }
141
143 public override void Delete()
144 {
145 if (m_Delete == null)
146 {
147 throw new BadRuntimeException("Cannot set delete " + m_RefText + " because it is read-only");
148 }
149
150 m_Delete.Invoke();
151 }
152 }
153}
The Base Class for all BadScript Objects.
Definition BadObject.cs:14
readonly Func< BadObject > m_Getter
The Getter of the Reference.
readonly? Action m_Delete
Deletes the Reference from the Referenced Object.
readonly? Action< BadObject, BadPropertyInfo?, bool > m_Setter
The Setter of the Reference.
override void Set(BadObject obj, BadPropertyInfo? info=null, bool noChangeEvent=false)
BadObjectReferenceImpl(string refText, Func< BadObject > getter, Action< BadObject, BadPropertyInfo?, bool >? setter, Action? delete)
Creates a new Reference Object.
Implements the base functionality for a BadScript Reference.
static BadObjectReference Make(string refText, Func< BadObject > getter, Action< BadObject, BadPropertyInfo?>? setter=null, Action? delete=null)
Creates a new Reference Object.
BadObject Resolve()
Returns the Referenced Object.
void Delete()
Deletes the Reference from the Referenced Object.
void Set(BadObject obj, BadPropertyInfo? info=null, bool noChangeEvent=false)
Sets the Referenced Object to a new Value.
static BadObjectReference Make(string refText, Func< BadObject > getter, Action< BadObject, BadPropertyInfo?, bool >? setter, Action? delete=null)
Creates a new Reference Object.
Stores Meta Information about a Property.
The Any Prototype, Base type for all types.
static readonly BadAnyPrototype Instance
The Instance of the BadAnyPrototype.
Implements a Class Prototype for the BadScript Language.
Contains the Error Objects for the BadScript2 Language.
Contains the Runtime Objects.
Definition BadArray.cs:10