Fix numbers parsing
diff --git a/src/toml/lexer.go b/src/toml/lexer.go
index 876817e..510adc8 100644
--- a/src/toml/lexer.go
+++ b/src/toml/lexer.go
@@ -199,7 +199,7 @@
 		case '\n':
 			l.ignore()
 			l.pos += 1
-			l.emit(tokenEOF)
+			/*l.emit(tokenEOF)*/
 			return lexVoid
 		}
 
@@ -270,6 +270,7 @@
 }
 
 func lexKey(l *lexer) stateFn {
+	l.ignore()
 	for isAlpha(l.next()) {
 	}
 	l.backup()
@@ -363,12 +364,16 @@
 		next := l.next()
 		if next == '.' { point_seen = true
 		} else if isDigit(next) { digit_seen = true
-		} else { break }
+		} else {
+			l.backup()
+			break
+		}
 	}
 
 	if !digit_seen {
 		return l.errorf("no digit in that number")
 	}
+	fmt.Println("-->", l.input[l.pos:])
 	if point_seen {
 		l.emit(tokenFloat)
 	} else {
diff --git a/src/toml/lexer_test.go b/src/toml/lexer_test.go
index 5a67038..dfb5fb4 100644
--- a/src/toml/lexer_test.go
+++ b/src/toml/lexer_test.go
@@ -218,3 +218,15 @@
 		token{tokenEOF, ""},
 	})
 }
+
+func TestMultiline(t *testing.T) {
+	testFlow(t, "foo = 42\nbar=21", []token{
+		token{tokenKey, "foo"},
+		token{tokenEqual, "="},
+		token{tokenInteger, "42"},
+		token{tokenKey, "bar"},
+		token{tokenEqual, "="},
+		token{tokenInteger, "21"},
+		token{tokenEOF, ""},
+	})
+}
diff --git a/src/toml/parser.go b/src/toml/parser.go
index e4188a0..a700b91 100644
--- a/src/toml/parser.go
+++ b/src/toml/parser.go
@@ -73,6 +73,8 @@
 		return parseGroup
 	case tokenKey:
 		return parseAssign
+	case tokenEOF:
+		return nil
 	default:
 		panic("unexpected token")
 	}
@@ -95,7 +97,12 @@
 	key := p.getToken()
 	p.assume(tokenEqual)
 	value := parseRvalue(p)
-	p.tree.Set(key.val, value)
+	final_key := key.val
+	if p.currentGroup != "" {
+		final_key = p.currentGroup + "." + key.val
+	}
+	fmt.Println("Setting k:", final_key, "val:", value)
+	p.tree.Set(final_key, value)
 	return parseStart(p)
 }
 
diff --git a/src/toml/parser_test.go b/src/toml/parser_test.go
index 00b86bc..acc9307 100644
--- a/src/toml/parser_test.go
+++ b/src/toml/parser_test.go
@@ -12,7 +12,7 @@
 	}
 }
 
-func testCreateSubTree(t *testing.T) {
+func TestCreateSubTree(t *testing.T) {
 	tree := make(TomlTree)
 	tree.createSubTree("a.b.c")
 	tree.Set("a.b.c", 42)
@@ -22,25 +22,32 @@
 }
 
 
-func testSimpleKV(t *testing.T) {
+func TestSimpleKV(t *testing.T) {
 	tree := Load("a = 42")
 	assertTree(t, tree, map[string]interface{}{
-		"a": 42,
+		"a": int64(42),
 	})
 
 	tree = Load("a = 42\nb = 21")
 	assertTree(t, tree, map[string]interface{}{
-		"a": 42,
-		"b": 21,
+		"a": int64(42),
+		"b": int64(21),
 	})
 }
 
-func testSimpleIntegers(t *testing.T) {
+func TestSimpleNumbers(t *testing.T) {
 	tree := Load("a = +42\nb = -21\nc = +4.2\nd = -2.1")
 	assertTree(t, tree, map[string]interface{}{
-		"a": 42,
-		"b": -21,
-		"c": 4.2,
-		"d": -4.2,
+		"a": int64(42),
+		"b": int64(-21),
+		"c": float64(4.2),
+		"d": float64(-2.1),
 	})
 }
+
+/*func TestSimpleDate(t *testing.T) {*/
+	/*tree := Load("a = 12")*/
+	/*assertTree(t, tree, map[string]interface{}{*/
+		/*"a": 42,*/
+	/*})*/
+/*}*/
diff --git a/src/toml/toml.go b/src/toml/toml.go
index 9c84455..137a9fe 100644
--- a/src/toml/toml.go
+++ b/src/toml/toml.go
@@ -9,6 +9,17 @@
 // This is the result of the parsing of a TOML file.
 type TomlTree map[string]interface{}
 
+// Keys returns the keys of the toplevel tree.
+// Warning: this is a costly operation.
+func (t *TomlTree) Keys() []string {
+	keys := make([]string, 0)
+	mp := (map[string]interface{})(*t)
+	for k, _ := range mp {
+		keys = append(keys, k)
+	}
+	return keys
+}
+
 // Get an element from the tree.
 // If the path described by the key does not exist, nil is returned.
 func (t *TomlTree) Get(key string) interface{} {
@@ -32,11 +43,12 @@
 	for _, intermediate_key := range keys[:len(keys)-1] {
 		_, exists := (*subtree)[intermediate_key]
 		if !exists {
-			(*subtree)[intermediate_key] = make(TomlTree)
+			var new_tree TomlTree = make(TomlTree)
+			(*subtree)[intermediate_key] = &new_tree
 		}
 		subtree = (*subtree)[intermediate_key].(*TomlTree)
 	}
-	(*subtree)[keys[len(key) - 1]] = value
+	(*subtree)[keys[len(keys) - 1]] = value
 }
 
 // createSubTree takes a tree and a key andcreate the necessary intermediate
@@ -49,9 +61,10 @@
 	for _, intermediate_key := range strings.Split(key, ".") {
 		_, exists := (*subtree)[intermediate_key]
 		if !exists {
-			(*subtree)[intermediate_key] = make(TomlTree)
+			var new_tree TomlTree = make(TomlTree)
+			(*subtree)[intermediate_key] = &new_tree
 		}
-		subtree = (*subtree)[intermediate_key].(*TomlTree)
+		subtree = ((*subtree)[intermediate_key]).(*TomlTree)
 	}
 }