BadScript 2
Loading...
Searching...
No Matches
BadObjectReference.cs
Go to the documentation of this file.
4
6
10public abstract class BadObjectReference : BadObject
11{
16 public abstract BadObject Resolve(BadSourcePosition? position);
17
21 public abstract void Delete(BadSourcePosition? position);
22
28 public abstract void Set(BadObject obj, BadSourcePosition? position, BadPropertyInfo? info = null, bool noChangeEvent = false);
29
38 public static BadObjectReference Make(string refText,
39 Func<BadSourcePosition?, BadObject> getter,
40 Action<BadObject,BadSourcePosition?, BadPropertyInfo?>? setter = null,
41 Action<BadSourcePosition?>? delete = null)
42 {
43 return new BadObjectReferenceImpl(refText,
44 getter,
45 (o,p, i, _) =>
46 {
47 if (setter == null)
48 {
49 throw BadRuntimeException.Create(null, $"Cannot set reference {refText} because it is read-only", p);
50 }
51
52 setter(o, p, i);
53 },
54 delete
55 );
56 }
57
66 public static BadObjectReference Make(string refText,
67 Func<BadSourcePosition?, BadObject> getter,
68 Action<BadObject, BadSourcePosition?, BadPropertyInfo?, bool>? setter,
69 Action<BadSourcePosition?>? delete = null)
70 {
71 return new BadObjectReferenceImpl(refText, getter, setter, delete);
72 }
73
74#region Nested type: BadObjectReferenceImpl
75
80 {
84 private readonly Action<BadSourcePosition?>? m_Delete;
85
89 private readonly Func<BadSourcePosition?, BadObject> m_Getter;
90
94 private readonly string m_RefText;
95
99 private readonly Action<BadObject, BadSourcePosition?, BadPropertyInfo?, bool>? m_Setter;
100
108 public BadObjectReferenceImpl(string refText,
109 Func<BadSourcePosition?, BadObject> getter,
110 Action<BadObject, BadSourcePosition?, BadPropertyInfo?, bool>? setter,
111 Action<BadSourcePosition?>? delete)
112 {
113 m_Getter = getter;
114 m_Setter = setter;
115 m_Delete = delete;
116 m_RefText = refText;
117 }
118
121 {
122 return m_Getter(null)
123 .GetPrototype();
124 }
125
127 public override BadObject Resolve(BadSourcePosition? position)
128 {
129 return m_Getter(position);
130 }
131
133 public override void Set(BadObject obj, BadSourcePosition? position, BadPropertyInfo? info = null, bool noChangeEvent = false)
134 {
135 if (m_Setter == null)
136 {
137 throw new BadRuntimeException("Cannot set reference " + m_RefText + " because it is read-only");
138 }
139
140 m_Setter(obj, position, info ?? new BadPropertyInfo(BadAnyPrototype.Instance), noChangeEvent);
141 }
142
144 public override string ToSafeString(List<BadObject> done)
145 {
146 return m_RefText;
147 }
148
150 public override void Delete(BadSourcePosition? position)
151 {
152 if (m_Delete == null)
153 {
154 throw new BadRuntimeException("Cannot set delete " + m_RefText + " because it is read-only");
155 }
156
157 m_Delete.Invoke(position);
158 }
159 }
160
161#endregion
162}
Describes a specific position inside a source file.
static BadRuntimeException Create(BadScope? scope, string message)
Creates a new BadScriptException.
The Base Class for all BadScript Objects.
Definition BadObject.cs:14
readonly? Action< BadSourcePosition?> m_Delete
Deletes the Reference from the Referenced Object.
readonly? Action< BadObject, BadSourcePosition?, BadPropertyInfo?, bool > m_Setter
The Setter of the Reference.
BadObjectReferenceImpl(string refText, Func< BadSourcePosition?, BadObject > getter, Action< BadObject, BadSourcePosition?, BadPropertyInfo?, bool >? setter, Action< BadSourcePosition?>? delete)
Creates a new Reference Object.
readonly Func< BadSourcePosition?, BadObject > m_Getter
The Getter of the Reference.
override void Set(BadObject obj, BadSourcePosition? position, BadPropertyInfo? info=null, bool noChangeEvent=false)
Implements the base functionality for a BadScript Reference.
BadObject Resolve(BadSourcePosition? position)
Returns the Referenced Object.
static BadObjectReference Make(string refText, Func< BadSourcePosition?, BadObject > getter, Action< BadObject, BadSourcePosition?, BadPropertyInfo?>? setter=null, Action< BadSourcePosition?>? delete=null)
Creates a new Reference Object.
static BadObjectReference Make(string refText, Func< BadSourcePosition?, BadObject > getter, Action< BadObject, BadSourcePosition?, BadPropertyInfo?, bool >? setter, Action< BadSourcePosition?>? delete=null)
Creates a new Reference Object.
void Delete(BadSourcePosition? position)
Deletes the Reference from the Referenced Object.
void Set(BadObject obj, BadSourcePosition? position, BadPropertyInfo? info=null, bool noChangeEvent=false)
Sets the Referenced Object to a new Value.
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 Shared Data Structures and Functionality.
Contains the Error Objects for the BadScript2 Language.
Contains the Runtime Objects.
Definition BadArray.cs:10