comparison interpreter.cpp @ 6:1b575145197e

interpreter is now a class instead of a namespace with functions
author John W. Eaton <jwe@octave.org>
date Thu, 23 May 2019 07:41:18 -0400
parents 0e154787183d
children 04867eba6428
comparison
equal deleted inserted replaced
5:54edd85237ab 6:1b575145197e
1 #include <iostream>
1 #include <string> 2 #include <string>
2 3
3 #include <unistd.h> 4 #include <unistd.h>
4 5
5 #include "interpreter.h" 6 #include "interpreter.h"
7 8
8 #include "main.h" 9 #include "main.h"
9 #include "gui-main.h" 10 #include "gui-main.h"
10 #include "tty-main.h" 11 #include "tty-main.h"
11 12
12 namespace interpreter 13 namespace calc
13 { 14 {
14 void init (void) 15 interpreter *interpreter::the_interpreter = nullptr;
16
17 interpreter::interpreter (void)
15 { 18 {
19 if (the_interpreter)
20 {
21 std::cerr << "multiple interpreters are not possible!" << std::endl;
22 exit (1);
23 }
24
25 the_interpreter = this;
26
16 parser::init (); 27 parser::init ();
17 } 28 }
18 29
19 void fini (void) 30 interpreter::~interpreter (void)
20 { 31 {
21 parser::fini (); 32 parser::fini ();
22 } 33 }
23 34
24 int parse_and_execute (const std::string& line) 35 int interpreter::parse_and_execute (const std::string& line)
25 { 36 {
26 return parser::parse_and_execute (line); 37 return parser::parse_and_execute (line);
27 } 38 }
28 39
29 void emit_result (double value) 40 void interpreter::emit_result (double value)
30 { 41 {
31 // Simulate a delay in calculation. 42 // Simulate a delay in calculation.
32 sleep (1); 43 sleep (1);
33 44
34 if (calc::tty_mode) 45 if (calc::tty_mode)
35 tty::emit_result (value); 46 tty::emit_result (value);
36 else 47 else
37 gui::emit_result (value); 48 gui::emit_result (value);
38 } 49 }
39 50
40 void emit_error (const char *msg) 51 void interpreter::emit_error (const char *msg)
41 { 52 {
42 if (calc::tty_mode) 53 if (calc::tty_mode)
43 tty::emit_error (msg); 54 tty::emit_error (msg);
44 else 55 else
45 gui::emit_error (msg); 56 gui::emit_error (msg);