summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2015-03-01 13:53:00 -0500
committerAdrian Thurston <thurston@complang.org>2015-03-01 13:53:20 -0500
commitb2a6b17f584b4bfcedbb405a65d020506cd82458 (patch)
tree8d65e4e5c2b639782c0c533fcc38533e6900aaaf
parent848106870a46f39e4537253900512f44282e55df (diff)
downloadcolm-b2a6b17f584b4bfcedbb405a65d020506cd82458.tar.gz
various minor cleanup in bytecode
-rw-r--r--src/bytecode.c29
-rw-r--r--src/bytecode.h5
-rw-r--r--src/declare.cc4
-rw-r--r--src/string.c6
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;
}