@@ -19,13 +19,10 @@ int printf(const char *fmt, ...);
1919#define EXTLIB_IMPL
2020#include "../extlib.h"
2121
22- Arena arena = make_arena ();
22+ static Arena arena = make_arena ();
2323
24- const char * prec [] = {
25- "+-" ,
26- "*/" ,
27- };
28- const size_t max_prec = ARR_SIZE (prec );
24+ static const char * prec [] = {"+-" , "*/" };
25+ static const size_t max_prec = ARR_SIZE (prec );
2926
3027size_t get_prec (char op ) {
3128 for (size_t i = 0 ; i < ARR_SIZE (prec ); i ++ ) {
@@ -54,7 +51,7 @@ typedef struct Expr {
5451 } as ;
5552} Expr ;
5653
57- void error (const Src * src , const char * msg ) {
54+ static void error (const Src * src , const char * msg ) {
5855 int col = src -> ptr - src -> src ;
5956 ASSERT (col >= 0 , "negative column" );
6057 printf ("%d: " , col );
@@ -70,19 +67,19 @@ static int is_space(int c) {
7067 return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r' ;
7168}
7269
73- char advance (Src * src ) {
70+ static char advance (Src * src ) {
7471 while (is_space (* src -> ptr )) src -> ptr ++ ;
7572 return * src -> ptr ++ ;
7673}
7774
78- char peek (const Src * src ) {
75+ static char peek (const Src * src ) {
7976 Src s = * src ;
8077 return advance (& s );
8178}
8279
83- Expr * parse_bin_expr (Src * expr , size_t prec );
80+ static Expr * parse_bin_expr (Src * expr , size_t prec );
8481
85- Expr * parse_lit (Src * src ) {
82+ static Expr * parse_lit (Src * src ) {
8683 char c = advance (src );
8784
8885 if (c == '(' ) {
@@ -122,7 +119,7 @@ Expr *parse_lit(Src *src) {
122119 return lit ;
123120}
124121
125- Expr * parse_bin_expr (Src * src , size_t prec ) {
122+ static Expr * parse_bin_expr (Src * src , size_t prec ) {
126123 if (prec >= max_prec ) return parse_lit (src );
127124
128125 Expr * l = parse_bin_expr (src , prec + 1 );
@@ -144,7 +141,7 @@ Expr *parse_bin_expr(Src *src, size_t prec) {
144141 return l ;
145142}
146143
147- Expr * parse_expr (const char * expr ) {
144+ static Expr * parse_expr (const char * expr ) {
148145 Src src = {expr , expr };
149146 Expr * res = parse_bin_expr (& src , 0 );
150147 if (!res ) return NULL ;
@@ -158,7 +155,7 @@ Expr *parse_expr(const char *expr) {
158155 return res ;
159156}
160157
161- double interpret_expr (const Expr * e ) {
158+ static double interpret_expr (const Expr * e ) {
162159 ASSERT (e , "e is NULL" );
163160 switch (e -> kind ) {
164161 case BIN : {
@@ -183,7 +180,21 @@ double interpret_expr(const Expr *e) {
183180 UNREACHABLE ();
184181}
185182
186- void dump_expr (const Expr * e ) {
183+ #ifdef EXTLIB_WASM
184+ // Export function in wasm to pase & evaluate an expression (see 03_arena.html)
185+ double eval_expr (char * src ) {
186+ Expr * expr = parse_expr (src );
187+ if (!expr ) {
188+ arena_reset (& arena );
189+ return 0.0 / 0.0 ; // NaN
190+ }
191+
192+ double res = interpret_expr (expr );
193+ arena_reset (& arena );
194+ return res ;
195+ }
196+ #else
197+ static void dump_expr (const Expr * e ) {
187198 ASSERT (e , "e is NULL" );
188199 switch (e -> kind ) {
189200 case BIN :
@@ -199,20 +210,6 @@ void dump_expr(const Expr *e) {
199210 }
200211}
201212
202- #ifdef EXTLIB_WASM
203- // Export function in wasm to pase & evaluate an expression (see 03_arena.html)
204- double eval_expr (char * src ) {
205- Expr * expr = parse_expr (src );
206- if (!expr ) {
207- arena_reset (& arena );
208- return 0.0 / 0.0 ; // NaN
209- }
210-
211- double res = interpret_expr (expr );
212- arena_reset (& arena );
213- return res ;
214- }
215- #else
216213int main (int argc , char * * argv ) {
217214 if (argc < 2 ) {
218215 fprintf (stderr , "%s expression\n" , argv [0 ]);
0 commit comments