1
1
export * from './grammar' ;
2
-
3
- import * as $ from '@langtools/runtime' ;
4
- import * as G from './grammar' ;
5
- import { inspect } from 'util' ;
6
-
7
- const log = ( obj : unknown ) => console . log ( inspect ( obj , { colors : true , depth : Infinity } ) ) ;
8
-
9
- // npm run generate -w @langtools/parser-next && npx prettier packages/parser-next/grammar.ts --write && ts-node packages/parser-next/index.ts
10
-
11
- const code = `
12
- struct Transfer {
13
- seqno: Int as uint32;
14
- mode: Int as uint8;
15
- to: Address;
16
- amount: Int as coins;
17
- body: Cell?;
18
- }
19
-
20
- message(123) TransferMessage {
21
- signature: Slice;
22
- transfer: Transfer;
23
- }
24
-
25
- contract Wallet {
26
-
27
- seqno: Int as uint32 = 0;
28
- key: Int as uint256;
29
- walletId: Int as uint64;
30
-
31
- init(key: Int, walletId: Int) {
32
- self.key = key;
33
- self.walletId = walletId;
34
- }
35
-
36
- receive("Deploy") {
37
- // Do nothing
38
- }
39
-
40
- receive(msg: TransferMessage) {
41
-
42
- // Check Signature
43
- let op_hash: Int = msg.transfer.toCell().hash();
44
- require(checkSignature(op_hash, msg.signature, self.key), "Invalid signature");
45
- require(msg.transfer.seqno == self.seqno, "Invalid seqno");
46
-
47
- // Increment seqno
48
- self.seqno = self.seqno + 1;
49
-
50
- // Send message
51
- send(SendParameters{value: msg.transfer.amount, to: msg.transfer.to, mode: msg.transfer.mode, body: msg.transfer.body});
52
- }
53
-
54
- receive(msg: Slice) {
55
- self.seqno = self.seqno + 1;
56
- }
57
-
58
- receive() {
59
- self.seqno = self.seqno + 1;
60
- }
61
-
62
- receive("notify") {
63
- self.seqno = self.seqno + 1;
64
- }
65
-
66
- receive("你好ж") {
67
- self.seqno = self.seqno + 1;
68
- }
69
-
70
- receive("duplicate") {
71
- // Create new wallet
72
- let walletInit: StateInit = initOf Wallet(self.key, self.walletId + 1);
73
- }
74
-
75
- bounced(msg: Slice) {
76
- // TODO: Handle
77
- }
78
-
79
- get fun publicKey(): Int {
80
- return self.key;
81
- }
82
-
83
- get fun walletId(): Int {
84
- return self.walletId;
85
- }
86
-
87
- get fun seqno(): Int {
88
- return self.seqno;
89
- }
90
- }
91
- ` ;
92
-
93
- const ast = $ . parse ( $ . left ( $ . right (
94
- $ . star ( G . space$noSkip ) ,
95
-
96
- G . Module ,
97
- ) , $ . eof ) , code ) ;
98
-
99
- log ( ast ) ;
100
2
0 commit comments