History

improved instruction dump line info; fixed examples typos

Ge Wang committed 3 years ago

Commit 1038f5a1 parent 4f3e7308 files · +132 −27Browse files

Showing the changes to src/core/chuck_parse.cpp (1 of 8 files). Show all

Unified · Split

src/core/chuck_parse.cpp+66−14
@@ -316,6 +316,22 @@ string absyn2str( a_Exp exp ) · 315 unmodified lines
316 316
317 317
318 318
319//-----------------------------------------------------------------------------
320// name: name_demangle()
321// desc: demangle chuck function names
322// e.g., input: "version@0@Machine" output: "version"
323//-----------------------------------------------------------------------------
324string name_demangle( const string & name )
325{
326 // find the first @
327 size_t pos = name.find_first_of('@');
328 // if found, substring
329 return ( pos != string::npos ) ? name.substr(0,pos) : name;
330}
331
332
333
334
319//-----------------------------------------------------------------------------335//-----------------------------------------------------------------------------
320// name: absyn_exp2str()336// name: absyn_exp2str()
321// desc: convert abstract syntax exp to string337// desc: convert abstract syntax exp to string
@@ -387,7 +403,7 @@ string absyn_exp2str( a_Exp exp, t_CKBOOL iterate ) · 65 unmodified lines
387 // next403 // next
388 exp = exp->next;404 exp = exp->next;
389 // if more405 // if more
390 if( exp ) str += ", ";406 if( exp ) str += ",";
391 }407 }
392 408
393 return str;409 return str;
@@ -467,10 +483,48 @@ string absyn_op2str( ae_Operator op ) · 73 unmodified lines
467//-----------------------------------------------------------------------------483//-----------------------------------------------------------------------------
468string absyn_binary2str( a_Exp_Binary binary )484string absyn_binary2str( a_Exp_Binary binary )
469{485{
486 string lhs = absyn_exp2str(binary->lhs);
487 string op = absyn_op2str(binary->op);
488 string rhs = absyn_exp2str(binary->rhs);
489
490 // use paren?
491 bool paren = false;
492 // spacing?
493 bool spacing = false;
494
495 switch(binary->op)
496 {
497 case ae_op_plus_chuck:
498 case ae_op_minus_chuck:
499 case ae_op_times_chuck:
500 case ae_op_divide_chuck:
501 case ae_op_s_or_chuck:
502 case ae_op_s_and_chuck:
503 case ae_op_shift_left_chuck:
504 case ae_op_shift_right_chuck:
505 case ae_op_percent_chuck:
506 case ae_op_s_xor_chuck:
507 case ae_op_chuck:
508 case ae_op_unchuck:
509 case ae_op_upchuck:
510 case ae_op_lt:
511 case ae_op_gt:
512 case ae_op_le:
513 case ae_op_ge:
514 case ae_op_at_chuck:
515 paren = false;
516 spacing = true;
517 break;
518 default:
519 paren = true;
520 spacing = false;
521 break;
522 }
523
470 // (lhs OP rhs)524 // (lhs OP rhs)
471 return "(" + absyn_exp2str(binary->lhs)525 string str = string(paren?"(":"") + lhs + (spacing?" ":"") + op + (spacing?" ":"") + rhs + (paren?")":"");
472 + absyn_op2str(binary->op)526 // return
473 + absyn_exp2str(binary->rhs) + ")";527 return str;
474}528}
475 529
476 530
@@ -495,7 +549,7 @@ string absyn_unary2str( a_Exp_Unary unary ) · 18 unmodified lines
495string absyn_cast2str( a_Exp_Cast cast )549string absyn_cast2str( a_Exp_Cast cast )
496{550{
497 Chuck_Type * to = cast->self->type;551 Chuck_Type * to = cast->self->type;
498 return "$ " + to->name;552 return absyn_exp2str(cast->exp) + "$" + to->name;
499}553}
500 554
501 555
@@ -538,9 +592,9 @@ string absyn_primary2str( a_Exp_Primary primary ) · 36 unmodified lines
538 {592 {
539 case ae_primary_var: str = S_name(primary->var); break;593 case ae_primary_var: str = S_name(primary->var); break;
540 case ae_primary_num: str = to_string(primary->num); break;594 case ae_primary_num: str = to_string(primary->num); break;
541 case ae_primary_float: str = primary->fnum; break;595 case ae_primary_float: str = to_string(primary->fnum); break;
542 case ae_primary_str: str = primary->str; break;596 case ae_primary_str: str = string("\"") + primary->str + "\""; break;
543 case ae_primary_char: str = primary->chr; break;597 case ae_primary_char: str = string("'") + primary->chr + "'"; break;
544 case ae_primary_array: str = "["+absyn_exp2str(primary->array->exp_list)+"]"; break;598 case ae_primary_array: str = "["+absyn_exp2str(primary->array->exp_list)+"]"; break;
545 case ae_primary_complex: str = "#("+absyn_exp2str(primary->complex->re)+")"; break;599 case ae_primary_complex: str = "#("+absyn_exp2str(primary->complex->re)+")"; break;
546 case ae_primary_polar: str = "%("+absyn_exp2str(primary->polar->mod)+")"; break;600 case ae_primary_polar: str = "%("+absyn_exp2str(primary->polar->mod)+")"; break;
@@ -564,10 +618,7 @@ string absyn_primary2str( a_Exp_Primary primary ) · 17 unmodified lines
564string absyn_array2str( a_Exp_Array array )618string absyn_array2str( a_Exp_Array array )
565{619{
566 string str;620 string str;
567
568 t_CKUINT depth = 0;
569 a_Array_Sub sub = NULL;621 a_Array_Sub sub = NULL;
570 t_CKBOOL is_str = FALSE;
571 622
572 // get the sub623 // get the sub
573 sub = array->indices;624 sub = array->indices;
@@ -600,7 +651,7 @@ string absyn_func_call2str( a_Exp_Func_Call func_call ) · 26 unmodified lines
600{651{
601 string str;652 string str;
602 // function name653 // function name
603 str = absyn_exp2str( func_call->func );654 str = name_demangle( absyn_exp2str( func_call->func ) );
604 // args655 // args
605 str += "(" + absyn_exp2str( func_call->args ) + ")";656 str += "(" + absyn_exp2str( func_call->args ) + ")";
606 // done657 // done
@@ -616,7 +667,8 @@ string absyn_func_call2str( a_Exp_Func_Call func_call ) · 9 unmodified lines
616//-----------------------------------------------------------------------------667//-----------------------------------------------------------------------------
617string absyn_dot_member2str( a_Exp_Dot_Member dot_member )668string absyn_dot_member2str( a_Exp_Dot_Member dot_member )
618{669{
619 return absyn_exp2str(dot_member->base) + "." + S_name(dot_member->xid);670 // return
671 return absyn_exp2str(dot_member->base) + "." + name_demangle(S_name(dot_member->xid));
620}672}
621 673
622 674
@@ -651,7 +703,7 @@ string absyn_decl2str( a_Exp_Decl decl ) · 28 unmodified lines
651 while( list )703 while( list )
652 {704 {
653 // type705 // type
654 str += list->var_decl->value->type->name + " " + (decl->type->ref ? "@" : "") + list->var_decl->value->name;706 str += list->var_decl->value->type->name + " " + (decl->type->ref && !list->var_decl->array ? "@ " : "") + list->var_decl->value->name;
655 // array?707 // array?
656 if( list->var_decl->array )708 if( list->var_decl->array )
657 {709 {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t