parse negative constants
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
func rule110_step[state: Array] : Array
|
func rule110_step[state: Array] : void
|
||||||
new_state := []
|
new_state := []
|
||||||
|
|
||||||
for i in 0..state->size
|
for i in 0..state->size
|
||||||
@@ -12,7 +12,8 @@ func rule110_step[state: Array] : Array
|
|||||||
|
|
||||||
array.push(new_state, !((!left && !center && !right) || (left && !center && !right) || (left && center && right)))
|
array.push(new_state, !((!left && !center && !right) || (left && !center && !right) || (left && center && right)))
|
||||||
|
|
||||||
return new_state
|
mem.copy(new_state->data, state->data, state->size * 8)
|
||||||
|
array.free(new_state)
|
||||||
|
|
||||||
func print_state[state: Array]: void
|
func print_state[state: Array]: void
|
||||||
for i in 0..state->size
|
for i in 0..state->size
|
||||||
@@ -32,7 +33,7 @@ func main[] : i64
|
|||||||
|
|
||||||
print_state(state)
|
print_state(state)
|
||||||
for i in 0..SIZE
|
for i in 0..SIZE
|
||||||
state = rule110_step(state)
|
rule110_step(state)
|
||||||
print_state(state)
|
print_state(state)
|
||||||
|
|
||||||
array.free(state)
|
array.free(state)
|
||||||
|
|||||||
@@ -285,7 +285,7 @@ _builtin_environ:
|
|||||||
emit!(&mut self.output, " mov QWORD [rbp-{}], {}", offset, reg);
|
emit!(&mut self.output, " mov QWORD [rbp-{}], {}", offset, reg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Stmt::Const { name: _, value: _ } => {
|
Stmt::Const { .. } => {
|
||||||
// handled in SymbolTable
|
// handled in SymbolTable
|
||||||
}
|
}
|
||||||
Stmt::Block(statements) => {
|
Stmt::Block(statements) => {
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ pub enum Stmt {
|
|||||||
Const {
|
Const {
|
||||||
name: Token,
|
name: Token,
|
||||||
value: Token,
|
value: Token,
|
||||||
|
neg: bool,
|
||||||
},
|
},
|
||||||
Block(Vec<Stmt>),
|
Block(Vec<Stmt>),
|
||||||
If {
|
If {
|
||||||
@@ -271,8 +272,9 @@ impl Parser {
|
|||||||
fn const_declaration(&mut self) -> Result<Stmt, ZernError> {
|
fn const_declaration(&mut self) -> Result<Stmt, ZernError> {
|
||||||
let name = self.consume(TokenType::Identifier, "expected const name")?;
|
let name = self.consume(TokenType::Identifier, "expected const name")?;
|
||||||
self.consume(TokenType::Equal, "expected '=' after const name")?;
|
self.consume(TokenType::Equal, "expected '=' after const name")?;
|
||||||
|
let neg = self.match_token(&[TokenType::Minus]);
|
||||||
let value = self.consume(TokenType::IntLiteral, "expected a number after '='")?;
|
let value = self.consume(TokenType::IntLiteral, "expected a number after '='")?;
|
||||||
Ok(Stmt::Const { name, value })
|
Ok(Stmt::Const { name, value, neg })
|
||||||
}
|
}
|
||||||
|
|
||||||
fn extern_declaration(&mut self) -> Result<Stmt, ZernError> {
|
fn extern_declaration(&mut self) -> Result<Stmt, ZernError> {
|
||||||
|
|||||||
@@ -1,393 +1,406 @@
|
|||||||
const S_IFDIR = 0o040000
|
const STDIN = 0
|
||||||
const S_IFMT = 0o170000
|
const STDOUT = 1
|
||||||
const PROT_READ = 1
|
|
||||||
const PROT_WRITE = 2
|
|
||||||
const MAP_PRIVATE = 2
|
|
||||||
const MAP_ANONYMOUS = 32
|
|
||||||
const O_RDONLY = 0
|
|
||||||
const O_WRONLY = 1
|
|
||||||
const O_CREAT = 64
|
|
||||||
const O_TRUNC = 512
|
|
||||||
const SEEK_SET = 0
|
|
||||||
const SEEK_END = 2
|
|
||||||
|
|
||||||
const SYS_read = 0
|
const SIGABRT = 6
|
||||||
const SYS_write = 1
|
|
||||||
const SYS_open = 2
|
const AT_FDCWD = -100
|
||||||
const SYS_close = 3
|
|
||||||
const SYS_stat = 4
|
const S_IFDIR = 0o040000
|
||||||
const SYS_fstat = 5
|
const S_IFMT = 0o170000
|
||||||
const SYS_lstat = 6
|
|
||||||
const SYS_poll = 7
|
const PROT_READ = 1
|
||||||
const SYS_lseek = 8
|
const PROT_WRITE = 2
|
||||||
const SYS_mmap = 9
|
|
||||||
const SYS_mprotect = 10
|
const MAP_PRIVATE = 2
|
||||||
const SYS_munmap = 11
|
const MAP_ANONYMOUS = 32
|
||||||
const SYS_brk = 12
|
|
||||||
const SYS_rt_sigaction = 13
|
const O_RDONLY = 0
|
||||||
const SYS_rt_sigprocmask = 14
|
const O_WRONLY = 1
|
||||||
const SYS_rt_sigreturn = 15
|
const O_CREAT = 64
|
||||||
const SYS_ioctl = 16
|
const O_TRUNC = 512
|
||||||
const SYS_pread64 = 17
|
|
||||||
const SYS_pwrite64 = 18
|
const SEEK_SET = 0
|
||||||
const SYS_readv = 19
|
const SEEK_END = 2
|
||||||
const SYS_writev = 20
|
|
||||||
const SYS_access = 21
|
const F_OK = 0
|
||||||
const SYS_pipe = 22
|
|
||||||
const SYS_select = 23
|
const SYS_read = 0
|
||||||
const SYS_sched_yield = 24
|
const SYS_write = 1
|
||||||
const SYS_mremap = 25
|
const SYS_open = 2
|
||||||
const SYS_msync = 26
|
const SYS_close = 3
|
||||||
const SYS_mincore = 27
|
const SYS_stat = 4
|
||||||
const SYS_madvise = 28
|
const SYS_fstat = 5
|
||||||
const SYS_shmget = 29
|
const SYS_lstat = 6
|
||||||
const SYS_shmat = 30
|
const SYS_poll = 7
|
||||||
const SYS_shmctl = 31
|
const SYS_lseek = 8
|
||||||
const SYS_dup = 32
|
const SYS_mmap = 9
|
||||||
const SYS_dup2 = 33
|
const SYS_mprotect = 10
|
||||||
const SYS_pause = 34
|
const SYS_munmap = 11
|
||||||
const SYS_nanosleep = 35
|
const SYS_brk = 12
|
||||||
const SYS_getitimer = 36
|
const SYS_rt_sigaction = 13
|
||||||
const SYS_alarm = 37
|
const SYS_rt_sigprocmask = 14
|
||||||
const SYS_setitimer = 38
|
const SYS_rt_sigreturn = 15
|
||||||
const SYS_getpid = 39
|
const SYS_ioctl = 16
|
||||||
const SYS_sendfile = 40
|
const SYS_pread64 = 17
|
||||||
const SYS_socket = 41
|
const SYS_pwrite64 = 18
|
||||||
const SYS_connect = 42
|
const SYS_readv = 19
|
||||||
const SYS_accept = 43
|
const SYS_writev = 20
|
||||||
const SYS_sendto = 44
|
const SYS_access = 21
|
||||||
const SYS_recvfrom = 45
|
const SYS_pipe = 22
|
||||||
const SYS_sendmsg = 46
|
const SYS_select = 23
|
||||||
const SYS_recvmsg = 47
|
const SYS_sched_yield = 24
|
||||||
const SYS_shutdown = 48
|
const SYS_mremap = 25
|
||||||
const SYS_bind = 49
|
const SYS_msync = 26
|
||||||
const SYS_listen = 50
|
const SYS_mincore = 27
|
||||||
const SYS_getsockname = 51
|
const SYS_madvise = 28
|
||||||
const SYS_getpeername = 52
|
const SYS_shmget = 29
|
||||||
const SYS_socketpair = 53
|
const SYS_shmat = 30
|
||||||
const SYS_setsockopt = 54
|
const SYS_shmctl = 31
|
||||||
const SYS_getsockopt = 55
|
const SYS_dup = 32
|
||||||
const SYS_clone = 56
|
const SYS_dup2 = 33
|
||||||
const SYS_fork = 57
|
const SYS_pause = 34
|
||||||
const SYS_vfork = 58
|
const SYS_nanosleep = 35
|
||||||
const SYS_execve = 59
|
const SYS_getitimer = 36
|
||||||
const SYS_exit = 60
|
const SYS_alarm = 37
|
||||||
const SYS_wait4 = 61
|
const SYS_setitimer = 38
|
||||||
const SYS_kill = 62
|
const SYS_getpid = 39
|
||||||
const SYS_uname = 63
|
const SYS_sendfile = 40
|
||||||
const SYS_semget = 64
|
const SYS_socket = 41
|
||||||
const SYS_semop = 65
|
const SYS_connect = 42
|
||||||
const SYS_semctl = 66
|
const SYS_accept = 43
|
||||||
const SYS_shmdt = 67
|
const SYS_sendto = 44
|
||||||
const SYS_msgget = 68
|
const SYS_recvfrom = 45
|
||||||
const SYS_msgsnd = 69
|
const SYS_sendmsg = 46
|
||||||
const SYS_msgrcv = 70
|
const SYS_recvmsg = 47
|
||||||
const SYS_msgctl = 71
|
const SYS_shutdown = 48
|
||||||
const SYS_fcntl = 72
|
const SYS_bind = 49
|
||||||
const SYS_flock = 73
|
const SYS_listen = 50
|
||||||
const SYS_fsync = 74
|
const SYS_getsockname = 51
|
||||||
const SYS_fdatasync = 75
|
const SYS_getpeername = 52
|
||||||
const SYS_truncate = 76
|
const SYS_socketpair = 53
|
||||||
const SYS_ftruncate = 77
|
const SYS_setsockopt = 54
|
||||||
const SYS_getdents = 78
|
const SYS_getsockopt = 55
|
||||||
const SYS_getcwd = 79
|
const SYS_clone = 56
|
||||||
const SYS_chdir = 80
|
const SYS_fork = 57
|
||||||
const SYS_fchdir = 81
|
const SYS_vfork = 58
|
||||||
const SYS_rename = 82
|
const SYS_execve = 59
|
||||||
const SYS_mkdir = 83
|
const SYS_exit = 60
|
||||||
const SYS_rmdir = 84
|
const SYS_wait4 = 61
|
||||||
const SYS_creat = 85
|
const SYS_kill = 62
|
||||||
const SYS_link = 86
|
const SYS_uname = 63
|
||||||
const SYS_unlink = 87
|
const SYS_semget = 64
|
||||||
const SYS_symlink = 88
|
const SYS_semop = 65
|
||||||
const SYS_readlink = 89
|
const SYS_semctl = 66
|
||||||
const SYS_chmod = 90
|
const SYS_shmdt = 67
|
||||||
const SYS_fchmod = 91
|
const SYS_msgget = 68
|
||||||
const SYS_chown = 92
|
const SYS_msgsnd = 69
|
||||||
const SYS_fchown = 93
|
const SYS_msgrcv = 70
|
||||||
const SYS_lchown = 94
|
const SYS_msgctl = 71
|
||||||
const SYS_umask = 95
|
const SYS_fcntl = 72
|
||||||
const SYS_gettimeofday = 96
|
const SYS_flock = 73
|
||||||
const SYS_getrlimit = 97
|
const SYS_fsync = 74
|
||||||
const SYS_getrusage = 98
|
const SYS_fdatasync = 75
|
||||||
const SYS_sysinfo = 99
|
const SYS_truncate = 76
|
||||||
const SYS_times = 100
|
const SYS_ftruncate = 77
|
||||||
const SYS_ptrace = 101
|
const SYS_getdents = 78
|
||||||
const SYS_getuid = 102
|
const SYS_getcwd = 79
|
||||||
const SYS_syslog = 103
|
const SYS_chdir = 80
|
||||||
const SYS_getgid = 104
|
const SYS_fchdir = 81
|
||||||
const SYS_setuid = 105
|
const SYS_rename = 82
|
||||||
const SYS_setgid = 106
|
const SYS_mkdir = 83
|
||||||
const SYS_geteuid = 107
|
const SYS_rmdir = 84
|
||||||
const SYS_getegid = 108
|
const SYS_creat = 85
|
||||||
const SYS_setpgid = 109
|
const SYS_link = 86
|
||||||
const SYS_getppid = 110
|
const SYS_unlink = 87
|
||||||
const SYS_getpgrp = 111
|
const SYS_symlink = 88
|
||||||
const SYS_setsid = 112
|
const SYS_readlink = 89
|
||||||
const SYS_setreuid = 113
|
const SYS_chmod = 90
|
||||||
const SYS_setregid = 114
|
const SYS_fchmod = 91
|
||||||
const SYS_getgroups = 115
|
const SYS_chown = 92
|
||||||
const SYS_setgroups = 116
|
const SYS_fchown = 93
|
||||||
const SYS_setresuid = 117
|
const SYS_lchown = 94
|
||||||
const SYS_getresuid = 118
|
const SYS_umask = 95
|
||||||
const SYS_setresgid = 119
|
const SYS_gettimeofday = 96
|
||||||
const SYS_getresgid = 120
|
const SYS_getrlimit = 97
|
||||||
const SYS_getpgid = 121
|
const SYS_getrusage = 98
|
||||||
const SYS_setfsuid = 122
|
const SYS_sysinfo = 99
|
||||||
const SYS_setfsgid = 123
|
const SYS_times = 100
|
||||||
const SYS_getsid = 124
|
const SYS_ptrace = 101
|
||||||
const SYS_capget = 125
|
const SYS_getuid = 102
|
||||||
const SYS_capset = 126
|
const SYS_syslog = 103
|
||||||
const SYS_rt_sigpending = 127
|
const SYS_getgid = 104
|
||||||
const SYS_rt_sigtimedwait = 128
|
const SYS_setuid = 105
|
||||||
const SYS_rt_sigqueueinfo = 129
|
const SYS_setgid = 106
|
||||||
const SYS_rt_sigsuspend = 130
|
const SYS_geteuid = 107
|
||||||
const SYS_sigaltstack = 131
|
const SYS_getegid = 108
|
||||||
const SYS_utime = 132
|
const SYS_setpgid = 109
|
||||||
const SYS_mknod = 133
|
const SYS_getppid = 110
|
||||||
const SYS_uselib = 134
|
const SYS_getpgrp = 111
|
||||||
const SYS_personality = 135
|
const SYS_setsid = 112
|
||||||
const SYS_ustat = 136
|
const SYS_setreuid = 113
|
||||||
const SYS_statfs = 137
|
const SYS_setregid = 114
|
||||||
const SYS_fstatfs = 138
|
const SYS_getgroups = 115
|
||||||
const SYS_sysfs = 139
|
const SYS_setgroups = 116
|
||||||
const SYS_getpriority = 140
|
const SYS_setresuid = 117
|
||||||
const SYS_setpriority = 141
|
const SYS_getresuid = 118
|
||||||
const SYS_sched_setparam = 142
|
const SYS_setresgid = 119
|
||||||
const SYS_sched_getparam = 143
|
const SYS_getresgid = 120
|
||||||
const SYS_sched_setscheduler = 144
|
const SYS_getpgid = 121
|
||||||
const SYS_sched_getscheduler = 145
|
const SYS_setfsuid = 122
|
||||||
const SYS_sched_get_priority_max = 146
|
const SYS_setfsgid = 123
|
||||||
const SYS_sched_get_priority_min = 147
|
const SYS_getsid = 124
|
||||||
const SYS_sched_rr_get_interval = 148
|
const SYS_capget = 125
|
||||||
const SYS_mlock = 149
|
const SYS_capset = 126
|
||||||
const SYS_munlock = 150
|
const SYS_rt_sigpending = 127
|
||||||
const SYS_mlockall = 151
|
const SYS_rt_sigtimedwait = 128
|
||||||
const SYS_munlockall = 152
|
const SYS_rt_sigqueueinfo = 129
|
||||||
const SYS_vhangup = 153
|
const SYS_rt_sigsuspend = 130
|
||||||
const SYS_modify_ldt = 154
|
const SYS_sigaltstack = 131
|
||||||
const SYS_pivot_root = 155
|
const SYS_utime = 132
|
||||||
const SYS__sysctl = 156
|
const SYS_mknod = 133
|
||||||
const SYS_prctl = 157
|
const SYS_uselib = 134
|
||||||
const SYS_arch_prctl = 158
|
const SYS_personality = 135
|
||||||
const SYS_adjtimex = 159
|
const SYS_ustat = 136
|
||||||
const SYS_setrlimit = 160
|
const SYS_statfs = 137
|
||||||
const SYS_chroot = 161
|
const SYS_fstatfs = 138
|
||||||
const SYS_sync = 162
|
const SYS_sysfs = 139
|
||||||
const SYS_acct = 163
|
const SYS_getpriority = 140
|
||||||
const SYS_settimeofday = 164
|
const SYS_setpriority = 141
|
||||||
const SYS_mount = 165
|
const SYS_sched_setparam = 142
|
||||||
const SYS_umount2 = 166
|
const SYS_sched_getparam = 143
|
||||||
const SYS_swapon = 167
|
const SYS_sched_setscheduler = 144
|
||||||
const SYS_swapoff = 168
|
const SYS_sched_getscheduler = 145
|
||||||
const SYS_reboot = 169
|
const SYS_sched_get_priority_max = 146
|
||||||
const SYS_sethostname = 170
|
const SYS_sched_get_priority_min = 147
|
||||||
const SYS_setdomainname = 171
|
const SYS_sched_rr_get_interval = 148
|
||||||
const SYS_iopl = 172
|
const SYS_mlock = 149
|
||||||
const SYS_ioperm = 173
|
const SYS_munlock = 150
|
||||||
const SYS_create_module = 174
|
const SYS_mlockall = 151
|
||||||
const SYS_init_module = 175
|
const SYS_munlockall = 152
|
||||||
const SYS_delete_module = 176
|
const SYS_vhangup = 153
|
||||||
const SYS_get_kernel_syms = 177
|
const SYS_modify_ldt = 154
|
||||||
const SYS_query_module = 178
|
const SYS_pivot_root = 155
|
||||||
const SYS_quotactl = 179
|
const SYS__sysctl = 156
|
||||||
const SYS_nfsservctl = 180
|
const SYS_prctl = 157
|
||||||
const SYS_getpmsg = 181
|
const SYS_arch_prctl = 158
|
||||||
const SYS_putpmsg = 182
|
const SYS_adjtimex = 159
|
||||||
const SYS_afs_syscall = 183
|
const SYS_setrlimit = 160
|
||||||
const SYS_tuxcall = 184
|
const SYS_chroot = 161
|
||||||
const SYS_security = 185
|
const SYS_sync = 162
|
||||||
const SYS_gettid = 186
|
const SYS_acct = 163
|
||||||
const SYS_readahead = 187
|
const SYS_settimeofday = 164
|
||||||
const SYS_setxattr = 188
|
const SYS_mount = 165
|
||||||
const SYS_lsetxattr = 189
|
const SYS_umount2 = 166
|
||||||
const SYS_fsetxattr = 190
|
const SYS_swapon = 167
|
||||||
const SYS_getxattr = 191
|
const SYS_swapoff = 168
|
||||||
const SYS_lgetxattr = 192
|
const SYS_reboot = 169
|
||||||
const SYS_fgetxattr = 193
|
const SYS_sethostname = 170
|
||||||
const SYS_listxattr = 194
|
const SYS_setdomainname = 171
|
||||||
const SYS_llistxattr = 195
|
const SYS_iopl = 172
|
||||||
const SYS_flistxattr = 196
|
const SYS_ioperm = 173
|
||||||
const SYS_removexattr = 197
|
const SYS_create_module = 174
|
||||||
const SYS_lremovexattr = 198
|
const SYS_init_module = 175
|
||||||
const SYS_fremovexattr = 199
|
const SYS_delete_module = 176
|
||||||
const SYS_tkill = 200
|
const SYS_get_kernel_syms = 177
|
||||||
const SYS_time = 201
|
const SYS_query_module = 178
|
||||||
const SYS_futex = 202
|
const SYS_quotactl = 179
|
||||||
const SYS_sched_setaffinity = 203
|
const SYS_nfsservctl = 180
|
||||||
const SYS_sched_getaffinity = 204
|
const SYS_getpmsg = 181
|
||||||
const SYS_set_thread_area = 205
|
const SYS_putpmsg = 182
|
||||||
const SYS_io_setup = 206
|
const SYS_afs_syscall = 183
|
||||||
const SYS_io_destroy = 207
|
const SYS_tuxcall = 184
|
||||||
const SYS_io_getevents = 208
|
const SYS_security = 185
|
||||||
const SYS_io_submit = 209
|
const SYS_gettid = 186
|
||||||
const SYS_io_cancel = 210
|
const SYS_readahead = 187
|
||||||
const SYS_get_thread_area = 211
|
const SYS_setxattr = 188
|
||||||
const SYS_lookup_dcookie = 212
|
const SYS_lsetxattr = 189
|
||||||
const SYS_epoll_create = 213
|
const SYS_fsetxattr = 190
|
||||||
const SYS_epoll_ctl_old = 214
|
const SYS_getxattr = 191
|
||||||
const SYS_epoll_wait_old = 215
|
const SYS_lgetxattr = 192
|
||||||
const SYS_remap_file_pages = 216
|
const SYS_fgetxattr = 193
|
||||||
const SYS_getdents64 = 217
|
const SYS_listxattr = 194
|
||||||
const SYS_set_tid_address = 218
|
const SYS_llistxattr = 195
|
||||||
const SYS_restart_syscall = 219
|
const SYS_flistxattr = 196
|
||||||
const SYS_semtimedop = 220
|
const SYS_removexattr = 197
|
||||||
const SYS_fadvise64 = 221
|
const SYS_lremovexattr = 198
|
||||||
const SYS_timer_create = 222
|
const SYS_fremovexattr = 199
|
||||||
const SYS_timer_settime = 223
|
const SYS_tkill = 200
|
||||||
const SYS_timer_gettime = 224
|
const SYS_time = 201
|
||||||
const SYS_timer_getoverrun = 225
|
const SYS_futex = 202
|
||||||
const SYS_timer_delete = 226
|
const SYS_sched_setaffinity = 203
|
||||||
const SYS_clock_settime = 227
|
const SYS_sched_getaffinity = 204
|
||||||
const SYS_clock_gettime = 228
|
const SYS_set_thread_area = 205
|
||||||
const SYS_clock_getres = 229
|
const SYS_io_setup = 206
|
||||||
const SYS_clock_nanosleep = 230
|
const SYS_io_destroy = 207
|
||||||
const SYS_exit_group = 231
|
const SYS_io_getevents = 208
|
||||||
const SYS_epoll_wait = 232
|
const SYS_io_submit = 209
|
||||||
const SYS_epoll_ctl = 233
|
const SYS_io_cancel = 210
|
||||||
const SYS_tgkill = 234
|
const SYS_get_thread_area = 211
|
||||||
const SYS_utimes = 235
|
const SYS_lookup_dcookie = 212
|
||||||
const SYS_vserver = 236
|
const SYS_epoll_create = 213
|
||||||
const SYS_mbind = 237
|
const SYS_epoll_ctl_old = 214
|
||||||
const SYS_set_mempolicy = 238
|
const SYS_epoll_wait_old = 215
|
||||||
const SYS_get_mempolicy = 239
|
const SYS_remap_file_pages = 216
|
||||||
const SYS_mq_open = 240
|
const SYS_getdents64 = 217
|
||||||
const SYS_mq_unlink = 241
|
const SYS_set_tid_address = 218
|
||||||
const SYS_mq_timedsend = 242
|
const SYS_restart_syscall = 219
|
||||||
const SYS_mq_timedreceive = 243
|
const SYS_semtimedop = 220
|
||||||
const SYS_mq_notify = 244
|
const SYS_fadvise64 = 221
|
||||||
const SYS_mq_getsetattr = 245
|
const SYS_timer_create = 222
|
||||||
const SYS_kexec_load = 246
|
const SYS_timer_settime = 223
|
||||||
const SYS_waitid = 247
|
const SYS_timer_gettime = 224
|
||||||
const SYS_add_key = 248
|
const SYS_timer_getoverrun = 225
|
||||||
const SYS_request_key = 249
|
const SYS_timer_delete = 226
|
||||||
const SYS_keyctl = 250
|
const SYS_clock_settime = 227
|
||||||
const SYS_ioprio_set = 251
|
const SYS_clock_gettime = 228
|
||||||
const SYS_ioprio_get = 252
|
const SYS_clock_getres = 229
|
||||||
const SYS_inotify_init = 253
|
const SYS_clock_nanosleep = 230
|
||||||
const SYS_inotify_add_watch = 254
|
const SYS_exit_group = 231
|
||||||
const SYS_inotify_rm_watch = 255
|
const SYS_epoll_wait = 232
|
||||||
const SYS_migrate_pages = 256
|
const SYS_epoll_ctl = 233
|
||||||
const SYS_openat = 257
|
const SYS_tgkill = 234
|
||||||
const SYS_mkdirat = 258
|
const SYS_utimes = 235
|
||||||
const SYS_mknodat = 259
|
const SYS_vserver = 236
|
||||||
const SYS_fchownat = 260
|
const SYS_mbind = 237
|
||||||
const SYS_futimesat = 261
|
const SYS_set_mempolicy = 238
|
||||||
const SYS_newfstatat = 262
|
const SYS_get_mempolicy = 239
|
||||||
const SYS_unlinkat = 263
|
const SYS_mq_open = 240
|
||||||
const SYS_renameat = 264
|
const SYS_mq_unlink = 241
|
||||||
const SYS_linkat = 265
|
const SYS_mq_timedsend = 242
|
||||||
const SYS_symlinkat = 266
|
const SYS_mq_timedreceive = 243
|
||||||
const SYS_readlinkat = 267
|
const SYS_mq_notify = 244
|
||||||
const SYS_fchmodat = 268
|
const SYS_mq_getsetattr = 245
|
||||||
const SYS_faccessat = 269
|
const SYS_kexec_load = 246
|
||||||
const SYS_pselect6 = 270
|
const SYS_waitid = 247
|
||||||
const SYS_ppoll = 271
|
const SYS_add_key = 248
|
||||||
const SYS_unshare = 272
|
const SYS_request_key = 249
|
||||||
const SYS_set_robust_list = 273
|
const SYS_keyctl = 250
|
||||||
const SYS_get_robust_list = 274
|
const SYS_ioprio_set = 251
|
||||||
const SYS_splice = 275
|
const SYS_ioprio_get = 252
|
||||||
const SYS_tee = 276
|
const SYS_inotify_init = 253
|
||||||
const SYS_sync_file_range = 277
|
const SYS_inotify_add_watch = 254
|
||||||
const SYS_vmsplice = 278
|
const SYS_inotify_rm_watch = 255
|
||||||
const SYS_move_pages = 279
|
const SYS_migrate_pages = 256
|
||||||
const SYS_utimensat = 280
|
const SYS_openat = 257
|
||||||
const SYS_epoll_pwait = 281
|
const SYS_mkdirat = 258
|
||||||
const SYS_signalfd = 282
|
const SYS_mknodat = 259
|
||||||
const SYS_timerfd_create = 283
|
const SYS_fchownat = 260
|
||||||
const SYS_eventfd = 284
|
const SYS_futimesat = 261
|
||||||
const SYS_fallocate = 285
|
const SYS_newfstatat = 262
|
||||||
const SYS_timerfd_settime = 286
|
const SYS_unlinkat = 263
|
||||||
const SYS_timerfd_gettime = 287
|
const SYS_renameat = 264
|
||||||
const SYS_accept4 = 288
|
const SYS_linkat = 265
|
||||||
const SYS_signalfd4 = 289
|
const SYS_symlinkat = 266
|
||||||
const SYS_eventfd2 = 290
|
const SYS_readlinkat = 267
|
||||||
const SYS_epoll_create1 = 291
|
const SYS_fchmodat = 268
|
||||||
const SYS_dup3 = 292
|
const SYS_faccessat = 269
|
||||||
const SYS_pipe2 = 293
|
const SYS_pselect6 = 270
|
||||||
const SYS_inotify_init1 = 294
|
const SYS_ppoll = 271
|
||||||
const SYS_preadv = 295
|
const SYS_unshare = 272
|
||||||
const SYS_pwritev = 296
|
const SYS_set_robust_list = 273
|
||||||
const SYS_rt_tgsigqueueinfo = 297
|
const SYS_get_robust_list = 274
|
||||||
const SYS_perf_event_open = 298
|
const SYS_splice = 275
|
||||||
const SYS_recvmmsg = 299
|
const SYS_tee = 276
|
||||||
const SYS_fanotify_init = 300
|
const SYS_sync_file_range = 277
|
||||||
const SYS_fanotify_mark = 301
|
const SYS_vmsplice = 278
|
||||||
const SYS_prlimit64 = 302
|
const SYS_move_pages = 279
|
||||||
const SYS_name_to_handle_at = 303
|
const SYS_utimensat = 280
|
||||||
const SYS_open_by_handle_at = 304
|
const SYS_epoll_pwait = 281
|
||||||
const SYS_clock_adjtime = 305
|
const SYS_signalfd = 282
|
||||||
const SYS_syncfs = 306
|
const SYS_timerfd_create = 283
|
||||||
const SYS_sendmmsg = 307
|
const SYS_eventfd = 284
|
||||||
const SYS_setns = 308
|
const SYS_fallocate = 285
|
||||||
const SYS_getcpu = 309
|
const SYS_timerfd_settime = 286
|
||||||
const SYS_process_vm_readv = 310
|
const SYS_timerfd_gettime = 287
|
||||||
const SYS_process_vm_writev = 311
|
const SYS_accept4 = 288
|
||||||
const SYS_kcmp = 312
|
const SYS_signalfd4 = 289
|
||||||
const SYS_finit_module = 313
|
const SYS_eventfd2 = 290
|
||||||
const SYS_sched_setattr = 314
|
const SYS_epoll_create1 = 291
|
||||||
const SYS_sched_getattr = 315
|
const SYS_dup3 = 292
|
||||||
const SYS_renameat2 = 316
|
const SYS_pipe2 = 293
|
||||||
const SYS_seccomp = 317
|
const SYS_inotify_init1 = 294
|
||||||
const SYS_getrandom = 318
|
const SYS_preadv = 295
|
||||||
const SYS_memfd_create = 319
|
const SYS_pwritev = 296
|
||||||
const SYS_kexec_file_load = 320
|
const SYS_rt_tgsigqueueinfo = 297
|
||||||
const SYS_bpf = 321
|
const SYS_perf_event_open = 298
|
||||||
const SYS_execveat = 322
|
const SYS_recvmmsg = 299
|
||||||
const SYS_userfaultfd = 323
|
const SYS_fanotify_init = 300
|
||||||
const SYS_membarrier = 324
|
const SYS_fanotify_mark = 301
|
||||||
const SYS_mlock2 = 325
|
const SYS_prlimit64 = 302
|
||||||
const SYS_copy_file_range = 326
|
const SYS_name_to_handle_at = 303
|
||||||
const SYS_preadv2 = 327
|
const SYS_open_by_handle_at = 304
|
||||||
const SYS_pwritev2 = 328
|
const SYS_clock_adjtime = 305
|
||||||
const SYS_pkey_mprotect = 329
|
const SYS_syncfs = 306
|
||||||
const SYS_pkey_alloc = 330
|
const SYS_sendmmsg = 307
|
||||||
const SYS_pkey_free = 331
|
const SYS_setns = 308
|
||||||
const SYS_statx = 332
|
const SYS_getcpu = 309
|
||||||
const SYS_io_pgetevents = 333
|
const SYS_process_vm_readv = 310
|
||||||
const SYS_rseq = 334
|
const SYS_process_vm_writev = 311
|
||||||
const SYS_uretprobe = 335
|
const SYS_kcmp = 312
|
||||||
const SYS_pidfd_send_signal = 424
|
const SYS_finit_module = 313
|
||||||
const SYS_io_uring_setup = 425
|
const SYS_sched_setattr = 314
|
||||||
const SYS_io_uring_enter = 426
|
const SYS_sched_getattr = 315
|
||||||
const SYS_io_uring_register = 427
|
const SYS_renameat2 = 316
|
||||||
const SYS_open_tree = 428
|
const SYS_seccomp = 317
|
||||||
const SYS_move_mount = 429
|
const SYS_getrandom = 318
|
||||||
const SYS_fsopen = 430
|
const SYS_memfd_create = 319
|
||||||
const SYS_fsconfig = 431
|
const SYS_kexec_file_load = 320
|
||||||
const SYS_fsmount = 432
|
const SYS_bpf = 321
|
||||||
const SYS_fspick = 433
|
const SYS_execveat = 322
|
||||||
const SYS_pidfd_open = 434
|
const SYS_userfaultfd = 323
|
||||||
const SYS_clone3 = 435
|
const SYS_membarrier = 324
|
||||||
const SYS_close_range = 436
|
const SYS_mlock2 = 325
|
||||||
const SYS_openat2 = 437
|
const SYS_copy_file_range = 326
|
||||||
const SYS_pidfd_getfd = 438
|
const SYS_preadv2 = 327
|
||||||
const SYS_faccessat2 = 439
|
const SYS_pwritev2 = 328
|
||||||
const SYS_process_madvise = 440
|
const SYS_pkey_mprotect = 329
|
||||||
const SYS_epoll_pwait2 = 441
|
const SYS_pkey_alloc = 330
|
||||||
const SYS_mount_setattr = 442
|
const SYS_pkey_free = 331
|
||||||
const SYS_quotactl_fd = 443
|
const SYS_statx = 332
|
||||||
const SYS_landlock_create_ruleset = 444
|
const SYS_io_pgetevents = 333
|
||||||
const SYS_landlock_add_rule = 445
|
const SYS_rseq = 334
|
||||||
const SYS_landlock_restrict_self = 446
|
const SYS_uretprobe = 335
|
||||||
const SYS_memfd_secret = 447
|
const SYS_pidfd_send_signal = 424
|
||||||
const SYS_process_mrelease = 448
|
const SYS_io_uring_setup = 425
|
||||||
const SYS_futex_waitv = 449
|
const SYS_io_uring_enter = 426
|
||||||
const SYS_set_mempolicy_home_node = 450
|
const SYS_io_uring_register = 427
|
||||||
const SYS_cachestat = 451
|
const SYS_open_tree = 428
|
||||||
const SYS_fchmodat2 = 452
|
const SYS_move_mount = 429
|
||||||
const SYS_map_shadow_stack = 453
|
const SYS_fsopen = 430
|
||||||
const SYS_futex_wake = 454
|
const SYS_fsconfig = 431
|
||||||
const SYS_futex_wait = 455
|
const SYS_fsmount = 432
|
||||||
const SYS_futex_requeue = 456
|
const SYS_fspick = 433
|
||||||
const SYS_statmount = 457
|
const SYS_pidfd_open = 434
|
||||||
const SYS_listmount = 458
|
const SYS_clone3 = 435
|
||||||
const SYS_lsm_get_self_attr = 459
|
const SYS_close_range = 436
|
||||||
const SYS_lsm_set_self_attr = 460
|
const SYS_openat2 = 437
|
||||||
const SYS_lsm_list_modules = 461
|
const SYS_pidfd_getfd = 438
|
||||||
const SYS_mseal = 462
|
const SYS_faccessat2 = 439
|
||||||
const SYS_setxattrat = 463
|
const SYS_process_madvise = 440
|
||||||
const SYS_getxattrat = 464
|
const SYS_epoll_pwait2 = 441
|
||||||
const SYS_listxattrat = 465
|
const SYS_mount_setattr = 442
|
||||||
const SYS_removexattrat = 466
|
const SYS_quotactl_fd = 443
|
||||||
const SYS_open_tree_attr = 467
|
const SYS_landlock_create_ruleset = 444
|
||||||
|
const SYS_landlock_add_rule = 445
|
||||||
|
const SYS_landlock_restrict_self = 446
|
||||||
|
const SYS_memfd_secret = 447
|
||||||
|
const SYS_process_mrelease = 448
|
||||||
|
const SYS_futex_waitv = 449
|
||||||
|
const SYS_set_mempolicy_home_node = 450
|
||||||
|
const SYS_cachestat = 451
|
||||||
|
const SYS_fchmodat2 = 452
|
||||||
|
const SYS_map_shadow_stack = 453
|
||||||
|
const SYS_futex_wake = 454
|
||||||
|
const SYS_futex_wait = 455
|
||||||
|
const SYS_futex_requeue = 456
|
||||||
|
const SYS_statmount = 457
|
||||||
|
const SYS_listmount = 458
|
||||||
|
const SYS_lsm_get_self_attr = 459
|
||||||
|
const SYS_lsm_set_self_attr = 460
|
||||||
|
const SYS_lsm_list_modules = 461
|
||||||
|
const SYS_mseal = 462
|
||||||
|
const SYS_setxattrat = 463
|
||||||
|
const SYS_getxattrat = 464
|
||||||
|
const SYS_listxattrat = 465
|
||||||
|
const SYS_removexattrat = 466
|
||||||
|
const SYS_open_tree_attr = 467
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ const SOCK_STREAM = 1
|
|||||||
const SOCK_DGRAM = 2
|
const SOCK_DGRAM = 2
|
||||||
const SOL_SOCKET = 1
|
const SOL_SOCKET = 1
|
||||||
const SO_REUSEADDR = 2
|
const SO_REUSEADDR = 2
|
||||||
|
const SOMAXCONN = 128
|
||||||
|
|
||||||
const DNS_TYPE_A = 1
|
const DNS_TYPE_A = 1
|
||||||
const DNS_CLASS_IN = 1
|
const DNS_CLASS_IN = 1
|
||||||
@@ -25,7 +26,7 @@ func net.listen[packed_host: i64, port: i64] : i64, bool
|
|||||||
_builtin_syscall(SYS_close, s)
|
_builtin_syscall(SYS_close, s)
|
||||||
return -1, false
|
return -1, false
|
||||||
|
|
||||||
if _builtin_syscall(SYS_listen, s, 128) < 0
|
if _builtin_syscall(SYS_listen, s, SOMAXCONN) < 0
|
||||||
_builtin_syscall(SYS_close, s)
|
_builtin_syscall(SYS_close, s)
|
||||||
return -1, false
|
return -1, false
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ func panic[msg: str] : void
|
|||||||
io.print("PANIC: ")
|
io.print("PANIC: ")
|
||||||
io.println(msg)
|
io.println(msg)
|
||||||
// for gdb backtrace
|
// for gdb backtrace
|
||||||
_builtin_syscall(SYS_kill, os.getpid(), 6)
|
_builtin_syscall(SYS_kill, os.getpid(), SIGABRT)
|
||||||
os.exit(1)
|
os.exit(1)
|
||||||
|
|
||||||
const MEM_BLOCK_SIZE = 32
|
const MEM_BLOCK_SIZE = 32
|
||||||
@@ -332,7 +332,7 @@ func io.snprintf[..] : i64
|
|||||||
return n
|
return n
|
||||||
|
|
||||||
func io.print_sized[x: ptr, size: i64] : void
|
func io.print_sized[x: ptr, size: i64] : void
|
||||||
_builtin_syscall(SYS_write, 1, x, size)
|
_builtin_syscall(SYS_write, STDOUT, x, size)
|
||||||
|
|
||||||
func io.print[x: str] : void
|
func io.print[x: str] : void
|
||||||
io.print_sized(x as ptr, str.len(x))
|
io.print_sized(x as ptr, str.len(x))
|
||||||
@@ -367,7 +367,7 @@ func io.println_i64[x: i64] : void
|
|||||||
|
|
||||||
func io.read_char[] : u8
|
func io.read_char[] : u8
|
||||||
c := 0 as u8
|
c := 0 as u8
|
||||||
_builtin_syscall(SYS_read, 0, ^c, 1)
|
_builtin_syscall(SYS_read, STDIN, ^c, 1)
|
||||||
return c
|
return c
|
||||||
|
|
||||||
func io.read_line[] : str
|
func io.read_line[] : str
|
||||||
@@ -382,19 +382,19 @@ func io.read_line[] : str
|
|||||||
return s
|
return s
|
||||||
|
|
||||||
func io.file_exists[path: str] : bool
|
func io.file_exists[path: str] : bool
|
||||||
return _builtin_syscall(SYS_faccessat, -100, path, 0, 0) == 0
|
return _builtin_syscall(SYS_faccessat, AT_FDCWD, path, F_OK, 0) == 0
|
||||||
|
|
||||||
func io.is_a_directory[path: str] : bool
|
func io.is_a_directory[path: str] : bool
|
||||||
st := _stackalloc(256) // it has 21 mixed-size fields so ptr for now
|
st := _stackalloc(256) // it has 21 mixed-size fields so ptr for now
|
||||||
|
|
||||||
rc := _builtin_syscall(SYS_newfstatat, -100, path, st, 0)
|
rc := _builtin_syscall(SYS_newfstatat, AT_FDCWD, path, st, 0)
|
||||||
if rc != 0
|
if rc != 0
|
||||||
return false
|
return false
|
||||||
|
|
||||||
return (mem.read32(st + 24) & S_IFMT) == S_IFDIR
|
return (mem.read32(st + 24) & S_IFMT) == S_IFDIR
|
||||||
|
|
||||||
func io.read_text_file[path: str] : str, bool
|
func io.read_text_file[path: str] : str, bool
|
||||||
fd := _builtin_syscall(SYS_openat, -100, path, O_RDONLY, 0)
|
fd := _builtin_syscall(SYS_openat, AT_FDCWD, path, O_RDONLY, 0)
|
||||||
if fd < 0
|
if fd < 0
|
||||||
return 0 as str, false
|
return 0 as str, false
|
||||||
|
|
||||||
@@ -413,13 +413,13 @@ func io.read_text_file[path: str] : str, bool
|
|||||||
return buffer as str, true
|
return buffer as str, true
|
||||||
|
|
||||||
func io.read_binary_file[path: str] : Blob, bool
|
func io.read_binary_file[path: str] : Blob, bool
|
||||||
fd := _builtin_syscall(SYS_openat, -100, path, 0, 0)
|
fd := _builtin_syscall(SYS_openat, AT_FDCWD, path, O_RDONLY, 0)
|
||||||
if fd < 0
|
if fd < 0
|
||||||
return 0 as Blob, false
|
return 0 as Blob, false
|
||||||
|
|
||||||
buf := new* Blob
|
buf := new* Blob
|
||||||
buf->size = _builtin_syscall(SYS_lseek, fd, 0, 2)
|
buf->size = _builtin_syscall(SYS_lseek, fd, 0, SEEK_END)
|
||||||
_builtin_syscall(SYS_lseek, fd, 0, 0)
|
_builtin_syscall(SYS_lseek, fd, 0, SEEK_SET)
|
||||||
|
|
||||||
buf->data = mem.alloc(buf->size)
|
buf->data = mem.alloc(buf->size)
|
||||||
|
|
||||||
@@ -436,7 +436,7 @@ func io.write_file[path: str, content: str] : bool
|
|||||||
return io.write_binary_file(path, content as ptr, str.len(content))
|
return io.write_binary_file(path, content as ptr, str.len(content))
|
||||||
|
|
||||||
func io.write_binary_file[path: str, content: ptr, size: i64] : bool
|
func io.write_binary_file[path: str, content: ptr, size: i64] : bool
|
||||||
fd := _builtin_syscall(SYS_openat, -100, path, O_WRONLY|O_CREAT|O_TRUNC, 0o644)
|
fd := _builtin_syscall(SYS_openat, AT_FDCWD, path, O_WRONLY|O_CREAT|O_TRUNC, 0o644)
|
||||||
if fd < 0
|
if fd < 0
|
||||||
return false
|
return false
|
||||||
|
|
||||||
@@ -863,6 +863,13 @@ func array.free[xs: Array] : void
|
|||||||
mem.free(xs->data)
|
mem.free(xs->data)
|
||||||
mem.free(xs)
|
mem.free(xs)
|
||||||
|
|
||||||
|
func array.free_with_items[xs: Array] : void
|
||||||
|
if xs->data != 0
|
||||||
|
for i in 0..xs->size
|
||||||
|
mem.free(array.nth(xs, i))
|
||||||
|
mem.free(xs->data)
|
||||||
|
mem.free(xs)
|
||||||
|
|
||||||
func array.pop[xs: Array] : any
|
func array.pop[xs: Array] : any
|
||||||
if xs->size == 0
|
if xs->size == 0
|
||||||
panic("array.pop on empty array")
|
panic("array.pop on empty array")
|
||||||
@@ -1082,7 +1089,7 @@ func os.run_shell_command[command: str] : i64, bool
|
|||||||
return -(st & 0x7f), true
|
return -(st & 0x7f), true
|
||||||
|
|
||||||
func os.list_directory[path: str] : Array, bool
|
func os.list_directory[path: str] : Array, bool
|
||||||
fd := _builtin_syscall(SYS_openat, -100, path, O_RDONLY, 0)
|
fd := _builtin_syscall(SYS_openat, AT_FDCWD, path, O_RDONLY, 0)
|
||||||
if fd < 0
|
if fd < 0
|
||||||
return 0 as Array, false
|
return 0 as Array, false
|
||||||
|
|
||||||
@@ -1091,10 +1098,7 @@ func os.list_directory[path: str] : Array, bool
|
|||||||
while true
|
while true
|
||||||
n := _builtin_syscall(SYS_getdents64, fd, buf, 1024)
|
n := _builtin_syscall(SYS_getdents64, fd, buf, 1024)
|
||||||
if n < 0
|
if n < 0
|
||||||
for i in 0..files->size
|
array.free_with_items(files)
|
||||||
mem.free(array.nth(files, i))
|
|
||||||
array.free(files)
|
|
||||||
|
|
||||||
_builtin_syscall(SYS_close, fd)
|
_builtin_syscall(SYS_close, fd)
|
||||||
return 0 as Array, false
|
return 0 as Array, false
|
||||||
else if n == 0
|
else if n == 0
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ impl FnType {
|
|||||||
|
|
||||||
pub struct SymbolTable {
|
pub struct SymbolTable {
|
||||||
pub functions: HashMap<String, FnType>,
|
pub functions: HashMap<String, FnType>,
|
||||||
pub constants: HashMap<String, u64>,
|
pub constants: HashMap<String, i64>,
|
||||||
pub structs: HashMap<String, HashMap<String, StructField>>,
|
pub structs: HashMap<String, HashMap<String, StructField>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,24 +63,21 @@ impl SymbolTable {
|
|||||||
|
|
||||||
pub fn register_declaration(&mut self, stmt: &Stmt) -> Result<(), ZernError> {
|
pub fn register_declaration(&mut self, stmt: &Stmt) -> Result<(), ZernError> {
|
||||||
match stmt {
|
match stmt {
|
||||||
Stmt::Const { name, value } => {
|
Stmt::Const { name, value, neg } => {
|
||||||
if self.is_name_defined(&name.lexeme) {
|
if self.is_name_defined(&name.lexeme) {
|
||||||
return error!(name.loc, format!("tried to redefine '{}'", name.lexeme));
|
return error!(name.loc, format!("tried to redefine '{}'", name.lexeme));
|
||||||
}
|
}
|
||||||
if value.lexeme.starts_with("0x") {
|
let mut value = if value.lexeme.starts_with("0x") {
|
||||||
self.constants.insert(
|
u64::from_str_radix(&value.lexeme[2..], 16).unwrap()
|
||||||
name.lexeme.clone(),
|
|
||||||
u64::from_str_radix(&value.lexeme[2..], 16).unwrap(),
|
|
||||||
);
|
|
||||||
} else if value.lexeme.starts_with("0o") {
|
} else if value.lexeme.starts_with("0o") {
|
||||||
self.constants.insert(
|
u64::from_str_radix(&value.lexeme[2..], 8).unwrap()
|
||||||
name.lexeme.clone(),
|
|
||||||
u64::from_str_radix(&value.lexeme[2..], 8).unwrap(),
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
self.constants
|
value.lexeme.parse().unwrap()
|
||||||
.insert(name.lexeme.clone(), value.lexeme.parse().unwrap());
|
} as i64;
|
||||||
|
if *neg {
|
||||||
|
value = -value;
|
||||||
}
|
}
|
||||||
|
self.constants.insert(name.lexeme.clone(), value);
|
||||||
}
|
}
|
||||||
Stmt::Extern(name) => {
|
Stmt::Extern(name) => {
|
||||||
if self.is_name_defined(&name.lexeme) {
|
if self.is_name_defined(&name.lexeme) {
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ impl<'a> TypeChecker<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Stmt::Const { name: _, value: _ } => {
|
Stmt::Const { .. } => {
|
||||||
// handled in SymbolTable
|
// handled in SymbolTable
|
||||||
}
|
}
|
||||||
Stmt::Block(stmts) => {
|
Stmt::Block(stmts) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user