summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/virtualfieldaccess.cc
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-02-25 19:22:25 +0000
committerKarl Berry <karl@freefriends.org>2021-02-25 19:22:25 +0000
commitad547a6b5986815fda458221149728d9d9ab1d87 (patch)
tree16296910eb3eca724371474ea9aea3994dc69614 /Build/source/utils/asymptote/virtualfieldaccess.cc
parent947b43de3dd21d58ccc2ffadefc4441ea1c2a813 (diff)
restore Build,TODO from r57911
git-svn-id: svn://tug.org/texlive/trunk@57915 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/utils/asymptote/virtualfieldaccess.cc')
-rw-r--r--Build/source/utils/asymptote/virtualfieldaccess.cc45
1 files changed, 45 insertions, 0 deletions
diff --git a/Build/source/utils/asymptote/virtualfieldaccess.cc b/Build/source/utils/asymptote/virtualfieldaccess.cc
new file mode 100644
index 00000000000..aed130f33a6
--- /dev/null
+++ b/Build/source/utils/asymptote/virtualfieldaccess.cc
@@ -0,0 +1,45 @@
+/*****
+ * virtualfieldaccess.cc
+ * Andy Hammerlindl 2009/07/23
+ *
+ * Implements the access subclass used to read and write virtual fields.
+ *****/
+
+#include "virtualfieldaccess.h"
+#include "coder.h"
+
+namespace trans {
+
+void virtualFieldAccess::encode(action act, position pos, coder &e)
+{
+ switch(act) {
+ case CALL:
+ if (caller) {
+ caller->encode(CALL, pos, e);
+ } else {
+ this->encode(READ, pos, e);
+ e.encode(inst::popcall);
+ }
+ return;
+ case READ:
+ assert(getter);
+ getter->encode(CALL, pos, e);
+ return;
+ case WRITE:
+ if (setter)
+ setter->encode(CALL, pos, e);
+ else {
+ em.error(pos);
+ em << "virtual field is read-only";
+ }
+ return;
+ }
+}
+
+void virtualFieldAccess::encode(action act, position pos, coder &e, frame *)
+{
+ e.encode(inst::pop);
+ encode(act, pos, e);
+}
+
+} // namespace trans