August 10: Still trying to reduce the code. Tried to remove the int *success parameter of the expand_string() function. This parameter tells the calling function whether a new word was recognised. However, I had some problems in case of the line-continuation \.

for i in 1 2 3 \
  4 5 6    # the space at the beginning of this line causes the problem
    echo ${i}

seems to require some way to see that the \<newline> is not a new word.

August 11: Decided to try using the gen_stack for the arithmetic parser code. The benefits should include a simpler memory allocation strategy. The idea is to use an explicit stack to store the operands. When an operator is found, the top of the stack should contain the (evaluated) left operator. Then the right operator is evaluated, and pushed on the stack by recursive calls to the parsing function. Then the top two elements of the stack are popped, evaluated, and the result is pushed back. If at any time an error is found, the top-level function frees the stack. This frees up the other functions from having to free the temporary values.

August 13: Finally used the gen_stack for arith.c. Size check: After:

 2276	      8	     16	   2300	    8fc	bin/arith.o


 2172	      0	     16	   2188	    88c	bin/arith.o

However, I had some problems with the branches and loops, so that doesn't work just yet. Have to fix it next. Also split the gen_stack commit out of the quoting patch.

August 14: Fixed up the branching and loop code. Using the new gen_stack code made me change a lot of things in the offset branch. Since I was focussing mostly on the arith.c changes, I just tried to make this part compile properly. So, today, I worked on fixing it up.

August 16: Okay, so it's the end of GSoC, and it's been an enjoyable time. To summarise the work done so far:

Features implemented:

  • Quoting
  • Arithmetic parser
  • If-else branches
  • Looping
  • Return code

'Supporting' additions:

  • Generic stack
  • Simple automated testing of scripts, using qemu

Documentation of the features can be found here. The code can be found in the expt branch of my git repository. I'll be sending in the changes in a series of patches to the etherboot-developers mailing list. Size check: After:

159	      0	      0	    159	     9f	bin/gen_stack.o
602	     24	      4	    630	    276	bin/shell.o
639	     12	      4	    655	    28f	bin/exec.o
1079	      0	      0	   1079	    437	bin/parse.o
1855	    160	     24	   2039	    7f7	bin/if_cmd.o
2308	      8	     16	   2332	    91c	bin/arith.o
87732	  11528	 139822	 239082	  3a5ea	(TOTALS)

Compressed size: 59392


321	     16	      4	    341	    155	bin/shell.o
629	      8	      0	    637	    27d	bin/exec.o
81979	  11308	 139774	 233061	  38e65	(TOTALS)

Compressed size: 55808

QR Code
QR Code soc:2009:lynusvaz:journal:week12 (generated for current page)