take 0.0.7 → 0.0.8

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bd7fcbfad25e72bc99e09158ce86f8b529e75b1c
4
- data.tar.gz: 07763bf83c6d5cb7aaab57139df50a7bc9be273c
3
+ metadata.gz: f0dd40278e101af1c56a63ba7fd15b6a07f1fbd5
4
+ data.tar.gz: 6e584d10586014e16b539ef49025407810a8e856
5
5
  SHA512:
6
- metadata.gz: 93dada6629d166017c0503c44d8d723af019c60b562896a736bb4f4ba1cb3eccec5293d635c737e56c13898cd74948f9cbe58316317075b70222da2322d2eefb
7
- data.tar.gz: 97360d4ed97417075bf93c0a9cc9d93d3c885f90b7d7cbb5ee088f90c1fba7d6cc59125f0b06b1ae492a26395ab14cad928939eedd9bb1ccb94e0ef8710e3108
6
+ metadata.gz: eff9b00d672abf0748ea3023a85b431c0ee95cda810ad0a6c78131dfbb6441681d9a22cd900ca1b05e49077c0c217b71b7a039e48d41d827670c9007710f4105
7
+ data.tar.gz: eee7c6b5424714509702d47a832f7db9f976ac829918aa5fc15f9297e73ba2d3821f9eca5c5a5767f244dd356a0741e0a253576dce51023f1f30655ca8a802e9
@@ -15,12 +15,15 @@ module Take
15
15
 
16
16
  def compile
17
17
  @parent ||= begin
18
- @parent = AST::Parent.new(name: @file.
19
- gsub(/\..*\z/, "").gsub(/[\W]/, "_"))
18
+ @parent = AST::Parent.new(name: File.basename(@file).
19
+ gsub(/\..*\z/, ""))
20
20
  while peek do
21
- @parent.children << compile_group
21
+ part = predict(:group => :group, :prefix => :prefix)
22
+ @parent.children << part if part
22
23
  end
23
24
 
25
+ add_parent_prefix
26
+
24
27
  @parent.source = sourcify([0, 0])
25
28
  @parent
26
29
  end
@@ -45,7 +48,6 @@ module Take
45
48
  :test => :test,
46
49
  :before => :before,
47
50
  :after => :after,
48
- :prefix => :prefix,
49
51
  :macro => :macro
50
52
  end
51
53
 
@@ -114,6 +116,19 @@ module Take
114
116
  hash.merge(file: @file)
115
117
  end
116
118
 
119
+ def add_parent_prefix
120
+ prefix = AST::Prefix.new(name: "_generated_prefix")
121
+
122
+ prefix.children << AST::Block.new(body: <<-DOC)
123
+
124
+ #define __FILE \"#{@file}\"
125
+ #include \"utest.h\"
126
+ static size_t tests = 0;
127
+ static size_t failed = 0;
128
+ DOC
129
+ @parent.children << prefix
130
+ end
131
+
117
132
  end
118
133
  end
119
134
  end
@@ -6,6 +6,7 @@ module Take
6
6
  @parent = parent
7
7
  @groups = [@parent]
8
8
  @options = options
9
+ @group_functions = []
9
10
  end
10
11
 
11
12
  def generate
@@ -48,26 +49,56 @@ module Take
48
49
  group.children.select(&:test?).
49
50
  each { |child| walk(child) }
50
51
 
