nilac 0.0.4.3.0 → 0.0.4.3.3
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 +7 -0
- data/bin/nilac +434 -9
- data/lib/nilac/version.rb +1 -1
- data/shark/features/regular_for.feature +11 -0
- data/shark/test_files/correct_for.js +27 -0
- data/shark/test_files/correct_initialization.js +15 -1
- data/shark/test_files/multiple_initialization.nila +4 -0
- data/shark/test_files/regular_for.nila +17 -0
- data/shark/test_files/times.nila +1 -1
- data/src/nilac.rb +434 -9
- metadata +15 -17
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c3f566c76264dbd8ac2ebae19881d66ef275f331
|
4
|
+
data.tar.gz: a06a5560e01677ced9c242d89c92c7cbf3840d05
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0c4a4b86198e3513a73a477c726810e2fd1f579311677e6c5af00d4442a2b2ca878a2f4cf9fd51da9e1921f81b05d82e6dca2269f0e4cc2fabd64dd9b37c19df
|
7
|
+
data.tar.gz: 3382cb6fa6a92a6a905e73c36c1f358ddeb4b9d67ae06152876eb755f53624bc0fd0457453db9378bba33c95d70f7bdf810784068c07d7c9aaee300f4c549942
|
data/bin/nilac
CHANGED
@@ -333,6 +333,8 @@ def compile(input_file_path, *output_file_name)
|
|
333
333
|
|
334
334
|
test_string = string_extract[0..closed_curly_brace_index[0]]
|
335
335
|
|
336
|
+
puts test_string
|
337
|
+
|
336
338
|
original_string = test_string.dup
|
337
339
|
|
338
340
|
if test_string.include?("{")
|
@@ -606,6 +608,50 @@ def compile(input_file_path, *output_file_name)
|
|
606
608
|
|
607
609
|
def compile_parallel_assignment(input_file_contents, temporary_nila_file)
|
608
610
|
|
611
|
+
def arrayify_right_side(input_string)
|
612
|
+
|
613
|
+
javascript_regexp = /(if |while |for |function |function\()/
|
614
|
+
|
615
|
+
if input_string.include?("=") and input_string.index(javascript_regexp) == nil and input_string.strip[0..3] != "_ref" and !input_string.split("=")[1].include?("[")
|
616
|
+
|
617
|
+
modified_input_string = input_string.dup
|
618
|
+
|
619
|
+
right_side = input_string.split("=")[1]
|
620
|
+
|
621
|
+
if right_side.include?(",")
|
622
|
+
|
623
|
+
splits = right_side.split(",")
|
624
|
+
|
625
|
+
replacement_string = []
|
626
|
+
|
627
|
+
splits.each do |str|
|
628
|
+
|
629
|
+
unless str.include?(")") and !str.include?("(")
|
630
|
+
|
631
|
+
replacement_string << str
|
632
|
+
|
633
|
+
else
|
634
|
+
|
635
|
+
replacement_string[-1] = replacement_string[-1]+ "," +str
|
636
|
+
|
637
|
+
end
|
638
|
+
|
639
|
+
end
|
640
|
+
|
641
|
+
replacement_string = " [#{replacement_string.join(",").strip}]\n"
|
642
|
+
|
643
|
+
input_string = input_string.sub(right_side,replacement_string)
|
644
|
+
|
645
|
+
end
|
646
|
+
|
647
|
+
end
|
648
|
+
|
649
|
+
return input_string
|
650
|
+
|
651
|
+
end
|
652
|
+
|
653
|
+
input_file_contents = input_file_contents.collect {|element| arrayify_right_side(element)}
|
654
|
+
|
609
655
|
possible_variable_lines = input_file_contents.reject { |element| !element.include? "=" }
|
610
656
|
|
611
657
|
possible_parallel_assignment = possible_variable_lines.reject { |element| !element.split("=")[0].include? "," }
|
@@ -798,8 +844,24 @@ def compile(input_file_path, *output_file_name)
|
|
798
844
|
|
799
845
|
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
800
846
|
|
847
|
+
for_loop_variables = []
|
848
|
+
|
849
|
+
for_loop_statements = line_by_line_contents.reject {|line| !line.include?("for")}
|
850
|
+
|
851
|
+
for_loop_statements.each do |statement|
|
852
|
+
|
853
|
+
varis = statement.split("for (")[1].split(";",2)[0].split(",")
|
854
|
+
|
855
|
+
for_loop_variables << varis.collect {|vari| vari.strip.split("=")[0].strip}
|
856
|
+
|
857
|
+
for_loop_variables = for_loop_variables.flatten
|
858
|
+
|
859
|
+
end
|
860
|
+
|
801
861
|
variables += loop_variables
|
802
862
|
|
863
|
+
variables += for_loop_variables
|
864
|
+
|
803
865
|
variables = variables.flatten
|
804
866
|
|
805
867
|
if variables.length > 0
|
@@ -1900,7 +1962,8 @@ def compile(input_file_path, *output_file_name)
|
|
1900
1962
|
|
1901
1963
|
"p" => "console.log",
|
1902
1964
|
|
1903
|
-
"print" => "process.stdout.write"
|
1965
|
+
"print" => "process.stdout.write",
|
1966
|
+
|
1904
1967
|
}
|
1905
1968
|
|
1906
1969
|
function_map = function_map_replacements.keys
|
@@ -1925,6 +1988,46 @@ def compile(input_file_path, *output_file_name)
|
|
1925
1988
|
|
1926
1989
|
end
|
1927
1990
|
|
1991
|
+
def compile_ruby_methods(input_file_contents)
|
1992
|
+
|
1993
|
+
# These are some interesting methods that we really miss in Javascript.
|
1994
|
+
# So we have made these methods available
|
1995
|
+
|
1996
|
+
method_map_replacement = {
|
1997
|
+
|
1998
|
+
".split" => ".split(\" \")",
|
1999
|
+
|
2000
|
+
".strip" => ".replace(/^\s+|\s+$/g,'')",
|
2001
|
+
|
2002
|
+
".lstrip" => ".replace(/^\s+/g,\"\")",
|
2003
|
+
|
2004
|
+
".rstrip" => ".replace(/\s+$/g,\"\")"
|
2005
|
+
}
|
2006
|
+
|
2007
|
+
method_map = method_map_replacement.keys
|
2008
|
+
|
2009
|
+
method_map_regex = method_map.collect {|name| name.gsub(".","\\.")}
|
2010
|
+
|
2011
|
+
method_map_regex = Regexp.new(method_map_regex.join("|"))
|
2012
|
+
|
2013
|
+
modified_file_contents = input_file_contents.clone
|
2014
|
+
|
2015
|
+
input_file_contents.each_with_index do |line, index|
|
2016
|
+
|
2017
|
+
if line.match(method_map_regex)
|
2018
|
+
|
2019
|
+
unless method_match.include?(line+"(")
|
2020
|
+
|
2021
|
+
puts line
|
2022
|
+
|
2023
|
+
end
|
2024
|
+
|
2025
|
+
end
|
2026
|
+
|
2027
|
+
end
|
2028
|
+
|
2029
|
+
end
|
2030
|
+
|
1928
2031
|
def compile_whitespace_delimited_functions(input_file_contents, function_names, temporary_nila_file)
|
1929
2032
|
|
1930
2033
|
def extract(input_string, pattern_start, pattern_end)
|
@@ -2713,6 +2816,322 @@ def compile(input_file_path, *output_file_name)
|
|
2713
2816
|
|
2714
2817
|
end
|
2715
2818
|
|
2819
|
+
def compile_regular_for(input_file_contents, temporary_nila_file)
|
2820
|
+
|
2821
|
+
def convert_string_to_array(input_string, temporary_nila_file)
|
2822
|
+
|
2823
|
+
file_id = open(temporary_nila_file, 'w')
|
2824
|
+
|
2825
|
+
file_id.write(input_string)
|
2826
|
+
|
2827
|
+
file_id.close()
|
2828
|
+
|
2829
|
+
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
2830
|
+
|
2831
|
+
return line_by_line_contents
|
2832
|
+
|
2833
|
+
end
|
2834
|
+
|
2835
|
+
def extract_for_blocks(for_statement_indexes, input_file_contents)
|
2836
|
+
|
2837
|
+
possible_for_blocks = []
|
2838
|
+
|
2839
|
+
for_block_counter = 0
|
2840
|
+
|
2841
|
+
extracted_blocks = []
|
2842
|
+
|
2843
|
+
controlregexp = /(if |while |def |for )/
|
2844
|
+
|
2845
|
+
rejectionregexp = /( if | while )/
|
2846
|
+
|
2847
|
+
for x in 0...for_statement_indexes.length-1
|
2848
|
+
|
2849
|
+
possible_for_blocks << input_file_contents[for_statement_indexes[x]..for_statement_indexes[x+1]]
|
2850
|
+
|
2851
|
+
end
|
2852
|
+
|
2853
|
+
end_counter = 0
|
2854
|
+
|
2855
|
+
end_index = []
|
2856
|
+
|
2857
|
+
current_block = []
|
2858
|
+
|
2859
|
+
possible_for_blocks.each_with_index do |block|
|
2860
|
+
|
2861
|
+
current_block += block
|
2862
|
+
|
2863
|
+
current_block.each_with_index do |line, index|
|
2864
|
+
|
2865
|
+
if line.strip.eql? "end"
|
2866
|
+
|
2867
|
+
end_counter += 1
|
2868
|
+
|
2869
|
+
end_index << index
|
2870
|
+
|
2871
|
+
end
|
2872
|
+
|
2873
|
+
end
|
2874
|
+
|
2875
|
+
if end_counter > 0
|
2876
|
+
|
2877
|
+
until end_index.empty?
|
2878
|
+
|
2879
|
+
array_extract = current_block[0..end_index[0]].reverse
|
2880
|
+
|
2881
|
+
index_counter = 0
|
2882
|
+
|
2883
|
+
array_extract.each_with_index do |line|
|
2884
|
+
|
2885
|
+
break if (line.lstrip.index(controlregexp) != nil and line.lstrip.index(rejectionregexp).nil?)
|
2886
|
+
|
2887
|
+
index_counter += 1
|
2888
|
+
|
2889
|
+
end
|
2890
|
+
|
2891
|
+
block_extract = array_extract[0..index_counter].reverse
|
2892
|
+
|
2893
|
+
extracted_blocks << block_extract
|
2894
|
+
|
2895
|
+
block_start = current_block.index(block_extract[0])
|
2896
|
+
|
2897
|
+
block_end = current_block.index(block_extract[-1])
|
2898
|
+
|
2899
|
+
current_block[block_start..block_end] = "--forblock#{for_block_counter}"
|
2900
|
+
|
2901
|
+
for_block_counter += 1
|
2902
|
+
|
2903
|
+
end_counter = 0
|
2904
|
+
|
2905
|
+
end_index = []
|
2906
|
+
|
2907
|
+
current_block.each_with_index do |line, index|
|
2908
|
+
|
2909
|
+
if line.strip.eql? "end"
|
2910
|
+
|
2911
|
+
end_counter += 1
|
2912
|
+
|
2913
|
+
end_index << index
|
2914
|
+
|
2915
|
+
end
|
2916
|
+
|
2917
|
+
end
|
2918
|
+
|
2919
|
+
end
|
2920
|
+
|
2921
|
+
end
|
2922
|
+
|
2923
|
+
end
|
2924
|
+
|
2925
|
+
return current_block, extracted_blocks
|
2926
|
+
|
2927
|
+
end
|
2928
|
+
|
2929
|
+
def compile_for_syntax(input_block)
|
2930
|
+
|
2931
|
+
def compile_condition(input_condition, input_block)
|
2932
|
+
|
2933
|
+
variable,array_name = input_condition.split("in")
|
2934
|
+
|
2935
|
+
if array_name.strip.include?("[") and array_name.strip.include?("]")
|
2936
|
+
|
2937
|
+
replacement_array = "_ref1 = #{array_name.strip}\n\n"
|
2938
|
+
|
2939
|
+
replacement_string = "#{variable.strip} = _ref1[_i];\n\n"
|
2940
|
+
|
2941
|
+
input_block = [replacement_array] + input_block.insert(1,replacement_string)
|
2942
|
+
|
2943
|
+
input_block[1] = "for (_i = 0, _j = _ref1.length; _i < _j; _i += 1) {\n\n"
|
2944
|
+
|
2945
|
+
elsif array_name.strip.include?("..")
|
2946
|
+
|
2947
|
+
array_type = if array_name.strip.include?("...") then 0 else 1 end
|
2948
|
+
|
2949
|
+
if array_type == 0
|
2950
|
+
|
2951
|
+
num1,num2 = array_name.strip.split("...")
|
2952
|
+
|
2953
|
+
input_block[0] = "for (#{variable.strip} = #{num1}, _j = #{num2}; #{variable.strip} <= _j; #{variable.strip} += 1) {\n\n"
|
2954
|
+
|
2955
|
+
else
|
2956
|
+
|
2957
|
+
num1,num2 = array_name.strip.split("..")
|
2958
|
+
|
2959
|
+
input_block[0] = "for (#{variable.strip} = #{num1}, _j = #{num2}; #{variable.strip} < _j; #{variable.strip} += 1) {\n\n"
|
2960
|
+
|
2961
|
+
end
|
2962
|
+
|
2963
|
+
else
|
2964
|
+
|
2965
|
+
input_block[0] = "for (_i = 0, _j = #{array_name.strip}.length; _i < _j; _i += 1) {\n\n"
|
2966
|
+
|
2967
|
+
input_block = input_block.insert(1,"#{variable.strip} = #{array_name.strip}[_i];\n\n")
|
2968
|
+
|
2969
|
+
end
|
2970
|
+
|
2971
|
+
return input_block
|
2972
|
+
|
2973
|
+
end
|
2974
|
+
|
2975
|
+
modified_input_block = input_block.dup
|
2976
|
+
|
2977
|
+
strings = []
|
2978
|
+
|
2979
|
+
string_counter = 0
|
2980
|
+
|
2981
|
+
input_block.each_with_index do |line, index|
|
2982
|
+
|
2983
|
+
if line.include?("\"")
|
2984
|
+
|
2985
|
+
opening_quotes = line.index("\"")
|
2986
|
+
|
2987
|
+
string_extract = line[opening_quotes..line.index("\"", opening_quotes+1)]
|
2988
|
+
|
2989
|
+
strings << string_extract
|
2990
|
+
|
2991
|
+
modified_input_block[index] = modified_input_block[index].sub(string_extract, "--string{#{string_counter}}")
|
2992
|
+
|
2993
|
+
string_counter += 1
|
2994
|
+
|
2995
|
+
end
|
2996
|
+
|
2997
|
+
end
|
2998
|
+
|
2999
|
+
input_block = modified_input_block
|
3000
|
+
|
3001
|
+
starting_line = input_block[0]
|
3002
|
+
|
3003
|
+
starting_line = starting_line + "\n" if starting_line.lstrip == starting_line
|
3004
|
+
|
3005
|
+
junk, condition = starting_line.split("for")
|
3006
|
+
|
3007
|
+
input_block[-1] = input_block[-1].lstrip.sub("end", "}")
|
3008
|
+
|
3009
|
+
input_block = compile_condition(condition,input_block)
|
3010
|
+
|
3011
|
+
modified_input_block = input_block.dup
|
3012
|
+
|
3013
|
+
input_block.each_with_index do |line, index|
|
3014
|
+
|
3015
|
+
if line.include?("--string{")
|
3016
|
+
|
3017
|
+
junk, remains = line.split("--string{")
|
3018
|
+
|
3019
|
+
string_index, junk = remains.split("}")
|
3020
|
+
|
3021
|
+
modified_input_block[index] = modified_input_block[index].sub("--string{#{string_index.strip}}", strings[string_index.strip.to_i])
|
3022
|
+
|
3023
|
+
end
|
3024
|
+
|
3025
|
+
end
|
3026
|
+
|
3027
|
+
return modified_input_block
|
3028
|
+
|
3029
|
+
end
|
3030
|
+
|
3031
|
+
possible_for_statements = input_file_contents.reject { |element| !element.include?("for") }
|
3032
|
+
|
3033
|
+
possible_for_statements = possible_for_statements.reject {|element| element.include?("for (")}
|
3034
|
+
|
3035
|
+
if !possible_for_statements.empty?
|
3036
|
+
|
3037
|
+
for_statement_indexes = []
|
3038
|
+
|
3039
|
+
possible_for_statements.each do |statement|
|
3040
|
+
|
3041
|
+
for_statement_indexes << input_file_contents.dup.each_index.select { |index| input_file_contents[index] == statement }
|
3042
|
+
|
3043
|
+
end
|
3044
|
+
|
3045
|
+
for_statement_indexes = [0] + for_statement_indexes.flatten + [-1]
|
3046
|
+
|
3047
|
+
controlregexp = /(if |def |while )/
|
3048
|
+
|
3049
|
+
modified_input_contents, extracted_statements = extract_for_blocks(for_statement_indexes, input_file_contents.clone)
|
3050
|
+
|
3051
|
+
joined_blocks = extracted_statements.collect { |element| element.join }
|
3052
|
+
|
3053
|
+
for_statements = joined_blocks.reject { |element| element.index(controlregexp) != nil }
|
3054
|
+
|
3055
|
+
rejected_elements = joined_blocks - for_statements
|
3056
|
+
|
3057
|
+
rejected_elements_index = []
|
3058
|
+
|
3059
|
+
rejected_elements.each do |element|
|
3060
|
+
|
3061
|
+
rejected_elements_index << joined_blocks.each_index.select { |index| joined_blocks[index] == element }
|
3062
|
+
|
3063
|
+
end
|
3064
|
+
|
3065
|
+
for_blocks_index = (0...extracted_statements.length).to_a
|
3066
|
+
|
3067
|
+
rejected_elements_index = rejected_elements_index.flatten
|
3068
|
+
|
3069
|
+
for_blocks_index -= rejected_elements_index
|
3070
|
+
|
3071
|
+
modified_for_statements = for_statements.collect { |string| convert_string_to_array(string, temporary_nila_file) }
|
3072
|
+
|
3073
|
+
modified_for_statements = modified_for_statements.collect { |block| compile_for_syntax(block) }.reverse
|
3074
|
+
|
3075
|
+
for_blocks_index = for_blocks_index.collect { |element| "--forblock#{element}" }.reverse
|
3076
|
+
|
3077
|
+
rejected_elements_index = rejected_elements_index.collect { |element| "--forblock#{element}" }.reverse
|
3078
|
+
|
3079
|
+
rejected_elements = rejected_elements.reverse
|
3080
|
+
|
3081
|
+
joined_file_contents = modified_input_contents.join
|
3082
|
+
|
3083
|
+
until for_blocks_index.empty? and rejected_elements_index.empty?
|
3084
|
+
|
3085
|
+
if !for_blocks_index.empty?
|
3086
|
+
|
3087
|
+
if joined_file_contents.include?(for_blocks_index[0])
|
3088
|
+
|
3089
|
+
joined_file_contents = joined_file_contents.sub(for_blocks_index[0], modified_for_statements[0].join)
|
3090
|
+
|
3091
|
+
for_blocks_index.delete_at(0)
|
3092
|
+
|
3093
|
+
modified_for_statements.delete_at(0)
|
3094
|
+
|
3095
|
+
else
|
3096
|
+
|
3097
|
+
joined_file_contents = joined_file_contents.sub(rejected_elements_index[0], rejected_elements[0].join)
|
3098
|
+
|
3099
|
+
rejected_elements_index.delete_at(0)
|
3100
|
+
|
3101
|
+
rejected_elements.delete_at(0)
|
3102
|
+
|
3103
|
+
end
|
3104
|
+
|
3105
|
+
else
|
3106
|
+
|
3107
|
+
joined_file_contents = joined_file_contents.sub(rejected_elements_index[0], rejected_elements[0].join)
|
3108
|
+
|
3109
|
+
rejected_elements_index.delete_at(0)
|
3110
|
+
|
3111
|
+
rejected_elements.delete_at(0)
|
3112
|
+
|
3113
|
+
end
|
3114
|
+
|
3115
|
+
end
|
3116
|
+
|
3117
|
+
else
|
3118
|
+
|
3119
|
+
joined_file_contents = input_file_contents.join
|
3120
|
+
|
3121
|
+
end
|
3122
|
+
|
3123
|
+
file_id = open(temporary_nila_file, 'w')
|
3124
|
+
|
3125
|
+
file_id.write(joined_file_contents)
|
3126
|
+
|
3127
|
+
file_id.close()
|
3128
|
+
|
3129
|
+
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
3130
|
+
|
3131
|
+
return line_by_line_contents
|
3132
|
+
|
3133
|
+
end
|
3134
|
+
|
2716
3135
|
def compile_loop_keyword(input_file_contents,temporary_nila_file)
|
2717
3136
|
|
2718
3137
|
def convert_string_to_array(input_string, temporary_nila_file)
|
@@ -3051,12 +3470,16 @@ def compile(input_file_path, *output_file_name)
|
|
3051
3470
|
|
3052
3471
|
file_contents = compile_ternary_if(input_file_contents)
|
3053
3472
|
|
3473
|
+
puts file_contents
|
3474
|
+
|
3054
3475
|
file_contents, rejected_lines = ignore_statement_modifiers(file_contents)
|
3055
3476
|
|
3056
3477
|
file_contents = replace_unless_until(file_contents)
|
3057
3478
|
|
3058
3479
|
file_contents = compile_regular_if(file_contents, temporary_nila_file)
|
3059
3480
|
|
3481
|
+
file_contents = compile_regular_for(file_contents, temporary_nila_file)
|
3482
|
+
|
3060
3483
|
file_contents = compile_regular_while(file_contents, temporary_nila_file)
|
3061
3484
|
|
3062
3485
|
file_contents = compile_loop_keyword(file_contents,temporary_nila_file)
|
@@ -3083,7 +3506,7 @@ def compile(input_file_path, *output_file_name)
|
|
3083
3506
|
|
3084
3507
|
end
|
3085
3508
|
|
3086
|
-
def extract_variable_names(input_file_contents
|
3509
|
+
def extract_variable_names(input_file_contents)
|
3087
3510
|
|
3088
3511
|
variables = []
|
3089
3512
|
|
@@ -3169,9 +3592,9 @@ def compile(input_file_path, *output_file_name)
|
|
3169
3592
|
|
3170
3593
|
file_extract = input_file_contents[0..index_counter]
|
3171
3594
|
|
3172
|
-
file_variables = extract_variable_names(file_extract
|
3595
|
+
file_variables = extract_variable_names(file_extract)
|
3173
3596
|
|
3174
|
-
block_variables = extract_variable_names(loop_extract
|
3597
|
+
block_variables = extract_variable_names(loop_extract)
|
3175
3598
|
|
3176
3599
|
var_need_of_declaration = file_variables-block_variables-["_i","_j"]
|
3177
3600
|
|
@@ -3987,10 +4410,6 @@ def compile(input_file_path, *output_file_name)
|
|
3987
4410
|
|
3988
4411
|
file_contents = compile_conditional_structures(file_contents, temp_file)
|
3989
4412
|
|
3990
|
-
file_contents = compile_arrays(file_contents, temp_file)
|
3991
|
-
|
3992
|
-
file_contents = compile_strings(file_contents)
|
3993
|
-
|
3994
4413
|
file_contents = compile_integers(file_contents)
|
3995
4414
|
|
3996
4415
|
file_contents = compile_default_values(file_contents, temp_file)
|
@@ -4001,12 +4420,18 @@ def compile(input_file_path, *output_file_name)
|
|
4001
4420
|
|
4002
4421
|
file_contents = compile_parallel_assignment(file_contents, temp_file)
|
4003
4422
|
|
4423
|
+
file_contents = compile_arrays(file_contents, temp_file)
|
4424
|
+
|
4425
|
+
file_contents = compile_strings(file_contents)
|
4426
|
+
|
4004
4427
|
file_contents, function_names = compile_named_functions(file_contents, named_functions, nested_functions, temp_file)
|
4005
4428
|
|
4006
4429
|
list_of_variables, file_contents = get_variables(file_contents, temp_file,loop_vars)
|
4007
4430
|
|
4008
4431
|
file_contents, ruby_functions = compile_custom_function_map(file_contents)
|
4009
4432
|
|
4433
|
+
#compile_ruby_methods(file_contents)
|
4434
|
+
|
4010
4435
|
function_names << ruby_functions
|
4011
4436
|
|
4012
4437
|
list_of_variables += loop_vars
|
@@ -4089,7 +4514,7 @@ def find_file_path(input_path, file_extension)
|
|
4089
4514
|
|
4090
4515
|
end
|
4091
4516
|
|
4092
|
-
nilac_version = "0.0.4.3.
|
4517
|
+
nilac_version = "0.0.4.3.3"
|
4093
4518
|
|
4094
4519
|
opts = Slop.parse do
|
4095
4520
|
on :c, :compile=, 'Compile Nila File', as:Array, delimiter:":"
|
data/lib/nilac/version.rb
CHANGED
@@ -0,0 +1,11 @@
|
|
1
|
+
Feature: Compiling for loops in a nila program
|
2
|
+
Scenario: Input with several kinds of for loops
|
3
|
+
Given the input file "regular_for.nila"
|
4
|
+
When the ~compiler is run
|
5
|
+
The output file must be "regular_for.js"
|
6
|
+
The output file must equal "correct_for.js"
|
7
|
+
|
8
|
+
Configurations:
|
9
|
+
|
10
|
+
~compiler => src/nilac.rb
|
11
|
+
:v $cliusage => ruby :v --compile $file
|
@@ -0,0 +1,27 @@
|
|
1
|
+
//Written using Nila. Visit http://adhithyan15.github.io/nila
|
2
|
+
(function() {
|
3
|
+
var _i, _j, _ref1, fruit, fruits, x;
|
4
|
+
|
5
|
+
_ref1 = [1,2,3,4];
|
6
|
+
|
7
|
+
for (_i = 0, _j = _ref1.length; _i < _j; _i += 1) {
|
8
|
+
x = _ref1[_i];
|
9
|
+
console.log(x);
|
10
|
+
}
|
11
|
+
|
12
|
+
for (x = 0, _j = 5; x <= _j; x += 1) {
|
13
|
+
console.log(x);
|
14
|
+
}
|
15
|
+
|
16
|
+
for (x = 0, _j = 5; x < _j; x += 1) {
|
17
|
+
console.log(x);
|
18
|
+
}
|
19
|
+
|
20
|
+
fruits = ['Apple','Banana', 'Mango'];
|
21
|
+
|
22
|
+
for (_i = 0, _j = fruits.length; _i < _j; _i += 1) {
|
23
|
+
fruit = fruits[_i];
|
24
|
+
console.log(fruit);
|
25
|
+
}
|
26
|
+
|
27
|
+
}).call(this);
|
@@ -1,6 +1,6 @@
|
|
1
1
|
//Written using Nila. Visit http://adhithyan15.github.io/nila
|
2
2
|
(function() {
|
3
|
-
var _ref1, first_name, last_name, name_split, parse_name;
|
3
|
+
var _ref1, count, current_val, first_name, last_name, name_split, name_split1, name_split2, next_val, parse_name;
|
4
4
|
|
5
5
|
// This file demonstrates multiple variable initialization
|
6
6
|
|
@@ -18,4 +18,18 @@
|
|
18
18
|
|
19
19
|
console.log(first_name + " " + last_name);
|
20
20
|
|
21
|
+
_ref1 = [0, 1, 1];
|
22
|
+
|
23
|
+
current_val = _ref1[0];
|
24
|
+
|
25
|
+
next_val = _ref1[1];
|
26
|
+
|
27
|
+
count = _ref1[2];
|
28
|
+
|
29
|
+
_ref1 = ["Adhithya Rajasekaran".split((" "),1),"Adhithya Rajasekaran".split(" ",2)];
|
30
|
+
|
31
|
+
name_split1 = _ref1[0];
|
32
|
+
|
33
|
+
name_split2 = _ref1[1];
|
34
|
+
|
21
35
|
}).call(this);
|
data/shark/test_files/times.nila
CHANGED
data/src/nilac.rb
CHANGED
@@ -331,6 +331,8 @@ def compile(input_file_path, *output_file_name)
|
|
331
331
|
|
332
332
|
test_string = string_extract[0..closed_curly_brace_index[0]]
|
333
333
|
|
334
|
+
puts test_string
|
335
|
+
|
334
336
|
original_string = test_string.dup
|
335
337
|
|
336
338
|
if test_string.include?("{")
|
@@ -604,6 +606,50 @@ def compile(input_file_path, *output_file_name)
|
|
604
606
|
|
605
607
|
def compile_parallel_assignment(input_file_contents, temporary_nila_file)
|
606
608
|
|
609
|
+
def arrayify_right_side(input_string)
|
610
|
+
|
611
|
+
javascript_regexp = /(if |while |for |function |function\()/
|
612
|
+
|
613
|
+
if input_string.include?("=") and input_string.index(javascript_regexp) == nil and input_string.strip[0..3] != "_ref" and !input_string.split("=")[1].include?("[")
|
614
|
+
|
615
|
+
modified_input_string = input_string.dup
|
616
|
+
|
617
|
+
right_side = input_string.split("=")[1]
|
618
|
+
|
619
|
+
if right_side.include?(",")
|
620
|
+
|
621
|
+
splits = right_side.split(",")
|
622
|
+
|
623
|
+
replacement_string = []
|
624
|
+
|
625
|
+
splits.each do |str|
|
626
|
+
|
627
|
+
unless str.include?(")") and !str.include?("(")
|
628
|
+
|
629
|
+
replacement_string << str
|
630
|
+
|
631
|
+
else
|
632
|
+
|
633
|
+
replacement_string[-1] = replacement_string[-1]+ "," +str
|
634
|
+
|
635
|
+
end
|
636
|
+
|
637
|
+
end
|
638
|
+
|
639
|
+
replacement_string = " [#{replacement_string.join(",").strip}]\n"
|
640
|
+
|
641
|
+
input_string = input_string.sub(right_side,replacement_string)
|
642
|
+
|
643
|
+
end
|
644
|
+
|
645
|
+
end
|
646
|
+
|
647
|
+
return input_string
|
648
|
+
|
649
|
+
end
|
650
|
+
|
651
|
+
input_file_contents = input_file_contents.collect {|element| arrayify_right_side(element)}
|
652
|
+
|
607
653
|
possible_variable_lines = input_file_contents.reject { |element| !element.include? "=" }
|
608
654
|
|
609
655
|
possible_parallel_assignment = possible_variable_lines.reject { |element| !element.split("=")[0].include? "," }
|
@@ -796,8 +842,24 @@ def compile(input_file_path, *output_file_name)
|
|
796
842
|
|
797
843
|
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
798
844
|
|
845
|
+
for_loop_variables = []
|
846
|
+
|
847
|
+
for_loop_statements = line_by_line_contents.reject {|line| !line.include?("for")}
|
848
|
+
|
849
|
+
for_loop_statements.each do |statement|
|
850
|
+
|
851
|
+
varis = statement.split("for (")[1].split(";",2)[0].split(",")
|
852
|
+
|
853
|
+
for_loop_variables << varis.collect {|vari| vari.strip.split("=")[0].strip}
|
854
|
+
|
855
|
+
for_loop_variables = for_loop_variables.flatten
|
856
|
+
|
857
|
+
end
|
858
|
+
|
799
859
|
variables += loop_variables
|
800
860
|
|
861
|
+
variables += for_loop_variables
|
862
|
+
|
801
863
|
variables = variables.flatten
|
802
864
|
|
803
865
|
if variables.length > 0
|
@@ -1898,7 +1960,8 @@ def compile(input_file_path, *output_file_name)
|
|
1898
1960
|
|
1899
1961
|
"p" => "console.log",
|
1900
1962
|
|
1901
|
-
"print" => "process.stdout.write"
|
1963
|
+
"print" => "process.stdout.write",
|
1964
|
+
|
1902
1965
|
}
|
1903
1966
|
|
1904
1967
|
function_map = function_map_replacements.keys
|
@@ -1923,6 +1986,46 @@ def compile(input_file_path, *output_file_name)
|
|
1923
1986
|
|
1924
1987
|
end
|
1925
1988
|
|
1989
|
+
def compile_ruby_methods(input_file_contents)
|
1990
|
+
|
1991
|
+
# These are some interesting methods that we really miss in Javascript.
|
1992
|
+
# So we have made these methods available
|
1993
|
+
|
1994
|
+
method_map_replacement = {
|
1995
|
+
|
1996
|
+
".split" => ".split(\" \")",
|
1997
|
+
|
1998
|
+
".strip" => ".replace(/^\s+|\s+$/g,'')",
|
1999
|
+
|
2000
|
+
".lstrip" => ".replace(/^\s+/g,\"\")",
|
2001
|
+
|
2002
|
+
".rstrip" => ".replace(/\s+$/g,\"\")"
|
2003
|
+
}
|
2004
|
+
|
2005
|
+
method_map = method_map_replacement.keys
|
2006
|
+
|
2007
|
+
method_map_regex = method_map.collect {|name| name.gsub(".","\\.")}
|
2008
|
+
|
2009
|
+
method_map_regex = Regexp.new(method_map_regex.join("|"))
|
2010
|
+
|
2011
|
+
modified_file_contents = input_file_contents.clone
|
2012
|
+
|
2013
|
+
input_file_contents.each_with_index do |line, index|
|
2014
|
+
|
2015
|
+
if line.match(method_map_regex)
|
2016
|
+
|
2017
|
+
unless method_match.include?(line+"(")
|
2018
|
+
|
2019
|
+
puts line
|
2020
|
+
|
2021
|
+
end
|
2022
|
+
|
2023
|
+
end
|
2024
|
+
|
2025
|
+
end
|
2026
|
+
|
2027
|
+
end
|
2028
|
+
|
1926
2029
|
def compile_whitespace_delimited_functions(input_file_contents, function_names, temporary_nila_file)
|
1927
2030
|
|
1928
2031
|
def extract(input_string, pattern_start, pattern_end)
|
@@ -2711,6 +2814,322 @@ def compile(input_file_path, *output_file_name)
|
|
2711
2814
|
|
2712
2815
|
end
|
2713
2816
|
|
2817
|
+
def compile_regular_for(input_file_contents, temporary_nila_file)
|
2818
|
+
|
2819
|
+
def convert_string_to_array(input_string, temporary_nila_file)
|
2820
|
+
|
2821
|
+
file_id = open(temporary_nila_file, 'w')
|
2822
|
+
|
2823
|
+
file_id.write(input_string)
|
2824
|
+
|
2825
|
+
file_id.close()
|
2826
|
+
|
2827
|
+
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
2828
|
+
|
2829
|
+
return line_by_line_contents
|
2830
|
+
|
2831
|
+
end
|
2832
|
+
|
2833
|
+
def extract_for_blocks(for_statement_indexes, input_file_contents)
|
2834
|
+
|
2835
|
+
possible_for_blocks = []
|
2836
|
+
|
2837
|
+
for_block_counter = 0
|
2838
|
+
|
2839
|
+
extracted_blocks = []
|
2840
|
+
|
2841
|
+
controlregexp = /(if |while |def |for )/
|
2842
|
+
|
2843
|
+
rejectionregexp = /( if | while )/
|
2844
|
+
|
2845
|
+
for x in 0...for_statement_indexes.length-1
|
2846
|
+
|
2847
|
+
possible_for_blocks << input_file_contents[for_statement_indexes[x]..for_statement_indexes[x+1]]
|
2848
|
+
|
2849
|
+
end
|
2850
|
+
|
2851
|
+
end_counter = 0
|
2852
|
+
|
2853
|
+
end_index = []
|
2854
|
+
|
2855
|
+
current_block = []
|
2856
|
+
|
2857
|
+
possible_for_blocks.each_with_index do |block|
|
2858
|
+
|
2859
|
+
current_block += block
|
2860
|
+
|
2861
|
+
current_block.each_with_index do |line, index|
|
2862
|
+
|
2863
|
+
if line.strip.eql? "end"
|
2864
|
+
|
2865
|
+
end_counter += 1
|
2866
|
+
|
2867
|
+
end_index << index
|
2868
|
+
|
2869
|
+
end
|
2870
|
+
|
2871
|
+
end
|
2872
|
+
|
2873
|
+
if end_counter > 0
|
2874
|
+
|
2875
|
+
until end_index.empty?
|
2876
|
+
|
2877
|
+
array_extract = current_block[0..end_index[0]].reverse
|
2878
|
+
|
2879
|
+
index_counter = 0
|
2880
|
+
|
2881
|
+
array_extract.each_with_index do |line|
|
2882
|
+
|
2883
|
+
break if (line.lstrip.index(controlregexp) != nil and line.lstrip.index(rejectionregexp).nil?)
|
2884
|
+
|
2885
|
+
index_counter += 1
|
2886
|
+
|
2887
|
+
end
|
2888
|
+
|
2889
|
+
block_extract = array_extract[0..index_counter].reverse
|
2890
|
+
|
2891
|
+
extracted_blocks << block_extract
|
2892
|
+
|
2893
|
+
block_start = current_block.index(block_extract[0])
|
2894
|
+
|
2895
|
+
block_end = current_block.index(block_extract[-1])
|
2896
|
+
|
2897
|
+
current_block[block_start..block_end] = "--forblock#{for_block_counter}"
|
2898
|
+
|
2899
|
+
for_block_counter += 1
|
2900
|
+
|
2901
|
+
end_counter = 0
|
2902
|
+
|
2903
|
+
end_index = []
|
2904
|
+
|
2905
|
+
current_block.each_with_index do |line, index|
|
2906
|
+
|
2907
|
+
if line.strip.eql? "end"
|
2908
|
+
|
2909
|
+
end_counter += 1
|
2910
|
+
|
2911
|
+
end_index << index
|
2912
|
+
|
2913
|
+
end
|
2914
|
+
|
2915
|
+
end
|
2916
|
+
|
2917
|
+
end
|
2918
|
+
|
2919
|
+
end
|
2920
|
+
|
2921
|
+
end
|
2922
|
+
|
2923
|
+
return current_block, extracted_blocks
|
2924
|
+
|
2925
|
+
end
|
2926
|
+
|
2927
|
+
def compile_for_syntax(input_block)
|
2928
|
+
|
2929
|
+
def compile_condition(input_condition, input_block)
|
2930
|
+
|
2931
|
+
variable,array_name = input_condition.split("in")
|
2932
|
+
|
2933
|
+
if array_name.strip.include?("[") and array_name.strip.include?("]")
|
2934
|
+
|
2935
|
+
replacement_array = "_ref1 = #{array_name.strip}\n\n"
|
2936
|
+
|
2937
|
+
replacement_string = "#{variable.strip} = _ref1[_i];\n\n"
|
2938
|
+
|
2939
|
+
input_block = [replacement_array] + input_block.insert(1,replacement_string)
|
2940
|
+
|
2941
|
+
input_block[1] = "for (_i = 0, _j = _ref1.length; _i < _j; _i += 1) {\n\n"
|
2942
|
+
|
2943
|
+
elsif array_name.strip.include?("..")
|
2944
|
+
|
2945
|
+
array_type = if array_name.strip.include?("...") then 0 else 1 end
|
2946
|
+
|
2947
|
+
if array_type == 0
|
2948
|
+
|
2949
|
+
num1,num2 = array_name.strip.split("...")
|
2950
|
+
|
2951
|
+
input_block[0] = "for (#{variable.strip} = #{num1}, _j = #{num2}; #{variable.strip} <= _j; #{variable.strip} += 1) {\n\n"
|
2952
|
+
|
2953
|
+
else
|
2954
|
+
|
2955
|
+
num1,num2 = array_name.strip.split("..")
|
2956
|
+
|
2957
|
+
input_block[0] = "for (#{variable.strip} = #{num1}, _j = #{num2}; #{variable.strip} < _j; #{variable.strip} += 1) {\n\n"
|
2958
|
+
|
2959
|
+
end
|
2960
|
+
|
2961
|
+
else
|
2962
|
+
|
2963
|
+
input_block[0] = "for (_i = 0, _j = #{array_name.strip}.length; _i < _j; _i += 1) {\n\n"
|
2964
|
+
|
2965
|
+
input_block = input_block.insert(1,"#{variable.strip} = #{array_name.strip}[_i];\n\n")
|
2966
|
+
|
2967
|
+
end
|
2968
|
+
|
2969
|
+
return input_block
|
2970
|
+
|
2971
|
+
end
|
2972
|
+
|
2973
|
+
modified_input_block = input_block.dup
|
2974
|
+
|
2975
|
+
strings = []
|
2976
|
+
|
2977
|
+
string_counter = 0
|
2978
|
+
|
2979
|
+
input_block.each_with_index do |line, index|
|
2980
|
+
|
2981
|
+
if line.include?("\"")
|
2982
|
+
|
2983
|
+
opening_quotes = line.index("\"")
|
2984
|
+
|
2985
|
+
string_extract = line[opening_quotes..line.index("\"", opening_quotes+1)]
|
2986
|
+
|
2987
|
+
strings << string_extract
|
2988
|
+
|
2989
|
+
modified_input_block[index] = modified_input_block[index].sub(string_extract, "--string{#{string_counter}}")
|
2990
|
+
|
2991
|
+
string_counter += 1
|
2992
|
+
|
2993
|
+
end
|
2994
|
+
|
2995
|
+
end
|
2996
|
+
|
2997
|
+
input_block = modified_input_block
|
2998
|
+
|
2999
|
+
starting_line = input_block[0]
|
3000
|
+
|
3001
|
+
starting_line = starting_line + "\n" if starting_line.lstrip == starting_line
|
3002
|
+
|
3003
|
+
junk, condition = starting_line.split("for")
|
3004
|
+
|
3005
|
+
input_block[-1] = input_block[-1].lstrip.sub("end", "}")
|
3006
|
+
|
3007
|
+
input_block = compile_condition(condition,input_block)
|
3008
|
+
|
3009
|
+
modified_input_block = input_block.dup
|
3010
|
+
|
3011
|
+
input_block.each_with_index do |line, index|
|
3012
|
+
|
3013
|
+
if line.include?("--string{")
|
3014
|
+
|
3015
|
+
junk, remains = line.split("--string{")
|
3016
|
+
|
3017
|
+
string_index, junk = remains.split("}")
|
3018
|
+
|
3019
|
+
modified_input_block[index] = modified_input_block[index].sub("--string{#{string_index.strip}}", strings[string_index.strip.to_i])
|
3020
|
+
|
3021
|
+
end
|
3022
|
+
|
3023
|
+
end
|
3024
|
+
|
3025
|
+
return modified_input_block
|
3026
|
+
|
3027
|
+
end
|
3028
|
+
|
3029
|
+
possible_for_statements = input_file_contents.reject { |element| !element.include?("for") }
|
3030
|
+
|
3031
|
+
possible_for_statements = possible_for_statements.reject {|element| element.include?("for (")}
|
3032
|
+
|
3033
|
+
if !possible_for_statements.empty?
|
3034
|
+
|
3035
|
+
for_statement_indexes = []
|
3036
|
+
|
3037
|
+
possible_for_statements.each do |statement|
|
3038
|
+
|
3039
|
+
for_statement_indexes << input_file_contents.dup.each_index.select { |index| input_file_contents[index] == statement }
|
3040
|
+
|
3041
|
+
end
|
3042
|
+
|
3043
|
+
for_statement_indexes = [0] + for_statement_indexes.flatten + [-1]
|
3044
|
+
|
3045
|
+
controlregexp = /(if |def |while )/
|
3046
|
+
|
3047
|
+
modified_input_contents, extracted_statements = extract_for_blocks(for_statement_indexes, input_file_contents.clone)
|
3048
|
+
|
3049
|
+
joined_blocks = extracted_statements.collect { |element| element.join }
|
3050
|
+
|
3051
|
+
for_statements = joined_blocks.reject { |element| element.index(controlregexp) != nil }
|
3052
|
+
|
3053
|
+
rejected_elements = joined_blocks - for_statements
|
3054
|
+
|
3055
|
+
rejected_elements_index = []
|
3056
|
+
|
3057
|
+
rejected_elements.each do |element|
|
3058
|
+
|
3059
|
+
rejected_elements_index << joined_blocks.each_index.select { |index| joined_blocks[index] == element }
|
3060
|
+
|
3061
|
+
end
|
3062
|
+
|
3063
|
+
for_blocks_index = (0...extracted_statements.length).to_a
|
3064
|
+
|
3065
|
+
rejected_elements_index = rejected_elements_index.flatten
|
3066
|
+
|
3067
|
+
for_blocks_index -= rejected_elements_index
|
3068
|
+
|
3069
|
+
modified_for_statements = for_statements.collect { |string| convert_string_to_array(string, temporary_nila_file) }
|
3070
|
+
|
3071
|
+
modified_for_statements = modified_for_statements.collect { |block| compile_for_syntax(block) }.reverse
|
3072
|
+
|
3073
|
+
for_blocks_index = for_blocks_index.collect { |element| "--forblock#{element}" }.reverse
|
3074
|
+
|
3075
|
+
rejected_elements_index = rejected_elements_index.collect { |element| "--forblock#{element}" }.reverse
|
3076
|
+
|
3077
|
+
rejected_elements = rejected_elements.reverse
|
3078
|
+
|
3079
|
+
joined_file_contents = modified_input_contents.join
|
3080
|
+
|
3081
|
+
until for_blocks_index.empty? and rejected_elements_index.empty?
|
3082
|
+
|
3083
|
+
if !for_blocks_index.empty?
|
3084
|
+
|
3085
|
+
if joined_file_contents.include?(for_blocks_index[0])
|
3086
|
+
|
3087
|
+
joined_file_contents = joined_file_contents.sub(for_blocks_index[0], modified_for_statements[0].join)
|
3088
|
+
|
3089
|
+
for_blocks_index.delete_at(0)
|
3090
|
+
|
3091
|
+
modified_for_statements.delete_at(0)
|
3092
|
+
|
3093
|
+
else
|
3094
|
+
|
3095
|
+
joined_file_contents = joined_file_contents.sub(rejected_elements_index[0], rejected_elements[0].join)
|
3096
|
+
|
3097
|
+
rejected_elements_index.delete_at(0)
|
3098
|
+
|
3099
|
+
rejected_elements.delete_at(0)
|
3100
|
+
|
3101
|
+
end
|
3102
|
+
|
3103
|
+
else
|
3104
|
+
|
3105
|
+
joined_file_contents = joined_file_contents.sub(rejected_elements_index[0], rejected_elements[0].join)
|
3106
|
+
|
3107
|
+
rejected_elements_index.delete_at(0)
|
3108
|
+
|
3109
|
+
rejected_elements.delete_at(0)
|
3110
|
+
|
3111
|
+
end
|
3112
|
+
|
3113
|
+
end
|
3114
|
+
|
3115
|
+
else
|
3116
|
+
|
3117
|
+
joined_file_contents = input_file_contents.join
|
3118
|
+
|
3119
|
+
end
|
3120
|
+
|
3121
|
+
file_id = open(temporary_nila_file, 'w')
|
3122
|
+
|
3123
|
+
file_id.write(joined_file_contents)
|
3124
|
+
|
3125
|
+
file_id.close()
|
3126
|
+
|
3127
|
+
line_by_line_contents = read_file_line_by_line(temporary_nila_file)
|
3128
|
+
|
3129
|
+
return line_by_line_contents
|
3130
|
+
|
3131
|
+
end
|
3132
|
+
|
2714
3133
|
def compile_loop_keyword(input_file_contents,temporary_nila_file)
|
2715
3134
|
|
2716
3135
|
def convert_string_to_array(input_string, temporary_nila_file)
|
@@ -3049,12 +3468,16 @@ def compile(input_file_path, *output_file_name)
|
|
3049
3468
|
|
3050
3469
|
file_contents = compile_ternary_if(input_file_contents)
|
3051
3470
|
|
3471
|
+
puts file_contents
|
3472
|
+
|
3052
3473
|
file_contents, rejected_lines = ignore_statement_modifiers(file_contents)
|
3053
3474
|
|
3054
3475
|
file_contents = replace_unless_until(file_contents)
|
3055
3476
|
|
3056
3477
|
file_contents = compile_regular_if(file_contents, temporary_nila_file)
|
3057
3478
|
|
3479
|
+
file_contents = compile_regular_for(file_contents, temporary_nila_file)
|
3480
|
+
|
3058
3481
|
file_contents = compile_regular_while(file_contents, temporary_nila_file)
|
3059
3482
|
|
3060
3483
|
file_contents = compile_loop_keyword(file_contents,temporary_nila_file)
|
@@ -3081,7 +3504,7 @@ def compile(input_file_path, *output_file_name)
|
|
3081
3504
|
|
3082
3505
|
end
|
3083
3506
|
|
3084
|
-
def extract_variable_names(input_file_contents
|
3507
|
+
def extract_variable_names(input_file_contents)
|
3085
3508
|
|
3086
3509
|
variables = []
|
3087
3510
|
|
@@ -3167,9 +3590,9 @@ def compile(input_file_path, *output_file_name)
|
|
3167
3590
|
|
3168
3591
|
file_extract = input_file_contents[0..index_counter]
|
3169
3592
|
|
3170
|
-
file_variables = extract_variable_names(file_extract
|
3593
|
+
file_variables = extract_variable_names(file_extract)
|
3171
3594
|
|
3172
|
-
block_variables = extract_variable_names(loop_extract
|
3595
|
+
block_variables = extract_variable_names(loop_extract)
|
3173
3596
|
|
3174
3597
|
var_need_of_declaration = file_variables-block_variables-["_i","_j"]
|
3175
3598
|
|
@@ -3985,10 +4408,6 @@ def compile(input_file_path, *output_file_name)
|
|
3985
4408
|
|
3986
4409
|
file_contents = compile_conditional_structures(file_contents, temp_file)
|
3987
4410
|
|
3988
|
-
file_contents = compile_arrays(file_contents, temp_file)
|
3989
|
-
|
3990
|
-
file_contents = compile_strings(file_contents)
|
3991
|
-
|
3992
4411
|
file_contents = compile_integers(file_contents)
|
3993
4412
|
|
3994
4413
|
file_contents = compile_default_values(file_contents, temp_file)
|
@@ -3999,12 +4418,18 @@ def compile(input_file_path, *output_file_name)
|
|
3999
4418
|
|
4000
4419
|
file_contents = compile_parallel_assignment(file_contents, temp_file)
|
4001
4420
|
|
4421
|
+
file_contents = compile_arrays(file_contents, temp_file)
|
4422
|
+
|
4423
|
+
file_contents = compile_strings(file_contents)
|
4424
|
+
|
4002
4425
|
file_contents, function_names = compile_named_functions(file_contents, named_functions, nested_functions, temp_file)
|
4003
4426
|
|
4004
4427
|
list_of_variables, file_contents = get_variables(file_contents, temp_file,loop_vars)
|
4005
4428
|
|
4006
4429
|
file_contents, ruby_functions = compile_custom_function_map(file_contents)
|
4007
4430
|
|
4431
|
+
#compile_ruby_methods(file_contents)
|
4432
|
+
|
4008
4433
|
function_names << ruby_functions
|
4009
4434
|
|
4010
4435
|
list_of_variables += loop_vars
|
@@ -4087,7 +4512,7 @@ def find_file_path(input_path, file_extension)
|
|
4087
4512
|
|
4088
4513
|
end
|
4089
4514
|
|
4090
|
-
nilac_version = "0.0.4.3.
|
4515
|
+
nilac_version = "0.0.4.3.3"
|
4091
4516
|
|
4092
4517
|
opts = Slop.parse do
|
4093
4518
|
on :c, :compile=, 'Compile Nila File', as:Array, delimiter:":"
|
metadata
CHANGED
@@ -1,46 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nilac
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.4.3.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.4.3.3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Adhithya Rajasekaran
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-08-
|
11
|
+
date: 2013-08-22 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: shark
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: slop
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
description: Nilac is the official compiler of Nila language
|
@@ -73,6 +68,7 @@ files:
|
|
73
68
|
- shark/features/multiline_array.feature
|
74
69
|
- shark/features/multiple_variable_initialization.feature
|
75
70
|
- shark/features/numbers.feature
|
71
|
+
- shark/features/regular_for.feature
|
76
72
|
- shark/features/regular_if.feature
|
77
73
|
- shark/features/regular_while.feature
|
78
74
|
- shark/features/ruby_operators.feature
|
@@ -84,6 +80,7 @@ files:
|
|
84
80
|
- shark/test_files/array_string_indexing.nila
|
85
81
|
- shark/test_files/correct.js
|
86
82
|
- shark/test_files/correct_default_parameters.js
|
83
|
+
- shark/test_files/correct_for.js
|
87
84
|
- shark/test_files/correct_hashes.js
|
88
85
|
- shark/test_files/correct_heredoc.js
|
89
86
|
- shark/test_files/correct_if_then_else.js
|
@@ -116,6 +113,7 @@ files:
|
|
116
113
|
- shark/test_files/numbers.nila
|
117
114
|
- shark/test_files/operators.nila
|
118
115
|
- shark/test_files/perfect.js
|
116
|
+
- shark/test_files/regular_for.nila
|
119
117
|
- shark/test_files/regular_if.nila
|
120
118
|
- shark/test_files/regular_while.nila
|
121
119
|
- shark/test_files/simple.nila
|
@@ -128,26 +126,26 @@ files:
|
|
128
126
|
- src/nilac.rb
|
129
127
|
homepage: http://adhithyan15.github.com/nila
|
130
128
|
licenses: []
|
129
|
+
metadata: {}
|
131
130
|
post_install_message:
|
132
131
|
rdoc_options: []
|
133
132
|
require_paths:
|
134
133
|
- lib
|
135
134
|
required_ruby_version: !ruby/object:Gem::Requirement
|
136
|
-
none: false
|
137
135
|
requirements:
|
138
|
-
- -
|
136
|
+
- - '>='
|
139
137
|
- !ruby/object:Gem::Version
|
140
138
|
version: '0'
|
141
139
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
142
|
-
none: false
|
143
140
|
requirements:
|
144
|
-
- -
|
141
|
+
- - '>='
|
145
142
|
- !ruby/object:Gem::Version
|
146
143
|
version: '0'
|
147
144
|
requirements: []
|
148
145
|
rubyforge_project:
|
149
|
-
rubygems_version:
|
146
|
+
rubygems_version: 2.0.2
|
150
147
|
signing_key:
|
151
|
-
specification_version:
|
148
|
+
specification_version: 4
|
152
149
|
summary: Nilac compiles Nila files into line for line Javascript.
|
153
150
|
test_files: []
|
151
|
+
has_rdoc:
|