nilac 0.0.4.3.9.5 → 0.0.4.3.9.6
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 +4 -4
- data/examples/marky.nila +1 -1
- data/lib/nilac/add_auto_return_statement.rb +33 -0
- data/lib/nilac/add_semicolons.rb +2 -0
- data/lib/nilac/compile_blocks.rb +24 -2
- data/lib/nilac/compile_custom_function_map.rb +4 -2
- data/lib/nilac/compile_existential_operator.rb +93 -3
- data/lib/nilac/compile_hashes.rb +1 -1
- data/lib/nilac/compile_lambdas.rb +187 -0
- data/lib/nilac/compile_multiple_return.rb +127 -0
- data/lib/nilac/compile_operators.rb +31 -0
- data/lib/nilac/extract_parsable_file.rb +2 -0
- data/lib/nilac/get_variables.rb +19 -7
- data/lib/nilac/lexical_scoped_function_variables.rb +98 -0
- data/lib/nilac/pretty_print_javascript.rb +11 -9
- data/lib/nilac/version.rb +1 -1
- data/lib/nilac.rb +5 -42
- data/shark/features/javascript_methods.feature +11 -0
- data/shark/test_files/conditional_assignment.nila +9 -0
- data/shark/test_files/correct_conditional_assignment.js +19 -0
- data/shark/test_files/correct_javascript_methods.js +25 -0
- data/shark/test_files/correct_required_module.js +3 -1
- data/shark/test_files/javascript_methods.nila +19 -0
- data/shark/test_files/lambda.nila +8 -0
- data/shark/test_files/ternary.nila +7 -0
- data/shark/test_files/variable_spaces.nila +6 -0
- metadata +14 -4
- data/examples/StringMagic.nila +0 -23
- data/lib/nilac/compile_ternary_operator.rb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2aae60bb21de5dafc4e90454f1b4f6fb98b222ef
|
4
|
+
data.tar.gz: 5be7a1d1fa7e3ead44e3163463b3ac191ea60442
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e049e7f5ade3d9c6f6652bce8a5cdb4489719954f3ba1dad8a5e356b48400a1d2be5a2389c6a93a92c2e7d0b541492cfea24c9cff66aa91061e511e81c0012d4
|
7
|
+
data.tar.gz: e47c6c6f6f95a0e06115257adf24d8a3e2fac841883a5365920a4c0aa86c3bb10d01b67df0ca1178198578a7f9d967c1279a047e14c010545e956f8cf8b35337
|
data/examples/marky.nila
CHANGED
@@ -0,0 +1,33 @@
|
|
1
|
+
def add_auto_return_statement(input_array)
|
2
|
+
|
3
|
+
joined_array = input_array.join
|
4
|
+
|
5
|
+
reversed_input_array = input_array.reverse
|
6
|
+
|
7
|
+
if !joined_array.include?("return ")
|
8
|
+
|
9
|
+
rejected_array = reversed_input_array.reject { |content| content.lstrip.eql?("") }
|
10
|
+
|
11
|
+
rejected_array = rejected_array.reject {|content| content.strip.eql?("")}
|
12
|
+
|
13
|
+
rejected_array = rejected_array[1..-1]
|
14
|
+
|
15
|
+
unless rejected_array[0].strip.eql?("}") or rejected_array[0].strip.eql?("})")
|
16
|
+
|
17
|
+
if !rejected_array[0].strip.eql?("end") and !rejected_array[0].strip.include?("--single_line_comment")
|
18
|
+
|
19
|
+
last_statement = rejected_array[0]
|
20
|
+
|
21
|
+
replacement_string = "return #{last_statement.lstrip}"
|
22
|
+
|
23
|
+
input_array[input_array.index(last_statement)] = replacement_string
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
return input_array
|
32
|
+
|
33
|
+
end
|
data/lib/nilac/add_semicolons.rb
CHANGED
data/lib/nilac/compile_blocks.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
require_relative 'read_file_line_by_line'
|
2
|
+
require_relative 'strToArray'
|
3
|
+
require_relative 'lexical_scoped_function_variables'
|
2
4
|
|
3
5
|
def compile_blocks(input_file_contents,temporary_nila_file)
|
4
6
|
|
@@ -6,6 +8,12 @@ require_relative 'read_file_line_by_line'
|
|
6
8
|
|
7
9
|
block_parameters, block_contents = input_block[1...-1].split("|",2)[1].split("|",2)
|
8
10
|
|
11
|
+
if block_parameters.include?("err") and !block_contents.include?("err")
|
12
|
+
|
13
|
+
block_contents = "if (err) {\n puts err \n}\n" + block_contents
|
14
|
+
|
15
|
+
end
|
16
|
+
|
9
17
|
compiled_block = "function(#{block_parameters.lstrip.rstrip}) {\n\n #{block_contents.strip} \n\n}"
|
10
18
|
|
11
19
|
return compiled_block
|
@@ -102,7 +110,7 @@ require_relative 'read_file_line_by_line'
|
|
102
110
|
|
103
111
|
caller_func = loop.split(" blockky ")[0]
|
104
112
|
|
105
|
-
unless caller_func.
|
113
|
+
unless caller_func.strip[-1] == ","
|
106
114
|
|
107
115
|
replacement_string = "#{caller_func.rstrip}(#{compiled_block.lstrip})"
|
108
116
|
|
@@ -116,7 +124,21 @@ require_relative 'read_file_line_by_line'
|
|
116
124
|
|
117
125
|
end
|
118
126
|
|
119
|
-
|
127
|
+
replacement_array = strToArray(replacement_string)
|
128
|
+
|
129
|
+
variables = lexical_scoped_variables(replacement_array)
|
130
|
+
|
131
|
+
if !variables.empty?
|
132
|
+
|
133
|
+
variable_string = "\nvar " + variables.join(", ") + "\n"
|
134
|
+
|
135
|
+
replacement_array.insert(1, variable_string)
|
136
|
+
|
137
|
+
end
|
138
|
+
|
139
|
+
replacement_array[1...-1] = replacement_array[1...-1].collect {|element| "#iggggnnnore #{element}"}
|
140
|
+
|
141
|
+
modified_file_contents[input_file_contents.index(original_loop)] = replacement_array.join
|
120
142
|
|
121
143
|
end
|
122
144
|
|
@@ -12,6 +12,8 @@ def compile_custom_function_map(input_file_contents)
|
|
12
12
|
|
13
13
|
"require" => "require",
|
14
14
|
|
15
|
+
"alert" => "alert"
|
16
|
+
|
15
17
|
}
|
16
18
|
|
17
19
|
function_map = function_map_replacements.keys
|
@@ -28,7 +30,7 @@ def compile_custom_function_map(input_file_contents)
|
|
28
30
|
|
29
31
|
if test_line.include?(function+"(") or test_line.include?(function+" ") and test_line.index(javascript_regexp) == nil
|
30
32
|
|
31
|
-
testsplit = line.split(function)
|
33
|
+
testsplit = line.gsub("#iggggnnnore","").split(function)
|
32
34
|
|
33
35
|
testsplit = testsplit.collect {|element| element.strip}
|
34
36
|
|
@@ -36,7 +38,7 @@ def compile_custom_function_map(input_file_contents)
|
|
36
38
|
|
37
39
|
if testsplit[0][-1].eql?(" ") or testsplit[0].eql?("return")
|
38
40
|
|
39
|
-
modified_file_contents[index] = line.
|
41
|
+
modified_file_contents[index] = line.gsub(function, function_map_replacements[function])
|
40
42
|
|
41
43
|
end
|
42
44
|
|
@@ -2,6 +2,92 @@ require_relative 'replace_strings'
|
|
2
2
|
|
3
3
|
def compile_existential_operators(input_file_contents)
|
4
4
|
|
5
|
+
# This method compiles Nila's existential operator.
|
6
|
+
#
|
7
|
+
# Example:
|
8
|
+
#
|
9
|
+
# input_args[0].exist?
|
10
|
+
#
|
11
|
+
# The above line should compile to
|
12
|
+
#
|
13
|
+
# typeof input_args[0] !== undefined && input_args[0] !== nil
|
14
|
+
|
15
|
+
modified_contents = input_file_contents.collect {|element| replace_strings(element)}
|
16
|
+
|
17
|
+
possible_existential_calls = modified_contents.reject {|element| !element.include?(".exist")}
|
18
|
+
|
19
|
+
split_regexp = /((if|while) \((!\()?)/
|
20
|
+
|
21
|
+
second_split_regexp = /(&&|\|\|)/
|
22
|
+
|
23
|
+
possible_existential_calls.each do |statement|
|
24
|
+
|
25
|
+
reconstructed_statement = input_file_contents[modified_contents.index(statement)]
|
26
|
+
|
27
|
+
counter = 0
|
28
|
+
|
29
|
+
while reconstructed_statement.include?(".exist")
|
30
|
+
|
31
|
+
before,after = reconstructed_statement.split(".exist",2)
|
32
|
+
|
33
|
+
if counter == 0
|
34
|
+
|
35
|
+
split_data = before.split(split_regexp)
|
36
|
+
|
37
|
+
before2 = split_data[1]
|
38
|
+
|
39
|
+
if before2.eql?("if (") or before2.eql?("while (")
|
40
|
+
|
41
|
+
usage = split_data[3]
|
42
|
+
|
43
|
+
elsif before2.eql?("if (!(") or before2.eql?("while (!(")
|
44
|
+
|
45
|
+
usage = split_data[4]
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
replacement_string = "(typeof #{usage} !== \"undefined\" &|&| #{usage} !== null)"
|
50
|
+
|
51
|
+
reconstructed_statement = before.split(before2)[0] + before2 + replacement_string + after
|
52
|
+
|
53
|
+
elsif counter > 0
|
54
|
+
|
55
|
+
split_data = before.split(second_split_regexp)
|
56
|
+
|
57
|
+
before2 = split_data[0]
|
58
|
+
|
59
|
+
operator = split_data[1]
|
60
|
+
|
61
|
+
operator = " &|&| " if operator.strip.eql?("&&")
|
62
|
+
|
63
|
+
operator = " |$|$ " if operator.strip.eql?("||")
|
64
|
+
|
65
|
+
usage = split_data[2]
|
66
|
+
|
67
|
+
replacement_string = "(typeof #{usage} !== \"undefined\" &|&| #{usage} !== null)"
|
68
|
+
|
69
|
+
reconstructed_statement = before2 + operator + replacement_string + after
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
counter += 1
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
reconstructed_statement = reconstructed_statement.gsub("&|&|","&&").gsub("|$|$","&&")
|
78
|
+
|
79
|
+
input_file_contents[modified_contents.index(statement)] = reconstructed_statement
|
80
|
+
|
81
|
+
modified_contents = input_file_contents
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
return input_file_contents
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
def compile_nil_operator(input_file_contents)
|
90
|
+
|
5
91
|
# This method compiles Nila's existential operator.
|
6
92
|
#
|
7
93
|
# Example:
|
@@ -10,7 +96,7 @@ def compile_existential_operators(input_file_contents)
|
|
10
96
|
#
|
11
97
|
# The above line should compile to
|
12
98
|
#
|
13
|
-
#
|
99
|
+
# input_args[0] === nil
|
14
100
|
|
15
101
|
modified_contents = input_file_contents.collect {|element| replace_strings(element)}
|
16
102
|
|
@@ -46,7 +132,7 @@ def compile_existential_operators(input_file_contents)
|
|
46
132
|
|
47
133
|
end
|
48
134
|
|
49
|
-
replacement_string = "(
|
135
|
+
replacement_string = "(#{usage} === null)"
|
50
136
|
|
51
137
|
reconstructed_statement = before.split(before2)[0] + before2 + replacement_string + after
|
52
138
|
|
@@ -64,7 +150,7 @@ def compile_existential_operators(input_file_contents)
|
|
64
150
|
|
65
151
|
usage = split_data[2]
|
66
152
|
|
67
|
-
replacement_string = "(
|
153
|
+
replacement_string = "(#{usage} === null)"
|
68
154
|
|
69
155
|
reconstructed_statement = before2 + operator + replacement_string + after
|
70
156
|
|
@@ -78,6 +164,8 @@ def compile_existential_operators(input_file_contents)
|
|
78
164
|
|
79
165
|
input_file_contents[modified_contents.index(statement)] = reconstructed_statement
|
80
166
|
|
167
|
+
modified_contents = input_file_contents
|
168
|
+
|
81
169
|
end
|
82
170
|
|
83
171
|
return input_file_contents
|
@@ -162,6 +250,8 @@ def compile_undefined_operator(input_file_contents)
|
|
162
250
|
|
163
251
|
input_file_contents[modified_contents.index(statement)] = reconstructed_statement
|
164
252
|
|
253
|
+
modified_contents = input_file_contents
|
254
|
+
|
165
255
|
end
|
166
256
|
|
167
257
|
return input_file_contents
|
data/lib/nilac/compile_hashes.rb
CHANGED
@@ -68,7 +68,7 @@ require_relative 'read_file_line_by_line'
|
|
68
68
|
|
69
69
|
def compile_inline_hashes(input_file_contents)
|
70
70
|
|
71
|
-
javascript_regexp = /(if |while |for |function |function\(|%[qQw]*\{)/
|
71
|
+
javascript_regexp = /(if |while |for |function |function\(|%[qQw]*\{|lambda\s*\{|\s*->\s*\{)/
|
72
72
|
|
73
73
|
modified_file_contents = input_file_contents.clone.collect {|element| replace_strings(element)}
|
74
74
|
|
@@ -0,0 +1,187 @@
|
|
1
|
+
require_relative 'replace_strings'
|
2
|
+
require_relative 'compile_multiple_return'
|
3
|
+
require_relative 'strToArray'
|
4
|
+
require_relative 'lexical_scoped_function_variables'
|
5
|
+
require_relative 'add_auto_return_statement'
|
6
|
+
|
7
|
+
def compile_lambdas(input_file_contents,temporary_nila_file)
|
8
|
+
|
9
|
+
def compile_single_line_lambda(input_block)
|
10
|
+
|
11
|
+
# This method compiles a single lambda into a Javascript function expression
|
12
|
+
|
13
|
+
block_parameters, block_contents = input_block[1...-1].split("|",2)[1].split("|",2)
|
14
|
+
|
15
|
+
compiled_lambda = "function(#{block_parameters.lstrip.rstrip}) {\n\n #{block_contents.strip} \n\n}"
|
16
|
+
|
17
|
+
return compiled_lambda
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
def find_lambda_name(input_block)
|
22
|
+
|
23
|
+
first_line = input_block[0]
|
24
|
+
|
25
|
+
var_name = "varrrr"
|
26
|
+
|
27
|
+
if first_line.include?("=")
|
28
|
+
|
29
|
+
var_name,junk = first_line.split("=")
|
30
|
+
|
31
|
+
var_name = var_name.strip
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
return var_name
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
input_file_contents = input_file_contents.collect {|element| element.gsub(" -> "," lambda ")}
|
40
|
+
|
41
|
+
input_file_contents = input_file_contents.collect {|element| element.gsub("append","appand")}
|
42
|
+
|
43
|
+
possible_lambdas = input_file_contents.reject {|line| !replace_strings(line).include?("lambda")}
|
44
|
+
|
45
|
+
possible_lambdas = possible_lambdas.reject {|line| line.index(/\s*do\s*/) == nil}
|
46
|
+
|
47
|
+
lambda_names = []
|
48
|
+
|
49
|
+
unless possible_lambdas.empty?
|
50
|
+
|
51
|
+
possible_lambdas.each do |starting_line|
|
52
|
+
|
53
|
+
index_counter = starting_counter = input_file_contents.index(starting_line)
|
54
|
+
|
55
|
+
line = starting_line
|
56
|
+
|
57
|
+
until line.strip.eql?("end") or line.strip.eql?("end)")
|
58
|
+
|
59
|
+
index_counter += 1
|
60
|
+
|
61
|
+
line = input_file_contents[index_counter]
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
loop_extract = input_file_contents[starting_counter..index_counter]
|
66
|
+
|
67
|
+
var_name,block = loop_extract.join.split(/\s*do/)
|
68
|
+
|
69
|
+
var_name = var_name.split(/\s*=\s*lambda/)[0].strip
|
70
|
+
|
71
|
+
block = block.split("end")[0]
|
72
|
+
|
73
|
+
replacement_string = "#{var_name} = lambda blockky {#{block.strip}}_!"
|
74
|
+
|
75
|
+
input_file_contents[starting_counter..index_counter] = replacement_string
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
possible_lambdas = input_file_contents.reject{ |element| element.index(/lambda\s*(blockky)?\s*/) == nil}
|
82
|
+
|
83
|
+
possible_lambdas = possible_lambdas.reject {|element| !element.include?("{") and !element.include?("}")}
|
84
|
+
|
85
|
+
possible_lambdas = possible_lambdas.collect {|element| element.gsub(/lambda\s*\{/,"lambda !_{")}
|
86
|
+
|
87
|
+
modified_file_contents = input_file_contents.clone
|
88
|
+
|
89
|
+
unless possible_lambdas.empty?
|
90
|
+
|
91
|
+
possible_lambdas.each do |loop|
|
92
|
+
|
93
|
+
original_loop = loop.clone
|
94
|
+
|
95
|
+
string_counter = 1
|
96
|
+
|
97
|
+
extracted_string = []
|
98
|
+
|
99
|
+
while loop.include?("\"")
|
100
|
+
|
101
|
+
string_extract = loop[loop.index("\"")..loop.index("\"",loop.index("\"")+1)]
|
102
|
+
|
103
|
+
extracted_string << string_extract
|
104
|
+
|
105
|
+
loop = loop.sub(string_extract,"--repstring#{string_counter}")
|
106
|
+
|
107
|
+
string_counter += 1
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
lambda_extract = loop[loop.index("{")..loop.index("}_!")] if loop.include?("}_!")
|
112
|
+
|
113
|
+
lambda_extract = loop[loop.index("!_{")..loop.index("}")] if loop.include?("!_{")
|
114
|
+
|
115
|
+
compiled_lambda = ""
|
116
|
+
|
117
|
+
if lambda_extract.count("|") == 2
|
118
|
+
|
119
|
+
compiled_lambda = compile_single_line_lambda(lambda_extract)
|
120
|
+
|
121
|
+
extracted_string.each_with_index do |string,index|
|
122
|
+
|
123
|
+
compiled_lambda = compiled_lambda.sub("--repstring#{index+1}",string)
|
124
|
+
|
125
|
+
end
|
126
|
+
|
127
|
+
else
|
128
|
+
|
129
|
+
compiled_lambda = lambda_extract[1...-1].lstrip.rstrip
|
130
|
+
|
131
|
+
extracted_string.each_with_index do |string,index|
|
132
|
+
|
133
|
+
compiled_lambda = compiled_lambda.sub("--repstring#{index+1}",string)
|
134
|
+
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
|
139
|
+
original_loop = original_loop.gsub("!_{","{")
|
140
|
+
|
141
|
+
replacement_string = loop.split(lambda_extract)[0].split("lambda")[0] + compiled_lambda
|
142
|
+
|
143
|
+
replacement_array = strToArray(replacement_string)
|
144
|
+
|
145
|
+
replacement_array = compile_multiple_return(replacement_array)
|
146
|
+
|
147
|
+
replacement_array = add_auto_return_statement(replacement_array)
|
148
|
+
|
149
|
+
variables = lexical_scoped_variables(replacement_array)
|
150
|
+
|
151
|
+
if !variables.empty?
|
152
|
+
|
153
|
+
variable_string = "\nvar " + variables.join(", ") + "\n"
|
154
|
+
|
155
|
+
replacement_array.insert(1, variable_string)
|
156
|
+
|
157
|
+
end
|
158
|
+
|
159
|
+
lambda_name = find_lambda_name(replacement_array)
|
160
|
+
|
161
|
+
unless lambda_name.eql?("varrrr")
|
162
|
+
|
163
|
+
lambda_names << lambda_name
|
164
|
+
|
165
|
+
end
|
166
|
+
|
167
|
+
replacement_array[1...-1] = replacement_array[1...-1].collect {|element| "#iggggnnnore #{element}"}
|
168
|
+
|
169
|
+
modified_file_contents[input_file_contents.index(original_loop)] = replacement_array.join
|
170
|
+
|
171
|
+
end
|
172
|
+
|
173
|
+
end
|
174
|
+
|
175
|
+
modified_file_contents = modified_file_contents.collect {|element| element.gsub("appand","append")}
|
176
|
+
|
177
|
+
file_id = open(temporary_nila_file, 'w')
|
178
|
+
|
179
|
+
file_id.write(modified_file_contents.join)
|
180
|
+
|
181
|
+
file_id.close()
|
182
|
+
|
183
|
+
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
184
|
+
|
185
|
+
return line_by_line_contents,lambda_names
|
186
|
+
|
187
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
def compile_multiple_return(input_array)
|
2
|
+
|
3
|
+
def find_all_matching_indices(input_string, pattern)
|
4
|
+
|
5
|
+
locations = []
|
6
|
+
|
7
|
+
index = input_string.index(pattern)
|
8
|
+
|
9
|
+
while index != nil
|
10
|
+
|
11
|
+
locations << index
|
12
|
+
|
13
|
+
index = input_string.index(pattern, index+1)
|
14
|
+
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
return locations
|
19
|
+
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
modified_input_array = input_array.dup
|
24
|
+
|
25
|
+
return_statements = input_array.dup.reject { |element| !element.include? "return" }
|
26
|
+
|
27
|
+
multiple_return_statements = return_statements.dup.reject { |element| !element.include? "," }
|
28
|
+
|
29
|
+
modified_multiple_return_statements = multiple_return_statements.dup
|
30
|
+
|
31
|
+
return_statement_index = []
|
32
|
+
|
33
|
+
multiple_return_statements.each do |statement|
|
34
|
+
|
35
|
+
location_array = modified_input_array.each_index.select { |index| modified_input_array[index] == statement }
|
36
|
+
|
37
|
+
return_statement_index << location_array[0]
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
multiple_return_statements.each_with_index do |return_statement, index|
|
42
|
+
|
43
|
+
replacement_counter = 0
|
44
|
+
|
45
|
+
if return_statement.include? "\""
|
46
|
+
|
47
|
+
starting_quotes = find_all_matching_indices(return_statement, "\"")
|
48
|
+
|
49
|
+
for x in 0...(starting_quotes.length)/2
|
50
|
+
|
51
|
+
quotes = return_statement[starting_quotes[x]..starting_quotes[x+1]]
|
52
|
+
|
53
|
+
replacement_counter += 1
|
54
|
+
|
55
|
+
modified_multiple_return_statements[index] = modified_multiple_return_statements[index].sub(quotes, "repstring#{1}")
|
56
|
+
|
57
|
+
modified_input_array[return_statement_index[index]] = modified_multiple_return_statements[index].sub(quotes, "repstring#{1}")
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
modified_multiple_return_statements = modified_multiple_return_statements.reject { |element| !element.include? "," }
|
66
|
+
|
67
|
+
return_statement_index = []
|
68
|
+
|
69
|
+
modified_multiple_return_statements.each do |statement|
|
70
|
+
|
71
|
+
location_array = modified_input_array.each_index.select { |index| modified_input_array[index] == statement }
|
72
|
+
|
73
|
+
return_statement_index << location_array[0]
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
modified_multiple_return_statements.each_with_index do |return_statement, index|
|
78
|
+
|
79
|
+
method_call_counter = 0
|
80
|
+
|
81
|
+
if return_statement.include? "("
|
82
|
+
|
83
|
+
open_paran_location = find_all_matching_indices(return_statement, "(")
|
84
|
+
|
85
|
+
open_paran_location.each do |paran_index|
|
86
|
+
|
87
|
+
method_call = return_statement[paran_index..return_statement.index(")", paran_index+1)]
|
88
|
+
|
89
|
+
method_call_counter += 1
|
90
|
+
|
91
|
+
modified_multiple_return_statements[index] = modified_multiple_return_statements[index].sub(method_call, "methodcall#{method_call_counter}")
|
92
|
+
|
93
|
+
modified_input_array[return_statement_index[index]] = modified_multiple_return_statements[index].sub(method_call, "methodcall#{method_call_counter}")
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
modified_multiple_return_statements = modified_multiple_return_statements.reject { |element| !element.include?(",") }
|
102
|
+
|
103
|
+
return_statement_index = []
|
104
|
+
|
105
|
+
modified_multiple_return_statements.each do |statement|
|
106
|
+
|
107
|
+
location_array = modified_input_array.each_index.select { |index| modified_input_array[index] == statement }
|
108
|
+
|
109
|
+
return_statement_index << location_array[0]
|
110
|
+
|
111
|
+
end
|
112
|
+
|
113
|
+
return_statement_index.each do |index|
|
114
|
+
|
115
|
+
original_statement = input_array[index]
|
116
|
+
|
117
|
+
statement_split = original_statement.split("return ")
|
118
|
+
|
119
|
+
replacement_split = "return [" + statement_split[1].rstrip + "]\n\n"
|
120
|
+
|
121
|
+
input_array[index] = replacement_split
|
122
|
+
|
123
|
+
end
|
124
|
+
|
125
|
+
return input_array
|
126
|
+
|
127
|
+
end
|
@@ -66,6 +66,33 @@ def compile_operators(input_file_contents)
|
|
66
66
|
|
67
67
|
end
|
68
68
|
|
69
|
+
def compile_conditional_assignment(input_string)
|
70
|
+
|
71
|
+
if input_string.include?("||=")
|
72
|
+
|
73
|
+
before,after = input_string.split("||=")
|
74
|
+
|
75
|
+
replacement_string = before + " = #{before.lstrip} || #{after}"
|
76
|
+
|
77
|
+
input_string = replacement_string
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
if input_string.include?("&&=")
|
82
|
+
|
83
|
+
before, after = input_string.split("&&=")
|
84
|
+
|
85
|
+
replacement_string = before + " = #{before.lstrip} && #{after}"
|
86
|
+
|
87
|
+
input_string = replacement_string
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
return input_string
|
92
|
+
|
93
|
+
|
94
|
+
end
|
95
|
+
|
69
96
|
input_file_contents = input_file_contents.collect { |element| element.sub("==", "===") }
|
70
97
|
|
71
98
|
input_file_contents = input_file_contents.collect { |element| element.sub("!=", "!==") }
|
@@ -74,10 +101,14 @@ def compile_operators(input_file_contents)
|
|
74
101
|
|
75
102
|
input_file_contents = input_file_contents.collect { |element| element.sub("elsuf", "else if") }
|
76
103
|
|
104
|
+
input_file_contents = input_file_contents.collect {|element| compile_conditional_assignment(element)}
|
105
|
+
|
77
106
|
input_file_contents = compile_existential_operators(input_file_contents)
|
78
107
|
|
79
108
|
input_file_contents = compile_undefined_operator(input_file_contents)
|
80
109
|
|
110
|
+
input_file_contents = compile_nil_operator(input_file_contents)
|
111
|
+
|
81
112
|
input_file_contents = input_file_contents.collect { |element| compile_power_operator(element) }
|
82
113
|
|
83
114
|
input_file_contents = input_file_contents.collect { |element| compile_match_operator(element) }
|
data/lib/nilac/get_variables.rb
CHANGED
@@ -30,13 +30,15 @@ require_relative 'read_file_line_by_line'
|
|
30
30
|
|
31
31
|
input_file_contents = input_file_contents.collect {|element| replace_strings(element)}
|
32
32
|
|
33
|
-
javascript_regexp = /(if |while |for )/
|
33
|
+
javascript_regexp = /(if |while |for |\|\|=|&&=)/
|
34
34
|
|
35
35
|
for x in 0...input_file_contents.length
|
36
36
|
|
37
37
|
current_row = input_file_contents[x]
|
38
38
|
|
39
|
-
|
39
|
+
original_row = current_row.clone
|
40
|
+
|
41
|
+
if current_row.include?("=") and current_row.index(javascript_regexp) == nil and !current_row.include?("#iggggnnnore")
|
40
42
|
|
41
43
|
current_row = current_row.rstrip + "\n"
|
42
44
|
|
@@ -57,12 +59,24 @@ require_relative 'read_file_line_by_line'
|
|
57
59
|
|
58
60
|
current_row_split[0] = current_row_split[0].split(".",2)[0].strip if current_row_split[0].include?(".")
|
59
61
|
|
60
|
-
|
62
|
+
if current_row_split[0].include?(" ")
|
61
63
|
|
64
|
+
variable_name = current_row_split[0].split
|
62
65
|
|
63
|
-
|
66
|
+
variable_name = variable_name.join("_")
|
67
|
+
|
68
|
+
modified_file_contents[modified_file_contents.index(original_row)] = modified_file_contents[modified_file_contents.index(original_row)].gsub(current_row_split[0],variable_name)
|
64
69
|
|
65
|
-
|
70
|
+
else
|
71
|
+
|
72
|
+
variable_name = current_row_split[0]
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
variables << variable_name
|
77
|
+
|
78
|
+
|
79
|
+
end
|
66
80
|
|
67
81
|
end
|
68
82
|
|
@@ -84,8 +98,6 @@ require_relative 'read_file_line_by_line'
|
|
84
98
|
|
85
99
|
for_loop_statements = for_loop_statements.reject {|line| line.include?("forEach")}
|
86
100
|
|
87
|
-
puts for_loop_statements
|
88
|
-
|
89
101
|
for_loop_statements.each do |statement|
|
90
102
|
|
91
103
|
varis = statement.split("for (")[1].split(";",2)[0].split(",")
|
@@ -0,0 +1,98 @@
|
|
1
|
+
def lexical_scoped_variables(input_function_block)
|
2
|
+
|
3
|
+
#This method will pickup and declare all the variables inside a function block. In future, this method will be
|
4
|
+
#merged with the get variables method
|
5
|
+
|
6
|
+
def replace_strings(input_string)
|
7
|
+
|
8
|
+
element = input_string.gsub("==", "equalequal")
|
9
|
+
|
10
|
+
element = element.gsub("!=", "notequal")
|
11
|
+
|
12
|
+
element = element.gsub("+=", "plusequal")
|
13
|
+
|
14
|
+
element = element.gsub("-=", "minusequal")
|
15
|
+
|
16
|
+
element = element.gsub("*=", "multiequal")
|
17
|
+
|
18
|
+
element = element.gsub("/=", "divequal")
|
19
|
+
|
20
|
+
element = element.gsub("%=", "modequal")
|
21
|
+
|
22
|
+
element = element.gsub("=~", "matchequal")
|
23
|
+
|
24
|
+
element = element.gsub(">=", "greatequal")
|
25
|
+
|
26
|
+
input_string = element.gsub("<=", "lessyequal")
|
27
|
+
|
28
|
+
string_counter = 0
|
29
|
+
|
30
|
+
while input_string.include?("\"")
|
31
|
+
|
32
|
+
string_extract = input_string[input_string.index("\"")..input_string.index("\"",input_string.index("\"")+1)]
|
33
|
+
|
34
|
+
input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
|
35
|
+
|
36
|
+
string_counter += 1
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
while input_string.include?("'")
|
41
|
+
|
42
|
+
string_extract = input_string[input_string.index("'")..input_string.index("'",input_string.index("'")+1)]
|
43
|
+
|
44
|
+
input_string = input_string.sub(string_extract,"--repstring#{string_counter}")
|
45
|
+
|
46
|
+
string_counter += 1
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
return input_string
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
input_function_block = input_function_block.collect {|element| replace_strings(element)}
|
55
|
+
|
56
|
+
controlregexp = /(if |Euuf |for |while |def |function |function\()/
|
57
|
+
|
58
|
+
variables = []
|
59
|
+
|
60
|
+
function_name, parameters = input_function_block[0].split("(")
|
61
|
+
|
62
|
+
parameters = parameters.split(")")[0].split(",")
|
63
|
+
|
64
|
+
parameters = parameters.collect { |element| element.strip }
|
65
|
+
|
66
|
+
input_function_block.each do |line|
|
67
|
+
|
68
|
+
if line.include? "=" and line.index(controlregexp).nil?
|
69
|
+
|
70
|
+
current_line_split = line.strip.split("=")
|
71
|
+
|
72
|
+
variables << current_line_split[0].rstrip
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
parameters.each do |param|
|
79
|
+
|
80
|
+
if variables.include?(param)
|
81
|
+
|
82
|
+
variables.delete(param)
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
if variables.empty?
|
89
|
+
|
90
|
+
return []
|
91
|
+
|
92
|
+
else
|
93
|
+
|
94
|
+
return variables.uniq.sort
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
@@ -46,7 +46,7 @@ require_relative 'read_file_line_by_line'
|
|
46
46
|
|
47
47
|
def extract_blocks(file_contents)
|
48
48
|
|
49
|
-
javascript_regexp = /(if |for |while |case |default:|switch\(|\(function\(|= function\(
|
49
|
+
javascript_regexp = /(if |for |while |case |default:|switch\(|\(function\(|= function\(|,\s*function\(|((=|:)\s+\{))/
|
50
50
|
|
51
51
|
block_starting_lines = file_contents.dup.reject { |element| element.index(javascript_regexp).nil? }[1..-1]
|
52
52
|
|
@@ -62,7 +62,9 @@ require_relative 'read_file_line_by_line'
|
|
62
62
|
|
63
63
|
end
|
64
64
|
|
65
|
-
block_ending_lines = file_contents.dup.each_index.select { |index| (file_contents[index].eql? " }\n" or file_contents[index].eql? " };\n" or file_contents[index].
|
65
|
+
block_ending_lines = file_contents.dup.each_index.select { |index| (file_contents[index].eql? " }\n" or file_contents[index].eql? " };\n" or file_contents[index].lstrip.eql?("});\n"))}
|
66
|
+
|
67
|
+
block_ending_lines = block_ending_lines.reject {|index| file_contents[index].include?(" ")}
|
66
68
|
|
67
69
|
modified_file_contents = file_contents.dup
|
68
70
|
|
@@ -98,13 +100,13 @@ require_relative 'read_file_line_by_line'
|
|
98
100
|
|
99
101
|
end
|
100
102
|
|
101
|
-
rescue TypeError
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
rescue ArgumentError
|
106
|
-
|
107
|
-
|
103
|
+
#rescue TypeError
|
104
|
+
##
|
105
|
+
# puts "Whitespace was left unfixed!"
|
106
|
+
##
|
107
|
+
#rescue ArgumentError
|
108
|
+
##
|
109
|
+
# puts "Whitespace was left unfixed!"
|
108
110
|
|
109
111
|
end
|
110
112
|
|
data/lib/nilac/version.rb
CHANGED
data/lib/nilac.rb
CHANGED
@@ -8,81 +8,44 @@ $LOAD_PATH << File.dirname(__FILE__)
|
|
8
8
|
module Nilac
|
9
9
|
|
10
10
|
require 'nilac/version'
|
11
|
-
|
12
11
|
require 'fileutils'
|
13
|
-
|
14
12
|
require 'nilac/read_file_line_by_line'
|
15
|
-
|
16
13
|
require 'nilac/find_file_name'
|
17
|
-
|
18
14
|
require 'nilac/find_file_path'
|
19
|
-
|
20
15
|
require 'nilac/extract_parsable_file'
|
21
|
-
|
22
16
|
require 'nilac/compile_require_statements'
|
23
|
-
|
24
17
|
require 'nilac/replace_multiline_comments'
|
25
|
-
|
26
18
|
require 'nilac/split_semicolon_seperated_expressions'
|
27
|
-
|
28
19
|
require 'nilac/compile_heredocs'
|
29
|
-
|
30
20
|
require 'nilac/compile_interpolated_strings'
|
31
|
-
|
32
21
|
require 'nilac/replace_singleline_comments'
|
33
|
-
|
34
22
|
require 'nilac/replace_named_functions'
|
35
|
-
|
36
23
|
require 'nilac/compile_parallel_assignment'
|
37
|
-
|
38
24
|
require 'nilac/compile_default_values'
|
39
|
-
|
40
25
|
require 'nilac/get_variables'
|
41
|
-
|
42
26
|
require 'nilac/remove_question_marks'
|
43
|
-
|
44
27
|
require 'nilac/compile_arrays'
|
45
|
-
|
46
28
|
require 'nilac/compile_hashes'
|
47
|
-
|
48
29
|
require 'nilac/compile_strings'
|
49
|
-
|
50
30
|
require 'nilac/compile_integers'
|
51
|
-
|
52
31
|
require 'nilac/compile_classes'
|
53
|
-
|
54
32
|
require 'nilac/compile_named_functions'
|
55
|
-
|
56
33
|
require 'nilac/compile_custom_function_map'
|
57
|
-
|
58
34
|
require 'nilac/compile_ruby_methods'
|
59
|
-
|
60
35
|
require 'nilac/compile_special_keywords'
|
61
|
-
|
62
36
|
require 'nilac/compile_whitespace_delimited_functions'
|
63
|
-
|
64
37
|
require 'nilac/compile_conditional_structures'
|
65
|
-
|
66
38
|
require 'nilac/compile_case_statement'
|
67
|
-
|
68
39
|
require 'nilac/compile_loops'
|
69
|
-
|
40
|
+
require 'nilac/compile_lambdas'
|
70
41
|
require 'nilac/compile_blocks'
|
71
|
-
|
72
42
|
require 'nilac/add_semicolons'
|
73
|
-
|
74
43
|
require 'nilac/compile_comments'
|
75
|
-
|
76
44
|
require 'nilac/pretty_print_javascript'
|
77
|
-
|
78
45
|
require 'nilac/compile_operators'
|
79
|
-
|
80
46
|
require 'nilac/output_javascript'
|
81
|
-
|
82
47
|
require 'nilac/create_mac_executable'
|
83
|
-
|
84
48
|
require 'nilac/parse_arguments'
|
85
|
-
|
86
49
|
require 'nilac/compile_classes'
|
87
50
|
|
88
51
|
class NilaCompiler
|
@@ -109,8 +72,6 @@ module Nilac
|
|
109
72
|
|
110
73
|
file_contents = split_semicolon_seperated_expressions(file_contents)
|
111
74
|
|
112
|
-
compile_classes(file_contents)
|
113
|
-
|
114
75
|
file_contents = compile_heredocs(file_contents, temp_file)
|
115
76
|
|
116
77
|
file_contents,loop_vars = compile_loops(file_contents,temp_file)
|
@@ -123,6 +84,8 @@ module Nilac
|
|
123
84
|
|
124
85
|
file_contents = compile_conditional_structures(file_contents, temp_file)
|
125
86
|
|
87
|
+
file_contents,lambda_names = compile_lambdas(file_contents,temp_file)
|
88
|
+
|
126
89
|
file_contents = compile_blocks(file_contents,temp_file)
|
127
90
|
|
128
91
|
file_contents = compile_integers(file_contents)
|
@@ -153,6 +116,8 @@ module Nilac
|
|
153
116
|
|
154
117
|
function_names << ruby_functions
|
155
118
|
|
119
|
+
function_names << lambda_names
|
120
|
+
|
156
121
|
list_of_variables += loop_vars
|
157
122
|
|
158
123
|
file_contents = compile_whitespace_delimited_functions(file_contents, function_names, temp_file)
|
@@ -324,9 +289,7 @@ end
|
|
324
289
|
if ARGV.include?("--test")
|
325
290
|
|
326
291
|
ARGV.delete("--test")
|
327
|
-
|
328
292
|
compiler = Nilac::NilaCompiler.new(ARGV)
|
329
|
-
|
330
293
|
compiler.start_compile()
|
331
294
|
|
332
295
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Feature: This feature introduces .undefined?, .nil? and .exist? operators to help Javascript development.
|
2
|
+
Scenario: Input file with different operators
|
3
|
+
Given the input file "javascript_methods.nila"
|
4
|
+
When the ~compiler is run
|
5
|
+
The output file must be "javascript_methods.js"
|
6
|
+
The output file must equal "correct_javascript_methods.js"
|
7
|
+
|
8
|
+
Configurations:
|
9
|
+
|
10
|
+
~compiler => lib/nilac.rb
|
11
|
+
:v $cliusage => ruby :v --test --compile $file
|
@@ -0,0 +1,19 @@
|
|
1
|
+
//Written using Nila. Visit http://adhithyan15.github.io/nila
|
2
|
+
(function() {
|
3
|
+
var a, b;
|
4
|
+
|
5
|
+
// This file demonstrates the conditional assignment operator in Nila
|
6
|
+
|
7
|
+
a = null;
|
8
|
+
|
9
|
+
b = 20;
|
10
|
+
|
11
|
+
a = a || b;
|
12
|
+
|
13
|
+
a = true;
|
14
|
+
|
15
|
+
b = 20;
|
16
|
+
|
17
|
+
a = a && b;
|
18
|
+
|
19
|
+
}).call(this);
|
@@ -0,0 +1,25 @@
|
|
1
|
+
//Written using Nila. Visit http://adhithyan15.github.io/nila
|
2
|
+
(function() {
|
3
|
+
var commandline_args, overspeed;
|
4
|
+
|
5
|
+
if ((typeof console !== "undefined" && console !== null)) {
|
6
|
+
console.log("You can use console.log");
|
7
|
+
}
|
8
|
+
|
9
|
+
if ((typeof console !== "undefined" && console !== null)) {
|
10
|
+
console.log("You can use console.log");
|
11
|
+
}
|
12
|
+
|
13
|
+
commandline_args = ["-c"];
|
14
|
+
|
15
|
+
if ((typeof commandline_args[1] === "undefined")) {
|
16
|
+
console.log("Your second argument was empty!");
|
17
|
+
}
|
18
|
+
|
19
|
+
overspeed = null;
|
20
|
+
|
21
|
+
if ((overspeed === null)) {
|
22
|
+
console.log("No overspeeding vehicles found!");
|
23
|
+
}
|
24
|
+
|
25
|
+
}).call(this);
|
@@ -0,0 +1,19 @@
|
|
1
|
+
puts "You can use console.log" if console.exist?
|
2
|
+
|
3
|
+
puts "You can use console.log" if console.?
|
4
|
+
|
5
|
+
commandline_args = %w{-c}
|
6
|
+
|
7
|
+
if commandline_args[1].undefined?
|
8
|
+
|
9
|
+
puts "Your second argument was empty!"
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
overspeed = nil
|
14
|
+
|
15
|
+
if overspeed.nil?
|
16
|
+
|
17
|
+
puts "No overspeeding vehicles found!"
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# This example was taken from http://alvinalexander.com/blog/post/ruby/examples-ruby-ternary-operator-true-false-syntax
|
2
|
+
|
3
|
+
# set the speed
|
4
|
+
speed = 90
|
5
|
+
|
6
|
+
# somewhere later in the program ...
|
7
|
+
speed > 55 ? (speed < 70 ? puts("Fine is $400") : puts("Fine is $800")) : puts("I'm a careful driver")
|
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.
|
4
|
+
version: 0.0.4.3.9.6
|
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-
|
11
|
+
date: 2013-11-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: shark
|
@@ -38,7 +38,6 @@ files:
|
|
38
38
|
- README.md
|
39
39
|
- Rakefile
|
40
40
|
- bin/nilac
|
41
|
-
- examples/StringMagic.nila
|
42
41
|
- examples/countdown.nila
|
43
42
|
- examples/decBin.js
|
44
43
|
- examples/decBin.nila
|
@@ -46,6 +45,7 @@ files:
|
|
46
45
|
- examples/marky.nila
|
47
46
|
- lib/nilac.rb
|
48
47
|
- lib/nilac/ErrorDeclarations.rb
|
48
|
+
- lib/nilac/add_auto_return_statement.rb
|
49
49
|
- lib/nilac/add_semicolons.rb
|
50
50
|
- lib/nilac/compile_arrays.rb
|
51
51
|
- lib/nilac/compile_blocks.rb
|
@@ -60,7 +60,9 @@ files:
|
|
60
60
|
- lib/nilac/compile_heredocs.rb
|
61
61
|
- lib/nilac/compile_integers.rb
|
62
62
|
- lib/nilac/compile_interpolated_strings.rb
|
63
|
+
- lib/nilac/compile_lambdas.rb
|
63
64
|
- lib/nilac/compile_loops.rb
|
65
|
+
- lib/nilac/compile_multiple_return.rb
|
64
66
|
- lib/nilac/compile_named_functions.rb
|
65
67
|
- lib/nilac/compile_operators.rb
|
66
68
|
- lib/nilac/compile_parallel_assignment.rb
|
@@ -68,7 +70,6 @@ files:
|
|
68
70
|
- lib/nilac/compile_ruby_methods.rb
|
69
71
|
- lib/nilac/compile_special_keywords.rb
|
70
72
|
- lib/nilac/compile_strings.rb
|
71
|
-
- lib/nilac/compile_ternary_operator.rb
|
72
73
|
- lib/nilac/compile_whitespace_delimited_functions.rb
|
73
74
|
- lib/nilac/create_mac_executable.rb
|
74
75
|
- lib/nilac/extract_parsable_file.rb
|
@@ -76,6 +77,7 @@ files:
|
|
76
77
|
- lib/nilac/find_file_name.rb
|
77
78
|
- lib/nilac/find_file_path.rb
|
78
79
|
- lib/nilac/get_variables.rb
|
80
|
+
- lib/nilac/lexical_scoped_function_variables.rb
|
79
81
|
- lib/nilac/output_javascript.rb
|
80
82
|
- lib/nilac/parse_arguments.rb
|
81
83
|
- lib/nilac/pretty_print_javascript.rb
|
@@ -100,6 +102,7 @@ files:
|
|
100
102
|
- shark/features/hashes.feature
|
101
103
|
- shark/features/heredoc.feature
|
102
104
|
- shark/features/if_then_else.feature
|
105
|
+
- shark/features/javascript_methods.feature
|
103
106
|
- shark/features/loop.feature
|
104
107
|
- shark/features/method_multiple_return.feature
|
105
108
|
- shark/features/multiline_array.feature
|
@@ -120,8 +123,10 @@ files:
|
|
120
123
|
- shark/test_files/array_sugar.nila
|
121
124
|
- shark/test_files/case.nila
|
122
125
|
- shark/test_files/class.nila
|
126
|
+
- shark/test_files/conditional_assignment.nila
|
123
127
|
- shark/test_files/correct.js
|
124
128
|
- shark/test_files/correct_case.js
|
129
|
+
- shark/test_files/correct_conditional_assignment.js
|
125
130
|
- shark/test_files/correct_default_parameters.js
|
126
131
|
- shark/test_files/correct_for.js
|
127
132
|
- shark/test_files/correct_hashes.js
|
@@ -129,6 +134,7 @@ files:
|
|
129
134
|
- shark/test_files/correct_if_then_else.js
|
130
135
|
- shark/test_files/correct_indexing.js
|
131
136
|
- shark/test_files/correct_initialization.js
|
137
|
+
- shark/test_files/correct_javascript_methods.js
|
132
138
|
- shark/test_files/correct_loop.js
|
133
139
|
- shark/test_files/correct_multiline_array.js
|
134
140
|
- shark/test_files/correct_multiple_return.js
|
@@ -151,6 +157,8 @@ files:
|
|
151
157
|
- shark/test_files/hashes.nila
|
152
158
|
- shark/test_files/heredoc.nila
|
153
159
|
- shark/test_files/if_then_else.nila
|
160
|
+
- shark/test_files/javascript_methods.nila
|
161
|
+
- shark/test_files/lambda.nila
|
154
162
|
- shark/test_files/loop.nila
|
155
163
|
- shark/test_files/multiline_array.nila
|
156
164
|
- shark/test_files/multiple_initialization.nila
|
@@ -170,8 +178,10 @@ files:
|
|
170
178
|
- shark/test_files/splats.nila
|
171
179
|
- shark/test_files/string_interpolation.nila
|
172
180
|
- shark/test_files/string_operators.nila
|
181
|
+
- shark/test_files/ternary.nila
|
173
182
|
- shark/test_files/times.nila
|
174
183
|
- shark/test_files/unless_until.nila
|
184
|
+
- shark/test_files/variable_spaces.nila
|
175
185
|
- shark/test_files/whitespace_delimiter.nila
|
176
186
|
homepage: http://adhithyan15.github.com/nila
|
177
187
|
licenses: []
|
data/examples/StringMagic.nila
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
# StringMagic is an implementation of Ruby's string methods in Javascript using Nila.
|
2
|
-
# It extends the String prototype by adding more methods to it.
|
3
|
-
|
4
|
-
# It is being written by Adhithya Rajasekaran and Sri Madhavi Rajasekaran.
|
5
|
-
|
6
|
-
# It is released under the MIT License
|
7
|
-
|
8
|
-
# Nila allows you to open native Classes/Prototypes and extend them with custom
|
9
|
-
# methods/functions. So we will be opening the String class and adding more methods
|
10
|
-
# to it.
|
11
|
-
|
12
|
-
class String
|
13
|
-
|
14
|
-
def endswith(suffix)
|
15
|
-
|
16
|
-
# suffix can be any string
|
17
|
-
|
18
|
-
self.include?(suffix,self.length-suffix.length)
|
19
|
-
|
20
|
-
end
|
21
|
-
|
22
|
-
|
23
|
-
end
|