Tree @upstream/2.80+ds (Download .tar.gz)
- base
- build-scripts
- cudareflect
- doc
- examples
- GL
- gl-matrix-2.4.0-pruned
- GUI
- LspCpp
- patches
- prc
- tests
- webgl
- _config.yml
- abs3doutfile.h
- absyn.cc
- absyn.h
- access.cc
- access.h
- align.h
- angle.h
- application.cc
- application.h
- array.cc
- array.h
- arrayop.h
- aspy.py
- asy-keywords.el
- asy-list.pl
- asy.ico
- asy.rc
- asymptote.nsi
- asymptote.spec
- autogen.sh
- ax_pthread.m4
- bbox.h
- bbox3.h
- beziercurve.cc
- beziercurve.h
- bezierpatch.cc
- bezierpatch.h
- BUGS
- builtin.cc
- builtin.h
- callable.cc
- callable.h
- camp.l
- camp.tab.cc
- camp.tab.h
- camp.y
- camperror.cc
- camperror.h
- castop.h
- cc-mode2.el
- ChangeLog
- coder.cc
- coder.h
- coenv.cc
- coenv.h
- common.h
- config.guess
- config.h.in
- config.sub
- configure
- configure.ac
- constructor.cc
- dec.cc
- dec.h
- Delaunay.cc
- Delaunay.h
- drawclipbegin.h
- drawclipend.h
- drawelement.h
- drawfill.cc
- drawfill.h
- drawgrestore.h
- drawgroup.h
- drawgsave.h
- drawimage.h
- drawlabel.cc
- drawlabel.h
- drawlayer.h
- drawpath.cc
- drawpath.h
- drawpath3.cc
- drawpath3.h
- drawsurface.cc
- drawsurface.h
- drawverbatim.h
- entry.cc
- entry.h
- env.cc
- env.h
- envcompleter.cc
- envcompleter.h
- EnvVarUpdate.nsh
- errormsg.cc
- errormsg.h
- errors
- errortest.asy
- exp.cc
- exp.h
- EXRFiles.cc
- EXRFiles.h
- fftw++.cc
- fftw++.h
- fftw++asy.cc
- fileio.cc
- fileio.h
- findsym.pl
- flatguide.cc
- flatguide.h
- fpu.h
- frame.h
- fundec.cc
- fundec.h
- gc-8.2.0.tar.gz
- generate_enums.py
- genv.cc
- genv.h
- getopt.c
- getopt.h
- getopt1.c
- glew.c
- glrender.cc
- glrender.h
- GLTextures.cc
- GLTextures.h
- gsl.cc
- guide.cc
- guide.h
- guideflags.h
- impdatum.cc
- index.html
- inst.h
- INSTALL
- install-sh
- interact.cc
- interact.h
- item.h
- jsfile.cc
- jsfile.h
- keywords.cc
- keywords.pl
- knot.cc
- knot.h
- lex.yy.cc
- lexical.h
- libatomic_ops-7.6.12.tar.gz
- LICENSE
- LICENSE.LESSER
- lnkX64IconFix.nsh
- locate.cc
- locate.h
- lspserv.cc
- lspserv.h
- main.cc
- Makefile.in
- makeUnique.h
- material.h
- mathop.h
- memory.h
- mod.h
- modifier.h
- name.cc
- name.h
- newexp.cc
- newexp.h
- opcodes.h
- opsymbols.pl
- pair.h
- parser.cc
- parser.h
- path.cc
- path.h
- path3.cc
- path3.h
- pen.cc
- pen.h
- picture.cc
- picture.h
- pipestream.cc
- pipestream.h
- Pipfile
- policy.h
- prcfile.h
- predicates.cc
- predicates.h
- primitives.h
- process.cc
- process.h
- profile.py
- profiler.h
- program.cc
- program.h
- psfile.cc
- psfile.h
- README
- record.cc
- record.h
- refaccess.cc
- refaccess.h
- ReleaseNotes
- revision.cc
- rounding.h
- runarray.cc
- runarray.h
- runarray.in
- runbacktrace.cc
- runbacktrace.h
- runbacktrace.in
- runfile.cc
- runfile.h
- runfile.in
- runhistory.cc
- runhistory.h
- runhistory.in
- runlabel.cc
- runlabel.h
- runlabel.in
- runmath.cc
- runmath.h
- runmath.in
- runpair.cc
- runpair.h
- runpair.in
- runpath.cc
- runpath.h
- runpath.in
- runpath3d.cc
- runpath3d.h
- runpath3d.in
- runpicture.cc
- runpicture.h
- runpicture.in
- runstring.cc
- runstring.h
- runstring.in
- runsystem.cc
- runsystem.h
- runsystem.in
- runtime.cc
- runtime.h
- runtime.in
- runtime.pl
- runtimebase.in
- runtriple.cc
- runtriple.h
- runtriple.in
- seconds.h
- settings.cc
- settings.h
- shaders.cc
- shaders.h
- simpson.cc
- stack.cc
- stack.h
- statistics.h
- stm.cc
- stm.h
- symbol.cc
- symbol.h
- symbolmaps.cc
- symbolmaps.h
- table.h
- testv3d.asy
- texfile.cc
- texfile.h
- tinyexr.cc
- TODO
- tr.cc
- tr.h
- transform.h
- triple.h
- types.cc
- types.h
- util.cc
- util.h
- v3dfile.cc
- v3dfile.h
- v3dheadertypes.csv
- v3dheadertypes.h
- v3dheadertypes.py
- v3dtypes.csv
- v3dtypes.h
- v3dtypes.py
- varinit.cc
- varinit.h
- virtualfieldaccess.cc
- virtualfieldaccess.h
- vm.h
- wce
- xstream.h
record.h @upstream/2.80+ds — raw · history · blame
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | /***** * record.h * Andy Hammerlindl 2003/07/09 * * The type for records and modules in the language. *****/ #ifndef RECORD_H #define RECORD_H #include "types.h" #include "env.h" #include "frame.h" #include "access.h" namespace vm { struct lambda; } using trans::frame; using trans::protoenv; using trans::varEntry; using trans::tyEntry; namespace types { class record : public ty { // The base name of this type. symbol name; // The frame. Like a frame for a function, it allocates the accesses // for fields and specifies the size of the record. frame *level; // The runtime representation of the record used by the virtual machine. vm::lambda *init; public: // The name bindings for fields of the record. protoenv e; // These are name bindings that should be added to the enclosing environment // after translation of the record is completed. Constructors implicitly // defined by "operator init" are stored here. protoenv postdefenv; record(symbol name, frame *level); ~record(); symbol getName() { return name; } bool isReference() { return true; } size_t hash() const { // Use the pointer, as two records are equivalent only if they are the // same object. return (size_t)this; } // Initialize to null by default. trans::access *initializer(); frame *getLevel(bool statically = false) { if (statically) { frame *f=level->getParent(); return f ? f : level; } else return level; } vm::lambda *getInit() { return init; } // Allocates a new dynamic field in the record. trans::access *allocField(bool statically) { frame *underlevel = getLevel(statically); assert(underlevel); return underlevel->allocLocal(); } // Create a statically enclosed record from this record. record *newRecord(symbol id, bool statically); void print(ostream& out) const { out << name; } void debug(ostream& out) const { out << "struct " << name << endl; out << "types:" << endl; out << "re-implement" << endl; //out << te; out << "fields: " << endl; out << "re-implement" << endl; //out << ve; } }; // A record that is being used just for its fields and types, and has no real // initializer. This is for modules such as settings that are built into the // language. class dummyRecord : public record { public: dummyRecord(symbol name); dummyRecord(string s); // Convenient functions for adding fields. void add(string name, ty *t, trans::access *a, trans::permission perm=trans::PUBLIC); void add(string name, function *t, vm::bltin f, trans::permission perm=trans::PUBLIC); }; } //namespace types #endif |