riml 0.2.3 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/compiler.rb +40 -10
- data/lib/constants.rb +4 -4
- data/lib/grammar.y +132 -131
- data/lib/lexer.rb +2 -2
- data/lib/nodes.rb +689 -679
- data/lib/parser.rb +908 -900
- data/lib/riml.rb +26 -3
- data/lib/warning_buffer.rb +42 -0
- data/version.rb +2 -2
- metadata +3 -2
data/lib/riml.rb
CHANGED
@@ -3,6 +3,7 @@ require 'nodes'
|
|
3
3
|
require 'lexer'
|
4
4
|
require 'parser'
|
5
5
|
require 'compiler'
|
6
|
+
require 'warning_buffer'
|
6
7
|
|
7
8
|
module Riml
|
8
9
|
# lex code into tokens
|
@@ -32,8 +33,11 @@ module Riml
|
|
32
33
|
end
|
33
34
|
compiler.parser = parser
|
34
35
|
output = compiler.compile(nodes)
|
35
|
-
|
36
|
-
|
36
|
+
if input.is_a?(File)
|
37
|
+
write_file(output, input.path)
|
38
|
+
else
|
39
|
+
output
|
40
|
+
end
|
37
41
|
ensure
|
38
42
|
input.close if input.is_a?(File)
|
39
43
|
process_compile_queue!(compiler)
|
@@ -51,6 +55,8 @@ module Riml
|
|
51
55
|
else
|
52
56
|
raise ArgumentError, "need filenames to compile"
|
53
57
|
end
|
58
|
+
ensure
|
59
|
+
flush_warnings
|
54
60
|
end
|
55
61
|
|
56
62
|
# checks syntax of `input` (lexes + parses) without going through ast rewriting or compilation
|
@@ -75,11 +81,28 @@ module Riml
|
|
75
81
|
end
|
76
82
|
|
77
83
|
def self.warn(warning)
|
78
|
-
|
84
|
+
warning_buffer << warning
|
79
85
|
end
|
80
86
|
|
87
|
+
class << self
|
88
|
+
attr_accessor :warnings
|
89
|
+
end
|
90
|
+
self.warnings = true
|
91
|
+
|
81
92
|
private
|
82
93
|
|
94
|
+
def self.flush_warnings
|
95
|
+
if warnings
|
96
|
+
warning_buffer.flush
|
97
|
+
else
|
98
|
+
warning_buffer.clear
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.warning_buffer
|
103
|
+
@warning_buffer ||= WarningBuffer.new
|
104
|
+
end
|
105
|
+
|
83
106
|
def self.threaded_compile_files(*filenames)
|
84
107
|
threads = []
|
85
108
|
filenames.each do |fname|
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Riml
|
2
|
+
class WarningBuffer
|
3
|
+
BUFFER_WRITE_LOCK = Mutex.new
|
4
|
+
WARNING_FMT = "Warning: %s"
|
5
|
+
|
6
|
+
class << self
|
7
|
+
def stream=(stream)
|
8
|
+
BUFFER_WRITE_LOCK.synchronize { @stream = stream }
|
9
|
+
end
|
10
|
+
attr_reader :stream
|
11
|
+
end
|
12
|
+
|
13
|
+
# default stream
|
14
|
+
self.stream = $stderr
|
15
|
+
|
16
|
+
attr_reader :buffer
|
17
|
+
|
18
|
+
def initialize(*warnings)
|
19
|
+
@buffer = []
|
20
|
+
buffer.concat warnings
|
21
|
+
end
|
22
|
+
|
23
|
+
def <<(warning)
|
24
|
+
BUFFER_WRITE_LOCK.synchronize { buffer << warning }
|
25
|
+
end
|
26
|
+
alias push <<
|
27
|
+
|
28
|
+
def flush
|
29
|
+
BUFFER_WRITE_LOCK.synchronize do
|
30
|
+
stream = self.class.stream
|
31
|
+
buffer.each { |w| stream.puts WARNING_FMT % w }
|
32
|
+
buffer.clear
|
33
|
+
stream.flush
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def clear
|
38
|
+
BUFFER_WRITE_LOCK.synchronize { buffer.clear }
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
data/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: riml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-04-
|
12
|
+
date: 2013-04-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: racc
|
@@ -41,6 +41,7 @@ files:
|
|
41
41
|
- version.rb
|
42
42
|
- lib/parser.rb
|
43
43
|
- lib/walker.rb
|
44
|
+
- lib/warning_buffer.rb
|
44
45
|
- lib/class_map.rb
|
45
46
|
- lib/included.vim
|
46
47
|
- lib/constants.rb
|