51
- @output << "// group #{group_name}\n"
52
- @output << "void group_#{group_name}()\n{\n"
53
- befores.each { |child| walk(child) }
52
+ @group_functions << "group_#{group_name}"
53
+
54
+ @output << <<-CODE
55
+ // group #{group_name}
56
+ void group_#{group_name}()
57
+ {
58
+
59
+ output(TEXT_COLOR_MAGENTA "\\tSET \\"" TEXT_COLOR_BOLD_MAGENTA
60
+ "#{group_name}" TEXT_COLOR_MAGENTA "\\":\\n");
61
+ CODE
54
62
  @output << group.children.select(&:test?).
55
63
  map { |child| " test_#{group_name(child)}();" }.
56
64
  join("\n")
57
65
  @output << "\n"
58
- afters.each { |child| walk(child) }
59
66
  @output << "}\n\n"
60
67
  @groups.pop
61
68
  end
62
69
 
63
70
  def walk_test(node)
64
- @output << "void test_#{group_name(node)}()\n{\n"
71
+ @output << <<-CODE
72
+ void test_#{group_name(node)}()
73
+ {
74
+ tests++;
75
+ int test_success = 1;
76
+ output(TEXT_COLOR_MAGENTA "\\t\\tTEST \\"" TEXT_COLOR_BOLD_MAGENTA
77
+ "#{node.name}" TEXT_COLOR_MAGENTA "\\": ");
78
+
79
+ CODE
80
+ befores.each { |child| walk(child) }
65
81
  node.children.select(&:block?).each { |child| walk(child) }
66
- @output << "}\n\n"
82
+ afters.each { |child| walk(child) }
83
+ @output << <<-CODE
84
+
85
+ if(test_success)
86
+ {
87
+ #ifdef VERBOSE
88
+ output("\\n\\t\\t\\t" TEXT_COLOR_GREEN "OK\\n");
89
+ #else
90
+ output(TEXT_COLOR_BOLD_GREEN "OK\\n");
91
+ #endif
92
+ }
93
+ }
94
+ CODE
67
95
  end
68
96
 
69
97
  def walk_block(node, indent = 2)
70
- @output << "#line \"#{node.source.file}\" #{node.source.line + 2}"
98
+ if node.source
99
+ @output << "#line #{node.source.line + 2}" \
100
+ " \"#{node.source.file}\""
101
+ end
71
102
  lines = node.body.each_line
72
103
  deindent = if scan = node.body.scan(/^[ \t]*(?=\S)/).min
73
104
  scan.size
@@ -76,7 +107,8 @@ module Take
76
107
  end
77
108
 
78
109
  body = lines.map { |l| l.gsub(/^[ \t]{#{deindent}}/, "") }.
79
- map { |l| (" " * indent) << l }.join("").rstrip.gsub(/^[ \t]+$/, "")
110
+ map { |l| (" " * indent) << l }.join("").rstrip.
111
+ gsub(/^[ \t]+$/, "")
80
112
 
81
113
  @output << body << "\n"
82
114
  reset
@@ -85,6 +117,28 @@ module Take
85
117
  def walk_parent(node)
86
118
  node.children.select(&:prefix?).each { |child| walk(child) }
87
119
  node.children.reject(&:prefix?).each { |child| walk(child) }
120
+ @output << <<-CODE
121
+ int main()
122
+ {
123
+ output(TEXT_COLOR_MAGENTA "FILE \\"" TEXT_COLOR_BOLD_MAGENTA
124
+ __FILE TEXT_COLOR_MAGENTA "\\":\\n");
125
+
126
+ CODE
127
+
128
+ @group_functions.each { |func| @output << " #{func}();\n" }
129
+
130
+ @output << <<-CODE
131
+ output2("\\n\\t" TEXT_COLOR_MAGENTA "RESULT:\\n\\t\\t"
132
+ "PASSED: " TEXT_COLOR_BOLD_MAGENTA "%zu"
133
+ TEXT_COLOR_MAGENTA "\\n\\t\\tFAILED: "
134
+ TEXT_COLOR_BOLD_MAGENTA "%zu" TEXT_COLOR_MAGENTA
135
+ "\\n", tests - failed, failed);
136
+
137
+ return TEST_RETURN;
138
+ }
139
+
140
+ CODE
141
+
88
142
  end
89
143
 
90
144
  def walk_node(node)
@@ -116,7 +170,7 @@ module Take
116
170
  end
117
171
 
118
172
  def reset
119
- @output << "#line \"#{@parent.name}.c\" #{line}\n"
173
+ @output << "#line #{line} \"#{@parent.name}.c\"\n"
120
174
  end
121
175
 
122
176
  def befores
data/lib/take/unit.rb CHANGED
@@ -15,7 +15,7 @@ module Take
15
15
  compiler = Compiler.new(file.path, scanner.scan)
16
16
  generator = Generator.new(compiler.compile,
17
17
  directory: File.dirname(file.path)).tap(&:generate)
18
- generator.write_file(file.path.gsub(/\..*\z/, ".c")
18
+ generator.write_file(file.path.gsub(/\..*\z/, ".c"))
19
19
  end
20
20
 
21
21
  end
data/lib/take/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Take
2
- VERSION = "0.0.7".freeze
2
+ VERSION = "0.0.8".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: take
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Rodi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-11 00:00:00.000000000 Z
11
+ date: 2014-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler