nilac 0.0.4.3.9.6 → 0.0.4.3.9.7

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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/README.md +2 -0
  4. data/examples/decBin.js +2 -2
  5. data/examples/repl.js +31 -0
  6. data/examples/repl.nila +24 -0
  7. data/lib/nilac/add_semicolons.rb +1 -1
  8. data/lib/nilac/compile_blocks.rb +20 -2
  9. data/lib/nilac/compile_case_statement.rb +1 -1
  10. data/lib/nilac/compile_conditional_structures.rb +20 -8
  11. data/lib/nilac/compile_custom_function_map.rb +3 -1
  12. data/lib/nilac/compile_default_values.rb +15 -1
  13. data/lib/nilac/compile_integers.rb +147 -2
  14. data/lib/nilac/compile_lambdas.rb +22 -6
  15. data/lib/nilac/compile_loops.rb +1 -1
  16. data/lib/nilac/compile_monkey_patching.rb +189 -0
  17. data/lib/nilac/compile_named_functions.rb +44 -70
  18. data/lib/nilac/compile_parallel_assignment.rb +2 -2
  19. data/lib/nilac/compile_ruby_methods.rb +3 -1
  20. data/lib/nilac/compile_strings.rb +4 -4
  21. data/lib/nilac/friendly_errors.rb +95 -0
  22. data/lib/nilac/get_variables.rb +29 -18
  23. data/lib/nilac/lexical_scoped_function_variables.rb +6 -0
  24. data/lib/nilac/output_javascript.rb +9 -7
  25. data/lib/nilac/paranthesis_compactor.rb +37 -0
  26. data/lib/nilac/pretty_print_javascript.rb +53 -61
  27. data/lib/nilac/replace_multiline_comments.rb +6 -2
  28. data/lib/nilac/replace_named_functions.rb +41 -65
  29. data/lib/nilac/replace_strings.rb +40 -17
  30. data/lib/nilac/rollblocks.rb +86 -13
  31. data/lib/nilac/version.rb +1 -1
  32. data/lib/nilac.rb +46 -13
  33. data/shark/features/blocks.feature +11 -0
  34. data/shark/features/monkey_patch.feature +11 -0
  35. data/shark/test_files/blocks.nila +18 -0
  36. data/shark/test_files/correct_blocks.js +25 -0
  37. data/shark/test_files/correct_case.js +1 -1
  38. data/shark/test_files/correct_monkey_patch.js +24 -0
  39. data/shark/test_files/correct_multiple_return.js +2 -2
  40. data/shark/test_files/correct_splats.js +3 -3
  41. data/shark/test_files/lambda.nila +9 -1
  42. data/shark/test_files/monkey_patch.nila +18 -0
  43. data/shark/test_files/multiple_return.nila +8 -8
  44. data/shark/test_files/sample_class.nila +1 -1
  45. metadata +13 -7
  46. data/LICENSE +0 -20
  47. data/examples/countdown.nila +0 -31
  48. data/lib/nilac/compile_classes.rb +0 -19
  49. data/shark/test_files/array_sugar.nila +0 -3
  50. data/shark/test_files/class.nila +0 -7
data/lib/nilac.rb CHANGED
@@ -22,13 +22,13 @@ module Nilac
22
22
  require 'nilac/replace_named_functions'
23
23
  require 'nilac/compile_parallel_assignment'
24
24
  require 'nilac/compile_default_values'
25
+ require 'nilac/compile_chained_comparison'
25
26
  require 'nilac/get_variables'
26
27
  require 'nilac/remove_question_marks'
27
28
  require 'nilac/compile_arrays'
28
29
  require 'nilac/compile_hashes'
29
30
  require 'nilac/compile_strings'
30
31
  require 'nilac/compile_integers'
31
- require 'nilac/compile_classes'
32
32
  require 'nilac/compile_named_functions'
33
33
  require 'nilac/compile_custom_function_map'
34
34
  require 'nilac/compile_ruby_methods'
