Browse Source

Fix broken lexer test

master
Dylan Baker 7 years ago
parent
commit
0bd9afe74b
3 changed files with 12 additions and 11 deletions
  1. 8
    8
      src/lexer.js
  2. 2
    1
      src/tokenStream.js
  3. 2
    2
      test/lexer.js

+ 8
- 8
src/lexer.js View File

5
   scan(source) {
5
   scan(source) {
6
     let pos = 0
6
     let pos = 0
7
     let line = 1
7
     let line = 1
8
-    let tokens = new TokenStream()
8
+    let tokenStream = new TokenStream()
9
 
9
 
10
     while (pos < source.length) {
10
     while (pos < source.length) {
11
       if (source[pos].match(/\(/)) {
11
       if (source[pos].match(/\(/)) {
12
-        tokens.push({
12
+        tokenStream.tokens.push({
13
           type: tokenTypes.OPAREN,
13
           type: tokenTypes.OPAREN,
14
           line: line,
14
           line: line,
15
         })
15
         })
16
         pos++
16
         pos++
17
       } else if (source[pos].match(/\)/)) {
17
       } else if (source[pos].match(/\)/)) {
18
-        tokens.push({
18
+        tokenStream.tokens.push({
19
           type: tokenTypes.CPAREN,
19
           type: tokenTypes.CPAREN,
20
           line: line,
20
           line: line,
21
         })
21
         })
22
         pos++
22
         pos++
23
       } else if (source[pos].match(/['"]/)) {
23
       } else if (source[pos].match(/['"]/)) {
24
-        tokens.push({
24
+        tokenStream.tokens.push({
25
           type: tokenTypes.QUOTE,
25
           type: tokenTypes.QUOTE,
26
           line: line,
26
           line: line,
27
         })
27
         })
28
         pos++
28
         pos++
29
       } else if (source[pos].match(/:/)) {
29
       } else if (source[pos].match(/:/)) {
30
         let value = /:([^()'"\s]+)/.exec(source.slice(pos))[1].trim()
30
         let value = /:([^()'"\s]+)/.exec(source.slice(pos))[1].trim()
31
-        tokens.push({
31
+        tokenStream.tokens.push({
32
           type: tokenTypes.ATTRIBUTE,
32
           type: tokenTypes.ATTRIBUTE,
33
           line: line,
33
           line: line,
34
           value: value,
34
           value: value,
41
         pos++
41
         pos++
42
       } else {
42
       } else {
43
         let value = /[^()"':]+/.exec(source.slice(pos))[0]
43
         let value = /[^()"':]+/.exec(source.slice(pos))[0]
44
-        tokens.push({
44
+        tokenStream.tokens.push({
45
           type: tokenTypes.LITERAL,
45
           type: tokenTypes.LITERAL,
46
           line: line,
46
           line: line,
47
           value: value.trim(),
47
           value: value.trim(),
50
       }
50
       }
51
     }
51
     }
52
 
52
 
53
-    tokens.push({
53
+    tokenStream.tokens.push({
54
       type: tokenTypes.EOF,
54
       type: tokenTypes.EOF,
55
       line: line,
55
       line: line,
56
     })
56
     })
57
-    return tokens
57
+    return tokenStream
58
   }
58
   }
59
 }
59
 }

+ 2
- 1
src/tokenStream.js View File

1
 module.exports = class TokenStream extends Array {
1
 module.exports = class TokenStream extends Array {
2
   constructor() {
2
   constructor() {
3
     super()
3
     super()
4
+    this.tokens = []
4
     this.position = 0
5
     this.position = 0
5
   }
6
   }
6
 
7
 
17
   }
18
   }
18
 
19
 
19
   peek(step = 0) {
20
   peek(step = 0) {
20
-    return this[this.position + step]
21
+    return this.tokens[this.position + step]
21
   }
22
   }
22
 }
23
 }

+ 2
- 2
test/lexer.js View File

8
   const lexer = new Lexer()
8
   const lexer = new Lexer()
9
   let tokens = lexer.scan(
9
   let tokens = lexer.scan(
10
     '(div :class "foobar" (p "Lorem ipsum dolor sit amet"))',
10
     '(div :class "foobar" (p "Lorem ipsum dolor sit amet"))',
11
-  )
11
+  ).tokens
12
   t.deepEqual(tokens.map(token => token.type), [
12
   t.deepEqual(tokens.map(token => token.type), [
13
     tt.OPAREN,
13
     tt.OPAREN,
14
     tt.LITERAL,
14
     tt.LITERAL,
36
   let tokens = lexer.scan(`(
36
   let tokens = lexer.scan(`(
37
     (div :class "foobar"
37
     (div :class "foobar"
38
       (p :class "bazquux"))
38
       (p :class "bazquux"))
39
-  `)
39
+  `).tokens
40
   t.equal(tokens[2].line, 2)
40
   t.equal(tokens[2].line, 2)
41
   t.equal(tokens[7].line, 3)
41
   t.equal(tokens[7].line, 3)
42
 })
42
 })

Loading…
Cancel
Save