1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- #include "bbtypes.h"
- #include "bbstring.h"
- namespace{
- bbString typeName( const char *&p );
-
- bbString funcName( const char *&p ){
-
- bbString retType=typeName( p ),argTypes;
- while( *p && *p!='E' ){
- if( argTypes.length() ) argTypes+=",";
- argTypes+=typeName( p );
- }
- if( *p ) ++p;
-
- return retType+"("+argTypes+")";
- }
- bbString arrayName( const char *&p ){
-
- int rank=1;
- if( *p>'0' && *p<='9' ) rank=(*p++)-'0';
-
- bbString e=typeName( p );
-
- return e+bbString( "[,,,,,,,,,",rank )+"]";
- }
-
- bbString className( const char *&p ){
- bbString name;
-
- const char *p0=p;
- for( ;; ){
-
- if( !*p ) return name+bbString( p0,p-p0 );
-
- if( *p++!='_' ) continue;
-
- name+=bbString( p0,p-p0-1 );
-
- char c=*p++;
-
- if( c=='0' ){
-
- name+="_";
-
- }else if( c=='1' ){
- bbString types;
- while( *p && *p!='E' ){
- if( types.length() ) types+=",";
- types+=typeName( p );
- }
- name+="<"+types+">";
- if( !*p ) return name;
- ++p;
-
- }else if( c=='2' ){
-
- return name;
-
- }else{
-
- name+=".";
- p0=p-1;
- continue;
- }
-
- p0=p;
- }
- }
-
- bbString typeName( const char *&p ){
- switch( *p++ ){
- case 'v':return "Void";
- case 'z':return "Bool";
- case 'i':return "Int";
- case 'f':return "Float";
- case 's':return "String";
- case 'F':return funcName( p );
- case 'A':return arrayName( p );
- case 'T':return className( p );
- case 'P':return typeName( p )+" Ptr";
- }
- return "?!?!?";
- }
- }
- bbString bbTypeName( const char *type ){
- return typeName( type );
- }
|