1
1
#! /usr/bin/env lua
2
2
3
- local metalua = false
4
-
5
- if arg [1 ] == " metalua" then metalua = true end
6
-
7
- local parser
8
- if metalua then
9
- parser = require " metalua.compiler" .new ()
10
- else
11
- parser = require " lua-parser.parser"
12
- end
3
+ local parser = require " lua-parser.parser"
13
4
local pp = require " lua-parser.pp"
14
5
15
6
-- expected result, result, subject
@@ -18,12 +9,7 @@ local e, r, s
18
9
local filename = " test.lua"
19
10
20
11
local function parse (s )
21
- local t ,m
22
- if metalua then
23
- t = parser :src_to_ast (s )
24
- else
25
- t ,m = parser .parse (s ,filename )
26
- end
12
+ local t ,m = parser .parse (s ,filename )
27
13
local r
28
14
if not t then
29
15
r = m
@@ -352,8 +338,6 @@ assert(r == e)
352
338
353
339
-- syntax error
354
340
355
- if not metalua then
356
-
357
341
-- floating points
358
342
359
343
s = [=[
@@ -480,8 +464,6 @@ test.lua:4:1: syntax error, unclosed long string
480
464
r = parse (s )
481
465
assert (r == e )
482
466
483
- end
484
-
485
467
print (" > testing parser..." )
486
468
487
469
-- syntax ok
@@ -670,7 +652,7 @@ repeat
670
652
until 1
671
653
]=]
672
654
e = [=[
673
- { `Repeat{ { `If{ `Op{ "lt ", `Number "1 ", `Number "2 " }, { `Break } } }, `Number "1" } }
655
+ { `Repeat{ { `If{ `Op{ "gt ", `Number "2 ", `Number "1 " }, { `Break } } }, `Number "1" } }
674
656
]=]
675
657
676
658
r = parse (s )
@@ -721,17 +703,13 @@ assert(r == e)
721
703
722
704
-- empty files
723
705
724
- if not metalua then
725
-
726
706
s = [=[
727
707
;
728
708
]=]
729
709
e = [=[
730
710
{ }
731
711
]=]
732
712
733
- end
734
-
735
713
r = parse (s )
736
714
assert (r == e )
737
715
@@ -823,8 +801,6 @@ assert(r == e)
823
801
824
802
-- goto
825
803
826
- if not metalua then
827
-
828
804
s = [=[
829
805
goto label
830
806
:: label :: return
@@ -913,8 +889,6 @@ e = [=[
913
889
r = parse (s )
914
890
assert (r == e )
915
891
916
- end
917
-
918
892
-- if-else
919
893
920
894
s = [=[
@@ -969,8 +943,6 @@ e = [=[
969
943
r = parse (s )
970
944
assert (r == e )
971
945
972
- if not metalua then
973
-
974
946
s = [=[
975
947
if a then return a
976
948
elseif b then return
@@ -984,8 +956,6 @@ e = [=[
984
956
r = parse (s )
985
957
assert (r == e )
986
958
987
- end
988
-
989
959
s = [=[
990
960
if a then
991
961
return
@@ -1001,8 +971,6 @@ assert(r == e)
1001
971
1002
972
-- labels
1003
973
1004
- if not metalua then
1005
-
1006
974
s = [=[
1007
975
::label::
1008
976
do ::label:: end
@@ -1027,8 +995,6 @@ e = [=[
1027
995
r = parse (s )
1028
996
assert (r == e )
1029
997
1030
- end
1031
-
1032
998
-- locals
1033
999
1034
1000
s = [=[
@@ -1107,7 +1073,7 @@ s = [=[
1107
1073
relational = 1 < 2 >= 3 == 4 ~= 5 < 6 <= 7
1108
1074
]=]
1109
1075
e = [=[
1110
- { `Set{ { `Id "relational" }, { `Op{ "le", `Op{ "lt", `Op{ "not ", `Op{ "eq", `Op{ "eq ", `Op{ "le ", `Number "3 ", `Op{ "lt", ` Number "1" , `Number "2 " } } , `Number "4" }, `Number "5" } }, `Number "6" }, `Number "7" } } } }
1076
+ { `Set{ { `Id "relational" }, { `Op{ "le", `Op{ "lt", `Op{ "ne ", `Op{ "eq", `Op{ "ge ", `Op{ "lt ", `Number "1 ", `Number "2" } , `Number "3 " }, `Number "4" }, `Number "5" }, `Number "6" }, `Number "7" } } } }
1111
1077
]=]
1112
1078
1113
1079
r = parse (s )
@@ -1357,8 +1323,6 @@ assert(r == e)
1357
1323
1358
1324
-- syntax error
1359
1325
1360
- if not metalua then
1361
-
1362
1326
-- anonymous functions
1363
1327
1364
1328
s = [=[
@@ -1860,10 +1824,6 @@ test.lua:3:3: syntax error, expected 'do' after the condition
1860
1824
r = parse (s )
1861
1825
assert (r == e )
1862
1826
1863
- end
1864
-
1865
- if not metalua then
1866
-
1867
1827
print (" > testing more syntax errors..." )
1868
1828
1869
1829
-- ErrExtra
@@ -3770,6 +3730,29 @@ test.lua:6:1: syntax error, unclosed long string
3770
3730
r = parse (s )
3771
3731
assert (r == e )
3772
3732
3733
+ print (" > testing issues..." )
3734
+
3735
+ -- issue #12
3736
+ s = [===[
3737
+ gl_f_ct = 0
3738
+
3739
+ function f()
3740
+ if gl_f_ct <= 0 then
3741
+ gl_f_ct=1
3742
+ return 1000
3743
+ end
3744
+ return -1000
3773
3745
end
3774
3746
3747
+ print( f("1st call") > f("2nd call") )
3748
+ gl_f_ct = 0
3749
+ print( f("1st call") < f("2nd call") )
3750
+ ]===]
3751
+ e = [=[
3752
+ { `Set{ { `Id "gl_f_ct" }, { `Number "0" } }, `Set{ { `Id "f" }, { `Function{ { }, { `If{ `Op{ "le", `Id "gl_f_ct", `Number "0" }, { `Set{ { `Id "gl_f_ct" }, { `Number "1" } }, `Return{ `Number "1000" } } }, `Return{ `Op{ "unm", `Number "1000" } } } } } }, `Call{ `Id "print", `Op{ "gt", `Call{ `Id "f", `String "1st call" }, `Call{ `Id "f", `String "2nd call" } } }, `Set{ { `Id "gl_f_ct" }, { `Number "0" } }, `Call{ `Id "print", `Op{ "lt", `Call{ `Id "f", `String "1st call" }, `Call{ `Id "f", `String "2nd call" } } } }
3753
+ ]=]
3754
+
3755
+ r = parse (s )
3756
+ assert (r == e )
3757
+
3775
3758
print (" OK" )
0 commit comments