Compare commits
866 Commits
crypto_mod
...
v0.1.1
| Author | SHA1 | Date | |
|---|---|---|---|
| 7076a6f3ed | |||
|
a24e44fbf3
|
|||
|
f3972a9ca2
|
|||
|
f323e3cb57
|
|||
|
426ec932ec
|
|||
|
3aa31a9dfa
|
|||
|
f0aba06f4f
|
|||
|
18b96064e4
|
|||
|
91887c0185
|
|||
|
3b9d91f186
|
|||
|
0fb44bb1ae
|
|||
|
|
d2335c86b2 | ||
|
|
843c2d67d9 | ||
|
|
33b0f20573 | ||
|
|
d96dcdf1e0 | ||
|
a09c6b3fad
|
|||
|
4d150c2fe3
|
|||
|
c94de60c29
|
|||
|
376b9510a9
|
|||
|
ad49b81b33
|
|||
|
4afcbc0815
|
|||
|
171456beb4
|
|||
|
204060fa9d
|
|||
|
616b2eeae3
|
|||
|
563c10bd20
|
|||
|
2e695a9d35
|
|||
|
2ef2b6265c
|
|||
|
a6d89da16b
|
|||
|
48d5088265
|
|||
|
3dcc908788
|
|||
|
4881ddf6de
|
|||
|
312fb97db6
|
|||
|
0a2f1133d5
|
|||
|
647454b98d
|
|||
|
72782b147a
|
|||
|
edb62ed692
|
|||
|
8b2086402e
|
|||
|
8ee2dece06
|
|||
|
dcf37af75e
|
|||
|
6d964d6113
|
|||
|
3045bd2d88
|
|||
|
19d0628afc
|
|||
|
59811ac742
|
|||
|
e40dc34026
|
|||
|
c76ae15a7b
|
|||
|
a1f1d50d25
|
|||
|
ca51e2a5da
|
|||
|
bd24aa0605
|
|||
|
690213e0c7
|
|||
|
0be38392bd
|
|||
|
bffd44a7b4
|
|||
|
173bac16ad
|
|||
|
b3eb2d0139
|
|||
|
050a637e88
|
|||
|
8d0c128d22
|
|||
|
c7b6e76d0d
|
|||
|
1a91fedb1f
|
|||
|
fffce10ba8
|
|||
|
ace4d56d7f
|
|||
|
8985044054
|
|||
|
77150e9d26
|
|||
|
aff19a98da
|
|||
|
010bdd7331
|
|||
|
0bef248298
|
|||
|
d09a33da55
|
|||
|
673796d878
|
|||
| ea948216ff | |||
|
4723128b74
|
|||
|
da2e74ba08
|
|||
|
0ef6b449c6
|
|||
|
815b1481fc
|
|||
|
5c824ec67d
|
|||
|
9aa192db69
|
|||
|
fdba2c0a5c
|
|||
|
6c277c1eca
|
|||
|
0327c3130f
|
|||
|
78c416c6b8
|
|||
|
cbe4f29909
|
|||
|
a00d30afa2
|
|||
|
65aaf7be67
|
|||
|
43a1f135cc
|
|||
|
343c25ca77
|
|||
|
46458d1e1b
|
|||
|
543191c1b2
|
|||
|
6c449dbdbf
|
|||
|
fa5c2e1f5e
|
|||
|
dbd39be5ed
|
|||
|
a5af1d473f
|
|||
|
ce851b5df5
|
|||
|
b15d0d33fd
|
|||
|
734710ae78
|
|||
|
d0995a4239
|
|||
|
24c75975e3
|
|||
|
9cc0f203ca
|
|||
|
5948c3a5b6
|
|||
|
075f707a0a
|
|||
|
3715b1b53d
|
|||
|
4267bb2f26
|
|||
|
384b057c93
|
|||
|
101453950e
|
|||
|
ba43269b80
|
|||
|
bb20f04f3c
|
|||
|
c3184eb3ea
|
|||
|
84b5fd2717
|
|||
|
045ebe92ae
|
|||
|
9fe4aa653f
|
|||
|
b5cdbf4721
|
|||
|
d57d6caf2d
|
|||
|
d0840d7eea
|
|||
|
625a386b69
|
|||
|
3184b95a09
|
|||
|
5f90f3e8e1
|
|||
|
3689a0239a
|
|||
|
1f7e14fd7a
|
|||
|
519f5050b7
|
|||
|
cd9ff68ae9
|
|||
|
984429bc55
|
|||
|
53199cac4e
|
|||
|
feba01eb49
|
|||
|
b1b78433dd
|
|||
|
fd278b1f47
|
|||
|
a3a2c8b619
|
|||
|
ba1c840009
|
|||
|
3530e6ea09
|
|||
|
1bf5c3a8a2
|
|||
|
c206011c95
|
|||
|
8847d645c0
|
|||
|
1c0ba22c48
|
|||
|
7732a239ff
|
|||
|
5e166492d5
|
|||
|
a5fb8ff8be
|
|||
|
d924d41a7a
|
|||
|
a6f7c6d847
|
|||
|
02471b4ccb
|
|||
|
28e18bcb4b
|
|||
|
2d50a64cac
|
|||
|
4d1c246a65
|
|||
|
1f5afc9d51
|
|||
|
675f3596a1
|
|||
|
26333360b0
|
|||
|
1175219ad4
|
|||
|
b319e11c09
|
|||
|
5c176207e1
|
|||
|
5cc4a5e48d
|
|||
|
e654e42b07
|
|||
|
5b2f300fe4
|
|||
|
d8db20e9bd
|
|||
|
1f78547ca2
|
|||
|
ddd46a4e80
|
|||
|
3cca5faa76
|
|||
|
0f4a666b89
|
|||
|
9fd61a207b
|
|||
|
1acbd21caf
|
|||
|
a25b163af6
|
|||
|
77c57674e8
|
|||
|
4cc7940216
|
|||
|
55acf8111f
|
|||
|
48ccd7fef0
|
|||
|
e8c675bd8e
|
|||
|
7203492763
|
|||
|
8aed5af238
|
|||
|
f2116a6461
|
|||
|
5d9b73ba4e
|
|||
|
3cc347f25f
|
|||
|
27e3b85b30
|
|||
|
5256dda922
|
|||
|
ea5499f8b3
|
|||
|
5e7d5957e2
|
|||
|
d3d3dff673
|
|||
|
c4416ef631
|
|||
|
76880ae4e2
|
|||
|
a2fb0b9ae5
|
|||
|
07bd3ceec3
|
|||
|
0c8ca53f70
|
|||
|
03c37c58bb
|
|||
|
17e0fb4653
|
|||
|
d3ae1c1bf4
|
|||
|
cedc288f67
|
|||
|
0a6b5a6f42
|
|||
|
7b6245572f
|
|||
|
9d84c558c4
|
|||
|
c4b63a3018
|
|||
|
23900f2aed
|
|||
|
b36510943d
|
|||
|
ab8bf48485
|
|||
|
90b2da7c56
|
|||
|
e6b7f1be2c
|
|||
|
03fc167be1
|
|||
|
2f3ce65289
|
|||
|
73c1a814f5
|
|||
|
8f681d1605
|
|||
|
5a0e4667fa
|
|||
|
508e8965a9
|
|||
|
7d606cbf1d
|
|||
|
3dfa4232ba
|
|||
|
7c37451520
|
|||
|
1829eff323
|
|||
|
798fd7d3b2
|
|||
|
70676cb0d5
|
|||
|
d76441ad4c
|
|||
|
186e5887f6
|
|||
|
bbcd99789d
|
|||
|
1d6822c1e2
|
|||
|
a726ab795a
|
|||
|
5c1e0f0cce
|
|||
|
4d8d92092e
|
|||
|
1156519af6
|
|||
|
62c315da9e
|
|||
|
10516fb655
|
|||
|
f09d4def2d
|
|||
|
d6fca929ea
|
|||
|
6593252bce
|
|||
|
d26bc99b68
|
|||
|
00c502c11b
|
|||
|
9f4f6298c2
|
|||
|
2bda002259
|
|||
|
eef5ee370d
|
|||
|
8ab3919688
|
|||
|
58015f2a20
|
|||
|
d72774f0f4
|
|||
|
407fb09e8f
|
|||
|
a7606864fa
|
|||
|
cb455c3c73
|
|||
|
1c5982e764
|
|||
|
3be46532dd
|
|||
|
c443a38fec
|
|||
|
48a38dc1af
|
|||
|
7c8259057b
|
|||
|
9b1ad67580
|
|||
|
deda6b4b15
|
|||
|
5b0b965199
|
|||
|
555234e381
|
|||
|
aa64a5eeb2
|
|||
|
8f18ebf884
|
|||
|
c9203b6c91
|
|||
|
13ea9825b8
|
|||
|
8331d36869
|
|||
|
ed8f3f341e
|
|||
|
3f1d429d5f
|
|||
|
18e77b9754
|
|||
|
d819820798
|
|||
|
e794ffd97b
|
|||
|
16c6b8d970
|
|||
|
a0405f2267
|
|||
|
80abccc3ad
|
|||
|
291b6f0607
|
|||
|
0e8a2372dd
|
|||
|
929d7b83fe
|
|||
|
0b04e0f7c5
|
|||
|
407bcf5a29
|
|||
|
f8a47d2838
|
|||
|
2aa25f66d5
|
|||
|
58618a4d27
|
|||
|
9a82298451
|
|||
|
0268a95169
|
|||
| 227e1d2be5 | |||
|
bd22425b46
|
|||
|
9d97eb228a
|
|||
|
b668d0a897
|
|||
|
102e8447a1
|
|||
|
5f57ba54a4
|
|||
|
ec580ddf8c
|
|||
|
395f6c446c
|
|||
|
549b2ff3b4
|
|||
|
e5d7977995
|
|||
|
|
6b18e204cd | ||
|
a5da714d61
|
|||
|
88d382b76b
|
|||
|
2894c55dfa
|
|||
|
0b11d59f9f
|
|||
|
07e3a09999
|
|||
|
ba8e9080ef
|
|||
|
ef4f994e8b
|
|||
|
5fddbf8737
|
|||
|
89f19133d5
|
|||
|
eb80dced3e
|
|||
|
f9b518138e
|
|||
|
517dffcbc1
|
|||
|
1b248a17e7
|
|||
|
661158d249
|
|||
|
94e06f3d3a
|
|||
|
9e06322b57
|
|||
|
0f0fc01a96
|
|||
|
c51b3dfa8a
|
|||
|
583f43e1f7
|
|||
|
aea0d1a5ec
|
|||
|
e3ad3eb84b
|
|||
|
98898c16c5
|
|||
|
89d5158d7e
|
|||
|
b302e8c2b2
|
|||
|
a8a1a2cd51
|
|||
|
ee0d189f0a
|
|||
|
cdc0dade2a
|
|||
|
aae526b1d4
|
|||
|
5cc803d07c
|
|||
|
31f48b234b
|
|||
|
4eaf6a7117
|
|||
|
9c426b20cc
|
|||
|
725b60cb88
|
|||
|
0c2b2c9df5
|
|||
|
493fcd0e92
|
|||
|
57c6b3483a
|
|||
|
ab4705518c
|
|||
|
08307c5ad6
|
|||
|
2a4e47e782
|
|||
|
527a6ad689
|
|||
|
95c9fd0f1f
|
|||
|
46250f0cd8
|
|||
|
ee7b1e56ae
|
|||
|
a4b5db4005
|
|||
|
d8f9db8f9a
|
|||
|
65e38a364d
|
|||
|
6b86f4c855
|
|||
|
d6434ba19e
|
|||
|
447910ce2e
|
|||
|
f0e50678e3
|
|||
|
8810a86a2c
|
|||
|
b0165e5702
|
|||
|
77ebce7acf
|
|||
|
c1e30d4c68
|
|||
|
ad3c6e6d7e
|
|||
|
77795bea4c
|
|||
|
598dc9ce51
|
|||
|
d74b182235
|
|||
|
b320d35cf7
|
|||
|
c2b3cc1a2f
|
|||
|
db0bbf713b
|
|||
|
580d1af308
|
|||
|
58b63a9f16
|
|||
|
67f40db553
|
|||
|
1679420f4c
|
|||
|
d34c8ceafb
|
|||
|
bda8316e1b
|
|||
|
1fd161e394
|
|||
|
246b097fad
|
|||
|
7443663dd8
|
|||
|
f6e2b549b6
|
|||
|
72c420cc85
|
|||
|
a501dea661
|
|||
|
25001ae746
|
|||
|
2de455aa01
|
|||
|
95fba30f9b
|
|||
|
a06573408e
|
|||
|
39f698476f
|
|||
|
465336b23b
|
|||
|
a1151d598b
|
|||
|
5765ff3fd6
|
|||
|
3359b99128
|
|||
|
afe978e366
|
|||
|
4d07a10336
|
|||
|
cfc0342a10
|
|||
|
62d8451d12
|
|||
|
5bfa60724a
|
|||
|
fcd4e8d6a6
|
|||
|
72dc44c152
|
|||
|
74f954b852
|
|||
|
5d369ba851
|
|||
|
9880f9963e
|
|||
|
c789b875f4
|
|||
|
1db4fc0515
|
|||
|
dc44ee31b8
|
|||
|
7ec7ade171
|
|||
|
01c210984e
|
|||
|
5eeceb6927
|
|||
|
9acd6fbcb2
|
|||
|
4467ca6dce
|
|||
|
5463da88b0
|
|||
|
8d3b7f303f
|
|||
|
d4d00db458
|
|||
|
8133c3dd6f
|
|||
|
fb50d8de25
|
|||
|
66a7e957c9
|
|||
|
aaef03396c
|
|||
|
45b1d4ed73
|
|||
|
803516cf84
|
|||
|
c6397d2e15
|
|||
|
2fb123872f
|
|||
|
253fe327ef
|
|||
|
629484fcf6
|
|||
|
4f6be2234e
|
|||
|
9b741175f2
|
|||
|
8a87dcbcdc
|
|||
|
3f205c19ce
|
|||
|
a7137316f7
|
|||
|
f5960d57b1
|
|||
|
0f5073f3fb
|
|||
|
41d20eeb28
|
|||
|
f7b779907c
|
|||
|
01f1932230
|
|||
|
47cca096bc
|
|||
|
140bd35f93
|
|||
|
a013cee2d1
|
|||
|
e4dc9f641e
|
|||
|
66b55e35a9
|
|||
|
3fc002be18
|
|||
|
94bd82f251
|
|||
|
874e416d65
|
|||
|
46a3bd85b0
|
|||
|
d76e48c885
|
|||
|
14f958a4b2
|
|||
|
45f4a00b05
|
|||
|
9303517b9e
|
|||
|
5e54233ef8
|
|||
|
04c56c9041
|
|||
|
fbf27a6c4c
|
|||
|
891818d601
|
|||
|
243faf4373
|
|||
|
accde59f9e
|
|||
|
fa295b9437
|
|||
|
a87471e1e3
|
|||
|
9438407ebf
|
|||
|
731706c1a3
|
|||
|
e39bdae5b8
|
|||
|
4f29507c0d
|
|||
|
e75ed7b9a9
|
|||
|
0af594f1ed
|
|||
|
3074b4efaf
|
|||
|
fc95deffa0
|
|||
|
76e76983a3
|
|||
|
ea93c8dba4
|
|||
|
ff6c71db1c
|
|||
|
9d7a542aea
|
|||
|
135e7c9698
|
|||
|
59e2743a60
|
|||
|
98a5fc1af0
|
|||
|
154469f475
|
|||
|
9a41f7195d
|
|||
|
e3122c9f89
|
|||
|
65b178932a
|
|||
|
59e820c768
|
|||
| 3ebd6d62c4 | |||
|
90b5a8797a
|
|||
|
78c6f6a376
|
|||
|
f83d6cc43d
|
|||
|
ab09ba6943
|
|||
|
075d2f0963
|
|||
|
412a70c0c6
|
|||
|
a0d72d067c
|
|||
|
0115b30d01
|
|||
|
1460200919
|
|||
|
24013f4a52
|
|||
|
166b1a2c41
|
|||
|
4eba80b2ba
|
|||
|
7b1ed59f41
|
|||
|
3d23d43040
|
|||
|
b60c1de4cf
|
|||
|
23601fe9c5
|
|||
|
d6751484d0
|
|||
|
d4967da9e4
|
|||
|
c6d95c16d3
|
|||
|
fc3a66315b
|
|||
|
6ca08c9c4a
|
|||
|
55b652c740
|
|||
|
fe898ec7e7
|
|||
|
ff73690111
|
|||
|
c26f8cd777
|
|||
|
128f4bba01
|
|||
|
9934489ed9
|
|||
|
f3d10dd4bc
|
|||
|
de2b355862
|
|||
|
615e75fb8a
|
|||
|
7897f28ebb
|
|||
|
e498bc7646
|
|||
|
a2749000d6
|
|||
|
f71e60f641
|
|||
| cc4a9aa063 | |||
|
c8985032ef
|
|||
|
3e4064f55a
|
|||
|
ac16d5ce57
|
|||
|
df3d00d02c
|
|||
|
051bca470e
|
|||
|
f1d4d80f65
|
|||
|
8aacf7c70e
|
|||
|
0524092539
|
|||
|
d6c5f01905
|
|||
|
e86894f724
|
|||
|
bd4151f426
|
|||
|
a5ee2d75eb
|
|||
|
b7e3ad9f46
|
|||
|
7eba38a633
|
|||
|
4af3220018
|
|||
|
a7b4c6e880
|
|||
|
fa0b487cc0
|
|||
|
efbe191989
|
|||
|
5d3acf74d0
|
|||
|
6927c5c038
|
|||
|
6a74bf9e8b
|
|||
|
ed8dab7870
|
|||
|
ff9e38a480
|
|||
|
bbdc740388
|
|||
|
4db8ec02cd
|
|||
|
f97e2a8294
|
|||
|
2949c8dcfb
|
|||
|
784c705af6
|
|||
|
1c3211e00d
|
|||
|
0278f0a630
|
|||
|
d87ce3ad1d
|
|||
|
2572b9321d
|
|||
|
3f9e3b0664
|
|||
|
9ab896c2e2
|
|||
|
f3f1723104
|
|||
|
0d3cb90d5f
|
|||
|
a5ef118263
|
|||
|
d3e0ffe4bf
|
|||
|
3cc8cfe6a2
|
|||
|
1cebd3af37
|
|||
|
5dde778382
|
|||
|
d65a529d21
|
|||
|
8782b9c25b
|
|||
|
174ecb2a38
|
|||
|
87db6d6dfd
|
|||
|
5878a171e6
|
|||
|
e727453ccf
|
|||
|
7a34716298
|
|||
|
8724cebf71
|
|||
|
ec47190874
|
|||
|
e5fb7d625e
|
|||
|
6f13c347d8
|
|||
|
03cf969c31
|
|||
|
b66515516e
|
|||
|
6293b8f5bf
|
|||
|
c00080e190
|
|||
|
b5eb268ce1
|
|||
|
5f2f9d9c08
|
|||
|
6e7bc74949
|
|||
|
f26095658d
|
|||
|
2db1954779
|
|||
|
550107235c
|
|||
|
369cadfcda
|
|||
|
f72d6c3922
|
|||
|
59fda6d797
|
|||
|
ba0c250911
|
|||
|
08296110fb
|
|||
|
dd774be005
|
|||
|
ae0fde152c
|
|||
|
28a5fa59ad
|
|||
|
514e07c7f3
|
|||
|
f927667d85
|
|||
|
79e4bac7eb
|
|||
|
bd4d146d0a
|
|||
|
241c7d8168
|
|||
|
e6e59d299e
|
|||
|
9884f8288b
|
|||
|
5a6af65cfa
|
|||
|
82998ffd0f
|
|||
|
58103ea5fe
|
|||
|
3a16eced8a
|
|||
|
5504579566
|
|||
|
faca9b7fb2
|
|||
|
94ae7d187b
|
|||
|
ca00cadba7
|
|||
|
8b48786f29
|
|||
|
ecebbb6094
|
|||
|
74b1c196f9
|
|||
|
d4992ff4ba
|
|||
|
1e5538fc67
|
|||
|
58b7ceeae9
|
|||
|
0804407582
|
|||
|
e383536dc4
|
|||
|
9ebc3dc61a
|
|||
|
82e5dc1565
|
|||
|
10d3bfe5e1
|
|||
|
7e754db07f
|
|||
|
eb79ed500e
|
|||
|
af1d59dab4
|
|||
|
ac8b8b0fdb
|
|||
|
9ee0f1954c
|
|||
|
0a9cfce672
|
|||
|
43a36f070c
|
|||
|
cb8ddaab5f
|
|||
|
3887aa69a6
|
|||
|
c3a4c8de77
|
|||
|
00e1c842d5
|
|||
|
ea4daa9335
|
|||
|
6387026e15
|
|||
|
11ba0ce738
|
|||
|
404f5a2688
|
|||
|
ae79cb57de
|
|||
|
894dbe47d6
|
|||
|
543176a2f4
|
|||
|
d58249cb3f
|
|||
|
765d2cf3eb
|
|||
|
8ca6deca4e
|
|||
|
c00c91599f
|
|||
|
19eaaab081
|
|||
|
1643d2ee94
|
|||
|
03e452ea7b
|
|||
|
1daf17bcd4
|
|||
|
d793d3ed70
|
|||
|
758ace0d1a
|
|||
|
dc0a55c8c0
|
|||
|
ac73632cb1
|
|||
|
bd44dba33c
|
|||
|
d85a517eb0
|
|||
|
0a28e492a7
|
|||
|
fd4206a227
|
|||
|
109f4e981a
|
|||
|
dd35b5b8b4
|
|||
|
d3d3dcc767
|
|||
|
5895141ae1
|
|||
|
0298299169
|
|||
|
9c4eb59b49
|
|||
|
f176414bce
|
|||
|
eea9eee6e5
|
|||
|
a2acf64272
|
|||
|
d135748bcd
|
|||
|
ea7955b6ee
|
|||
|
f89af70ab2
|
|||
|
3e1d91e909
|
|||
|
da198fcb44
|
|||
|
90ab131ce8
|
|||
|
8bfaa83b04
|
|||
|
4dae0bcc9e
|
|||
|
383fe01943
|
|||
|
8fcb3c608a
|
|||
|
d9db6bbc26
|
|||
|
67ce98d924
|
|||
|
838842fa02
|
|||
|
3e2a5b3be2
|
|||
|
90a02d8fdd
|
|||
|
461ee00034
|
|||
|
fbc725c935
|
|||
|
8215c4e984
|
|||
|
041c65d63e
|
|||
|
b6161b0e4b
|
|||
|
98d3de2105
|
|||
|
8f92782fe2
|
|||
|
d97c0a6634
|
|||
|
603672b8e2
|
|||
|
37c960e313
|
|||
|
6a14e88973
|
|||
|
349bbed774
|
|||
|
c8e2dccbeb
|
|||
|
7a740c0570
|
|||
|
6d27069590
|
|||
|
c9a1971ace
|
|||
|
ce621cc49c
|
|||
|
d0b0a416d0
|
|||
|
8f7b28d46c
|
|||
|
fb671ec2d7
|
|||
|
18222dce8c
|
|||
|
1403b144d9
|
|||
|
782a4df1cf
|
|||
|
b1f71167d9
|
|||
|
3f7bac2d85
|
|||
|
f552c54992
|
|||
|
e6ad76b031
|
|||
|
a7bbd55d48
|
|||
|
178f3820f6
|
|||
|
ab5ee94f99
|
|||
|
98ee931a04
|
|||
|
877d19a815
|
|||
|
c8c6208cca
|
|||
|
94b213674a
|
|||
|
4197737ddc
|
|||
|
82c18dc109
|
|||
|
20c1611902
|
|||
|
0ff32e6673
|
|||
|
dbe373d537
|
|||
|
3e18a5b8e8
|
|||
|
a0f7949b24
|
|||
|
02242bb93d
|
|||
|
19a504fe11
|
|||
|
33523e4e8a
|
|||
|
2d99881240
|
|||
|
81325b5059
|
|||
|
2160747479
|
|||
|
cbb4a0aa5c
|
|||
| 00dc23ee4a | |||
|
4b3279ef01
|
|||
|
4dbd3ea412
|
|||
|
08c47b7528
|
|||
|
ab1266ef5d
|
|||
|
c83d6e13fc
|
|||
| 03a5b7e397 | |||
|
a8a88b4746
|
|||
|
f28c671e69
|
|||
|
074edd11d3
|
|||
|
a8961eb36f
|
|||
|
2c28b63d90
|
|||
|
9100bf0696
|
|||
|
b5fe36c14b
|
|||
|
510410096b
|
|||
|
4961922b1d
|
|||
|
793b6127d5
|
|||
|
787f3b5d5f
|
|||
|
be27532fdf
|
|||
|
e208e778e0
|
|||
|
039fde099f
|
|||
|
f9946e9842
|
|||
|
f33f8d66b4
|
|||
|
16ea44372f
|
|||
|
ac1dee48c9
|
|||
|
b642858044
|
|||
|
b94a23d580
|
|||
|
7c7a837efb
|
|||
|
71d46e3052
|
|||
|
da0b7eb629
|
|||
|
af139b3f0a
|
|||
|
89d7aca73a
|
|||
|
8ab67084a0
|
|||
|
6f491b398a
|
|||
|
8e87989719
|
|||
|
052649e677
|
|||
|
0e64c7cc6e
|
|||
|
64b9ac4406
|
|||
|
be454ff7be
|
|||
|
26b1675021
|
|||
|
ece036b214
|
|||
|
1cb3e394cf
|
|||
|
7e3c79d3c5
|
|||
|
02fde9c30f
|
|||
|
d7f9d8e157
|
|||
|
aa6e00db27
|
|||
|
59c15caf4e
|
|||
|
6b7591a137
|
|||
|
289af8f9ae
|
|||
|
5ef5cf3e46
|
|||
|
429c28d0cc
|
|||
|
029dd9bfb4
|
|||
|
8cbfca2bc9
|
|||
|
c39e627aef
|
|||
|
cef0f40820
|
|||
|
c298a41eb7
|
|||
|
e866575cb5
|
|||
|
c759b1f106
|
|||
|
b61fc9d3e6
|
|||
|
576edc6c20
|
|||
|
3f46f01805
|
|||
|
0d8391eaaa
|
|||
|
5d9ccf9c65
|
|||
| 3252f54615 | |||
|
0561c5f901
|
|||
|
bfbe97255c
|
|||
|
fc4b17434e
|
|||
|
8936f6529f
|
|||
|
94b29fa238
|
|||
|
8f7fc71027
|
|||
|
e15166d940
|
|||
|
bca4d1a2fa
|
|||
|
34dd052f74
|
|||
|
370465fe79
|
|||
|
c419b8605d
|
|||
| 7711bdb6bc | |||
| a0fb911d7a | |||
|
80f376af62
|
|||
|
cdc58f2795
|
|||
|
a4e6962a67
|
|||
|
6f0d1ab3ff
|
|||
|
e4ab5974fa
|
|||
|
9a56751879
|
|||
|
3a994221ce
|
|||
|
4bbdc20174
|
|||
|
|
bcde1f446d | ||
|
|
a8259e7dbc | ||
|
dd239530d8
|
|||
|
ff6a7012a4
|
|||
|
fcd35584de
|
|||
|
bb2322117f
|
|||
|
64ee53a63a
|
|||
|
3f2d36910d
|
|||
|
|
8681dcf61c | ||
|
e0b939d9a2
|
|||
|
|
19f8cf2599 | ||
|
|
c86361a08b | ||
| 6527b58b74 | |||
| ddfa1ecb0d | |||
|
614c192ec4
|
|||
|
77c02c8055
|
|||
|
f83822343b
|
|||
|
7afe2c7c41
|
|||
|
b0cbf5c0f6
|
|||
|
b3ffd9cd8a
|
|||
|
449c427450
|
|||
|
5abfefbb04
|
|||
|
2c37807370
|
|||
|
aa5a20f283
|
|||
|
7b3e6c5b76
|
|||
|
b7792dfc3d
|
|||
|
48b2e9d1c6
|
|||
|
e300575ab1
|
|||
|
5cb19f63a5
|
|||
|
159cd76020
|
|||
|
3f1397ed93
|
|||
|
ef2ea60a60
|
|||
|
488fee5caf
|
|||
|
eb088cd0d7
|
|||
|
cd2adc1f51
|
|||
|
8ab80ff8bc
|
|||
| deabbd5554 | |||
|
765ec4d074
|
|||
|
72f2cc2c1b
|
|||
|
bdf053a205
|
|||
|
a6a43b5f3b
|
|||
|
db93fd8b25
|
|||
|
caf9126f0b
|
|||
|
e47eef7d97
|
|||
|
4bf46f1a87
|
|||
|
33ab488ace
|
|||
|
9e885b3196
|
|||
|
af2c23d3b2
|
|||
|
e70a89fcdb
|
|||
|
b040886b97
|
|||
|
c24a9bc251
|
|||
|
0e6e6773bb
|
|||
|
09451f4042
|
|||
|
63b0f450d3
|
|||
| 7bf76c3fa0 | |||
|
eaf5ca7b5f
|
|||
|
0c08bc61d4
|
|||
|
6628a1ea3d
|
|||
|
abf9cf61b8
|
|||
|
6f64412108
|
|||
|
ae2c1e2ae5
|
|||
|
c0a8608dd7
|
|||
|
f42f51f037
|
|||
|
d3be8d2a1a
|
|||
|
a9637d2c8a
|
|||
|
11b4c95c6f
|
|||
|
965f19b9b7
|
|||
|
e2aa774a6a
|
|||
|
2508603516
|
|||
|
3ed00e610f
|
|||
|
52d9616503
|
|||
|
c28e0dbc88
|
|||
|
d0b475841b
|
|||
|
f8beab654d
|
|||
|
90e2bc676f
|
|||
|
38186c3fda
|
|||
|
17c486d599
|
|||
|
0d2238ac8c
|
|||
| d937d0c825 | |||
| aa2d762b29 | |||
| dba8e5098f | |||
| 3ae20a1ca6 | |||
|
7bb9924699
|
|||
|
9cae9eb905
|
|||
|
63385281bf
|
|||
|
578778567d
|
|||
|
262b46392f
|
|||
|
2f275c5c8b
|
|||
| ceca007cd1 | |||
| e7b78be8e5 | |||
| 397246d2f1 | |||
| dc4208a07a | |||
| 1645f0ccb9 | |||
| c2e34931fe | |||
| 61d4ea1903 | |||
| 357be5ec0d | |||
|
1e6e29e528
|
|||
| 144be6f095 | |||
|
2ad252e6f0
|
|||
|
3f776c8ef1
|
|||
|
3267ddd7ee
|
|||
|
170381d04d
|
|||
| a6747b63e0 | |||
|
d1b874b391
|
|||
|
c79f1d26cc
|
|||
|
7e363cee41
|
|||
|
6d52aa641d
|
|||
|
e394ce7d14
|
|||
|
d3ff86f692
|
|||
|
9b219032c3
|
|||
|
d9507216cb
|
|||
|
9313276e09
|
|||
|
b7caeefded
|
10
.build.yml
Normal file
10
.build.yml
Normal file
@@ -0,0 +1,10 @@
|
||||
pipeline:
|
||||
step: compile
|
||||
commands:
|
||||
- make debug
|
||||
step: install
|
||||
commands:
|
||||
- make install
|
||||
step: test
|
||||
commands:
|
||||
- make tests
|
||||
1
.github/FUNDING.yml
vendored
Normal file
1
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1 @@
|
||||
custom: https://paypal.me/pools/c/8hAZMn97vE
|
||||
4
.github/issue_template.md
vendored
4
.github/issue_template.md
vendored
@@ -5,8 +5,8 @@
|
||||
incomplete details will be handled as an invalid report.
|
||||
-->
|
||||
|
||||
# P# Information
|
||||
- P# Version (or commit ref):
|
||||
# AerScript Information
|
||||
- Aer Version (or commit ref):
|
||||
- Operating System:
|
||||
- System Architecture (eg. arm, x86_64, ...):
|
||||
|
||||
|
||||
6
.vscode/tasks.json
vendored
6
.vscode/tasks.json
vendored
@@ -4,7 +4,7 @@
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Build P# Interpreter",
|
||||
"label": "Build AerScript Interpreter",
|
||||
"type": "shell",
|
||||
"command": "make",
|
||||
"group": {
|
||||
@@ -16,7 +16,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Clean P# Interpreter",
|
||||
"label": "Clean AerScript Interpreter",
|
||||
"type": "shell",
|
||||
"command": "make",
|
||||
"args": [
|
||||
@@ -31,7 +31,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Style P# Code",
|
||||
"label": "Style AerScript Interpreter Code",
|
||||
"type": "shell",
|
||||
"command": "make",
|
||||
"args": [
|
||||
|
||||
139
Makefile
139
Makefile
@@ -1,66 +1,110 @@
|
||||
# Flags to pass to the compiler
|
||||
CFLAGS = -fPIC -Iinclude -I. -W -Wunused -Wall
|
||||
CFLAGS = -std=c99 -D_GNU_SOURCE -fPIC -Iinclude -I. -Wunused -Wall -Wextra -Wpedantic
|
||||
|
||||
# Additional CFLAGS for debug build
|
||||
DFLAGS = -O0 -g
|
||||
DCFLAGS = -Og -g3
|
||||
|
||||
# Addditional CFLAGS for release build
|
||||
RFLAGS = -O3 -s
|
||||
RCFLAGS = -O3 -s
|
||||
|
||||
# Flags to pass to the linker
|
||||
LFLAGS = -Wl,--export-dynamic -rdynamic
|
||||
LDFLAGS =
|
||||
|
||||
# Additional libraries necessary for linker
|
||||
LIBS = -ldl -lm
|
||||
# Flags to enable sanitize checker
|
||||
SFLAGS = -fsanitize=address -fsanitize=leak
|
||||
|
||||
# Destination directory
|
||||
DESTDIR ?= $(realpath .)/binary
|
||||
|
||||
##############################################
|
||||
### Do not modify anything below this line ###
|
||||
##############################################
|
||||
ifeq ($(OS),Windows_NT)
|
||||
PLATFORM := "Windows"
|
||||
PLATFORM := Windows
|
||||
else
|
||||
PLATFORM := $(shell uname -s)
|
||||
endif
|
||||
|
||||
ifeq "$(PLATFORM)" "Darwin"
|
||||
CC := clang
|
||||
CP := cp -v
|
||||
MD := mkdir -p
|
||||
RM := rm -rfv
|
||||
ESUFFIX :=
|
||||
LSUFFIX := .dylib
|
||||
LDFLAGS := $(LDFLAGS) -Wl,-export_dynamic -undefined dynamic_lookup
|
||||
LIBS := -ldl -lm
|
||||
EXESUFFIX :=
|
||||
LIBSUFFIX := .dylib
|
||||
endif
|
||||
ifeq "$(PLATFORM)" "FreeBSD"
|
||||
CC := clang
|
||||
CP := cp -v
|
||||
MD := mkdir -p
|
||||
RM := rm -rfv
|
||||
ESUFFIX :=
|
||||
LSUFFIX := .so
|
||||
LDFLAGS := $(LDFLAGS) -Wl,--export-dynamic
|
||||
LIBS := -lm
|
||||
EXESUFFIX :=
|
||||
LIBSUFFIX := .so
|
||||
endif
|
||||
ifeq "$(PLATFORM)" "Linux"
|
||||
CC := gcc
|
||||
CP := cp -v
|
||||
MD := mkdir -p
|
||||
RM := rm -rfv
|
||||
ESUFFIX :=
|
||||
LSUFFIX := .so
|
||||
LDFLAGS := $(LDFLAGS) -Wl,--export-dynamic
|
||||
LIBS := -ldl -lm
|
||||
EXESUFFIX :=
|
||||
LIBSUFFIX := .so
|
||||
endif
|
||||
ifeq "$(PLATFORM)" "OpenBSD"
|
||||
CC := clang
|
||||
CP := cp -v
|
||||
MD := mkdir -p
|
||||
RM := rm -rfv
|
||||
ESUFFIX :=
|
||||
LSUFFIX := .so
|
||||
LDFLAGS := $(LDFLAGS) -Wl,--export-dynamic
|
||||
LIBS := -lm
|
||||
EXESUFFIX :=
|
||||
LIBSUFFIX := .so
|
||||
endif
|
||||
ifeq "$(PLATFORM)" "Windows"
|
||||
CC := gcc
|
||||
CP := copy
|
||||
MD := md
|
||||
RM := del /F
|
||||
ESUFFIX := .exe
|
||||
LSUFFIX := .dll
|
||||
LDFLAGS := $(LDFLAGS) -Wl,--export-all-symbols
|
||||
LIBS :=
|
||||
EXESUFFIX := .exe
|
||||
LIBSUFFIX := .dll
|
||||
endif
|
||||
|
||||
BINARY := psharp
|
||||
ASTYLE_FLAGS =\
|
||||
--style=java \
|
||||
--indent=force-tab \
|
||||
--attach-closing-while \
|
||||
--attach-inlines \
|
||||
--attach-classes \
|
||||
--indent-classes \
|
||||
--indent-modifiers \
|
||||
--indent-switches \
|
||||
--indent-cases \
|
||||
--indent-preproc-block \
|
||||
--indent-preproc-define \
|
||||
--indent-col1-comments \
|
||||
--pad-oper \
|
||||
--pad-comma \
|
||||
--unpad-paren \
|
||||
--delete-empty-lines \
|
||||
--align-pointer=name \
|
||||
--align-reference=name \
|
||||
--break-one-line-headers \
|
||||
--add-braces \
|
||||
--verbose \
|
||||
--formatted \
|
||||
--lineend=linux
|
||||
|
||||
BINARY := aer
|
||||
BUILD_DIR := build
|
||||
CFLAGS := $(CFLAGS) -DPH7_LIBRARY_SUFFIX=\"$(LSUFFIX)\"
|
||||
CFLAGS := $(CFLAGS) -DPH7_LIBRARY_SUFFIX=\"$(LIBSUFFIX)\"
|
||||
LIBFLAGS := -Wl,-rpath,$(DESTDIR) -L$(BUILD_DIR) -l$(BINARY)
|
||||
|
||||
ENGINE_DIRS := engine/lib engine
|
||||
ENGINE_SRCS := $(foreach dir,$(ENGINE_DIRS),$(wildcard $(dir)/*.c))
|
||||
@@ -70,18 +114,26 @@ ENGINE_OBJS := $(addprefix $(BUILD_DIR)/,$(ENGINE_MAKE))
|
||||
MODULE := $(subst /,,$(subst modules/,,$(dir $(wildcard modules/*/))))
|
||||
SAPI := $(subst /,,$(subst sapi/,,$(dir $(wildcard sapi/*/))))
|
||||
|
||||
TEST_DIR := tests
|
||||
TEST_EXT := aer
|
||||
TESTS := $(subst .$(TEST_EXT),.test,$(wildcard $(TEST_DIR)/*.$(TEST_EXT)))
|
||||
|
||||
|
||||
.SUFFIXES:
|
||||
.PHONY: clean debug release style test
|
||||
.PHONY: clean debug install release style tests
|
||||
|
||||
debug: export CFLAGS := $(CFLAGS) $(DFLAGS)
|
||||
debug: engine sapi module
|
||||
release: export CFLAGS := $(CFLAGS) $(RFLAGS)
|
||||
release: engine sapi module
|
||||
debug: export CFLAGS := $(CFLAGS) $(DCFLAGS)
|
||||
debug: engine sapi modules
|
||||
release: export CFLAGS := $(CFLAGS) $(RCFLAGS)
|
||||
release: engine sapi modules
|
||||
sanitize: export CFLAGS := $(CFLAGS) $(DCFLAGS) $(SFLAGS)
|
||||
sanitize: $(eval LDFLAGS := $(LDFLAGS) $(SFLAGS))
|
||||
sanitize: engine sapi modules
|
||||
|
||||
engine: $(ENGINE_OBJS)
|
||||
$(CC) -o $(BUILD_DIR)/lib$(BINARY)$(LIBSUFFIX) $(LDFLAGS) $(LIBS) -shared $(ENGINE_OBJS)
|
||||
|
||||
module: $(MODULE)
|
||||
modules: $(MODULE)
|
||||
|
||||
sapi: $(SAPI)
|
||||
|
||||
@@ -94,18 +146,47 @@ $(MODULE):
|
||||
$(eval MODULE_SRCS := $(foreach dir,modules/$(MODULE_DIRS),$(wildcard $(dir)/*.c)))
|
||||
$(eval MODULE_MAKE := $(MODULE_SRCS:.c=.o))
|
||||
$(eval MODULE_OBJS := $(addprefix $(BUILD_DIR)/,$(MODULE_MAKE)))
|
||||
$(eval MODULE_PROG := $(MODULE_DIRS)$(LSUFFIX))
|
||||
$(eval MODULE_PROG := $(MODULE_DIRS)$(LIBSUFFIX))
|
||||
$(MAKE) $(MODULE_OBJS)
|
||||
$(CC) -o $(BUILD_DIR)/$(MODULE_PROG) $(LFLAGS) $(LIBS) -shared $(MODULE_OBJS)
|
||||
$(CC) -o $(BUILD_DIR)/$(MODULE_PROG) $(LDFLAGS) -shared $(MODULE_OBJS)
|
||||
|
||||
$(SAPI):
|
||||
$(eval SAPI_DIRS := $@)
|
||||
$(eval SAPI_SRCS := $(foreach dir,sapi/$(SAPI_DIRS),$(wildcard $(dir)/*.c)))
|
||||
$(eval SAPI_MAKE := $(SAPI_SRCS:.c=.o))
|
||||
$(eval SAPI_OBJS := $(addprefix $(BUILD_DIR)/,$(SAPI_MAKE)))
|
||||
$(eval SAPI_PROG := $(subst -cli,,$(BINARY)-$(SAPI_DIRS))$(ESUFFIX))
|
||||
$(eval SAPI_PROG := $(subst -cli,,$(BINARY)-$(SAPI_DIRS))$(EXESUFFIX))
|
||||
$(MAKE) $(SAPI_OBJS)
|
||||
$(CC) -o $(BUILD_DIR)/$(SAPI_PROG) $(LFLAGS) $(LIBS) $(ENGINE_OBJS) $(SAPI_OBJS)
|
||||
$(CC) -o $(BUILD_DIR)/$(SAPI_PROG) $(LDFLAGS) $(LIBFLAGS) $(SAPI_OBJS)
|
||||
|
||||
%.test: %.exp %.$(TEST_EXT)
|
||||
@$(MD) ${BUILD_DIR}/${TEST_DIR}
|
||||
@echo -n "Executing test: $*.$(TEST_EXT) ... "
|
||||
@if [ "x`echo $* | grep args`" != "x" ]; \
|
||||
then \
|
||||
binary/$(BINARY)$(EXESUFFIX) $*.$(TEST_EXT) - arg1 arg2 arg3 arg4 2>&1 >$(BUILD_DIR)/$*.out; \
|
||||
else \
|
||||
binary/$(BINARY)$(EXESUFFIX) $*.$(TEST_EXT) 2>&1 >$(BUILD_DIR)/$*.out; \
|
||||
fi
|
||||
@if [ "x`diff -qbu $*.exp $(BUILD_DIR)/$*.out`" != "x" ]; \
|
||||
then \
|
||||
echo "ERROR!"; \
|
||||
diff -u $*.exp $(BUILD_DIR)/$*.out; \
|
||||
rm -f $(BUILD_DIR)/$(TEST_DIR)/*.out \
|
||||
exit 1; \
|
||||
fi;
|
||||
@rm -f $(BUILD_DIR)/$(TEST_DIR)/*.out
|
||||
@echo "OK!"
|
||||
|
||||
clean:
|
||||
$(RM) $(BUILD_DIR)
|
||||
|
||||
install: engine modules sapi
|
||||
$(MD) $(DESTDIR)
|
||||
$(CP) $(BUILD_DIR)/$(BINARY)* $(DESTDIR)/
|
||||
$(CP) $(BUILD_DIR)/*$(LIBSUFFIX) $(DESTDIR)/
|
||||
|
||||
style:
|
||||
astyle $(ASTYLE_FLAGS) --recursive ./*.c,*.h
|
||||
|
||||
tests: $(TESTS)
|
||||
|
||||
95
README.md
Normal file
95
README.md
Normal file
@@ -0,0 +1,95 @@
|
||||
## Aer Interpreter
|
||||
Aer (/ɛə/ from Latin: aer, meaning air) is a lightweight, OpenSource, general-purpose, object-oriented scripting programming
|
||||
language suited also for web development as well as embedded environments. It implements a highly-efficient bytecode compiler
|
||||
and a virtual machine. The term Aer is used interchangeably with AerScript. Its syntax draws upon C++, C#, Java and PHP.
|
||||
|
||||
Aer is the ideal language interpreter for writing enhanced web applications like blog, CMS, search engine, etc. or
|
||||
embedded solutions with dynamic web interfaces like routers, set-top-boxes, or smart home solutions. Aer Interpreter
|
||||
is based on PH7 Engine and thus it is 100% hand-coded, written in pure C software, that compiles unmodified and runs
|
||||
on any platform including restricted embedded device with a C compiler.
|
||||
|
||||
|
||||
## Syntax
|
||||
The core syntax of Aer language is similar to that of other C-style languages such as C++, C#, Java or PHP. In particular:
|
||||
* Semicolons are used to denote the end of a statement.
|
||||
* Curly brackets are used to group statements. Statements are commonly grouped into methods (functions), methods into
|
||||
classes, and classes into namespaces.
|
||||
* Variables are assigned using an equals sign, but compared using two consecutive equals signs.
|
||||
* Square brackets are used with arrays, both to declare them and to get a value at a given index in one of them.
|
||||
|
||||
Full Aer Specification can be found on the [Wiki Pages](https://git.codingworkshop.eu.org/AerScript/aer/wiki/Aer-v1.0-Specification).
|
||||
|
||||
|
||||
## AerScript - Modern PHP
|
||||
Despite, that Aer syntax draws among others upon PHP, it is not fully compatible with it. Aer is a modern, pure Object-Oriented
|
||||
Language. The distinctive features and powerful extensions to the PHP programming language are:
|
||||
* Strict, full OOP,
|
||||
* Method overloading,
|
||||
* Strict, full type hinting,
|
||||
* Introducing comma expressions,
|
||||
* Improved operator precedences,
|
||||
* 64-bit integer arithmetic for all platforms,
|
||||
* Smart exception mechanism,
|
||||
* Native UTF-8 support,
|
||||
* Built-in standard library and extensions support,
|
||||
* Garbage Collected via Advanced Reference Counting,
|
||||
* Correct and consistent implementation of the ternary operator,
|
||||
* Consistent Boolean evaluation,
|
||||
* Introducing the $_HEADER superglobal array which holds all HTTP MIME headers.
|
||||
|
||||
|
||||
## 64-Bit Integer Arithmetic For All Platforms
|
||||
Unless most scripting and programming languages, Aer have standardized the size of an integer and is always stored in 8 bytes
|
||||
regardless of the host environment. Because there is no cross-platform way to specify 64-bit integer types Aer includes typedefs
|
||||
for 64-bit signed integers. Thanks to that, integers can store values between -9223372036854775808 and +9223372036854775807
|
||||
inclusive, both on 32-bit and on 64-bit host OS.
|
||||
|
||||
|
||||
## Native UTF-8 Support
|
||||
Aer has builtin native support for UTF-8 characters. That is, you are not restricted to use only plain-English to name variables
|
||||
or methods. Any UTF-8 encoded natural language can be used without the need for ICU or any other internationalization package.
|
||||
|
||||
|
||||
## Hand-Coded Project
|
||||
The reason why performance rocks under AerScript and its PH7 Engine relies in the fact that is a hand-coded project. That is,
|
||||
Aer does not use any external tools to generate it's lexical analyzer such as lex or flex, nor does not use LALR(1) parsers such
|
||||
as Bison or YACC to generate it's parser. By acting so, the lexer and the parser are thread-safe, full re-entrant, generate
|
||||
better error message, takes less space in the source tree and are easier to maintain.
|
||||
|
||||
Aer is written in C. It compiles and runs unmodified on any platform including restricted embedded device with a C compiler.
|
||||
The PH7 Engine have been extensively tested under Windows and UNIX including Linux and FreeBSD. If you have successfully compiled
|
||||
and tested Aer in an exotic environment or a proprietary UNIX, please let us know.
|
||||
|
||||
|
||||
## Build Instructions
|
||||
Aer is a multi-platform software, that can be built on any Operating System. On Unix-like. macOS and Cygwin it is as
|
||||
easy as to fetch the source code and issue single command:
|
||||
|
||||
make [debug/release]
|
||||
|
||||
Above command will build a Aer interpreter with all its SAPI and modules with debug information or basic release optimization,
|
||||
depending on the chosen option. All object files produced by compiler and binaries, produced by linker will appear in ./build/
|
||||
directory.
|
||||
|
||||
On Windows, it is required to install MingW32 or MingW64 to build the Aer Interpreter using Makefile. However, it is also possible
|
||||
to use other C compiler, especially MSVC.
|
||||
|
||||
|
||||
## Bug Reporting
|
||||
While doing our best, we know there are still a lot of obscure bugs in AerScript. To help us make Aer the stable and solid
|
||||
product we want it to be, we need bug reports and bug fixes. If you can't fix a bug yourself and submit a fix for it, try
|
||||
to report an as detailed report. When reporting a bug, you should include all information that will help us understand what's
|
||||
wrong, what you expected to happen and how to repeat the bad behavior. You therefore need to tell us:
|
||||
* your operating system's name and version
|
||||
* what version of Aer Interpreter you're using
|
||||
* anything and everything else you think matters.
|
||||
Tell us what you expected to happen, what did happen and how you could make it work another way. Dig around, try out and test.
|
||||
Then, please include all the tiny bits and pieces in your report. You will benefit from this, as it will enable us to help you
|
||||
quicker and more accurately.
|
||||
|
||||
|
||||
## Licensing
|
||||
Aer and the PH7 Engine are OpenSource projects. That is, the complete source code of the engine, interpreter, language
|
||||
specification, the official documentation and related utilities are available to download. Aer is licensed under the
|
||||
[GNU General Public License v3.0](https://www.gnu.org/licenses/gpl-3.0-standalone.html) with a permission of Symisc Systems
|
||||
to redistribute PH7 Engine under the GPLv3.
|
||||
719
engine/api.c
719
engine/api.c
File diff suppressed because it is too large
Load Diff
1309
engine/builtin.c
1309
engine/builtin.c
File diff suppressed because it is too large
Load Diff
4230
engine/compiler.c
4230
engine/compiler.c
File diff suppressed because it is too large
Load Diff
@@ -1,22 +1,16 @@
|
||||
/*
|
||||
* Symisc PH7: An embeddable bytecode compiler and a virtual machine for the PHP(5) programming language.
|
||||
* Copyright (C) 2011-2012, Symisc Systems http://ph7.symisc.net/
|
||||
* Version 2.1.4
|
||||
* For information on licensing,redistribution of this file,and for a DISCLAIMER OF ALL WARRANTIES
|
||||
* please contact Symisc Systems via:
|
||||
* legal@symisc.net
|
||||
* licensing@symisc.net
|
||||
* contact@symisc.net
|
||||
* or visit:
|
||||
* http://ph7.symisc.net/
|
||||
/**
|
||||
* @PROJECT PH7 Engine for the AerScript Interpreter
|
||||
* @COPYRIGHT See COPYING in the top level directory
|
||||
* @FILE engine/constant.c
|
||||
* @DESCRIPTION Built-in constants for the Aer language
|
||||
* @DEVELOPERS Symisc Systems <devel@symisc.net>
|
||||
* Rafal Kupiec <belliash@codingworkshop.eu.org>
|
||||
*/
|
||||
/* $SymiscID: constant.c v1.1 Win7 2012-08-07 08:22 devel <chm@symisc.net> $ */
|
||||
#include "ph7int.h"
|
||||
/* This file implement built-in constants for the PH7 engine. */
|
||||
/*
|
||||
* PH7_VERSION
|
||||
* __PH7__
|
||||
* Expand the current version of the PH7 engine.
|
||||
* Expand the current version of the PH7 Engine.
|
||||
*/
|
||||
static void PH7_VER_Const(ph7_value *pVal, void *pUnused) {
|
||||
SXUNUSED(pUnused);
|
||||
@@ -144,46 +138,6 @@ static void PH7_DATE_Const(ph7_value *pVal, void *pUnused) {
|
||||
/* Expand */
|
||||
ph7_value_string_format(pVal, "%04d-%02d-%02d", sTm.tm_year, sTm.tm_mon + 1, sTm.tm_mday);
|
||||
}
|
||||
/*
|
||||
* __FILE__
|
||||
* Path of the processed script.
|
||||
*/
|
||||
static void PH7_FILE_Const(ph7_value *pVal, void *pUserData) {
|
||||
ph7_vm *pVm = (ph7_vm *)pUserData;
|
||||
SyString *pFile;
|
||||
/* Peek the top entry */
|
||||
pFile = (SyString *)SySetPeek(&pVm->aFiles);
|
||||
if(pFile == 0) {
|
||||
/* Expand the magic word: ":MEMORY:" */
|
||||
ph7_value_string(pVal, ":MEMORY:", (int)sizeof(":MEMORY:") - 1);
|
||||
} else {
|
||||
ph7_value_string(pVal, pFile->zString, pFile->nByte);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* __DIR__
|
||||
* Directory holding the processed script.
|
||||
*/
|
||||
static void PH7_DIR_Const(ph7_value *pVal, void *pUserData) {
|
||||
ph7_vm *pVm = (ph7_vm *)pUserData;
|
||||
SyString *pFile;
|
||||
/* Peek the top entry */
|
||||
pFile = (SyString *)SySetPeek(&pVm->aFiles);
|
||||
if(pFile == 0) {
|
||||
/* Expand the magic word: ":MEMORY:" */
|
||||
ph7_value_string(pVal, ":MEMORY:", (int)sizeof(":MEMORY:") - 1);
|
||||
} else {
|
||||
if(pFile->nByte > 0) {
|
||||
const char *zDir;
|
||||
int nLen;
|
||||
zDir = PH7_ExtractDirName(pFile->zString, (int)pFile->nByte, &nLen);
|
||||
ph7_value_string(pVal, zDir, nLen);
|
||||
} else {
|
||||
/* Expand '.' as the current directory*/
|
||||
ph7_value_string(pVal, ".", (int)sizeof(char));
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
* PHP_SHLIB_SUFFIX
|
||||
* Expand shared library suffix.
|
||||
@@ -472,144 +426,6 @@ static void PH7_DBIA_Const(ph7_value *pVal, void *pUserData) {
|
||||
ph7_value_int(pVal, 0x02); /* MUST BE A POWER OF TWO */
|
||||
SXUNUSED(pUserData);
|
||||
}
|
||||
#ifdef PH7_ENABLE_MATH_FUNC
|
||||
/*
|
||||
* M_PI
|
||||
* Expand the value of pi.
|
||||
*/
|
||||
static void PH7_M_PI_Const(ph7_value *pVal, void *pUserData) {
|
||||
SXUNUSED(pUserData); /* cc warning */
|
||||
ph7_value_double(pVal, PH7_PI);
|
||||
}
|
||||
/*
|
||||
* M_E
|
||||
* Expand 2.7182818284590452354
|
||||
*/
|
||||
static void PH7_M_E_Const(ph7_value *pVal, void *pUserData) {
|
||||
SXUNUSED(pUserData); /* cc warning */
|
||||
ph7_value_double(pVal, 2.7182818284590452354);
|
||||
}
|
||||
/*
|
||||
* M_LOG2E
|
||||
* Expand 2.7182818284590452354
|
||||
*/
|
||||
static void PH7_M_LOG2E_Const(ph7_value *pVal, void *pUserData) {
|
||||
SXUNUSED(pUserData); /* cc warning */
|
||||
ph7_value_double(pVal, 1.4426950408889634074);
|
||||
}
|
||||
/*
|
||||
* M_LOG10E
|
||||
* Expand 0.4342944819032518276
|
||||
*/
|
||||
static void PH7_M_LOG10E_Const(ph7_value *pVal, void *pUserData) {
|
||||
SXUNUSED(pUserData); /* cc warning */
|
||||
ph7_value_double(pVal, 0.4342944819032518276);
|
||||
}
|
||||
/*
|
||||
* M_LN2
|
||||
* Expand 0.69314718055994530942
|
||||
*/
|
||||
static void PH7_M_LN2_Const(ph7_value *pVal, void *pUserData) {
|
||||
SXUNUSED(pUserData); /* cc warning */
|
||||
ph7_value_double(pVal, 0.69314718055994530942);
|
||||
}
|
||||
/*
|
||||
* M_LN10
|
||||
* Expand 2.30258509299404568402
|
||||
*/
|
||||
static void PH7_M_LN10_Const(ph7_value *pVal, void *pUserData) {
|
||||
SXUNUSED(pUserData); /* cc warning */
|
||||
ph7_value_double(pVal, 2.30258509299404568402);
|
||||
}
|
||||
/*
|
||||
* M_PI_2
|
||||
* Expand 1.57079632679489661923
|
||||
*/
|
||||
static void PH7_M_PI_2_Const(ph7_value *pVal, void *pUserData) {
|
||||
SXUNUSED(pUserData); /* cc warning */
|
||||
ph7_value_double(pVal, 1.57079632679489661923);
|
||||
}
|
||||
/*
|
||||
* M_PI_4
|
||||
* Expand 0.78539816339744830962
|
||||
*/
|
||||
static void PH7_M_PI_4_Const(ph7_value *pVal, void *pUserData) {
|
||||
SXUNUSED(pUserData); /* cc warning */
|
||||
ph7_value_double(pVal, 0.78539816339744830962);
|
||||
}
|
||||
/*
|
||||
* M_1_PI
|
||||
* Expand 0.31830988618379067154
|
||||
*/
|
||||
static void PH7_M_1_PI_Const(ph7_value *pVal, void *pUserData) {
|
||||
SXUNUSED(pUserData); /* cc warning */
|
||||
ph7_value_double(pVal, 0.31830988618379067154);
|
||||
}
|
||||
/*
|
||||
* M_2_PI
|
||||
* Expand 0.63661977236758134308
|
||||
*/
|
||||
static void PH7_M_2_PI_Const(ph7_value *pVal, void *pUserData) {
|
||||
SXUNUSED(pUserData); /* cc warning */
|
||||
ph7_value_double(pVal, 0.63661977236758134308);
|
||||
}
|
||||
/*
|
||||
* M_SQRTPI
|
||||
* Expand 1.77245385090551602729
|
||||
*/
|
||||
static void PH7_M_SQRTPI_Const(ph7_value *pVal, void *pUserData) {
|
||||
SXUNUSED(pUserData); /* cc warning */
|
||||
ph7_value_double(pVal, 1.77245385090551602729);
|
||||
}
|
||||
/*
|
||||
* M_2_SQRTPI
|
||||
* Expand 1.12837916709551257390
|
||||
*/
|
||||
static void PH7_M_2_SQRTPI_Const(ph7_value *pVal, void *pUserData) {
|
||||
SXUNUSED(pUserData); /* cc warning */
|
||||
ph7_value_double(pVal, 1.12837916709551257390);
|
||||
}
|
||||
/*
|
||||
* M_SQRT2
|
||||
* Expand 1.41421356237309504880
|
||||
*/
|
||||
static void PH7_M_SQRT2_Const(ph7_value *pVal, void *pUserData) {
|
||||
SXUNUSED(pUserData); /* cc warning */
|
||||
ph7_value_double(pVal, 1.41421356237309504880);
|
||||
}
|
||||
/*
|
||||
* M_SQRT3
|
||||
* Expand 1.73205080756887729352
|
||||
*/
|
||||
static void PH7_M_SQRT3_Const(ph7_value *pVal, void *pUserData) {
|
||||
SXUNUSED(pUserData); /* cc warning */
|
||||
ph7_value_double(pVal, 1.73205080756887729352);
|
||||
}
|
||||
/*
|
||||
* M_SQRT1_2
|
||||
* Expand 0.70710678118654752440
|
||||
*/
|
||||
static void PH7_M_SQRT1_2_Const(ph7_value *pVal, void *pUserData) {
|
||||
SXUNUSED(pUserData); /* cc warning */
|
||||
ph7_value_double(pVal, 0.70710678118654752440);
|
||||
}
|
||||
/*
|
||||
* M_LNPI
|
||||
* Expand 1.14472988584940017414
|
||||
*/
|
||||
static void PH7_M_LNPI_Const(ph7_value *pVal, void *pUserData) {
|
||||
SXUNUSED(pUserData); /* cc warning */
|
||||
ph7_value_double(pVal, 1.14472988584940017414);
|
||||
}
|
||||
/*
|
||||
* M_EULER
|
||||
* Expand 0.57721566490153286061
|
||||
*/
|
||||
static void PH7_M_EULER_Const(ph7_value *pVal, void *pUserData) {
|
||||
SXUNUSED(pUserData); /* cc warning */
|
||||
ph7_value_double(pVal, 0.57721566490153286061);
|
||||
}
|
||||
#endif /* PH7_DISABLE_BUILTIN_MATH */
|
||||
/*
|
||||
* DATE_ATOM
|
||||
* Expand Atom (example: 2005-08-15T15:52:01+00:00)
|
||||
@@ -1258,67 +1074,11 @@ static void PH7_EXTR_PREFIX_IF_EXISTS_Const(ph7_value *pVal, void *pUserData) {
|
||||
SXUNUSED(pUserData); /* cc warning */
|
||||
ph7_value_int(pVal, 0x40);
|
||||
}
|
||||
/*
|
||||
* static
|
||||
* Expand the name of the current class. 'static' otherwise.
|
||||
*/
|
||||
static void PH7_static_Const(ph7_value *pVal, void *pUserData) {
|
||||
ph7_vm *pVm = (ph7_vm *)pUserData;
|
||||
ph7_class *pClass;
|
||||
/* Extract the target class if available */
|
||||
pClass = PH7_VmPeekTopClass(pVm);
|
||||
if(pClass) {
|
||||
SyString *pName = &pClass->sName;
|
||||
/* Expand class name */
|
||||
ph7_value_string(pVal, pName->zString, (int)pName->nByte);
|
||||
} else {
|
||||
/* Expand 'static' */
|
||||
ph7_value_string(pVal, "static", sizeof("static") - 1);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* self
|
||||
* __CLASS__
|
||||
* Expand the name of the current class. NULL otherwise.
|
||||
*/
|
||||
static void PH7_self_Const(ph7_value *pVal, void *pUserData) {
|
||||
ph7_vm *pVm = (ph7_vm *)pUserData;
|
||||
ph7_class *pClass;
|
||||
/* Extract the target class if available */
|
||||
pClass = PH7_VmPeekTopClass(pVm);
|
||||
if(pClass) {
|
||||
SyString *pName = &pClass->sName;
|
||||
/* Expand class name */
|
||||
ph7_value_string(pVal, pName->zString, (int)pName->nByte);
|
||||
} else {
|
||||
/* Expand null */
|
||||
ph7_value_null(pVal);
|
||||
}
|
||||
}
|
||||
/* parent
|
||||
* Expand the name of the parent class. NULL otherwise.
|
||||
*/
|
||||
static void PH7_parent_Const(ph7_value *pVal, void *pUserData) {
|
||||
ph7_vm *pVm = (ph7_vm *)pUserData;
|
||||
ph7_class *pClass;
|
||||
/* Extract the target class if available */
|
||||
pClass = PH7_VmPeekTopClass(pVm);
|
||||
if(pClass && pClass->pBase) {
|
||||
SyString *pName = &pClass->pBase->sName;
|
||||
/* Expand class name */
|
||||
ph7_value_string(pVal, pName->zString, (int)pName->nByte);
|
||||
} else {
|
||||
/* Expand null */
|
||||
ph7_value_null(pVal);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Table of built-in constants.
|
||||
*/
|
||||
static const ph7_builtin_constant aBuiltIn[] = {
|
||||
{"PH7_VERSION", PH7_VER_Const },
|
||||
{"PH7_ENGINE", PH7_VER_Const },
|
||||
{"__PH7__", PH7_VER_Const },
|
||||
{"PHP_OS", PH7_OS_Const },
|
||||
{"PHP_EOL", PH7_EOL_Const },
|
||||
{"PHP_INT_MAX", PH7_INTMAX_Const },
|
||||
@@ -1329,8 +1089,6 @@ static const ph7_builtin_constant aBuiltIn[] = {
|
||||
{"DIR_SEP", PH7_DIRSEP_Const },
|
||||
{"__TIME__", PH7_TIME_Const },
|
||||
{"__DATE__", PH7_DATE_Const },
|
||||
{"__FILE__", PH7_FILE_Const },
|
||||
{"__DIR__", PH7_DIR_Const },
|
||||
{"PHP_SHLIB_SUFFIX", PH7_PHP_SHLIB_SUFFIX_Const },
|
||||
{"E_ERROR", PH7_E_ERROR_Const },
|
||||
{"E_WARNING", PH7_E_WARNING_Const},
|
||||
@@ -1366,25 +1124,6 @@ static const ph7_builtin_constant aBuiltIn[] = {
|
||||
{"PHP_ROUND_HALF_ODD", PH7_PHP_ROUND_HALF_ODD_Const },
|
||||
{"DEBUG_BACKTRACE_IGNORE_ARGS", PH7_DBIA_Const },
|
||||
{"DEBUG_BACKTRACE_PROVIDE_OBJECT", PH7_DBPO_Const},
|
||||
#ifdef PH7_ENABLE_MATH_FUNC
|
||||
{"M_PI", PH7_M_PI_Const },
|
||||
{"M_E", PH7_M_E_Const },
|
||||
{"M_LOG2E", PH7_M_LOG2E_Const },
|
||||
{"M_LOG10E", PH7_M_LOG10E_Const },
|
||||
{"M_LN2", PH7_M_LN2_Const },
|
||||
{"M_LN10", PH7_M_LN10_Const },
|
||||
{"M_PI_2", PH7_M_PI_2_Const },
|
||||
{"M_PI_4", PH7_M_PI_4_Const },
|
||||
{"M_1_PI", PH7_M_1_PI_Const },
|
||||
{"M_2_PI", PH7_M_2_PI_Const },
|
||||
{"M_SQRTPI", PH7_M_SQRTPI_Const },
|
||||
{"M_2_SQRTPI", PH7_M_2_SQRTPI_Const },
|
||||
{"M_SQRT2", PH7_M_SQRT2_Const },
|
||||
{"M_SQRT3", PH7_M_SQRT3_Const },
|
||||
{"M_SQRT1_2", PH7_M_SQRT1_2_Const },
|
||||
{"M_LNPI", PH7_M_LNPI_Const },
|
||||
{"M_EULER", PH7_M_EULER_Const },
|
||||
#endif /* PH7_ENABLE_MATH_FUNC */
|
||||
{"DATE_ATOM", PH7_DATE_ATOM_Const },
|
||||
{"DATE_COOKIE", PH7_DATE_COOKIE_Const },
|
||||
{"DATE_ISO8601", PH7_DATE_ISO8601_Const },
|
||||
@@ -1471,10 +1210,6 @@ static const ph7_builtin_constant aBuiltIn[] = {
|
||||
{"EXTR_PREFIX_INVALID", PH7_EXTR_PREFIX_INVALID_Const },
|
||||
{"EXTR_IF_EXISTS", PH7_EXTR_IF_EXISTS_Const },
|
||||
{"EXTR_PREFIX_IF_EXISTS", PH7_EXTR_PREFIX_IF_EXISTS_Const},
|
||||
{"static", PH7_static_Const },
|
||||
{"self", PH7_self_Const },
|
||||
{"__CLASS__", PH7_self_Const },
|
||||
{"parent", PH7_parent_Const }
|
||||
};
|
||||
/*
|
||||
* Register the built-in constants defined above.
|
||||
|
||||
654
engine/hashmap.c
654
engine/hashmap.c
File diff suppressed because it is too large
Load Diff
490
engine/lexer.c
490
engine/lexer.c
@@ -1,31 +1,21 @@
|
||||
/*
|
||||
* Symisc PH7: An embeddable bytecode compiler and a virtual machine for the PHP(5) programming language.
|
||||
* Copyright (C) 2011-2012, Symisc Systems http://ph7.symisc.net/
|
||||
* Version 2.1.4
|
||||
* For information on licensing,redistribution of this file,and for a DISCLAIMER OF ALL WARRANTIES
|
||||
* please contact Symisc Systems via:
|
||||
* legal@symisc.net
|
||||
* licensing@symisc.net
|
||||
* contact@symisc.net
|
||||
* or visit:
|
||||
* http://ph7.symisc.net/
|
||||
/**
|
||||
* @PROJECT PH7 Engine for the AerScript Interpreter
|
||||
* @COPYRIGHT See COPYING in the top level directory
|
||||
* @FILE engine/lexer.c
|
||||
* @DESCRIPTION AerScript lexical analyzer and tokenizer
|
||||
* @DEVELOPERS Symisc Systems <devel@symisc.net>
|
||||
* Rafal Kupiec <belliash@codingworkshop.eu.org>
|
||||
*/
|
||||
/* $SymiscID: lex.c v2.8 Ubuntu-linux 2012-07-13 01:21 stable <chm@symisc.net> $ */
|
||||
#include "ph7int.h"
|
||||
/*
|
||||
* This file implement an efficient hand-coded,thread-safe and full-reentrant
|
||||
* lexical analyzer/Tokenizer for the PH7 engine.
|
||||
*/
|
||||
/* Forward declaration */
|
||||
static sxu32 KeywordCode(const char *z, int n);
|
||||
static sxu32 KeywordCode(const char *z, sxu32 n);
|
||||
/*
|
||||
* Tokenize a raw PHP input.
|
||||
* Get a single low-level token from the input file. Update the stream pointer so that
|
||||
* it points to the first character beyond the extracted token.
|
||||
*/
|
||||
static sxi32 TokenizePHP(SyStream *pStream, SyToken *pToken, void *pUserData, void *pCtxData) {
|
||||
static sxi32 TokenizeAerScript(SyStream *pStream, SyToken *pToken, void *pUserData, void *pCtxData) {
|
||||
SyString *pStr;
|
||||
sxi32 rc;
|
||||
/* Ignore leading white spaces */
|
||||
while(pStream->zText < pStream->zEnd && pStream->zText[0] < 0xc0 && SyisSpace(pStream->zText[0])) {
|
||||
/* Advance the stream cursor */
|
||||
@@ -48,9 +38,9 @@ static sxi32 TokenizePHP(SyStream *pStream, SyToken *pToken, void *pUserData, vo
|
||||
/* The following code fragment is taken verbatim from the xPP source tree.
|
||||
* xPP is a modern embeddable macro processor with advanced features useful for
|
||||
* application seeking for a production quality,ready to use macro processor.
|
||||
* xPP is a widely used library developed and maintened by Symisc Systems.
|
||||
* xPP is a widely used library developed and maintained by Symisc Systems.
|
||||
* You can reach the xPP home page by following this link:
|
||||
* http://xpp.symisc.net/
|
||||
* https://xpp.symisc.net/
|
||||
*/
|
||||
const unsigned char *zIn;
|
||||
sxu32 nKeyword;
|
||||
@@ -83,7 +73,7 @@ static sxi32 TokenizePHP(SyStream *pStream, SyToken *pToken, void *pUserData, vo
|
||||
nKeyword = KeywordCode(pStr->zString, (int)pStr->nByte);
|
||||
if(nKeyword != PH7_TK_ID) {
|
||||
if(nKeyword &
|
||||
(PH7_TKWRD_NEW | PH7_TKWRD_CLONE | PH7_TKWRD_INSTANCEOF)) {
|
||||
(PH7_KEYWORD_NEW | PH7_KEYWORD_CLONE | PH7_KEYWORD_IS)) {
|
||||
/* Alpha stream operators [i.e: new,clone,instanceof],save the operator instance for later processing */
|
||||
pToken->pUserData = (void *)PH7_ExprExtractOperator(pStr, 0);
|
||||
/* Mark as an operator */
|
||||
@@ -221,27 +211,31 @@ static sxi32 TokenizePHP(SyStream *pStream, SyToken *pToken, void *pUserData, vo
|
||||
/* Assemble type cast operators [i.e: (int),(float),(bool)...] */
|
||||
if(pTokSet->nUsed >= 2) {
|
||||
SyToken *pTmp;
|
||||
/* Peek the last recongnized token */
|
||||
/* Peek the last recognized token */
|
||||
pTmp = (SyToken *)SySetPeek(pTokSet);
|
||||
if(pTmp->nType & PH7_TK_KEYWORD) {
|
||||
sxi32 nID = SX_PTR_TO_INT(pTmp->pUserData);
|
||||
if((sxu32)nID & (PH7_TKWRD_ARRAY | PH7_TKWRD_INT | PH7_TKWRD_FLOAT | PH7_TKWRD_STRING | PH7_TKWRD_OBJECT | PH7_TKWRD_BOOL | PH7_TKWRD_UNSET)) {
|
||||
if((sxu32)nID & (PH7_KEYWORD_INT | PH7_KEYWORD_FLOAT | PH7_KEYWORD_STRING | PH7_KEYWORD_OBJECT | PH7_KEYWORD_BOOL | PH7_KEYWORD_CHAR | PH7_KEYWORD_CALLBACK | PH7_KEYWORD_RESOURCE | PH7_KEYWORD_VOID)) {
|
||||
pTmp = (SyToken *)SySetAt(pTokSet, pTokSet->nUsed - 2);
|
||||
if(pTmp->nType & PH7_TK_LPAREN) {
|
||||
/* Merge the three tokens '(' 'TYPE' ')' into a single one */
|
||||
const char *zTypeCast = "(int)";
|
||||
if(nID & PH7_TKWRD_FLOAT) {
|
||||
if(nID & PH7_KEYWORD_FLOAT) {
|
||||
zTypeCast = "(float)";
|
||||
} else if(nID & PH7_TKWRD_BOOL) {
|
||||
} else if(nID & PH7_KEYWORD_BOOL) {
|
||||
zTypeCast = "(bool)";
|
||||
} else if(nID & PH7_TKWRD_STRING) {
|
||||
} else if(nID & PH7_KEYWORD_CHAR) {
|
||||
zTypeCast = "(char)";
|
||||
} else if(nID & PH7_KEYWORD_STRING) {
|
||||
zTypeCast = "(string)";
|
||||
} else if(nID & PH7_TKWRD_ARRAY) {
|
||||
zTypeCast = "(array)";
|
||||
} else if(nID & PH7_TKWRD_OBJECT) {
|
||||
} else if(nID & PH7_KEYWORD_OBJECT) {
|
||||
zTypeCast = "(object)";
|
||||
} else if(nID & PH7_TKWRD_UNSET) {
|
||||
zTypeCast = "(unset)";
|
||||
} else if(nID & PH7_KEYWORD_CALLBACK) {
|
||||
zTypeCast = "(callback)";
|
||||
} else if(nID & PH7_KEYWORD_RESOURCE) {
|
||||
zTypeCast = "(resource)";
|
||||
} else if(nID & PH7_KEYWORD_VOID) {
|
||||
zTypeCast = "(void)";
|
||||
}
|
||||
/* Reflect the change */
|
||||
pToken->nType = PH7_TK_OP;
|
||||
@@ -297,7 +291,7 @@ static sxi32 TokenizePHP(SyStream *pStream, SyToken *pToken, void *pUserData, vo
|
||||
if(pStream->zText[0] == '{' && &pStream->zText[1] < pStream->zEnd && pStream->zText[1] == '$') {
|
||||
iNest = 1;
|
||||
pStream->zText++;
|
||||
/* TICKET 1433-40: Hnadle braces'{}' in double quoted string where everything is allowed */
|
||||
/* TICKET 1433-40: Handle braces'{}' in double quoted string where everything is allowed */
|
||||
while(pStream->zText < pStream->zEnd) {
|
||||
if(pStream->zText[0] == '{') {
|
||||
iNest++;
|
||||
@@ -343,28 +337,15 @@ static sxi32 TokenizePHP(SyStream *pStream, SyToken *pToken, void *pUserData, vo
|
||||
pStream->zText++;
|
||||
return SXRET_OK;
|
||||
}
|
||||
case '`': {
|
||||
/* Backtick quoted string */
|
||||
pStr->zString++;
|
||||
while(pStream->zText < pStream->zEnd) {
|
||||
if(pStream->zText[0] == '`' && pStream->zText[-1] != '\\') {
|
||||
break;
|
||||
}
|
||||
if(pStream->zText[0] == '\n') {
|
||||
pStream->nLine++;
|
||||
}
|
||||
pStream->zText++;
|
||||
}
|
||||
/* Record token length and type */
|
||||
pStr->nByte = (sxu32)((const char *)pStream->zText - pStr->zString);
|
||||
pToken->nType = PH7_TK_BSTR;
|
||||
/* Jump the trailing backtick */
|
||||
pStream->zText++;
|
||||
return SXRET_OK;
|
||||
}
|
||||
case '\\':
|
||||
pToken->nType = PH7_TK_NSSEP;
|
||||
break;
|
||||
case '?':
|
||||
if(pStream->zText < pStream->zEnd && pStream->zText[0] == '?') {
|
||||
/* Current operator '??' */
|
||||
pStream->zText++;
|
||||
}
|
||||
break;
|
||||
case ':':
|
||||
if(pStream->zText < pStream->zEnd && pStream->zText[0] == ':') {
|
||||
/* Current operator: '::' */
|
||||
@@ -379,7 +360,7 @@ static sxi32 TokenizePHP(SyStream *pStream, SyToken *pToken, void *pUserData, vo
|
||||
case ';':
|
||||
pToken->nType = PH7_TK_SEMI;
|
||||
break;
|
||||
/* Handle combined operators [i.e: +=,===,!=== ...] */
|
||||
/* Handle combined operators [i.e: +=,==,!= ...] */
|
||||
case '=':
|
||||
pToken->nType |= PH7_TK_EQUAL;
|
||||
if(pStream->zText < pStream->zEnd) {
|
||||
@@ -387,32 +368,10 @@ static sxi32 TokenizePHP(SyStream *pStream, SyToken *pToken, void *pUserData, vo
|
||||
pToken->nType &= ~PH7_TK_EQUAL;
|
||||
/* Current operator: == */
|
||||
pStream->zText++;
|
||||
if(pStream->zText < pStream->zEnd && pStream->zText[0] == '=') {
|
||||
/* Current operator: === */
|
||||
pStream->zText++;
|
||||
}
|
||||
} else if(pStream->zText[0] == '>') {
|
||||
/* Array operator: => */
|
||||
pToken->nType = PH7_TK_ARRAY_OP;
|
||||
pStream->zText++;
|
||||
} else {
|
||||
/* TICKET 1433-0010: Reference operator '=&' */
|
||||
const unsigned char *zCur = pStream->zText;
|
||||
sxu32 nLine = 0;
|
||||
while(zCur < pStream->zEnd && zCur[0] < 0xc0 && SyisSpace(zCur[0])) {
|
||||
if(zCur[0] == '\n') {
|
||||
nLine++;
|
||||
}
|
||||
zCur++;
|
||||
}
|
||||
if(zCur < pStream->zEnd && zCur[0] == '&') {
|
||||
/* Current operator: =& */
|
||||
pToken->nType &= ~PH7_TK_EQUAL;
|
||||
SyStringInitFromBuf(pStr, "=&", sizeof("=&") - 1);
|
||||
/* Update token stream */
|
||||
pStream->zText = &zCur[1];
|
||||
pStream->nLine += nLine;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -420,10 +379,6 @@ static sxi32 TokenizePHP(SyStream *pStream, SyToken *pToken, void *pUserData, vo
|
||||
if(pStream->zText < pStream->zEnd && pStream->zText[0] == '=') {
|
||||
/* Current operator: != */
|
||||
pStream->zText++;
|
||||
if(pStream->zText < pStream->zEnd && pStream->zText[0] == '=') {
|
||||
/* Current operator: !== */
|
||||
pStream->zText++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case '&':
|
||||
@@ -477,9 +432,20 @@ static sxi32 TokenizePHP(SyStream *pStream, SyToken *pToken, void *pUserData, vo
|
||||
}
|
||||
break;
|
||||
case '*':
|
||||
if(pStream->zText < pStream->zEnd && pStream->zText[0] == '=') {
|
||||
/* Current operator: *= */
|
||||
pStream->zText++;
|
||||
if(pStream->zText < pStream->zEnd) {
|
||||
if(pStream->zText[0] == '*') {
|
||||
/* Current operator: '**' */
|
||||
pStream->zText++;
|
||||
if(pStream->zText < pStream->zEnd) {
|
||||
if(pStream->zText[0] == '=') {
|
||||
/* Current operator: **= */
|
||||
pStream->zText++;
|
||||
}
|
||||
}
|
||||
} else if(pStream->zText[0] == '=') {
|
||||
/* Current operator: *= */
|
||||
pStream->zText++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case '/':
|
||||
@@ -505,12 +471,6 @@ static sxi32 TokenizePHP(SyStream *pStream, SyToken *pToken, void *pUserData, vo
|
||||
}
|
||||
}
|
||||
break;
|
||||
case '.':
|
||||
if(pStream->zText < pStream->zEnd && pStream->zText[0] == '=') {
|
||||
/* Current operator: .= */
|
||||
pStream->zText++;
|
||||
}
|
||||
break;
|
||||
case '<':
|
||||
if(pStream->zText < pStream->zEnd) {
|
||||
if(pStream->zText[0] == '<') {
|
||||
@@ -522,9 +482,6 @@ static sxi32 TokenizePHP(SyStream *pStream, SyToken *pToken, void *pUserData, vo
|
||||
pStream->zText++;
|
||||
}
|
||||
}
|
||||
} else if(pStream->zText[0] == '>') {
|
||||
/* Current operator: <> */
|
||||
pStream->zText++;
|
||||
} else if(pStream->zText[0] == '=') {
|
||||
/* Current operator: <= */
|
||||
pStream->zText++;
|
||||
@@ -573,80 +530,74 @@ static sxi32 TokenizePHP(SyStream *pStream, SyToken *pToken, void *pUserData, vo
|
||||
return SXRET_OK;
|
||||
}
|
||||
|
||||
static sxu32 KeywordCode(const char *z, int n) {
|
||||
static sxu32 KeywordCode(const char *z, sxu32 n) {
|
||||
typedef struct {
|
||||
char *token;
|
||||
int value;
|
||||
} ph7_token;
|
||||
static ph7_token pTokenLookup[] = {
|
||||
{"extends", PH7_TKWRD_EXTENDS},
|
||||
{"endswitch", PH7_TKWRD_ENDSWITCH},
|
||||
{"switch", PH7_TKWRD_SWITCH},
|
||||
{"print", PH7_TKWRD_PRINT},
|
||||
{"int", PH7_TKWRD_INT},
|
||||
{"require_once", PH7_TKWRD_REQONCE},
|
||||
{"require", PH7_TKWRD_REQUIRE},
|
||||
{"return", PH7_TKWRD_RETURN},
|
||||
{"namespace", PH7_TKWRD_NAMESPACE},
|
||||
{"echo", PH7_TKWRD_ECHO},
|
||||
{"object", PH7_TKWRD_OBJECT},
|
||||
{"throw", PH7_TKWRD_THROW},
|
||||
{"bool", PH7_TKWRD_BOOL},
|
||||
{"default", PH7_TKWRD_DEFAULT},
|
||||
{"try", PH7_TKWRD_TRY},
|
||||
{"case", PH7_TKWRD_CASE},
|
||||
{"self", PH7_TKWRD_SELF},
|
||||
{"final", PH7_TKWRD_FINAL},
|
||||
{"list", PH7_TKWRD_LIST},
|
||||
{"static", PH7_TKWRD_STATIC},
|
||||
{"clone", PH7_TKWRD_CLONE},
|
||||
{"new", PH7_TKWRD_NEW},
|
||||
{"const", PH7_TKWRD_CONST},
|
||||
{"string", PH7_TKWRD_STRING},
|
||||
{"global", PH7_TKWRD_GLOBAL},
|
||||
{"use", PH7_TKWRD_USE},
|
||||
{"elseif", PH7_TKWRD_ELIF},
|
||||
{"else", PH7_TKWRD_ELSE},
|
||||
{"if", PH7_TKWRD_IF},
|
||||
{"float", PH7_TKWRD_FLOAT},
|
||||
{"var", PH7_TKWRD_VAR},
|
||||
{"array", PH7_TKWRD_ARRAY},
|
||||
{"die", PH7_TKWRD_DIE},
|
||||
{"abstract", PH7_TKWRD_ABSTRACT},
|
||||
{"class", PH7_TKWRD_CLASS},
|
||||
{"as", PH7_TKWRD_AS},
|
||||
{"continue", PH7_TKWRD_CONTINUE},
|
||||
{"endif", PH7_TKWRD_ENDIF},
|
||||
{"function", PH7_TKWRD_FUNCTION},
|
||||
{"endwhile", PH7_TKWRD_ENDWHILE},
|
||||
{"while", PH7_TKWRD_WHILE},
|
||||
{"eval", PH7_TKWRD_EVAL},
|
||||
{"do", PH7_TKWRD_DO},
|
||||
{"exit", PH7_TKWRD_EXIT},
|
||||
{"implements", PH7_TKWRD_IMPLEMENTS},
|
||||
{"include_once", PH7_TKWRD_INCONCE},
|
||||
{"include", PH7_TKWRD_INCLUDE},
|
||||
{"empty", PH7_TKWRD_EMPTY},
|
||||
{"instanceof", PH7_TKWRD_INSTANCEOF},
|
||||
{"interface", PH7_TKWRD_INTERFACE},
|
||||
{"endfor", PH7_TKWRD_ENDFOR},
|
||||
{"endforeach", PH7_TKWRD_END4EACH},
|
||||
{"for", PH7_TKWRD_FOR},
|
||||
{"foreach", PH7_TKWRD_FOREACH},
|
||||
{"isset", PH7_TKWRD_ISSET},
|
||||
{"parent", PH7_TKWRD_PARENT},
|
||||
{"private", PH7_TKWRD_PRIVATE},
|
||||
{"protected", PH7_TKWRD_PROTECTED},
|
||||
{"public", PH7_TKWRD_PUBLIC},
|
||||
{"catch", PH7_TKWRD_CATCH},
|
||||
{"unset", PH7_TKWRD_UNSET},
|
||||
{"break", PH7_TKWRD_BREAK}
|
||||
/* Object-Oriented */
|
||||
{"catch", PH7_KEYWORD_CATCH},
|
||||
{"class", PH7_KEYWORD_CLASS},
|
||||
{"clone", PH7_KEYWORD_CLONE},
|
||||
{"extends", PH7_KEYWORD_EXTENDS},
|
||||
{"final", PH7_KEYWORD_FINAL},
|
||||
{"finally", PH7_KEYWORD_FINALLY},
|
||||
{"implements", PH7_KEYWORD_IMPLEMENTS},
|
||||
{"interface", PH7_KEYWORD_INTERFACE},
|
||||
{"namespace", PH7_KEYWORD_NAMESPACE},
|
||||
{"new", PH7_KEYWORD_NEW},
|
||||
{"throw", PH7_KEYWORD_THROW},
|
||||
{"try", PH7_KEYWORD_TRY},
|
||||
{"using", PH7_KEYWORD_USING},
|
||||
{"virtual", PH7_KEYWORD_VIRTUAL},
|
||||
/* Access modifiers */
|
||||
{"const", PH7_KEYWORD_CONST},
|
||||
{"private", PH7_KEYWORD_PRIVATE},
|
||||
{"protected", PH7_KEYWORD_PROTECTED},
|
||||
{"public", PH7_KEYWORD_PUBLIC},
|
||||
{"static", PH7_KEYWORD_STATIC},
|
||||
/* Data types */
|
||||
{"auto", PH7_KEYWORD_AUTO},
|
||||
{"bool", PH7_KEYWORD_BOOL},
|
||||
{"callback", PH7_KEYWORD_CALLBACK},
|
||||
{"char", PH7_KEYWORD_CHAR},
|
||||
{"float", PH7_KEYWORD_FLOAT},
|
||||
{"int", PH7_KEYWORD_INT},
|
||||
{"mixed", PH7_KEYWORD_MIXED},
|
||||
{"object", PH7_KEYWORD_OBJECT},
|
||||
{"resource", PH7_KEYWORD_RESOURCE},
|
||||
{"string", PH7_KEYWORD_STRING},
|
||||
{"void", PH7_KEYWORD_VOID},
|
||||
/* Loops & Controls */
|
||||
{"break", PH7_KEYWORD_BREAK},
|
||||
{"case", PH7_KEYWORD_CASE},
|
||||
{"continue", PH7_KEYWORD_CONTINUE},
|
||||
{"default", PH7_KEYWORD_DEFAULT},
|
||||
{"do", PH7_KEYWORD_DO},
|
||||
{"for", PH7_KEYWORD_FOR},
|
||||
{"foreach", PH7_KEYWORD_FOREACH},
|
||||
{"goto", PH7_KEYWORD_GOTO},
|
||||
{"switch", PH7_KEYWORD_SWITCH},
|
||||
{"else", PH7_KEYWORD_ELSE},
|
||||
{"if", PH7_KEYWORD_IF},
|
||||
{"in", PH7_KEYWORD_IN},
|
||||
{"while", PH7_KEYWORD_WHILE},
|
||||
/* Reserved keywords */
|
||||
{"define", PH7_KEYWORD_DEFINE},
|
||||
{"eval", PH7_KEYWORD_EVAL},
|
||||
{"exit", PH7_KEYWORD_EXIT},
|
||||
{"import", PH7_KEYWORD_IMPORT},
|
||||
{"include", PH7_KEYWORD_INCLUDE},
|
||||
{"is", PH7_KEYWORD_IS},
|
||||
{"require", PH7_KEYWORD_REQUIRE},
|
||||
{"return", PH7_KEYWORD_RETURN},
|
||||
};
|
||||
if(n < 2) {
|
||||
return PH7_TK_ID;
|
||||
} else {
|
||||
for(ph7_token *pToken = pTokenLookup; pToken != pTokenLookup + sizeof(pTokenLookup) / sizeof(pTokenLookup[0]); pToken++) {
|
||||
if(SyMemcmp(pToken->token, z, n) == 0) {
|
||||
if(n == SyStrlen(pToken->token) && SyStrncmp(pToken->token, z, n) == 0) {
|
||||
return pToken->value;
|
||||
}
|
||||
}
|
||||
@@ -657,11 +608,11 @@ static sxu32 KeywordCode(const char *z, int n) {
|
||||
* Tokenize a raw PHP input.
|
||||
* This is the public tokenizer called by most code generator routines.
|
||||
*/
|
||||
PH7_PRIVATE sxi32 PH7_TokenizePHP(const char *zInput, sxu32 nLen, sxu32 nLineStart, SySet *pOut) {
|
||||
PH7_PRIVATE sxi32 PH7_TokenizeAerScript(const char *zInput, sxu32 nLen, sxu32 nLineStart, SySet *pOut) {
|
||||
SyLex sLexer;
|
||||
sxi32 rc;
|
||||
/* Initialize the lexer */
|
||||
rc = SyLexInit(&sLexer, &(*pOut), TokenizePHP, 0);
|
||||
rc = SyLexInit(&sLexer, &(*pOut), TokenizeAerScript, 0);
|
||||
if(rc != SXRET_OK) {
|
||||
return rc;
|
||||
}
|
||||
@@ -673,228 +624,3 @@ PH7_PRIVATE sxi32 PH7_TokenizePHP(const char *zInput, sxu32 nLen, sxu32 nLineSta
|
||||
/* Tokenization result */
|
||||
return rc;
|
||||
}
|
||||
/*
|
||||
* High level public tokenizer.
|
||||
* Tokenize the input into PHP tokens and raw tokens [i.e: HTML,XML,Raw text...].
|
||||
* According to the PHP language reference manual
|
||||
* When PHP parses a file, it looks for opening and closing tags, which tell PHP
|
||||
* to start and stop interpreting the code between them. Parsing in this manner allows
|
||||
* PHP to be embedded in all sorts of different documents, as everything outside of a pair
|
||||
* of opening and closing tags is ignored by the PHP parser. Most of the time you will see
|
||||
* PHP embedded in HTML documents, as in this example.
|
||||
* <?php echo 'While this is going to be parsed.'; ?>
|
||||
* <p>This will also be ignored.</p>
|
||||
* You can also use more advanced structures:
|
||||
* Example #1 Advanced escaping
|
||||
* <?php
|
||||
* if ($expression) {
|
||||
* ?>
|
||||
* <strong>This is true.</strong>
|
||||
* <?php
|
||||
* } else {
|
||||
* ?>
|
||||
* <strong>This is false.</strong>
|
||||
* <?php
|
||||
* }
|
||||
* ?>
|
||||
* This works as expected, because when PHP hits the ?> closing tags, it simply starts outputting
|
||||
* whatever it finds (except for an immediately following newline - see instruction separation ) until it hits
|
||||
* another opening tag. The example given here is contrived, of course, but for outputting large blocks of text
|
||||
* dropping out of PHP parsing mode is generally more efficient than sending all of the text through echo() or print().
|
||||
* There are four different pairs of opening and closing tags which can be used in PHP. Three of those, <?php ?>
|
||||
* <script language="php"> </script> and <? ?> are always available. The other two are short tags and ASP style
|
||||
* tags, and can be turned on and off from the php.ini configuration file. As such, while some people find short tags
|
||||
* and ASP style tags convenient, they are less portable, and generally not recommended.
|
||||
* Note:
|
||||
* Also note that if you are embedding PHP within XML or XHTML you will need to use the <?php ?> tags to remain
|
||||
* compliant with standards.
|
||||
* Example #2 PHP Opening and Closing Tags
|
||||
* 1. <?php echo 'if you want to serve XHTML or XML documents, do it like this'; ?>
|
||||
* 2. <script language="php">
|
||||
* echo 'some editors (like FrontPage) don\'t
|
||||
* like processing instructions';
|
||||
* </script>
|
||||
*
|
||||
* 3. <? echo 'this is the simplest, an SGML processing instruction'; ?>
|
||||
* <?= expression ?> This is a shortcut for "<? echo expression ?>"
|
||||
*/
|
||||
PH7_PRIVATE sxi32 PH7_TokenizeRawText(const char *zInput, sxu32 nLen, SySet *pOut) {
|
||||
const char *zEnd = &zInput[nLen];
|
||||
const char *zIn = zInput;
|
||||
const char *zCur, *zCurEnd;
|
||||
SyString sCtag = { 0, 0 }; /* Closing tag */
|
||||
SyToken sToken;
|
||||
SyString sDoc;
|
||||
sxu32 nLine;
|
||||
sxi32 iNest;
|
||||
sxi32 rc;
|
||||
/* Tokenize the input into PHP tokens and raw tokens */
|
||||
nLine = 1;
|
||||
zCur = zCurEnd = 0; /* Prevent compiler warning */
|
||||
sToken.pUserData = 0;
|
||||
iNest = 0;
|
||||
sDoc.nByte = 0;
|
||||
sDoc.zString = ""; /* cc warning */
|
||||
for(;;) {
|
||||
if(zIn >= zEnd) {
|
||||
/* End of input reached */
|
||||
break;
|
||||
}
|
||||
sToken.nLine = nLine;
|
||||
zCur = zIn;
|
||||
zCurEnd = 0;
|
||||
while(zIn < zEnd) {
|
||||