rubyspec (owner)

Revisions

gist: 5075 Download_button fork
public
Public Clone URL: git://gist.github.com/5075.git
Embed All Files: show embed
Diff #
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
diff --git a/vm/symboltable.cpp b/vm/symboltable.cpp
new file mode 100644
index 0000000..b3586da
--- /dev/null
+++ b/vm/symboltable.cpp
@@ -0,0 +1,39 @@
+#include "symboltable.hpp"
+
+namespace rubinius {
+ SymbolPair::SymbolPair(long sym, char* str, SymbolPair* next) {
+
+ }
+
+ SymbolPair::~SymbolPair() {
+
+ }
+
+
+ SymbolTable::SymbolTable(long first_symbol) {
+ base = first_symbol;
+ }
+
+ SymbolTable::~SymbolTable() {
+
+ }
+
+ long SymbolTable::allocate_symbol() {
+ return ++base;
+ }
+
+ SYMBOL SymbolTable::lookup(STATE, const char* str, size_t size) {
+ SYMBOL sym;
+ return sym;
+ }
+
+ SYMBOL SymbolTable::lookup(STATE, String* str) {
+ SYMBOL sym;
+ return sym;
+ }
+
+ String* SymbolTable::symbol_to_string(STATE, Symbol* sym) {
+ String* str;
+ return str;
+ }
+}
diff --git a/vm/symboltable.hpp b/vm/symboltable.hpp
new file mode 100644
index 0000000..449353f
--- /dev/null
+++ b/vm/symboltable.hpp
@@ -0,0 +1,35 @@
+#include "oop.hpp"
+#include "prelude.hpp"
+
+#include <map>
+#include <string>
+
+namespace rubinius {
+ class SymbolPair {
+ public:
+ long symbol;
+ std::string str;
+ SymbolPair* next;
+
+ SymbolPair(long sym, char* str, SymbolPair* next);
+ ~SymbolPair();
+ };
+
+ typedef std::map<hashval, SymbolPair> symbol_map;
+
+ class String;
+
+ class SymbolTable {
+ public:
+ SymbolTable(long first_symbol = 0);
+ ~SymbolTable();
+
+ SYMBOL lookup(STATE, const char* str, size_t size = 0);
+ SYMBOL lookup(STATE, String* str);
+ String* symbol_to_string(STATE, Symbol* sym);
+
+ private:
+ symbol_map symbols;
+ long base;
+ };
+};