bug fixed & raw string print
This commit is contained in:
parent
61677101e4
commit
884b56ac09
21
nasal.h
21
nasal.h
|
@ -116,6 +116,27 @@ std::string num2str(double number)
|
|||
ss<<number;
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
/*
|
||||
show raw string
|
||||
*/
|
||||
void raw_string(std::string& str)
|
||||
{
|
||||
for(auto i:str)
|
||||
switch(i)
|
||||
{
|
||||
case '\a': std::cout<<"\\a";break;
|
||||
case '\b': std::cout<<"\\b";break;
|
||||
case '\f': std::cout<<"\\f";break;
|
||||
case '\n': std::cout<<"\\n";break;
|
||||
case '\r': std::cout<<"\\r";break;
|
||||
case '\t': std::cout<<"\\t";break;
|
||||
case '\v': std::cout<<"\\v";break;
|
||||
case '\0': std::cout<<"\\0";break;
|
||||
default: std::cout<<i; break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
#include "nasal_lexer.h"
|
||||
#include "nasal_ast.h"
|
||||
#include "nasal_parse.h"
|
||||
|
|
|
@ -132,7 +132,10 @@ void nasal_ast::print_ast(int depth)
|
|||
std::cout<<"| ";
|
||||
std::cout<<ast_name[type];
|
||||
if(type==ast_str || type==ast_id || type==ast_default_arg || type==ast_dynamic_id || type==ast_callh)
|
||||
std::cout<<":"<<str;
|
||||
{
|
||||
std::cout<<":";
|
||||
raw_string(str);
|
||||
}
|
||||
else if(type==ast_num || type==ast_file)
|
||||
std::cout<<":"<<num;
|
||||
std::cout<<'\n';
|
||||
|
|
|
@ -1236,7 +1236,11 @@ void nasal_codegen::print_op(int index)
|
|||
case op_mcallh:
|
||||
case op_para:
|
||||
case op_defpara:
|
||||
case op_dynpara:printf(" (%s)\n",str_res_table[exec_code[index].num].c_str());break;
|
||||
case op_dynpara:
|
||||
printf(" (");
|
||||
raw_string(str_res_table[exec_code[index].num]);
|
||||
printf(")\n");
|
||||
break;
|
||||
default:printf("\n");break;
|
||||
}
|
||||
return;
|
||||
|
@ -1247,7 +1251,11 @@ void nasal_codegen::print_byte_code()
|
|||
for(auto& num:num_res_table)
|
||||
std::cout<<".number "<<num<<'\n';
|
||||
for(auto& str:str_res_table)
|
||||
std::cout<<".symbol "<<str<<'\n';
|
||||
{
|
||||
std::cout<<".symbol ";
|
||||
raw_string(str);
|
||||
std::cout<<'\n';
|
||||
}
|
||||
for(int i=0;i<exec_code.size();++i)
|
||||
print_op(i);
|
||||
return;
|
||||
|
|
17
nasal_vm.h
17
nasal_vm.h
|
@ -151,19 +151,18 @@ void nasal_vm::die(std::string str)
|
|||
printf("vm stack(limit 10):\n");
|
||||
for(int i=0;i<10 && stack_top-i>=gc.val_stack;++i)
|
||||
{
|
||||
printf("\t0x%.p ",stack_top[-i]);
|
||||
if(!stack_top[-i])
|
||||
printf(" nullptr\n");
|
||||
printf("\t%p nullptr\n",stack_top[-i]);
|
||||
else
|
||||
switch(stack_top[-i]->type)
|
||||
{
|
||||
case vm_nil: printf("nil\n");break;
|
||||
case vm_num: printf("num %lf\n",stack_top[-i]->ptr.num); break;
|
||||
case vm_str: printf("str at %p\n",stack_top[-i]->ptr.str); break;
|
||||
case vm_func: printf("func at %p\n",stack_top[-i]->ptr.func);break;
|
||||
case vm_vec: printf("vec at %p\n",stack_top[-i]->ptr.vec); break;
|
||||
case vm_hash: printf("hash at %p\n",stack_top[-i]->ptr.hash);break;
|
||||
default: printf("unknown\n");break;
|
||||
case vm_nil: printf("\t%p nil\n",stack_top[-i]);break;
|
||||
case vm_num: printf("\t%p num :%lf\n",stack_top[-i],stack_top[-i]->ptr.num);break;
|
||||
case vm_str: printf("\t%p str :",stack_top[-i]->ptr.str);raw_string(*stack_top[-i]->ptr.str);putchar('\n');break;
|
||||
case vm_func: printf("\t%p func\n",stack_top[-i]->ptr.func);break;
|
||||
case vm_vec: printf("\t%p vec \n",stack_top[-i]->ptr.vec); break;
|
||||
case vm_hash: printf("\t%p hash\n",stack_top[-i]->ptr.hash);break;
|
||||
default: printf("\t%p unknown\n",stack_top[-i]);break;
|
||||
}
|
||||
}
|
||||
gc.val_stack[STACK_MAX_DEPTH-1]=(nasal_val*)0xffff;
|
||||
|
|
Loading…
Reference in New Issue