take 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
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