home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #27 / NN_1992_27.iso / spool / gnu / g / bug / 1838 < prev    next >
Encoding:
Text File  |  1992-11-17  |  14.6 KB  |  968 lines

  1. Newsgroups: gnu.g++.bug
  2. Path: sparky!uunet!convex!darwin.sura.net!zaphod.mps.ohio-state.edu!magnus.acs.ohio-state.edu!cis.ohio-state.edu!minos.nmt.edu!jefu
  3. From: jefu@minos.nmt.edu (Jeffrey Putnam)
  4. Subject: compiler error in g++
  5. Message-ID: <9211161916.AA04134@minos.nmt.edu>
  6. Sender: gnulists@ai.mit.edu
  7. Organization: GNUs Not Usenet
  8. Distribution: gnu
  9. Date: Mon, 16 Nov 1992 05:16:12 GMT
  10. Approved: bug-g++@prep.ai.mit.edu
  11. Lines: 955
  12.  
  13. G++ gives me a compiler error and asks "please report".  The following
  14. is a script file that shows what I believe you need.  It seems
  15. that it does not like making a table of pointers to member functions -
  16. unhappily, I need such.  
  17.  
  18. Script started on Sat Nov 14 08:27:30 1992
  19. oberon.1 : g++ -v ops.C
  20. Reading specs from /usr/local/lib/gcc-lib/sun4/2.2.2/specs
  21. gcc version 2.2.2
  22.  /usr/local/lib/gcc-lib/sun4/2.2.2/cpp -lang-c++ -v -undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -Dsparc -Dsun -Dunix -D__sparc__ -D__sun__ -D__unix__ -D__sparc -D__sun -D__unix ops.C /usr/tmp/cca22075.i
  23. GNU CPP version 2.2.2 (sparc)
  24.  /usr/local/lib/gcc-lib/sun4/2.2.2/cc1plus /usr/tmp/cca22075.i -quiet -dumpbase ops.cc -version -o /usr/tmp/cca22075.s
  25. GNU C++ version 2.2.2 (sparc) compiled by GNU C version 2.2.2.
  26. ops.C: In method `void  molecule::DoInstruction (unsigned char)':
  27. ops.C:430: internal compiler error 116, please report
  28. oberon.2 : g++ -S ops.C
  29. ops.C: In method `void  molecule::DoInstruction (unsigned char)':
  30. ops.C:430: internal compiler error 116, please report
  31. oberon.3 : g++ -E ops.C
  32. # 1 "ops.C"
  33. # 1 "/usr/local/lib/g++-include/stdlib.h" 1 3
  34.  
  35.  
  36.  
  37.  
  38.  
  39. # 1 "/usr/local/lib/g++-include/stddef.h" 1 3
  40.  
  41.  
  42. extern "C" {
  43.  
  44.  
  45.  
  46. # 1 "/usr/local/lib/gcc-lib/sun4/2.2.2/include/stddef.h" 1 3
  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. typedef int ptrdiff_t;
  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. typedef int size_t;
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166. typedef short unsigned int wchar_t;
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196. # 7 "/usr/local/lib/g++-include/stddef.h" 2 3
  197.  
  198.  
  199.  
  200.  
  201. }
  202.  
  203. # 6 "/usr/local/lib/g++-include/stdlib.h" 2 3
  204.  
  205.  
  206. extern "C" {
  207.  
  208. int       abs(int);
  209.  
  210.  
  211. void volatile abort(void);
  212.  
  213.  
  214.  
  215.  
  216. double    atof(const char*);
  217. int       atoi(const char*);
  218. long      atol(const char*);
  219.  
  220. int       atexit(auto void (*p) (void));
  221. int       bsearch (const void *, const void *, size_t, 
  222.                    size_t, auto int (*ptf)(const void*, const void*));
  223. void*     calloc(size_t, size_t);
  224. void      cfree(void*);
  225.  
  226.  
  227. void volatile exit(int);
  228.  
  229.  
  230.  
  231.  
  232. char*     fcvt(double, int, int*, int*);
  233. void      free(void*);
  234. char*     getenv(const char*);
  235. int       getopt(int, const char**, const char*);
  236. int       getpw(int, char*);
  237. char*     gcvt(double, int, char*);
  238. char*     ecvt(double, int, int*, int*);
  239. extern char**   environ;
  240.  
  241. long      labs(long);
  242. void*     malloc(size_t);
  243. size_t    malloc_usable_size(void*);
  244. int       putenv(const char*);
  245. extern char*    optarg;
  246. extern int      opterr;
  247. extern int      optind;
  248. void      qsort(void*, size_t, size_t, auto int (*ptf)(void*,void*));
  249. int       rand(void);
  250. void*     realloc(void*, size_t);
  251. int       setkey(const char*);
  252. int       srand(unsigned int);
  253. double    strtod(const char*, char**);
  254. long      strtol(const char*, char**, int);
  255. unsigned long stroul(const char**, int);
  256. int       system(const char*);
  257.  
  258. long      random(void);
  259. void      srandom(int);
  260. char*     setstate(char*);
  261. char*     initstate(unsigned, char*, int);
  262.  
  263. double    drand48(void);
  264. void      lcong48(short*);
  265. long      jrand48(short*);
  266. long      lrand48(void);
  267. long      mrand48(void);
  268. long      nrand48(short*);
  269. short*    seed48(short*);
  270. void      srand48(long);
  271.  
  272. char*     ctermid(char*);
  273. char*     cuserid(char*);
  274. char*     tempnam(const char*, const char*);
  275. char*     tmpnam(char*);
  276.  
  277. }
  278.  
  279. # 1 "ops.C" 2
  280.  
  281. # 1 "molecule.h" 1
  282.  
  283.  
  284.  
  285. void bcopy(unsigned char *, unsigned char *, int) ;
  286.  
  287. typedef unsigned char atom ;
  288.  
  289. class instructions      
  290. {
  291.  
  292. protected:
  293.     int   length ;        
  294.     atom *contents ;    
  295.     class molecule     *molly ;   
  296.  
  297. public:                 
  298.     instructions()      { length = 100 ;
  299.               contents = (atom *) malloc(100 * sizeof(atom)) ; } ;
  300.  
  301.     instructions(int s) { length = s ; 
  302.               contents = (atom *) malloc(s * sizeof (atom)) ;} ;
  303.  
  304.     instructions(atom *i, int s) { length = s ;
  305.                    contents = (atom *) malloc(s * sizeof (atom)) ;
  306.                    bcopy(i, contents, s) ; } ;
  307.      
  308.     void grow ()        { length += 100 ; 
  309.                   contents = (atom *) realloc(contents, length * sizeof(atom)) ; } ;
  310.     atom atom_at(int i) { if ((i > 0) && (i < length)) 
  311.               return(contents[i]) ;
  312.                   else return(0) ; } ; 
  313.     int size()          { return(length) ; }    
  314. } ;
  315.  
  316. class context   
  317. {
  318.     instructions *atom_stream ;   
  319.     int           offset ;
  320.     
  321.  public:
  322.      
  323.      
  324.      
  325.      
  326.     context(molecule *ma) ;    
  327.     context (instructions *i, molecule *ma) ;  
  328.  
  329.     context *Clone (molecule *ma) ;   
  330.  
  331.     void reset ()  { offset = 0 ; }     ;
  332.     void Skip  (int i) { offset += i ; } ;
  333.  
  334.     atom next () { return(atom_stream->atom_at(offset++)) ; }; 
  335.     void insert_atom(atom a) ;
  336.     void break_instr () ;
  337.     void join(context *joiner) ;
  338.     atom *GetID() ;
  339.     void ReadIdAtoms(class operand_stack *os) ;
  340.     context  *FindLabel(atom a, int direction) ;
  341.     int  end_p() { return(offset = atom_stream -> size()) ; };
  342.     int  begin_p () { return (offset = 0) ; }
  343. } ;
  344.  
  345. const int stack_size = 100 ;
  346.  
  347. struct context_stack     
  348. {
  349.     context **stack ;
  350.     int     pointer ;
  351.     int     cs_size = stack_size ;
  352.     
  353.  public:
  354.     
  355.     context_stack() { pointer = 0 ; stack = (context **)malloc(sizeof(context *) * cs_size); };
  356.     void Push (context *c)  { stack[pointer++] = c ;
  357.                  if (pointer > cs_size) 
  358.                  {
  359.                  cs_size += stack_size ;
  360.                  } } ;
  361.     context *Pop() { if (pointer <= 0)
  362.             {
  363.             return (0) ;
  364.             pointer = 0 ;
  365.             }
  366.             else 
  367.             {
  368.             return(stack[--pointer]) ;
  369.             } } ;
  370.     int empty() { return(pointer == 0) ; }
  371.     int full()  { return(0) ; }
  372.     void reset () { pointer = 0 ; }  ;
  373.  
  374. } ;
  375.  
  376.  
  377. class operand_stack  
  378. {
  379.     atom *contents ;
  380.     int   top ;
  381.     int   size ;
  382.     
  383. public:
  384.     operand_stack() { size = 100 ;
  385.               contents = (atom *) malloc(size *sizeof(atom)) ;
  386.               top = 0 ; }
  387.     void Push (atom a)   { if (top == size) 
  388.                {
  389.                    size += 100 ;
  390.                    contents = (atom *)realloc(contents, size * sizeof(atom)) ;
  391.                }
  392.                contents[top++] = a ; }
  393.  
  394.     atom Pop ()     { if (top > 0) return(contents[--top]) ; else return(0); }
  395.     atom nth (int n){ return((top - n) > 0 ? contents[top-n] : 0) ; } ; 
  396.     void reset() { top = 0 ; } ;
  397.     
  398. } ;
  399.  
  400. class molecule
  401. {
  402.     atom                id[4] ;  
  403.     operand_stack       Stack ;
  404.     instructions       *Contents ;
  405.  
  406.     context            *Contexts[4] ;
  407.  
  408.  
  409.  
  410.  
  411.  
  412.  
  413.     context_stack       ContextStack ;  
  414.     molecule           *MoleculeGrabbers[4] ;   
  415.     int                 waiting = 0 ;    
  416.     atom                PatternID[4] ;   
  417.     atom               *PatternContents ;
  418.     
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.     double              damage ;
  428.  
  429. public :
  430.  
  431.  
  432.  
  433.     void execute(int n) ;  
  434.     void set_instructions(instructions *insts) {Contents = insts;} ;
  435.     void add_context(context *) ;
  436.     instructions *data()  { return( Contents) ; } ;
  437.     void match(atom) ;
  438.     void DoInstruction (atom instr) ;
  439.     void oops () { damage += 1 ; if (damage >= 255) die() ; };
  440.     void die () ;   
  441.     void Skip (int i) ;  
  442.     atom next () { return (   Contexts[0]  -> next()) ; } ;
  443.     
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450.     void  GetID();
  451.     void  PushContext() ;   
  452.     void  PopContext() ;
  453.     void  literal() ;
  454.     void  Pop() ;
  455.     void  dup() ;
  456.     void  exch() ;
  457.     void  copy() ;
  458.     void  if_instr () ;
  459.     void  not() ;
  460.     void  and() ;
  461.     void  or() ;
  462.     void  add() ;
  463.     void  mult() ;
  464.     void  divide() ;
  465.     void  subtract() ;
  466.     void  neg() ;
  467.     void  reset() ;
  468.     void  set_context() ;
  469.     void  read_instr() ;
  470.     void  write_instr() ;
  471.     void  break_instr() ;
  472.     void  join_instr() ;
  473.     void  wait() ;
  474.     void  call() ;
  475.     void  label() ;
  476.     void  return_instr() ;
  477.     void  exec_instr() ;
  478.     void  detach() ;
  479.     void  detach_and_exec() ;
  480.     void  find_label_forward() ;
  481.     void  find_label_backward() ;
  482.     void  equal() ;
  483.     void  gt() ;
  484.     void  lt() ;
  485.     void  end_p() ;
  486.     void  begin_p() ;
  487.     void  start_molecule() ;
  488.     void  reset_context() ;
  489.     void  nop() ;
  490.     void  get_damage() ;
  491.     void  getID() ;
  492.     void  startMolecule() ; 
  493.     void  JumpForwardLabel() ;
  494.     void  JumpBackwardLabel() ;
  495.     void  JumpForwardCount() ;
  496.     void  JumpBackwardCount() ;
  497. } ;
  498.  
  499. struct InstructionFunction
  500. {
  501.     char *name ;
  502.     void (molecule::*function)() ;
  503.  
  504. } ;
  505.  
  506. int InstructionSetSize ;
  507. InstructionFunction *InstructionTable[256] ;  
  508.  
  509.  
  510.  
  511. # 2 "ops.C" 2
  512.  
  513. # 1 "monitor.h" 1
  514.  
  515.  
  516.  
  517.  
  518. const int soup_size = 10 ;
  519.  
  520. class monitor 
  521. {
  522.     class molecule *soup[soup_size] ;  
  523.     class molecule *current_molecule ;
  524.     
  525.  public:
  526.     Birth(class molecule *, class context *, int dead_or_alive=1) ;
  527.     die (class molecule *) ;
  528.     wait(class molecule *, class molecule *) ;   
  529.     
  530. } ;
  531.  
  532. monitor SoupMachine ;
  533. # 3 "ops.C" 2
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.  
  541.  
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557. context::context(molecule *ma)   
  558.     atom_stream = new instructions(100); 
  559.     offset = 0 ; ma -> add_context(this) ;
  560.  
  561. context::context (instructions *i, molecule *ma) 
  562. {
  563.     atom_stream = i ;
  564.     offset = 0 ;
  565.     ma -> add_context(this);
  566.  
  567. context 
  568. *context::Clone (molecule *ma) 
  569. {
  570.     context *res = new context (atom_stream, ma) ;
  571.     res -> offset = offset ;
  572.     return (res) ;
  573. }
  574.  
  575.  
  576.  
  577.  
  578. void
  579. molecule::literal()
  580. {
  581.     Stack . Push(next()) ;
  582. }
  583.  
  584. void
  585. molecule::Pop()
  586. {
  587.     Stack . Pop () ;
  588. }
  589.  
  590. void
  591. molecule::dup()
  592. {
  593.     atom a ;
  594.     a =  Stack . Pop() ;
  595.     Stack . Push(a) ;
  596.     Stack . Push(a) ;
  597. }
  598.  
  599. void
  600. molecule::copy()  
  601. {
  602.     atom a,b ;
  603.     int s ;
  604.  
  605.     a = Stack . Pop() ;
  606.     b = Stack . nth((int) a) ;  
  607.     Stack . Push(b) ;
  608. }
  609.  
  610. void molecule::exch()
  611. {
  612.     atom a, b ;
  613.     a = Stack . Pop() ;
  614.     b = Stack . Pop() ;
  615.     Stack . Push (a) ;
  616.     Stack . Push (b) ;
  617.  
  618. void molecule::not()
  619. {
  620.     atom a  ;
  621.     a = Stack . Pop () ;
  622.     Stack . Push( !a ) ;
  623. }
  624.  
  625. void molecule::and()
  626. {
  627.     atom a,b ;
  628.     a = Stack . Pop () ;
  629.     b = Stack . Pop () ;
  630.     Stack . Push (a && b) ;
  631. }
  632.  
  633. void molecule::or()
  634. {
  635.     atom a,b ;
  636.     a = Stack . Pop () ;
  637.     b = Stack . Pop () ;
  638.     Stack . Push (a || b) ;
  639. }
  640.  
  641. void molecule::add()
  642. {
  643.     atom a,b ;
  644.     a = Stack . Pop () ;
  645.     b = Stack . Pop () ;
  646.     Stack . Push (a + b) ;
  647.  
  648. }
  649.  
  650. void molecule::mult()
  651. {
  652.     atom a,b ;
  653.     a = Stack . Pop () ;
  654.     b = Stack . Pop () ;
  655.     Stack . Push (a * b) ;
  656. }
  657.  
  658. void molecule::divide()
  659. {
  660.     atom a,b ;
  661.     
  662.     a = Stack . Pop () ;
  663.     b = Stack . Pop () ;
  664.     if (b != 0)
  665.     {
  666.     Stack . Push (a % b) ;   
  667.     Stack . Push (a / b) ;
  668.     }
  669.     else
  670.     {
  671.     Stack . Push (255) ;
  672.     Stack . Push (255) ;
  673.     }
  674. }
  675.  
  676. void molecule::subtract()
  677. {
  678.     atom a,b ;
  679.     a = Stack . Pop () ;
  680.     b = Stack . Pop () ;
  681.     if ((a - b) > 0) Stack . Push(a-b) ; else Stack . Push (255 - (a - b)) ;
  682. }
  683.  
  684. void molecule::gt()
  685. {
  686.     atom a,b ;
  687.     a = Stack . Pop() ;
  688.     b = Stack . Pop () ;
  689.     Stack . Push (a > b) ;
  690. }
  691.  
  692. void molecule::lt()
  693. {
  694.     atom a,b ;
  695.     a = Stack . Pop() ;
  696.     b = Stack . Pop () ;
  697.     Stack . Push (a < b) ;
  698. }
  699.  
  700. void molecule::equal()
  701. {
  702.     atom a,b ;
  703.     a = Stack . Pop() ;
  704.     b = Stack . Pop () ;
  705.     Stack . Push (a == b) ;
  706. }
  707.  
  708. void molecule::get_damage() 
  709. {
  710.     Stack . Push((atom) damage) ;
  711. }  
  712.  
  713.  
  714.  
  715. void
  716. molecule::if_instr()
  717. {   
  718.     
  719.     
  720.     
  721.     
  722.     
  723.     
  724.  
  725.    atom a ;
  726.  
  727.    a = Stack . Pop() ;
  728.  
  729.    if (a != 0)
  730.    {
  731.        Skip(3) ;
  732.    }
  733. }
  734.  
  735. void molecule::die () 
  736. {
  737.     free (Contents) ;   
  738.  
  739.  
  740.  
  741. }
  742.  
  743. void molecule::Skip (int how_many) 
  744. {
  745.        Contexts[0] ->Skip(how_many) ;
  746. }
  747.  
  748. void molecule::reset()   
  749. {
  750.     if (   Contexts[1]  != ((void *)0) )    Contexts[1]  -> reset() ;
  751.     if (  Contexts[2]  != ((void *)0) )   Contexts[2]  -> reset() ;
  752.     Stack . reset() ;
  753.     ContextStack . reset() ;
  754. }
  755.  
  756.  
  757.  
  758.  
  759.  
  760. void molecule::read_instr()
  761. {
  762.     atom a ;
  763.     a =    Contexts[1]  -> next() ;
  764.     Stack . Push(a)  ;
  765. }
  766.  
  767. void molecule::write_instr()
  768. {
  769.     
  770.  
  771.    atom a = Stack . Pop() ;
  772.      Contexts[2]  -> insert_atom(a) ;
  773.  
  774. }
  775.  
  776. void molecule::break_instr()
  777. {
  778.     if (  Contexts[2]  != ((void *)0) )
  779.     {
  780.       Contexts[2]  -> break_instr();
  781.     }
  782.     else
  783.     {
  784.     oops() ;
  785.     }
  786. }
  787.  
  788. void molecule::wait()
  789. {
  790.      
  791.     waiting = 1 ;
  792.      
  793. }
  794.  
  795. void molecule::getID()  
  796. {
  797.     atom *a ;
  798.     int i ;
  799.     
  800.     a =    Contexts[1]  -> GetID() ;
  801.     for (i = 0 ; i < 4 ; i++)
  802.     {
  803.     Stack . Push(a[i]) ;
  804.     }
  805. }
  806.  
  807. void molecule::PushContext()
  808. {
  809.     atom a ;
  810.     a = Stack . Pop() ;
  811.     ContextStack . Push(Contexts[a & 3] -> Clone(this)) ;
  812. }
  813.  
  814. void molecule::PopContext ()
  815. {
  816.     atom a ;
  817.     a = Stack . Pop() ;
  818.     Contexts[a & 3] = ContextStack . Pop () ;
  819. }
  820.  
  821. void molecule::call()
  822. {
  823.     atom a = Stack . Pop () ;
  824.  
  825.     ContextStack . Push(   Contexts[0] ) ;
  826.     ContextStack . Push(   Contexts[0]  -> FindLabel(a,1)) ;
  827.        Contexts[0]  = ContextStack . Pop () ;
  828. }
  829.  
  830.  
  831.  
  832.  
  833. void molecule::detach()
  834. {
  835.     SoupMachine . Birth(this,   Contexts[2] , 0)  ;  
  836. }
  837.  
  838. void molecule::detach_and_exec()
  839. {
  840.     SoupMachine . Birth(this,   Contexts[2] ) ;
  841. }
  842.  
  843. void molecule::find_label_forward()
  844. {
  845.     atom a,b ;
  846.     a = Stack . Pop () ;   
  847.     b = Stack . Pop() & 3 ;  
  848.     
  849.     ContextStack . Push(Contexts[b] -> FindLabel(a,1)) ;
  850. }
  851.  
  852. void molecule::find_label_backward() 
  853. {
  854.     atom a = Stack . Pop () ;
  855.     atom b = Stack . Pop () & 3 ;
  856.     
  857.     ContextStack . Push(Contexts[b] -> FindLabel(a,-1)) ;
  858. }
  859.  
  860. void molecule::end_p()
  861. {
  862.      
  863.      
  864.      
  865.  
  866.     atom a = Stack . Pop() ;
  867.     
  868.     Stack.Push(Contexts[a&3] -> end_p()) ;
  869. }
  870.  
  871. void molecule::begin_p()
  872. {
  873.     atom a = Stack . Pop() ;
  874.     
  875.     Stack.Push(Contexts[a&3] -> begin_p()) ;
  876. }
  877.  
  878. void molecule::start_molecule()
  879. {
  880.      
  881. }
  882.  
  883. void molecule::reset_context()
  884. {
  885.     atom a = Stack . Pop () ;
  886.     Contexts[a & 3] -> reset () ;
  887. }
  888.  
  889.  
  890.  
  891.  
  892.  
  893. void molecule::label()  
  894. {
  895.     next () ;
  896. }
  897.  
  898. void  molecule::JumpForwardLabel()
  899. {
  900.  
  901.     atom a ;
  902.     a = Stack . Pop () ;
  903.     ContextStack . Push(   Contexts[0]  -> FindLabel(a,1)) ;
  904.        Contexts[0]  = ContextStack . Pop () ;
  905.  
  906. }
  907.  
  908. void  molecule::JumpBackwardLabel()
  909. {
  910.  
  911.     atom a ;
  912.     a = Stack . Pop () ;
  913.     ContextStack . Push(   Contexts[0]  -> FindLabel(a, -1)) ;
  914.        Contexts[0]  = ContextStack . Pop () ;
  915.  
  916. }
  917.  
  918. void  molecule::JumpBackwardCount() 
  919. {
  920.     atom a ;
  921.     a = Stack . Pop() ;
  922.        Contexts[0]  -> Skip(-a) ;
  923. }
  924.  
  925. void  molecule::JumpForwardCount() 
  926. {
  927.     atom a ;
  928.     a = Stack . Pop() ;
  929.        Contexts[0]  -> Skip(a) ;
  930. }
  931.  
  932. void molecule::nop()
  933. {
  934.  
  935.  
  936.  
  937.     damage -= 0.2 ;   
  938.  
  939. }
  940.  
  941. void molecule::execute(int n)
  942. {
  943.     int i ;
  944.     atom a ;
  945.     
  946.     for (i = 0 ; i < n ; i++)
  947.     {
  948.     a =    Contexts[0]  -> next () ;
  949.     DoInstruction(a) ;
  950.     }
  951. }
  952.  
  953.     
  954. inline void molecule::DoInstruction(atom instr)
  955.     extern InstructionFunction *InstructionTable[] ;
  956.     (InstructionTable[instr]->function)() ; 
  957. };
  958. oberon.4 : exit
  959. exit
  960.  
  961. script done on Sat Nov 14 08:28:53 1992
  962.  
  963.