@@ -46,92 +46,87 @@ char* getVariableString(char *name) {
4646 return getSymbolValueString (symbol_name );
4747}
4848
49+ unsigned long getListLength (char * name ) {
50+ Symbol * symbol = getSymbol (name );
51+ return symbol -> children_count ;
52+ }
53+
4954bool getListElementBool (char * name , long long i ) {
50- char * symbol_name = malloc (strlen (name ) + 1 );
51- strcpy (symbol_name , name );
52- Symbol * symbol = getListElement (getSymbol (symbol_name ), i );
55+ Symbol * symbol = getListElement (getSymbol (name ), i );
5356 if (symbol -> value_type != V_BOOL ) {
5457 throw_error (E_UNEXPECTED_VALUE_TYPE , getValueTypeName (symbol -> value_type ), symbol -> name );
5558 }
56- return symbol -> value . b ;
59+ return _getSymbolValueBool ( symbol ) ;
5760}
5861
5962long long getListElementInt (char * name , long long i ) {
60- char * symbol_name = malloc (strlen (name ) + 1 );
61- strcpy (symbol_name , name );
62- Symbol * symbol = getListElement (getSymbol (symbol_name ), i );
63+ Symbol * symbol = getListElement (getSymbol (name ), i );
6364 if (symbol -> value_type != V_INT ) {
6465 throw_error (E_UNEXPECTED_VALUE_TYPE , getValueTypeName (symbol -> value_type ), symbol -> name );
6566 }
66- return symbol -> value . i ;
67+ return _getSymbolValueInt ( symbol ) ;
6768}
6869
6970long double getListElementFloat (char * name , long long i ) {
70- char * symbol_name = malloc (strlen (name ) + 1 );
71- strcpy (symbol_name , name );
72- Symbol * symbol = getListElement (getSymbol (symbol_name ), i );
73- free (symbol_name );
71+ Symbol * symbol = getListElement (getSymbol (name ), i );
7472 if (symbol -> value_type != V_FLOAT ) {
7573 throw_error (E_UNEXPECTED_VALUE_TYPE , getValueTypeName (symbol -> value_type ), symbol -> name );
7674 }
77- return symbol -> value . f ;
75+ return _getSymbolValueFloat ( symbol ) ;
7876}
7977
8078char * getListElementString (char * name , long long i ) {
81- char * symbol_name = malloc (strlen (name ) + 1 );
82- strcpy (symbol_name , name );
83- Symbol * symbol = getListElement (getSymbol (symbol_name ), i );
79+ Symbol * symbol = getListElement (getSymbol (name ), i );
8480 if (symbol -> value_type != V_STRING ) {
8581 throw_error (E_UNEXPECTED_VALUE_TYPE , getValueTypeName (symbol -> value_type ), symbol -> name );
8682 }
87- char * value ;
88- value = malloc (1 + strlen (symbol -> value .s ));
89- strcpy (value , symbol -> value .s );
90- return value ;
83+ return _getSymbolValueString (symbol );
84+ }
85+
86+ unsigned long getDictLength (char * name ) {
87+ Symbol * symbol = getSymbol (name );
88+ return symbol -> children_count ;
89+ }
90+
91+ char * getDictKeyByIndex (char * name , long long i ) {
92+ Symbol * symbol = getSymbol (name );
93+ Symbol * child = symbol -> children [i ];
94+ char * key ;
95+ key = malloc (1 + strlen (child -> key ));
96+ strcpy (key , child -> key );
97+ return key ;
9198}
9299
93100bool getDictElementBool (char * name , char * key ) {
94- char * symbol_name = malloc (strlen (name ) + 1 );
95- strcpy (symbol_name , name );
96- Symbol * symbol = getDictElement (getSymbol (symbol_name ), key );
101+ Symbol * symbol = getDictElement (getSymbol (name ), key );
97102 if (symbol -> value_type != V_BOOL ) {
98103 throw_error (E_UNEXPECTED_VALUE_TYPE , getValueTypeName (symbol -> value_type ), symbol -> name );
99104 }
100- return symbol -> value . b ;
105+ return _getSymbolValueBool ( symbol ) ;
101106}
102107
103108long long getDictElementInt (char * name , char * key ) {
104- char * symbol_name = malloc (strlen (name ) + 1 );
105- strcpy (symbol_name , name );
106- Symbol * symbol = getDictElement (getSymbol (symbol_name ), key );
109+ Symbol * symbol = getDictElement (getSymbol (name ), key );
107110 if (symbol -> value_type != V_INT ) {
108111 throw_error (E_UNEXPECTED_VALUE_TYPE , getValueTypeName (symbol -> value_type ), symbol -> name );
109112 }
110- return symbol -> value . i ;
113+ return _getSymbolValueInt ( symbol ) ;
111114}
112115
113116long double getDictElementFloat (char * name , char * key ) {
114- char * symbol_name = malloc (strlen (name ) + 1 );
115- strcpy (symbol_name , name );
116- Symbol * symbol = getDictElement (getSymbol (symbol_name ), key );
117+ Symbol * symbol = getDictElement (getSymbol (name ), key );
117118 if (symbol -> value_type != V_FLOAT ) {
118119 throw_error (E_UNEXPECTED_VALUE_TYPE , getValueTypeName (symbol -> value_type ), symbol -> name );
119120 }
120- return symbol -> value . f ;
121+ return _getSymbolValueFloat ( symbol ) ;
121122}
122123
123124char * getDictElementString (char * name , char * key ) {
124- char * symbol_name = malloc (strlen (name ) + 1 );
125- strcpy (symbol_name , name );
126- Symbol * symbol = getDictElement (getSymbol (symbol_name ), key );
127- free (symbol_name );
125+ Symbol * symbol = getDictElement (getSymbol (name ), key );
128126 if (symbol -> value_type != V_STRING ) {
129127 throw_error (E_UNEXPECTED_VALUE_TYPE , getValueTypeName (symbol -> value_type ), symbol -> name );
130128 }
131- char * value ;
132- value = malloc (1 + strlen (symbol -> value .s ));
133- strcpy (value , symbol -> value .s );
134- return value ;
129+ return _getSymbolValueString (symbol );
135130}
136131
137132void returnVariableBool (bool b ) {
0 commit comments