@@ -46,22 +46,30 @@ module Nilac
46
46
  require 'nilac/output_javascript'
47
47
  require 'nilac/create_mac_executable'
48
48
  require 'nilac/parse_arguments'
49
- require 'nilac/compile_classes'
49
+ require 'nilac/friendly_errors'
50
+ require 'nilac/compile_monkey_patching'
51
+ require 'nilac/line_number_encoding'
50
52
 
51
53
  class NilaCompiler
52
54
 
55
+ include FriendlyErrors
56
+
53
57
  def initialize(args)
54
58
 
55
59
  @input_arguments = args
56
60
 
57
61
  end
58
62
 
59
- def compile(input_file_path, *output_file_name)
63
+ def compile(input_file_path, options = [], *output_file_name)
64
+
65
+ message,proceed = file_exist?(input_file_path)
60
66
 
61
- if File.exist?(input_file_path)
67
+ if proceed
62
68
 
63
69
  file_contents = read_file_line_by_line(input_file_path)
64
70
 
71
+ file_contents = file_contents.collect {|element| element.gsub("\r\n","\n")}
72
+
65
73
  file_contents = extract_parsable_file(file_contents)
66
74
 
67
75
  file_contents = compile_require_statements(file_contents)
@@ -74,6 +82,8 @@ module Nilac
74
82
 
75
83
  file_contents = compile_heredocs(file_contents, temp_file)
76
84
 
85
+ file_contents,lambda_names = compile_lambdas(file_contents,temp_file)
86
+
77
87
  file_contents,loop_vars = compile_loops(file_contents,temp_file)
78
88
 
79
89
  file_contents = compile_interpolated_strings(file_contents)
@@ -84,8 +94,6 @@ module Nilac
84
94
 
85
95
  file_contents = compile_conditional_structures(file_contents, temp_file)
86
96
 
87
- file_contents,lambda_names = compile_lambdas(file_contents,temp_file)
88
-
89
97
  file_contents = compile_blocks(file_contents,temp_file)
90
98
 
91
99
  file_contents = compile_integers(file_contents)
@@ -106,6 +114,8 @@ module Nilac
106
114
 
107
115
  file_contents, function_names = compile_named_functions(file_contents, named_functions, nested_functions, temp_file)
108
116
 
117
+ file_contents = compile_monkey_patching(file_contents,temp_file)
118
+
109
119
  func_names = function_names.dup
110
120
 
111
121
  file_contents, ruby_functions = compile_custom_function_map(file_contents)
@@ -138,10 +148,11 @@ module Nilac
138
148
 
139
149
  else
140
150
 
141
- puts "File doesn't exist!"
151
+ puts message
142
152
 
143
153
  end
144
154
 
155
+
145
156
  end
146
157
 
147
158
  def start_compile
@@ -165,6 +176,28 @@ module Nilac
165
176
 
166
177
  elsif opts[:compile] != nil
167
178
 
179
+ client_optimized = false
180
+
181
+ server_optimized = false
182
+
183
+ if opts[:compile].include?("--browser") or opts[:compile].include?("--client")
184
+
185
+ client_optimized = true
186
+
187
+ opts[:compile] = opts[:compile].delete("--browser")
188
+
189
+ opts[:compile] = opts[:compile].delete("--client")
190
+
191
+ elsif opts[:compile].include?("--server") or opts[:compile].include?("--node")
192
+
193
+ server_optimized = true
194
+
195
+ opts[:compile] = opts[:compile].delete("--server")
196
+
197
+ opts[:compile] = opts[:compile].delete("--node")
198
+
199
+ end
200
+
168
201
  if opts[:compile].length == 1
169
202
 
170
203
  input = opts[:compile][0]
@@ -173,14 +206,14 @@ module Nilac
173
206
  current_directory = Dir.pwd
174
207
  input_file = input
175
208
  file_path = current_directory + "/" + input_file
176
- compile(file_path)
177
- elsif input.include? "/"
209
+ compile(file_path,[client_optimized,server_optimized])
210
+ elsif File.directory?(input)
178
211
  folder_path = input
