diff options
author | Adrian Thurston <thurston@complang.org> | 2015-03-01 13:53:00 -0500 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2015-03-01 13:53:20 -0500 |
commit | b2a6b17f584b4bfcedbb405a65d020506cd82458 (patch) | |
tree | 8d65e4e5c2b639782c0c533fcc38533e6900aaaf /src | |
parent | 848106870a46f39e4537253900512f44282e55df (diff) | |
download | colm-b2a6b17f584b4bfcedbb405a65d020506cd82458.tar.gz |
various minor cleanup in bytecode
Diffstat (limited to 'src')
-rw-r--r-- | src/bytecode.c | 29 | ||||
-rw-r--r-- | src/bytecode.h | 5 | ||||
-rw-r--r-- | src/declare.cc | 4 | ||||
-rw-r--r-- | src/string.c | 6 |
4 files changed, 21 insertions, 23 deletions
diff --git a/src/bytecode.c b/src/bytecode.c index 0acfd137..2014de8a 100644 --- a/src/bytecode.c +++ b/src/bytecode.c @@ -1398,16 +1398,14 @@ again: case IN_SPRINTF: { debug( prg, REALM_BYTECODE, "IN_SPRINTF\n" ); - Tree *f = vm_pop(); - f++; - Tree *integer = vm_pop(); - Tree *format = vm_pop(); - Head *res = stringSprintf( prg, (Str*)format, (Int*)integer ); - Tree *str = constructString( prg, res ); - treeUpref( str ); - vm_push( str ); - //treeDownref( prg, sp, integer ); - treeDownref( prg, sp, format ); + vm_pop(); + Value integer = vm_pop_value(); + Str *format = vm_pop_string(); + Head *res = stringSprintf( prg, format, (long)integer ); + Str *str = (Str*)constructString( prg, res ); + treeUpref( (Tree*)str ); + vm_push_string( str ); + treeDownref( prg, sp, (Tree*)format ); break; } case IN_INT_TO_STR: { @@ -1418,7 +1416,6 @@ again: Tree *str = constructString( prg, res ); treeUpref( str ); vm_push( str ); -// treeDownref( prg, sp, (Tree*) i ); break; } case IN_TREE_TO_STR: { @@ -3439,7 +3436,7 @@ again: case IN_STR_ATOI: { debug( prg, REALM_BYTECODE, "IN_STR_ATOI\n" ); - Str *str = (Str*)vm_pop(); + Str *str = vm_pop_string(); Word res = strAtoi( str->value ); Value integer = res; vm_push_value( integer ); @@ -3449,7 +3446,7 @@ again: case IN_STR_UORD8: { debug( prg, REALM_BYTECODE, "IN_STR_UORD8\n" ); - Str *str = (Str*)vm_pop(); + Str *str = vm_pop_string(); Word res = strUord8( str->value ); Value integer = res; vm_push_value( integer ); @@ -3459,7 +3456,7 @@ again: case IN_STR_UORD16: { debug( prg, REALM_BYTECODE, "IN_STR_UORD16\n" ); - Str *str = (Str*)vm_pop(); + Str *str = vm_pop_string(); Word res = strUord16( str->value ); Value integer = res; vm_push_value( integer ); @@ -3474,7 +3471,7 @@ again: Str *res = string_prefix( prg, str, (long) len ); treeUpref( (Tree*) res ); - vm_push( (Tree*)res ); + vm_push_string( res ); treeDownref( prg, sp, (Tree*)str ); break; } @@ -3486,7 +3483,7 @@ again: Str *res = string_suffix( prg, str, (long) pos ); treeUpref( (Tree*) res ); - vm_push( (Tree*)res ); + vm_push_string( res ); treeDownref( prg, sp, (Tree*)str ); break; } diff --git a/src/bytecode.h b/src/bytecode.h index 474ec6b4..f332bfda 100644 --- a/src/bytecode.h +++ b/src/bytecode.h @@ -524,14 +524,15 @@ enum LEL_ID { #define vm_push_struct(i) vm_push_type(Struct*, i) #define vm_push_parser(i) vm_push_type(Parser*, i) #define vm_push_value(i) vm_push_type(Value, i) +#define vm_push_string(i) vm_push_type(Str*, i) #define vm_pop_stream() vm_pop_type(Stream*) -#define vm_pop_string() vm_pop_type(Str*) #define vm_pop_struct() vm_pop_type(Struct*) #define vm_pop_parser() vm_pop_type(Parser*) #define vm_pop_list() vm_pop_type(List*) #define vm_pop_map() vm_pop_type(Map*) #define vm_pop_value() vm_pop_type(Value) +#define vm_pop_string() vm_pop_type(Str*) #define vm_pop_ignore() \ ({ (sp+1) >= prg->sb_end ? (sp = vm_bs_pop(prg, sp, 1)) : (sp += 1); }) @@ -596,7 +597,7 @@ Word strUord8( Head *head ); Word cmpString( Head *s1, Head *s2 ); Head *stringToUpper( Head *s ); Head *stringToLower( Head *s ); -Head *stringSprintf( struct colm_program *prg, Str *format, Int *integer ); +Head *stringSprintf( Program *prg, Str *format, long integer ); Head *makeLiteral( struct colm_program *prg, long litoffset ); Head *intToStr( struct colm_program *prg, Word i ); diff --git a/src/declare.cc b/src/declare.cc index 63461251..3e672b28 100644 --- a/src/declare.cc +++ b/src/declare.cc @@ -821,10 +821,10 @@ void Compiler::declareStrFields( ) initFunction( uniqueTypeStr, strObj, "suffix", IN_STR_SUFFIX, IN_STR_SUFFIX, uniqueTypeInt, true, true ); - addLengthField( strObj, IN_STR_LENGTH ); - initFunction( uniqueTypeStr, globalObjectDef, "sprintf", IN_SPRINTF, IN_SPRINTF, uniqueTypeStr, uniqueTypeInt, true ); + + addLengthField( strObj, IN_STR_LENGTH ); } void Compiler::declareStreamFields( ) diff --git a/src/string.c b/src/string.c index 528229d0..ba55923c 100644 --- a/src/string.c +++ b/src/string.c @@ -258,12 +258,12 @@ Head *makeLiteral( Program *prg, long offset ) prg->rtd->litlen[offset] ); } -Head *stringSprintf( Program *prg, Str *format, Int *integer ) +Head *stringSprintf( Program *prg, Str *format, long integer ) { Head *formatHead = format->value; - long written = snprintf( 0, 0, stringData(formatHead), (long)integer ); + long written = snprintf( 0, 0, stringData(formatHead), integer ); Head *head = initStrSpace( written+1 ); - written = snprintf( (char*)head->data, written+1, stringData(formatHead), (long)integer ); + written = snprintf( (char*)head->data, written+1, stringData(formatHead), integer ); head->length -= 1; return head; } |