179
212
  files = Dir.glob(File.join(folder_path, "*"))
180
213
  files = files.reject { |path| !path.include? ".nila" }
181
214
  files.each do |file|
182
215
  file_path = Dir.pwd + "/" + file
183
- compile(file_path)
216
+ compile(file_path,[client_optimized,server_optimized])
184
217
  end
185
218
  end
186
219
 
@@ -195,7 +228,7 @@ module Nilac
195
228
  output_file = output
196
229
  input_file_path = input_file
197
230
  output_file_path = output_file
198
- compile(input_file_path, output_file_path)
231
+ compile(input_file_path, [client_optimized,server_optimized],output_file_path)
199
232
 
200
233
  elsif File.directory?(input)
201
234
 
@@ -212,7 +245,7 @@ module Nilac
212
245
  files.each do |file|
213
246
  input_file_path = file
214
247
  output_file_path = output_folder_path + "/" + find_file_name(file, ".nila") + ".js"
215
- compile(input_file_path, output_file_path)
248
+ compile(input_file_path,[client_optimized,server_optimized],output_file_path)
216
249
  end
217
250
 
218
251
  end
@@ -226,7 +259,7 @@ module Nilac
226
259
  puts " nilac -h/--help\n"
227
260
  puts " nilac -v/--version\n"
228
261
  puts " nilac -u/--update => Update Checker\n"
229
- puts " nilac [command] [file_options]\n\n"
262
+ puts " nilac [command] [sub_commands] [file_options]\n\n"
230
263
  puts " Available Commands:\n\n"
231
264
  puts " nilac -c [nila_file] => Compile Nila File\n\n"
232
265
  puts " nilac -c [nila_file] [output_js_file] => Compile nila_file and saves it as\n output_js_file\n\n"
@@ -0,0 +1,11 @@
1
+ Feature: This feature bring Ruby's case when structure to Nila
2
+ Scenario: Input file with multiple case when structures
3
+ Given the input file "blocks.nila"
4
+ When the ~compiler is run
5
+ The output file must be "blocks.js"
6
+ The output file must equal "correct_blocks.js"
7
+
8
+ Configurations:
9
+
10
+ ~compiler => lib/nilac.rb
11
+ :v $cliusage => ruby :v --test --compile $file
@@ -0,0 +1,11 @@
1
+ Feature: This feature brings monkey patching/duck punching prototypes to Nila
2
+ Scenario: Input file with monkey patched prototypes
3
+ Given the input file "monkey_patch.nila"
4
+ When the ~compiler is run
5
+ The output file must be "monkey_patch.js"
6
+ The output file must equal "correct_monkey_patch.js"
7
+
8
+ Configurations:
9
+
10
+ ~compiler => lib/nilac.rb
11
+ :v $cliusage => ruby :v --test --compile $file
@@ -0,0 +1,18 @@
1
+ read = rl.on 'line', do |line|
2
+ case line.trim()
3
+ when 'hello'
4
+ puts "world!"
5
+ else
6
+ puts "Say what? I might have heard #{line.trim()}"
7
+ end
8
+ rl.prompt()
9
+ end
10
+
11
+ read.on 'close', do
12
+ puts "Have a great day!"
13
+ process.exit(0)
14
+ end
15
+
16
+ process.argv.forEach do |val,index,array|
17
+ commandline_args << val
18
+ end
@@ -0,0 +1,25 @@
1
+ //Written using Nila. Visit http://adhithyan15.github.io/nila
2
+ (function() {
3
+ var read;
4
+
5
+ read = rl.on('line',function(line) {
6
+ switch(line.trim()) {
7
+ case 'hello':
8
+ console.log("world!");
9
+ break;
10
+ default:
11
+ console.log("Say what? I might have heard " + (line.trim()));
12
+ }
13
+ rl.prompt();
14
+ });
15
+
16
+ read.on('close',function() {
17
+ console.log("Have a great day!");
18
+ process.exit(0);
19
+ });
20
+
21
+ process.argv.forEach(function(val,index,array) {
22
+ commandline_args.push(val);
23
+ });
24
+
25
+ }).call(this);
@@ -28,7 +28,7 @@
28
28
  case 2:
29
29
  console.log('Your input was 2');
30
30
  break;
31
- default:
31
+ default:
32
32
  console.log("Your input was greater than 2");
33
33
  }
34
34
 
@@ -0,0 +1,24 @@
1
+ //Written using Nila. Visit http://adhithyan15.github.io/nila
2
+ (function() {
3
+ var avg, nums, sum;
4
+
5
+ Array.prototype.sum = function() {
6
+ var val;
7
+ val = 0;
8
+ for (i = 0, _j = this.length-1; i <= _j; i += 1) {
9
+ val += this[i];
10
+ }
11
+ return val;
12
+ };
13
+
14
+ Array.prototype.avg = function() {
15
+ return this.sum()/this.length;
16
+ };
17
+
18
+ nums = [1,2,3,4,5];
19
+
20
+ console.log(nums.sum());
21
+
22
+ console.log(nums.avg());
23
+
24
+ }).call(this);
@@ -9,11 +9,11 @@
9
9
  _ref1 = input_name.split(" ");
10
10
  first_name = _ref1[0];
11
11
  last_name = _ref1[1];
12
- return [first_name,last_name];
12
+ return [first_name, last_name];
13
13
  };
14
14
 
15
15
  test_method = function() {
16
- return console.log("Hello, Adhithya");
16
+ return console.log("Hello World!");
17
17
  };
18
18
 
19
19
  parsed_name = parse_name("Adhithya Rajasekaran");
@@ -12,7 +12,7 @@
12
12
  b = arguments[1];
13
13
  c = [];
14
14
  for (var i=2;i<arguments.length;i++) {
15
- c.push(arguments[i]);
15
+ c.push(arguments[i]);
16
16
  }
17
17
  console.log("I require two or more arguments!");
18
18
  console.log("And sure enough, I got: ");
@@ -46,7 +46,7 @@
46
46
  f = arguments[arguments.length-1];
47
47
  d = [];
48
48
  for (var i=3;i < arguments.length-2;i++) {
49
- d.push(arguments[i]);
49
+ d.push(arguments[i]);
50
50
  }
51
51
  console.log("Arguments:");
52
52
  console.log(a);
@@ -67,7 +67,7 @@
67
67
  e = arguments[arguments.length-1];
68
68
  c = [];
69
69
  for (var i=2;i < arguments.length-2;i++) {
70
- c.push(arguments[i]);
70
+ c.push(arguments[i]);
71
71
  }
72
72
  if (b == null) {
73
73
  b=1;
@@ -1,8 +1,16 @@
1
1
  square = -> {|num| num*num }
2
2
 
3
+ cube = -> {|num| num*square(num)}
4
+
3
5
  l = lambda do |a, b|
4
6
  tmp = a * 7
5
7
  tmp * b / 50
6
8
  end
9
+
10
+ hello = -> {puts "Hello World"}
11
+
12
+ hello_world = -> {|| puts "Hello World!"}
13
+
14
+ fill = -> {|container, liquid = "coffee"| "Filling the #{container} with #{liquid}" }
7
15
 
8
- puts square 5
16
+ puts cube square 5
@@ -0,0 +1,18 @@
1
+ class Array
2
+ def sum
3
+ val = 0
4
+ for i in 0...self.length-1
5
+ val += self[i]
6
+ end
7
+ return val
8
+ end
9
+ def avg
10
+ self.sum()/self.length
11
+ end
12
+ end
13
+
14
+ nums = [1,2,3,4,5]
15
+
16
+ puts nums.sum()
17
+
18
+ puts nums.avg()
@@ -1,17 +1,17 @@
1
1
  # This method demonstrates multiple return values
2
2
 
3
3
  def parse_name(input_name)
4
-
5
- first_name,last_name = input_name.split(" ")
6
-
7
- return first_name,last_name
8
-
4
+
5
+ first_name, last_name = input_name.split
6
+
7
+ return first_name, last_name
8
+
9
9
  end
10
10
 
11
- def test_method()
12
-
13
- puts "Hello, Adhithya"
11
+ def test_method
14
12
 
13
+ puts "Hello World!"
14
+
15
15
  end
16
16
 
17
17
  parsed_name = parse_name("Adhithya Rajasekaran")
@@ -3,7 +3,7 @@ class Language
3
3
  @name = name
4
4
  @creator = creator
5
5
  end
6
-
6
+
7
7
  def description
8
8
  puts "I'm #{@name} and I was created by #{@creator}!"
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nilac
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4.3.9.6
4
+ version: 0.0.4.3.9.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adhithya Rajasekaran
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-17 00:00:00.000000000 Z
11
+ date: 2014-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: shark
@@ -34,15 +34,15 @@ extra_rdoc_files: []
34
34
  files:
35
35
  - .gitignore
36
36
  - Gemfile
37
- - LICENSE
38
37
  - README.md
39
38
  - Rakefile
40
39
  - bin/nilac
41
- - examples/countdown.nila
42
40
  - examples/decBin.js
43
41
  - examples/decBin.nila
44
42
  - examples/marky.js
45
43
  - examples/marky.nila
44
+ - examples/repl.js
45
+ - examples/repl.nila
46
46
  - lib/nilac.rb
47
47
  - lib/nilac/ErrorDeclarations.rb
48
48
  - lib/nilac/add_auto_return_statement.rb
@@ -50,7 +50,6 @@ files:
50
50
  - lib/nilac/compile_arrays.rb
51
51
  - lib/nilac/compile_blocks.rb
52
52
  - lib/nilac/compile_case_statement.rb
53
- - lib/nilac/compile_classes.rb
54
53
  - lib/nilac/compile_comments.rb
55
54
  - lib/nilac/compile_conditional_structures.rb
56
55
  - lib/nilac/compile_custom_function_map.rb
@@ -62,6 +61,7 @@ files:
62
61
  - lib/nilac/compile_interpolated_strings.rb
63
62
  - lib/nilac/compile_lambdas.rb
64
63
  - lib/nilac/compile_loops.rb
64
+ - lib/nilac/compile_monkey_patching.rb
65
65
  - lib/nilac/compile_multiple_return.rb
66
66
  - lib/nilac/compile_named_functions.rb
67
67
  - lib/nilac/compile_operators.rb
@@ -76,9 +76,11 @@ files:
76
76
  - lib/nilac/find_all_matching_indices.rb
77
77
  - lib/nilac/find_file_name.rb
78
78
  - lib/nilac/find_file_path.rb
79
+ - lib/nilac/friendly_errors.rb
79
80
  - lib/nilac/get_variables.rb
80
81
  - lib/nilac/lexical_scoped_function_variables.rb
81
82
  - lib/nilac/output_javascript.rb
83
+ - lib/nilac/paranthesis_compactor.rb
82
84
  - lib/nilac/parse_arguments.rb
83
85
  - lib/nilac/pretty_print_javascript.rb
84
86
  - lib/nilac/read_file_line_by_line.rb
@@ -96,6 +98,7 @@ files:
96
98
  - shark/features/array_and_string_indexing.feature
97
99
  - shark/features/automatic_require_statements.feature
98
100
  - shark/features/barebones_compilation.feature
101
+ - shark/features/blocks.feature
99
102
  - shark/features/case_when.feature
100
103
  - shark/features/default_method_parameters.feature
101
104
  - shark/features/fix_newlines.feature
@@ -105,6 +108,7 @@ files:
105
108
  - shark/features/javascript_methods.feature
106
109
  - shark/features/loop.feature
107
110
  - shark/features/method_multiple_return.feature
111
+ - shark/features/monkey_patch.feature
108
112
  - shark/features/multiline_array.feature
109
113
  - shark/features/multiple_variable_initialization.feature
110
114
  - shark/features/numbers.feature
@@ -120,11 +124,11 @@ files:
120
124
  - shark/features/unless_until.feature
121
125
  - shark/features/whitespace_delimitation.feature
122
126
  - shark/test_files/array_string_indexing.nila
123
- - shark/test_files/array_sugar.nila
127
+ - shark/test_files/blocks.nila
124
128
  - shark/test_files/case.nila
125
- - shark/test_files/class.nila
126
129
  - shark/test_files/conditional_assignment.nila
127
130
  - shark/test_files/correct.js
131
+ - shark/test_files/correct_blocks.js
128
132
  - shark/test_files/correct_case.js
129
133
  - shark/test_files/correct_conditional_assignment.js
130
134
  - shark/test_files/correct_default_parameters.js
@@ -136,6 +140,7 @@ files:
136
140
  - shark/test_files/correct_initialization.js
137
141
  - shark/test_files/correct_javascript_methods.js
138
142
  - shark/test_files/correct_loop.js
143
+ - shark/test_files/correct_monkey_patch.js
139
144
  - shark/test_files/correct_multiline_array.js
140
145
  - shark/test_files/correct_multiple_return.js
141
146
  - shark/test_files/correct_numbers.js
@@ -160,6 +165,7 @@ files:
160
165
  - shark/test_files/javascript_methods.nila
161
166
  - shark/test_files/lambda.nila
162
167
  - shark/test_files/loop.nila
168
+ - shark/test_files/monkey_patch.nila
163
169
  - shark/test_files/multiline_array.nila
164
170
  - shark/test_files/multiple_initialization.nila
165
171
  - shark/test_files/multiple_return.nila
data/LICENSE DELETED
@@ -1,20 +0,0 @@
1
- The MIT License (MIT)
2
-
3
- Copyright (c) 2012-2013 Adhithya Rajasekaran, Sri Madhavi Rajasekaran
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy of
6
- this software and associated documentation files (the "Software"), to deal in
7
- the Software without restriction, including without limitation the rights to
8
- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
- the Software, and to permit persons to whom the Software is furnished to do so,
10
- subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17
- FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
- COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
- IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,31 +0,0 @@
1
- def countdown(minutes)
2
-
3
- seconds = 60
4
-
5
- mins = minutes
6
-
7
- def tick
8
-
9
- counter = document.getElementById("counter")
10
-
11
- current_minutes = mins-1
12
-
13
- seconds--
14
-
15
- counter.innerHTML = "#{current_minutes.to_s}:#{if seconds < 10 then "0" else ""}#{String(seconds)}"
16
-
17
- if seconds > 0
18
-
19
- setTimeout(tick,1000)
20
-
21
- else
22
-
23
- countdown(mins - 1) if mins > 1
24
-
25
- end
26
-
27
- end
28
-
29
- tick()
30
-
31
- end
@@ -1,19 +0,0 @@
1
- def compile_classes(input_file_contents)
2
-
3
- # Nila will have support for classes. But the current implementation is not ready for prime time
4
- # yet. So it won't be documented.
5
-
6
- def extract_classes(file_contents)
7
-
8
- # This method will extract code blocks between class .. end blocks and try to convert to
9
- # Javascript equivalent code
10
-
11
- possible_classes = file_contents.reject {|element| !element.index(/class\s*\w{1,}\s*<?\s?\w{1,}?/)}
12
-
13
-
14
-
15
- end
16
-
17
- extract_classes(input_file_contents)
18
-
19
- end
@@ -1,3 +0,0 @@
1
- names = %w{joe kelly bill james smith}
2
-
3
- date_time = %W{The current date and time is #{new Date().to_s}}
@@ -1,7 +0,0 @@
1
- class Song
2
- def initialize(name, artist, duration)
3
- @name = name
4
- @artist = artist
5
- @duration = duration
6
- end
7
- end